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.c2898
1 files changed, 569 insertions, 2329 deletions
diff --git a/app/bin/misc.c b/app/bin/misc.c
index 2ac1e2f..901b684 100644
--- a/app/bin/misc.c
+++ b/app/bin/misc.c
@@ -17,74 +17,29 @@
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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"
-#include "compound.h"
+
+#include "misc.h"
#include "cselect.h"
#include "cundo.h"
#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"
-
-#define DEFAULT_SCALE ("N")
+#include "common-ui.h"
-char *userLocale = NULL;
+#include <inttypes.h>
-extern wBalloonHelp_t balloonHelp[];
-
-static wMenuToggle_p mapShowMI;
-static wMenuToggle_p magnetsMI;
+#define DEFAULT_SCALE ("N")
-#ifdef DEBUG
-#define CHECK_BALLOONHELP
-/*#define CHECK_UNUSED_BALLOONHELP*/
-#endif
-#ifdef CHECK_UNUSED_BALLOONHELP
-static void ShowUnusedBalloonHelp(void);
-#endif
-void DoCarDlg(void);
/****************************************************************************
*
@@ -92,208 +47,262 @@ void DoCarDlg(void);
*
*/
-EXPORT int foobar = 0;
-
-EXPORT int log_error;
-static int log_command;
+EXPORT int iconSize = 0;
+EXPORT wWinPix_t displayWidth;
+EXPORT wWinPix_t displayHeight;
EXPORT wWin_p mainW;
-EXPORT wIndex_t changed = 0;
-
EXPORT char message[STR_HUGE_SIZE];
static char message2[STR_LONG_SIZE];
-EXPORT REGION_T curRegion = 0;
-
EXPORT long paramVersion = -1;
EXPORT coOrd zero = { 0.0, 0.0 };
EXPORT wBool_t extraButtons = FALSE;
-EXPORT long onStartup; /**< controls behaviour after startup: load last layout if zero, else start with blank canvas */
-
-EXPORT wButton_p undoB;
-EXPORT wButton_p redoB;
-
-EXPORT wButton_p zoomUpB;
-EXPORT wButton_p zoomDownB;
-wButton_p mapShowB;
-wButton_p magnetsB;
-wButton_p backgroundB;
-
-EXPORT wIndex_t checkPtMark = 0;
-
-EXPORT wMenu_p demoM;
-EXPORT wMenu_p popup1M, popup2M;
-EXPORT wMenu_p popup1aM, popup2aM;
-EXPORT wMenu_p popup1mM, popup2mM;
-
-static wIndex_t curCommand = 0;
-EXPORT void * commandContext;
-EXPORT wIndex_t cmdGroup;
-EXPORT wIndex_t joinCmdInx;
-EXPORT wIndex_t modifyCmdInx;
-EXPORT long rightClickMode = 0;
-EXPORT long selectMode = 0;
-EXPORT long selectZero = 1;
-EXPORT DIST_T easementVal = 0.0;
-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 long
+onStartup; /**< controls behaviour after startup: load last layout if zero, else start with blank canvas */
static int verbose = 0;
-static wMenuList_p winList_mi;
static BOOL_T inMainW = TRUE;
-static long stickySet = 0;
-static long stickyCnt = 0;
-static char * stickyLabels[33];
-#define TOOLBARSET_INIT (0xFFFF)
-EXPORT long toolbarSet = TOOLBARSET_INIT;
-EXPORT wPos_t toolbarHeight = 0;
-static wPos_t toolbarWidth = 0;
+EXPORT long units = 0; /**< measurement units: 0 = English, 1 = metric */
-static wMenuList_p messageList_ml;
-static BOOL_T messageListEmpty = TRUE;
-#define MESSAGE_LIST_EMPTY N_("No Messages")
+EXPORT long labelScale = 8;
+EXPORT long labelEnable = (LABELENABLE_ENDPT_ELEV|LABELENABLE_CARS);
+/** @prefs [draw] label-when=2 Unknown */
+EXPORT long labelWhen = 2;
-#define NUM_FILELIST (5)
-
-extern long curTurnoutEp;
-static wIndex_t printCmdInx;
-static wIndex_t gridCmdInx;
-static paramData_t menuPLs[101] = { { PD_LONG, &toolbarSet, "toolbarset" }, {
- PD_LONG, &curTurnoutEp, "cur-turnout-ep" } };
-static paramGroup_t menuPG = { "misc", PGO_RECORD, menuPLs, 2 };
+EXPORT long dontHideCursor = 0;
+#ifdef HIDESELECTIONWINDOW
+EXPORT long hideSelectionWindow = 0;
+#endif
-extern wBool_t wDrawDoTempDraw;
/****************************************************************************
*
- * LOCAL UTILITIES
+ * MEMORY ALLOCATION
*
*/
-EXPORT long totalMallocs = 0;
-EXPORT long totalMalloced = 0;
-EXPORT long totalRealloced = 0;
-EXPORT long totalReallocs = 0;
-EXPORT long totalFreeed = 0;
-EXPORT long totalFrees = 0;
+static size_t totalMallocs = 0;
+static size_t totalMalloced = 0;
+static size_t totalRealloced = 0;
+static size_t totalReallocs = 0;
+static size_t totalFreeed = 0;
+static 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;
+}
+
+/**
+ * Allocate memory
+ *
+ * Allocated memory has 'guard' values, before and after to detect overruns.
+ * Aborts on allocation failure.
+ *
+ * \param size IN amount of memory to allocate
+ *
+ * \return Pointer to allocated memory - never NULL
+ */
+
+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");
+ if ( p == NULL ) {
+ // We're hosed, get out of town
+ lprintf( "malloc(%ld) failed\n", size );
+ abort();
+ }
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) {
+/**
+ * Reallocate memory
+ *
+ * Allocated memory has 'guard' values, before and after to detect overruns.
+ * Aborts on allocation failure.
+ *
+ * \param old IN existing pointer to allocated memory
+ * \param size IN amount of memory to allocate
+ *
+ * \return Pointer to reallocated memory - never NULL
+ */
+
+EXPORT void * MyRealloc(void * old, size_t size)
+{
size_t oldSize;
void * new;
- if (old == NULL)
+ 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");
- }
+ CHECKMSG( (*(unsigned long*) ((char*) old - sizeof(unsigned long)) == guard0),
+ ("Guard0 is hosed") );
oldSize = *(size_t*) ((char*) old - sizeof(unsigned long) - sizeof(size_t));
- if (*(unsigned long*) ((char*) old + oldSize) != guard1) {
- AbortProg("Guard1 is hosed");
- }
- LOG1(log_malloc, ("Realloc(%lx,%ld) was %d\n", (long)old, size, oldSize ))
+ CHECKMSG( (*(unsigned long*) ((char*) old + oldSize) == guard1),
+ ( "Guard1 is hosed" ) );
+
+ LOG1(log_malloc, (" Realloc (" SLOG_FMT ",%ld) was %d\n", (size_t)old, size,
+ oldSize ))
+
if ((long) oldSize == size) {
return old;
}
- if (size == 0) {
- free((char*) old - sizeof *(long*) 0 - sizeof *(size_t*) 0);
- return NULL;
- }
new = MyMalloc(size);
- if (new == NULL && size)
- AbortProg("No memory");
memcpy(new, old, min((size_t )size, oldSize));
MyFree(old);
return new;
}
-EXPORT void MyFree(void * ptr) {
+EXPORT void MyFree(void * ptr)
+{
size_t oldSize;
totalFrees++;
- if (ptr) {
- if (*(unsigned long*) ((char*) ptr - sizeof(unsigned long)) != guard0) {
- AbortProg("Guard0 is hosed");
- }
- oldSize = *(size_t*) ((char*) ptr - sizeof(unsigned long)
- - sizeof(size_t));
- 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)))
- totalFreeed += oldSize;
- free((char*) ptr - sizeof *(long*) 0 - sizeof *(size_t*) 0);
+ if (ptr==NULL) {
+ return;
+ }
+ CHECKMSG( (*(unsigned long*) ((char*) ptr - sizeof(unsigned long)) == guard0),
+ ( "Guard0 is hosed") );
+ oldSize = *(size_t*) ((char*) ptr - sizeof(unsigned long)
+ - sizeof(size_t));
+ CHECKMSG( (*(unsigned long*) ((char*) ptr + oldSize) == guard1),
+ ( "Guard1 is hosed" ) );
+
+ LOG1(log_malloc,
+ (" Free %ld 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);
}
}
-EXPORT void * memdup(void * src, size_t size) {
+EXPORT void * memdup(void * src, size_t size)
+{
void * p;
p = MyMalloc(size);
- if (p == NULL)
- AbortProg("No memory");
memcpy(p, src, size);
return p;
}
-EXPORT char * MyStrdup(const char * str) {
+EXPORT char * MyStrdup(const char * str)
+{
char * ret;
ret = (char*) MyMalloc(strlen(str) + 1);
strcpy(ret, str);
return ret;
}
+
+/****************************************************************************
+ *
+ * CHARACTER CONVERSION
+ *
+ */
/*
* Convert Text into the equivalent form that can be written to a file or put in a text box by adding escape characters
*
@@ -303,7 +312,8 @@ EXPORT char * MyStrdup(const char * str) {
* "" for " This is so that a CSV conformant type program can interpret the file output
*
*/
-EXPORT char * ConvertToEscapedText(const char * text) {
+EXPORT char * ConvertToEscapedText(const char * text)
+{
int text_i = 0;
int add = 0; //extra chars for escape
while (text[text_i]) {
@@ -323,7 +333,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 +374,6 @@ EXPORT char * ConvertToEscapedText(const char * text) {
text_i++;
}
cout[cout_i] = '\0';
-#ifdef WINDOWS
- wSystemToUTF8(cout, cout, cnt);
-#endif // WINDOWS
return cout;
}
@@ -380,7 +387,8 @@ EXPORT char * ConvertToEscapedText(const char * text) {
* \\ = \ The way to still produce backslash
*
*/
-EXPORT char * ConvertFromEscapedText(const char * text) {
+EXPORT char * ConvertFromEscapedText(const char * text)
+{
enum {
CHARACTER, ESCAPE
} state = CHARACTER;
@@ -424,112 +432,136 @@ EXPORT char * ConvertFromEscapedText(const char * text) {
return cout;
}
-EXPORT void AbortProg(char * msg, ...) {
- static BOOL_T abort2 = FALSE;
- int rc;
+
+/****************************************************************************
+ *
+ * MESSAGES
+ *
+ */
+/**
+ * Print the message into internal buffer
+ *
+ * Called from CHECKMSG define
+ * \param sFormat IN printf-type format string
+ * \param ... IN vargs printf-type operands
+ *
+ * \return address of internal buffer containing formatted message
+ */
+EXPORT const char * AbortMessage(
+ const char * sFormat,
+ ... )
+{
+ static char sMessage[STR_SIZE];
+ if ( sFormat == NULL ) {
+ return "";
+ }
va_list ap;
- va_start(ap, msg);
- vsprintf(message, msg, ap);
+ va_start(ap, sFormat);
+ vsnprintf(sMessage, sizeof sMessage, sFormat, ap);
va_end(ap);
+ return sMessage;
+}
+
+/**
+ * Display error notice box
+ * Offer chance to save layout
+ * Abort the program
+ *
+ * Called from CHECK/CHECKMSG defines
+ *
+ * \param sCond IN string-ized error condition
+ * \param sFileName IN file name of fault
+ * \param iLineNumber IN line number of fault
+ * \param sMsg IN extra message with additional info
+ *
+ * \return No return
+ */
+EXPORT void AbortProg(
+ const char * sCond,
+ const char * sFileName,
+ int iLineNumber,
+ const char * sMsg )
+{
+ static BOOL_T abort2 = FALSE;
+ snprintf( message, sizeof message, "%s: %s:%d %s", sCond, sFileName,
+ iLineNumber, sMsg?sMsg:"" );
if (abort2) {
wNoticeEx( NT_ERROR, message, _("ABORT"), NULL);
} else {
+ abort2 = TRUE; // no 2nd chance
strcat(message, _("\nDo you want to save your layout?"));
- rc = wNoticeEx( NT_ERROR, message, _("Ok"), _("ABORT"));
+ int 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;
- while (*src && isspace((unsigned char) *src))
+EXPORT char * Strcpytrimed(char * dst, const char * src, BOOL_T double_quotes)
+{
+ const char * cp;
+ while (*src && isspace((unsigned char) *src)) {
src++;
- if (!*src)
+ }
+ if (!*src) {
return dst;
+ }
cp = src + strlen(src) - 1;
- while (cp > src && isspace((unsigned char) *cp))
+ while (cp > src && isspace((unsigned char) *cp)) {
cp--;
+ }
while (src <= cp) {
- if (*src == '"' && double_quotes)
+ if (*src == '"' && double_quotes) {
*dst++ = '"';
+ }
*dst++ = *src++;
}
*dst = '\0';
return dst;
}
+// ??? Referenced from gtklib.browserhelp.c ???
static char * directory;
-#ifdef WINDOWS
-#define F_OK (0)
-#endif
-
-EXPORT wBool_t CheckHelpTopicExists(const char * topic) {
+EXPORT wBool_t CheckHelpTopicExists(const char * topic)
+{
char * htmlFile;
- // Check the file exits in the distro
+ // Check the file exits in the distro
- if (!directory)
+ if (!directory) {
directory = malloc(BUFSIZ);
+ }
- if (directory == NULL) return 0;
-
- sprintf(directory, "%s/html/", wGetAppLibDir());
-
- htmlFile = malloc(strlen(directory)+strlen(topic) + 6);
+ if (directory == NULL) { return 0; }
- sprintf(htmlFile, "%s%s.html", directory, topic);
+ sprintf(directory, "%s/html/", wGetAppLibDir());
- if( access( htmlFile, F_OK ) == -1 ) {
+ htmlFile = malloc(strlen(directory)+strlen(topic) + 6);
- printf("Missing help topic %s\n",topic);
+ sprintf(htmlFile, "%s%s.html", directory, topic);
- free(htmlFile);
+ if( access( htmlFile, F_OK ) == -1 ) {
- return 0;
+ printf("Missing help topic %s\n",topic);
- }
+ free(htmlFile);
- free(htmlFile);
+ return 0;
- return 1;
+ }
-}
+ free(htmlFile);
-EXPORT char * BuildTrimedTitle(char * cp, char * sep, char * mfg, char * desc,
- char * partno) {
- cp = Strcpytrimed(cp, mfg, FALSE);
- strcpy(cp, sep);
- cp += strlen(cp);
- cp = Strcpytrimed(cp, desc, FALSE);
- strcpy(cp, sep);
- cp += strlen(cp);
- cp = Strcpytrimed(cp, partno, FALSE);
- return cp;
-}
+ return 1;
-static void ShowMessageHelp(int index, const char * label, void * data) {
- char msgKey[STR_SIZE], *cp, *msgSrc;
- msgSrc = (char*) data;
- if (!msgSrc)
- return;
- cp = strchr(msgSrc, '\t');
- if (cp == NULL) {
- sprintf(msgKey, _("No help for %s"), msgSrc);
- wNoticeEx( NT_INFORMATION, msgKey, _("Ok"), NULL);
- return;
- }
- memcpy(msgKey, msgSrc, cp - msgSrc);
- msgKey[cp - msgSrc] = 0;
- 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');
@@ -545,34 +577,33 @@ static char * ParseMessage(char *msgSrc) {
cp1++;
cp2 = cp1;
}
- if (messageListEmpty) {
- wMenuListDelete(messageList_ml, _(MESSAGE_LIST_EMPTY));
- messageListEmpty = FALSE;
- }
- wMenuListAdd(messageList_ml, 0, cp1, _(msgSrc));
+ MessageListAppend( cp1, _(msgSrc) );
return cp2;
} else {
return _(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)
+ if (inError) {
return;
+ }
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,61 +611,55 @@ 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)
+ 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();
-}
/*****************************************************************************
*
* MAIN BUTTON HANDLERS
*
*/
- /**
- * Confirm a requested operation in case of possible loss of changes.
- *
- * \param label2 IN operation to be cancelled, unused at the moment
- * \param after IN function to be executed on positive confirmation
- * \return true if proceed, false if cancel operation
- */
+/**
+ * Confirm a requested operation in case of possible loss of changes.
+ *
+ * \param label2 IN operation to be cancelled, unused at the moment
+ * \param after IN function to be executed on positive confirmation
+ * \return true if proceed, false if cancel operation
+ */
/** TODO: make sensible messages when requesting confirmation */
-bool
-Confirm(char * label2, doSaveCallBack_p after)
+EXPORT bool Confirm(char * label2, doSaveCallBack_p after)
{
int rc = -1;
if (changed) {
rc = wNotice3(_("Save changes to the layout design before closing?\n\n"
- "If you don't save now, your unsaved changes will be discarded."),
- _("&Save"), _("&Cancel"), _("&Don't Save"));
+ "If you don't save now, your unsaved changes will be discarded."),
+ _("&Save"), _("&Cancel"), _("&Don't Save"));
}
switch (rc) {
@@ -644,101 +669,32 @@ Confirm(char * label2, doSaveCallBack_p after)
case 0: /* cancel operation */
break;
case 1: /* save */
- LayoutBackGroundInit(FALSE);
- LayoutBackGroundSave();
+ //LayoutBackGroundInit(FALSE);
+ //LayoutBackGroundSave();
DoSave(after);
break;
}
return(rc != 0);
}
-static void ChkLoad(void) {
- Confirm(_("Load"), DoLoad);
-}
-
-static void ChkExamples( void )
-{
- Confirm(_("examples"), DoExamples);
-}
-
-static void ChkRevert(void)
-{
- int rc;
-
- if (changed) {
- rc = wNoticeEx(NT_WARNING,
- _("Do you want to return to the last saved state?\n\n"
- "Revert will cause all changes done since last save to be lost."),
- _("&Revert"), _("&Cancel"));
- if (rc) {
- /* load the file */
- char *filename = GetLayoutFullPath();
- LoadTracks(1, &filename, NULL);
- }
- }
-}
-
-static char * fileListPathName;
-static void AfterFileList(void) {
- DoFileList(0, NULL, fileListPathName);
-}
-
-static void ChkFileList(int index, const char * label, void * data) {
- fileListPathName = (char*) data;
- Confirm(_("Load"), AfterFileList);
-}
-
-/**
- * Save information about current files and some settings to preferences file.
- */
-
-EXPORT void SaveState(void) {
- wPos_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);
- SaveParamFileList();
- ParamUpdatePrefs();
-
- wPrefSetString( "misc", "lastlayout", GetLayoutFullPath());
- wPrefSetInteger( "misc", "lastlayoutexample", bExample );
-
- if (fileList_ml) {
- strcpy(file, "file");
- file[5] = 0;
- for (inx = 0; inx < NUM_FILELIST; inx++) {
- fileName = wMenuListGet(fileList_ml, inx, &pathName);
- if (fileName) {
- file[4] = '0' + inx;
- sprintf(message, "%s", (char* )pathName);
- wPrefSetString("filelist", file, message);
- }
- }
- }
- wPrefFlush();
- LogClose();
-}
/*
* Clean up before quitting
*/
-static void DoQuitAfter(void) {
+static void DoQuitAfter(void)
+{
changed = 0;
+ CleanupCheckpointFiles(); //Get rid of checkpoint if we quit.
+ CleanupTempArchive(); // removefiels used for archive handling
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) {
+EXPORT void DoQuit(void * unused)
+{
if (Confirm(_("Quit"), DoQuitAfter)) {
#ifdef CHECK_UNUSED_BALLOONHELP
@@ -749,12 +705,13 @@ void DoQuit(void) {
}
}
-static void DoClearAfter(void) {
+static void DoClearAfter(void)
+{
Reset();
ClearTracks();
+ ResetLayers(); // set all layers to their default properties and set current layer to 0
- /* set all layers to their default properties and set current layer to 0 */
DoLayout(NULL);
checkPtMark = changed = 0;
DoChangeNotification( CHANGE_MAIN|CHANGE_MAP );
@@ -765,7 +722,8 @@ static void DoClearAfter(void) {
LayoutBackGroundInit(TRUE);
}
-static void DoClear(void) {
+EXPORT void DoClear(void * unused)
+{
Confirm(_("Clear"), DoClearAfter);
}
@@ -773,7 +731,8 @@ static void DoClear(void) {
* Toggle visibility state of map window.
*/
-void MapWindowToggleShow(void) {
+EXPORT void MapWindowToggleShow(void * unused)
+{
MapWindowShow(!mapVisible);
}
@@ -783,7 +742,8 @@ void MapWindowToggleShow(void) {
* \param state IN TRUE if visible, FALSE if hidden
*/
-void MapWindowShow(int state) {
+EXPORT void MapWindowShow(int state)
+{
mapVisible = state;
wPrefSetInteger("misc", "mapVisible", mapVisible);
wMenuToggleSet(mapShowMI, mapVisible);
@@ -796,28 +756,9 @@ void MapWindowShow(int state) {
wButtonSetBusy(mapShowB, (wBool_t) mapVisible);
}
-/**
- * Set magnets state
- */
-int MagneticSnap(int state)
-{
- int oldState = magneticSnap;
- magneticSnap = state;
- wPrefSetInteger("misc", "magnets", magneticSnap);
- wMenuToggleSet(magnetsMI, magneticSnap);
- wButtonSetBusy(magnetsB, (wBool_t) magneticSnap);
- return oldState;
-}
-/**
- * Toggle magnets on/off
- */
-void MagneticSnapToggle(void) {
- MagneticSnap(!magneticSnap);
-}
-
-
-static void DoShowWindow(int index, const char * name, void * data) {
+EXPORT void DoShowWindow(int index, const char * name, void * data)
+{
if (data == mapW) {
if (mapVisible == FALSE) {
MapWindowShow( TRUE);
@@ -830,17 +771,20 @@ static void DoShowWindow(int index, const char * name, void * data) {
static dynArr_t demoWindows_da;
#define demoWindows(N) DYNARR_N( wWin_p, demoWindows_da, N )
-EXPORT void wShow(wWin_p win) {
+EXPORT void wShow(wWin_p win)
+{
int inx;
if (inPlayback && win != demoW) {
wWinSetBusy(win, TRUE);
for (inx = 0; inx < demoWindows_da.cnt; inx++)
- if ( demoWindows(inx) == win)
+ if ( demoWindows(inx) == win) {
break;
+ }
if (inx >= demoWindows_da.cnt) {
for (inx = 0; inx < demoWindows_da.cnt; inx++)
- if ( demoWindows(inx) == NULL)
+ if ( demoWindows(inx) == NULL) {
break;
+ }
if (inx >= demoWindows_da.cnt) {
DYNARR_APPEND(wWin_p, demoWindows_da, 10);
inx = demoWindows_da.cnt - 1;
@@ -848,38 +792,47 @@ EXPORT void wShow(wWin_p win) {
demoWindows(inx) = win;
}
}
- if (win != mainW)
+ if (win != mainW) {
wMenuListAdd(winList_mi, -1, wWinGetTitle(win), win);
+ }
wWinShow(win, TRUE);
}
-EXPORT void wHide(wWin_p win) {
+EXPORT void wHide(wWin_p win)
+{
int inx;
wWinShow(win, FALSE);
wWinSetBusy(win, FALSE);
- if (inMainW && win == aboutW)
+ 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)
+ if ( demoWindows(inx) == win) {
demoWindows(inx) = NULL;
+ }
}
-EXPORT void CloseDemoWindows(void) {
+EXPORT void CloseDemoWindows(void)
+{
int inx;
for (inx = 0; inx < demoWindows_da.cnt; inx++)
- if ( demoWindows(inx) != NULL)
+ if ( demoWindows(inx) != NULL) {
wHide(demoWindows(inx));
- demoWindows_da.cnt = 0;
+ }
+ DYNARR_RESET( wWin_p, demoWindows_da );
}
-EXPORT void DefaultProc(wWin_p win, winProcEvent e, void * data) {
+EXPORT void DefaultProc(wWin_p win, winProcEvent e, void * data)
+{
switch (e) {
case wClose_e:
wMenuListDelete(winList_mi, wWinGetTitle(win));
- if (data != NULL)
+ if (data != NULL) {
ConfirmReset( FALSE);
+ }
wWinDoCancel(win);
break;
default:
@@ -887,1885 +840,139 @@ EXPORT void DefaultProc(wWin_p win, winProcEvent e, void * data) {
}
}
-static void NextWindow(void) {
+static void NextWindow(void)
+{
}
-EXPORT void SelectFont(void) {
- wSelectFont(_("XTrackCAD Font"));
-}
+
/*****************************************************************************
*
- * COMMAND
+ * ACCEL KEYS
*
*/
-#define COMMAND_MAX (170)
-#define BUTTON_MAX (170)
-#define NUM_CMDMENUS (4)
-
-static struct {
- wControl_p control;
- wBool_t enabled;
- wPos_t x, y;
- long options;
- int group;
- wIndex_t cmdInx;
-} buttonList[BUTTON_MAX];
-static int buttonCnt = 0;
-
-static struct {
- procCommand_t cmdProc;
- char * helpKey;
- wIndex_t buttInx;
- char * labelStr;
- wIcon_p icon;
- int reqLevel;
- wBool_t enabled;
- long options;
- long stickyMask;
- long acclKey;
- wMenuPush_p menu[NUM_CMDMENUS];
- void * context;
-} commandList[COMMAND_MAX];
-static int commandCnt = 0;
-
-#ifdef CHECK_UNUSED_BALLOONHELP
-int * balloonHelpCnts;
-#endif
-
-EXPORT const char * GetBalloonHelpStr(char * helpKey) {
- wBalloonHelp_t * bh;
-#ifdef CHECK_UNUSED_BALLOONHELP
- if ( balloonHelpCnts == NULL ) {
- for ( bh=balloonHelp; bh->name; bh++ );
- balloonHelpCnts = (int*)malloc( (sizeof *(int*)0) * (bh-balloonHelp) );
- memset( balloonHelpCnts, 0, (sizeof *(int*)0) * (bh-balloonHelp) );
- }
-#endif
- for (bh = balloonHelp; bh->name; bh++) {
- if (strcmp(bh->name, helpKey) == 0) {
-#ifdef CHECK_UNUSED_BALLOONHELP
- balloonHelpCnts[(bh-balloonHelp)]++;
-#endif
- return _(bh->value);
- }
- }
-#ifdef CHECK_BALLOONHELP
- fprintf( stderr, _("No balloon help for %s\n"), helpKey );
+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
- return _("No Help");
-}
-
-#ifdef CHECK_UNUSED_BALLOONHELP
-static void ShowUnusedBalloonHelp( void )
+ { "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 cnt;
- for ( cnt=0; balloonHelp[cnt].name; cnt++ )
- if ( balloonHelpCnts[cnt] == 0 )
- fprintf( stderr, "unused BH %s\n", balloonHelp[cnt].name );
-}
-#endif
-
-EXPORT const char* GetCurCommandName() {
- return commandList[curCommand].helpKey;
-}
-
-EXPORT void EnableCommands(void) {
- int inx, minx;
- wBool_t enable;
-
- LOG(log_command, 5,
- ( "COMMAND enable S%d M%d\n", selectedTrackCount, programMode ))
- for (inx = 0; inx < commandCnt; inx++) {
- if (commandList[inx].buttInx) {
- if ((commandList[inx].options & IC_SELECTED)
- && selectedTrackCount <= 0)
- enable = FALSE;
- else if ((programMode == MODE_TRAIN
- && (commandList[inx].options
- & (IC_MODETRAIN_TOO | IC_MODETRAIN_ONLY)) == 0)
- || (programMode != MODE_TRAIN
- && (commandList[inx].options & IC_MODETRAIN_ONLY)
- != 0))
- enable = FALSE;
- else
- enable = TRUE;
- if (commandList[inx].enabled != enable) {
- if (commandList[inx].buttInx >= 0)
- wControlActive(buttonList[commandList[inx].buttInx].control,
- enable);
- for (minx = 0; minx < NUM_CMDMENUS; minx++)
- if (commandList[inx].menu[minx])
- wMenuPushEnable(commandList[inx].menu[minx], enable);
- commandList[inx].enabled = enable;
- }
- }
- }
-
- for (inx = 0; inx < menuPG.paramCnt; inx++) {
- if (menuPLs[inx].control == NULL)
- continue;
- if ((menuPLs[inx].option & IC_SELECTED) && selectedTrackCount <= 0)
- enable = FALSE;
- else if ((programMode == MODE_TRAIN
- && (menuPLs[inx].option & (IC_MODETRAIN_TOO | IC_MODETRAIN_ONLY))
- == 0)
- || (programMode != MODE_TRAIN
- && (menuPLs[inx].option & IC_MODETRAIN_ONLY) != 0))
- enable = FALSE;
- else
- enable = TRUE;
- wMenuPushEnable((wMenuPush_p) menuPLs[inx].control, enable);
- }
-
- for (inx = 0; inx < buttonCnt; inx++) {
- if (buttonList[inx].cmdInx < 0
- && (buttonList[inx].options & IC_SELECTED))
- wControlActive(buttonList[inx].control, selectedTrackCount > 0);
- }
-}
-
-EXPORT wIndex_t GetCurrentCommand() {
- return curCommand;
-}
-
-static wIndex_t autosave_count = 0;
-
-EXPORT void Reset(void) {
- if (recordF) {
- fprintf(recordF, "RESET\n");
- fflush(recordF);
- }
- LOG(log_command, 2,
- ( "COMMAND CANCEL %s\n", commandList[curCommand].helpKey ))
- commandList[curCommand].cmdProc( C_CANCEL, zero);
- if (commandList[curCommand].buttInx >= 0)
- wButtonSetBusy(
- (wButton_p) buttonList[commandList[curCommand].buttInx].control,
- FALSE);
- curCommand = (preSelect ? selectCmdInx : describeCmdInx);
- wSetCursor(mainD.d, preSelect ? defaultCursor : wCursorQuestion);
- commandContext = commandList[curCommand].context;
- if (commandList[curCommand].buttInx >= 0)
- wButtonSetBusy(
- (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;
- }
- }
-
-
-
- ClrAllTrkBits( TB_UNDRAWN );
- DoRedraw(); // Reset
- EnableCommands();
- ResetMouseState();
- LOG(log_command, 1,
- ( "COMMAND RESET %s\n", commandList[curCommand].helpKey ))
- (void) commandList[curCommand].cmdProc( C_START, zero);
-}
-
-static BOOL_T CheckClick(wAction_t *action, coOrd *pos, BOOL_T checkLeft,
- BOOL_T checkRight) {
- static long time0;
- static coOrd pos0;
- long time1;
- long timeDelta;
- DIST_T distDelta;
-
- switch (*action) {
- case C_LDOUBLE:
- if (!checkLeft)
- return TRUE;
- time0 = 0;
+ int iAccelKeyIndex = (int)VP2L(accelKeyIndexVP);
+ switch( aAccelKeys[iAccelKeyIndex].iAction ) {
+ case EA_ZOOMUP:
+ DoZoomUp( I2VP(aAccelKeys[iAccelKeyIndex].iContext) );
break;
- case C_DOWN:
- if (!checkLeft)
- return TRUE;
- time0 = wGetTimer() - adjTimer;
- pos0 = *pos;
- return FALSE;
- case C_MOVE:
- if (!checkLeft)
- return TRUE;
- if (time0 != 0) {
- time1 = wGetTimer() - adjTimer;
- timeDelta = time1 - time0;
- distDelta = FindDistance(*pos, pos0);
- if (timeDelta > dragTimeout || distDelta > dragDistance) {
- time0 = 0;
- *pos = pos0;
- *action = C_DOWN;
- } else {
- return FALSE;
- }
- }
+ case EA_ZOOMDOWN:
+ DoZoomDown( I2VP(aAccelKeys[iAccelKeyIndex].iContext) );
break;
- case C_UP:
- if (!checkLeft)
- return TRUE;
- if (time0 != 0) {
- time1 = wGetTimer() - adjTimer;
- timeDelta = time1 - time0;
- distDelta = FindDistance(*pos, pos0);
- time0 = 0;
- *action = C_LCLICK;
- }
+ case EA_REDRAW:
+ MainRedraw();
break;
- case C_RDOWN:
- if (!checkRight)
- return TRUE;
- time0 = wGetTimer() - adjTimer;
- pos0 = *pos;
- return FALSE;
- case C_RMOVE:
- if (!checkRight)
- return TRUE;
- if (time0 != 0) {
- time1 = wGetTimer() - adjTimer;
- timeDelta = time1 - time0;
- distDelta = FindDistance(*pos, pos0);
- if (timeDelta > dragTimeout || distDelta > dragDistance) {
- time0 = 0;
- *pos = pos0;
- *action = C_RDOWN;
- } else {
- return FALSE;
- }
- }
+ case EA_DELETE:
+ TrySelectDelete();
break;
- case C_RUP:
- if (!checkRight)
- return TRUE;
- if (time0 != 0) {
- time0 = 0;
- *action = C_RCLICK;
- }
+ case EA_UNDO:
+ UndoUndo(NULL);
break;
- }
- return TRUE;
-}
-
-EXPORT wBool_t DoCurCommand(wAction_t action, coOrd pos) {
- wAction_t rc;
- int mode;
- wBool_t bExit = FALSE;
-
- if (action == wActionMove) {
- if ((commandList[curCommand].options & IC_WANT_MOVE) == 0) {
- bExit = TRUE;
- }
- } else if ((action&0xFF) == wActionModKey) {
- if ((commandList[curCommand].options & IC_WANT_MODKEYS) == 0) {
- bExit = TRUE;
- }
- } else if (!CheckClick(&action, &pos,
- (int) (commandList[curCommand].options & IC_LCLICK), TRUE)) {
- bExit = TRUE;
- } else if (action == C_RCLICK
- && (commandList[curCommand].options & IC_RCLICK) == 0) {
- if (!inPlayback) {
- mode = MyGetKeyState();
- if ((mode & (~WKEY_SHIFT)) != 0) {
- wBeep();
- bExit = TRUE;
- } else if (((mode & WKEY_SHIFT) == 0) == (rightClickMode == 0)) {
- if (selectedTrackCount > 0) {
- if (commandList[curCommand].options & IC_CMDMENU) {
- }
- wMenuPopupShow(popup2M);
- } else {
- wMenuPopupShow(popup1M);
- }
- bExit = TRUE;
- } else if ((commandList[curCommand].options & IC_CMDMENU)) {
- cmdMenuPos = pos;
- action = C_CMDMENU;
- } else {
- wBeep();
- bExit = TRUE;
- }
- } else {
- bExit = TRUE;
- }
- }
- if ( bExit ) {
- TempRedraw(); // DoCurCommand: precommand
- return C_CONTINUE;
- }
-
- LOG(log_command, 2,
- ( "COMMAND MOUSE %s %d @ %0.3f %0.3f\n", commandList[curCommand].helpKey, (int)action, pos.x, pos.y ))
- rc = commandList[curCommand].cmdProc(action, pos);
- LOG(log_command, 4, ( " COMMAND returns %d\n", rc ))
- switch ( action & 0xFF ) {
- case wActionMove:
- case wActionModKey:
- case C_DOWN:
- case C_MOVE:
- case C_UP:
- case C_RDOWN:
- case C_RMOVE:
- case C_RUP:
- case C_LCLICK:
- case C_RCLICK:
- case C_TEXT:
- case C_OK:
- if (rc== C_TERMINATE) MainRedraw();
- else TempRedraw(); // DoCurCommand: postcommand
+ case EA_COPY:
+ EditCopy(NULL);
break;
- default:
+ case EA_PASTE:
+ EditPaste(NULL);
break;
- }
- if ((rc == C_TERMINATE || rc == C_INFO)
- && (commandList[curCommand].options & IC_STICKY)
- && (commandList[curCommand].stickyMask & stickySet)) {
- tempSegs_da.cnt = 0;
- UpdateAllElevations();
- if (commandList[curCommand].options & IC_NORESTART) {
- return C_CONTINUE;
- }
- LOG(log_command, 1,
- ( "COMMAND START %s\n", commandList[curCommand].helpKey ))
- rc = commandList[curCommand].cmdProc( C_START, pos);
- LOG(log_command, 4, ( " COMMAND returns %d\n", rc ))
- switch (rc) {
- case C_CONTINUE:
- break;
- case C_ERROR:
- Reset();
-#ifdef VERBOSE
- lprintf( "Start returns Error");
-#endif
- break;
- case C_TERMINATE:
- InfoMessage("");
- case C_INFO:
- Reset();
- break;
- }
- }
- return rc;
-}
-
-EXPORT void ConfirmReset(BOOL_T retry) {
- wAction_t rc;
- if (curCommand != describeCmdInx && curCommand != selectCmdInx) {
- LOG(log_command, 3,
- ( "COMMAND CONFIRM %s\n", commandList[curCommand].helpKey ))
- rc = commandList[curCommand].cmdProc( C_CONFIRM, zero);
- LOG(log_command, 4, ( " COMMAND returns %d\n", rc ))
- if (rc == C_ERROR) {
- if (retry)
- rc =
- wNotice3(
- _(
- "Cancelling the current command will undo the changes\n"
- "you are currently making. Do you want to update?"),
- _("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?"),
- _("Yes"), _("No"));
- if (rc == 1) {
- LOG(log_command, 3,
- ( "COMMAND OK %s\n", commandList[curCommand].helpKey ))
- commandList[curCommand].cmdProc( C_OK, zero);
- return;
- } else if (rc == -1) {
- return;
- }
- } else if (rc == C_TERMINATE) {
- return;
- }
- }
- if (retry) {
- /* because user pressed esc */
- SetAllTrackSelect( FALSE);
- }
- Reset();
- LOG(log_command, 1,
- ( "COMMAND RESET %s\n", commandList[curCommand].helpKey ))
- commandList[curCommand].cmdProc( C_START, zero);
-}
-
-EXPORT BOOL_T IsCurCommandSticky(void) {
- if ((commandList[curCommand].options & IC_STICKY) != 0
- && (commandList[curCommand].stickyMask & stickySet) != 0)
- return TRUE;
- return FALSE;
-}
-
-EXPORT void ResetIfNotSticky(void) {
- if ((commandList[curCommand].options & IC_STICKY) == 0
- || (commandList[curCommand].stickyMask & stickySet) == 0)
- Reset();
-}
-
-EXPORT void DoCommandB(void * data) {
- wIndex_t inx = (wIndex_t) (long) data;
- STATUS_T rc;
- static coOrd pos = { 0, 0 };
- static int inDoCommandB = FALSE;
- wIndex_t buttInx;
-
- if (inDoCommandB)
- return;
- inDoCommandB = TRUE;
-
- if (inx < 0 || inx >= commandCnt) {
- ASSERT(FALSE);
- inDoCommandB = FALSE;
- return;
- }
-
- if ((!inPlayback) && (!commandList[inx].enabled)) {
- ErrorMessage(MSG_COMMAND_DISABLED);
- inx = describeCmdInx;
- }
-
- InfoMessage("");
- if (curCommand != selectCmdInx) {
- LOG(log_command, 3,
- ( "COMMAND FINISH %s\n", commandList[curCommand].helpKey ))
- rc = commandList[curCommand].cmdProc( C_FINISH, zero);
- LOG(log_command, 3,
- ( "COMMAND CONFIRM %s\n", commandList[curCommand].helpKey ))
- rc = commandList[curCommand].cmdProc( C_CONFIRM, zero);
- LOG(log_command, 4, ( " COMMAND returns %d\n", rc ))
- if (rc == C_ERROR) {
- rc = wNotice3(
- _("Cancelling the current command will undo the changes\n"
- "you are currently making. Do you want to update?"),
- _("Yes"), _("No"), _("Cancel"));
- if (rc == 1)
- commandList[curCommand].cmdProc( C_OK, zero);
- else if (rc == -1) {
- inDoCommandB = FALSE;
- return;
- }
- }
- LOG(log_command, 3,
- ( "COMMAND CANCEL %s\n", commandList[curCommand].helpKey ))
- commandList[curCommand].cmdProc( C_CANCEL, pos);
- tempSegs_da.cnt = 0;
- }
- if (commandList[curCommand].buttInx >= 0)
- wButtonSetBusy(
- (wButton_p) buttonList[commandList[curCommand].buttInx].control,
- FALSE);
-
- if (recordF) {
- fprintf(recordF, "COMMAND %s\n", commandList[inx].helpKey + 3);
- fflush(recordF);
- }
-
- curCommand = inx;
- commandContext = commandList[curCommand].context;
- if ((buttInx = commandList[curCommand].buttInx) >= 0) {
- if (buttonList[buttInx].cmdInx != curCommand) {
- wButtonSetLabel((wButton_p) buttonList[buttInx].control,
- (char*) commandList[curCommand].icon);
- wControlSetHelp(buttonList[buttInx].control,
- GetBalloonHelpStr(commandList[curCommand].helpKey));
- wControlSetContext(buttonList[buttInx].control,
- (void*) (intptr_t) curCommand);
- buttonList[buttInx].cmdInx = curCommand;
- }
- wButtonSetBusy(
- (wButton_p) buttonList[commandList[curCommand].buttInx].control,
- TRUE);
- }
- LOG(log_command, 1,
- ( "COMMAND START %s\n", commandList[curCommand].helpKey ))
- rc = commandList[curCommand].cmdProc( C_START, pos);
- LOG(log_command, 4, ( " COMMAND returns %d\n", rc ))
- TempRedraw(); // DoCommandB
- switch (rc) {
- case C_CONTINUE:
+ case EA_CUT:
+ EditCut(NULL);
break;
- case C_ERROR:
- Reset();
-#ifdef VERBOSE
- lprintf( "Start returns Error");
-#endif
+ case EA_NEXT:
+ NextWindow();
break;
- case C_TERMINATE:
- case C_INFO:
- if (rc == C_TERMINATE)
- InfoMessage("");
- Reset();
+ case EA_HELP:
+ wDoAccelHelp(key, I2VP(aAccelKeys[iAccelKeyIndex].iContext));
break;
+ default:
+ CHECK(FALSE);
}
- inDoCommandB = FALSE;
}
-static void DoCommandBIndirect(void * cmdInxP) {
- wIndex_t cmdInx;
- cmdInx = *(wIndex_t*) cmdInxP;
- DoCommandB((void*) (intptr_t) cmdInx);
-}
-
-EXPORT void LayoutSetPos(wIndex_t inx) {
- wPos_t w, h, offset;
- static wPos_t toolbarRowHeight = 0;
- static wPos_t width;
- static int lastGroup;
- static wPos_t gap;
- static int layerButtCnt;
- int currGroup;
-
- if (inx == 0) {
- lastGroup = 0;
- wWinGetSize(mainW, &width, &h);
- gap = 5;
- toolbarWidth = width - 20 + 5;
- layerButtCnt = 0;
- toolbarHeight = 0;
- }
-
- if (buttonList[inx].control) {
- if (toolbarRowHeight <= 0)
- toolbarRowHeight = wControlGetHeight(buttonList[inx].control);
-
- currGroup = buttonList[inx].group & ~BG_BIGGAP;
- if (currGroup != lastGroup && (buttonList[inx].group & BG_BIGGAP)) {
- gap = 15;
- }
- if ((toolbarSet & (1 << currGroup))
- && (programMode != MODE_TRAIN
- || (buttonList[inx].options
- & (IC_MODETRAIN_TOO | IC_MODETRAIN_ONLY)))
- && (programMode == MODE_TRAIN
- || (buttonList[inx].options & IC_MODETRAIN_ONLY) == 0)
- && ((buttonList[inx].group & ~BG_BIGGAP) != BG_LAYER
- || layerButtCnt++ <= layerCount)) {
- if (currGroup != lastGroup) {
- toolbarWidth += gap;
- lastGroup = currGroup;
- gap = 5;
- }
- w = wControlGetWidth(buttonList[inx].control);
- h = wControlGetHeight(buttonList[inx].control);
- if (h<toolbarRowHeight) {
- offset = (h-toolbarRowHeight)/2;
- h = toolbarRowHeight; //Uniform
- } else offset = 0;
- if (inx < buttonCnt - 1 && (buttonList[inx + 1].options & IC_ABUT))
- w += wControlGetWidth(buttonList[inx + 1].control);
- if (toolbarWidth + w > width - 20) {
- toolbarWidth = 0;
- toolbarHeight += h + 5;
- }
- 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);
- } else {
- wControlShow(buttonList[inx].control, FALSE);
- }
- }
-}
+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"
+ };
-EXPORT void LayoutToolBar( void * data )
+static void SetAccelKeys()
{
- int inx;
-
- for (inx = 0; inx < buttonCnt; inx++) {
- LayoutSetPos(inx);
- }
- if (toolbarSet&(1<<BG_HOTBAR)) {
- LayoutHotBar(data);
- } else {
- HideHotBar();
- }
-}
-
-static void ToolbarChange(long changes) {
- if ((changes & CHANGE_TOOLBAR)) {
- /*if ( !(changes&CHANGE_MAIN) )*/
- MainProc( mainW, wResize_e, NULL, NULL );
- /*else
- LayoutToolBar();*/
- }
-}
-
-/***************************************************************************
- *
- *
- *
- */
-
-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,
- void * context) {
- if (commandCnt >= COMMAND_MAX - 1) {
- AbortProg("addCommand: too many commands");
- }
- commandList[commandCnt].labelStr = MyStrdup(nameStr);
- commandList[commandCnt].helpKey = MyStrdup(helpKey);
- commandList[commandCnt].cmdProc = cmdProc;
- commandList[commandCnt].icon = icon;
- commandList[commandCnt].reqLevel = reqLevel;
- commandList[commandCnt].enabled = TRUE;
- commandList[commandCnt].options = options;
- commandList[commandCnt].acclKey = acclKey;
- commandList[commandCnt].context = context;
- commandList[commandCnt].buttInx = -1;
- commandList[commandCnt].menu[0] = NULL;
- commandList[commandCnt].menu[1] = NULL;
- commandList[commandCnt].menu[2] = NULL;
- commandList[commandCnt].menu[3] = NULL;
- commandCnt++;
- return commandCnt - 1;
-}
-
-EXPORT void AddToolbarControl(wControl_p control, long options) {
- if (buttonCnt >= COMMAND_MAX - 1) {
- AbortProg("addToolbarControl: too many buttons");
- }
- buttonList[buttonCnt].enabled = TRUE;
- buttonList[buttonCnt].options = options;
- buttonList[buttonCnt].group = cmdGroup;
- buttonList[buttonCnt].x = 0;
- buttonList[buttonCnt].y = 0;
- buttonList[buttonCnt].control = control;
- buttonList[buttonCnt].cmdInx = -1;
- LayoutSetPos(buttonCnt);
- buttonCnt++;
-}
-
-EXPORT wButton_p AddToolbarButton(char * helpStr, wIcon_p icon, long options,
- wButtonCallBack_p action, void * context) {
- wButton_p bb;
- wIndex_t inx;
-
- GetBalloonHelpStr(helpStr);
- if (context == NULL) {
- for (inx = 0; inx < menuPG.paramCnt; inx++) {
- if (action != DoCommandB && menuPLs[inx].valueP == (void*) action) {
- context = &menuPLs[inx];
- action = ParamMenuPush;
- menuPLs[inx].context = (void*) (intptr_t) buttonCnt;
- menuPLs[inx].option |= IC_PLAYBACK_PUSH;
- break;
- }
- }
- }
- bb = wButtonCreate(mainW, 0, 0, helpStr, (char*) icon,
- BO_ICON/*|((options&IC_CANCEL)?BB_CANCEL:0)*/, 0, action, context);
- AddToolbarControl((wControl_p) bb, options);
- return bb;
-}
-
-EXPORT void PlaybackButtonMouse(wIndex_t buttInx) {
- wPos_t cmdX, cmdY;
-
- if (buttInx < 0 || buttInx >= buttonCnt)
- return;
- if (buttonList[buttInx].control == NULL)
- return;
- 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);
- if (playbackTimer == 0) {
- wButtonSetBusy((wButton_p) buttonList[buttInx].control, TRUE);
- wFlush();
- wPause(500);
- wButtonSetBusy((wButton_p) buttonList[buttInx].control, FALSE);
- wFlush();
- }
-}
-
-#include "bitmaps/openbutt.xpm"
-static char * buttonGroupMenuTitle;
-static char * buttonGroupHelpKey;
-static char * buttonGroupStickyLabel;
-static wMenu_p buttonGroupPopupM;
-
-EXPORT void ButtonGroupBegin(char * menuTitle, char * helpKey,
- char * stickyLabel) {
- buttonGroupMenuTitle = menuTitle;
- buttonGroupHelpKey = helpKey;
- buttonGroupStickyLabel = stickyLabel;
- buttonGroupPopupM = NULL;
-}
-
-EXPORT void ButtonGroupEnd(void) {
- buttonGroupMenuTitle = NULL;
- buttonGroupHelpKey = NULL;
- buttonGroupPopupM = NULL;
-}
-
-EXPORT wIndex_t AddMenuButton(wMenu_p menu, procCommand_t command,
- char * helpKey, char * nameStr, wIcon_p icon, int reqLevel,
- long options, long acclKey, void * context) {
- wIndex_t buttInx = -1;
- wIndex_t cmdInx;
- BOOL_T newButtonGroup = FALSE;
- wMenu_p tm, p1m, p2m;
- static wIcon_p openbuttIcon = NULL;
- static wMenu_p commandsSubmenu;
- static wMenu_p popup1Submenu;
- static wMenu_p popup2Submenu;
-
- if (icon) {
- if (buttonGroupPopupM != NULL) {
- buttInx = buttonCnt - 2;
- } else {
- buttInx = buttonCnt;
- AddToolbarButton(helpKey, icon, options,
- (wButtonCallBack_p) DoCommandB,
- (void*) (intptr_t) commandCnt);
- buttonList[buttInx].cmdInx = commandCnt;
- }
- if (buttonGroupMenuTitle != NULL && buttonGroupPopupM == NULL) {
- if (openbuttIcon == NULL)
- openbuttIcon = wIconCreatePixMap(openbutt_xpm);
- buttonGroupPopupM = wMenuPopupCreate(mainW, buttonGroupMenuTitle);
- AddToolbarButton(buttonGroupHelpKey, openbuttIcon, IC_ABUT,
- (wButtonCallBack_p) wMenuPopupShow,
- (void*) buttonGroupPopupM);
- newButtonGroup = TRUE;
- commandsSubmenu = wMenuMenuCreate(menu, "", buttonGroupMenuTitle);
- if (options & IC_POPUP2) {
- popup1Submenu = wMenuMenuCreate(popup1aM, "", buttonGroupMenuTitle);
- popup2Submenu = wMenuMenuCreate(popup2aM, "", buttonGroupMenuTitle);
- } else if (options & IC_POPUP3) {
- popup1Submenu= wMenuMenuCreate(popup1mM, "", buttonGroupMenuTitle);
- popup2Submenu = wMenuMenuCreate(popup2mM, "", buttonGroupMenuTitle);
-
- } else {
- popup1Submenu = wMenuMenuCreate(popup1M, "", buttonGroupMenuTitle);
- popup2Submenu = wMenuMenuCreate(popup2M, "", buttonGroupMenuTitle);
- }
- }
- }
- cmdInx = AddCommand(command, helpKey, nameStr, icon, reqLevel, options,
- acclKey, context);
- commandList[cmdInx].buttInx = buttInx;
- if (nameStr[0] == '\0')
- return cmdInx;
- if (commandList[cmdInx].options & IC_STICKY) {
- if (buttonGroupPopupM == NULL || newButtonGroup) {
- if (stickyCnt > 32)
- AbortProg("stickyCnt>32");
- stickyCnt++;
- }
- if (buttonGroupPopupM == NULL) {
- stickyLabels[stickyCnt - 1] = nameStr;
- } else {
- stickyLabels[stickyCnt - 1] = buttonGroupStickyLabel;
- }
- stickyLabels[stickyCnt] = NULL;
- long stickyMask = 1L<<(stickyCnt-1);
- commandList[cmdInx].stickyMask = stickyMask;
- if ( ( commandList[cmdInx].options & IC_INITNOTSTICKY ) == 0 )
- stickySet |= stickyMask;
- }
- if (buttonGroupPopupM) {
- commandList[cmdInx].menu[0] = wMenuPushCreate(buttonGroupPopupM,
- helpKey, GetBalloonHelpStr(helpKey), 0, DoCommandB,
- (void*) (intptr_t) cmdInx);
- tm = commandsSubmenu;
- p1m = popup1Submenu;
- p2m = popup2Submenu;
- } else {
- tm = menu;
- p1m = (options & IC_POPUP2) ? popup1aM : (options & IC_POPUP3) ? popup1mM : popup1M;
- p2m = (options & IC_POPUP2) ? popup2aM : (options & IC_POPUP3) ? popup2mM : popup2M;
- }
- commandList[cmdInx].menu[1] = wMenuPushCreate(tm, helpKey, nameStr, acclKey,
- DoCommandB, (void*) (intptr_t) 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);
- }
- commandList[cmdInx].menu[3] = wMenuPushCreate(p2m, helpKey, nameStr, 0,
- DoCommandB, (void*) (intptr_t) cmdInx);
- }
-
- return cmdInx;
-}
-
-EXPORT wIndex_t InitCommand(wMenu_p menu, procCommand_t command, char * nameStr,
- char * bits, int reqLevel, long options, long acclKey) {
- char helpKey[STR_SHORT_SIZE];
- wIcon_p icon = NULL;
- if (bits)
- icon = wIconCreateBitMap(16, 16, bits, wDrawColorBlack);
- strcpy(helpKey, "cmd");
- strcat(helpKey, nameStr);
- return AddMenuButton(menu, command, helpKey, _(nameStr), icon, reqLevel,
- options, acclKey, NULL);
-}
-
-/*--------------------------------------------------------------------*/
-
-EXPORT void PlaybackCommand(char * line, wIndex_t lineNum) {
- wIndex_t inx;
- wIndex_t buttInx;
- int len1, len2;
- len1 = strlen(line + 8);
- for (inx = 0; inx < commandCnt; inx++) {
- len2 = strlen(commandList[inx].helpKey + 3);
- if (len1 == len2
- && strncmp(line + 8, commandList[inx].helpKey + 3, len2) == 0) {
- break;
- }
- }
- if (inx >= commandCnt) {
- fprintf(stderr, "Unknown playback COMMAND command %d : %s\n", lineNum,
- line);
- } else {
- wPos_t cmdX, cmdY;
- 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);
- }
- if (strcmp(line + 8, "Undo") == 0) {
- if (buttInx > 0 && playbackTimer == 0) {
- wButtonSetBusy((wButton_p) buttonList[buttInx].control, TRUE);
- wFlush();
- wPause(500);
- wButtonSetBusy((wButton_p) buttonList[buttInx].control, FALSE);
- wFlush();
- }
- UndoUndo();
- } else if (strcmp(line + 8, "Redo") == 0) {
- if (buttInx >= 0 && playbackTimer == 0) {
- wButtonSetBusy((wButton_p) buttonList[buttInx].control, TRUE);
- wFlush();
- wPause(500);
- wButtonSetBusy((wButton_p) buttonList[buttInx].control, FALSE);
- wFlush();
+ 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;
}
- UndoRedo();
- } else {
- if (buttInx >= 0 && playbackTimer == 0) {
- wButtonSetBusy((wButton_p) buttonList[buttInx].control, TRUE);
- wFlush();
- wPause(500);
- wButtonSetBusy((wButton_p) buttonList[buttInx].control, FALSE);
- wFlush();
+ for (int inx = 0; inx < COUNT( accelKeyNames ); inx++) {
+ if (strcmp(sPrefValue, accelKeyNames[inx]) == 0) {
+ eKey = inx + 1;
+ iMode = iMode1;
+ break;
+ }
}
- DoCommandB((void*) (intptr_t) inx);
- }
- }
-}
-
-/*--------------------------------------------------------------------*/
-typedef struct {
- char * label;
- wMenu_p menu;
-} menuTrace_t, *menuTrace_p;
-static dynArr_t menuTrace_da;
-#define menuTrace(N) DYNARR_N( menuTrace_t, menuTrace_da, N )
-
-static void DoMenuTrace(wMenu_p menu, const char * label, void * data) {
- /*printf( "MENUTRACE: %s/%s\n", (char*)data, label );*/
- if (recordF) {
- fprintf(recordF, "MOUSE 1 %0.3f %0.3f\n", oldMarker.x, oldMarker.y);
- fprintf(recordF, "MENU %0.3f %0.3f \"%s\" \"%s\"\n", oldMarker.x,
- oldMarker.y, (char*) data, label);
- }
-}
-
-EXPORT wMenu_p MenuRegister(char * label) {
- wMenu_p m;
- menuTrace_p mt;
- m = wMenuPopupCreate(mainW, label);
- DYNARR_APPEND(menuTrace_t, menuTrace_da, 10);
- mt = &menuTrace(menuTrace_da.cnt - 1);
- mt->label = strdup(label);
- mt->menu = m;
- wMenuSetTraceCallBack(m, DoMenuTrace, mt->label);
- return m;
-}
-
-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);
- oldMarker = cmdMenuPos = pos;
- wMenuAction(mt->menu, _(itemName));
- return;
}
+ wAttachAccelKey(eKey, iMode, AccelKeyDispatch, I2VP(iAccelKey));
}
- AbortProg("menuPlayback: %s not found", menuName);
-}
-/*--------------------------------------------------------------------*/
-
-static wWin_p stickyW;
-
-static void StickyOk(void *);
-static paramData_t stickyPLs[] = { { PD_TOGGLE, &stickySet, "set", 0,
- stickyLabels } };
-static paramGroup_t stickyPG = { "sticky", PGO_RECORD, stickyPLs,
- sizeof stickyPLs / sizeof stickyPLs[0] };
-
-static void StickyOk(void * junk) {
- wHide(stickyW);
-}
-
-static void DoSticky(void) {
- if (!stickyW)
- stickyW = ParamCreateDialog(&stickyPG,
- MakeWindowTitle(_("Sticky Commands")), _("Ok"), StickyOk, wHide,
- TRUE, NULL, 0, NULL);
- ParamLoadControls(&stickyPG);
- wShow(stickyW);
-}
-/*--------------------------------------------------------------------*/
-
-/*
- * These array control the choices available in the Toolbar setup.
- * For each choice, the text is given and the respective mask is
- * 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"),
-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;
- if (set)
- toolbarSet |= mask;
- else
- toolbarSet &= ~mask;
- wPrefSetInteger( "misc", "toolbarset", toolbarSet );
- MainProc( mainW, wResize_e, NULL, NULL );
- if (recordF)
- fprintf(recordF, "PARAMETER %s %s %ld", "misc", "toolbarset",
- toolbarSet);
-}
-
-/**
- * Create the Toolbar configuration submenu. Based on two arrays of descriptions and
- * masks, the toolbar submenu is created dynamically.
- *
- * \param toolbarM IN menu to which the toogles will be added
- */
-
-static void CreateToolbarM(wMenu_p toolbarM) {
- int inx, cnt;
- long *masks;
- char **labels;
- wBool_t set;
-
- cnt = sizeof(AllToolbarMasks) / sizeof(AllToolbarMasks[0]);
- 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);
- }
-}
-
-/*--------------------------------------------------------------------*/
-
-static wWin_p addElevW;
-#define addElevF (wFloat_p)addElevPD.control
-EXPORT DIST_T addElevValueV;
-static void DoAddElev(void *);
-
-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] };
-
-static void DoAddElev(void * junk) {
- ParamLoadData(&addElevPG);
- AddElevations(addElevValueV);
- wHide(addElevW);
-}
-
-static void ShowAddElevations(void) {
- if (selectedTrackCount <= 0) {
- ErrorMessage(MSG_NO_SELECTED_TRK);
- return;
- }
- if (addElevW == NULL)
- addElevW = ParamCreateDialog(&addElevPG,
- MakeWindowTitle(_("Change Elevations")), _("Change"), DoAddElev,
- wHide, FALSE, NULL, 0, NULL);
- wShow(addElevW);
-}
-
-/*--------------------------------------------------------------------*/
-
-static wWin_p rotateW;
-static wWin_p moveW;
-static double rotateValue;
-static coOrd moveValue;
-static rotateDialogCallBack_t rotateDialogCallBack;
-static moveDialogCallBack_t moveDialogCallBack;
-
-static void RotateEnterOk(void *);
-
-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 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) {
- if (rotateW == NULL)
- rotateW = ParamCreateDialog(&rotatePG, MakeWindowTitle(_("Rotate")),
- _("Ok"), RotateEnterOk, wHide, FALSE, NULL, 0, NULL);
- ParamLoadControls(&rotatePG);
- rotateDialogCallBack = func;
- wShow(rotateW);
-}
-
-EXPORT void StartMoveDialog(moveDialogCallBack_t func) {
- if (moveW == NULL)
- moveW = ParamCreateDialog(&movePG, MakeWindowTitle(_("Move")), _("Ok"),
- MoveEnterOk, wHide, FALSE, NULL, 0, NULL);
- ParamLoadControls(&movePG);
- moveDialogCallBack = func;
- moveValue = zero;
- wShow(moveW);
-}
-
-static void MoveEnterOk(void * junk) {
- ParamLoadData(&movePG);
- moveDialogCallBack((void*) &moveValue);
- wHide(moveW);
-}
-
-static void RotateEnterOk(void * junk) {
- ParamLoadData(&rotatePG);
- if (angleSystem == ANGLE_POLAR)
- rotateDialogCallBack((void*) (long)(rotateValue*1000));
- else
- rotateDialogCallBack((void*) (long)(-rotateValue*1000));
- wHide(rotateW);
-}
-
-static void RotateDialogInit(void) {
- ParamRegister(&rotatePG);
}
-static void MoveDialogInit(void) {
- ParamRegister(&movePG);
-}
-EXPORT void AddMoveMenu(wMenu_p m, moveDialogCallBack_t func) {
- wMenuPushCreate(m, "", _("Enter Move ..."), 0,
- (wMenuCallBack_p) StartMoveDialog, (void*) func);
-}
+//EXPORT void InitCmdEnumerate(void) {
+// AddToolbarButton("cmdEnumerate", wIconCreatePixMap(partlist_xpm),
+// IC_SELECTED | IC_ACCLKEY, EnumerateTracks,
+// NULL);
+//}
-//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, "", _("Enter Angle ..."), 0,
- (wMenuCallBack_p) StartRotateDialog, (void*) func);
-}
-/*****************************************************************************
+
+/****************************************************************************
*
- * INITIALIZATON
+ * WMAIN
*
*/
-static wWin_p debugW;
-
-static int debugCnt = 0;
-static paramIntegerRange_t r0_100 = { 0, 100, 80 };
-static void DebugOk(void * junk);
-static paramData_t debugPLs[30];
-static long debug_values[30];
-static int debug_index[30];
-
-static paramGroup_t debugPG = { "debug", 0, debugPLs, 0 };
-
-static void DebugOk(void * junk) {
- for (int i = 0; i<debugCnt;i++) {
- logTable(debug_index[i]).level = debug_values[i];
- }
- wHide(debugW);
-}
-
-static void CreateDebugW(void) {
- debugPG.paramCnt = debugCnt;
- ParamRegister(&debugPG);
- debugW = ParamCreateDialog(&debugPG, MakeWindowTitle(_("Debug")), _("Ok"),
- DebugOk, wHide, FALSE, NULL, 0, NULL);
- wHide(debugW);
-}
-
-EXPORT void DebugInit(void) {
-
- if (!debugW) {
- BOOL_T default_line = FALSE;
- debugCnt = 0; //Reset to start building the dynamic dialog over again
- int i = 0;
- for ( int inx=0; inx<logTable_da.cnt; inx++ ) {
- if (logTable(inx).name[0]) {
- debug_values[i] = logTable(inx).level;
- debug_index[i] = inx;
- InitDebug(logTable(inx).name,&debug_values[i]);
- i++;
- } else {
- if (!default_line) {
- debug_values[i] = logTable(inx).level;
- debug_index[i] = inx;
- InitDebug("Default Trace",&debug_values[i]);
- i++;
- default_line = TRUE;
- }
- }
- }
- //ParamCreateControls( &debugPG, NULL );
- CreateDebugW();
- }
- ParamLoadControls( &debugPG );
- wShow(debugW);
-}
-
-
-EXPORT void InitDebug(char * label, long * valueP) {
- if (debugCnt >= sizeof debugPLs / sizeof debugPLs[0])
- 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;
- debugCnt++;
-}
-
-void RecomputeElevations(void);
-
-static void MiscMenuItemCreate(wMenu_p m1, wMenu_p m2, char * name,
- char * label, long acclKey, void * func, long option, void * context) {
- wMenuPush_p mp;
- mp = wMenuPushCreate(m1, name, label, acclKey, ParamMenuPush,
- &menuPLs[menuPG.paramCnt]);
- if (m2)
- wMenuPushCreate(m2, name, label, acclKey, ParamMenuPush,
- &menuPLs[menuPG.paramCnt]);
- menuPLs[menuPG.paramCnt].control = (wControl_p) mp;
- menuPLs[menuPG.paramCnt].type = PD_MENUITEM;
- menuPLs[menuPG.paramCnt].valueP = func;
- menuPLs[menuPG.paramCnt].nameStr = name;
- menuPLs[menuPG.paramCnt].option = option;
- menuPLs[menuPG.paramCnt].context = context;
-
- if (name)
- GetBalloonHelpStr(name);
- menuPG.paramCnt++;
-}
-
-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:
- ;
- }
- prefValue += 2;
- }
- for (inx = 0; inx < sizeof accelKeyNames / sizeof accelKeyNames[0];
- inx++) {
- if (strcmp(prefValue, accelKeyNames[inx]) == 0) {
- key = inx + 1;
- mode = mode1;
- break;
- }
- }
- }
- 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"
-#include "bitmaps/map.xpm"
-#include "bitmaps/magnet.xpm"
-
-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;
-
- fileM = wMenuBarAdd(mainW, "menuFile", _("&File"));
- editM = wMenuBarAdd(mainW, "menuEdit", _("&Edit"));
- viewM = wMenuBarAdd(mainW, "menuView", _("&View"));
- addM = wMenuBarAdd(mainW, "menuAdd", _("&Add"));
- changeM = wMenuBarAdd(mainW, "menuChange", _("&Change"));
- drawM = wMenuBarAdd(mainW, "menuDraw", _("&Draw"));
- manageM = wMenuBarAdd(mainW, "menuManage", _("&Manage"));
- optionM = wMenuBarAdd(mainW, "menuOption", _("&Options"));
- macroM = wMenuBarAdd(mainW, "menuMacro", _("&Macro"));
- windowM = wMenuBarAdd(mainW, "menuWindow", _("&Window"));
- helpM = wMenuBarAdd(mainW, "menuHelp", _("&Help"));
-
- /*
- * POPUP MENUS
- */
- /* Select Commands */
- /* Select All */
- /* Select All Current */
-
- /* Common View Commands Menu */
- /* Zoom In/Out */
- /* Snap Grid Menu */
- /* Show/Hide Map */
- /* Show/Hide Background */
-
- /* Selected Commands */
- /*--------------*/
- /* DeSelect All */
- /* Select All */
- /* Select All Current */
- /*--------------*/
- /* Quick Move */
- /* Quick Rotate */
- /* Quick Align */
- /*--------------*/
- /* Move To Current Layer */
- /* Move/Rotate Cmds */
- /* Cut/Paste/Delete */
- /* Group/Un-group Selected */
- /*----------*/
- /* Thick/Thin */
- /* Bridge/Tunnel */
- /* Ties/NoTies */
- /*-----------*/
- /* More Commands */
-
- popup1M = wMenuPopupCreate(mainW, _("Context Commands"));
- popup2M = wMenuPopupCreate(mainW, _("Shift Context Commands"));
- MiscMenuItemCreate(popup1M, popup2M, "cmdUndo", _("Undo"), 0,
- (void*) (wMenuCallBack_p) UndoUndo, 0, (void *) 0);
- MiscMenuItemCreate(popup1M, popup2M, "cmdRedo", _("Redo"), 0,
- (void*) (wMenuCallBack_p) UndoRedo, 0, (void *) 0);
- /* Zoom */
- wMenuPushCreate(popup1M, "cmdZoomIn", _("Zoom In"), 0,
- (wMenuCallBack_p) DoZoomUp, (void*) 1);
- wMenuPushCreate(popup2M, "cmdZoomIn", _("Zoom In"), 0,
- (wMenuCallBack_p) DoZoomUp, (void*) 1);
- wMenuPushCreate(popup1M, "cmdZoomOut", _("Zoom Out"), 0,
- (wMenuCallBack_p) DoZoomDown, (void*) 1);
- wMenuPushCreate(popup2M, "cmdZoomOut", _("Zoom Out"), 0,
- (wMenuCallBack_p) DoZoomDown, (void*) 1);
- /* Display */
- MiscMenuItemCreate(popup1M, popup2M, "cmdGridEnable", _("Enable SnapGrid"),
- 0, (void*) (wMenuCallBack_p) SnapGridEnable, 0, (void *) 0);
- MiscMenuItemCreate(popup1M, popup2M, "cmdGridShow", _("SnapGrid Show"), 0,
- (void*) (wMenuCallBack_p) SnapGridShow, 0, (void *) 0);
- MiscMenuItemCreate(popup1M, popup2M, "cmdMagneticSnap", _(" Enable Magnetic Snap"), 0,
- (void*) (wMenuCallBack_p) MagneticSnapToggle, 0, (void *) 0);
- MiscMenuItemCreate(popup1M, popup2M, "cmdMapShow", _("Show/Hide Map"), 0,
- (void*) (wMenuCallBack_p) MapWindowToggleShow, 0, (void *) 0);
- MiscMenuItemCreate(popup1M, popup2M, "cmdBackgroundShow", _("Show/Hide Background"), 0,
- (void*) (wMenuCallBack_p) BackgroundToggleShow, 0, (void *) 0);
- wMenuSeparatorCreate(popup1M);
- wMenuSeparatorCreate(popup2M);
- /* Copy/Paste */
- MiscMenuItemCreate(popup2M, NULL, "cmdCut", _("Cut"), 0,
- (void*) (wMenuCallBack_p) EditCut, 0, (void *) 0);
- MiscMenuItemCreate(popup2M, NULL, "cmdCopy", _("Copy"), 0,
- (void*) (wMenuCallBack_p) EditCopy, 0, (void *) 0);
- MiscMenuItemCreate(popup1M, popup2M, "cmdPaste", _("Paste"), 0,
- (void*) (wMenuCallBack_p) EditPaste, 0, (void *) 0);
- MiscMenuItemCreate(popup2M, NULL, "cmdClone", _("Clone"), 0,
- (void*) (wMenuCallBack_p) EditClone, 0, (void *) 0);
- /*Select*/
- MiscMenuItemCreate(popup1M, popup2M, "cmdSelectAll", _("Select All"), 0,
- (void*) (wMenuCallBack_p) SetAllTrackSelect, 0, (void *) 1);
- MiscMenuItemCreate(popup1M, popup2M, "cmdSelectCurrentLayer",
- _("Select Current Layer"), 0,
- (void*) (wMenuCallBack_p) SelectCurrentLayer, 0, (void *) 0);
- MiscMenuItemCreate(popup2M, NULL, "cmdDeselectAll", _("Deselect All"), 0,
- (void*) (wMenuCallBack_p) SetAllTrackSelect, 0, (void *) 0);
- /* Modify */
- wMenuPushCreate(popup2M, "cmdMove", _("Move"), 0,
- (wMenuCallBack_p) DoCommandBIndirect, &moveCmdInx);
- wMenuPushCreate(popup2M, "cmdRotate", _("Rotate"), 0,
- (wMenuCallBack_p) DoCommandBIndirect, &rotateCmdInx);
- wMenuSeparatorCreate(popup1M);
- wMenuSeparatorCreate(popup2M);
- MiscMenuItemCreate(popup2M, NULL, "cmdDelete", _("Delete"), 0,
- (void*) (wMenuCallBack_p) SelectDelete, 0, (void *) 0);
- wMenuSeparatorCreate(popup2M);
- popup1aM = wMenuMenuCreate(popup1M, "", _("Add..."));
- popup2aM = wMenuMenuCreate(popup2M, "", _("Add..."));
- wMenuSeparatorCreate(popup2M);
- wMenuSeparatorCreate(popup1M);
- 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);
- wMenuPushCreate(fileM, "menuFile-load", _("&Open ..."), ACCL_OPEN,
- (wMenuCallBack_p) ChkLoad, NULL);
- wMenuSeparatorCreate(fileM);
-
- wMenuPushCreate(fileM, "menuFile-save", _("&Save"), ACCL_SAVE,
- (wMenuCallBack_p) DoSave, NULL);
- wMenuPushCreate(fileM, "menuFile-saveAs", _("Save &As ..."), ACCL_SAVEAS,
- (wMenuCallBack_p) DoSaveAs, NULL);
- wMenuPushCreate(fileM, "menuFile-revert", _("Revert"), ACCL_REVERT,
- (wMenuCallBack_p) ChkRevert, NULL);
- wMenuSeparatorCreate(fileM);
- MiscMenuItemCreate(fileM, NULL, "printSetup", _("P&rint Setup ..."),
- ACCL_PRINTSETUP, (void*) (wMenuCallBack_p) wPrintSetup, 0,
- (void *) 0);
- printCmdInx = InitCmdPrint(fileM);
- wMenuSeparatorCreate(fileM);
- MiscMenuItemCreate(fileM, NULL, "cmdImport", _("&Import"), ACCL_IMPORT,
- (void*) (wMenuCallBack_p) DoImport, 0, (void *) 0);
- MiscMenuItemCreate(fileM, NULL, "cmdImportModule", _("Import &Module"), ACCL_IMPORT_MOD,
- (void*) (wMenuCallBack_p) DoImport, 0, (void *) 1);
- MiscMenuItemCreate(fileM, NULL, "cmdOutputbitmap", _("Export to &Bitmap"),
- ACCL_PRINTBM, (void*) (wMenuCallBack_p) OutputBitMapInit(), 0,
- (void *) 0);
- MiscMenuItemCreate(fileM, NULL, "cmdExport", _("E&xport"), ACCL_EXPORT,
- (void*) (wMenuCallBack_p) DoExport, IC_SELECTED, (void *) 0);
- MiscMenuItemCreate(fileM, NULL, "cmdExportDXF", _("Export D&XF"),
- ACCL_EXPORTDXF, (void*) (wMenuCallBack_p) DoExportDXF, IC_SELECTED,
- (void *) 0);
- wMenuSeparatorCreate(fileM);
-
- MiscMenuItemCreate(fileM, NULL, "cmdPrmfile", _("Parameter &Files ..."),
- ACCL_PARAMFILES, (void*) ParamFilesInit(), 0, (void *) 0);
- MiscMenuItemCreate(fileM, NULL, "cmdFileNote", _("No&tes ..."), ACCL_NOTES,
- (void*) (wMenuCallBack_p) DoNote, 0, (void *) 0);
-
- wMenuSeparatorCreate(fileM);
- fileList_ml = wMenuListCreate(fileM, "menuFileList", NUM_FILELIST,
- ChkFileList);
- wMenuSeparatorCreate(fileM);
- wMenuPushCreate(fileM, "menuFile-quit", _("E&xit"), 0,
- (wMenuCallBack_p) DoQuit, NULL);
-
- /*
- * EDIT MENU
- */
- MiscMenuItemCreate(editM, NULL, "cmdUndo", _("&Undo"), ACCL_UNDO,
- (void*) (wMenuCallBack_p) UndoUndo, 0, (void *) 0);
- MiscMenuItemCreate(editM, NULL, "cmdRedo", _("R&edo"), ACCL_REDO,
- (void*) (wMenuCallBack_p) UndoRedo, 0, (void *) 0);
- wMenuSeparatorCreate(editM);
- MiscMenuItemCreate(editM, NULL, "cmdCut", _("Cu&t"), ACCL_CUT,
- (void*) (wMenuCallBack_p) EditCut, IC_SELECTED, (void *) 0);
- MiscMenuItemCreate(editM, NULL, "cmdCopy", _("&Copy"), ACCL_COPY,
- (void*) (wMenuCallBack_p) EditCopy, IC_SELECTED, (void *) 0);
- MiscMenuItemCreate(editM, NULL, "cmdPaste", _("&Paste"), ACCL_PASTE,
- (void*) (wMenuCallBack_p) EditPaste, 0, (void *) 0);
- MiscMenuItemCreate(editM, NULL, "cmdClone", _("C&lone"), ACCL_CLONE,
- (void*) (wMenuCallBack_p) EditClone, 0, (void *) 0);
- MiscMenuItemCreate(editM, NULL, "cmdDelete", _("De&lete"), ACCL_DELETE,
- (void*) (wMenuCallBack_p) SelectDelete, IC_SELECTED, (void *) 0);
- MiscMenuItemCreate(editM, NULL, "cmdMoveToCurrentLayer",
- _("Move To Current Layer"), ACCL_MOVCURLAYER,
- (void*) (wMenuCallBack_p) MoveSelectedTracksToCurrentLayer,
- IC_SELECTED, (void *) 0);
- 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 );
- 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 );
-
- 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 );
-
- /*
- * VIEW MENU
- */
- zoomInM = wMenuPushCreate(viewM, "menuEdit-zoomIn", _("Zoom &In"),
- ACCL_ZOOMIN, (wMenuCallBack_p) DoZoomUp, (void*) 1);
- zoomSubM = wMenuMenuCreate(viewM, "menuEdit-zoomTo", _("&Zoom"));
- zoomOutM = wMenuPushCreate(viewM, "menuEdit-zoomOut", _("Zoom &Out"),
- ACCL_ZOOMOUT, (wMenuCallBack_p) DoZoomDown, (void*) 1);
- 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);
-
- wMenuPushCreate(viewM, "menuEdit-redraw", _("&Redraw"), ACCL_REDRAW,
- (wMenuCallBack_p) MainRedraw, NULL);
- wMenuPushCreate(viewM, "menuEdit-redraw", _("Redraw All"), ACCL_REDRAWALL,
- (wMenuCallBack_p) DoRedraw, NULL);
- wMenuSeparatorCreate(viewM);
-
- snapGridEnableMI = wMenuToggleCreate(viewM, "cmdGridEnable",
- _("Enable SnapGrid"), ACCL_SNAPENABLE, 0,
- (wMenuToggleCallBack_p) SnapGridEnable, NULL);
- snapGridShowMI = wMenuToggleCreate(viewM, "cmdGridShow", _("Show SnapGrid"),
- ACCL_SNAPSHOW,
- FALSE, (wMenuToggleCallBack_p) SnapGridShow, NULL);
- gridCmdInx = InitGrid(viewM);
-
- // visibility toggle for anchors
- // get the start value
- long anchors_long;
- wPrefGetInteger("misc", "anchors", (long *)&anchors_long, 1);
- magneticSnap = anchors_long ? TRUE : FALSE;
- magnetsMI = wMenuToggleCreate(viewM, "cmdMagneticSnap", _("Enable Magnetic Snap"),
- 0, magneticSnap,
- (wMenuToggleCallBack_p)MagneticSnapToggle, NULL);
-
- // visibility toggle for map window
- // get the start value
- long mapVisible_long;
- wPrefGetInteger("misc", "mapVisible", (long *) &mapVisible_long, 1);
- mapVisible = mapVisible_long ? TRUE : FALSE;
- mapShowMI = wMenuToggleCreate(viewM, "cmdMapShow", _("Show/Hide Map"),
- ACCL_MAPSHOW, mapVisible,
- (wMenuToggleCallBack_p) MapWindowToggleShow, NULL);
-
- wMenuSeparatorCreate(viewM);
-
- toolbarM = wMenuMenuCreate(viewM, "toolbarM", _("&Tool Bar"));
- CreateToolbarM(toolbarM);
-
- cmdGroup = BG_EASE;
- InitCmdEasement();
-
- cmdGroup = BG_SNAP;
- InitSnapGridButtons();
- magnetsB = AddToolbarButton("cmdMagneticSnap", wIconCreatePixMap(magnet_xpm),
- IC_MODETRAIN_TOO, (addButtonCallBack_t) 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);
- wControlLinkedSet((wControl_p) mapShowMI, (wControl_p) mapShowB);
- wButtonSetBusy(mapShowB, (wBool_t) mapVisible);
-
- /*
- * ADD MENU
- */
-
- cmdGroup = BG_TRKCRT | BG_BIGGAP;
- InitCmdStraight(addM);
- InitCmdCurve(addM);
- InitCmdParallel(addM);
- InitCmdTurnout(addM);
- InitCmdHandLaidTurnout(addM);
- InitCmdStruct(addM);
- InitCmdHelix(addM);
- InitCmdTurntable(addM);
-
- cmdGroup = BG_CONTROL;
- ButtonGroupBegin( _("Control Element"), "cmdControlElements", _("Control Element") );
- InitCmdBlock(addM);
- InitCmdSwitchMotor(addM);
- InitCmdSignal(addM);
- InitCmdControl(addM);
- InitCmdSensor(addM);
- ButtonGroupEnd();
-
- /*
- * CHANGE MENU
- */
- cmdGroup = BG_SELECT;
- InitCmdDescribe(changeM);
- InitCmdSelect(changeM);
- InitCmdPan(changeM);
- wMenuSeparatorCreate(changeM);
-
- cmdGroup = BG_TRKGRP;
- InitCmdMove(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);
- InitCmdJoin(changeM);
- InitCmdPull(changeM);
- InitCmdSplit(changeM);
- InitCmdMoveDescription(changeM);
- wMenuSeparatorCreate(changeM);
-
- MiscMenuItemCreate(changeM, NULL, "cmdAddElevations",
- _("Raise/Lower Elevations"), ACCL_CHGELEV,
- (void*) (wMenuCallBack_p) ShowAddElevations, IC_SELECTED,
- (void *) 0);
- InitCmdElevation(changeM);
- InitCmdProfile(changeM);
-
- MiscMenuItemCreate(changeM, NULL, "cmdClearElevations",
- _("Clear Elevations"), ACCL_CLRELEV,
- (void*) (wMenuCallBack_p) ClearElevations, IC_SELECTED, (void *) 0);
- MiscMenuItemCreate(changeM, NULL, "cmdElevation", _("Recompute Elevations"),
- 0, (void*) (wMenuCallBack_p) RecomputeElevations, 0, (void *) 0);
- 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
- */
- cmdGroup = BG_MISCCRT;
- InitCmdDraw(drawM);
- InitCmdText(drawM);
- InitTrkNote(drawM);
-
- cmdGroup = BG_RULER;
- InitCmdRuler(drawM);
-
- /*
- * OPTION MENU
- */
- MiscMenuItemCreate(optionM, NULL, "cmdLayout", _("L&ayout ..."),
- ACCL_LAYOUTW, (void*) LayoutInit(), IC_MODETRAIN_TOO, (void *) 0);
- MiscMenuItemCreate(optionM, NULL, "cmdDisplay", _("&Display ..."),
- ACCL_DISPLAYW, (void*) DisplayInit(), IC_MODETRAIN_TOO, (void *) 0);
- MiscMenuItemCreate(optionM, NULL, "cmdCmdopt", _("Co&mmand ..."),
- ACCL_CMDOPTW, (void*) CmdoptInit(), IC_MODETRAIN_TOO, (void *) 0);
- MiscMenuItemCreate(optionM, NULL, "cmdEasement", _("&Easements ..."),
- ACCL_EASEW, (void*) (wMenuCallBack_p) DoEasementRedir,
- IC_MODETRAIN_TOO, (void *) 0);
- MiscMenuItemCreate(optionM, NULL, "fontSelW", _("&Fonts ..."), ACCL_FONTW,
- (void*) (wMenuCallBack_p) SelectFont, IC_MODETRAIN_TOO, (void *) 0);
- MiscMenuItemCreate(optionM, NULL, "cmdSticky", _("Stic&ky ..."),
- ACCL_STICKY, (void*) (wMenuCallBack_p) DoSticky, IC_MODETRAIN_TOO,
- (void *) 0);
- if (extraButtons) {
- menuPLs[menuPG.paramCnt].context = debugW;
- MiscMenuItemCreate(optionM, NULL, "cmdDebug", _("&Debug ..."), 0,
- (void*) (wMenuCallBack_p) DebugInit, IC_MODETRAIN_TOO, (void *) 0);
- }
- MiscMenuItemCreate(optionM, NULL, "cmdPref", _("&Preferences ..."),
- ACCL_PREFERENCES, (void*) PrefInit(), IC_MODETRAIN_TOO, (void *) 0);
- MiscMenuItemCreate(optionM, NULL, "cmdColor", _("&Colors ..."), ACCL_COLORW,
- (void*) ColorInit(), IC_MODETRAIN_TOO, (void *) 0);
-
- /*
- * MACRO MENU
- */
- wMenuPushCreate(macroM, "cmdRecord", _("&Record ..."), ACCL_RECORD,
- DoRecord, NULL);
- wMenuPushCreate(macroM, "cmdDemo", _("&Play Back ..."), ACCL_PLAYBACK,
- DoPlayBack, NULL);
-
- /*
- * WINDOW MENU
- */
- wMenuPushCreate(windowM, "menuWindow", _("Main window"), 0,
- (wMenuCallBack_p) wShow, mainW);
- winList_mi = wMenuListCreate(windowM, "menuWindow", -1, DoShowWindow);
-
- /*
- * HELP MENU
- */
-
- /* main help window */
- wMenuAddHelp(helpM);
-
- /* help on recent messages */
- wMenuSeparatorCreate(helpM);
- messageListM = wMenuMenuCreate(helpM, "menuHelpRecentMessages",
- _("Recent Messages"));
- messageList_ml = wMenuListCreate(messageListM, "messageListM", 10,
- ShowMessageHelp);
- wMenuListAdd(messageList_ml, 0, _(MESSAGE_LIST_EMPTY), NULL);
-
- /* tip of the day */
- wMenuSeparatorCreate( helpM );
- wMenuPushCreate( helpM, "cmdTip", _("Tip of the Day..."), 0, (wMenuCallBack_p)ShowTip, (void *)(SHOWTIP_FORCESHOW | SHOWTIP_NEXTTIP));
- demoM = wMenuMenuCreate( helpM, "cmdDemo", _("&Demos") );
- wMenuPushCreate( helpM, "cmdExamples", _("Examples..."), 0, (wMenuCallBack_p)ChkExamples, (void *)0);
-
- /* about window */
- wMenuSeparatorCreate(helpM);
- wMenuPushCreate(helpM, "about", _("About"), 0,
- (wMenuCallBack_p) CreateAboutW, NULL);
-
- /*
- * MANAGE MENU
- */
-
- cmdGroup = BG_TRAIN | BG_BIGGAP;
- InitCmdTrain(manageM);
- wMenuSeparatorCreate(manageM);
-
- InitNewTurn(
- wMenuMenuCreate(manageM, "cmdTurnoutNew",
- _("Tur&nout Designer...")));
-
- MiscMenuItemCreate(manageM, NULL, "cmdContmgm",
- _("Layout &Control Elements"), ACCL_CONTMGM,
- (void*) ControlMgrInit(), 0, (void*) 0);
- MiscMenuItemCreate(manageM, NULL, "cmdGroup", _("&Group"), ACCL_GROUP,
- (void*) (wMenuCallBack_p) DoGroup, IC_SELECTED, (void *) 0);
- MiscMenuItemCreate(manageM, NULL, "cmdUngroup", _("&Ungroup"), ACCL_UNGROUP,
- (void*) (wMenuCallBack_p) DoUngroup, IC_SELECTED, (void *) 0);
-
- MiscMenuItemCreate(manageM, NULL, "cmdCustmgm",
- _("Custom defined parts..."), ACCL_CUSTMGM, (void*) CustomMgrInit(),
- 0, (void *) 0);
- MiscMenuItemCreate(manageM, NULL, "cmdRefreshCompound",
- _("Update Turnouts and Structures"), 0,
- (void*) (wMenuCallBack_p) DoRefreshCompound, 0, (void *) 0);
-
- MiscMenuItemCreate(manageM, NULL, "cmdCarInventory", _("Car Inventory"),
- ACCL_CARINV, (void*) (wMenuCallBack_p) DoCarDlg, IC_MODETRAIN_TOO,
- (void *) 0);
-
- wMenuSeparatorCreate(manageM);
-
- MiscMenuItemCreate(manageM, NULL, "cmdLayer", _("Layers ..."), ACCL_LAYERS,
- (void*) InitLayersDialog(), 0, (void *) 0);
- wMenuSeparatorCreate(manageM);
-
- MiscMenuItemCreate(manageM, NULL, "cmdEnumerate", _("Parts &List ..."),
- ACCL_PARTSLIST, (void*) (wMenuCallBack_p) EnumerateTracks, 0,
- (void *) 0);
- MiscMenuItemCreate(manageM, NULL, "cmdPricelist", _("Price List..."),
- ACCL_PRICELIST, (void*) PriceListInit(), 0, (void *) 0);
-
- cmdGroup = BG_LAYER | BG_BIGGAP;
-
- InitCmdSelect2(changeM);
- InitCmdDescribe2(changeM);
- InitCmdPan2(changeM);
-
- InitLayers();
-
- 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);
-
- InitBenchDialog();
- wPrefGetInteger( "DialogItem", "sticky-set", &stickySet, stickySet );
-}
-
-static void LoadFileList(void) {
- char file[6];
- int inx;
- const char * cp;
- const char *fileName, *pathName;
- strcpy(file, "fileX");
- for (inx = NUM_FILELIST - 1; inx >= 0; inx--) {
- file[4] = '0' + inx;
- cp = wPrefGetString("filelist", file);
- if (!cp)
- continue;
- pathName = MyStrdup(cp);
- fileName = FindFilename((char *) pathName);
- if (fileName)
- wMenuListAdd(fileList_ml, 0, fileName, pathName);
- }
-}
-
-EXPORT void InitCmdEnumerate(void) {
- AddToolbarButton("cmdEnumerate", wIconCreatePixMap(partlist_xpm),
- IC_SELECTED | IC_ACCLKEY, (addButtonCallBack_t) 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);
- ButtonGroupEnd();
-}
-
/* Give user the option to continue work after crash. This function gives the user
* the option to load the checkpoint file to continue working after a crash.
*
@@ -2781,17 +988,18 @@ static int OfferCheckpoint( void )
/* sProdName */
ret =
- wNotice3(
- _(
- "Program was not terminated properly. Do you want to resume working on the previous trackplan?"),
- _("Resume"), _("Resume with New Name"), _("Ignore Checkpoint"));
+ wNotice3(
+ _(
+ "Program was not terminated properly. Do you want to resume working on the previous trackplan?"),
+ _("Resume"), _("Resume with New Name"), _("Ignore Checkpoint"));
//ret==1 Same, ret==-1 New, ret==0 Ignore
- if (ret == 1)
+ if (ret == 1) {
printf(_("Reload Checkpoint Selected\n"));
- else if (ret == -1)
+ } else if (ret == -1) {
printf(_("Reload Checkpoint With New Name Selected\n"));
- else
+ } else {
printf(_("Ignore Checkpoint Selected\n"));
+ }
if (ret>=0) {
/* load the checkpoint file */
LoadCheckpoint(ret==1);
@@ -2801,7 +1009,8 @@ static int OfferCheckpoint( void )
return (ret>=0);
}
-EXPORT wWin_p wMain(int argc, char * argv[]) {
+EXPORT wWin_p wMain(int argc, char * argv[])
+{
int c;
int resumeWork;
char * logFileName = NULL;
@@ -2813,11 +1022,9 @@ 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;
+ BOOL_T bRunTests = FALSE;
strcpy(buffer, sProdNameLower);
@@ -2828,17 +1035,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:mVT")) != -1)
switch (c) {
case 'c': /* configuration name */
/* test for valid filename */
@@ -2880,21 +1087,28 @@ EXPORT wWin_p wMain(int argc, char * argv[]) {
break;
case ':':
NoticeMessage("Missing parameter for %s", _("Ok"), NULL,
- argv[optind - 1]);
+ argv[optind - 1]);
exit(1);
break;
+ case 'V': // display version
+ printf("Version: %s\n",XTRKCAD_VERSION);
+ exit(0);
+ break;
+ case 'T': // run tests
+ LogSet( "regression", 2 );
+ bRunTests = TRUE;
+ break;
default:
- abort();
+ CHECK(FALSE);
}
- if (optind < argc)
+ if (optind < argc) {
initialFile = strdup(argv[optind]);
+ }
extraButtons = (getenv(sEnvExtra) != NULL);
LogOpen(logFileName);
log_init = LogFindIndex("init");
log_malloc = LogFindIndex("malloc");
- log_error = LogFindIndex("error");
- log_command = LogFindIndex("command");
LOG1(log_init, ( "initCustom\n" ))
InitCustom();
@@ -2905,52 +1119,19 @@ EXPORT wWin_p wMain(int argc, char * argv[]) {
LOG1(log_init, ( "create main window\n" ))
SetLayoutTitle(sProdName);
sprintf(message, _("Unnamed Trackplan - %s(%s)"), sProdName, sVersion);
- wSetBalloonHelp(balloonHelp);
wGetDisplaySize(&displayWidth, &displayHeight);
mainW = wWinMainCreate(buffer, (displayWidth * 2) / 3,
- (displayHeight * 2) / 3, "xtrkcadW", message, "main",
- F_RESIZE | F_MENUBAR | F_NOTAB | F_RECALLPOS | F_RECALLSIZE | F_HIDE, MainProc,
- NULL);
- if (mainW == NULL)
+ (displayHeight * 2) / 3, "xtrkcadW", message, "main",
+ F_RESIZE | F_MENUBAR | F_NOTAB | F_RECALLPOS | F_RECALLSIZE | F_HIDE, MainProc,
+ NULL);
+ if (mainW == NULL) {
return NULL;
+ }
+ wSetGeometry(mainW, displayWidth/2, displayWidth, displayHeight/2,
+ displayHeight, -1, -1, -1);
InitAppDefaults();
- drawColorBlack = wDrawFindColor( wRGB( 0, 0, 0) );
- drawColorWhite = wDrawFindColor( wRGB(255,255,255) );
- drawColorRed = wDrawFindColor( wRGB(255, 0, 0) );
- drawColorBlue = wDrawFindColor( wRGB( 0, 0,255) );
- drawColorGreen = wDrawFindColor( wRGB( 0,255, 0) );
- drawColorAqua = wDrawFindColor( wRGB( 0,255,255) );
-
- // Last component of spectial color must be > 3
- drawColorPreviewSelected = wDrawFindColor( wRGB ( 6, 6, 255) ); //Special Blue
- drawColorPreviewUnselected = wDrawFindColor( wRGB( 255, 215, 6)); //Special Yellow
-
- drawColorPowderedBlue = wDrawFindColor( wRGB(129, 212, 250) );
- drawColorPurple = wDrawFindColor( wRGB(255, 0,255) );
- drawColorGold = wDrawFindColor( wRGB(255,215, 0) );
- drawColorGrey10 = wDrawFindColor( wRGB(26,26,26) );
- drawColorGrey20 = wDrawFindColor( wRGB(51,51,51) );
- drawColorGrey30 = wDrawFindColor( wRGB(72,72,72) );
- drawColorGrey40 = wDrawFindColor( wRGB(102,102,102) );
- drawColorGrey50 = wDrawFindColor( wRGB(128,128,128) );
- drawColorGrey60 = wDrawFindColor( wRGB(153,153,153) );
- drawColorGrey70 = wDrawFindColor( wRGB(179,179,179) );
- drawColorGrey80 = wDrawFindColor( wRGB(204,204,204) );
- drawColorGrey90 = wDrawFindColor( wRGB(230,230,230) );
- snapGridColor = drawColorGreen;
- markerColor = drawColorRed;
- borderColor = drawColorBlack;
- crossMajorColor = drawColorRed;
- crossMinorColor = drawColorBlue;
- selectedColor = drawColorRed;
- normalColor = drawColorBlack;
- elevColorIgnore = drawColorBlue;
- elevColorDefined = drawColorGold;
- profilePathColor = drawColorPurple;
- exceptionColor = wDrawFindColor(wRGB(255, 89, 0 ));
- tieColor = wDrawFindColor(wRGB(153, 89, 68));
newToolbarMax = (1 << BG_COUNT) - 1;
wPrefGetInteger("misc", "toolbarset", &toolbarSet, newToolbarMax);
@@ -2981,14 +1162,15 @@ EXPORT wWin_p wMain(int argc, char * argv[]) {
/*
* INITIALIZE
*/
+ LOG1(log_init, ( "initColor\n" ))
+ InitColor();
LOG1(log_init, ( "initInfoBar\n" ))
InitInfoBar();
- wSetSplashInfo("Misc2 Init...");
- LOG1(log_init, ( "misc2Init\n" ))
- Misc2Init();
+ wSetSplashInfo("Scale Init...");
+ LOG1(log_init, ( "ScaleInit\n" ))
+ ScaleInit();
+ wPrefGetInteger( "draw", "label-when", &labelWhen, labelWhen );
- RotateDialogInit();
- MoveDialogInit();
wSetSplashInfo(_("Initializing commands"));
LOG1(log_init, ( "paramInit\n" ))
@@ -3003,46 +1185,51 @@ EXPORT wWin_p wMain(int argc, char * argv[]) {
LOG1(log_init, ( "createMenus\n" ))
CreateMenus();
+ SetAccelKeys();
+
LOG1(log_init, ( "initialize\n" ))
- if (!Initialize())
+ if (!Initialize()) {
return NULL;
- ParamRegister(&menuPG);
- ParamRegister(&stickyPG);
+ }
- /* initialize the layers */
- DefaultLayerProperties();
LOG1(log_init, ( "loadFileList\n" ))
LoadFileList();
- AddPlaybackProc("MENU", MenuPlayback, NULL);
//CreateDebugW();
/*
* TIDY UP
*/
- curCommand = 0;
- commandContext = commandList[curCommand].context;
-
- /*
- * READ PARAMETERS
- */
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);
MacroInit();
+
+ /*
+ * READ PARAMETERS
+ */
wSetSplashInfo(_("Reading parameter files"));
LOG1(log_init, ( "paramFileInit\n" ))
- SetParamFileDir(GetCurrentPath(LAYOUTPATHKEY)); //Set default for new parms to be the same as the layout
+ SetParamFileDir(GetCurrentPath(
+ LAYOUTPATHKEY)); //Set default for new parms to be the same as the layout
- if (!ParamFileListInit())
+ if (!ParamFileListInit()) {
return NULL;
+ }
- curCommand = describeCmdInx;
+ /* initialize the layers */
+ LOG1(log_init, ("DefaultLayerProperties"));
+ DefaultLayerProperties();
+
+ // LOG1(log_init, ("!ParamFileListInit()\n"))
+
+ CommandInit();
LOG1(log_init, ( "Reset\n" ))
Reset();
@@ -3051,15 +1238,14 @@ EXPORT wWin_p wMain(int argc, char * argv[]) {
*/
/* Set up the data for scale and gauge description */
- DoSetScaleDesc();
+ DoAllSetScaleDesc();
// get the preferred scale from the configuration file
pref = wPrefGetString("misc", "scale");
- if (!pref)
+ if ( pref == NULL || DoSetScale( pref ) == FALSE ) {
// if preferred scale was not set (eg. during initial run), initialize to a default value
- pref = DEFAULT_SCALE;
- strcpy(buffer, pref);
- DoSetScale(buffer);
+ DoSetScale( DEFAULT_SCALE );
+ }
/* see whether last layout should be reopened on startup */
wPrefGetInteger("DialogItem", "pref-onstartup", &onStartup, 0);
@@ -3072,7 +1258,6 @@ EXPORT wWin_p wMain(int argc, char * argv[]) {
EnableCommands();
LOG1(log_init, ( "Initialization complete\n" ))
wSetSplashInfo(_("Initialization complete"));
- RegisterChangeNotification(ToolbarChange);
DoChangeNotification( CHANGE_MAIN | CHANGE_MAP);
wWinShow(mainW, TRUE);
@@ -3082,13 +1267,24 @@ 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 +1295,59 @@ 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
- if (onStartup == 1)
- LayoutBackGroundInit(TRUE); //Wipe Out Prior Background
- else
- LayoutBackGroundInit(FALSE); //Get Prior BackGround
+ 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;
+ if ( bRunTests ) {
+ int nFail = RegressionTestAll();
+ if ( nFail == 0 ) {
+ lprintf( "Regression Tests Pass\n" );
+ exit( 0 );
+ } else {
+ lprintf( "%d Regression Tests Fail\n", nFail );
+ exit( 1 );
+ }
+ }
return mainW;
}
+
+/****************************************************************************
+ *
+ * CHANGE NOTIFICATION
+ *
+ */
+#define CNCB_COUNT (40)
+
+static changeNotificationCallBack_t changeNotificationCallBacks[CNCB_COUNT];
+static int changeNotificationCallBackCnt = 0;
+
+EXPORT void RegisterChangeNotification(
+ changeNotificationCallBack_t action )
+{
+ CHECK( (changeNotificationCallBackCnt + 1) < CNCB_COUNT );
+ changeNotificationCallBacks[changeNotificationCallBackCnt] = action;
+ changeNotificationCallBackCnt++;
+}
+
+
+EXPORT void DoChangeNotification( long changes )
+{
+ int inx;
+ for (inx=0; inx<changeNotificationCallBackCnt; inx++) {
+ changeNotificationCallBacks[inx](changes);
+ }
+}
+