summaryrefslogtreecommitdiff
path: root/app/bin/dcmpnd.c
diff options
context:
space:
mode:
Diffstat (limited to 'app/bin/dcmpnd.c')
-rw-r--r--app/bin/dcmpnd.c228
1 files changed, 36 insertions, 192 deletions
diff --git a/app/bin/dcmpnd.c b/app/bin/dcmpnd.c
index 9b7dfcc..99fe657 100644
--- a/app/bin/dcmpnd.c
+++ b/app/bin/dcmpnd.c
@@ -30,187 +30,8 @@
#include "track.h"
#include "trkendpt.h"
#include "common-ui.h"
+#include "cselect.h"
-/*****************************************************************************
- *
- * Update Titles
- *
- */
-
-static wWin_p updateTitleW;
-typedef enum { updateUnknown, updateTurnout, updateStructure } updateType_e;
-static updateType_e updateListType;
-static BOOL_T updateWVisible;
-static BOOL_T updateWStale;
-typedef struct {
- updateType_e type;
- SCALEINX_T scale;
- char * old;
- char * new;
-} updateTitleElement;
-static dynArr_t updateTitles_da;
-#define updateTitles(N) DYNARR_N( updateTitleElement, updateTitles_da, N )
-
-static void UpdateTitleIgnore( void* junk );
-static wIndex_t updateTitleInx;
-static paramData_t updateTitlePLs[] = {
- { PD_MESSAGE, "This file contains Turnout and Structure Titles which should be updated." },
- { PD_MESSAGE, "This dialog allows you to change the definitions in this file." },
- { PD_MESSAGE, "To replace the old name, choose a definition from the list." },
- { PD_MESSAGE, "If the required definition is not loaded you can use the Load button" },
- { PD_MESSAGE, "to invoke the Parameter Files dialog to load the required Parameter File." },
- { PD_MESSAGE, "If you choose Cancel then the Titles will not be changed and some" },
- { PD_MESSAGE, "features (Price List and Label selection) may not be fully functional." },
- { PD_MESSAGE, "You can use the List Labels control on the Preferences dialog to" },
- { PD_MESSAGE, "control the format of the list entries" },
-#define I_UPDATESTR (9)
- { PD_STRING, NULL, "old", PDO_NOPREF, I2VP(400), NULL, BO_READONLY },
-#define I_UPDATELIST (10)
-#define updateTitleL ((wList_p)updateTitlePLs[I_UPDATELIST].control)
- { PD_DROPLIST, NULL, "sel", PDO_NOPREF, I2VP(400) },
- { PD_BUTTON, UpdateTitleIgnore, "ignore", PDO_DLGCMDBUTTON, NULL, N_("Ignore") },
-#define I_UPDATELOAD (12)
- { PD_BUTTON, NULL, "load", 0, NULL, N_("Load") }
-};
-static paramGroup_t updateTitlePG = { "updatetitle", 0, updateTitlePLs, COUNT( updateTitlePLs ) };
-
-
-static void UpdateTitleChange( long changes )
-{
- if ( (changes & (CHANGE_SCALE|CHANGE_PARAMS)) == 0 ) {
- return;
- }
- if (!updateWVisible) {
- updateWStale = TRUE;
- return;
- }
- wControlShow( (wControl_p)updateTitleL, FALSE );
- wListClear( updateTitleL );
- if (updateTitles(updateTitleInx).type == updateTurnout) {
- TurnoutAdd( listLabels, updateTitles(updateTitleInx).scale, updateTitleL, NULL,
- -1 );
- } else {
- StructAdd( listLabels, updateTitles(updateTitleInx).scale, updateTitleL,
- NULL );
- }
- wControlShow( (wControl_p)updateTitleL, TRUE );
- updateListType = updateTitles(updateTitleInx).type;
-}
-
-
-static void UpdateTitleNext( void )
-{
- wIndex_t inx;
- wIndex_t cnt;
- track_p trk;
- struct extraDataCompound_t *xx;
- updateTitleInx++;
- if (updateTitleInx >= updateTitles_da.cnt) {
- wHide( updateTitleW );
- updateWVisible = FALSE;
- InfoMessage( _("Updating definitions, please wait") );
- cnt = 0;
- trk = NULL;
- while (TrackIterate( &trk ) ) {
- InfoCount(cnt++);
- TRKTYP_T trkType = GetTrkType(trk);
- if (trkType == T_TURNOUT || trkType == T_STRUCTURE) {
- xx = GET_EXTRA_DATA(trk, trkType, extraDataCompound_t);
- for (inx=0; inx<updateTitles_da.cnt; inx++) {
- if ( updateTitles(inx).old &&
- strcmp( xx->title, updateTitles(inx).old ) == 0 ) {
- xx->title = MyStrdup( updateTitles(inx).new );
- break;
- }
- }
- }
- }
- DYNARR_RESET( updateTitleElement, updateTitles_da );
- InfoMessage("");
- InfoCount( trackCount );
- SetFileChanged();
- DoChangeNotification( CHANGE_MAIN );
- return;
- }
- ParamLoadMessage( &updateTitlePG, I_UPDATESTR,
- updateTitles(updateTitleInx).old );
- if (updateWStale || updateTitles(updateTitleInx).type != updateListType) {
- UpdateTitleChange( CHANGE_SCALE|CHANGE_PARAMS );
- }
-}
-
-
-static void UpdateTitleUpdate( void* junk )
-{
- void * selP;
- turnoutInfo_t * to;
- wListGetValues( updateTitleL, NULL, 0, NULL, &selP );
- if (selP != NULL) {
- to = (turnoutInfo_t*)selP;
- updateTitles(updateTitleInx).new = to->title;
- }
- UpdateTitleNext();
-}
-
-static void UpdateTitleIgnore( void* junk )
-{
- updateTitles(updateTitleInx).old = NULL;
- UpdateTitleNext();
-}
-
-static void UpdateTitleCancel( wWin_p junk )
-{
- wHide( updateTitleW );
- DYNARR_RESET( updateTitleElement, updateTitles_da );
- updateWVisible = FALSE;
-}
-
-
-void DoUpdateTitles( void )
-{
- if (updateTitles_da.cnt <= 0) {
- return;
- }
- if (updateTitleW == NULL) {
- ParamRegister( &updateTitlePG );
- updateTitlePLs[I_UPDATELOAD].valueP = ParamFilesInit();
- updateTitleW = ParamCreateDialog( &updateTitlePG,
- MakeWindowTitle(_("Update Title")), _("Update"), UpdateTitleUpdate,
- UpdateTitleCancel, TRUE, NULL, 0, NULL );
- RegisterChangeNotification( UpdateTitleChange );
- }
- updateTitleInx = -1;
- wShow( updateTitleW );
- updateWVisible = TRUE;
- updateListType = updateUnknown;
- UpdateTitleNext();
-}
-
-EXPORT void UpdateTitleMark(
- char * title,
- SCALEINX_T scale )
-{
- int inx;
- updateTitleElement * ut;
- if ( inPlayback ) {
- return;
- }
- for (inx=0; inx<updateTitles_da.cnt; inx++) {
- if (strcmp(title,updateTitles(inx).old) == 0) {
- return;
- }
- }
- DYNARR_APPEND( updateTitleElement, updateTitles_da, 10 );
- ut = &updateTitles(updateTitles_da.cnt-1);
- if ( TempEndPtsCount() > 0) {
- ut->type = updateTurnout;
- } else {
- ut->type = updateStructure;
- }
- ut->scale = scale;
- ut->old = MyStrdup(title);
- ut->new = NULL;
-}
/*****************************************************************************
*
@@ -328,6 +149,7 @@ static dynArr_t refreshSpecial_da;
static wIndex_t refreshSpecialInx;
static BOOL_T refreshReturnVal;
static void RefreshSkip( void * junk );
+static void RefreshDone( void * junk );
static paramListData_t refreshSpecialListData = { 30, 600, 0, NULL, NULL };
static paramData_t refreshSpecialPLs[] = {
#define REFRESH_M1 (0)
@@ -338,7 +160,8 @@ static paramData_t refreshSpecialPLs[] = {
{ PD_MESSAGE, NULL, NULL, 0/*PDO_DLGRESIZEW*/, I2VP(380) },
#define REFRESH_L (3)
{ PD_LIST, &refreshSpecialInx, "list", PDO_LISTINDEX|PDO_NOPREF|PDO_DLGRESIZE, &refreshSpecialListData, NULL, BO_READONLY },
- { PD_BUTTON, RefreshSkip, "skip", PDO_DLGCMDBUTTON, NULL, N_("Skip") }
+ { PD_BUTTON, RefreshSkip, "skip", PDO_DLGCMDBUTTON, NULL, N_("Skip") },
+ { PD_BUTTON, RefreshDone, "done", PDO_DLGCMDBUTTON, NULL, N_("Done") }
};
static paramGroup_t refreshSpecialPG = { "refreshSpecial", 0, refreshSpecialPLs, COUNT( refreshSpecialPLs ) };
static void RefreshSpecialOk(
@@ -346,8 +169,8 @@ static void RefreshSpecialOk(
{
wHide( refreshSpecialPG.win );
}
-static void RefreshSpecialCancel(
- wWin_p win )
+static void RefreshDone(
+ void * junk )
{
refreshSpecialInx = -1;
refreshReturnVal = FALSE;
@@ -360,7 +183,7 @@ static void RefreshSkip(
wHide( refreshSpecialPG.win );
}
-EXPORT BOOL_T RefreshCompound(
+static BOOL_T RefreshCompound(
track_p trk,
BOOL_T junk )
{
@@ -397,7 +220,8 @@ EXPORT BOOL_T RefreshCompound(
}
if ( IsParamValid(to->paramFileIndex) &&
to->segCnt > 0 &&
- (FIT_NONE != CompatibleScale( GetTrkEndPtCnt(trk)>0, to->scaleInx, scale ) )) {
+ (FIT_NONE != CompatibleScale( GetTrkEndPtCnt(trk)>0?FIT_TURNOUT:FIT_STRUCTURE,
+ to->scaleInx, scale ) )) {
if ( RefreshCompound1( trk, refreshSpecial(inx).to ) ) {
if ( strcasecmp( xx->title, to->title ) != 0 ) {
MyFree( xx->title );
@@ -416,8 +240,8 @@ EXPORT BOOL_T RefreshCompound(
if ( refreshSpecialPG.win == NULL ) {
ParamRegister( &refreshSpecialPG );
ParamCreateDialog( &refreshSpecialPG,
- MakeWindowTitle(_("Refresh Turnout/Structure")), _("Ok"), RefreshSpecialOk,
- RefreshSpecialCancel, TRUE, NULL, F_BLOCK|F_RESIZE|F_RECALLSIZE, NULL );
+ MakeWindowTitle(_("Refresh Turnout/Structure")), _("Replace"), RefreshSpecialOk,
+ ParamCancel_Null, TRUE, NULL, F_BLOCK|F_RESIZE|F_RECALLSIZE, NULL );
}
ParamLoadMessage( &refreshSpecialPG, REFRESH_M1,
_("Choose a Turnout/Structure to replace:") );
@@ -468,6 +292,26 @@ EXPORT BOOL_T RefreshCompound(
}
}
+EXPORT void DoRefreshCompound( void * unused )
+{
+ if (SelectedTracksAreFrozen()) {
+ return;
+ }
+ refreshSpecialInx = -1;
+ refreshReturnVal = FALSE;
+ if (selectedTrackCount>0) {
+ UndoStart( _("Refresh Compound"), "refresh compound" );
+ DoSelectedTracks( RefreshCompound );
+ RefreshCompound( NULL, FALSE );
+ UndoEnd();
+ MainRedraw(); // DoRefreshCompound
+ } else {
+ ErrorMessage( MSG_NO_SELECTED_TRK );
+ }
+}
+
+
+
/*****************************************************************************
*
* Custom Management Support
@@ -580,7 +424,7 @@ static int CompoundCustMgmProc(
if ( !renamePG.win ) {
ParamRegister( &renamePG );
ParamCreateDialog( &renamePG, MakeWindowTitle(_("Rename Object")), _("Ok"),
- RenameOk, wHide, TRUE, NULL, F_BLOCK, NULL );
+ RenameOk, ParamCancel_Current, TRUE, NULL, F_BLOCK, NULL );
}
ParamLoadControls( &renamePG );
wShow( renamePG.win );
@@ -614,8 +458,8 @@ static int CompoundCustMgmProc(
}
-#include "bitmaps/turnout.xpm3"
-#include "bitmaps/building.xpm3"
+#include "bitmaps/turnout.image3"
+#include "bitmaps/building.image3"
EXPORT void CompoundCustMgmLoad( void )
{
@@ -625,10 +469,10 @@ EXPORT void CompoundCustMgmLoad( void )
static wIcon_p structI = NULL;
if ( turnoutI == NULL ) {
- turnoutI = wIconCreatePixMap( turnout_xpm3[0] );
+ turnoutI = wIconCreatePixMap( turnout_image3[0] );
}
if ( structI == NULL ) {
- structI = wIconCreatePixMap( building_xpm3[0] );
+ structI = wIconCreatePixMap( building_image3[0] );
}
for ( inx=0; inx<turnoutInfo_da.cnt; inx++ ) {