]> icculus.org git repositories - divverent/nexuiz.git/blob - scmenu/source/control/visual/list.qc
-Changed some item names to fit to the global name convention.
[divverent/nexuiz.git] / scmenu / source / control / visual / list.qc
1 // DP/Nex Menu
2 // control/visual/list.qc
3
4 void() Item_List_Draw =
5 {
6         local float lStart;
7         local float lLines;
8         local float lLine;
9         local float lEnd;
10         local vector lPos;
11
12         if( !self._target )
13                 return;
14
15         lLines = floor( self.size_y / ( self.fontSize_y + 2 ) );
16         lStart = max( 0, floor( Item_DataLink_Switch_GetOrdinal( self._target, self._target._realValue ) - lLines / 2 ) );
17         lEnd = min( lStart + lLines, Item_DataLink_Switch_GetOrdinal( self._target, self._target.maxValue ) );
18
19         lPos = '0 1 0' + self.pos;
20         for( lLine = lStart ; lLine <= lEnd ; lLine++ ) {
21                 local string lText;
22                 lText = Util_GetAltStringItem( self._target.descList, lLine );
23                 if( lLine == Item_DataLink_Switch_GetOrdinal( self._target, self._target._realValue ) ) {
24                         if( self._state == ITEM_STATE_SELECTED )
25                                 Menu_DrawString( lPos, lText, self.fontSize, self.colorSelected, self.alphas_y, self.drawFlags_y );
26                         else if( self._state == ITEM_STATE_PRESSED )
27                                 Menu_DrawString( lPos, lText, self.fontSize, self.colorPressed, self.alphas_z, self.drawFlags_z );
28                         else
29                                 Menu_DrawString( lPos, lText, self.fontSize, self.colorInactive, self.alphaInactive, self.drawFlagInactive );
30                 } else {
31                         Menu_DrawString( lPos, lText, self.fontSize, self.color, self.alphas_x, self.drawFlags_x );
32                 }
33
34                 lPos_y = lPos_y + self.fontSize_y + 1;
35
36                 String_Free( lText );
37         }
38 };
39
40 void() Item_List_Update =
41 {
42         Item_DataUser_Update();
43
44         if( self._presstime + ITEM_BUTTON_ACTIONTIME > Timer_Time )
45                 self._state = ITEM_STATE_PRESSED;
46         else if( Menu_ActiveItem == self )
47                 self._state = ITEM_STATE_SELECTED;
48         else
49                 self._state = ITEM_STATE_NORMAL;
50
51         /*if( Menu_HasRunFlag( self, RUNFLAG_MOUSEINAREA ) ) {
52                 local float lItem;
53                 local float lStart;
54                 local float lLines;
55
56                 lLines = floor( self.size_y / ( self.fontSize_y + 2 ) );
57                 lStart = max( 0, floor( Item_DataLink_Switch_GetOrdinal( self._target, self._target._realValue ) - lLines / 2 ) );
58                 lItem = floor( ( Menu_Cursor_Position_y - self.pos_y ) / ( self.fontSize_y + 2 ) );
59                 lItem = min( lStart + lItem, Item_DataLink_Switch_GetOrdinal( self._target, self._target.maxValue ) );
60
61                 print( ftos( lItem ), "\n" );
62
63                 self._target._realValue = lItem * self._target.stepValue + self._target.minValue;
64                 Raise_DataEvent( self._target, ITEM_DATALINK_SET );
65
66                 CtCall_Action();
67         }*/
68 };
69
70 void( bool pSelect, bool pUser ) Item_List_Select =
71 {
72         if( pSelect && pUser )
73                 Sound_Play( self.soundSelected );
74 };
75
76 bool( float pKey, float pAscii ) Item_List_Key =
77 {
78         if( pKey == K_DOWNARROW ) {
79                 Sound_Play( self.soundPressed );
80                 self._presstime = Timer_Time;
81
82                 self._target._realValue = self._target._realValue + 1;
83                 if( self._target._realValue > self._target.maxValue )
84                         self._target._realValue = self._target.minValue;
85                 Raise_DataEvent( self._target, ITEM_DATALINK_SET );
86
87                 CtCall_Action();
88                 return true;
89         } else if( pKey == K_UPARROW ) {
90                 Sound_Play( self.soundPressed );
91                 self._presstime = Timer_Time;
92
93                 self._target._realValue = self._target._realValue - 1;
94                 if( self._target._realValue < self._target.minValue )
95                         self._target._realValue = self._target.maxValue;
96
97                 Raise_DataEvent( self._target, ITEM_DATALINK_SET );
98
99                 CtCall_Action();
100                 return true;
101         }
102         return false;
103 };
104
105 void() Item_List_Destroy =
106 {
107         CtCall_Destroy();
108
109         String_EntityFree( self, soundSelected );
110         String_EntityFree( self, soundPressed );
111
112         Item_DataUser_Destroy();
113 };
114
115 void() Item_List_Spawn =
116 {
117         Item_DataUser_Init();
118
119         String_EntityZone( self, soundSelected );
120         String_EntityZone( self, soundPressed );
121
122         Sound_Precache( self.soundSelected );
123         Sound_Precache( self.soundPressed );
124
125         self._draw = Item_List_Draw;
126         self._update = Item_List_Update;
127         self._select = Item_List_Select;
128         self._key = Item_List_Key;
129         self._reinit = CtCall_Reinit;
130
131         CtCall_Init();
132 };