summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorleo2001-01-07 15:23:38 +0000
committerleo2001-01-07 15:23:38 +0000
commit1a08ac30811e885c3ae28f9a04c29c600e8947b2 (patch)
tree7c10440ebc2e00273ea6c0b857f4d38c3737c322 /common
parent47cc86e89065f1691296e1754ccecda35e3a41d2 (diff)
New class for the main window
git-svn-id: http://svn.leocad.org/trunk@219 c7d43263-9d01-0410-8a33-9dba5d9f93d6
Diffstat (limited to 'common')
-rw-r--r--common/mainwnd.cpp87
-rw-r--r--common/mainwnd.h34
2 files changed, 121 insertions, 0 deletions
diff --git a/common/mainwnd.cpp b/common/mainwnd.cpp
new file mode 100644
index 0000000..34e2a0b
--- /dev/null
+++ b/common/mainwnd.cpp
@@ -0,0 +1,87 @@
+//
+// Main LeoCAD window
+//
+
+#include <stdio.h>
+#include "mainwnd.h"
+#include "system.h"
+
+MainWnd::MainWnd ()
+ : BaseWnd (NULL, LC_MAINWND_NUM_COMMANDS)
+{
+ char entry[8];
+ int i;
+
+ for (i = 0; i < LC_MRU_MAX; i++)
+ {
+ sprintf (entry, "File%d", i+1);
+ m_strMRU[i] = Sys_ProfileLoadString ("RecentFiles", entry, "");
+ }
+}
+
+MainWnd::~MainWnd ()
+{
+ char entry[8];
+ int i;
+
+ for (i = 0; i < LC_MRU_MAX; i++)
+ {
+ sprintf (entry, "File%d", i+1);
+ Sys_ProfileSaveString ("RecentFiles", entry, m_strMRU[i]);
+ }
+}
+
+// =============================================================================
+// recently used files
+
+void MainWnd::UpdateMRU ()
+{
+ for (int i = 0; i < LC_MRU_MAX; i++)
+ {
+ if (m_strMRU[i].IsEmpty ())
+ {
+ if (i == 0)
+ {
+ SetMenuItemText (LC_MAINWND_RECENT1, "Recent Files");
+ EnableMenuItem (LC_MAINWND_RECENT1, false);
+ }
+ else
+ ShowMenuItem (LC_MAINWND_RECENT1+i, false);
+ }
+ else
+ {
+ char text[LC_MAXPATH+8];
+ sprintf (text, "&%d- %s", i+1, (char*)m_strMRU[i]);
+
+ ShowMenuItem (LC_MAINWND_RECENT1+i, true);
+ EnableMenuItem (LC_MAINWND_RECENT1+i, true);
+ SetMenuItemText (LC_MAINWND_RECENT1+i, text);
+ }
+ }
+}
+
+void MainWnd::AddToMRU (const char *filename)
+{
+ // update the MRU list, if an existing MRU string matches file name
+ int i;
+
+ for (i = 0; i < (LC_MRU_MAX - 1); i++)
+ if (m_strMRU[i] == filename)
+ break;
+
+ // move MRU strings before this one down
+ for (; i > 0; i--)
+ m_strMRU[i] = m_strMRU[i-1];
+ m_strMRU[0] = filename;
+
+ UpdateMRU ();
+}
+
+void MainWnd::RemoveFromMRU (int index)
+{
+ for (int i = index; i < (LC_MRU_MAX - 1); i++)
+ m_strMRU[i] = m_strMRU[i+1];
+ m_strMRU[LC_MRU_MAX - 1].Empty ();
+
+ UpdateMRU ();
+}
diff --git a/common/mainwnd.h b/common/mainwnd.h
new file mode 100644
index 0000000..c6f0540
--- /dev/null
+++ b/common/mainwnd.h
@@ -0,0 +1,34 @@
+#ifndef _MAINWND_H_
+#define _MAINWND_H_
+
+#include "str.h"
+#include "basewnd.h"
+
+#define LC_MRU_MAX 4
+
+typedef enum
+{
+ LC_MAINWND_RECENT1,
+ LC_MAINWND_RECENT2,
+ LC_MAINWND_RECENT3,
+ LC_MAINWND_RECENT4,
+ LC_MAINWND_NUM_COMMANDS
+} LC_MAINWND_COMMANDS;
+
+class MainWnd : public BaseWnd
+{
+ public:
+ MainWnd ();
+ virtual ~MainWnd ();
+
+ void UpdateMRU ();
+ void AddToMRU (const char *filename);
+ void RemoveFromMRU (int index);
+ const char* GetMRU (int index) const
+ { return m_strMRU[index]; }
+
+ protected:
+ String m_strMRU[LC_MRU_MAX];
+};
+
+#endif // _MAINWND_H_