diff options
Diffstat (limited to 'app/bin/doption.c')
-rw-r--r-- | app/bin/doption.c | 221 |
1 files changed, 78 insertions, 143 deletions
diff --git a/app/bin/doption.c b/app/bin/doption.c index b1533c9..ae36d21 100644 --- a/app/bin/doption.c +++ b/app/bin/doption.c @@ -21,9 +21,14 @@ */ #include <ctype.h> -#include "track.h" + #include "ccurve.h" +#include "cselect.h" +#include "custom.h" #include "i18n.h" +#include "messages.h" +#include "param.h" +#include "track.h" static paramIntegerRange_t i0_64 = { 0, 64 }; static paramIntegerRange_t i1_64 = { 1, 64 }; @@ -36,17 +41,16 @@ static paramIntegerRange_t i10_100 = { 10, 100 }; static paramFloatRange_t r0o1_1 = { 0.1, 1 }; static paramFloatRange_t r1_10 = { 1, 10 }; static paramFloatRange_t r1_1000 = { 1, 1000 }; -static paramFloatRange_t r1_10000 = { 1, 10000 }; -static paramFloatRange_t r0_90 = { 0, 90 }; static paramFloatRange_t r0_180 = { 0, 180 }; -static paramFloatRange_t r1_9999999 = { 1, 9999999 }; static void UpdatePrefD( void ); +static void UpdateMeasureFmt(void); + +static wIndex_t distanceFormatInx; EXPORT long enableBalloonHelp = 1; -static long GetChanges( - paramGroup_p pg ) +long GetChanges( paramGroup_p pg ) { long changes; long changed; @@ -73,8 +77,13 @@ static void OptionDlgUpdate( quickMove = *(long*)valueP; UpdateQuickMove(NULL); quickMove = quickMoveOld; - } else if ( pg->paramPtr[inx].valueP == &units ) { - UpdatePrefD(); + } else { + if (pg->paramPtr[inx].valueP == &units) { + UpdatePrefD(); + } + if (pg->paramPtr[inx].valueP == &distanceFormatInx) { + UpdateMeasureFmt(); + } } } @@ -86,121 +95,6 @@ static void OptionDlgCancel( wHide( win ); } -/**************************************************************************** - * - * Layout Dialog - * - */ - -static wWin_p layoutW; -static coOrd newSize; - -static paramData_t layoutPLs[] = { - { PD_FLOAT, &newSize.x, "roomsizeX", PDO_NOPREF|PDO_DIM|PDO_NOPSHUPD|PDO_DRAW, &r1_9999999, N_("Room Width"), 0, (void*)(CHANGE_MAIN|CHANGE_MAP) }, - { PD_FLOAT, &newSize.y, "roomsizeY", PDO_NOPREF|PDO_DIM|PDO_NOPSHUPD|PDO_DRAW|PDO_DLGHORZ, &r1_9999999, N_(" Height"), 0, (void*)(CHANGE_MAIN|CHANGE_MAP) }, - { PD_STRING, &Title1, "title1", PDO_NOPSHUPD, NULL, N_("Layout Title") }, - { PD_STRING, &Title2, "title2", PDO_NOPSHUPD, NULL, N_("Subtitle") }, - { PD_DROPLIST, &curScaleDescInx, "scale", PDO_NOPREF|PDO_NOPSHUPD|PDO_NORECORD|PDO_NOUPDACT, (void *)120, N_("Scale"), 0, (void*)(CHANGE_SCALE) }, - { PD_DROPLIST, &curGaugeInx, "gauge", PDO_NOPREF |PDO_NOPSHUPD|PDO_NORECORD|PDO_NOUPDACT|PDO_DLGHORZ, (void *)120, N_(" Gauge"), 0, (void *)(CHANGE_SCALE) }, - { PD_FLOAT, &minTrackRadius, "mintrackradius", PDO_DIM|PDO_NOPSHUPD|PDO_NOPREF, &r1_10000, N_("Min Track Radius"), 0, (void*)(CHANGE_MAIN|CHANGE_LIMITS) }, - { PD_FLOAT, &maxTrackGrade, "maxtrackgrade", PDO_NOPSHUPD|PDO_DLGHORZ, &r0_90 , N_(" Max Track Grade"), 0, (void*)(CHANGE_MAIN) } - }; - - -static paramGroup_t layoutPG = { "layout", PGO_RECORD|PGO_PREFMISC, layoutPLs, sizeof layoutPLs/sizeof layoutPLs[0] }; - -static void LayoutDlgUpdate( paramGroup_p pg, int inx, void * valueP ); - - -static void LayoutOk( void * junk ) -{ - long changes; - char prefString[ 30 ]; - - changes = GetChanges( &layoutPG ); - - /* [mf Nov. 15, 2005] Get the gauge/scale settings */ - if (changes & CHANGE_SCALE) { - SetScaleGauge( curScaleDescInx, curGaugeInx ); - } - /* [mf Nov. 15, 2005] end */ - - if (changes & CHANGE_MAP) { - SetRoomSize( newSize ); - } - - wHide( layoutW ); - DoChangeNotification(changes); - - if( changes & CHANGE_LIMITS ) { - // now set the minimum track radius - sprintf( prefString, "minTrackRadius-%s", curScaleName ); - wPrefSetFloat( "misc", prefString, minTrackRadius ); - } -} - - -static void LayoutChange( long changes ) -{ - if (changes & (CHANGE_SCALE|CHANGE_UNITS)) - if (layoutW != NULL && wWinIsVisible(layoutW) ) - ParamLoadControls( &layoutPG ); -} - - -static void DoLayout( void * junk ) -{ - newSize = mapD.size; - if (layoutW == NULL) { - layoutW = ParamCreateDialog( &layoutPG, MakeWindowTitle(_("Layout Options")), _("Ok"), LayoutOk, wHide, TRUE, NULL, 0, LayoutDlgUpdate ); - LoadScaleList( (wList_p)layoutPLs[4].control ); - } - LoadGaugeList( (wList_p)layoutPLs[5].control, curScaleDescInx ); /* set correct gauge list here */ - ParamLoadControls( &layoutPG ); - wShow( layoutW ); -} - - - -EXPORT addButtonCallBack_t LayoutInit( void ) -{ - ParamRegister( &layoutPG ); - RegisterChangeNotification( LayoutChange ); - return &DoLayout; -} - -/* [mf Nov. 15, 2005] Catch changes done in the LayoutDialog */ -static void -LayoutDlgUpdate( - paramGroup_p pg, - int inx, - void * valueP ) -{ - char prefString[ 100 ]; - char scaleDesc[ 100 ]; - - /* did the scale change ? */ - if( inx == 4 ) { - LoadGaugeList( (wList_p)layoutPLs[5].control, *((int *)valueP) ); - // set the first entry as default, usually the standard gauge for a scale - wListSetIndex( (wList_p)layoutPLs[5].control, 0 ); - - // get the minimum radius - // get the selected scale first - wListGetValues((wList_p)layoutPLs[4].control, scaleDesc, 99, NULL, NULL ); - // split of the name from the scale - strtok( scaleDesc, " " ); - - // now get the minimum track radius - sprintf( prefString, "minTrackRadius-%s", scaleDesc ); - wPrefGetFloat( "misc", prefString, &minTrackRadius, 0.0 ); - - // put the scale's minimum value into the dialog - wStringSetValue( (wString_p)layoutPLs[6].control, FormatDistance( minTrackRadius ) ); - } -} - -/* [mf Nov. 15, 2005] end */ /**************************************************************************** * @@ -213,6 +107,7 @@ static wWin_p displayW; static char * autoPanLabels[] = { N_("Auto Pan"), NULL }; static char * drawTunnelLabels[] = { N_("Hide"), N_("Dash"), N_("Normal"), NULL }; static char * drawEndPtLabels3[] = { N_("None"), N_("Turnouts"), N_("All"), NULL }; +static char * drawEndPtUnconnectedSize[] = { N_("Normal"), N_("Thick"), N_("Exception"), NULL }; static char * tiedrawLabels[] = { N_("None"), N_("Outline"), N_("Solid"), NULL }; static char * drawCenterCircle[] = { N_("Off"), N_("On"), NULL }; static char * labelEnableLabels[] = { N_("Track Descriptions"), N_("Lengths"), N_("EndPt Elevations"), N_("Track Elevations"), N_("Cars"), NULL }; @@ -221,6 +116,7 @@ static char * listLabelsLabels[] = { N_("Manuf"), N_("Part No"), N_("Descr"), NU static char * colorLayersLabels[] = { N_("Tracks"), N_("Other"), NULL }; static char * liveMapLabels[] = { N_("Live Map"), NULL }; static char * hideTrainsInTunnelsLabels[] = { N_("Hide Trains On Hidden Track"), NULL }; +static char * zoomCornerLabels[] = {N_("Zoom keeps lower corner in view"), NULL}; extern long trainPause; @@ -228,10 +124,12 @@ static paramData_t displayPLs[] = { { PD_TOGGLE, &colorLayers, "color-layers", PDO_NOPSHUPD|PDO_DRAW, colorLayersLabels, N_("Color Layers"), BC_HORZ, (void*)(CHANGE_MAIN) }, { PD_RADIO, &drawTunnel, "tunnels", PDO_NOPSHUPD|PDO_DRAW, drawTunnelLabels, N_("Draw Tunnel"), BC_HORZ, (void*)(CHANGE_MAIN) }, { PD_RADIO, &drawEndPtV, "endpt", PDO_NOPSHUPD|PDO_DRAW, drawEndPtLabels3, N_("Draw EndPts"), BC_HORZ, (void*)(CHANGE_MAIN) }, + { PD_RADIO, &drawUnconnectedEndPt, "unconnected-endpt", PDO_NOPSHUPD|PDO_DRAW, drawEndPtUnconnectedSize, N_("Draw Unconnected EndPts"), BC_HORZ, (void*)(CHANGE_MAIN) }, { PD_RADIO, &tieDrawMode, "tiedraw", PDO_NOPSHUPD|PDO_DRAW, tiedrawLabels, N_("Draw Ties"), BC_HORZ, (void*)(CHANGE_MAIN) }, { PD_RADIO, ¢erDrawMode, "centerdraw", PDO_NOPSHUPD|PDO_DRAW, drawCenterCircle, N_("Draw Centers"), BC_HORZ, (void*)(CHANGE_MAIN | CHANGE_MAP) }, { PD_LONG, &twoRailScale, "tworailscale", PDO_NOPSHUPD, &i1_64, N_("Two Rail Scale"), 0, (void*)(CHANGE_MAIN) }, { PD_LONG, &mapScale, "mapscale", PDO_NOPSHUPD, &i1_256, N_("Map Scale"), 0, (void*)(CHANGE_MAP) }, + { PD_TOGGLE, &zoomCorner, "zoom-corner", PDO_NOPSHUPD, zoomCornerLabels, "", BC_HORZ }, { PD_TOGGLE, &liveMap, "livemap", PDO_NOPSHUPD, liveMapLabels, "", BC_HORZ }, { PD_TOGGLE, &autoPan, "autoPan", PDO_NOPSHUPD, autoPanLabels, "", BC_HORZ }, { PD_TOGGLE, &labelEnable, "labelenable", PDO_NOPSHUPD, labelEnableLabels, N_("Label Enable"), 0, (void*)(CHANGE_MAIN) }, @@ -241,7 +139,7 @@ static paramData_t displayPLs[] = { { PD_TOGGLE, &layoutLabels, "layoutlabels", PDO_NOPSHUPD, listLabelsLabels, N_("Layout Labels"), BC_HORZ, (void*)(CHANGE_MAIN) }, { PD_TOGGLE, &listLabels, "listlabels", PDO_NOPSHUPD, listLabelsLabels, N_("List Labels"), BC_HORZ, (void*)(CHANGE_PARAMS) }, /* ATTENTION: update the define below if you add entries above */ -#define I_HOTBARLABELS (15) +#define I_HOTBARLABELS (17) { PD_DROPLIST, &carHotbarModeInx, "carhotbarlabels", PDO_NOPSHUPD|PDO_DLGUNDERCMDBUTT|PDO_LISTINDEX, (void*)250, N_("Car Labels"), 0, (void*)CHANGE_SCALE }, { PD_LONG, &trainPause, "trainpause", PDO_NOPSHUPD, &i10_1000 , N_("Train Update Delay"), 0, 0 }, { PD_TOGGLE, &hideTrainsInTunnels, "hideTrainsInTunnels", PDO_NOPSHUPD, hideTrainsInTunnelsLabels, "", BC_HORZ } @@ -312,7 +210,7 @@ static char * moveQlabels[] = { N_("End-Points"), NULL }; -static char * preSelectLabels[] = { N_("Describe"), N_("Select"), NULL }; +static char * preSelectLabels[] = { N_("Properties"), N_("Select"), NULL }; #ifdef HIDESELECTIONWINDOW static char * hideSelectionWindowLabels[] = { N_("Hide"), NULL }; @@ -374,7 +272,6 @@ EXPORT addButtonCallBack_t CmdoptInit( void ) static wWin_p prefW; static long displayUnits; -static wIndex_t distanceFormatInx; static char * unitsLabels[] = { N_("English"), N_("Metric"), NULL }; static char * angleSystemLabels[] = { N_("Polar"), N_("Cartesian"), NULL }; static char * enableBalloonHelpLabels[] = { N_("Balloon Help"), NULL }; @@ -384,14 +281,14 @@ static paramData_t prefPLs[] = { { PD_RADIO, &angleSystem, "anglesystem", PDO_NOPSHUPD, angleSystemLabels, N_("Angles"), BC_HORZ }, { PD_RADIO, &units, "units", PDO_NOPSHUPD|PDO_NOUPDACT, unitsLabels, N_("Units"), BC_HORZ, (void*)(CHANGE_MAIN|CHANGE_UNITS) }, #define I_DSTFMT (2) - { PD_DROPLIST, &distanceFormatInx, "dstfmt", PDO_NOPSHUPD|PDO_LISTINDEX, (void*)150, N_("Length Format"), 0, (void*)(CHANGE_MAIN|CHANGE_UNITS) }, + { PD_DROPLIST, &distanceFormatInx, "dstfmt", PDO_DIM|PDO_NOPSHUPD|PDO_LISTINDEX, (void*)150, N_("Length Format"), 0, (void*)(CHANGE_MAIN|CHANGE_UNITS) }, { PD_FLOAT, &minLength, "minlength", PDO_DIM|PDO_SMALLDIM|PDO_NOPSHUPD, &r0o1_1, N_("Min Track Length") }, { PD_FLOAT, &connectDistance, "connectdistance", PDO_DIM|PDO_SMALLDIM|PDO_NOPSHUPD, &r0o1_1, N_("Connection Distance"), }, { PD_FLOAT, &connectAngle, "connectangle", PDO_NOPSHUPD, &r1_10, N_("Connection Angle") }, { PD_FLOAT, &turntableAngle, "turntable-angle", PDO_NOPSHUPD, &r0_180, N_("Turntable Angle") }, { PD_LONG, &maxCouplingSpeed, "coupling-speed-max", PDO_NOPSHUPD, &i10_100, N_("Max Coupling Speed"), 0 }, { PD_TOGGLE, &enableBalloonHelp, "balloonhelp", PDO_NOPSHUPD, enableBalloonHelpLabels, "", BC_HORZ }, - { PD_LONG, &dragPixels, "dragpixels", PDO_NOPSHUPD|PDO_DRAW, &r1_1000, N_("Drag Distance") }, + { PD_LONG, &dragPixels, "dragpixels", PDO_NOPSHUPD|PDO_DRAW, &i1_1000, N_("Drag Distance") }, { PD_LONG, &dragTimeout, "dragtimeout", PDO_NOPSHUPD|PDO_DRAW, &i1_1000, N_("Drag Timeout") }, { PD_LONG, &minGridSpacing, "mingridspacing", PDO_NOPSHUPD|PDO_DRAW, &i1_100, N_("Min Grid Spacing"), 0, 0 }, { PD_LONG, &checkPtInterval, "checkpoint", PDO_NOPSHUPD|PDO_FILE, &i0_10000, N_("Check Point") }, @@ -458,6 +355,10 @@ static void LoadDstFmtList( void ) wListAddValue( (wList_p)prefPLs[I_DSTFMT].control, _(dstFmts[units][inx].name), NULL, (void*)dstFmts[units][inx].fmt ); } +/** +* Handle changing of measurement system. The list of number formats is loaded +* and the first entry is selected as default value. +*/ static void UpdatePrefD( void ) { @@ -467,41 +368,75 @@ static void UpdatePrefD( void ) if ( prefW==NULL || (!wWinIsVisible(prefW)) || prefPLs[1].control==NULL ) return; newUnits = wRadioGetValue( (wChoice_p)prefPLs[1].control ); - if ( newUnits == displayUnits ) - return; - oldUnits = units; - units = newUnits; - for ( inx = 0; inx<sizeof prefPLs/sizeof prefPLs[0]; inx++ ) { - if ( (prefPLs[inx].option&PDO_DIM) ) { - ParamLoadControl( &prefPG, inx ); + if (newUnits != displayUnits) { + oldUnits = units; + units = newUnits; + LoadDstFmtList(); + distanceFormatInx = 0; + + for (inx = 0; inx < sizeof prefPLs / sizeof prefPLs[0]; inx++) { + if ((prefPLs[inx].option&PDO_DIM)) { + ParamLoadControl(&prefPG, inx); + } } + + units = oldUnits; + displayUnits = newUnits; } - LoadDstFmtList(); - units = oldUnits; - displayUnits = newUnits; + return; } +/** + * Handle changes of the measurement format. + */ + +static void UpdateMeasureFmt() +{ + int inx; + + distanceFormatInx = wListGetIndex((wList_p)prefPLs[I_DSTFMT].control); + units = wRadioGetValue((wChoice_p)prefPLs[1].control); + + for (inx = 0; inx < sizeof prefPLs / sizeof prefPLs[0]; inx++) { + if ((prefPLs[inx].option&PDO_DIM)) { + ParamLoadControl(&prefPG, inx); + } + } +} static void PrefOk( void * junk ) { - wBool_t resetValues = FALSE; + wBool_t resetValuesLow = FALSE, resetValuesHigh = FALSE; long changes; changes = GetChanges( &prefPG ); if (connectAngle < 1.0) { connectAngle = 1.0; - resetValues = TRUE; + resetValuesLow = TRUE; + } else if (connectAngle > 10.0) { + connectAngle = 10.0; + resetValuesHigh = TRUE; } if (connectDistance < 0.1) { connectDistance = 0.1; - resetValues = TRUE; + resetValuesLow = TRUE; + } else if (connectDistance > 1.0) { + connectDistance = 1.0; + resetValuesHigh = TRUE; } if (minLength < 0.1) { minLength = 0.1; - resetValues = TRUE; + resetValuesLow = TRUE; + } else if (minLength > 1.0) { + minLength = 1.0; + resetValuesHigh = TRUE; } - if ( resetValues ) { + if ( resetValuesLow ) { NoticeMessage2( 0, MSG_CONN_PARAMS_TOO_SMALL, _("Ok"), NULL ) ; } + if ( resetValuesHigh ) { + NoticeMessage2( 0, MSG_CONN_PARAMS_TOO_BIG, _("Ok"), NULL ) ; + } + wHide( prefW ); DoChangeNotification(changes); |