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 );
93 } else if( pKey == K_UPARROW ) {
94 Sound_Play( self.soundPressed );
95 self._presstime = Timer_Time;
97 self._target._realValue = self._target._realValue - 1;
98 Raise_DataEvent( self._target, ITEM_DATALINK_SET );
102 } else if( pKey == K_MOUSE1 ) {
103 self._target._realValue = _IL_GetItemUnderCursor() * self._target.stepValue + self._target.minValue;
104 Raise_DataEvent( self._target, ITEM_DATALINK_SET );
111 void() Item_List_Destroy =
115 String_EntityFree( self, soundSelected );
116 String_EntityFree( self, soundPressed );
118 Item_DataUser_Destroy();
121 void() Item_List_Spawn =
123 Item_DataUser_Init();
125 String_EntityZone( self, soundSelected );
126 String_EntityZone( self, soundPressed );
128 Sound_Precache( self.soundSelected );
129 Sound_Precache( self.soundPressed );
131 self._draw = Item_List_Draw;
132 self._update = Item_List_Update;
133 self._select = Item_List_Select;
134 self._key = Item_List_Key;
135 self._reinit = CtCall_Reinit;