Subversion Repositories Projects

Rev

Rev 206 | Rev 221 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
206 ligi 1
/********************************************************
2
 *                                            
3
 * class to handle Editing of MK Params via MIDP / J2ME
4
 *                                            
5
 * Author:        Marcus -LiGi- Bueschleb      
6
 *
7
 ********************************************************/
8
 
9
import javax.microedition.lcdui.*;
10
 
11
public class MKParamsEditor
12
    implements org.ligi.ufo.MKParamDefinitions
13
{
14
 
220 ligi 15
    public byte nextstate;
206 ligi 16
 
17
    private int act_tab=0;
220 ligi 18
    public int act_y=1;
206 ligi 19
    private int act_lcd_lines=10;
20
 
21
    DUBwiseCanvas canvas;
22
 
220 ligi 23
    public String[] lcd_lines;
206 ligi 24
 
220 ligi 25
    public String[] menu_items;
206 ligi 26
 
220 ligi 27
    org.ligi.ufo.ParamsClass edit_source;
206 ligi 28
 
220 ligi 29
 
30
    public MKParamsEditor(DUBwiseCanvas _canvas,org.ligi.ufo.ParamsClass _edit_source,byte _nextstate)
206 ligi 31
    {
220 ligi 32
        nextstate=_nextstate;
33
        edit_source=_edit_source;
34
 
206 ligi 35
        canvas=_canvas;
36
        lcd_lines=new String[40];
37
        //      refresh_lcd();
38
    }
39
 
220 ligi 40
 
41
    boolean select_mode=true;
42
 
43
 
206 ligi 44
    public void paint ( Graphics g)
45
    {
220 ligi 46
        if (select_mode)
47
            {
48
                if (canvas.menu_items[0]!=edit_source.tab_names[0]) // usefull?
49
                    {
50
                        act_y=1;
51
                        menu_items=new String[edit_source.tab_names.length+1];
52
                        for(int p=0;p<edit_source.tab_names.length;p++)
53
                            menu_items[p]=edit_source.tab_names[p];
54
                        menu_items[edit_source.tab_names.length]="back";                       
55
                        canvas.setup_menu(menu_items,null);
56
                    }
57
                canvas.paint_menu(g);
58
            }
59
 
60
        else
61
            {
62
                refresh_lcd();
63
                //              canvas.paint_lcd(g,false);
64
                canvas.paint_lcd(g,true);
65
            }
206 ligi 66
    }
67
 
68
 
69
    public void refresh_lcd()
70
    {
71
 
220 ligi 72
        try {
73
            act_lcd_lines=edit_source.field_names[act_tab].length*2+2;
74
 
75
            for ( int i=0;i<act_lcd_lines;i++)
76
                lcd_lines[i]="";
77
 
78
 
79
 
80
            //          lcd_lines[0]=(act_tab==0?"  ":"< ") + edit_source.tab_names[act_tab] + (act_tab==(edit_source.tab_names.length-1)?"  ":" >");
81
 
82
            for (int i=0;i<edit_source.field_names[act_tab].length;i++)
83
                {
84
                    lcd_lines[2*i]=edit_source.field_names[act_tab][i];
85
 
86
                    switch(edit_source.field_types[act_tab][i])
87
                        {
88
                        case  PARAMTYPE_BITSWITCH:
89
                            lcd_lines[1+2*i]=(((edit_source.get_field_from_act(edit_source.field_positions[act_tab][i]/8)&(1<<edit_source.field_positions[act_tab][i]%8))==0)?"off":"on" ) ;
90
                            break;
91
                        case PARAMTYPE_BYTE:
92
                            lcd_lines[1+2*i]=""+edit_source.get_field_from_act(edit_source.field_positions[act_tab][i]);
93
                            if ((edit_source.get_field_from_act(edit_source.field_positions[act_tab][i])>250)&&(edit_source.get_field_from_act(edit_source.field_positions[act_tab][i])<256))
94
                                lcd_lines[2+2*i]+="[Poti"+(edit_source.get_field_from_act(edit_source.field_positions[act_tab][i])-250) +"]";                                                                                               break;
206 ligi 95
 
96
 
220 ligi 97
                        case PARAMTYPE_KEY:
98
                        case PARAMTYPE_STICK:
99
                            lcd_lines[1+2*i]=""+edit_source.get_field_from_act(edit_source.field_positions[act_tab][i]);
100
                            break;
101
 
102
                        default:
103
                            lcd_lines[1+2*i]=""+edit_source.choice_strings[edit_source.field_types[act_tab][i]-PARAMTYPE_CHOICE][edit_source.get_field_from_act(edit_source.field_positions[act_tab][i])];                             
104
                        }
105
 
106
                    }
107
 
108
            lcd_lines[act_lcd_lines-1]="back";         
109
 
110
            canvas.lcd_lines=new String[act_lcd_lines];    
111
            for ( int i=0;i<act_lcd_lines;i++)
112
                {
113
                    lcd_lines[i]=(act_y==i?"#":" ")+lcd_lines[i];
114
                    while(lcd_lines[i].length()<20)
115
                        lcd_lines[i]+=" ";
206 ligi 116
 
220 ligi 117
                    canvas.lcd_lines[i]=lcd_lines[i];              
118
                }
206 ligi 119
 
220 ligi 120
        }
206 ligi 121
 
220 ligi 122
        catch (Exception e){}
123
 
124
        //      for(int i=0;i<act_lcd_lines;i++)
206 ligi 125
 
220 ligi 126
        /*             
206 ligi 127
            }
128
        else
129
            {
130
                canvas.lcd_lines=new String[1];
131
                canvas.lcd_lines[0]="reading params";
132
            }
220 ligi 133
    */
206 ligi 134
    }
135
 
136
 
137
    public final static int KEYCODE_CLEAR=-8;
138
 
139
    public boolean editing_number=false;
140
 
141
    public void keypress (int keyCode,int action)
142
    {
143
 
220 ligi 144
        if (select_mode)
206 ligi 145
            {
220 ligi 146
                if (action== Canvas.FIRE)
206 ligi 147
                    {
220 ligi 148
 
149
                        if (canvas.act_menu_select==(menu_items.length-1))
150
                            canvas.chg_state(nextstate);
151
                        else
152
 
206 ligi 153
                            {
220 ligi 154
                                act_tab=canvas.act_menu_select;
155
                                select_mode=false;
156
                                act_y=1;
206 ligi 157
                            }
158
                    }
220 ligi 159
                else
160
                    canvas.menu_keypress(keyCode);
206 ligi 161
            }
220 ligi 162
        else
206 ligi 163
            {
164
 
165
 
220 ligi 166
                if ((act_y!=(act_lcd_lines-1))&&(((keyCode >= Canvas.KEY_NUM0) && (keyCode <= Canvas.KEY_NUM9))|| ( keyCode==KEYCODE_CLEAR)))
167
                            {
168
                                int act_pos=act_y/2;
169
                                if((edit_source.field_types[act_tab][act_pos]==edit_source.PARAMTYPE_BYTE))
170
                                    {
171
                                        if ((keyCode >= Canvas.KEY_NUM0) && (keyCode <= Canvas.KEY_NUM9))
172
                                            {
173
                                                if((editing_number)&&( Math.abs(edit_source.get_field_from_act(edit_source.field_positions[act_tab][act_pos]))*10+(keyCode - Canvas.KEY_NUM0)<1000))
174
                                                    edit_source.set_field_from_act(edit_source.field_positions[act_tab][act_pos] , Math.abs(edit_source.get_field_from_act(edit_source.field_positions[act_tab][act_pos]))*10+(keyCode - Canvas.KEY_NUM0));
175
                                                else
176
                                                    edit_source.set_field_from_act(edit_source.field_positions[act_tab][act_pos] , (keyCode - Canvas.KEY_NUM0));
177
                                                editing_number=true;
178
                                                return;
179
                                            }
180
                                        else
181
                                            if ( keyCode==KEYCODE_CLEAR)
182
                                                edit_source.set_field_from_act(edit_source.field_positions[act_tab][act_pos],0);
183
                                    }
184
                                editing_number=false;
185
 
186
                            }
206 ligi 187
 
220 ligi 188
                switch (action)
189
                    {
190
 
191
                    case Canvas.DOWN:
192
                        if (act_y<(act_lcd_lines-2)) act_y+=2;
193
                        else act_y=1;
194
                        break;
195
 
196
                    case Canvas.UP:
197
                        if (act_y!=1) act_y-=2;
198
                        else act_y=act_lcd_lines-1;
199
                        break;
200
 
201
                    default:
206 ligi 202
 
203
 
220 ligi 204
 
205
                        if (act_y!=(act_lcd_lines-1))
206
                            {
207
 
208
                                //
209
 
210
                                int act_pos=act_y/2;
211
 
212
                                if((edit_source.field_types[act_tab][act_pos]==edit_source.PARAMTYPE_KEY))
213
                                    edit_source.set_field_from_act(edit_source.field_positions[act_tab][act_pos],keyCode);
214
 
215
                                switch (action)
216
                                    {
217
 
218
                                    case Canvas.RIGHT:
219
                                        switch(edit_source.field_types[act_tab][act_pos])
220
                                            {
221
                                            case PARAMTYPE_BITSWITCH:
222
 
223
                                                edit_source.field_from_act_xor((edit_source.field_positions[act_tab][act_pos]/8),1<<(edit_source.field_positions[act_tab][act_pos]%8));
224
                                                break;
225
 
226
 
227
                                            case PARAMTYPE_BYTE:
228
                                            case PARAMTYPE_STICK:
229
 
230
                                                edit_source.field_from_act_add(edit_source.field_positions[act_tab][act_pos],1);
231
                                                break;
232
 
233
                                            default:
234
                                                edit_source.field_from_act_add_mod(edit_source.field_positions[act_tab][act_pos],1,edit_source.choice_strings[edit_source.field_types[act_tab][act_pos]-PARAMTYPE_CHOICE].length);
235
                                                break;
236
                                            }
237
                                        break;
238
 
239
                                    case Canvas.LEFT:
240
                                        switch(edit_source.field_types[act_tab][act_pos])
241
                                            {
242
                                            case PARAMTYPE_BITSWITCH:
243
                                                edit_source.field_from_act_xor((edit_source.field_positions[act_tab][act_pos]/8),1<<(edit_source.field_positions[act_tab][act_pos]%8));
244
 
245
                                                break;
246
                                            case PARAMTYPE_BYTE:
247
                                            case PARAMTYPE_STICK:
248
                                                edit_source.field_from_act_add(edit_source.field_positions[act_tab][act_pos],-1);
249
                                                break;
250
                                            default:
251
                                                edit_source.field_from_act_add_mod(edit_source.field_positions[act_tab][act_pos],1,edit_source.choice_strings[edit_source.field_types[act_tab][act_pos]-PARAMTYPE_CHOICE].length);
252
                                                break;
253
                                            }
254
 
255
 
256
                                        break;
257
                                    }
258
 
259
                            }
260
                        else
261
                            if (action== Canvas.FIRE)
262
                                {
263
                                    act_y=1;
264
                                    canvas.menu_items[0]="";
265
                                    select_mode=true;
266
 
267
                                }
268
                    }
269
 
270
 
271
                //              if (!select_mode)refresh_lcd();
272
 
273
            }
274
    } // keypress
206 ligi 275
}
276