]> icculus.org git repositories - divverent/nexuiz.git/blob - data/qcsrc/menu/nexuiz/charmap.c
try fixing the addition of CA
[divverent/nexuiz.git] / data / qcsrc / menu / nexuiz / charmap.c
1 #ifdef INTERFACE
2 CLASS(NexuizCharmap) EXTENDS(Image)
3         METHOD(NexuizCharmap, configureNexuizCharmap, void(entity, entity))
4         METHOD(NexuizCharmap, mousePress, float(entity, vector))
5         METHOD(NexuizCharmap, mouseRelease, float(entity, vector))
6         METHOD(NexuizCharmap, mouseMove, float(entity, vector))
7         METHOD(NexuizCharmap, mouseDrag, float(entity, vector))
8         METHOD(NexuizCharmap, keyDown, float(entity, float, float, float))
9         METHOD(NexuizCharmap, focusLeave, void(entity))
10         METHOD(NexuizCharmap, draw, void(entity))
11         ATTRIB(NexuizCharmap, controlledTextbox, entity, NULL)
12         ATTRIB(NexuizCharmap, image, string, SKINGFX_CHARMAP)
13         ATTRIB(NexuizCharmap, image2, string, SKINGFX_CHARMAP_SELECTED)
14         ATTRIB(NexuizCharmap, focusable, float, 1)
15         ATTRIB(NexuizCharmap, previouslySelectedCharacterCell, float, -1)
16         ATTRIB(NexuizCharmap, selectedCharacterCell, float, 0)
17         ATTRIB(NexuizCharmap, mouseSelectedCharacterCell, float, -1)
18 ENDCLASS(NexuizCharmap)
19 entity makeNexuizCharmap(entity theTextbox);
20 #endif
21
22 #ifdef IMPLEMENTATION
23 entity makeNexuizCharmap(entity theTextbox)
24 {
25         entity me;
26         me = spawnNexuizCharmap();
27         me.configureNexuizCharmap(me, theTextbox);
28         return me;
29 }
30
31 string CharMap_CellToChar(float c)
32 {
33         if(c == 13)
34                 return chr(127);
35         else if(c < 32)
36                 return chr(c);
37         else
38                 return chr(c + 96);
39 }
40
41 void configureNexuizCharmapNexuizCharmap(entity me, entity theTextbox)
42 {
43         me.controlledTextbox = theTextbox;
44         me.configureImage(me, me.image);
45 }
46
47 float mouseMoveNexuizCharmap(entity me, vector coords)
48 {
49         float x, y, c;
50         x = floor(coords_x * 16);
51         y = floor(coords_y * 10);
52         if(x < 0 || y < 0 || x >= 16 || y >= 10)
53         {
54                 me.mouseSelectedCharacterCell = -1;
55                 return 0;
56         }
57         c = y * 16 + x;
58         if(c != me.mouseSelectedCharacterCell)
59                 me.mouseSelectedCharacterCell = me.selectedCharacterCell = c;
60         return 1;
61 }
62 float mouseDragNexuizCharmap(entity me, vector coords)
63 {
64         return me.mouseMove(me, coords);
65 }
66 float mousePressNexuizCharmap(entity me, vector coords)
67 {
68         me.mouseMove(me, coords);
69         if(me.mouseSelectedCharacterCell >= 0)
70         {
71                 me.pressed = 1;
72                 me.previouslySelectedCharacterCell = me.selectedCharacterCell;
73         }
74         return 1;
75 }
76 float mouseReleaseNexuizCharmap(entity me, vector coords)
77 {
78         if(!me.pressed)
79                 return 0;
80         me.mouseMove(me, coords);
81         if(me.selectedCharacterCell == me.previouslySelectedCharacterCell)
82                 me.controlledTextbox.enterText(me.controlledTextbox, CharMap_CellToChar(me.selectedCharacterCell));
83         me.pressed = 0;
84         return 1;
85 }
86 float keyDownNexuizCharmap(entity me, float key, float ascii, float shift)
87 {
88         switch(key)
89         {
90                 case K_LEFTARROW:
91                         me.selectedCharacterCell = mod(me.selectedCharacterCell + 159, 160);
92                         return 1;
93                 case K_RIGHTARROW:
94                         me.selectedCharacterCell = mod(me.selectedCharacterCell + 1, 160);
95                         return 1;
96                 case K_UPARROW:
97                         me.selectedCharacterCell = mod(me.selectedCharacterCell + 144, 160);
98                         return 1;
99                 case K_DOWNARROW:
100                         me.selectedCharacterCell = mod(me.selectedCharacterCell + 16, 160);
101                         return 1;
102                 case K_HOME:
103                         me.selectedCharacterCell = 0;
104                         return 1;
105                 case K_END:
106                         me.selectedCharacterCell = 159;
107                         return 1;
108                 case K_SPACE:
109                 case K_ENTER:
110                 case K_INS:
111                         me.controlledTextbox.enterText(me.controlledTextbox, CharMap_CellToChar(me.selectedCharacterCell));
112                         return 1;
113                 default:
114                         return me.controlledTextbox.keyDown(me.controlledTextbox, key, ascii, shift);
115         }
116 }
117 void focusLeaveNexuizCharmap(entity me)
118 {
119         me.controlledTextbox.saveCvars(me.controlledTextbox);
120 }
121 void drawNexuizCharmap(entity me)
122 {
123         if(me.focused)
124         {
125                 if(!me.pressed || (me.selectedCharacterCell == me.previouslySelectedCharacterCell))
126                 {
127                         vector c;
128                         c = eX * (mod(me.selectedCharacterCell, 16) / 16.0);
129                         c += eY * (floor(me.selectedCharacterCell / 16.0) / 10.0);
130                         draw_Picture(c, me.image2, '0.0625 0.1 0', '1 1 1', 1);
131                 }
132         }
133         drawImage(me);
134 }
135 #endif