From b623f5953691b2a0614e6f1f4def86bdbb9a4113 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Frings-F=C3=BCrst?= Date: Sat, 8 Aug 2020 11:53:00 +0200 Subject: New upstream version 5.2.0Beta2.1 --- app/bin/dlayer.c | 143 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 130 insertions(+), 13 deletions(-) (limited to 'app/bin/dlayer.c') diff --git a/app/bin/dlayer.c b/app/bin/dlayer.c index 70f613f..352dbe1 100644 --- a/app/bin/dlayer.c +++ b/app/bin/dlayer.c @@ -29,6 +29,7 @@ #include "dynstring.h" #include "fileio.h" #include "i18n.h" +#include "layout.h" #include "messages.h" #include "param.h" #include "track.h" @@ -43,6 +44,7 @@ #define LAYERPREF_FROZEN (1) #define LAYERPREF_ONMAP (2) #define LAYERPREF_VISIBLE (4) +#define LAYERPREF_MODULE (8) #define LAYERPREF_SECTION ("Layers") #define LAYERPREF_NAME "name" #define LAYERPREF_COLOR "color" @@ -66,9 +68,11 @@ static wList_p setLayerL; typedef struct { char name[STR_SHORT_SIZE]; /**< Layer name */ wDrawColor color; /**< layer color, is an index into a color table */ + BOOL_T useColor; /**< Use Layer color */ BOOL_T frozen; /**< Frozen flag */ BOOL_T visible; /**< visible flag */ BOOL_T onMap; /**< is layer shown map */ + BOOL_T module; /**< is layer a module (all or nothing) */ long objCount; /**< number of objects on layer */ } layer_t; @@ -176,6 +180,22 @@ BOOL_T GetLayerOnMap(unsigned int layer) } } +BOOL_T GetLayerModule(unsigned int layer) +{ + if (!IsLayerValid(layer)) { + return TRUE; + } else { + return layers[layer].module; + } +} + +void SetLayerModule(unsigned int layer, BOOL_T module) +{ + if (IsLayerValid(layer)) { + layers[layer].module = module; + } +} + char * GetLayerName(unsigned int layer) { @@ -186,11 +206,26 @@ char * GetLayerName(unsigned int layer) } } +void SetLayerName(unsigned int layer, char* name) { + if (IsLayerValid(layer)) { + strcpy(layers[layer].name,name); + } +} + +BOOL_T GetLayerUseColor(unsigned int layer) { + return layers[layer].useColor; +} + wDrawColor GetLayerColor(unsigned int layer) { return layers[layer].color; } +static void RedrawLayer( unsigned int l, BOOL_T draw ) +{ + DoRedraw(); // RedrawLayer +} + static void FlipLayer(unsigned int layer) { @@ -218,7 +253,7 @@ static void FlipLayer(unsigned int layer) RedrawLayer(layer, TRUE); } -static void SetCurrLayer(wIndex_t inx, const char * name, wIndex_t op, +void SetCurrLayer(wIndex_t inx, const char * name, wIndex_t op, void * listContext, void * arg) { unsigned int newLayer = (unsigned int)inx; @@ -422,9 +457,11 @@ static wDrawColor layerColorTab[COUNT(layerRawColorTab)]; static wWin_p layerW; static char layerName[STR_SHORT_SIZE]; static wDrawColor layerColor; +static long layerUseColor = TRUE; static long layerVisible = TRUE; static long layerFrozen = FALSE; static long layerOnMap = TRUE; +static long layerModule = FALSE; static void LayerOk(void *); static BOOL_T layerRedrawMap = FALSE; @@ -435,6 +472,8 @@ static BOOL_T layerRedrawMap = FALSE; static char *visibleLabels[] = { "", NULL }; static char *frozenLabels[] = { "", NULL }; static char *onMapLabels[] = { "", NULL }; +static char *moduleLabels[] = { "", NULL }; +static char *layerColorLabels[] = { "", NULL }; static paramIntegerRange_t i0_20 = { 0, NUM_BUTTONS }; static paramData_t layerPLs[] = { @@ -444,13 +483,17 @@ static paramData_t layerPLs[] = { { PD_STRING, layerName, "name", PDO_NOPREF|PDO_STRINGLIMITLENGTH, (void*)(250-54), N_("Name"), 0, 0, sizeof(layerName) }, #define I_COLOR (2) { PD_COLORLIST, &layerColor, "color", PDO_NOPREF, NULL, N_("Color") }, -#define I_VIS (3) +#define I_USE_COLOR (3) + { PD_TOGGLE, &layerUseColor, "layercolor", PDO_NOPREF|PDO_DLGHORZ, layerColorLabels, N_("Use Color"), BC_HORZ|BC_NOBORDER }, +#define I_VIS (4) { PD_TOGGLE, &layerVisible, "visible", PDO_NOPREF, visibleLabels, N_("Visible"), BC_HORZ|BC_NOBORDER }, -#define I_FRZ (4) +#define I_FRZ (5) { PD_TOGGLE, &layerFrozen, "frozen", PDO_NOPREF|PDO_DLGHORZ, frozenLabels, N_("Frozen"), BC_HORZ|BC_NOBORDER }, -#define I_MAP (5) +#define I_MAP (6) { PD_TOGGLE, &layerOnMap, "onmap", PDO_NOPREF|PDO_DLGHORZ, onMapLabels, N_("On Map"), BC_HORZ|BC_NOBORDER }, -#define I_COUNT (6) +#define I_MOD (7) + { PD_TOGGLE, &layerModule, "module", PDO_NOPREF|PDO_DLGHORZ, moduleLabels, N_("Module"), BC_HORZ|BC_NOBORDER }, +#define I_COUNT (8) { PD_STRING, NULL, "object-count", PDO_NOPREF|PDO_DLGBOXEND, (void*)(80), N_("Count"), BO_READONLY }, { PD_MESSAGE, N_("Personal Preferences"), NULL, PDO_DLGRESETMARGIN, (void *)180 }, { PD_BUTTON, (void*)DoLayerOp, "reset", PDO_DLGRESETMARGIN, 0, N_("Load"), 0, (void *)ENUMLAYER_RELOAD }, @@ -477,6 +520,7 @@ LayerSystemDefaults(void) layers[inx].visible = TRUE; layers[inx].frozen = FALSE; layers[inx].onMap = TRUE; + layers[inx].module = FALSE; layers[inx].objCount = 0; SetLayerColor(inx, layerColorTab[inx%COUNT(layerColorTab)]); } @@ -547,7 +591,7 @@ static void DoLayerOp(void * data) if (layoutLayerChanged) { MainProc(mainW, wResize_e, NULL, NULL); layoutLayerChanged = FALSE; - changed = TRUE; + changed++; SetWindowTitle(); } } @@ -566,7 +610,9 @@ UpdateLayerDlg() layerVisible = layers[curLayer].visible; layerFrozen = layers[curLayer].frozen; layerOnMap = layers[curLayer].onMap; + layerModule = layers[curLayer].module; layerColor = layers[curLayer].color; + layerUseColor = layers[curLayer].useColor; strcpy(layerName, layers[curLayer].name); layerCurrent = curLayer; /* now re-load the layer list boxes */ @@ -587,6 +633,28 @@ UpdateLayerDlg() } } +/** + * Fill a layer dropbox with the current layer settings + * + * \param listLayers the dropbox + * \return + */ + +void +FillLayerList( wList_p listLayers) +{ + wListClear(listLayers); // Rebuild list on each invovation + + for (int inx = 0; inx < NUM_LAYERS; inx++) { + char *layerFormattedName; + layerFormattedName = FormatLayerName(inx); + wListAddValue((wList_p)listLayers, layerFormattedName, NULL, (void*)(long)inx); + free(layerFormattedName); + } + + /* set current layer to selected */ + wListSetIndex(listLayers, curLayer); +} /** * Initialize the layer lists. * @@ -646,6 +714,10 @@ LayerPrefSave(void) flags |= LAYERPREF_VISIBLE; } + if (layers[inx].module) { + flags |= LAYERPREF_MODULE; + } + sprintf(buffer, LAYERPREF_FLAGS ".%0u", inx); wPrefSetInteger(LAYERPREF_SECTION, buffer, flags); @@ -710,6 +782,7 @@ LayerPrefLoad(void) layers[inx].frozen = ((flags & LAYERPREF_FROZEN) != 0); layers[inx].onMap = ((flags & LAYERPREF_ONMAP) != 0); layers[inx].visible = ((flags & LAYERPREF_VISIBLE) != 0); + layers[inx].module = ((flags & LAYERPREF_MODULE) !=0); prefString = strtok(NULL, ","); } } @@ -761,6 +834,15 @@ void LayerSetCounts(void) } } +int FindUnusedLayer(unsigned int start) { + int inx; + for (inx=start; inx 0) { @@ -1117,12 +1220,13 @@ BOOL_T ReadLayers(char * line) * \return TRUE if configured, FALSE if not */ -bool +BOOL_T IsLayerConfigured(unsigned int layerNumber) { return (!layers[layerNumber].visible || layers[layerNumber].frozen || !layers[layerNumber].onMap || + layers[layerNumber].module || layers[layerNumber].color != layerColorTab[layerNumber % (COUNT(layerColorTab))] || layers[layerNumber].name[0] || @@ -1140,6 +1244,11 @@ BOOL_T WriteLayers(FILE * f) { unsigned int inx; + int ColorFlags = 0; + + if (colorTrack) ColorFlags |= 1; + if (colorDraw) ColorFlags |= 2; + for (inx = 0; inx < NUM_LAYERS; inx++) { if (IsLayerConfigured(inx)) { fprintf(f, "LAYERS %u %d %d %d %ld %d %d %d %d \"%s\"\n", @@ -1148,7 +1257,9 @@ BOOL_T WriteLayers(FILE * f) layers[inx].frozen, layers[inx].onMap, wDrawGetRGB(layers[inx].color), - 0, 0, 0, 0, + layers[inx].module, + layers[inx].useColor?0:1, + ColorFlags, 0, PutTitle(layers[inx].name)); } } @@ -1157,6 +1268,7 @@ BOOL_T WriteLayers(FILE * f) return TRUE; } +#include "bitmaps/background.xpm" void InitLayers(void) { @@ -1173,6 +1285,7 @@ void InitLayers(void) show_layer_bmps[i] = wIconCreateBitMap(l1_width, l1_height, show_layer_bits[i], layerColorTab[i%(COUNT(layerColorTab))]); layers[i].color = layerColorTab[i%(COUNT(layerColorTab))]; + layers[i].useColor = TRUE; } /* layer list for toolbar */ @@ -1180,6 +1293,10 @@ void InitLayers(void) SetCurrLayer, NULL); wControlSetBalloonText((wControl_p)setLayerL, GetBalloonHelpStr("cmdLayerSet")); AddToolbarControl((wControl_p)setLayerL, IC_MODETRAIN_TOO); + + backgroundB = AddToolbarButton("cmdBackgroundShow", wIconCreatePixMap(background), 0, + (addButtonCallBack_t)BackgroundToggleShow, NULL); + wControlActive((wControl_p)backgroundB, FALSE); for (i = 0; i