2 // control/visual/list.qc
4 float() _IL_GetItemUnderCursor =
10 lLines = floor( self.size_y / ( self.fontSize_y + 2 ) );
11 lStart = max( 0, floor( DataLink_Switch_GetOrdinal( self._target, self._target._realValue ) - lLines / 2 ) );
12 lItem = floor( ( Menu_Cursor_Position_y - self.pos_y ) / ( self.fontSize_y + 2 ) );
13 lItem = min( lStart + lItem, DataLink_Switch_GetOrdinal( self._target, self._target.maxValue ) );
18 void() Item_List_Draw =
25 local float lItemUnderCursor;
30 Raise_DataEvent( self._target, ITEM_DATALINK_GET );
31 lLines = floor( self.size_y / ( self.fontSize_y + 2 ) );
32 lStart = max( 0, floor( DataLink_Switch_GetOrdinal( self._target, self._target._realValue ) - lLines / 2 ) );
33 lEnd = min( lStart + lLines, DataLink_Switch_GetOrdinal( self._target, self._target.maxValue ) );
35 if( self._state == ITEM_STATE_NORMAL ) {
36 lItemUnderCursor = -1;
38 lItemUnderCursor = _IL_GetItemUnderCursor();
41 lPos = '0 1 0' + self.pos;
42 for( lLine = lStart ; lLine <= lEnd ; lLine++ ) {
44 lText = Util_GetAltStringItem( self._target.descList, lLine );
45 if( lLine == DataLink_Switch_GetOrdinal( self._target, self._target._realValue ) ) {
46 if( self._state == ITEM_STATE_SELECTED )
47 Menu_DrawString( lPos, lText, self.fontSize, self.colorSelected, self.alphas_y, self.drawFlags_y );
48 else if( self._state == ITEM_STATE_PRESSED )
49 Menu_DrawString( lPos, lText, self.fontSize, self.colorPressed, self.alphas_z, self.drawFlags_z );
51 Menu_DrawString( lPos, lText, self.fontSize, self.colorInactive, self.alphaInactive, self.drawFlagInactive );
52 } else if( lLine == lItemUnderCursor ) {
53 Menu_DrawString( lPos, lText, self.fontSize, self.colorInactive, self.alphaInactive, self.drawFlagInactive );
55 Menu_DrawString( lPos, lText, self.fontSize, self.color, self.alphas_x, self.drawFlags_x );
58 lPos_y = lPos_y + self.fontSize_y + 2;
64 void() Item_List_Update =
66 Item_DataUser_Update();
68 if( self._presstime + ITEM_BUTTON_ACTIONTIME > Timer_Time )
69 self._state = ITEM_STATE_PRESSED;
70 else if( Menu_ActiveItem == self )
71 self._state = ITEM_STATE_SELECTED;
73 self._state = ITEM_STATE_NORMAL;
76 void( bool pSelect, bool pUser ) Item_List_Select =
78 if( pSelect && pUser )
79 Sound_Play( self.soundSelected );
82 bool( float pKey, float pAscii ) Item_List_Key =
84 if( pKey == K_DOWNARROW ) {
85 Sound_Play( self.soundPressed );
86 self._presstime = Timer_Time;
88 self._target._realValue = self._target._realValue + 1;
89 Raise_DataEvent( self._target, ITEM_DATALINK_SET );
92 } else if( pKey == K_UPARROW ) {
93 Sound_Play( self.soundPressed );
94 self._presstime = Timer_Time;
96 self._target._realValue = self._target._realValue - 1;
97 Raise_DataEvent( self._target, ITEM_DATALINK_SET );
100 } else if( pKey == K_MOUSE1 ) {
101 local float lSelected;
102 Sound_Play( self.soundPressed );
104 lSelected = _IL_GetItemUnderCursor() * self._target.stepValue + self._target.minValue;
106 if( self._presstime + ITEM_BUTTON_ACTIONTIME > Timer_Time && lSelected == self._target._realValue ) {
109 self._presstime = Timer_Time;
111 self._target._realValue = lSelected;
112 Raise_DataEvent( self._target, ITEM_DATALINK_SET );
120 void() Item_List_Destroy =
124 String_EntityFree( self, soundSelected );
125 String_EntityFree( self, soundPressed );
127 Item_DataUser_Destroy();
130 void() Item_List_Spawn =
132 Item_DataUser_Init();
134 String_EntityZone( self, soundSelected );
135 String_EntityZone( self, soundPressed );
137 Sound_Precache( self.soundSelected );
138 Sound_Precache( self.soundPressed );
140 self._draw = Item_List_Draw;
141 self._update = Item_List_Update;
142 self._select = Item_List_Select;
143 self._key = Item_List_Key;
144 self._reinit = CtCall_Reinit;