From 09795a01ef859f072920de9df974d1b03b9ab9a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Frings-F=C3=BCrst?= Date: Wed, 28 Dec 2016 20:24:50 +0100 Subject: New upstream version 4.2.4a --- app/bin/dprmfile.c | 239 +++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 168 insertions(+), 71 deletions(-) (limited to 'app/bin/dprmfile.c') diff --git a/app/bin/dprmfile.c b/app/bin/dprmfile.c index 5b22a01..18b0cbe 100644 --- a/app/bin/dprmfile.c +++ b/app/bin/dprmfile.c @@ -1,5 +1,5 @@ -/* - * $Header: /home/dmarkle/xtrkcad-fork-cvs/xtrkcad/app/bin/dprmfile.c,v 1.3 2008-03-10 18:59:53 m_fischer Exp $ +/** \file dprmfile.c + * Param File Management */ /* XTrkCad - Model Railroad CAD @@ -26,6 +26,8 @@ #include +#define PARAM_SUBDIR ("\\params") + /**************************************************************************** * * Param File Management @@ -208,24 +210,26 @@ EXPORT void RememberParamFiles( void ) static wWin_p paramFileW; -static long paramFileSel = 1; +static long paramFileSel = 0; static wIcon_p mtbox_bm; static wIcon_p chkbox_bm; static void ParamFileAction( void * ); static void ParamFileBrowse( void * ); +static void ParamFileSelectAll( void * ); static paramListData_t paramFileListData = { 10, 370 }; static char * paramFileLabels[] = { N_("Show File Names"), NULL }; static paramData_t paramFilePLs[] = { #define I_PRMFILLIST (0) #define paramFileL ((wList_p)paramFilePLs[I_PRMFILLIST].control) - { PD_LIST, NULL, "inx", 0, ¶mFileListData, NULL, BL_DUP|BL_SETSTAY }, + { PD_LIST, NULL, "inx", 0, ¶mFileListData, NULL, BL_DUP|BL_SETSTAY|BL_MANY }, #define I_PRMFILTOGGLE (1) { PD_TOGGLE, ¶mFileSel, "mode", 0, paramFileLabels, NULL, BC_HORZ|BC_NOBORDER }, -#define I_PRMFILACTION (2) + { PD_BUTTON, (void *)ParamFileSelectAll, "selectall", PDO_DLGCMDBUTTON, NULL, N_("Select all") }, +#define I_PRMFILACTION (3) #define paramFileActionB ((wButton_p)paramFilePLs[I_PRMFILACTION].control) - { PD_BUTTON, (void*)ParamFileAction, "action", PDO_DLGCMDBUTTON, NULL, N_("Unload") }, + { PD_BUTTON, (void*)ParamFileAction, "action", PDO_DLGCMDBUTTON, NULL, N_("Unload"), 0L, FALSE }, { PD_BUTTON, (void*)ParamFileBrowse, "browse", 0, NULL, N_("Browse ...") } }; static paramGroup_t paramFilePG = { "prmfile", 0, paramFilePLs, sizeof paramFilePLs/sizeof paramFilePLs[0] }; @@ -250,66 +254,80 @@ static void ParamFileLoadList( void ) wControlShow( (wControl_p)paramFileL, TRUE ); } +/** + * Load the selected parameter files. This is a callback executed when the file selection dialog + * is closed. + * Steps: + * - the parameters are read from file + * - check is performed to see whether the content is already present, if yes the previously + * loaded content is invalidated + * - loaded parameter file is added to list of parameter files + * - if a parameter file dialog exists the list is updated. It is either rewritten in + * in case of an invalidated file or the new file is appended + * - the settings are updated + * These steps are repeated for every file in list + * + * \param files IN the number of filenames in the fileName array + * \param fileName IN an array of fully qualified filenames + * \param data IN ignored + * \return TRUE on success, FALSE on error + */ EXPORT int LoadParamFile( - const char * pathName, - const char * fileName, + int files, + char ** fileName, void * data ) { char * cp; + char *name; wIndex_t inx; - wBool_t redrawList; + int i = 0; - if (pathName == NULL) - return TRUE; - memcpy( curParamDir, pathName, fileName-pathName ); - curParamDir[fileName-pathName] = '\0'; - wPrefSetString( "file", "paramdir", curParamDir ); - - redrawList = FALSE; - curContents = curSubContents = NULL; - curParamFileIndex = paramFileInfo_da.cnt; - if ( !ReadParams( 0, NULL, pathName ) ) - return FALSE; - if (curContents == NULL) { - curContents = curSubContents = MyStrdup( fileName ); - for ( cp=curContents; *cp; cp++ ) { - if ( *cp == '=' || *cp == '\'' || *cp == '"' || *cp == ':' || *cp == '.' ) - *cp = ' '; - } - } + wBool_t redrawList = FALSE; - for ( inx=0; inx 0); - DYNARR_APPEND( paramFileInfo_t, paramFileInfo_da, 10 ); - paramFileInfo(curParamFileIndex).name = MyStrdup( pathName ); - paramFileInfo(curParamFileIndex).valid = TRUE; - paramFileInfo(curParamFileIndex).deleted = FALSE; - paramFileInfo(curParamFileIndex).deletedShadow = - paramFileInfo(curParamFileIndex).deleted = FALSE; - paramFileInfo(curParamFileIndex).contents = curContents; - - if ( paramFilePG.win ) { - if ( redrawList ) { - ParamFileLoadList(); - } else { - strcpy( message, ((!paramFileSel) && paramFileInfo(curParamFileIndex).contents)? - paramFileInfo(curParamFileIndex).contents: - paramFileInfo(curParamFileIndex).name ); - wListAddValue( paramFileL, message, chkbox_bm, (void*)(intptr_t)curParamFileIndex ); - wListSetIndex( paramFileL, wListGetCount(paramFileL)-1 ); + for( i=0; i < files; i++ ) + { + curContents = curSubContents = NULL; + curParamFileIndex = paramFileInfo_da.cnt; + if ( !ReadParams( 0, NULL, fileName[ i ] ) ) + return FALSE; + + assert( curContents != NULL ); + // in case the contents is already presented, make invalid + for ( inx=0; inx= paramFileInfo_da.cnt) + wIndex_t selcnt = wListGetSelectedCount( paramFileL ); + wIndex_t inx, cnt; + + void * data; + + // set the default + wButtonSetLabel( paramFileActionB, _("Unload")); + paramFilePLs[ I_PRMFILACTION ].context = FALSE; + + //nothing selected -> leave + if( selcnt <= 0 ) return; - wButtonSetLabel( paramFileActionB, - paramFileInfo(fileInx).deleted?_("Reload"):_("Unload") ); + + // get the number of items in list + cnt = wListGetCount( paramFileL ); + + // walk through the whole list box + for ( inx=0; inx= paramFileInfo_da.cnt) + return; + if( paramFileInfo(fileInx).deleted ) { + // if selected file was unloaded, set button to reload and finish loop + wButtonSetLabel( paramFileActionB, _("Reload")); + paramFilePLs[ I_PRMFILACTION ].context = (void *)TRUE; + break; + } + } + } } -static void ParamFileAction( void * junk ) +/** + * Unload selected files. + * + * \param action IN FALSE = unload, TRUE = reload parameter files + * \return + */ + +static void ParamFileAction( void * action ) { - wIndex_t listInx; + wIndex_t selcnt = wListGetSelectedCount( paramFileL ); + wIndex_t inx, cnt; wIndex_t fileInx; void * data; - listInx = wListGetValues( paramFileL, NULL, 0, NULL, &data ); - if (listInx<0) + unsigned newDeletedState; + + if( action ) + newDeletedState = FALSE; + else + newDeletedState = TRUE; + + //nothing selected -> leave + if( selcnt <= 0 ) return; - fileInx = (wIndex_t)(long)data; - paramFileInfo(fileInx).deleted = ! paramFileInfo(fileInx).deleted; -#ifndef LATER - strcpy( message, ((!paramFileSel) && paramFileInfo(fileInx).contents)? - paramFileInfo(fileInx).contents: - paramFileInfo(fileInx).name ); - wListSetValues( paramFileL, listInx, message, (paramFileInfo(fileInx).deleted)?mtbox_bm:chkbox_bm, (void*)(intptr_t)fileInx ); -#endif + + // get the number of items in list + cnt = wListGetCount( paramFileL ); + + // walk through the whole list box + for ( inx=0; inx