From d1a8285f818eb7e5c3d6a05709ea21a808490b8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Frings-F=C3=BCrst?= Date: Mon, 19 Mar 2018 19:55:58 +0100 Subject: New upstream version 5.1.0 --- app/bin/misc2.c | 98 +++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 67 insertions(+), 31 deletions(-) (limited to 'app/bin/misc2.c') diff --git a/app/bin/misc2.c b/app/bin/misc2.c index 2c7644b..0dbb57d 100644 --- a/app/bin/misc2.c +++ b/app/bin/misc2.c @@ -36,27 +36,32 @@ #include -#include "track.h" -#include "common.h" -#include "utility.h" -#include "draw.h" -#include "misc.h" #include "cjoin.h" +#include "common.h" #include "compound.h" +#include "custom.h" +#include "draw.h" +#include "fileio.h" #include "i18n.h" +#include "layout.h" +#include "messages.h" +#include "misc.h" +#include "param.h" +#include "track.h" +#include "utility.h" + -EXPORT long units = 0; /**< measurement units: 0 = English, 1 = metric */ +EXPORT long units = 0; /**< measurement units: 0 = English, 1 = metric */ EXPORT long checkPtInterval = 10; EXPORT DIST_T curScaleRatio; EXPORT char * curScaleName; EXPORT DIST_T trackGauge; -EXPORT char Title1[TITLEMAXLEN] = ""; -EXPORT char Title2[TITLEMAXLEN] = "Title line 2"; EXPORT long labelScale = 8; EXPORT long labelEnable = ((1<<0)|LABELENABLE_LENGTHS|LABELENABLE_ENDPT_ELEV|LABELENABLE_CARS); EXPORT long labelWhen = 2; EXPORT long colorLayers = 0; +EXPORT long zoomCorner = 0; EXPORT long hideSelectionWindow = 0; EXPORT long angleSystem = 0; EXPORT DIST_T minLength = 0.1; @@ -65,13 +70,15 @@ EXPORT ANGLE_T connectAngle = 1.0; EXPORT long twoRailScale = 16; EXPORT long mapScale = 64; EXPORT long liveMap = 0; -EXPORT long preSelect = 0; +EXPORT long preSelect = 0; /**< default command 0 = Describe 1 = Select */ EXPORT long listLabels = 7; EXPORT long layoutLabels = 1; EXPORT long descriptionFontSize = 72; EXPORT long enableListPrices = 1; EXPORT void ScaleLengthEnd(void); -static char minTrackRadiusPrefS[STR_SHORT_SIZE] = "minTrackRadius"; + +static BOOL_T SetScaleDescGauge(SCALEINX_T scaleInx); + /**************************************************************************** * @@ -173,7 +180,7 @@ static tieData_t tieData_demo = { 16.0/160.0, 32.0/160.0 }; -EXPORT SCALEINX_T curScaleInx = -1; +//EXPORT SCALEINX_T curScaleInx = -1; static scaleInfo_p curScale; EXPORT long includeSameGaugeTurnouts = FALSE; static SCALEINX_T demoScaleInx = -1; @@ -188,8 +195,6 @@ typedef struct { EXPORT typedef gaugeInfo_t * gaugeInfo_p; -EXPORT GAUGEINX_T curGaugeInx = 0; - /** this struct holds a scale description */ typedef struct { char *scaleDesc; /** ptr to textual description eg. 'HO' */ @@ -202,7 +207,6 @@ EXPORT typedef scaleDesc_t *scaleDesc_p; static dynArr_t scaleDesc_da; #define scaleDesc(N) DYNARR_N( scaleDesc_t, scaleDesc_da, N ) -EXPORT SCALEDESCINX_T curScaleDescInx; /** * Get the ratio from a scale description. Each member in the list of scale descriptions is @@ -307,6 +311,48 @@ EXPORT char *GetGaugeDesc( SCALEDESCINX_T scaleInx, GAUGEINX_T gaugeInx ) return g->gauge; } +void +SetScaleGauge(SCALEDESCINX_T desc, GAUGEINX_T gauge) +{ + dynArr_t gauges_da; + + gauges_da = (scaleDesc(desc)).gauges_da; + SetLayoutCurScale(((gaugeInfo_p)gauges_da.ptr)[gauge].scale); +} + +static BOOL_T +SetScaleDescGauge(SCALEINX_T scaleInx) +{ + int i, j; + char *scaleName = GetScaleName(scaleInx); + DIST_T scaleRatio = GetScaleRatio(scaleInx); + dynArr_t gauges_da; + + for (i = 0; i < scaleDesc_da.cnt; i++) { + char *t = strchr(scaleDesc(i).scaleDesc, ' '); + /* are the first characters (which describe the scale) identical? */ + if (!strncmp(scaleDesc(i).scaleDesc, scaleName, t - scaleDesc(i).scaleDesc)) { + /* if yes, are we talking about the same ratio */ + if (scaleInfo(scaleDesc(i).scale).ratio == scaleRatio) { + /* yes, we found the right scale descriptor, so now look for the gauge */ + SetLayoutCurScaleDesc( i ); + gauges_da = scaleDesc(i).gauges_da; + SetLayoutCurGauge(0); + for (j = 0; j < gauges_da.cnt; j++) { + gaugeInfo_p ptr = &(DYNARR_N(gaugeInfo_t, gauges_da, j)); + if (scaleInfo(ptr->scale).gauge == GetScaleTrackGauge(scaleInx)) { + SetLayoutCurGauge( j ); + break; + } + } + break; + } + } + } + + return TRUE; +} + EXPORT SCALEINX_T LookupScale( const char * name ) { wIndex_t si; @@ -411,21 +457,20 @@ SetScale( SCALEINX_T newScaleInx ) NoticeMessage( MSG_BAD_SCALE_INDEX, _("Ok"), NULL, (int)newScaleInx ); return; } - curScaleInx = (SCALEINX_T)newScaleInx; - curScale = &scaleInfo(curScaleInx); + SetLayoutCurScale((SCALEINX_T)newScaleInx ); + curScale = &scaleInfo(newScaleInx); trackGauge = curScale->gauge; curScaleRatio = curScale->ratio; curScaleName = curScale->scale; - curScaleDescInx = 0; + SetLayoutCurScaleDesc( 0 ); - GetScaleGauge( curScaleInx, &curScaleDescInx, &curGaugeInx ); + SetScaleDescGauge((SCALEINX_T)newScaleInx); wPrefSetString( "misc", "scale", curScaleName ); // now load the minimum radius for the newly selected scale - sprintf( minTrackRadiusPrefS, "minTrackRadius-%s", curScaleName ); - wPrefGetFloat( "misc", minTrackRadiusPrefS, &minTrackRadius, curScale->R[0] ); + LoadLayoutMinRadiusPref(curScaleName, curScale->R[0]); } /** @@ -449,7 +494,7 @@ EXPORT BOOL_T DoSetScale( while (isspace((unsigned char)*newScale)) newScale++; for (scale = 0; scale