diff options
Diffstat (limited to 'app/bin/layout.c')
| -rw-r--r-- | app/bin/layout.c | 203 | 
1 files changed, 161 insertions, 42 deletions
diff --git a/app/bin/layout.c b/app/bin/layout.c index a77cbb2..4bf1936 100644 --- a/app/bin/layout.c +++ b/app/bin/layout.c @@ -20,19 +20,15 @@   *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.   */ -#include <string.h>  #include <dynstring.h>  #include "custom.h" -#include "i18n.h"  #include "layout.h"  #include "misc2.h"  #include "param.h"  #include "paths.h"  #include "track.h" -#include "wlib.h"  #include "fileio.h" -#include "utility.h"  #define MINTRACKRADIUSPREFS "minTrackRadius" @@ -64,13 +60,19 @@ static struct sDataLayout thisLayout = {      NULL,  }; +EXPORT wIndex_t changed = 0; +  static paramFloatRange_t r0_90 = { 0, 90 }; -static paramFloatRange_t r1_10000 = { 1, 10000 }; +static paramFloatRange_t r0_10000 = { 0, 10000 }; +static paramFloatRange_t r0_9999999 = { 0, 9999999 };  static paramFloatRange_t r1_9999999 = { 1, 9999999 };  static paramFloatRange_t r360_360 = { -360, 360 };  static paramFloatRange_t rN_9999999 = { -99999, 99999 };  static paramIntegerRange_t i0_100 = { 0, 100 }; +static void SettingsWrite( void  ); +static void SettingsRead( void  ); +  static void LayoutDlgUpdate(paramGroup_p pg, int inx, void * valueP);  /** @@ -122,6 +124,18 @@ CopyLayoutTitle(char* dest, char *src)      *(dest + TITLEMAXLEN - 1) = '\0';  } + +/** +* Set the file's changed flag and update the window title. +*/ + +void +SetFileChanged(void) +{ +	changed++; +	SetWindowTitle(); +} +  void  SetLayoutTitle(char *title)  { @@ -307,6 +321,18 @@ int GetLayoutBackGroundScreen()  	return (thisLayout.props.backgroundScreen);  } +/** + * Gets layout room size + * + * \param [out] roomSize size of the room. + */ + +void +GetLayoutRoomSize(coOrd *roomSize) +{ +	*roomSize = thisLayout.props.roomSize; +} +  /****************************************************************************  *  * Layout Dialog @@ -343,13 +369,13 @@ static paramData_p layout_p;  static paramGroup_t * layout_pg_p;  static wBool_t file_changed; -EXPORT BOOL_T haveBackground = FALSE; +bool haveBackground = false;  BOOL_T backgroundVisible = TRUE;  char * noname = "";  void -BackgroundToggleShow() +BackgroundToggleShow( void * unused )  {  	backgroundVisible = !backgroundVisible;  	wButtonSetBusy(backgroundB, backgroundVisible); @@ -361,6 +387,11 @@ int GetLayoutBackGroundVisible()  	return(backgroundVisible);  } +bool HasBackGround() +{ +	return(haveBackground); +} +  /*****************************************  * Try to load the background image file  */ @@ -373,6 +404,9 @@ LoadBackGroundImage(void)  		NoticeMessage(_("Unable to load Image File - %s"),_("Ok"),NULL,error);  		return FALSE;  	} +	wControlActive((wControl_p)backgroundB, backgroundVisible); +	wButtonSetBusy(backgroundB, backgroundVisible); +  	return TRUE;  } @@ -425,13 +459,13 @@ void LayoutBackGroundSave(void) {     	wPrefSetInteger("layout", "BackgroundScreen", thisLayout.props.backgroundScreen);     	wPrefSetFloat("layout", "BackgroundSize", thisLayout.props.backgroundSize); -   	wPrefFlush(); +   	wPrefFlush("");  }  /************************************************************   * Run File Select for the Background Image File   */ -static void ImageFileBrowse( void * junk ) +static void ImageFileBrowse( void * unused )  {  	imageFile_fs = wFilSelCreate( mainW, FS_LOAD, FS_PICTURES, _("Load Background"), sImageFilePattern, LoadImageFile, NULL ); @@ -442,7 +476,7 @@ static void ImageFileBrowse( void * junk )  /************************************************************   * Remove the background Image File   */ -static void ImageFileClear( void * junk) +static void ImageFileClear( void * unused)  {  	char * noname = "";  	SetLayoutBackGroundFullPath(noname); @@ -450,49 +484,48 @@ static void ImageFileClear( void * junk)  	SetName();  	wControlActive((wControl_p)backgroundB, FALSE);  	file_changed = TRUE; +	haveBackground = false;  	ParamLoadControl(layout_pg_p, 8);  	MainRedraw();  }  static paramData_t layoutPLs[] = { -    { PD_FLOAT, &thisLayout.props.roomSize.x, "roomsizeX", PDO_NOPREF | PDO_DIM | PDO_NOPSHUPD | PDO_DRAW, &r1_9999999, N_("Room Width"), 0, (void*)(CHANGE_MAIN | CHANGE_MAP) }, -    { PD_FLOAT, &thisLayout.props.roomSize.y, "roomsizeY", PDO_NOPREF | PDO_DIM | PDO_NOPSHUPD | PDO_DRAW | PDO_DLGHORZ, &r1_9999999, N_("    Height"), 0, (void*)(CHANGE_MAIN | CHANGE_MAP) }, +    { PD_FLOAT, &thisLayout.props.roomSize.x, "roomsizeX", PDO_NOPREF | PDO_DIM | PDO_NOPSHUPD | PDO_DRAW, &r1_9999999, N_("Room Width"), 0, I2VP(CHANGE_MAIN | CHANGE_MAP) }, +    { PD_FLOAT, &thisLayout.props.roomSize.y, "roomsizeY", PDO_NOPREF | PDO_DIM | PDO_NOPSHUPD | PDO_DRAW | PDO_DLGHORZ, &r1_9999999, N_("    Height"), 0, I2VP(CHANGE_MAIN | CHANGE_MAP) },      { PD_STRING, &thisLayout.props.title1, "title1", PDO_NOPSHUPD | PDO_STRINGLIMITLENGTH, NULL, N_("Layout Title"), 0, 0, sizeof(thisLayout.props.title1)},      { PD_STRING, &thisLayout.props.title2, "title2", PDO_NOPSHUPD | PDO_STRINGLIMITLENGTH, NULL, N_("Subtitle"), 0, 0, sizeof(thisLayout.props.title2)},  #define SCALEINX (4) -    { PD_DROPLIST, &thisLayout.props.curScaleDescInx, "scale", PDO_NOPREF | PDO_NOPSHUPD | PDO_NORECORD | PDO_NOUPDACT, (void *)120, N_("Scale"), 0, (void*)(CHANGE_SCALE) }, +    { PD_DROPLIST, &thisLayout.props.curScaleDescInx, "scale", PDO_NOPREF | PDO_NOPSHUPD | PDO_NORECORD | PDO_NOUPDACT, I2VP(180), N_("Scale"), 0, I2VP(CHANGE_SCALE) },  #define GAUGEINX (5) -    { PD_DROPLIST, &thisLayout.props.curGaugeInx, "gauge", PDO_NOPREF | PDO_NOPSHUPD | PDO_NORECORD | PDO_NOUPDACT | PDO_DLGHORZ, (void *)120, N_("     Gauge"), 0, (void *)(CHANGE_SCALE) }, +    { PD_DROPLIST, &thisLayout.props.curGaugeInx, "gauge", PDO_NOPREF | PDO_NOPSHUPD | PDO_NORECORD | PDO_NOUPDACT | PDO_DLGHORZ, I2VP(180), N_("     Gauge"), 0, I2VP(CHANGE_SCALE) },  #define MINRADIUSENTRY (6) -    { PD_FLOAT, &thisLayout.props.minTrackRadius, "mintrackradius", PDO_DIM | PDO_NOPSHUPD | PDO_NOPREF, &r1_10000, N_("Min Track Radius"), 0, (void*)(CHANGE_MAIN | CHANGE_LIMITS) }, -    { PD_FLOAT, &thisLayout.props.maxTrackGrade, "maxtrackgrade", PDO_NOPSHUPD | PDO_DLGHORZ, &r0_90, N_(" Max Track Grade (%)"), 0, (void*)(CHANGE_MAIN) }, +    { PD_FLOAT, &thisLayout.props.minTrackRadius, "mintrackradius", PDO_DIM | PDO_NOPSHUPD | PDO_NOPREF, &r0_10000, N_("Min Track Radius"), 0, I2VP(CHANGE_MAIN | CHANGE_LIMITS) }, +    { PD_FLOAT, &thisLayout.props.maxTrackGrade, "maxtrackgrade", PDO_NOPSHUPD | PDO_DLGHORZ, &r0_90, N_(" Max Track Grade (%)"), 0, I2VP(CHANGE_MAIN) },  #define BACKGROUNDFILEENTRY (8)  //Note this value used in the file section routines above - if it chnages, they will need to change -	{ PD_STRING, &backgroundFileName, "backgroundfile", PDO_NOPSHUPD,  NULL, N_("Background File Path"), 0, (void *)(CHANGE_BACKGROUND) }, -	{ PD_BUTTON, (void*)ImageFileBrowse, "browse", PDO_DLGHORZ, NULL, N_("Browse ...") }, -	{ PD_BUTTON, (void*)ImageFileClear, "clear", PDO_DLGHORZ, NULL, N_("Clear") }, +	{ PD_STRING, &backgroundFileName, "backgroundfile", PDO_NOPSHUPD | PDO_NORECORD|PDO_STRINGLIMITLENGTH,  NULL, N_("Background File Path"), 0, I2VP(CHANGE_BACKGROUND),sizeof(backgroundFileName) }, +	{ PD_BUTTON, ImageFileBrowse, "browse", PDO_DLGHORZ, NULL, N_("Browse ...") }, +	{ PD_BUTTON, ImageFileClear, "clear", PDO_DLGHORZ, NULL, N_("Clear") },  #define BACKGROUNDPOSX (11) -	{ PD_FLOAT, &thisLayout.props.backgroundPos.x, "backgroundposX", PDO_DIM | PDO_NOPSHUPD | PDO_DRAW, &rN_9999999, N_("Background PosX,Y"), 0, (void*)(CHANGE_BACKGROUND) }, +	{ PD_FLOAT, &thisLayout.props.backgroundPos.x, "backgroundposX", PDO_DIM | PDO_NOPSHUPD | PDO_DRAW, &rN_9999999, N_("Background PosX,Y"), 0, I2VP(CHANGE_BACKGROUND) },  #define BACKGROUNDPOSY (12) -	{ PD_FLOAT, &thisLayout.props.backgroundPos.y, "backgroundposY", PDO_DIM | PDO_NOPSHUPD | PDO_DRAW | PDO_DLGHORZ, &rN_9999999, NULL, 0, (void*)(CHANGE_BACKGROUND) }, +	{ PD_FLOAT, &thisLayout.props.backgroundPos.y, "backgroundposY", PDO_DIM | PDO_NOPSHUPD | PDO_DRAW | PDO_DLGHORZ, &rN_9999999, NULL, 0, I2VP(CHANGE_BACKGROUND) },  #define BACKGROUNDWIDTH (13) -	{ PD_FLOAT, &thisLayout.props.backgroundSize, "backgroundWidth", PDO_DIM | PDO_NOPSHUPD | PDO_DRAW, &r1_9999999, N_("Background Size"), 0, (void*)(CHANGE_BACKGROUND) }, +	{ PD_FLOAT, &thisLayout.props.backgroundSize, "backgroundWidth", PDO_DIM | PDO_NOPSHUPD | PDO_DRAW, &r0_9999999, N_("Background Size"), 0, I2VP(CHANGE_BACKGROUND) },  #define BACKGROUNDSCREEN (14) -	{ PD_LONG, &thisLayout.props.backgroundScreen, "backgroundScreen", PDO_NOPSHUPD | PDO_DRAW, &i0_100, N_("Background Screen %"), 0, (void*)(CHANGE_BACKGROUND) }, +	{ PD_LONG, &thisLayout.props.backgroundScreen, "backgroundScreen", PDO_NOPSHUPD | PDO_DRAW, &i0_100, N_("Background Screen %"), 0, I2VP(CHANGE_BACKGROUND) },  #define BACKGROUNDANGLE (15) -	{ PD_FLOAT, &thisLayout.props.backgroundAngle, "backgroundAngle", PDO_NOPSHUPD | PDO_DRAW, &r360_360, N_("Background Angle"), 0, (void*)(CHANGE_BACKGROUND) } +	{ PD_FLOAT, &thisLayout.props.backgroundAngle, "backgroundAngle", PDO_NOPSHUPD | PDO_DRAW | PDO_DLGBOXEND, &r360_360, N_("Background Angle"), 0, I2VP(CHANGE_BACKGROUND) }, +	{ PD_MESSAGE, N_("Named Settings File"), NULL, PDO_DLGRESETMARGIN, I2VP(180) }, +	{ PD_BUTTON, SettingsWrite, "write",  PDO_DLGHORZ, 0, N_("Write"), 0, I2VP(0) }, +	{ PD_BUTTON, SettingsRead, "read", PDO_DLGHORZ | PDO_DLGBOXEND, 0, N_("Read"), 0, I2VP(0) }  }; -static paramGroup_t layoutPG = { "layout", PGO_RECORD | PGO_PREFMISC, layoutPLs, sizeof layoutPLs / sizeof layoutPLs[0] }; +static paramGroup_t layoutPG = { "layout", PGO_RECORD | PGO_PREFMISC, layoutPLs, COUNT( layoutPLs ) }; -/** -* Apply the changes entered to settings -* -* \param junk IN unused -*/ -static void LayoutOk(void * junk) -{ +static void ChangeLayout() { +      long changes;      changes = GetChanges(&layoutPG); @@ -500,13 +533,15 @@ static void LayoutOk(void * junk)      /* [mf Nov. 15, 2005] Get the gauge/scale settings */      if (changes & CHANGE_SCALE) {          SetScaleGauge(thisLayout.props.curScaleDescInx, thisLayout.props.curGaugeInx); -    } +		file_changed = TRUE; +	}      /* [mf Nov. 15, 2005] end */      if (changes & CHANGE_MAP) {          SetRoomSize(thisLayout.props.roomSize); -    } +		file_changed = TRUE; +	}      DoChangeNotification(changes); @@ -515,13 +550,29 @@ static void LayoutOk(void * junk)          // now set the minimum track radius          sprintf(prefString, "minTrackRadius-%s", curScaleName);          wPrefSetFloat("misc", prefString, thisLayout.props.minTrackRadius); -    } +		file_changed = TRUE; +	} -    if ((changes & CHANGE_BACKGROUND) || file_changed) { +    if (changes & CHANGE_BACKGROUND) {      	LayoutBackGroundSave(); -    	file_changed = FALSE; +    	file_changed = TRUE;      } +} + +/** +* Apply the changes entered to settings +* +* \param unused IN unused +*/ + +static void LayoutOk(void * unused) +{ +	ChangeLayout(); +	if(file_changed){ +		SetFileChanged(); +		file_changed = FALSE; +	}      free(thisLayout.copyOfLayoutProps);      wHide(layoutW); @@ -534,14 +585,14 @@ static void LayoutOk(void * junk)  /**  * Discard the changes entered and replace with earlier values  * -* \param junk IN unused +* \param unused IN unused  */ -static void LayoutCancel(struct wWin_t *junk) +static void LayoutCancel(struct wWin_t *unused)  {      thisLayout.props = *(thisLayout.copyOfLayoutProps);      ParamLoadControls(&layoutPG); -    LayoutOk(junk); +    LayoutOk(unused);  }  static void LayoutChange(long changes) @@ -552,7 +603,7 @@ static void LayoutChange(long changes)          }  } -void DoLayout(void * junk) +void DoLayout(void * unused)  {      SetLayoutRoomSize(mapD.size); @@ -692,16 +743,84 @@ LayoutBackGroundInit(BOOL_T clear) {  	}  	char * str = GetLayoutBackGroundFullPath();  	if (str && str[0]) { -		if (!LoadBackGroundImage()) {    //Failed -> Wipe Out +        haveBackground = true; +        if (!LoadBackGroundImage()) {    //Failed -> Wipe Out  			SetLayoutBackGroundFullPath(noname);  			SetLayoutBackGroundPos(zero);  			SetLayoutBackGroundAngle(0.0);  			SetLayoutBackGroundScreen(0);  			SetLayoutBackGroundSize(0.0);  			LayoutBackGroundSave(); +            haveBackground = false;  		}  	} else { +		haveBackground = false;  		wDrawSetBackground(  mainD.d, NULL, NULL);  	} +} +EXPORT int DoSettingsRead( +		int files, +		char ** fileName, +		void * data ) +{ +	char * pref; +	assert( files == 1 ); +	if (fileName == NULL) wPrefsLoad(NULL); +	else wPrefsLoad(fileName[0]); +	// get the preferred scale from the new configuration file +	pref = wPrefGetString("misc", "scale"); +	if (pref) { +		char buffer[STR_SHORT_SIZE]; +		strcpy(buffer, pref); +		DoSetScale(buffer); +	} +	//Get command options +	wPrefGetInteger("DialogItem","cmdopt-preselect",&preSelect,preSelect); +	wPrefGetInteger("DialogItem","cmdopt-rightclickmode",&rightClickMode,rightClickMode); +	wPrefGetInteger("DialogItem","cmdopt-selectmode",&selectMode,selectMode); +	wPrefGetInteger("DialogItem","cmdopt-selectzero",&selectZero,selectZero); + +	//Get Toolbar showing +	wPrefGetInteger( "misc", "toolbarset",&toolbarSet,toolbarSet); + +	//Redraw the screen to reflect changes +	MainProc( mainW, wResize_e, NULL, NULL ); +	return TRUE;  } + +static struct wFilSel_t * settingsRead_fs; + +static void SettingsRead( void ) +{ +	if (settingsRead_fs == NULL) +		settingsRead_fs = wFilSelCreate( mainW, FS_LOAD, 0, _("Read Settings"), +				_("Settings File (*.xset)|*.xset"), DoSettingsRead, NULL ); +	bExample = FALSE; +	wFilSelect( settingsRead_fs, wGetAppWorkDir()); +} + +static int DoSettingsWrite( +		int files, +		char ** fileName, +		void * data ) +{ +	assert( fileName != NULL ); +	assert( files == 1 ); +	wPrefFlush(fileName[0]); +	return TRUE; +} + +static struct wFilSel_t * settingsWrite_fs; + +static void SettingsWrite( void  ) +{ +	ChangeLayout(); +	if ( settingsWrite_fs == NULL ) +		settingsWrite_fs  = wFilSelCreate( mainW, FS_UPDATE, 0, _("Write Settings"), +				_("Settings File (*.xset)|*.xset"), DoSettingsWrite, NULL ); +	wFilSelect( settingsWrite_fs, wGetAppWorkDir()); +} + + +  | 
