Subversion Repositories Projects

Rev

Rev 269 | 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
 * Settings related Part of DUBwise
4
 *  ( e.g. saving to / reading from RMS )
5
 *                                                          
6
 * Author:        Marcus -LiGi- Bueschleb
7
 * Mailto:        LiGi @at@ LiGi DOTT de                    
8
 *
9
***************************************************************/
10
 
11
import javax.microedition.rms.*;
12
 
13
import java.io.*;
14
 
220 ligi 15
public class DUBwiseSettings
16
    extends org.ligi.ufo.ParamsClass
255 ligi 17
    implements org.ligi.ufo.DUBwiseDefinitions,DUBwiseUIDefinitions,org.ligi.ufo.DUBwiseLangDefs
206 ligi 18
{
19
    // name/handle for the recordStore to memorize some stuff
382 ligi 20
    private final static String RECORD_STORE_NAME="DUBSETT_V5";
206 ligi 21
 
22
    /* all settings hold here */
23
    public byte act_skin=SKINID_DARK;
24
 
221 ligi 25
    public int key_back;
26
    public int key_fullscreen;
27
    public int key_clear;
28
 
229 ligi 29
    public int voice_delay;
30
    public int voice_volume;
382 ligi 31
    public byte graph_interval;
221 ligi 32
    public int remote_cam_stick;
206 ligi 33
    public String connection_name="";
34
    public String connection_url="";
35
 
382 ligi 36
    public boolean do_vibra;
37
    public boolean do_sound;
38
    public boolean do_volts_sound;
39
    public boolean do_altimeter_sound;
265 ligi 40
 
382 ligi 41
    public boolean big_fonts;
265 ligi 42
 
269 ligi 43
    public byte altsteps;
44
 
382 ligi 45
    public boolean horizon_invert_nick;
46
    public boolean horizon_invert_roll;
47
    public boolean horizon_display_altitude;
48
    public boolean horizon_display_flytime;
266 ligi 49
 
382 ligi 50
    public boolean fullscreen;
51
    public boolean do_scrollbg;
52
    public boolean expert_mode;
53
    public boolean dev_mode;
54
    public boolean betatester_mode;
206 ligi 55
 
382 ligi 56
    public boolean reload_settings;
57
    public boolean instant_error_show;
269 ligi 58
 
229 ligi 59
    public boolean graph_legend;
60
    public boolean graph_scale;
61
 
382 ligi 62
 
63
 
64
 
222 ligi 65
//#if devicecontrol=="on"
66
    public boolean keep_lighton=false;
67
//#endif
206 ligi 68
 
222 ligi 69
    int[] act_proxy_ip=default_ip; // { ip , ip , ip , ip , port }
70
    int[] act_conn_ip=default_ip; // { ip , ip , ip , ip , port }
71
 
72
 
382 ligi 73
    /* end of all settings hold here */
211 ligi 74
 
75
 
269 ligi 76
    public final static int SETTINGS_POS_SKIN           =0;
77
    public final static int SETTINGS_POS_BITFIELD1      =1;
78
    public final static int SETTINGS_POS_GPS_FORMAT     =2;
79
    public final static int SETTINGS_POS_SPEED_FORMAT   =3;
80
    public final static int SETTINGS_POS_EXTERN_NICK    =4;
81
    public final static int SETTINGS_POS_EXTERN_ROLL    =5;
82
    public final static int SETTINGS_POS_EXTERN_GIER    =6;
83
    public final static int SETTINGS_POS_EXTERN_GAS     =7;
84
    public final static int SETTINGS_POS_EXTERN_HIGHT   =8;
85
    public final static int SETTINGS_POS_KEY_BACK       =9;
86
    public final static int SETTINGS_POS_KEY_FULL       =10;
87
    public final static int SETTINGS_POS_KEY_CLEAR      =11;
88
    public final static int SETTINGS_POS_VOICEVOLUME    =12;
89
    public final static int SETTINGS_POS_VOICEDELAY     =13;
90
    public final static int SETTINGS_POS_BITFIELD2      =14;
91
    public final static int SETTINGS_POS_LANG           =15;
92
    public final static int SETTINGS_POS_GRAPHINTERVAL  =16;
93
    public final static int SETTINGS_POS_BITFIELD3      =17;
94
    public final static int SETTINGS_POS_ALTSTEPS       =18;
382 ligi 95
    public final static int SETTINGS_POS_CAMSTICK       =19;
222 ligi 96
 
382 ligi 97
    public final static int SETTINGS_POS_PRIMARYABO     =20;
98
    public final static int SETTINGS_POS_SECONDARYABO   =21;
99
    public final static int SETTINGS_POS_DEFAULTABO     =22;
100
    public final static int SETTINGS_FIELD_LENGTH       =23;
101
 
102
 
103
 
104
    int[] settings_field;
105
 
106
    public int get_field_from_act(int pos) { return settings_field[pos];}
107
    public void set_field_from_act(int pos,int val){
108
 
109
        settings_field[pos]=val;
110
        field2setting(pos,val);
111
    }
112
 
113
    public void toggle_fullscreen()
114
    {
115
        //      fullscreen=!fullscreen;
116
         set_field_from_act(1,settings_field[1]^1);
117
         //     if (fullscreen)canvas.setFullScreenMode(true);
118
    }
119
 
120
    public void set_betatester()
121
    {
122
        settings_field[SETTINGS_POS_BITFIELD3]|=2;
123
    }
124
 
220 ligi 125
    public void field2setting(int pos,int val)
126
    {
382 ligi 127
        try {
128
        boolean new_fullscreen=fullscreen;
129
        boolean new_do_scrollbg=do_scrollbg;
130
 
269 ligi 131
        switch (pos)
262 ligi 132
            {
269 ligi 133
            case SETTINGS_POS_ALTSTEPS:
134
                altsteps=(byte)val;
135
                break;
136
            case SETTINGS_POS_GRAPHINTERVAL:
262 ligi 137
                if (val<1)
138
                    graph_interval=1;
139
                else
140
                    graph_interval=(byte)val;
269 ligi 141
                break;
142
 
255 ligi 143
 
382 ligi 144
            case SETTINGS_POS_BITFIELD1:
145
                new_fullscreen=((val&1)!=0);
146
                new_do_scrollbg=((val&2)!=0);
255 ligi 147
 
382 ligi 148
                do_sound=((val&4)!=0);
149
                do_vibra=((val&8)!=0);
150
                expert_mode=((val&16)!=0);
151
//#if devicecontrol=="on"
152
                keep_lighton=((val&32)!=0);
153
//#endif
154
                graph_legend=((val&64)!=0);
155
                graph_scale=((val&128)!=0);
255 ligi 156
 
382 ligi 157
                break;
220 ligi 158
 
382 ligi 159
            case SETTINGS_POS_BITFIELD2:
160
                do_volts_sound=((val&1)!=0);   
161
                reload_settings=((val&2)!=0);    
162
                do_altimeter_sound=((val&4)!=0);
163
                horizon_invert_roll=((val&8)!=0);
164
                horizon_invert_nick=((val&16)!=0);
165
                horizon_display_flytime=((val&32)!=0);
166
                horizon_display_altitude=((val&64)!=0);
167
                dev_mode=((val&128)!=0);
168
                break;
220 ligi 169
 
382 ligi 170
            case SETTINGS_POS_BITFIELD3:
171
                instant_error_show=((val&1)!=0);
172
                betatester_mode=((val&2)!=0);
173
                big_fonts=((val&4)!=0);
174
                canvas.regenerate_fonts=true;
175
                break;
220 ligi 176
 
382 ligi 177
            case SETTINGS_POS_GPS_FORMAT:
178
                canvas.mk.gps_position.act_gps_format=(byte)val;
179
                break;
180
            case SETTINGS_POS_SPEED_FORMAT:
181
                canvas.mk.gps_position.act_speed_format=(byte)val;
182
                break;
183
            case SETTINGS_POS_EXTERN_NICK:
184
                default_extern_control[EXTERN_CONTROL_NICK]=(byte)val;     
185
                break;
186
            case SETTINGS_POS_EXTERN_ROLL:
187
                default_extern_control[EXTERN_CONTROL_ROLL]=(byte)val;     
188
                break;
189
            case SETTINGS_POS_EXTERN_GIER:
190
                default_extern_control[EXTERN_CONTROL_GIER]=(byte)val;     
191
                break;
192
            case SETTINGS_POS_EXTERN_GAS:
193
                default_extern_control[EXTERN_CONTROL_GAS]=(byte)val;      
194
                break;
195
            case SETTINGS_POS_EXTERN_HIGHT:
196
                default_extern_control[EXTERN_CONTROL_HIGHT]=(byte)val;    
197
                break;
220 ligi 198
 
382 ligi 199
            case SETTINGS_POS_KEY_BACK:
200
                key_back=val;      
201
                break;
202
            case SETTINGS_POS_KEY_FULL:
203
                key_fullscreen=val;
204
                break;
205
            case SETTINGS_POS_KEY_CLEAR:
206
                key_clear=val;
207
                break;
208
            case SETTINGS_POS_CAMSTICK:
209
                remote_cam_stick=val;
210
                break;
229 ligi 211
 
382 ligi 212
            case SETTINGS_POS_LANG:
213
                canvas.act_lang=(byte)val;
214
                canvas.load_strings();
215
                break;
220 ligi 216
 
382 ligi 217
            case SETTINGS_POS_SKIN:
218
                act_skin=(byte)val;
219
                canvas.load_skin_images();
220
                break;
220 ligi 221
 
222
 
222 ligi 223
 
229 ligi 224
 
382 ligi 225
            case SETTINGS_POS_VOICEVOLUME:
226
 
227
                voice_volume=val;
229 ligi 228
//#if voice_mode!="no_voice"
382 ligi 229
                canvas.status_voice.volume=voice_volume;
229 ligi 230
 
231
//#endif
382 ligi 232
                break;
233
 
234
            case SETTINGS_POS_VOICEDELAY:
235
                voice_delay=val;
229 ligi 236
//#if voice_mode!="no_voice"
382 ligi 237
                canvas.status_voice.delay=voice_delay;
229 ligi 238
 
239
//#endif
382 ligi 240
                break;
229 ligi 241
 
242
 
382 ligi 243
            case SETTINGS_POS_PRIMARYABO:
244
                canvas.mk.primary_abo=val;
245
                break;
246
            case SETTINGS_POS_SECONDARYABO:
247
                canvas.mk.secondary_abo=val;
248
                break;
249
            case  SETTINGS_POS_DEFAULTABO:
250
                canvas.mk.default_abo=val;
251
                break;
265 ligi 252
 
382 ligi 253
            }
266 ligi 254
 
382 ligi 255
        if (new_fullscreen!=fullscreen)
256
            {
257
                fullscreen=new_fullscreen;
258
                canvas.setFullScreenMode(fullscreen);
259
            }
266 ligi 260
 
261
 
382 ligi 262
        if (new_do_scrollbg!=do_scrollbg)
263
            {
264
                do_scrollbg=new_do_scrollbg;
265
                canvas.load_skin_images();
266
            }
266 ligi 267
 
382 ligi 268
        /* snippet to extract default fields
269
 
269 ligi 270
        String ts="";
271
        for ( int i=0;i<SETTINGS_FIELD_LENGTH;i++)
272
            ts+=","+settings_field[i];
273
 
274
        System.out.println(ts);
275
        */
382 ligi 276
        }
277
        catch (Exception e) { }
269 ligi 278
 
220 ligi 279
    }
280
 
382 ligi 281
    public int[] plain_defaults={0,0,0,0,42,42,42,1,1,-4242,-4242,-4242,0,10,0,0,7,0,7,0,10,30,1000};
282
    public int[] fancy_defaults={0,255,0,0,42,42,42,1,1,-4242,-4242,-4242,150,10,5,0,7,1,10,0,1,3,100};
220 ligi 283
 
269 ligi 284
 
285
    public void process_all_settings()
286
    {
287
        for ( int i=0;i<SETTINGS_FIELD_LENGTH;i++)
288
            field2setting(i,settings_field[i]);
289
    }
290
 
291
    public void load_plain_defaults()
292
    {
293
        settings_field=plain_defaults;
294
        process_all_settings();
295
    }
296
 
297
    public void load_fancy_defaults()
298
    {
299
        settings_field=fancy_defaults;
300
        process_all_settings();
301
    }
302
 
220 ligi 303
    public byte[] default_extern_control;//=default_extern_keycontrol ;
304
 
206 ligi 305
 
382 ligi 306
    public int[] _tab_stringids={STRINGID_USERINTERFACE,STRINGID_UNITS,STRINGID_KEYCONTROL,STRINGID_SPECIALKEYS,STRINGID_GRAPH,STRINGID_SOUND,STRINGID_COCKPIT,STRINGID_TIMING,STRINGID_OTHER};
206 ligi 307
 
220 ligi 308
 
258 ligi 309
    public int[][] _field_stringids ={
310
        {
311
            STRINGID_LANGUAGE,
312
            STRINGID_SKIN,
313
            STRINGID_FULLSCREEN,
314
            STRINGID_SCROLLBG
382 ligi 315
//#if devicecontrol=="on"
258 ligi 316
            ,STRINGID_PERMALIGHT
382 ligi 317
//#endif
318
            ,STRINGID_BIGFONTS
258 ligi 319
        },
266 ligi 320
        {STRINGID_SPEEDFORMAT,STRINGID_GPSFORMAT},
321
        {STRINGID_NICK ,STRINGID_ROLL,STRINGID_GIER,STRINGID_GASINCREASE,STRINGID_HEIGHTINCREASE },
258 ligi 322
        {STRINGID_BACKTOMAINMENU,STRINGID_FULLSCREEN,STRINGID_CLEAR },
262 ligi 323
        {STRINGID_LEGEND,STRINGID_SCALEGRID,STRINGID_GRAPHINTERVAL},
269 ligi 324
        {STRINGID_SOUND,STRINGID_VOLTS,STRINGID_DELAYINS,STRINGID_ALTIMETER,STRINGID_ALTSTEPS,STRINGID_VOLUME},
266 ligi 325
        {STRINGID_SHOWALTITUDE,STRINGID_SHOWFLIGHTTIME,STRINGID_INVERTROLL,STRINGID_INVERTNICK},
382 ligi 326
        {STRINGID_PRIMARYABO,STRINGID_SECONDARYABO,STRINGID_DEFAULTABO}, ////
267 ligi 327
        {STRINGID_INSTANTERRORSHOW,STRINGID_VIBRA,STRINGID_REMOTECAMSTICK,STRINGID_ALWAYSRELOADPARAMS,STRINGID_EXPERTMODE,STRINGID_DEVMODE}};
258 ligi 328
 
329
 
330
 
331
 
382 ligi 332
    public int[][] _choice_stringids={ {STRINGID_LANG0,STRINGID_LANG1,STRINGID_LANG2}, /* FIXME - make dynamic */{ STRINGID_DARK,STRINGID_LIGHT } , {STRINGID_KMH,STRINGID_MPH,STRINGID_CMS},{STRINGID_DECIMAL,STRINGID_MINSEC} } ;
258 ligi 333
 
334
 
335
 
266 ligi 336
    public int[][] _field_positions=    {
337
        {SETTINGS_POS_LANG,SETTINGS_POS_SKIN,8,9
222 ligi 338
//#if devicecontrol=="on"
266 ligi 339
       ,13
222 ligi 340
//#endif
382 ligi 341
       , SETTINGS_POS_BITFIELD3*8+2
342
} , {2,3} , {4,5,6,7,8} , {9,10,11},{SETTINGS_POS_BITFIELD1*8 +6,SETTINGS_POS_BITFIELD1*8 +7, SETTINGS_POS_GRAPHINTERVAL} ,
343
        {SETTINGS_POS_BITFIELD1*8+2,SETTINGS_POS_BITFIELD2*8+0,SETTINGS_POS_VOICEDELAY,SETTINGS_POS_BITFIELD2*8+2,SETTINGS_POS_ALTSTEPS,SETTINGS_POS_VOICEVOLUME },
266 ligi 344
        {SETTINGS_POS_BITFIELD2*8+6,SETTINGS_POS_BITFIELD2*8+5,SETTINGS_POS_BITFIELD2*8+3,SETTINGS_POS_BITFIELD2*8+4},
382 ligi 345
 
346
        {SETTINGS_POS_PRIMARYABO,SETTINGS_POS_SECONDARYABO,SETTINGS_POS_DEFAULTABO},
347
        {SETTINGS_POS_BITFIELD3*8+0,SETTINGS_POS_BITFIELD1*8+3,SETTINGS_POS_CAMSTICK,SETTINGS_POS_BITFIELD2*8+1,SETTINGS_POS_BITFIELD1*8+4,SETTINGS_POS_BITFIELD2*8+7}
266 ligi 348
    };
258 ligi 349
    public int[][] _field_types={ {PARAMTYPE_CHOICE+0,PARAMTYPE_CHOICE+1,PARAMTYPE_BITSWITCH,PARAMTYPE_BITSWITCH
222 ligi 350
//#if devicecontrol=="on"
266 ligi 351
                 ,PARAMTYPE_BITSWITCH
222 ligi 352
//#endif
382 ligi 353
         ,PARAMTYPE_BITSWITCH
266 ligi 354
} , {PARAMTYPE_CHOICE+2,PARAMTYPE_CHOICE+3} , {PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE}, {PARAMTYPE_KEY,PARAMTYPE_KEY,PARAMTYPE_KEY} , {PARAMTYPE_BITSWITCH,PARAMTYPE_BITSWITCH,PARAMTYPE_BYTE},
269 ligi 355
  {PARAMTYPE_BITSWITCH,PARAMTYPE_BITSWITCH,PARAMTYPE_BYTE,PARAMTYPE_BITSWITCH,PARAMTYPE_BYTE,PARAMTYPE_BYTE} ,
266 ligi 356
  {PARAMTYPE_BITSWITCH,PARAMTYPE_BITSWITCH,PARAMTYPE_BITSWITCH,PARAMTYPE_BITSWITCH},
382 ligi 357
  {PARAMTYPE_BYTE,PARAMTYPE_BYTE,PARAMTYPE_BYTE},
267 ligi 358
  {PARAMTYPE_BITSWITCH,PARAMTYPE_BITSWITCH,PARAMTYPE_STICK,PARAMTYPE_BITSWITCH,PARAMTYPE_BITSWITCH,PARAMTYPE_BITSWITCH}
266 ligi 359
    };
220 ligi 360
    DUBwiseCanvas canvas;
361
 
362
 
363
    public DUBwiseSettings(DUBwiseCanvas _canvas)
206 ligi 364
    {
220 ligi 365
        canvas= _canvas;
366
        settings_field=new int[SETTINGS_FIELD_LENGTH];
367
        default_extern_control=new byte[11];
368
        // set defaults
382 ligi 369
        settings_field=plain_defaults;
220 ligi 370
    }
371
 
372
    public void load()
373
    {
255 ligi 374
        tab_stringids=_tab_stringids;
220 ligi 375
 
376
        field_positions=_field_positions;
377
        field_types=_field_types;
258 ligi 378
 
379
        choice_stringids=_choice_stringids;
380
 
381
        field_stringids=_field_stringids;
382 ligi 382
 
206 ligi 383
        try
384
            {
382 ligi 385
                RecordStore recStore= RecordStore.openRecordStore(RECORD_STORE_NAME, false);
206 ligi 386
 
387
                if (recStore.getNumRecords()==1)
388
                    {
389
 
382 ligi 390
                        DataInputStream din = new DataInputStream( new ByteArrayInputStream(recStore.getRecord(1)) );
206 ligi 391
 
382 ligi 392
                        byte str_count=din.readByte();
393
 
394
                        for (int str_i=0;str_i<str_count;str_i++)
395
                            switch(str_i)
396
                                {
397
                                case 0:
398
                                    connection_url=din.readUTF();
399
                                    break;
400
                                case 1:
401
                                    connection_name=din.readUTF();
402
                                    break;
403
                                }
206 ligi 404
 
382 ligi 405
                        byte field_count=din.readByte();
406
                        for (int field_i=0;field_i<field_count;field_i++)
407
                            settings_field[field_i]=din.readInt();
206 ligi 408
 
220 ligi 409
                        for ( int i=0;i<5;i++)
206 ligi 410
                            {
411
                                act_proxy_ip[i]=din.readInt();
412
                                act_conn_ip[i]=din.readInt();
413
                            }
414
 
415
                    }
416
                recStore.closeRecordStore();
417
            }
418
        catch (Exception e)
419
            {       }
420
 
220 ligi 421
 
269 ligi 422
        process_all_settings();
220 ligi 423
 
269 ligi 424
 
206 ligi 425
    }
426
 
427
 
428
    public void save()
429
    {
430
        try
431
            {
432
                RecordStore.deleteRecordStore(RECORD_STORE_NAME);
433
            }
434
        catch (Exception e)
435
            { }
436
 
437
        try {
438
                RecordStore recStore = RecordStore.openRecordStore(RECORD_STORE_NAME, true );
439
 
440
                ByteArrayOutputStream bout = new ByteArrayOutputStream();
441
                DataOutputStream      dout = new   DataOutputStream( bout );
442
 
382 ligi 443
                dout.writeByte(2);
206 ligi 444
                dout.writeUTF(connection_url);
445
                dout.writeUTF(connection_name);
446
 
382 ligi 447
                dout.writeByte(SETTINGS_FIELD_LENGTH);
220 ligi 448
                for ( int i=0;i<SETTINGS_FIELD_LENGTH;i++)
449
                    dout.writeInt(settings_field[i]);
382 ligi 450
 
206 ligi 451
                for ( int i=0;i<5;i++)
452
                    {
453
                        dout.writeInt(act_proxy_ip[i]);
454
                        dout.writeInt(act_conn_ip[i]);
455
                    }
456
                recStore.addRecord(bout.toByteArray(),0,bout.size());
457
 
458
                recStore.closeRecordStore();
459
 
460
 
461
            }
462
        catch (Exception e)
463
            {       }
464
 
465
    }
466
 
467
}