summaryrefslogtreecommitdiff
path: root/app/bin/misc.c
diff options
context:
space:
mode:
Diffstat (limited to 'app/bin/misc.c')
-rw-r--r--app/bin/misc.c1270
1 files changed, 746 insertions, 524 deletions
diff --git a/app/bin/misc.c b/app/bin/misc.c
index 2ac1e2f..e976481 100644
--- a/app/bin/misc.c
+++ b/app/bin/misc.c
@@ -20,34 +20,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdlib.h>
-#include <stdio.h>
-#ifndef WINDOWS
-#include <unistd.h>
-#include <dirent.h>
-#endif
-#ifdef HAVE_MALLOC_H
-#include <malloc.h>
-#endif
-#include <math.h>
-#include <ctype.h>
-#include <string.h>
-#include <time.h>
-#ifdef WINDOWS
-#include <io.h>
-#include <windows.h>
-#include "getopt.h"
-#define R_OK (02)
-#define access _access
-#if _MSC_VER >1300
-#define strdup _strdup
-#endif
-#else
-#include <sys/stat.h>
-#endif
-#include <locale.h>
-#include <stdarg.h>
-#include <stdint.h>
+
#include "cjoin.h"
#include "common.h"
@@ -57,20 +30,22 @@
#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 "include/paramfilelist.h"
#include "paths.h"
#include "smalldlg.h"
#include "track.h"
-#include "utility.h"
+#include "common-ui.h"
+#include "ctrain.h"
+
+#include <inttypes.h>
+
+#include <stdint.h>
#define DEFAULT_SCALE ("N")
-char *userLocale = NULL;
extern wBalloonHelp_t balloonHelp[];
@@ -84,7 +59,6 @@ static wMenuToggle_p magnetsMI;
#ifdef CHECK_UNUSED_BALLOONHELP
static void ShowUnusedBalloonHelp(void);
#endif
-void DoCarDlg(void);
/****************************************************************************
*
@@ -92,6 +66,8 @@ void DoCarDlg(void);
*
*/
+EXPORT int iconSize = 0;
+
EXPORT int foobar = 0;
EXPORT int log_error;
@@ -99,8 +75,6 @@ static int log_command;
EXPORT wWin_p mainW;
-EXPORT wIndex_t changed = 0;
-
EXPORT char message[STR_HUGE_SIZE];
static char message2[STR_LONG_SIZE];
@@ -119,6 +93,7 @@ EXPORT wButton_p redoB;
EXPORT wButton_p zoomUpB;
EXPORT wButton_p zoomDownB;
+EXPORT wButton_p zoomExtentsB;
wButton_p mapShowB;
wButton_p magnetsB;
wButton_p backgroundB;
@@ -143,17 +118,17 @@ EXPORT DIST_T easeR = 0.0;
EXPORT DIST_T easeL = 0.0;
EXPORT coOrd cmdMenuPos;
-EXPORT wPos_t DlgSepLeft = 12;
-EXPORT wPos_t DlgSepMid = 18;
-EXPORT wPos_t DlgSepRight = 12;
-EXPORT wPos_t DlgSepTop = 12;
-EXPORT wPos_t DlgSepBottom = 12;
-EXPORT wPos_t DlgSepNarrow = 6;
-EXPORT wPos_t DlgSepWide = 12;
-EXPORT wPos_t DlgSepFrmLeft = 4;
-EXPORT wPos_t DlgSepFrmRight = 4;
-EXPORT wPos_t DlgSepFrmTop = 4;
-EXPORT wPos_t DlgSepFrmBottom = 4;
+EXPORT wWinPix_t DlgSepLeft = 12;
+EXPORT wWinPix_t DlgSepMid = 18;
+EXPORT wWinPix_t DlgSepRight = 12;
+EXPORT wWinPix_t DlgSepTop = 12;
+EXPORT wWinPix_t DlgSepBottom = 12;
+EXPORT wWinPix_t DlgSepNarrow = 6;
+EXPORT wWinPix_t DlgSepWide = 12;
+EXPORT wWinPix_t DlgSepFrmLeft = 4;
+EXPORT wWinPix_t DlgSepFrmRight = 4;
+EXPORT wWinPix_t DlgSepFrmTop = 4;
+EXPORT wWinPix_t DlgSepFrmBottom = 4;
static int verbose = 0;
@@ -162,11 +137,11 @@ static BOOL_T inMainW = TRUE;
static long stickySet = 0;
static long stickyCnt = 0;
-static char * stickyLabels[33];
+static const char * stickyLabels[33];
#define TOOLBARSET_INIT (0xFFFF)
EXPORT long toolbarSet = TOOLBARSET_INIT;
-EXPORT wPos_t toolbarHeight = 0;
-static wPos_t toolbarWidth = 0;
+EXPORT wWinPix_t toolbarHeight = 0;
+static wWinPix_t toolbarWidth = 0;
static wMenuList_p messageList_ml;
static BOOL_T messageListEmpty = TRUE;
@@ -189,53 +164,121 @@ extern wBool_t wDrawDoTempDraw;
*
*/
-EXPORT long totalMallocs = 0;
-EXPORT long totalMalloced = 0;
-EXPORT long totalRealloced = 0;
-EXPORT long totalReallocs = 0;
-EXPORT long totalFreeed = 0;
-EXPORT long totalFrees = 0;
+EXPORT size_t totalMallocs = 0;
+EXPORT size_t totalMalloced = 0;
+EXPORT size_t totalRealloced = 0;
+EXPORT size_t totalReallocs = 0;
+EXPORT size_t totalFreeed = 0;
+EXPORT size_t totalFrees = 0;
+
+static void * StorageLog;
+
+typedef struct slog_t {
+ void * storage_p;
+ size_t storage_size;
+ BOOL_T freed;
+} slog_t, * slog_p;
+
+static int StorageLogCurrent = 0;
+
+
+#define LOG_SIZE 1000000
+
static unsigned long guard0 = 0xDEADBEEF;
static unsigned long guard1 = 0xAF00BA8A;
static int log_malloc;
-EXPORT void * MyMalloc(long size) {
+static void RecordMalloc(void * p, size_t size) {
+
+
+ if (!StorageLog) StorageLog = malloc(sizeof(slog_t)*LOG_SIZE);
+ slog_p log_p = StorageLog;
+ if (StorageLogCurrent<LOG_SIZE) {
+ log_p[StorageLogCurrent].storage_p = p;
+ log_p[StorageLogCurrent].storage_size = size;
+ StorageLogCurrent++;
+ } else {
+ printf("Storage Log size exceeded, wrapped\n");
+ log_p[0].storage_p = p;
+ log_p[0].storage_size = size;
+ StorageLogCurrent = 1;
+ }
+}
+
+static void RecordMyFree(void *p) {
+ slog_p log_p = StorageLog;
+ if (log_p) {
+ for (int i=0;i<StorageLogCurrent;i++) {
+ if (!log_p[i].freed && log_p[i].storage_p == p) {
+ log_p[i].freed = TRUE;
+ }
+ }
+ }
+}
+
+#define SLOG_FMT "0x%.12" PRIxPTR
+
+EXPORT BOOL_T TestMallocs() {
+ size_t oldSize;
+ size_t testedMallocs = 0;
+ void * old;
+ slog_p log_p = StorageLog;
+ BOOL_T rc = TRUE;
+ if (log_p) {
+ for (int i=0;i<StorageLogCurrent;i++) {
+ if (log_p[i].freed) continue;
+ old = log_p[i].storage_p;
+ oldSize = log_p[i].storage_size;
+ if (*(unsigned long*) ((char*) old - sizeof(unsigned long)) != guard0) {
+ LogPrintf("Guard 0 hosed, " SLOG_FMT " size: %llu \n", (uintptr_t)old, oldSize);
+ rc = FALSE;
+ }
+ if (*(unsigned long*) ((char*) old + oldSize) != guard1) {
+ LogPrintf("Guard 1 hosed, " SLOG_FMT " size: %llu \n", (uintptr_t)old, oldSize);
+ rc = FALSE;
+ }
+ testedMallocs++;
+ }
+ }
+ LogPrintf("Tested: %llu Mallocs: %llu Total Malloced: %llu Freed: %llu Total Freed: %llu \n",
+ testedMallocs, totalMallocs, totalMalloced, totalFrees, totalFreeed);
+ return rc;
+}
+
+
+EXPORT void * MyMalloc(size_t size) {
void * p;
totalMallocs++;
totalMalloced += size;
-#if defined(WINDOWS) && ! defined(WIN32)
- if ( size > 65500L ) {
- AbortProg( "mallocing > 65500 bytes" );
- }
-#endif
p = malloc((size_t) size + sizeof(size_t) + 2 * sizeof(unsigned long));
if (p == NULL)
AbortProg("No memory");
LOG1(log_malloc,
- ( "Malloc(%ld) = %lx (%lx-%lx)\n", size, (long)((char*)p+sizeof (size_t) + sizeof (unsigned long)), (long)p, (long)((char*)p+size+sizeof (size_t) + 2 * sizeof(unsigned long)) ));
+ ( " Malloc(%ld) = " SLOG_FMT " (" SLOG_FMT "-" SLOG_FMT ")\n",
+ size, (size_t)((char*)p+sizeof (size_t) + sizeof (unsigned long)),
+ (size_t)p,
+ (size_t)((char*)p+size+sizeof (size_t) + 2 * sizeof(unsigned long))));
+
*(size_t*) p = (size_t) size;
p = (char*) p + sizeof(size_t);
*(unsigned long*) p = guard0;
p = (char*) p + sizeof(unsigned long);
*(unsigned long*) ((char*) p + size) = guard1;
memset(p, 0, (size_t )size);
+ if (extraButtons)
+ RecordMalloc(p,size);
return p;
}
-EXPORT void * MyRealloc(void * old, long size) {
+EXPORT void * MyRealloc(void * old, size_t size) {
size_t oldSize;
void * new;
if (old == NULL)
return MyMalloc(size);
totalReallocs++;
totalRealloced += size;
-#if defined(WINDOWS) && ! defined(WIN32)
- if ( size > 65500L ) {
- AbortProg( "reallocing > 65500 bytes" );
- }
-#endif
if (*(unsigned long*) ((char*) old - sizeof(unsigned long)) != guard0) {
AbortProg("Guard0 is hosed");
}
@@ -243,7 +286,9 @@ EXPORT void * MyRealloc(void * old, long size) {
if (*(unsigned long*) ((char*) old + oldSize) != guard1) {
AbortProg("Guard1 is hosed");
}
- LOG1(log_malloc, ("Realloc(%lx,%ld) was %d\n", (long)old, size, oldSize ))
+
+ LOG1(log_malloc, (" Realloc (" SLOG_FMT ",%ld) was %d\n", (size_t)old, size, oldSize ))
+
if ((long) oldSize == size) {
return old;
}
@@ -271,10 +316,18 @@ EXPORT void MyFree(void * ptr) {
if (*(unsigned long*) ((char*) ptr + oldSize) != guard1) {
AbortProg("Guard1 is hosed");
}
+
LOG1(log_malloc,
- ("Free %d at %lx (%lx-%lx)\n", oldSize, (long)ptr, (long)((char*)ptr-sizeof *(size_t*)0-sizeof *(long*)0), (long)((char*)ptr+oldSize+sizeof *(long*)0)))
+ (" Free %d at " SLOG_FMT " (" SLOG_FMT "-" SLOG_FMT ")\n",
+ oldSize,
+ (size_t)ptr,
+ (size_t)((char*)ptr-sizeof *(size_t*)0-sizeof *(long*)0),
+ (size_t)((char*)ptr+oldSize+sizeof *(long*)0)));
+
totalFreeed += oldSize;
free((char*) ptr - sizeof *(long*) 0 - sizeof *(size_t*) 0);
+ if (extraButtons)
+ RecordMyFree(ptr);
}
}
@@ -323,7 +376,7 @@ EXPORT char * ConvertToEscapedText(const char * text) {
}
text_i++;
}
- unsigned cnt = strlen(text) + 1 + add;
+ size_t cnt = strlen(text) + 1 + add;
#ifdef WINDOWS
cnt *= 2;
#endif
@@ -364,9 +417,9 @@ EXPORT char * ConvertToEscapedText(const char * text) {
text_i++;
}
cout[cout_i] = '\0';
-#ifdef WINDOWS
- wSystemToUTF8(cout, cout, cnt);
-#endif // WINDOWS
+#ifdef UTFCONVERT
+ wSystemToUTF8(cout, cout, (unsigned int)cnt);
+#endif // UTFCONVERT
return cout;
}
@@ -424,7 +477,7 @@ EXPORT char * ConvertFromEscapedText(const char * text) {
return cout;
}
-EXPORT void AbortProg(char * msg, ...) {
+EXPORT void AbortProg(const char * msg, ...) {
static BOOL_T abort2 = FALSE;
int rc;
va_list ap;
@@ -437,15 +490,15 @@ EXPORT void AbortProg(char * msg, ...) {
strcat(message, _("\nDo you want to save your layout?"));
rc = wNoticeEx( NT_ERROR, message, _("Ok"), _("ABORT"));
if (rc) {
- DoSaveAs((doSaveCallBack_p) abort);
+ DoSaveAs(abort);
} else {
abort();
}
}
}
-EXPORT char * Strcpytrimed(char * dst, char * src, BOOL_T double_quotes) {
- char * cp;
+EXPORT char * Strcpytrimed(char * dst, const char * src, BOOL_T double_quotes) {
+ const char * cp;
while (*src && isspace((unsigned char) *src))
src++;
if (!*src)
@@ -464,10 +517,6 @@ EXPORT char * Strcpytrimed(char * dst, char * src, BOOL_T double_quotes) {
static char * directory;
-#ifdef WINDOWS
-#define F_OK (0)
-#endif
-
EXPORT wBool_t CheckHelpTopicExists(const char * topic) {
char * htmlFile;
@@ -501,8 +550,8 @@ EXPORT wBool_t CheckHelpTopicExists(const char * topic) {
}
-EXPORT char * BuildTrimedTitle(char * cp, char * sep, char * mfg, char * desc,
- char * partno) {
+EXPORT char * BuildTrimedTitle(char * cp, const char * sep, const char * mfg, const char * desc,
+ const char * partno) {
cp = Strcpytrimed(cp, mfg, FALSE);
strcpy(cp, sep);
cp += strlen(cp);
@@ -529,7 +578,7 @@ static void ShowMessageHelp(int index, const char * label, void * data) {
wHelp(msgKey);
}
-static char * ParseMessage(char *msgSrc) {
+static const char * ParseMessage(const char *msgSrc) {
char *cp1 = NULL, *cp2 = NULL;
static char shortMsg[STR_SIZE];
cp1 = strchr(_(msgSrc), '\t');
@@ -556,11 +605,11 @@ static char * ParseMessage(char *msgSrc) {
}
}
-EXPORT void InfoMessage(char * format, ...) {
+EXPORT void InfoMessage(const char * format, ...) {
va_list ap;
va_start(ap, format);
format = ParseMessage(format);
- vsprintf(message2, format, ap);
+ vsnprintf(message2, 1020, format, ap);
va_end(ap);
/*InfoSubstituteControl( NULL, NULL );*/
if (inError)
@@ -568,11 +617,11 @@ EXPORT void InfoMessage(char * format, ...) {
SetMessage(message2);
}
-EXPORT void ErrorMessage(char * format, ...) {
+EXPORT void ErrorMessage(const char * format, ...) {
va_list ap;
va_start(ap, format);
format = ParseMessage(format);
- vsprintf(message2, format, ap);
+ vsnprintf(message2, 1020, format, ap);
va_end(ap);
InfoSubstituteControls( NULL, NULL);
SetMessage(message2);
@@ -580,37 +629,27 @@ EXPORT void ErrorMessage(char * format, ...) {
inError = TRUE;
}
-EXPORT int NoticeMessage(char * format, char * yes, char * no, ...) {
+EXPORT int NoticeMessage(const char * format, const char * yes, const char * no, ...) {
va_list ap;
va_start(ap, no);
format = ParseMessage(format);
- vsprintf(message2, format, ap);
+ vsnprintf(message2, 1020, format, ap);
va_end(ap);
return wNotice(message2, yes, no);
}
-EXPORT int NoticeMessage2(int playbackRC, char * format, char * yes, char * no,
+EXPORT int NoticeMessage2(int playbackRC, const char * format, const char * yes, const char * no,
...) {
va_list ap;
if (inPlayback)
return playbackRC;
va_start(ap, no);
format = ParseMessage(format);
- vsprintf(message2, format, ap);
+ vsnprintf(message2, 1020, format, ap);
va_end(ap);
return wNoticeEx( NT_INFORMATION, message2, yes, no);
}
-/**
-* Set the file's changed flag and update the window title.
-*/
-
-void
-FileIsChanged(void)
-{
- changed++;
- SetWindowTitle();
-}
/*****************************************************************************
*
@@ -652,16 +691,16 @@ Confirm(char * label2, doSaveCallBack_p after)
return(rc != 0);
}
-static void ChkLoad(void) {
+static void ChkLoad(void * unused) {
Confirm(_("Load"), DoLoad);
}
-static void ChkExamples( void )
+static void ChkExamples( void * unused )
{
Confirm(_("examples"), DoExamples);
}
-static void ChkRevert(void)
+static void ChkRevert(void * unused)
{
int rc;
@@ -673,7 +712,7 @@ static void ChkRevert(void)
if (rc) {
/* load the file */
char *filename = GetLayoutFullPath();
- LoadTracks(1, &filename, NULL);
+ LoadTracks(1, &filename, I2VP(1)); //Keep background
}
}
}
@@ -693,15 +732,15 @@ static void ChkFileList(int index, const char * label, void * data) {
*/
EXPORT void SaveState(void) {
- wPos_t width, height;
+ wWinPix_t width, height;
const char * fileName;
void * pathName;
char file[6];
int inx;
wWinGetSize(mainW, &width, &height);
- wPrefSetInteger("draw", "mainwidth", width);
- wPrefSetInteger("draw", "mainheight", height);
+ wPrefSetInteger("draw", "mainwidth", (int)width);
+ wPrefSetInteger("draw", "mainheight", (int)height);
SaveParamFileList();
ParamUpdatePrefs();
@@ -720,8 +759,7 @@ EXPORT void SaveState(void) {
}
}
}
- wPrefFlush();
- LogClose();
+ wPrefFlush("");
}
/*
@@ -729,16 +767,15 @@ EXPORT void SaveState(void) {
*/
static void DoQuitAfter(void) {
changed = 0;
+ CleanupFiles(); //Get rid of checkpoint if we quit.
SaveState();
-
- CleanupFiles();
}
/**
* Process shutdown request. This function is called when the user requests
* to close the application. Before shutting down confirmation is gotten to
* prevent data loss.
*/
-void DoQuit(void) {
+void DoQuit(void * unused) {
if (Confirm(_("Quit"), DoQuitAfter)) {
#ifdef CHECK_UNUSED_BALLOONHELP
@@ -765,7 +802,7 @@ static void DoClearAfter(void) {
LayoutBackGroundInit(TRUE);
}
-static void DoClear(void) {
+static void DoClear(void * unused) {
Confirm(_("Clear"), DoClearAfter);
}
@@ -773,7 +810,7 @@ static void DoClear(void) {
* Toggle visibility state of map window.
*/
-void MapWindowToggleShow(void) {
+void MapWindowToggleShow(void * unused) {
MapWindowShow(!mapVisible);
}
@@ -812,7 +849,7 @@ int MagneticSnap(int state)
/**
* Toggle magnets on/off
*/
-void MagneticSnapToggle(void) {
+void MagneticSnapToggle(void * unused) {
MagneticSnap(!magneticSnap);
}
@@ -860,6 +897,7 @@ EXPORT void wHide(wWin_p win) {
if (inMainW && win == aboutW)
return;
wMenuListDelete(winList_mi, wWinGetTitle(win));
+ ParamResetInvalid( win );
if (inPlayback)
for (inx = 0; inx < demoWindows_da.cnt; inx++)
if ( demoWindows(inx) == win)
@@ -890,7 +928,7 @@ EXPORT void DefaultProc(wWin_p win, winProcEvent e, void * data) {
static void NextWindow(void) {
}
-EXPORT void SelectFont(void) {
+EXPORT void SelectFont(void * unused) {
wSelectFont(_("XTrackCAD Font"));
}
@@ -900,14 +938,14 @@ EXPORT void SelectFont(void) {
*
*/
-#define COMMAND_MAX (170)
-#define BUTTON_MAX (170)
+#define COMMAND_MAX (180)
+#define BUTTON_MAX (180)
#define NUM_CMDMENUS (4)
static struct {
wControl_p control;
wBool_t enabled;
- wPos_t x, y;
+ wWinPix_t x, y;
long options;
int group;
wIndex_t cmdInx;
@@ -934,7 +972,7 @@ static int commandCnt = 0;
int * balloonHelpCnts;
#endif
-EXPORT const char * GetBalloonHelpStr(char * helpKey) {
+EXPORT const char * GetBalloonHelpStr(const char * helpKey) {
wBalloonHelp_t * bh;
#ifdef CHECK_UNUSED_BALLOONHELP
if ( balloonHelpCnts == NULL ) {
@@ -1032,6 +1070,26 @@ EXPORT wIndex_t GetCurrentCommand() {
static wIndex_t autosave_count = 0;
+EXPORT void TryCheckPoint() {
+ if (checkPtInterval > 0
+ && changed >= checkPtMark + (wIndex_t) checkPtInterval
+ && !inPlayback) {
+ DoCheckPoint();
+ checkPtMark = changed;
+
+ autosave_count++;
+
+ if ((autosaveChkPoints>0) && (autosave_count>=autosaveChkPoints)) {
+ if ( bReadOnly || *(GetLayoutFilename()) == '\0') {
+ SetAutoSave();
+ } else
+ DoSave(NULL);
+ InfoMessage(_("File AutoSaved"));
+ autosave_count = 0;
+ }
+ }
+}
+
EXPORT void Reset(void) {
if (recordF) {
fprintf(recordF, "RESET\n");
@@ -1052,22 +1110,8 @@ EXPORT void Reset(void) {
(wButton_p) buttonList[commandList[curCommand].buttInx].control,
TRUE);
tempSegs_da.cnt = 0;
- if (checkPtInterval > 0
- && changed >= checkPtMark + (wIndex_t) checkPtInterval
- && !inPlayback) {
- DoCheckPoint();
- checkPtMark = changed;
-
- autosave_count++;
-
- if ((autosaveChkPoints>0) && (autosave_count>=autosaveChkPoints)) {
- DoSave(NULL);
- InfoMessage(_("File AutoSaved"));
- autosave_count = 0;
- }
- }
-
+ TryCheckPoint();
ClrAllTrkBits( TB_UNDRAWN );
DoRedraw(); // Reset
@@ -1238,8 +1282,11 @@ EXPORT wBool_t DoCurCommand(wAction_t action, coOrd pos) {
if (commandList[curCommand].options & IC_NORESTART) {
return C_CONTINUE;
}
+ //Make sure we checkpoint even sticky commands
+ TryCheckPoint();
LOG(log_command, 1,
( "COMMAND START %s\n", commandList[curCommand].helpKey ))
+ wSetCursor(mainD.d,defaultCursor);
rc = commandList[curCommand].cmdProc( C_START, pos);
LOG(log_command, 4, ( " COMMAND returns %d\n", rc ))
switch (rc) {
@@ -1261,9 +1308,12 @@ EXPORT wBool_t DoCurCommand(wAction_t action, coOrd pos) {
return rc;
}
-EXPORT void ConfirmReset(BOOL_T retry) {
+/*
+ * \parm reset says if the user used Esc rather than undo/redo
+ */
+EXPORT int ConfirmReset(BOOL_T retry) {
wAction_t rc;
- if (curCommand != describeCmdInx && curCommand != selectCmdInx) {
+ if (curCommand != describeCmdInx) {
LOG(log_command, 3,
( "COMMAND CONFIRM %s\n", commandList[curCommand].helpKey ))
rc = commandList[curCommand].cmdProc( C_CONFIRM, zero);
@@ -1274,25 +1324,25 @@ EXPORT void ConfirmReset(BOOL_T retry) {
wNotice3(
_(
"Cancelling the current command will undo the changes\n"
- "you are currently making. Do you want to update?"),
+ "you are currently making. Do you want to do the update instead?"),
_("Yes"), _("No"), _("Cancel"));
else
rc =
wNoticeEx( NT_WARNING,
_(
"Cancelling the current command will undo the changes\n"
- "you are currently making. Do you want to update?"),
+ "you are currently making. Do you want to do the update instead?"),
_("Yes"), _("No"));
if (rc == 1) {
LOG(log_command, 3,
( "COMMAND OK %s\n", commandList[curCommand].helpKey ))
commandList[curCommand].cmdProc( C_OK, zero);
- return;
+ return C_OK;
} else if (rc == -1) {
- return;
+ return C_CANCEL;
}
} else if (rc == C_TERMINATE) {
- return;
+ return C_TERMINATE;
}
}
if (retry) {
@@ -1303,6 +1353,7 @@ EXPORT void ConfirmReset(BOOL_T retry) {
LOG(log_command, 1,
( "COMMAND RESET %s\n", commandList[curCommand].helpKey ))
commandList[curCommand].cmdProc( C_START, zero);
+ return C_CONTINUE;
}
EXPORT BOOL_T IsCurCommandSticky(void) {
@@ -1319,7 +1370,7 @@ EXPORT void ResetIfNotSticky(void) {
}
EXPORT void DoCommandB(void * data) {
- wIndex_t inx = (wIndex_t) (long) data;
+ wIndex_t inx = (wIndex_t)VP2L(data);
STATUS_T rc;
static coOrd pos = { 0, 0 };
static int inDoCommandB = FALSE;
@@ -1365,6 +1416,10 @@ EXPORT void DoCommandB(void * data) {
( "COMMAND CANCEL %s\n", commandList[curCommand].helpKey ))
commandList[curCommand].cmdProc( C_CANCEL, pos);
tempSegs_da.cnt = 0;
+ } else {
+ LOG(log_command, 3,
+ ( "COMMAND FINISH %s\n", commandList[curCommand].helpKey ))
+ rc = commandList[curCommand].cmdProc( C_FINISH, zero);
}
if (commandList[curCommand].buttInx >= 0)
wButtonSetBusy(
@@ -1385,7 +1440,7 @@ EXPORT void DoCommandB(void * data) {
wControlSetHelp(buttonList[buttInx].control,
GetBalloonHelpStr(commandList[curCommand].helpKey));
wControlSetContext(buttonList[buttInx].control,
- (void*) (intptr_t) curCommand);
+ I2VP(curCommand));
buttonList[buttInx].cmdInx = curCommand;
}
wButtonSetBusy(
@@ -1394,6 +1449,7 @@ EXPORT void DoCommandB(void * data) {
}
LOG(log_command, 1,
( "COMMAND START %s\n", commandList[curCommand].helpKey ))
+ wSetCursor(mainD.d,defaultCursor);
rc = commandList[curCommand].cmdProc( C_START, pos);
LOG(log_command, 4, ( " COMMAND returns %d\n", rc ))
TempRedraw(); // DoCommandB
@@ -1419,16 +1475,17 @@ EXPORT void DoCommandB(void * data) {
static void DoCommandBIndirect(void * cmdInxP) {
wIndex_t cmdInx;
cmdInx = *(wIndex_t*) cmdInxP;
- DoCommandB((void*) (intptr_t) cmdInx);
+ DoCommandB(I2VP(cmdInx));
}
EXPORT void LayoutSetPos(wIndex_t inx) {
- wPos_t w, h, offset;
- static wPos_t toolbarRowHeight = 0;
- static wPos_t width;
+ wWinPix_t w, h, offset;
+ static wWinPix_t toolbarRowHeight = 0;
+ static wWinPix_t width;
static int lastGroup;
- static wPos_t gap;
+ static wWinPix_t gap;
static int layerButtCnt;
+ static int layerButtNumber;
int currGroup;
if (inx == 0) {
@@ -1437,6 +1494,7 @@ EXPORT void LayoutSetPos(wIndex_t inx) {
gap = 5;
toolbarWidth = width - 20 + 5;
layerButtCnt = 0;
+ layerButtNumber = 0;
toolbarHeight = 0;
}
@@ -1455,7 +1513,7 @@ EXPORT void LayoutSetPos(wIndex_t inx) {
&& (programMode == MODE_TRAIN
|| (buttonList[inx].options & IC_MODETRAIN_ONLY) == 0)
&& ((buttonList[inx].group & ~BG_BIGGAP) != BG_LAYER
- || layerButtCnt++ <= layerCount)) {
+ || layerButtCnt < layerCount)) {
if (currGroup != lastGroup) {
toolbarWidth += gap;
lastGroup = currGroup;
@@ -1473,12 +1531,21 @@ EXPORT void LayoutSetPos(wIndex_t inx) {
toolbarWidth = 0;
toolbarHeight += h + 5;
}
- wControlSetPos(buttonList[inx].control, toolbarWidth,
+ if ((currGroup == BG_LAYER) && layerButtNumber>1 && GetLayerHidden(layerButtNumber-2) ) {
+ wControlShow(buttonList[inx].control, FALSE);
+ layerButtNumber++;
+ } else {
+ if (currGroup == BG_LAYER ) {
+ if (layerButtNumber>1) layerButtCnt++; // Ignore List and Background
+ layerButtNumber++;
+ }
+ wControlSetPos(buttonList[inx].control, toolbarWidth,
toolbarHeight - (h + 5 +offset));
- buttonList[inx].x = toolbarWidth;
- buttonList[inx].y = toolbarHeight - (h + 5 + offset);
- toolbarWidth += wControlGetWidth(buttonList[inx].control);
- wControlShow(buttonList[inx].control, TRUE);
+ buttonList[inx].x = toolbarWidth;
+ buttonList[inx].y = toolbarHeight - (h + 5 + offset);
+ toolbarWidth += wControlGetWidth(buttonList[inx].control);
+ wControlShow(buttonList[inx].control, TRUE);
+ }
} else {
wControlShow(buttonList[inx].control, FALSE);
}
@@ -1518,8 +1585,8 @@ EXPORT BOOL_T CommandEnabled(wIndex_t cmdInx) {
return commandList[cmdInx].enabled;
}
-static wIndex_t AddCommand(procCommand_t cmdProc, char * helpKey,
- char * nameStr, wIcon_p icon, int reqLevel, long options, long acclKey,
+static wIndex_t AddCommand(procCommand_t cmdProc, const char * helpKey,
+ const char * nameStr, wIcon_p icon, int reqLevel, long options, long acclKey,
void * context) {
if (commandCnt >= COMMAND_MAX - 1) {
AbortProg("addCommand: too many commands");
@@ -1557,7 +1624,7 @@ EXPORT void AddToolbarControl(wControl_p control, long options) {
buttonCnt++;
}
-EXPORT wButton_p AddToolbarButton(char * helpStr, wIcon_p icon, long options,
+EXPORT wButton_p AddToolbarButton(const char * helpStr, wIcon_p icon, long options,
wButtonCallBack_p action, void * context) {
wButton_p bb;
wIndex_t inx;
@@ -1565,10 +1632,10 @@ EXPORT wButton_p AddToolbarButton(char * helpStr, wIcon_p icon, long options,
GetBalloonHelpStr(helpStr);
if (context == NULL) {
for (inx = 0; inx < menuPG.paramCnt; inx++) {
- if (action != DoCommandB && menuPLs[inx].valueP == (void*) action) {
+ if (action != DoCommandB && menuPLs[inx].valueP == I2VP(action)) {
context = &menuPLs[inx];
action = ParamMenuPush;
- menuPLs[inx].context = (void*) (intptr_t) buttonCnt;
+ menuPLs[inx].context = I2VP(buttonCnt);
menuPLs[inx].option |= IC_PLAYBACK_PUSH;
break;
}
@@ -1581,7 +1648,8 @@ EXPORT wButton_p AddToolbarButton(char * helpStr, wIcon_p icon, long options,
}
EXPORT void PlaybackButtonMouse(wIndex_t buttInx) {
- wPos_t cmdX, cmdY;
+ wWinPix_t cmdX, cmdY;
+ coOrd pos;
if (buttInx < 0 || buttInx >= buttonCnt)
return;
@@ -1589,9 +1657,10 @@ EXPORT void PlaybackButtonMouse(wIndex_t buttInx) {
return;
cmdX = buttonList[buttInx].x + 17;
cmdY = toolbarHeight - (buttonList[buttInx].y + 17)
- + (wPos_t) (mainD.size.y / mainD.scale * mainD.dpi) + 30;
+ + (wWinPix_t) (mainD.size.y / mainD.scale * mainD.dpi) + 30;
- MovePlaybackCursor(&mainD, cmdX, cmdY,TRUE,buttonList[buttInx].control);
+ mainD.Pix2CoOrd( &mainD, cmdX, cmdY, &pos );
+ MovePlaybackCursor(&mainD, pos, TRUE, buttonList[buttInx].control);
if (playbackTimer == 0) {
wButtonSetBusy((wButton_p) buttonList[buttInx].control, TRUE);
wFlush();
@@ -1601,14 +1670,14 @@ EXPORT void PlaybackButtonMouse(wIndex_t buttInx) {
}
}
-#include "bitmaps/openbutt.xpm"
-static char * buttonGroupMenuTitle;
-static char * buttonGroupHelpKey;
-static char * buttonGroupStickyLabel;
+#include "bitmaps/down.xpm"
+static const char * buttonGroupMenuTitle;
+static const char * buttonGroupHelpKey;
+static const char * buttonGroupStickyLabel;
static wMenu_p buttonGroupPopupM;
-EXPORT void ButtonGroupBegin(char * menuTitle, char * helpKey,
- char * stickyLabel) {
+EXPORT void ButtonGroupBegin(const char * menuTitle, const char * helpKey,
+ const char * stickyLabel) {
buttonGroupMenuTitle = menuTitle;
buttonGroupHelpKey = helpKey;
buttonGroupStickyLabel = stickyLabel;
@@ -1622,7 +1691,7 @@ EXPORT void ButtonGroupEnd(void) {
}
EXPORT wIndex_t AddMenuButton(wMenu_p menu, procCommand_t command,
- char * helpKey, char * nameStr, wIcon_p icon, int reqLevel,
+ const char * helpKey, const char * nameStr, wIcon_p icon, int reqLevel,
long options, long acclKey, void * context) {
wIndex_t buttInx = -1;
wIndex_t cmdInx;
@@ -1639,17 +1708,17 @@ EXPORT wIndex_t AddMenuButton(wMenu_p menu, procCommand_t command,
} else {
buttInx = buttonCnt;
AddToolbarButton(helpKey, icon, options,
- (wButtonCallBack_p) DoCommandB,
- (void*) (intptr_t) commandCnt);
+ DoCommandB,
+ I2VP(commandCnt));
buttonList[buttInx].cmdInx = commandCnt;
}
if (buttonGroupMenuTitle != NULL && buttonGroupPopupM == NULL) {
if (openbuttIcon == NULL)
- openbuttIcon = wIconCreatePixMap(openbutt_xpm);
+ openbuttIcon = wIconCreatePixMap(down_xpm[iconSize]);
buttonGroupPopupM = wMenuPopupCreate(mainW, buttonGroupMenuTitle);
AddToolbarButton(buttonGroupHelpKey, openbuttIcon, IC_ABUT,
(wButtonCallBack_p) wMenuPopupShow,
- (void*) buttonGroupPopupM);
+ buttonGroupPopupM);
newButtonGroup = TRUE;
commandsSubmenu = wMenuMenuCreate(menu, "", buttonGroupMenuTitle);
if (options & IC_POPUP2) {
@@ -1690,7 +1759,7 @@ EXPORT wIndex_t AddMenuButton(wMenu_p menu, procCommand_t command,
if (buttonGroupPopupM) {
commandList[cmdInx].menu[0] = wMenuPushCreate(buttonGroupPopupM,
helpKey, GetBalloonHelpStr(helpKey), 0, DoCommandB,
- (void*) (intptr_t) cmdInx);
+ I2VP(cmdInx));
tm = commandsSubmenu;
p1m = popup1Submenu;
p2m = popup2Submenu;
@@ -1700,21 +1769,21 @@ EXPORT wIndex_t AddMenuButton(wMenu_p menu, procCommand_t command,
p2m = (options & IC_POPUP2) ? popup2aM : (options & IC_POPUP3) ? popup2mM : popup2M;
}
commandList[cmdInx].menu[1] = wMenuPushCreate(tm, helpKey, nameStr, acclKey,
- DoCommandB, (void*) (intptr_t) cmdInx);
+ DoCommandB, I2VP(cmdInx));
if ((options & (IC_POPUP | IC_POPUP2 | IC_POPUP3))) {
if (!(options & IC_SELECTED)) {
commandList[cmdInx].menu[2] = wMenuPushCreate(p1m, helpKey, nameStr,
- 0, DoCommandB, (void*) (intptr_t) cmdInx);
+ 0, DoCommandB, I2VP(cmdInx));
}
commandList[cmdInx].menu[3] = wMenuPushCreate(p2m, helpKey, nameStr, 0,
- DoCommandB, (void*) (intptr_t) cmdInx);
+ DoCommandB, I2VP(cmdInx));
}
return cmdInx;
}
-EXPORT wIndex_t InitCommand(wMenu_p menu, procCommand_t command, char * nameStr,
- char * bits, int reqLevel, long options, long acclKey) {
+EXPORT wIndex_t InitCommand(wMenu_p menu, procCommand_t command, const char * nameStr,
+ const char * bits, int reqLevel, long options, long acclKey) {
char helpKey[STR_SHORT_SIZE];
wIcon_p icon = NULL;
if (bits)
@@ -1727,10 +1796,10 @@ EXPORT wIndex_t InitCommand(wMenu_p menu, procCommand_t command, char * nameStr,
/*--------------------------------------------------------------------*/
-EXPORT void PlaybackCommand(char * line, wIndex_t lineNum) {
- wIndex_t inx;
+EXPORT void PlaybackCommand(const char * line, wIndex_t lineNum) {
+ size_t inx;
wIndex_t buttInx;
- int len1, len2;
+ size_t len1, len2;
len1 = strlen(line + 8);
for (inx = 0; inx < commandCnt; inx++) {
len2 = strlen(commandList[inx].helpKey + 3);
@@ -1743,12 +1812,14 @@ EXPORT void PlaybackCommand(char * line, wIndex_t lineNum) {
fprintf(stderr, "Unknown playback COMMAND command %d : %s\n", lineNum,
line);
} else {
- wPos_t cmdX, cmdY;
+ wWinPix_t cmdX, cmdY;
+ coOrd pos;
if ((buttInx = commandList[inx].buttInx) >= 0) {
cmdX = buttonList[buttInx].x + 17;
cmdY = toolbarHeight - (buttonList[buttInx].y + 17)
- + (wPos_t) (mainD.size.y / mainD.scale * mainD.dpi) + 30;
- MovePlaybackCursor(&mainD, cmdX, cmdY,TRUE,buttonList[buttInx].control);
+ + (wWinPix_t) (mainD.size.y / mainD.scale * mainD.dpi) + 30;
+ mainD.Pix2CoOrd( &mainD, cmdX, cmdY, &pos );
+ MovePlaybackCursor(&mainD, pos,TRUE,buttonList[buttInx].control);
}
if (strcmp(line + 8, "Undo") == 0) {
if (buttInx > 0 && playbackTimer == 0) {
@@ -1758,7 +1829,7 @@ EXPORT void PlaybackCommand(char * line, wIndex_t lineNum) {
wButtonSetBusy((wButton_p) buttonList[buttInx].control, FALSE);
wFlush();
}
- UndoUndo();
+ UndoUndo(NULL);
} else if (strcmp(line + 8, "Redo") == 0) {
if (buttInx >= 0 && playbackTimer == 0) {
wButtonSetBusy((wButton_p) buttonList[buttInx].control, TRUE);
@@ -1767,7 +1838,7 @@ EXPORT void PlaybackCommand(char * line, wIndex_t lineNum) {
wButtonSetBusy((wButton_p) buttonList[buttInx].control, FALSE);
wFlush();
}
- UndoRedo();
+ UndoRedo(NULL);
} else {
if (buttInx >= 0 && playbackTimer == 0) {
wButtonSetBusy((wButton_p) buttonList[buttInx].control, TRUE);
@@ -1776,7 +1847,7 @@ EXPORT void PlaybackCommand(char * line, wIndex_t lineNum) {
wButtonSetBusy((wButton_p) buttonList[buttInx].control, FALSE);
wFlush();
}
- DoCommandB((void*) (intptr_t) inx);
+ DoCommandB(I2VP(inx));
}
}
}
@@ -1798,7 +1869,7 @@ static void DoMenuTrace(wMenu_p menu, const char * label, void * data) {
}
}
-EXPORT wMenu_p MenuRegister(char * label) {
+EXPORT wMenu_p MenuRegister(const char * label) {
wMenu_p m;
menuTrace_p mt;
m = wMenuPopupCreate(mainW, label);
@@ -1813,15 +1884,13 @@ EXPORT wMenu_p MenuRegister(char * label) {
void MenuPlayback(char * line) {
char * menuName, *itemName;
coOrd pos;
- wPos_t x, y;
menuTrace_p mt;
if (!GetArgs(line, "pqq", &pos, &menuName, &itemName))
return;
for (mt = &menuTrace(0); mt < &menuTrace(menuTrace_da.cnt); mt++) {
if (strcmp(mt->label, menuName) == 0) {
- mainD.CoOrd2Pix(&mainD, pos, &x, &y);
- MovePlaybackCursor(&mainD, x, y, FALSE, NULL);
+ MovePlaybackCursor(&mainD, pos, FALSE, NULL);
oldMarker = cmdMenuPos = pos;
wMenuAction(mt->menu, _(itemName));
return;
@@ -1833,17 +1902,17 @@ void MenuPlayback(char * line) {
static wWin_p stickyW;
-static void StickyOk(void *);
+static void StickyOk(void * unused);
static paramData_t stickyPLs[] = { { PD_TOGGLE, &stickySet, "set", 0,
stickyLabels } };
static paramGroup_t stickyPG = { "sticky", PGO_RECORD, stickyPLs,
- sizeof stickyPLs / sizeof stickyPLs[0] };
+ COUNT( stickyPLs ) };
-static void StickyOk(void * junk) {
+static void StickyOk(void * unused) {
wHide(stickyW);
}
-static void DoSticky(void) {
+static void DoSticky(void * unused) {
if (!stickyW)
stickyW = ParamCreateDialog(&stickyPG,
MakeWindowTitle(_("Sticky Commands")), _("Ok"), StickyOk, wHide,
@@ -1859,21 +1928,26 @@ static void DoSticky(void) {
* specified in the following array.
* Note: text and choices must be given in the same order.
*/
-static char *AllToolbarLabels[] = { N_("File Buttons"), N_("Import/Export Buttons"), N_("Zoom Buttons"), N_(
- "Undo Buttons"), N_("Easement Button"), N_("SnapGrid Buttons"), N_(
- "Create Track Buttons"), N_("Layout Control Elements"), N_(
- "Modify Track Buttons"), N_("Properties/Select"), N_(
- "Track Group Buttons"), N_("Train Group Buttons"), N_(
- "Create Misc Buttons"), N_("Ruler Button"), N_("Layer Buttons"), N_(
- "Hot Bar"),
+static char *AllToolbarLabels[] = { N_("File Buttons"), N_("Print Buttons"), N_("Import/Export Buttons"),
+ N_("Zoom Buttons"), N_("Undo Buttons"), N_("Easement Button"), N_("SnapGrid Buttons"),
+ N_("Create Track Buttons"), N_("Layout Control Elements"),
+ N_("Modify Track Buttons"), N_("Properties/Select"),
+ N_("Track Group Buttons"), N_("Train Group Buttons"),
+ N_("Create Misc Buttons"), N_("Ruler Button"),
+ N_("Layer Buttons"), N_("Hot Bar"),
NULL };
-static long AllToolbarMasks[] = { 1 << BG_FILE, 1<< BG_EXPORTIMPORT, 1 << BG_ZOOM, 1 << BG_UNDO, 1
- << BG_EASE, 1 << BG_SNAP, 1 << BG_TRKCRT, 1 << BG_CONTROL, 1
- << BG_TRKMOD, 1 << BG_SELECT, 1 << BG_TRKGRP, 1 << BG_TRAIN, 1
- << BG_MISCCRT, 1 << BG_RULER, 1 << BG_LAYER, 1 << BG_HOTBAR };
-
-static void ToolbarAction(wBool_t set, void * data) {
- long mask = (long) data;
+static long AllToolbarMasks[] = { 1 << BG_FILE, 1<< BG_PRINT, 1<< BG_EXPORTIMPORT,
+ 1<< BG_ZOOM, 1<< BG_UNDO, 1<< BG_EASE, 1 << BG_SNAP, 1 << BG_TRKCRT,
+ 1<< BG_CONTROL, 1<< BG_TRKMOD, 1 << BG_SELECT, 1 << BG_TRKGRP, 1 << BG_TRAIN,
+ 1<< BG_MISCCRT, 1<< BG_RULER, 1 << BG_LAYER, 1 << BG_HOTBAR };
+
+static wMenuToggle_p AllToolbarMI[ COUNT( AllToolbarMasks ) ];
+
+static void ToolbarAction(void * data) {
+ int inx = (int)VP2L(data);
+ ASSERT( inx >=0 && inx < COUNT( AllToolbarMasks ) );
+ wBool_t set = wMenuToggleGet( AllToolbarMI[inx] );
+ long mask = AllToolbarMasks[inx];
if (set)
toolbarSet |= mask;
else
@@ -1898,13 +1972,13 @@ static void CreateToolbarM(wMenu_p toolbarM) {
char **labels;
wBool_t set;
- cnt = sizeof(AllToolbarMasks) / sizeof(AllToolbarMasks[0]);
+ cnt = COUNT(AllToolbarMasks);
masks = AllToolbarMasks;
labels = AllToolbarLabels;
for (inx = 0; inx < cnt; inx++, masks++, labels++) {
set = (toolbarSet & *masks) != 0;
- wMenuToggleCreate(toolbarM, "toolbarM", _(*labels), 0, set,
- ToolbarAction, (void*) *masks);
+ AllToolbarMI[inx] = wMenuToggleCreate(toolbarM, "toolbarM", _(*labels), 0, set,
+ ToolbarAction, I2VP(inx));
}
}
@@ -1913,21 +1987,20 @@ static void CreateToolbarM(wMenu_p toolbarM) {
static wWin_p addElevW;
#define addElevF (wFloat_p)addElevPD.control
EXPORT DIST_T addElevValueV;
-static void DoAddElev(void *);
+static void DoAddElev(void * unused);
static paramFloatRange_t rn1000_1000 = { -1000.0, 1000.0 };
static paramData_t addElevPLs[] = { { PD_FLOAT, &addElevValueV, "value",
- PDO_DIM, &rn1000_1000, NULL, 0 } };
-static paramGroup_t addElevPG = { "addElev", 0, addElevPLs, sizeof addElevPLs
- / sizeof addElevPLs[0] };
+ PDO_NOPREF|PDO_DIM, &rn1000_1000, NULL, 0 } };
+static paramGroup_t addElevPG = { "addElev", 0, addElevPLs, COUNT( addElevPLs ) };
-static void DoAddElev(void * junk) {
+static void DoAddElev(void * unused) {
ParamLoadData(&addElevPG);
AddElevations(addElevValueV);
wHide(addElevW);
}
-static void ShowAddElevations(void) {
+static void ShowAddElevations(void * unused) {
if (selectedTrackCount <= 0) {
ErrorMessage(MSG_NO_SELECTED_TRK);
return;
@@ -1942,29 +2015,36 @@ static void ShowAddElevations(void) {
/*--------------------------------------------------------------------*/
static wWin_p rotateW;
+static wWin_p indexW;
static wWin_p moveW;
static double rotateValue;
+static char trackIndex[STR_LONG_SIZE];
static coOrd moveValue;
static rotateDialogCallBack_t rotateDialogCallBack;
+static indexDialogCallBack_t indexDialogCallBack;
static moveDialogCallBack_t moveDialogCallBack;
-static void RotateEnterOk(void *);
+static void RotateEnterOk(void * unused);
+
+static paramFloatRange_t rn360_360 = { -360.0, 360.0, 80 };
+static paramData_t rotatePLs[] = { { PD_FLOAT, &rotateValue, "rotate", PDO_NOPREF|PDO_ANGLE|PDO_NORECORD, &rn360_360, N_("Angle:") } };
+static paramGroup_t rotatePG = { "rotate", 0, rotatePLs, COUNT( rotatePLs ) };
-static paramFloatRange_t rn360_360 = { -360.0, 360.0, 80.0 };
-static paramData_t rotatePLs[] = { { PD_FLOAT, &rotateValue, "rotate", PDO_ANGLE,
- &rn360_360, N_("Angle:") } };
-static paramGroup_t rotatePG = { "rotate", 0, rotatePLs, sizeof rotatePLs
- / sizeof rotatePLs[0] };
+static void IndexEnterOk(void * unused);
+static paramData_t indexPLs[] = {
+ { PD_STRING, &trackIndex, "select", PDO_NOPREF|PDO_NORECORD|PDO_STRINGLIMITLENGTH, I2VP(STR_SIZE-1), N_("Indexes:"), 0, 0, sizeof(trackIndex) } };
+static paramGroup_t indexPG = { "index", 0, indexPLs, COUNT( indexPLs ) };
static paramFloatRange_t r_1000_1000 = { -1000.0, 1000.0, 80 };
-static void MoveEnterOk(void *);
-static paramData_t movePLs[] = { { PD_FLOAT, &moveValue.x, "moveX", PDO_DIM,
- &r_1000_1000, N_("Move X:") }, { PD_FLOAT, &moveValue.y, "moveY",
- PDO_DIM, &r_1000_1000, N_("Move Y:") } };
-static paramGroup_t movePG = { "move", 0, movePLs, sizeof movePLs
- / sizeof movePLs[0] };
-
-EXPORT void StartRotateDialog(rotateDialogCallBack_t func) {
+static void MoveEnterOk(void * unused);
+static paramData_t movePLs[] = {
+ { PD_FLOAT, &moveValue.x, "moveX", PDO_NOPREF|PDO_DIM|PDO_NORECORD, &r_1000_1000, N_("Move X:") },
+ { PD_FLOAT, &moveValue.y, "moveY", PDO_NOPREF|PDO_DIM|PDO_NORECORD, &r_1000_1000, N_("Move Y:") } };
+static paramGroup_t movePG = { "move", 0, movePLs, COUNT( movePLs ) };
+
+static void StartRotateDialog(void * funcVP)
+{
+ rotateDialogCallBack_t func = funcVP;
if (rotateW == NULL)
rotateW = ParamCreateDialog(&rotatePG, MakeWindowTitle(_("Rotate")),
_("Ok"), RotateEnterOk, wHide, FALSE, NULL, 0, NULL);
@@ -1973,7 +2053,21 @@ EXPORT void StartRotateDialog(rotateDialogCallBack_t func) {
wShow(rotateW);
}
-EXPORT void StartMoveDialog(moveDialogCallBack_t func) {
+static void StartIndexDialog(void * funcVP)
+{
+ indexDialogCallBack_t func = funcVP;
+ if (indexW == NULL)
+ indexW = ParamCreateDialog(&indexPG, MakeWindowTitle(_("Select Index")),
+ _("Ok"), IndexEnterOk, wHide, FALSE, NULL, 0, NULL);
+ ParamLoadControls(&indexPG);
+ indexDialogCallBack = func;
+ trackIndex[0] = '\0';
+ wShow(indexW);
+}
+
+static void StartMoveDialog(void * funcVP)
+{
+ moveDialogCallBack_t func = funcVP;
if (moveW == NULL)
moveW = ParamCreateDialog(&movePG, MakeWindowTitle(_("Move")), _("Ok"),
MoveEnterOk, wHide, FALSE, NULL, 0, NULL);
@@ -1983,18 +2077,24 @@ EXPORT void StartMoveDialog(moveDialogCallBack_t func) {
wShow(moveW);
}
-static void MoveEnterOk(void * junk) {
+static void MoveEnterOk(void * unused) {
ParamLoadData(&movePG);
- moveDialogCallBack((void*) &moveValue);
+ moveDialogCallBack(&moveValue);
wHide(moveW);
}
-static void RotateEnterOk(void * junk) {
+static void IndexEnterOk(void * unused) {
+ ParamLoadData(&indexPG);
+ indexDialogCallBack(trackIndex);
+ wHide(indexW);
+}
+
+static void RotateEnterOk(void * unused) {
ParamLoadData(&rotatePG);
if (angleSystem == ANGLE_POLAR)
- rotateDialogCallBack((void*) (long)(rotateValue*1000));
+ rotateDialogCallBack(I2VP(rotateValue * 1000));
else
- rotateDialogCallBack((void*) (long)(-rotateValue*1000));
+ rotateDialogCallBack(I2VP(rotateValue * 1000));
wHide(rotateW);
}
@@ -2006,24 +2106,33 @@ static void MoveDialogInit(void) {
ParamRegister(&movePG);
}
+static void IndexDialogInit(void) {
+ ParamRegister(&indexPG);
+}
+
EXPORT void AddMoveMenu(wMenu_p m, moveDialogCallBack_t func) {
wMenuPushCreate(m, "", _("Enter Move ..."), 0,
- (wMenuCallBack_p) StartMoveDialog, (void*) func);
+ StartMoveDialog, func);
+}
+
+EXPORT void AddIndexMenu(wMenu_p m, indexDialogCallBack_t func) {
+ wMenuPushCreate(m, "cmdSelectIndex", _("Select Track Index ..."), 0,
+ StartIndexDialog, func);
}
//All values multipled by 100 to support decimal points from PD_FLOAT
EXPORT void AddRotateMenu(wMenu_p m, rotateDialogCallBack_t func) {
- wMenuPushCreate(m, "", _("180 "), 0, func, (void*) 180000);
- wMenuPushCreate(m, "", _("90 CW"), 0, func, (void*) (long) (90000));
- wMenuPushCreate(m, "", _("45 CW"), 0, func, (void*) (long) (45000));
- wMenuPushCreate(m, "", _("30 CW"), 0, func, (void*) (long) (30000));
- wMenuPushCreate(m, "", _("15 CW"), 0, func, (void*) (long) (15000));
- wMenuPushCreate(m, "", _("15 CCW"), 0, func, (void*) (long) (360000 - 15000));
- wMenuPushCreate(m, "", _("30 CCW"), 0, func, (void*) (long) (360000 - 30000));
- wMenuPushCreate(m, "", _("45 CCW"), 0, func, (void*) (long) (360000 - 45000));
- wMenuPushCreate(m, "", _("90 CCW"), 0, func, (void*) (long) (360000 - 90000));
+ wMenuPushCreate(m, "", _("180 "), 0, func, I2VP(180000));
+ wMenuPushCreate(m, "", _("90 CW"), 0, func, I2VP(90000));
+ wMenuPushCreate(m, "", _("45 CW"), 0, func, I2VP(45000));
+ wMenuPushCreate(m, "", _("30 CW"), 0, func, I2VP(30000));
+ wMenuPushCreate(m, "", _("15 CW"), 0, func, I2VP(15000));
+ wMenuPushCreate(m, "", _("15 CCW"), 0, func, I2VP(360000 - 15000));
+ wMenuPushCreate(m, "", _("30 CCW"), 0, func, I2VP(360000 - 30000));
+ wMenuPushCreate(m, "", _("45 CCW"), 0, func, I2VP(360000 - 45000));
+ wMenuPushCreate(m, "", _("90 CCW"), 0, func, I2VP(360000 - 90000));
wMenuPushCreate(m, "", _("Enter Angle ..."), 0,
- (wMenuCallBack_p) StartRotateDialog, (void*) func);
+ StartRotateDialog, func);
}
/*****************************************************************************
@@ -2036,14 +2145,17 @@ static wWin_p debugW;
static int debugCnt = 0;
static paramIntegerRange_t r0_100 = { 0, 100, 80 };
-static void DebugOk(void * junk);
+static void DebugOk(void * unused);
static paramData_t debugPLs[30];
+static paramData_t p0[] = {
+ { PD_BUTTON, TestMallocs, "test", PDO_DLGHORZ, NULL, N_("Test Mallocs") }
+ };
static long debug_values[30];
static int debug_index[30];
static paramGroup_t debugPG = { "debug", 0, debugPLs, 0 };
-static void DebugOk(void * junk) {
+static void DebugOk(void * unused) {
for (int i = 0; i<debugCnt;i++) {
logTable(debug_index[i]).level = debug_values[i];
}
@@ -2051,16 +2163,17 @@ static void DebugOk(void * junk) {
}
static void CreateDebugW(void) {
- debugPG.paramCnt = debugCnt;
+ debugPG.paramCnt = debugCnt+1;
ParamRegister(&debugPG);
debugW = ParamCreateDialog(&debugPG, MakeWindowTitle(_("Debug")), _("Ok"),
DebugOk, wHide, FALSE, NULL, 0, NULL);
wHide(debugW);
}
-EXPORT void DebugInit(void) {
+EXPORT void DebugInit(void * unused) {
if (!debugW) {
+ debugPLs[0] = p0[0];
BOOL_T default_line = FALSE;
debugCnt = 0; //Reset to start building the dynamic dialog over again
int i = 0;
@@ -2080,6 +2193,7 @@ EXPORT void DebugInit(void) {
}
}
}
+
//ParamCreateControls( &debugPG, NULL );
CreateDebugW();
}
@@ -2088,22 +2202,22 @@ EXPORT void DebugInit(void) {
}
-EXPORT void InitDebug(char * label, long * valueP) {
- if (debugCnt >= sizeof debugPLs / sizeof debugPLs[0])
+EXPORT void InitDebug(const char * label, long * valueP) {
+ if (debugCnt+1 >= COUNT( debugPLs ) )
AbortProg("Too many debug flags");
- memset(&debugPLs[debugCnt], 0, sizeof debugPLs[debugCnt]);
- debugPLs[debugCnt].type = PD_LONG;
- debugPLs[debugCnt].valueP = valueP;
- debugPLs[debugCnt].nameStr = label;
- debugPLs[debugCnt].winData = &r0_100;
- debugPLs[debugCnt].winLabel = label;
+ memset(&debugPLs[debugCnt+1], 0, sizeof debugPLs[debugCnt]);
+ debugPLs[debugCnt+1].type = PD_LONG;
+ debugPLs[debugCnt+1].valueP = valueP;
+ debugPLs[debugCnt+1].nameStr = label;
+ debugPLs[debugCnt+1].winData = &r0_100;
+ debugPLs[debugCnt+1].winLabel = label;
debugCnt++;
}
-void RecomputeElevations(void);
+void RecomputeElevations(void * unused );
-static void MiscMenuItemCreate(wMenu_p m1, wMenu_p m2, char * name,
- char * label, long acclKey, void * func, long option, void * context) {
+static void MiscMenuItemCreate(wMenu_p m1, wMenu_p m2, const char * name,
+ const char * label, long acclKey, void * func, long option, void * context) {
wMenuPush_p mp;
mp = wMenuPushCreate(m1, name, label, acclKey, ParamMenuPush,
&menuPLs[menuPG.paramCnt]);
@@ -2122,67 +2236,157 @@ static void MiscMenuItemCreate(wMenu_p m1, wMenu_p m2, char * name,
menuPG.paramCnt++;
}
+
+/*****************************************************************************
+ *
+ * ACCEL KEY
+ *
+ */
+
+enum eAccelAction_t { EA_ZOOMUP, EA_ZOOMDOWN, EA_REDRAW, EA_DELETE, EA_UNDO, EA_COPY, EA_PASTE, EA_CUT, EA_NEXT, EA_HELP };
+struct accelKey_s {
+ const char * sPrefName;
+ wAccelKey_e eKey;
+ int iMode;
+ enum eAccelAction_t iAction;
+ int iContext; } aAccelKeys[] = {
+ { "zoomUp", wAccelKey_Pgdn, 0, EA_ZOOMUP, 1 },
+ { "zoomDown", wAccelKey_Pgup, 0, EA_ZOOMDOWN, 1 },
+ { "redraw", wAccelKey_F5, 0, EA_REDRAW, 0 },
+#ifdef WINDOWS
+ { "delete", wAccelKey_Del, 0, EA_DELETE, 0 },
+#endif
+ { "undo", wAccelKey_Back, WKEY_SHIFT, EA_UNDO, 0 },
+ { "copy", wAccelKey_Ins, WKEY_CTRL, EA_COPY, 0 },
+ { "paste", wAccelKey_Ins, WKEY_SHIFT, EA_PASTE, 0 },
+ { "cut", wAccelKey_Del, WKEY_SHIFT, EA_CUT, 0 },
+ { "nextWindow", wAccelKey_F6, 0, EA_NEXT, 0 },
+ { "zoomUp", wAccelKey_Numpad_Add, WKEY_CTRL, EA_ZOOMUP, 1 },
+ { "zoomDown", wAccelKey_Numpad_Subtract, WKEY_CTRL, EA_ZOOMDOWN, 1 },
+ { "help", wAccelKey_F1, WKEY_SHIFT, EA_HELP, 1 },
+ { "help-context", wAccelKey_F1, 0, EA_HELP, 3 } };
+
+static void AccelKeyDispatch( wAccelKey_e key, void * accelKeyIndexVP )
+{
+ int iAccelKeyIndex = (int)VP2L(accelKeyIndexVP);
+ switch( aAccelKeys[iAccelKeyIndex].iAction ) {
+ case EA_ZOOMUP:
+ DoZoomUp( I2VP(aAccelKeys[iAccelKeyIndex].iContext) );
+ break;
+ case EA_ZOOMDOWN:
+ DoZoomDown( I2VP(aAccelKeys[iAccelKeyIndex].iContext) );
+ break;
+ case EA_REDRAW:
+ MainRedraw();
+ break;
+ case EA_DELETE:
+ TrySelectDelete();
+ break;
+ case EA_UNDO:
+ UndoUndo(NULL);
+ break;
+ case EA_COPY:
+ EditCopy(NULL);
+ break;
+ case EA_PASTE:
+ EditPaste(NULL);
+ break;
+ case EA_CUT:
+ EditCut(NULL);
+ break;
+ case EA_NEXT:
+ NextWindow();
+ break;
+ case EA_HELP:
+ wDoAccelHelp(key, I2VP(aAccelKeys[iAccelKeyIndex].iContext));
+ break;
+ default:
+ abort();
+ }
+}
+
static char * accelKeyNames[] = { "Del", "Ins", "Home", "End", "Pgup", "Pgdn",
"Up", "Down", "Right", "Left", "Back", "F1", "F2", "F3", "F4", "F5",
"F6", "F7", "F8", "F9", "F10", "F11", "F12", "NumpadAdd", "NumpadSub" };
-static void SetAccelKey(char * prefName, wAccelKey_e key, int mode,
- wAccelKeyCallBack_p func, void * context) {
- int mode1 = 0;
- int inx;
- const char * prefValue = wPrefGetString("accelKey", prefName);
- if (prefValue != NULL) {
- while (prefValue[1] == '-') {
- switch (prefValue[0]) {
- case 'S':
- mode1 |= WKEY_SHIFT;
- break;
- case 'C':
- mode1 |= WKEY_CTRL;
- break;
- case 'A':
- mode1 |= WKEY_ALT;
- break;
- default:
- ;
+static void SetAccelKeys()
+{
+ for ( int iAccelKey = 0; iAccelKey < COUNT( aAccelKeys ); iAccelKey++ )
+ {
+ struct accelKey_s * akP = &aAccelKeys[iAccelKey];
+ int eKey = akP->eKey;
+ int iMode = akP->iMode;
+ const char * sPrefValue = wPrefGetString("accelKey", akP->sPrefName);
+ if (sPrefValue != NULL) {
+ int iMode1 = 0;
+ while (sPrefValue[1] == '-') {
+ switch (sPrefValue[0]) {
+ case 'S':
+ iMode1 |= WKEY_SHIFT;
+ break;
+ case 'C':
+ iMode1 |= WKEY_CTRL;
+ break;
+ case 'A':
+ iMode1 |= WKEY_ALT;
+ break;
+ default:
+ ;
+ }
+ sPrefValue += 2;
}
- prefValue += 2;
- }
- for (inx = 0; inx < sizeof accelKeyNames / sizeof accelKeyNames[0];
- inx++) {
- if (strcmp(prefValue, accelKeyNames[inx]) == 0) {
- key = inx + 1;
- mode = mode1;
- break;
+ for (int inx = 0; inx < COUNT( accelKeyNames ); inx++) {
+ if (strcmp(sPrefValue, accelKeyNames[inx]) == 0) {
+ eKey = inx + 1;
+ iMode = iMode1;
+ break;
+ }
}
}
+ wAttachAccelKey(eKey, iMode, AccelKeyDispatch, I2VP(iAccelKey));
}
- wAttachAccelKey(key, mode, func, context);
-}
-
-#include "bitmaps/zoomin.xpm"
-#include "bitmaps/zoom.xpm"
-#include "bitmaps/zoomout.xpm"
-#include "bitmaps/edit-undo.xpm"
-#include "bitmaps/edit-redo.xpm"
-#include "bitmaps/partlist.xpm"
-#include "bitmaps/document-export.xpm"
-#include "bitmaps/document-exportdxf.xpm"
-#include "bitmaps/document-import.xpm"
-#include "bitmaps/document-importmod.xpm"
-#include "bitmaps/document-new.xpm"
-#include "bitmaps/document-save.xpm"
-#include "bitmaps/document-open.xpm"
-#include "bitmaps/document-print.xpm"
+}
+
+
+/*****************************************************************************
+ *
+ * MENUS
+ *
+ */
+
+
+#include "bitmaps/zoom-in.xpm"
+#include "bitmaps/zoom-choose.xpm"
+#include "bitmaps/zoom-out.xpm"
+#include "bitmaps/zoom-extent.xpm"
+#include "bitmaps/undo.xpm"
+#include "bitmaps/redo.xpm"
+#include "bitmaps/partlist.xpm" // unused icon
+#include "bitmaps/doc-export.xpm"
+#include "bitmaps/doc-export-dxf.xpm"
+#include "bitmaps/doc-export-bmap.xpm"
+#include "bitmaps/doc-import.xpm"
+#include "bitmaps/doc-import-xtc.xpm"
+#include "bitmaps/doc-new.xpm"
+#include "bitmaps/doc-save.xpm"
+#include "bitmaps/doc-open.xpm"
+#include "bitmaps/doc-print.xpm"
+#include "bitmaps/doc-setup.xpm"
+#include "bitmaps/parameter.xpm"
#include "bitmaps/map.xpm"
#include "bitmaps/magnet.xpm"
+static wMenu_p toolbarM;
+static addButtonCallBack_t paramFilesCallback;
+
static void CreateMenus(void) {
wMenu_p fileM, editM, viewM, optionM, windowM, macroM, helpM, toolbarM,
messageListM, manageM, addM, changeM, drawM;
wMenu_p zoomM, zoomSubM;
- wMenuPush_p zoomInM, zoomOutM;
+ wMenuPush_p zoomInM, zoomOutM, zoomExtentsM;
+
+ wPrefGetInteger("DialogItem", "pref-iconsize", (long *) &iconSize, 0);
fileM = wMenuBarAdd(mainW, "menuFile", _("&File"));
editM = wMenuBarAdd(mainW, "menuEdit", _("&Edit"));
@@ -2233,57 +2437,65 @@ static void CreateMenus(void) {
popup1M = wMenuPopupCreate(mainW, _("Context Commands"));
popup2M = wMenuPopupCreate(mainW, _("Shift Context Commands"));
MiscMenuItemCreate(popup1M, popup2M, "cmdUndo", _("Undo"), 0,
- (void*) (wMenuCallBack_p) UndoUndo, 0, (void *) 0);
+ UndoUndo, 0, NULL);
MiscMenuItemCreate(popup1M, popup2M, "cmdRedo", _("Redo"), 0,
- (void*) (wMenuCallBack_p) UndoRedo, 0, (void *) 0);
+ UndoRedo, 0, NULL);
/* Zoom */
wMenuPushCreate(popup1M, "cmdZoomIn", _("Zoom In"), 0,
- (wMenuCallBack_p) DoZoomUp, (void*) 1);
+ DoZoomUp, I2VP(1));
wMenuPushCreate(popup2M, "cmdZoomIn", _("Zoom In"), 0,
- (wMenuCallBack_p) DoZoomUp, (void*) 1);
+ DoZoomUp, I2VP(1));
wMenuPushCreate(popup1M, "cmdZoomOut", _("Zoom Out"), 0,
- (wMenuCallBack_p) DoZoomDown, (void*) 1);
+ DoZoomDown, I2VP(1));
wMenuPushCreate(popup2M, "cmdZoomOut", _("Zoom Out"), 0,
- (wMenuCallBack_p) DoZoomDown, (void*) 1);
- /* Display */
+ DoZoomDown, I2VP(1));
+ wMenuPushCreate(popup1M, "cmdZoomExtents", _("Zoom Extents"), 0,
+ DoZoomExtents, I2VP(1));
+ wMenuPushCreate(popup2M, "cmdZoomExtents", _("Zoom Extents"), 0,
+ DoZoomExtents, I2VP(1));
+ /* Display */
MiscMenuItemCreate(popup1M, popup2M, "cmdGridEnable", _("Enable SnapGrid"),
- 0, (void*) (wMenuCallBack_p) SnapGridEnable, 0, (void *) 0);
+ 0, SnapGridEnable, 0, NULL);
MiscMenuItemCreate(popup1M, popup2M, "cmdGridShow", _("SnapGrid Show"), 0,
- (void*) (wMenuCallBack_p) SnapGridShow, 0, (void *) 0);
+ SnapGridShow, 0, NULL);
MiscMenuItemCreate(popup1M, popup2M, "cmdMagneticSnap", _(" Enable Magnetic Snap"), 0,
- (void*) (wMenuCallBack_p) MagneticSnapToggle, 0, (void *) 0);
+ MagneticSnapToggle, 0, NULL);
MiscMenuItemCreate(popup1M, popup2M, "cmdMapShow", _("Show/Hide Map"), 0,
- (void*) (wMenuCallBack_p) MapWindowToggleShow, 0, (void *) 0);
+ MapWindowToggleShow, 0, NULL);
MiscMenuItemCreate(popup1M, popup2M, "cmdBackgroundShow", _("Show/Hide Background"), 0,
- (void*) (wMenuCallBack_p) BackgroundToggleShow, 0, (void *) 0);
+ BackgroundToggleShow, 0, NULL);
wMenuSeparatorCreate(popup1M);
wMenuSeparatorCreate(popup2M);
/* Copy/Paste */
MiscMenuItemCreate(popup2M, NULL, "cmdCut", _("Cut"), 0,
- (void*) (wMenuCallBack_p) EditCut, 0, (void *) 0);
+ EditCut, 0, NULL);
MiscMenuItemCreate(popup2M, NULL, "cmdCopy", _("Copy"), 0,
- (void*) (wMenuCallBack_p) EditCopy, 0, (void *) 0);
+ EditCopy, 0, NULL);
MiscMenuItemCreate(popup1M, popup2M, "cmdPaste", _("Paste"), 0,
- (void*) (wMenuCallBack_p) EditPaste, 0, (void *) 0);
+ EditPaste, 0, NULL);
MiscMenuItemCreate(popup2M, NULL, "cmdClone", _("Clone"), 0,
- (void*) (wMenuCallBack_p) EditClone, 0, (void *) 0);
+ EditClone, 0, NULL);
/*Select*/
MiscMenuItemCreate(popup1M, popup2M, "cmdSelectAll", _("Select All"), 0,
- (void*) (wMenuCallBack_p) SetAllTrackSelect, 0, (void *) 1);
+ (wMenuCallBack_p) SetAllTrackSelect, 0, I2VP(1));
MiscMenuItemCreate(popup1M, popup2M, "cmdSelectCurrentLayer",
_("Select Current Layer"), 0,
- (void*) (wMenuCallBack_p) SelectCurrentLayer, 0, (void *) 0);
+ SelectCurrentLayer, 0, NULL);
MiscMenuItemCreate(popup2M, NULL, "cmdDeselectAll", _("Deselect All"), 0,
- (void*) (wMenuCallBack_p) SetAllTrackSelect, 0, (void *) 0);
+ (wMenuCallBack_p) SetAllTrackSelect, 0, I2VP(FALSE));
+ wMenuPushCreate(popup1M, "cmdSelectIndex", _("Select Track Index..."), 0,
+ StartIndexDialog, &SelectByIndex);
+ wMenuPushCreate(popup2M, "cmdSelectIndex", _("Select Track Index..."), 0,
+ StartIndexDialog, &SelectByIndex);
/* Modify */
wMenuPushCreate(popup2M, "cmdMove", _("Move"), 0,
- (wMenuCallBack_p) DoCommandBIndirect, &moveCmdInx);
+ DoCommandBIndirect, &moveCmdInx);
wMenuPushCreate(popup2M, "cmdRotate", _("Rotate"), 0,
- (wMenuCallBack_p) DoCommandBIndirect, &rotateCmdInx);
+ DoCommandBIndirect, &rotateCmdInx);
wMenuSeparatorCreate(popup1M);
wMenuSeparatorCreate(popup2M);
MiscMenuItemCreate(popup2M, NULL, "cmdDelete", _("Delete"), 0,
- (void*) (wMenuCallBack_p) SelectDelete, 0, (void *) 0);
+ (wMenuCallBack_p) SelectDelete, 0, NULL);
wMenuSeparatorCreate(popup2M);
popup1aM = wMenuMenuCreate(popup1M, "", _("Add..."));
popup2aM = wMenuMenuCreate(popup2M, "", _("Add..."));
@@ -2292,139 +2504,158 @@ static void CreateMenus(void) {
popup1mM = wMenuMenuCreate(popup1M, "", _("More..."));
popup2mM = wMenuMenuCreate(popup2M, "", _("More..."));
- cmdGroup = BG_FILE;
- AddToolbarButton("menuFile-clear", wIconCreatePixMap(document_new),
- IC_MODETRAIN_TOO, (addButtonCallBack_t) DoClear, NULL);
- AddToolbarButton("menuFile-load", wIconCreatePixMap(document_open),
- IC_MODETRAIN_TOO, (addButtonCallBack_t) ChkLoad, NULL);
- AddToolbarButton("menuFile-save", wIconCreatePixMap(document_save),
- IC_MODETRAIN_TOO, (addButtonCallBack_t) DoSave, NULL);
-
- InitCmdExport();
-
- cmdGroup = BG_ZOOM;
- zoomUpB = AddToolbarButton("cmdZoomIn", wIconCreatePixMap(zoomin_xpm),
- IC_MODETRAIN_TOO, (addButtonCallBack_t) DoZoomUp, NULL);
-
- zoomM = wMenuPopupCreate(mainW, "");
- AddToolbarButton("cmdZoom", wIconCreatePixMap(zoom_xpm), IC_MODETRAIN_TOO,
- (wButtonCallBack_p) wMenuPopupShow, zoomM);
-
- zoomDownB = AddToolbarButton("cmdZoomOut", wIconCreatePixMap(zoomout_xpm),
- IC_MODETRAIN_TOO, (addButtonCallBack_t) DoZoomDown, NULL);
-
- cmdGroup = BG_UNDO;
- undoB = AddToolbarButton("cmdUndo", wIconCreatePixMap(edit_undo), 0,
- (addButtonCallBack_t) UndoUndo, NULL);
- redoB = AddToolbarButton("cmdRedo", wIconCreatePixMap(edit_redo), 0,
- (addButtonCallBack_t) UndoRedo, NULL);
-
- wControlActive((wControl_p) undoB, FALSE);
- wControlActive((wControl_p) redoB, FALSE);
-
/*
* FILE MENU
*/
MiscMenuItemCreate(fileM, NULL, "menuFile-clear", _("&New ..."), ACCL_NEW,
- (void*) (wMenuCallBack_p) DoClear, 0, (void *) 0);
+ DoClear, 0, NULL);
wMenuPushCreate(fileM, "menuFile-load", _("&Open ..."), ACCL_OPEN,
- (wMenuCallBack_p) ChkLoad, NULL);
+ ChkLoad, NULL);
wMenuSeparatorCreate(fileM);
wMenuPushCreate(fileM, "menuFile-save", _("&Save"), ACCL_SAVE,
- (wMenuCallBack_p) DoSave, NULL);
+ DoSave, NULL);
wMenuPushCreate(fileM, "menuFile-saveAs", _("Save &As ..."), ACCL_SAVEAS,
- (wMenuCallBack_p) DoSaveAs, NULL);
+ DoSaveAs, NULL);
wMenuPushCreate(fileM, "menuFile-revert", _("Revert"), ACCL_REVERT,
- (wMenuCallBack_p) ChkRevert, NULL);
+ ChkRevert, NULL);
wMenuSeparatorCreate(fileM);
+
+ cmdGroup = BG_FILE;
+ AddToolbarButton("menuFile-clear", wIconCreatePixMap(doc_new_xpm[iconSize]),
+ IC_MODETRAIN_TOO, DoClear, NULL);
+ AddToolbarButton("menuFile-load", wIconCreatePixMap(doc_open_xpm[iconSize]),
+ IC_MODETRAIN_TOO, ChkLoad, NULL);
+ AddToolbarButton("menuFile-save", wIconCreatePixMap(doc_save_xpm[iconSize]),
+ IC_MODETRAIN_TOO, DoSave, NULL);
+
+ cmdGroup = BG_PRINT;
MiscMenuItemCreate(fileM, NULL, "printSetup", _("P&rint Setup ..."),
- ACCL_PRINTSETUP, (void*) (wMenuCallBack_p) wPrintSetup, 0,
- (void *) 0);
+ ACCL_PRINTSETUP, (wMenuCallBack_p) wPrintSetup, 0,
+ I2VP(0));
printCmdInx = InitCmdPrint(fileM);
+ AddToolbarButton("menuFile-setup", wIconCreatePixMap(doc_setup_xpm[iconSize]),
+ IC_MODETRAIN_TOO, (wMenuCallBack_p) wPrintSetup, I2VP(0));
+
wMenuSeparatorCreate(fileM);
MiscMenuItemCreate(fileM, NULL, "cmdImport", _("&Import"), ACCL_IMPORT,
- (void*) (wMenuCallBack_p) DoImport, 0, (void *) 0);
+ DoImport, 0, I2VP(0));
MiscMenuItemCreate(fileM, NULL, "cmdImportModule", _("Import &Module"), ACCL_IMPORT_MOD,
- (void*) (wMenuCallBack_p) DoImport, 0, (void *) 1);
+ DoImport, 0, I2VP(1));
MiscMenuItemCreate(fileM, NULL, "cmdOutputbitmap", _("Export to &Bitmap"),
- ACCL_PRINTBM, (void*) (wMenuCallBack_p) OutputBitMapInit(), 0,
- (void *) 0);
+ ACCL_PRINTBM, OutputBitMapInit(), 0,
+ NULL);
MiscMenuItemCreate(fileM, NULL, "cmdExport", _("E&xport"), ACCL_EXPORT,
- (void*) (wMenuCallBack_p) DoExport, IC_SELECTED, (void *) 0);
+ DoExport, IC_SELECTED, NULL);
MiscMenuItemCreate(fileM, NULL, "cmdExportDXF", _("Export D&XF"),
- ACCL_EXPORTDXF, (void*) (wMenuCallBack_p) DoExportDXF, IC_SELECTED,
- (void *) 0);
+ ACCL_EXPORTDXF, DoExportDXF, IC_SELECTED,
+ NULL);
+#if XTRKCAD_CREATE_SVG
+ MiscMenuItemCreate( fileM, NULL, "cmdExportSVG", _("Export S&VG"), ACCL_EXPORTDXF,
+ DoExportSVG, IC_SELECTED, NULL);
+#endif
wMenuSeparatorCreate(fileM);
+ paramFilesCallback = ParamFilesInit();
MiscMenuItemCreate(fileM, NULL, "cmdPrmfile", _("Parameter &Files ..."),
- ACCL_PARAMFILES, (void*) ParamFilesInit(), 0, (void *) 0);
+ ACCL_PARAMFILES, paramFilesCallback, 0, NULL);
MiscMenuItemCreate(fileM, NULL, "cmdFileNote", _("No&tes ..."), ACCL_NOTES,
- (void*) (wMenuCallBack_p) DoNote, 0, (void *) 0);
+ DoNote, 0, NULL);
wMenuSeparatorCreate(fileM);
fileList_ml = wMenuListCreate(fileM, "menuFileList", NUM_FILELIST,
ChkFileList);
wMenuSeparatorCreate(fileM);
wMenuPushCreate(fileM, "menuFile-quit", _("E&xit"), 0,
- (wMenuCallBack_p) DoQuit, NULL);
+ DoQuit, NULL);
+
+ InitCmdExport();
+
+ AddToolbarButton("menuFile-parameter", wIconCreatePixMap(parameter_xpm[iconSize]),
+ IC_MODETRAIN_TOO, paramFilesCallback, NULL);
+
+ cmdGroup = BG_ZOOM;
+ zoomUpB = AddToolbarButton("cmdZoomIn", wIconCreatePixMap(zoom_in_xpm[iconSize]),
+ IC_MODETRAIN_TOO, DoZoomUp, NULL);
+ zoomM = wMenuPopupCreate(mainW, "");
+ AddToolbarButton("cmdZoom", wIconCreatePixMap(zoom_choose_xpm[iconSize]), IC_MODETRAIN_TOO,
+ (wButtonCallBack_p) wMenuPopupShow, zoomM);
+ zoomDownB = AddToolbarButton("cmdZoomOut", wIconCreatePixMap(zoom_out_xpm[iconSize]),
+ IC_MODETRAIN_TOO, DoZoomDown, NULL);
+ zoomExtentsB = AddToolbarButton("cmdZoomExtent", wIconCreatePixMap(zoom_extent_xpm[iconSize]),
+ IC_MODETRAIN_TOO, DoZoomExtents, NULL);
+
+ cmdGroup = BG_UNDO;
+ undoB = AddToolbarButton("cmdUndo", wIconCreatePixMap(undo_xpm[iconSize]), 0,
+ UndoUndo, NULL);
+ redoB = AddToolbarButton("cmdRedo", wIconCreatePixMap(redo_xpm[iconSize]), 0,
+ UndoRedo, NULL);
+
+ wControlActive((wControl_p) undoB, FALSE);
+ wControlActive((wControl_p) redoB, FALSE);
+ InitCmdUndo();
/*
* EDIT MENU
*/
MiscMenuItemCreate(editM, NULL, "cmdUndo", _("&Undo"), ACCL_UNDO,
- (void*) (wMenuCallBack_p) UndoUndo, 0, (void *) 0);
+ UndoUndo, 0, NULL);
MiscMenuItemCreate(editM, NULL, "cmdRedo", _("R&edo"), ACCL_REDO,
- (void*) (wMenuCallBack_p) UndoRedo, 0, (void *) 0);
+ UndoRedo, 0, NULL);
wMenuSeparatorCreate(editM);
MiscMenuItemCreate(editM, NULL, "cmdCut", _("Cu&t"), ACCL_CUT,
- (void*) (wMenuCallBack_p) EditCut, IC_SELECTED, (void *) 0);
+ EditCut, IC_SELECTED, NULL);
MiscMenuItemCreate(editM, NULL, "cmdCopy", _("&Copy"), ACCL_COPY,
- (void*) (wMenuCallBack_p) EditCopy, IC_SELECTED, (void *) 0);
+ EditCopy, IC_SELECTED, NULL);
MiscMenuItemCreate(editM, NULL, "cmdPaste", _("&Paste"), ACCL_PASTE,
- (void*) (wMenuCallBack_p) EditPaste, 0, (void *) 0);
+ EditPaste, 0, NULL);
MiscMenuItemCreate(editM, NULL, "cmdClone", _("C&lone"), ACCL_CLONE,
- (void*) (wMenuCallBack_p) EditClone, 0, (void *) 0);
+ EditClone, 0, NULL);
MiscMenuItemCreate(editM, NULL, "cmdDelete", _("De&lete"), ACCL_DELETE,
- (void*) (wMenuCallBack_p) SelectDelete, IC_SELECTED, (void *) 0);
+ (wMenuCallBack_p) SelectDelete, IC_SELECTED, NULL);
MiscMenuItemCreate(editM, NULL, "cmdMoveToCurrentLayer",
_("Move To Current Layer"), ACCL_MOVCURLAYER,
- (void*) (wMenuCallBack_p) MoveSelectedTracksToCurrentLayer,
- IC_SELECTED, (void *) 0);
+ MoveSelectedTracksToCurrentLayer,
+ IC_SELECTED, NULL);
wMenuSeparatorCreate( editM );
- menuPLs[menuPG.paramCnt].context = (void*)1;
- MiscMenuItemCreate( editM, NULL, "cmdSelectAll", _("Select &All"), ACCL_SELECTALL, (void*)(wMenuCallBack_p)SetAllTrackSelect, 0, (void *)1 );
- MiscMenuItemCreate( editM, NULL, "cmdSelectCurrentLayer", _("Select Current Layer"), ACCL_SETCURLAYER, (void*)(wMenuCallBack_p)SelectCurrentLayer, 0, (void *)0 );
- MiscMenuItemCreate( editM, NULL, "cmdDeselectAll", _("&Deselect All"), ACCL_DESELECTALL, (void*)(wMenuCallBack_p)SetAllTrackSelect, 0, (void *)0 );
- MiscMenuItemCreate( editM, NULL, "cmdSelectInvert", _("&Invert Selection"), 0L, (void*)(wMenuCallBack_p)InvertTrackSelect, 0, (void *)0 );
- MiscMenuItemCreate( editM, NULL, "cmdSelectOrphaned", _("Select Stranded Track"), 0L, (void*)(wMenuCallBack_p)OrphanedTrackSelect, 0, (void *)0 );
+ menuPLs[menuPG.paramCnt].context = I2VP(1);
+ MiscMenuItemCreate( editM, NULL, "cmdSelectAll", _("Select &All"), ACCL_SELECTALL, (wMenuCallBack_p)SetAllTrackSelect, 0, I2VP(TRUE) );
+ MiscMenuItemCreate( editM, NULL, "cmdSelectCurrentLayer", _("Select Current Layer"), ACCL_SETCURLAYER, SelectCurrentLayer, 0, NULL);
+ MiscMenuItemCreate( editM, NULL, "cmdSelectByIndex", _("Select By Index"), 0L, StartIndexDialog, 0, &SelectByIndex );
+ MiscMenuItemCreate( editM, NULL, "cmdDeselectAll", _("&Deselect All"), ACCL_DESELECTALL, (wMenuCallBack_p)SetAllTrackSelect, 0, I2VP(FALSE) );
+ MiscMenuItemCreate( editM, NULL, "cmdSelectInvert", _("&Invert Selection"), 0L, InvertTrackSelect, 0, NULL);
+ MiscMenuItemCreate( editM, NULL, "cmdSelectOrphaned", _("Select Stranded Track"), 0L, OrphanedTrackSelect, 0, NULL);
wMenuSeparatorCreate( editM );
- MiscMenuItemCreate( editM, NULL, "cmdTunnel", _("Tu&nnel"), ACCL_TUNNEL, (void*)(wMenuCallBack_p)SelectTunnel, IC_SELECTED, (void *)0 );
- MiscMenuItemCreate( editM, NULL, "cmdBridge", _("B&ridge"), ACCL_BRIDGE, (void*)(wMenuCallBack_p)SelectBridge, IC_SELECTED, (void *)0);
- MiscMenuItemCreate( editM, NULL, "cmdTies", _("Ties/NoTies"), ACCL_TIES, (void*)(wMenuCallBack_p)SelectTies, IC_SELECTED, (void *)0);
- MiscMenuItemCreate( editM, NULL, "cmdAbove", _("Move to &Front"), ACCL_ABOVE, (void*)(wMenuCallBack_p)SelectAbove, IC_SELECTED, (void *)0 );
- MiscMenuItemCreate( editM, NULL, "cmdBelow", _("Move to &Back"), ACCL_BELOW, (void*)(wMenuCallBack_p)SelectBelow, IC_SELECTED, (void *)0 );
+ MiscMenuItemCreate( editM, NULL, "cmdTunnel", _("Tu&nnel"), ACCL_TUNNEL, SelectTunnel, IC_SELECTED, NULL);
+ MiscMenuItemCreate( editM, NULL, "cmdBridge", _("B&ridge"), ACCL_BRIDGE, SelectBridge, IC_SELECTED, NULL);
+ MiscMenuItemCreate( editM, NULL, "cmdTies", _("Ties/NoTies"), ACCL_TIES, SelectTies, IC_SELECTED, NULL);
+ MiscMenuItemCreate( editM, NULL, "cmdAbove", _("Move to &Front"), ACCL_ABOVE, SelectAbove, IC_SELECTED, NULL);
+ MiscMenuItemCreate( editM, NULL, "cmdBelow", _("Move to &Back"), ACCL_BELOW, SelectBelow, IC_SELECTED, NULL);
wMenuSeparatorCreate( editM );
- MiscMenuItemCreate( editM, NULL, "cmdWidth0", _("Thin Tracks"), ACCL_THIN, (void*)(wMenuCallBack_p)SelectTrackWidth, IC_SELECTED, (void *)0 );
- MiscMenuItemCreate( editM, NULL, "cmdWidth2", _("Medium Tracks"), ACCL_MEDIUM, (void*)(wMenuCallBack_p)SelectTrackWidth, IC_SELECTED, (void *)2 );
- MiscMenuItemCreate( editM, NULL, "cmdWidth3", _("Thick Tracks"), ACCL_THICK, (void*)(wMenuCallBack_p)SelectTrackWidth, IC_SELECTED, (void *)3 );
+ MiscMenuItemCreate( editM, NULL, "cmdWidth0", _("Thin Tracks"), ACCL_THIN, SelectTrackWidth, IC_SELECTED, I2VP(0) );
+ MiscMenuItemCreate( editM, NULL, "cmdWidth2", _("Medium Tracks"), ACCL_MEDIUM, SelectTrackWidth, IC_SELECTED, I2VP(2) );
+ MiscMenuItemCreate( editM, NULL, "cmdWidth3", _("Thick Tracks"), ACCL_THICK, SelectTrackWidth, IC_SELECTED, I2VP(3) );
/*
* VIEW MENU
*/
+
zoomInM = wMenuPushCreate(viewM, "menuEdit-zoomIn", _("Zoom &In"),
- ACCL_ZOOMIN, (wMenuCallBack_p) DoZoomUp, (void*) 1);
+ ACCL_ZOOMIN, DoZoomUp, I2VP(1));
zoomSubM = wMenuMenuCreate(viewM, "menuEdit-zoomTo", _("&Zoom"));
zoomOutM = wMenuPushCreate(viewM, "menuEdit-zoomOut", _("Zoom &Out"),
- ACCL_ZOOMOUT, (wMenuCallBack_p) DoZoomDown, (void*) 1);
- wMenuSeparatorCreate(viewM);
+ ACCL_ZOOMOUT, DoZoomDown, I2VP(1));
+ zoomExtentsM = wMenuPushCreate(viewM, "menuEdit-zoomExtents", _("Zoom &Extents"),
+ 0, DoZoomExtents, I2VP(0));
+ wMenuSeparatorCreate(viewM);
InitCmdZoom(zoomM, zoomSubM, NULL, NULL);
/* these menu choices and toolbar buttons are synonymous and should be treated as such */
wControlLinkedSet((wControl_p) zoomInM, (wControl_p) zoomUpB);
wControlLinkedSet((wControl_p) zoomOutM, (wControl_p) zoomDownB);
+ wControlLinkedSet((wControl_p) zoomExtentsM, (wControl_p) zoomExtentsB);
wMenuPushCreate(viewM, "menuEdit-redraw", _("&Redraw"), ACCL_REDRAW,
(wMenuCallBack_p) MainRedraw, NULL);
@@ -2434,20 +2665,20 @@ static void CreateMenus(void) {
snapGridEnableMI = wMenuToggleCreate(viewM, "cmdGridEnable",
_("Enable SnapGrid"), ACCL_SNAPENABLE, 0,
- (wMenuToggleCallBack_p) SnapGridEnable, NULL);
+ SnapGridEnable, NULL);
snapGridShowMI = wMenuToggleCreate(viewM, "cmdGridShow", _("Show SnapGrid"),
ACCL_SNAPSHOW,
- FALSE, (wMenuToggleCallBack_p) SnapGridShow, NULL);
+ FALSE, SnapGridShow, NULL);
gridCmdInx = InitGrid(viewM);
// visibility toggle for anchors
// get the start value
long anchors_long;
- wPrefGetInteger("misc", "anchors", (long *)&anchors_long, 1);
+ wPrefGetInteger("misc", "anchors", &anchors_long, 1);
magneticSnap = anchors_long ? TRUE : FALSE;
magnetsMI = wMenuToggleCreate(viewM, "cmdMagneticSnap", _("Enable Magnetic Snap"),
0, magneticSnap,
- (wMenuToggleCallBack_p)MagneticSnapToggle, NULL);
+ MagneticSnapToggle, NULL);
// visibility toggle for map window
// get the start value
@@ -2456,7 +2687,7 @@ static void CreateMenus(void) {
mapVisible = mapVisible_long ? TRUE : FALSE;
mapShowMI = wMenuToggleCreate(viewM, "cmdMapShow", _("Show/Hide Map"),
ACCL_MAPSHOW, mapVisible,
- (wMenuToggleCallBack_p) MapWindowToggleShow, NULL);
+ MapWindowToggleShow, NULL);
wMenuSeparatorCreate(viewM);
@@ -2468,13 +2699,13 @@ static void CreateMenus(void) {
cmdGroup = BG_SNAP;
InitSnapGridButtons();
- magnetsB = AddToolbarButton("cmdMagneticSnap", wIconCreatePixMap(magnet_xpm),
- IC_MODETRAIN_TOO, (addButtonCallBack_t) MagneticSnapToggle, NULL);
+ magnetsB = AddToolbarButton("cmdMagneticSnap", wIconCreatePixMap(magnet_xpm[iconSize]),
+ IC_MODETRAIN_TOO, MagneticSnapToggle, NULL);
wControlLinkedSet((wControl_p) magnetsMI, (wControl_p) magnetsB);
wButtonSetBusy(magnetsB, (wBool_t) magneticSnap);
- mapShowB = AddToolbarButton("cmdMapShow", wIconCreatePixMap(map_xpm),
- IC_MODETRAIN_TOO, (addButtonCallBack_t) MapWindowToggleShow, NULL);
+ mapShowB = AddToolbarButton("cmdMapShow", wIconCreatePixMap(map_xpm[iconSize]),
+ IC_MODETRAIN_TOO, MapWindowToggleShow, NULL);
wControlLinkedSet((wControl_p) mapShowMI, (wControl_p) mapShowB);
wButtonSetBusy(mapShowB, (wBool_t) mapVisible);
@@ -2507,51 +2738,55 @@ static void CreateMenus(void) {
cmdGroup = BG_SELECT;
InitCmdDescribe(changeM);
InitCmdSelect(changeM);
- InitCmdPan(changeM);
+ InitCmdPan(viewM);
+
wMenuSeparatorCreate(changeM);
cmdGroup = BG_TRKGRP;
InitCmdMove(changeM);
+ InitCmdMoveDescription(changeM);
InitCmdDelete();
InitCmdTunnel();
InitCmdBridge();
InitCmdAboveBelow();
cmdGroup = BG_TRKMOD;
- if (extraButtons)
- MiscMenuItemCreate(changeM, NULL, "loosen", _("&Loosen Tracks"),
- ACCL_LOOSEN, (void*) (wMenuCallBack_p) LoosenTracks,
- IC_SELECTED, (void *) 0);
-
InitCmdModify(changeM);
+ InitCmdCornu(changeM);
+
+ MiscMenuItemCreate(changeM, NULL, "cmdRescale", _("Change Scale"), 0,
+ DoRescale, IC_SELECTED, NULL);
+
+
+ wMenuSeparatorCreate(changeM);
+
InitCmdJoin(changeM);
- InitCmdPull(changeM);
InitCmdSplit(changeM);
- InitCmdMoveDescription(changeM);
+
+ wMenuSeparatorCreate(changeM);
+
+ InitCmdPull(changeM);
+ if (extraButtons)
+ MiscMenuItemCreate(changeM, NULL, "loosen", _("&Loosen Tracks"),
+ ACCL_LOOSEN, LoosenTracks,
+ IC_SELECTED, NULL);
+
wMenuSeparatorCreate(changeM);
MiscMenuItemCreate(changeM, NULL, "cmdAddElevations",
_("Raise/Lower Elevations"), ACCL_CHGELEV,
- (void*) (wMenuCallBack_p) ShowAddElevations, IC_SELECTED,
- (void *) 0);
+ ShowAddElevations, IC_SELECTED,
+ NULL);
InitCmdElevation(changeM);
InitCmdProfile(changeM);
MiscMenuItemCreate(changeM, NULL, "cmdClearElevations",
_("Clear Elevations"), ACCL_CLRELEV,
- (void*) (wMenuCallBack_p) ClearElevations, IC_SELECTED, (void *) 0);
+ ClearElevations, IC_SELECTED, NULL);
MiscMenuItemCreate(changeM, NULL, "cmdElevation", _("Recompute Elevations"),
- 0, (void*) (wMenuCallBack_p) RecomputeElevations, 0, (void *) 0);
+ 0, RecomputeElevations, 0, NULL);
ParamRegister(&addElevPG);
- wMenuSeparatorCreate(changeM);
- MiscMenuItemCreate(changeM, NULL, "cmdRescale", _("Change Scale"), 0,
- (void*) (wMenuCallBack_p) DoRescale, IC_SELECTED, (void *) 0);
-
- wMenuSeparatorCreate(changeM);
-
- InitCmdCornu(changeM);
-
/*
* DRAW MENU
*/
@@ -2567,28 +2802,28 @@ static void CreateMenus(void) {
* OPTION MENU
*/
MiscMenuItemCreate(optionM, NULL, "cmdLayout", _("L&ayout ..."),
- ACCL_LAYOUTW, (void*) LayoutInit(), IC_MODETRAIN_TOO, (void *) 0);
+ ACCL_LAYOUTW, LayoutInit(), IC_MODETRAIN_TOO, NULL);
MiscMenuItemCreate(optionM, NULL, "cmdDisplay", _("&Display ..."),
- ACCL_DISPLAYW, (void*) DisplayInit(), IC_MODETRAIN_TOO, (void *) 0);
+ ACCL_DISPLAYW, DisplayInit(), IC_MODETRAIN_TOO, NULL);
MiscMenuItemCreate(optionM, NULL, "cmdCmdopt", _("Co&mmand ..."),
- ACCL_CMDOPTW, (void*) CmdoptInit(), IC_MODETRAIN_TOO, (void *) 0);
+ ACCL_CMDOPTW, CmdoptInit(), IC_MODETRAIN_TOO, NULL);
MiscMenuItemCreate(optionM, NULL, "cmdEasement", _("&Easements ..."),
- ACCL_EASEW, (void*) (wMenuCallBack_p) DoEasementRedir,
- IC_MODETRAIN_TOO, (void *) 0);
+ ACCL_EASEW, DoEasementRedir,
+ IC_MODETRAIN_TOO, NULL);
MiscMenuItemCreate(optionM, NULL, "fontSelW", _("&Fonts ..."), ACCL_FONTW,
- (void*) (wMenuCallBack_p) SelectFont, IC_MODETRAIN_TOO, (void *) 0);
+ SelectFont, IC_MODETRAIN_TOO, NULL);
MiscMenuItemCreate(optionM, NULL, "cmdSticky", _("Stic&ky ..."),
- ACCL_STICKY, (void*) (wMenuCallBack_p) DoSticky, IC_MODETRAIN_TOO,
- (void *) 0);
+ ACCL_STICKY, DoSticky, IC_MODETRAIN_TOO,
+ NULL);
if (extraButtons) {
menuPLs[menuPG.paramCnt].context = debugW;
MiscMenuItemCreate(optionM, NULL, "cmdDebug", _("&Debug ..."), 0,
- (void*) (wMenuCallBack_p) DebugInit, IC_MODETRAIN_TOO, (void *) 0);
+ DebugInit, IC_MODETRAIN_TOO, NULL);
}
MiscMenuItemCreate(optionM, NULL, "cmdPref", _("&Preferences ..."),
- ACCL_PREFERENCES, (void*) PrefInit(), IC_MODETRAIN_TOO, (void *) 0);
+ ACCL_PREFERENCES, PrefInit(), IC_MODETRAIN_TOO, NULL);
MiscMenuItemCreate(optionM, NULL, "cmdColor", _("&Colors ..."), ACCL_COLORW,
- (void*) ColorInit(), IC_MODETRAIN_TOO, (void *) 0);
+ ColorInit(), IC_MODETRAIN_TOO, NULL);
/*
* MACRO MENU
@@ -2622,14 +2857,14 @@ static void CreateMenus(void) {
/* tip of the day */
wMenuSeparatorCreate( helpM );
- wMenuPushCreate( helpM, "cmdTip", _("Tip of the Day..."), 0, (wMenuCallBack_p)ShowTip, (void *)(SHOWTIP_FORCESHOW | SHOWTIP_NEXTTIP));
+ wMenuPushCreate( helpM, "cmdTip", _("Tip of the Day..."), 0, ShowTip, I2VP(SHOWTIP_FORCESHOW | SHOWTIP_NEXTTIP));
demoM = wMenuMenuCreate( helpM, "cmdDemo", _("&Demos") );
- wMenuPushCreate( helpM, "cmdExamples", _("Examples..."), 0, (wMenuCallBack_p)ChkExamples, (void *)0);
+ wMenuPushCreate( helpM, "cmdExamples", _("Examples..."), 0, ChkExamples, NULL);
/* about window */
wMenuSeparatorCreate(helpM);
wMenuPushCreate(helpM, "about", _("About"), 0,
- (wMenuCallBack_p) CreateAboutW, NULL);
+ CreateAboutW, NULL);
/*
* MANAGE MENU
@@ -2645,34 +2880,34 @@ static void CreateMenus(void) {
MiscMenuItemCreate(manageM, NULL, "cmdContmgm",
_("Layout &Control Elements"), ACCL_CONTMGM,
- (void*) ControlMgrInit(), 0, (void*) 0);
+ ControlMgrInit(), 0, NULL);
MiscMenuItemCreate(manageM, NULL, "cmdGroup", _("&Group"), ACCL_GROUP,
- (void*) (wMenuCallBack_p) DoGroup, IC_SELECTED, (void *) 0);
+ DoGroup, IC_SELECTED, NULL);
MiscMenuItemCreate(manageM, NULL, "cmdUngroup", _("&Ungroup"), ACCL_UNGROUP,
- (void*) (wMenuCallBack_p) DoUngroup, IC_SELECTED, (void *) 0);
+ DoUngroup, IC_SELECTED, NULL);
MiscMenuItemCreate(manageM, NULL, "cmdCustmgm",
- _("Custom defined parts..."), ACCL_CUSTMGM, (void*) CustomMgrInit(),
- 0, (void *) 0);
+ _("Custom defined parts..."), ACCL_CUSTMGM, CustomMgrInit(),
+ 0, NULL);
MiscMenuItemCreate(manageM, NULL, "cmdRefreshCompound",
_("Update Turnouts and Structures"), 0,
- (void*) (wMenuCallBack_p) DoRefreshCompound, 0, (void *) 0);
+ DoRefreshCompound, 0, NULL);
MiscMenuItemCreate(manageM, NULL, "cmdCarInventory", _("Car Inventory"),
- ACCL_CARINV, (void*) (wMenuCallBack_p) DoCarDlg, IC_MODETRAIN_TOO,
- (void *) 0);
+ ACCL_CARINV, DoCarDlg, IC_MODETRAIN_TOO,
+ NULL);
wMenuSeparatorCreate(manageM);
MiscMenuItemCreate(manageM, NULL, "cmdLayer", _("Layers ..."), ACCL_LAYERS,
- (void*) InitLayersDialog(), 0, (void *) 0);
+ InitLayersDialog(), 0, NULL);
wMenuSeparatorCreate(manageM);
MiscMenuItemCreate(manageM, NULL, "cmdEnumerate", _("Parts &List ..."),
- ACCL_PARTSLIST, (void*) (wMenuCallBack_p) EnumerateTracks, 0,
- (void *) 0);
+ ACCL_PARTSLIST, EnumerateTracks, 0,
+ NULL);
MiscMenuItemCreate(manageM, NULL, "cmdPricelist", _("Price List..."),
- ACCL_PRICELIST, (void*) PriceListInit(), 0, (void *) 0);
+ ACCL_PRICELIST, PriceListInit(), 0, NULL);
cmdGroup = BG_LAYER | BG_BIGGAP;
@@ -2685,44 +2920,7 @@ static void CreateMenus(void) {
cmdGroup = BG_HOTBAR;
InitHotBar();
-#ifdef LATER
-#ifdef WINDOWS
- wAttachAccelKey( wAccelKey_Pgdn, 0, (wAccelKeyCallBack_p)DoZoomUp, (void*)1 );
- wAttachAccelKey( wAccelKey_Pgup, 0, (wAccelKeyCallBack_p)DoZoomDown, (void*)1 );
- wAttachAccelKey( wAccelKey_F5, 0, (wAccelKeyCallBack_p)MainRedraw, (void*)1 );
-#endif
- wAttachAccelKey( wAccelKey_Ins, WKEY_CTRL, (wAccelKeyCallBack_p)EditCopy, 0 );
- wAttachAccelKey( wAccelKey_Ins, WKEY_SHIFT, (wAccelKeyCallBack_p)EditPaste, 0 );
- wAttachAccelKey( wAccelKey_Back, WKEY_SHIFT, (wAccelKeyCallBack_p)UndoUndo, 0 );
- wAttachAccelKey( wAccelKey_Del, WKEY_SHIFT, (wAccelKeyCallBack_p)EditCut, 0 );
- wAttachAccelKey( wAccelKey_F6, 0, (wAccelKeyCallBack_p)NextWindow, 0 );
-#endif
- SetAccelKey("zoomUp", wAccelKey_Pgdn, 0, (wAccelKeyCallBack_p) DoZoomUp,
- (void*) 1);
- SetAccelKey("zoomDown", wAccelKey_Pgup, 0, (wAccelKeyCallBack_p) DoZoomDown,
- (void*) 1);
- SetAccelKey("redraw", wAccelKey_F5, 0, (wAccelKeyCallBack_p) MainRedraw,
- (void*) 1);
- SetAccelKey("delete", wAccelKey_Del, 0, (wAccelKeyCallBack_p) SelectDelete,
- (void*) 1);
- SetAccelKey("copy", wAccelKey_Ins, WKEY_CTRL,
- (wAccelKeyCallBack_p) EditCopy, 0);
- SetAccelKey("paste", wAccelKey_Ins, WKEY_SHIFT,
- (wAccelKeyCallBack_p) EditPaste, 0);
- SetAccelKey("undo", wAccelKey_Back, WKEY_SHIFT,
- (wAccelKeyCallBack_p) UndoUndo, 0);
- SetAccelKey("cut", wAccelKey_Del, WKEY_SHIFT, (wAccelKeyCallBack_p) EditCut,
- 0);
- SetAccelKey("nextWindow", wAccelKey_F6, 0, (wAccelKeyCallBack_p) NextWindow,
- 0);
- SetAccelKey("zoomUp", wAccelKey_Numpad_Add, WKEY_CTRL,
- (wAccelKeyCallBack_p) DoZoomUp, (void*) 1);
- SetAccelKey("zoomDown", wAccelKey_Numpad_Subtract, WKEY_CTRL,
- (wAccelKeyCallBack_p) DoZoomDown, (void*) 1);
- SetAccelKey("help", wAccelKey_F1, WKEY_SHIFT,
- (wAccelKeyCallBack_p) wDoAccelHelp, (void*) 1);
- SetAccelKey("help-context", wAccelKey_F1, 0,
- (wAccelKeyCallBack_p) wDoAccelHelp, (void*) 3);
+ SetAccelKeys();
InitBenchDialog();
wPrefGetInteger( "DialogItem", "sticky-set", &stickySet, stickySet );
@@ -2748,21 +2946,23 @@ static void LoadFileList(void) {
EXPORT void InitCmdEnumerate(void) {
AddToolbarButton("cmdEnumerate", wIconCreatePixMap(partlist_xpm),
- IC_SELECTED | IC_ACCLKEY, (addButtonCallBack_t) EnumerateTracks,
+ IC_SELECTED | IC_ACCLKEY, EnumerateTracks,
NULL);
}
EXPORT void InitCmdExport(void) {
ButtonGroupBegin( _("Import/Export"), "cmdExportImportSetCmd", _("Import/Export") );
cmdGroup = BG_EXPORTIMPORT;
- AddToolbarButton("cmdExport", wIconCreatePixMap(export_xpm),
- IC_SELECTED | IC_ACCLKEY, (addButtonCallBack_t) DoExport, NULL);
- AddToolbarButton("cmdExportDXF", wIconCreatePixMap(export_dxf_xpm), IC_SELECTED | IC_ACCLKEY,
- (addButtonCallBack_t)DoExportDXF, (void*)1);
- AddToolbarButton("cmdImport", wIconCreatePixMap(import_xpm), IC_ACCLKEY,
- (addButtonCallBack_t) DoImport, (void*)0);
- AddToolbarButton("cmdImportModule", wIconCreatePixMap(importmod_xpm), IC_ACCLKEY,
- (addButtonCallBack_t) DoImport, (void*)1);
+ AddToolbarButton("cmdExport", wIconCreatePixMap(doc_export_xpm[iconSize]),
+ IC_SELECTED | IC_ACCLKEY, DoExport, NULL);
+ AddToolbarButton("cmdExportDXF", wIconCreatePixMap(doc_export_dxf_xpm[iconSize]), IC_SELECTED | IC_ACCLKEY,
+ DoExportDXF, I2VP(1));
+ AddToolbarButton("cmdExportBmap", wIconCreatePixMap(doc_export_bmap_xpm[iconSize]), IC_ACCLKEY,
+ OutputBitMapInit(), NULL);
+ AddToolbarButton("cmdImport", wIconCreatePixMap(doc_import_xpm[iconSize]), IC_ACCLKEY,
+ DoImport, I2VP(0));
+ AddToolbarButton("cmdImportModule", wIconCreatePixMap(doc_import_xtc_xpm[iconSize]), IC_ACCLKEY,
+ DoImport, I2VP(1));
ButtonGroupEnd();
}
@@ -2813,11 +3013,10 @@ EXPORT wWin_p wMain(int argc, char * argv[]) {
long oldToolbarMax;
long newToolbarMax;
char *cp;
- char *oldLocale = NULL;
char buffer[STR_SIZE];
unsigned int i;
- wPos_t displayWidth;
- wPos_t displayHeight;
+ wWinPix_t displayWidth;
+ wWinPix_t displayHeight;
strcpy(buffer, sProdNameLower);
@@ -2828,17 +3027,17 @@ EXPORT wWin_p wMain(int argc, char * argv[]) {
InitGettext();
/* Save user locale */
- oldLocale = setlocale(LC_ALL, NULL);
- if (oldLocale)
- userLocale = strdup(oldLocale);
+ SetCLocale();
+ SetUserLocale();
/*
* ARGUMENTS
*/
opterr = 0;
+ LogSet("dummy",0);
- while ((c = getopt(argc, argv, "vl:d:c:m")) != -1)
+ while ((c = getopt(argc, argv, "vl:d:c:mV")) != -1)
switch (c) {
case 'c': /* configuration name */
/* test for valid filename */
@@ -2883,6 +3082,10 @@ EXPORT wWin_p wMain(int argc, char * argv[]) {
argv[optind - 1]);
exit(1);
break;
+ case 'V': // display version
+ printf("Version: %s\n",XTRKCAD_VERSION);
+ exit(0);
+ break;
default:
abort();
}
@@ -2989,6 +3192,7 @@ EXPORT wWin_p wMain(int argc, char * argv[]) {
RotateDialogInit();
MoveDialogInit();
+ IndexDialogInit();
wSetSplashInfo(_("Initializing commands"));
LOG1(log_init, ( "paramInit\n" ))
@@ -3028,7 +3232,8 @@ EXPORT wWin_p wMain(int argc, char * argv[]) {
if (toolbarSet&(1<<BG_HOTBAR)) {
LayoutHotBar( NULL );
} else {
- HideHotBar();
+ LayoutHotBar( NULL ); /* Must run once to set it up */
+ HideHotBar(); /* Then hide */
}
LOG1(log_init, ( "drawInit\n" ))
DrawInit(initialZoom);
@@ -3041,6 +3246,7 @@ EXPORT wWin_p wMain(int argc, char * argv[]) {
if (!ParamFileListInit())
return NULL;
+ // LOG1(log_init, ("!ParamFileListInit()\n"))
curCommand = describeCmdInx;
LOG1(log_init, ( "Reset\n" ))
@@ -3082,13 +3288,27 @@ EXPORT wWin_p wMain(int argc, char * argv[]) {
/* this has to be called before ShowTip() */
InitSmallDlg();
- ShowTip(SHOWTIP_NEXTTIP);
+ /* Compare the program version and display Beta warning if appropriate */
+ pref = wPrefGetString("misc", "version");
+ if((!pref) || (strcmp(pref,XTRKCAD_VERSION) != 0))
+ {
+ if(strstr(XTRKCAD_VERSION,"Beta") != NULL)
+ {
+ NoticeMessage(MSG_BETA_NOTICE, _("Ok"),NULL, XTRKCAD_VERSION);
+ }
+ //else {
+ // NoticeMessage(_("New version welcome..."),_("Ok"),NULL);
+ //}
+ wPrefSetString("misc", "version", XTRKCAD_VERSION);
+ }
+ else {
+ ShowTip(SHOWTIP_NEXTTIP);
+ }
/* check for existing checkpoint file */
resumeWork = FALSE;
if (ExistsCheckpoint()) {
resumeWork = OfferCheckpoint();
- MainRedraw();
}
if (!resumeWork) {
@@ -3099,15 +3319,17 @@ EXPORT wWin_p wMain(int argc, char * argv[]) {
wPrefGetInteger("misc", "lastlayoutexample", &iExample, 0);
bExample = (iExample == 1);
}
-
if (initialFile && strlen(initialFile)) {
- DoFileList(0, NULL, initialFile); //Will load Background values, if archive
+ DoFileList(0, "1", initialFile); //Will load Background values, if archive, leave
if (onStartup == 1)
LayoutBackGroundInit(TRUE); //Wipe Out Prior Background
else
LayoutBackGroundInit(FALSE); //Get Prior BackGround
- }
+ } else
+ LayoutBackGroundInit(TRUE); // If onStartup==1 and no initial file - Wipe Out Prior Background
+
}
+ MainRedraw();
inMainW = FALSE;
return mainW;
}