~ubuntu-branches/ubuntu/precise/simutrans/precise

« back to all changes in this revision

Viewing changes to gui/depot_frame.cc

  • Committer: Package Import Robot
  • Author(s): Ansgar Burchardt
  • Date: 2011-11-03 19:59:02 UTC
  • mfrom: (1.2.7)
  • Revision ID: package-import@ubuntu.com-20111103195902-uopgwf488mfctb75
Tags: 111.0-1
* New upstream release.
* debian/rules: Update get-orig-source target for new upstream release.
* Use xz compression for source and binary packages.
* Use override_* targets to simplify debian/rules.

Show diffs side-by-side

added added

removed removed

Lines of Context:
8
8
#include <stdio.h>
9
9
#include <math.h>
10
10
 
 
11
#include "../simunits.h"
11
12
#include "../simworld.h"
12
13
#include "../vehicle/simvehikel.h"
13
14
#include "../simconvoi.h"
68
69
 
69
70
 
70
71
depot_frame_t::depot_frame_t(depot_t* depot) :
71
 
        gui_frame_t(txt_title, depot->get_besitzer()),
 
72
        gui_frame_t( translator::translate(depot->get_name()), depot->get_besitzer()),
72
73
        depot(depot),
73
74
        icnv(depot->convoi_count()-1),
74
75
        lb_convois(NULL, COL_BLACK, gui_label_t::left),
92
93
        selected_line = depot->get_selected_line();
93
94
        strcpy(no_line_text, translator::translate("<no line>"));
94
95
 
95
 
        sprintf(txt_title, "(%d,%d) %s", depot->get_pos().x, depot->get_pos().y, translator::translate(depot->get_name()));
96
 
 
97
96
        /*
98
97
        * [SELECT]:
99
98
        */
203
202
 
204
203
        bt_obsolete.set_typ(button_t::square);
205
204
        bt_obsolete.set_text("Show obsolete");
206
 
        if(  get_welt()->get_einstellungen()->get_allow_buying_obsolete_vehicles()  ) {
 
205
        if (get_welt()->get_settings().get_allow_buying_obsolete_vehicles()) {
207
206
                bt_obsolete.add_listener(this);
208
207
                bt_obsolete.set_tooltip("Show also vehicles no longer in production.");
209
208
                add_komponente(&bt_obsolete);
242
241
}
243
242
 
244
243
 
 
244
// returns position of depot on the map
 
245
koord3d depot_frame_t::get_weltpos()
 
246
{
 
247
        return depot->get_pos();
 
248
}
 
249
 
 
250
 
245
251
void depot_frame_t::layout(koord *gr)
246
252
{
247
253
        koord placement;
259
265
        grid.y = depot->get_y_grid() * get_base_tile_raster_width() / 64 + 6;
260
266
        placement.x = depot->get_x_placement() * get_base_tile_raster_width() / 64 + 2;
261
267
        placement.y = depot->get_y_placement() * get_base_tile_raster_width() / 64 + 2;
262
 
        if(depot->get_wegtyp()==road_wt  &&  umgebung_t::drive_on_left) {
263
 
                // correct for dive on left
264
 
                placement.x -= (12*get_base_tile_raster_width())/64;
265
 
                placement.y -= (6*get_base_tile_raster_width())/64;
266
 
        }
267
268
        grid_dx = depot->get_x_grid() * get_base_tile_raster_width() / 64 / 2;
268
269
        placement_dx = depot->get_x_grid() * get_base_tile_raster_width() / 64 / 4;
269
270
 
307
308
        *           [Start][Schedule][Destroy][Sell]
308
309
        *      [new Route][change Route][delete Route]
309
310
        */
310
 
        int ABUTTON_WIDTH = 96;
 
311
        int ABUTTON_WIDTH = 92;
311
312
        int ABUTTON_HEIGHT = 14;
312
 
        int ACTIONS_WIDTH = 4 * ABUTTON_WIDTH;
 
313
        int ACTIONS_WIDTH = 2+4*(ABUTTON_WIDTH+2);
313
314
        int ACTIONS_HEIGHT = ABUTTON_HEIGHT + ABUTTON_HEIGHT; // @author hsiegeln: added "+ ABUTTON_HEIGHT"
314
315
 
315
316
        /*
316
317
        *       Structure of [VINFO] is one multiline text.
317
318
        */
318
 
        int VINFO_HEIGHT = 86+12;
 
319
        int VINFO_HEIGHT = 9*LINESPACE-1;
319
320
 
320
321
        /*
321
322
        * Total width is the max from [CONVOI] and [ACTIONS] width.
330
331
        int CONVOI_VSTART = SELECT_VSTART + SELECT_HEIGHT + LINESPACE;
331
332
        int CINFO_VSTART = CONVOI_VSTART + CLIST_HEIGHT;
332
333
        int ACTIONS_VSTART = CINFO_VSTART + CINFO_HEIGHT + 2 + LINESPACE * 2;
333
 
        int PANEL_VSTART = ACTIONS_VSTART + ACTIONS_HEIGHT + 8;
 
334
        int PANEL_VSTART = ACTIONS_VSTART + ACTIONS_HEIGHT + 2;
334
335
 
335
336
        /*
336
337
        * Now we determine the row/col layout for the panel and the total panel
371
372
         */
372
373
        lb_convois.set_pos(koord(4, SELECT_VSTART - 10));
373
374
 
374
 
        bt_prev.set_pos(koord(5, SELECT_VSTART + 2));
375
 
 
376
 
        inp_name.set_pos(koord(5+12, SELECT_VSTART));
377
 
        inp_name.set_groesse(koord(TOTAL_WIDTH - 26-8, 14));
378
 
 
379
 
        bt_next.set_pos(koord(TOTAL_WIDTH - 15, SELECT_VSTART + 2));
 
375
        bt_prev.set_pos(koord(3, SELECT_VSTART + 2));
 
376
 
 
377
        inp_name.set_pos(koord(3+12, SELECT_VSTART));
 
378
        inp_name.set_groesse(koord(TOTAL_WIDTH - 26-3, 14));
 
379
 
 
380
        bt_next.set_pos(koord(TOTAL_WIDTH - 12, SELECT_VSTART + 2));
380
381
 
381
382
        /*
382
383
         * [SELECT ROUTE]:
383
384
         * @author hsiegeln
384
385
         */
385
 
        line_selector.set_pos(koord(5, SELECT_VSTART + 14));
386
 
        line_selector.set_groesse(koord(TOTAL_WIDTH - 8, 14));
387
 
        line_selector.set_max_size(koord(TOTAL_WIDTH - 8, LINESPACE*13+2+16));
 
386
        line_selector.set_pos(koord(3, SELECT_VSTART + 14));
 
387
        line_selector.set_groesse(koord(TOTAL_WIDTH - 3, 14));
 
388
        line_selector.set_max_size(koord(TOTAL_WIDTH - 3, LINESPACE*13+2+16));
388
389
        line_selector.set_highlight_color(1);
389
390
 
390
391
        /*
403
404
        /*
404
405
         * [ACTIONS]
405
406
         */
406
 
        bt_start.set_pos(koord(0, ACTIONS_VSTART));
407
 
        bt_start.set_groesse(koord(TOTAL_WIDTH/4, ABUTTON_HEIGHT));
 
407
        bt_start.set_pos(koord(2, ACTIONS_VSTART));
 
408
        bt_start.set_groesse(koord(TOTAL_WIDTH/4-2, ABUTTON_HEIGHT));
408
409
        bt_start.set_text("Start");
409
410
 
410
 
        bt_schedule.set_pos(koord(TOTAL_WIDTH/4, ACTIONS_VSTART));
411
 
        bt_schedule.set_groesse(koord(TOTAL_WIDTH*2/4-TOTAL_WIDTH/4, ABUTTON_HEIGHT));
 
411
        bt_schedule.set_pos(koord(TOTAL_WIDTH/4+2, ACTIONS_VSTART));
 
412
        bt_schedule.set_groesse(koord(TOTAL_WIDTH*2/4-TOTAL_WIDTH/4-3, ABUTTON_HEIGHT));
412
413
        bt_schedule.set_text("Fahrplan");
413
414
 
414
 
        bt_destroy.set_pos(koord(TOTAL_WIDTH*2/4, ACTIONS_VSTART));
415
 
        bt_destroy.set_groesse(koord(TOTAL_WIDTH*3/4-TOTAL_WIDTH*2/4, ABUTTON_HEIGHT));
 
415
        bt_destroy.set_pos(koord(TOTAL_WIDTH*2/4+1, ACTIONS_VSTART));
 
416
        bt_destroy.set_groesse(koord(TOTAL_WIDTH*3/4-TOTAL_WIDTH*2/4-2, ABUTTON_HEIGHT));
416
417
        bt_destroy.set_text("Aufloesen");
417
418
 
418
 
        bt_sell.set_pos(koord(TOTAL_WIDTH*3/4, ACTIONS_VSTART));
419
 
        bt_sell.set_groesse(koord(TOTAL_WIDTH-TOTAL_WIDTH*3/4, ABUTTON_HEIGHT));
 
419
        bt_sell.set_pos(koord(TOTAL_WIDTH*3/4+1, ACTIONS_VSTART));
 
420
        bt_sell.set_groesse(koord(TOTAL_WIDTH-TOTAL_WIDTH*3/4-3, ABUTTON_HEIGHT));
420
421
        bt_sell.set_text("Verkauf");
421
422
 
422
423
        /*
423
424
         * ACTIONS for new route management buttons
424
425
         * @author hsiegeln
425
426
         */
426
 
        bt_new_line.set_pos(koord(0, ACTIONS_VSTART+ABUTTON_HEIGHT));
427
 
        bt_new_line.set_groesse(koord(TOTAL_WIDTH/4, ABUTTON_HEIGHT));
 
427
        bt_new_line.set_pos(koord(2, ACTIONS_VSTART+ABUTTON_HEIGHT));
 
428
        bt_new_line.set_groesse(koord(TOTAL_WIDTH/4-2, ABUTTON_HEIGHT));
428
429
        bt_new_line.set_text("New Line");
429
430
 
430
 
        bt_apply_line.set_pos(koord(TOTAL_WIDTH/4, ACTIONS_VSTART+ABUTTON_HEIGHT));
431
 
        bt_apply_line.set_groesse(koord(TOTAL_WIDTH*2/4-TOTAL_WIDTH/4, ABUTTON_HEIGHT));
 
431
        bt_apply_line.set_pos(koord(TOTAL_WIDTH/4+2, ACTIONS_VSTART+ABUTTON_HEIGHT));
 
432
        bt_apply_line.set_groesse(koord(TOTAL_WIDTH*2/4-3-TOTAL_WIDTH/4, ABUTTON_HEIGHT));
432
433
        bt_apply_line.set_text("Apply Line");
433
434
 
434
 
        bt_change_line.set_pos(koord(TOTAL_WIDTH*2/4, ACTIONS_VSTART+ABUTTON_HEIGHT));
435
 
        bt_change_line.set_groesse(koord(TOTAL_WIDTH*3/4-TOTAL_WIDTH*2/4, ABUTTON_HEIGHT));
 
435
        bt_change_line.set_pos(koord(TOTAL_WIDTH*2/4+1, ACTIONS_VSTART+ABUTTON_HEIGHT));
 
436
        bt_change_line.set_groesse(koord(TOTAL_WIDTH*3/4-2-TOTAL_WIDTH*2/4, ABUTTON_HEIGHT));
436
437
        bt_change_line.set_text("Update Line");
437
438
 
438
 
        bt_copy_convoi.set_pos(koord(TOTAL_WIDTH*3/4, ACTIONS_VSTART+ABUTTON_HEIGHT));
439
 
        bt_copy_convoi.set_groesse(koord(TOTAL_WIDTH-TOTAL_WIDTH*3/4, ABUTTON_HEIGHT));
 
439
        bt_copy_convoi.set_pos(koord(TOTAL_WIDTH*3/4+1, ACTIONS_VSTART+ABUTTON_HEIGHT));
 
440
        bt_copy_convoi.set_groesse(koord(TOTAL_WIDTH-TOTAL_WIDTH*3/4-3, ABUTTON_HEIGHT));
440
441
        bt_copy_convoi.set_text("Copy Convoi");
441
442
 
442
443
        /*
447
448
 
448
449
        pas.set_grid(grid);
449
450
        pas.set_placement(placement);
450
 
        pas.set_groesse(tabs.get_groesse());
 
451
        pas.set_groesse(tabs.get_groesse()-koord(scrollbar_t::BAR_SIZE,0));
451
452
        pas.recalc_size();
452
 
        pas.set_pos(koord(1,1));
 
453
        pas.set_pos(koord(0,0));
453
454
        cont_pas.set_groesse(pas.get_groesse());
454
455
        scrolly_pas.set_groesse(scrolly_pas.get_groesse());
 
456
        scrolly_pas.set_scroll_amount_y(grid.y);
 
457
        scrolly_pas.set_scroll_discrete_y(false);
 
458
        scrolly_pas.set_size_corner(false);
455
459
 
456
460
        electrics.set_grid(grid);
457
461
        electrics.set_placement(placement);
458
 
        electrics.set_groesse(tabs.get_groesse());
 
462
        electrics.set_groesse(tabs.get_groesse()-koord(scrollbar_t::BAR_SIZE,0));
459
463
        electrics.recalc_size();
460
 
        electrics.set_pos(koord(1,1));
 
464
        electrics.set_pos(koord(0,0));
461
465
        cont_electrics.set_groesse(electrics.get_groesse());
462
466
        scrolly_electrics.set_groesse(scrolly_electrics.get_groesse());
 
467
        scrolly_electrics.set_scroll_amount_y(grid.y);
 
468
        scrolly_electrics.set_scroll_discrete_y(false);
 
469
        scrolly_electrics.set_size_corner(false);
463
470
 
464
471
        loks.set_grid(grid);
465
472
        loks.set_placement(placement);
466
 
        loks.set_groesse(tabs.get_groesse());
 
473
        loks.set_groesse(tabs.get_groesse()-koord(scrollbar_t::BAR_SIZE,0));
467
474
        loks.recalc_size();
468
 
        loks.set_pos(koord(1,1));
469
 
        cont_loks.set_pos(koord(0,0));
 
475
        loks.set_pos(koord(0,0));
470
476
        cont_loks.set_groesse(loks.get_groesse());
471
477
        scrolly_loks.set_groesse(scrolly_loks.get_groesse());
 
478
        scrolly_loks.set_scroll_amount_y(grid.y);
 
479
        scrolly_loks.set_scroll_discrete_y(false);
 
480
        scrolly_loks.set_size_corner(false);
472
481
 
473
482
        waggons.set_grid(grid);
474
483
        waggons.set_placement(placement);
475
 
        waggons.set_groesse(tabs.get_groesse());
 
484
        waggons.set_groesse(tabs.get_groesse()-koord(scrollbar_t::BAR_SIZE,0));
476
485
        waggons.recalc_size();
477
 
        waggons.set_pos(koord(1,1));
 
486
        waggons.set_pos(koord(0,0));
478
487
        cont_waggons.set_groesse(waggons.get_groesse());
479
488
        scrolly_waggons.set_groesse(scrolly_waggons.get_groesse());
 
489
        scrolly_waggons.set_scroll_amount_y(grid.y);
 
490
        scrolly_waggons.set_scroll_discrete_y(false);
 
491
        scrolly_waggons.set_size_corner(false);
480
492
 
481
493
        div_tabbottom.set_pos(koord(0,PANEL_VSTART+PANEL_HEIGHT));
482
494
        div_tabbottom.set_groesse(koord(TOTAL_WIDTH,0));
862
874
                // otherwise some unintended undo if renaming would occur
863
875
                if(  t  &&  t[0]  &&  strcmp(t, cnv->get_name())  &&  strcmp(txt_old_cnv_name, cnv->get_name())==0  ) {
864
876
                        // text changed => call tool
865
 
                        cbuffer_t buf(300);
 
877
                        cbuffer_t buf;
866
878
                        buf.printf( "c%u,%s", cnv.get_id(), t );
867
879
                        werkzeug_t *w = create_tool( WKZ_RENAME_TOOL | SIMPLE_TOOL );
868
880
                        w->set_default_param( buf );
921
933
                        }
922
934
                }
923
935
 
924
 
                cbuffer_t start(16);
925
 
                start.append( start_nr );
 
936
                cbuffer_t start;
 
937
                start.printf("%u", start_nr);
926
938
 
927
939
                depot->call_depot_tool( 'r', cnv, start );
928
940
        }
1102
1114
 
1103
1115
        convoihandle_t cnv = depot->get_convoi(icnv);
1104
1116
        // check for data inconsistencies (can happen with withdraw-all and vehicle in depot)
1105
 
        if(!cnv.is_bound() && convoi_pics.get_count()>0){
 
1117
        if (!cnv.is_bound() && !convoi_pics.empty()) {
1106
1118
                icnv=0;
1107
1119
                update_data();
1108
1120
                cnv = depot->get_convoi(icnv);
1111
1123
        if(cnv.is_bound()) {
1112
1124
                if(cnv->get_vehikel_anzahl() > 0) {
1113
1125
                        uint32 total_power=0;
 
1126
                        uint32 total_empty_weight=0;
1114
1127
                        uint32 total_max_weight=0;
1115
1128
                        uint32 total_min_weight=0;
 
1129
                        sint32 empty_speed=0;
1116
1130
                        sint32 max_speed=0;
1117
1131
                        sint32 min_speed=0;
1118
1132
                        for( unsigned i=0;  i<cnv->get_vehikel_anzahl();  i++) {
1121
1135
                                total_power += besch->get_leistung()*besch->get_gear()/64;
1122
1136
                                total_min_weight += besch->get_gewicht();
1123
1137
                                total_max_weight += besch->get_gewicht();
 
1138
                                total_empty_weight += besch->get_gewicht();
1124
1139
 
1125
1140
                                uint32 max_weight =0;
1126
1141
                                uint32 min_weight =100000;
1136
1151
                                total_min_weight += (min_weight*besch->get_zuladung()+499)/1000;
1137
1152
                        }
1138
1153
                        // ensure that argument of sqrt is not negative
1139
 
                        max_speed = total_power < total_min_weight ? 0 : min( speed_to_kmh(cnv->get_min_top_speed()), sqrt( (double)total_power/total_min_weight - 1)*50 );
1140
 
                        min_speed = total_power < total_max_weight ? 0 : min( speed_to_kmh(cnv->get_min_top_speed()), sqrt( (double)total_power/total_max_weight - 1)*50 );
 
1154
                        const sint32 cnv_min_top_speed = speed_to_kmh( cnv->get_min_top_speed() );
 
1155
                        empty_speed = total_power < total_empty_weight ? 0 : min( cnv_min_top_speed, sqrt( (double)total_power/total_empty_weight - 1)*50 );
 
1156
                        max_speed = total_power < total_min_weight ? 0 : min( cnv_min_top_speed, sqrt( (double)total_power/total_min_weight - 1)*50 );
 
1157
                        min_speed = total_power < total_max_weight ? 0 : min( cnv_min_top_speed, sqrt( (double)total_power/total_max_weight - 1)*50 );
 
1158
 
1141
1159
                        sprintf(txt_convoi_count, "%s %d (%s %i)",
1142
1160
                                translator::translate("Fahrzeuge:"), cnv->get_vehikel_anzahl(),
1143
1161
                                translator::translate("Station tiles:"), cnv->get_tile_length() );
1144
 
                        sprintf(txt_convoi_speed,  "%s %d(%d)km/h", translator::translate("Max. speed:"), min_speed, max_speed );
 
1162
                        if(  empty_speed != min_speed  ) {
 
1163
                                if(  max_speed != min_speed  ) {
 
1164
                                        sprintf( txt_convoi_speed, "%s %d km/h, %d-%d km/h %s", translator::translate("Max. speed:"), empty_speed, min_speed, max_speed, translator::translate("loaded") );
 
1165
                                }
 
1166
                                else {
 
1167
                                        sprintf( txt_convoi_speed, "%s %d km/h, %d km/h %s", translator::translate("Max. speed:"), empty_speed, min_speed, translator::translate("loaded") );
 
1168
                                }
 
1169
                        }
 
1170
                        else {
 
1171
                                        sprintf( txt_convoi_speed, "%s %d km/h", translator::translate("Max. speed:"), empty_speed );
 
1172
                        }
1145
1173
                        sprintf(txt_convoi_value, "%s %ld$", translator::translate("Restwert:"), (long)(cnv->calc_restwert()/100) );
1146
1174
                        if(  cnv->get_line().is_bound()  &&  cnv->get_line()->get_schedule()->matches( get_welt(),cnv->get_schedule() )  ) {
1147
1175
                                sprintf(txt_convoi_line, "%s %s", translator::translate("Serves Line:"), cnv->get_line()->get_name());
1283
1311
 
1284
1312
                        sprintf(name,
1285
1313
                        "%s (%s)",
1286
 
                        translator::translate(veh_type->get_name(),depot->get_welt()->get_einstellungen()->get_name_language_id()),
 
1314
                        translator::translate(veh_type->get_name(), depot->get_welt()->get_settings().get_name_language_id()),
1287
1315
                        translator::translate(engine_type_names[veh_type->get_engine_type()+1]));
1288
1316
 
1289
1317
                        int n = sprintf(buf,
1310
1338
                        // waggon
1311
1339
                        sprintf(buf,
1312
1340
                                translator::translate("WAGGON_INFO"),
1313
 
                                translator::translate(veh_type->get_name(),depot->get_welt()->get_einstellungen()->get_name_language_id()),
 
1341
                                translator::translate(veh_type->get_name(), depot->get_welt()->get_settings().get_name_language_id()),
1314
1342
                                veh_type->get_preis()/100,
1315
1343
                                veh_type->get_betriebskosten()/100.0,
1316
1344
                                veh_type->get_zuladung(),
1336
1364
                                translator::get_month_name(veh_type->get_retire_year_month()%12),
1337
1365
                                veh_type->get_retire_year_month()/12 );
1338
1366
                }
 
1367
                else {
 
1368
                        n += sprintf(buf+n, "\n");
 
1369
                }
1339
1370
 
1340
1371
                if(veh_type->get_leistung() > 0  &&  veh_type->get_gear()!=64) {
1341
1372
                        n+= sprintf(buf+n, "%s %0.2f : 1\n", translator::translate("Gear:"),    veh_type->get_gear()/64.0);
1342
1373
                }
 
1374
                else {
 
1375
                        n += sprintf(buf+n, "\n");
 
1376
                }
1343
1377
 
1344
 
                if(veh_type->get_copyright()!=NULL  &&  veh_type->get_copyright()[0]!=0) {
1345
 
                        n += sprintf(buf + n, translator::translate("Constructed by %s"), veh_type->get_copyright());
 
1378
                if (char const* const copyright = veh_type->get_copyright()) {
 
1379
                        n += sprintf(buf + n, translator::translate("Constructed by %s"), copyright);
 
1380
                }
 
1381
                else {
 
1382
                        n += sprintf(buf+n, "\n");
1346
1383
                }
1347
1384
 
1348
1385
                if(value != -1) {
1367
1404
        bool one = false;
1368
1405
 
1369
1406
        cont_pas.add_komponente(&pas);
1370
 
        scrolly_pas.set_show_scroll_x(false);
1371
 
        scrolly_pas.set_size_corner(false);
1372
1407
        // add only if there are any
1373
1408
        if(!pas_vec.empty()) {
1374
1409
                tabs.add_tab(&scrolly_pas, translator::translate( depot->get_passenger_name() ) );
1376
1411
        }
1377
1412
 
1378
1413
        cont_electrics.add_komponente(&electrics);
1379
 
        scrolly_electrics.set_show_scroll_x(false);
1380
 
        scrolly_electrics.set_size_corner(false);
1381
1414
        // add only if there are any trolleybuses
1382
1415
        if(!electrics_vec.empty()) {
1383
1416
                tabs.add_tab(&scrolly_electrics, translator::translate( depot->get_electrics_name() ) );
1385
1418
        }
1386
1419
 
1387
1420
        cont_loks.add_komponente(&loks);
1388
 
        scrolly_loks.set_show_scroll_x(false);
1389
 
        scrolly_loks.set_size_corner(false);
1390
1421
        // add, if waggons are there ...
1391
1422
        if (!loks_vec.empty() || !waggons_vec.empty()) {
1392
1423
                tabs.add_tab(&scrolly_loks, translator::translate( depot->get_zieher_name() ) );
1394
1425
        }
1395
1426
 
1396
1427
        cont_waggons.add_komponente(&waggons);
1397
 
        scrolly_waggons.set_show_scroll_x(false);
1398
 
        scrolly_waggons.set_size_corner(false);
1399
1428
        // only add, if there are waggons
1400
1429
        if (!waggons_vec.empty()) {
1401
1430
                tabs.add_tab(&scrolly_waggons, translator::translate( depot->get_haenger_name() ) );