summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorleo2005-03-08 20:12:51 +0000
committerleo2005-03-08 20:12:51 +0000
commit342008b552f16892b5abfe86eadce9feee4d0da0 (patch)
treef7a6c0bc9c492fdc228f815e1a9098887f3ec57b
parent5430dc9b0c6ea433458cac5999fc7dea58778d56 (diff)
Allowed more commands to have their shortcuts changed,
Fixed a memory leak in the BMP Menu class. git-svn-id: http://svn.leocad.org/trunk@387 c7d43263-9d01-0410-8a33-9dba5d9f93d6
-rw-r--r--common/keyboard.cpp30
-rw-r--r--common/project.cpp174
-rw-r--r--common/typedefs.h28
-rw-r--r--win/Bmpmenu.cpp18
-rw-r--r--win/Bmpmenu.h1
-rw-r--r--win/Mainfrm.cpp26
-rw-r--r--win/System.cpp12
7 files changed, 210 insertions, 79 deletions
diff --git a/common/keyboard.cpp b/common/keyboard.cpp
index da2cf88..0a83bc8 100644
--- a/common/keyboard.cpp
+++ b/common/keyboard.cpp
@@ -63,10 +63,15 @@ LC_KEYBOARD_COMMAND DefaultKeyboardShortcuts[] =
{ LC_VIEW_STEP_LAST, "Step Last", 0, 0, 0 },
// { LC_VIEW_STEP_CHOOSE, "", 0, 0, 0 },
// { LC_VIEW_STEP_SET, "", 0, 0, 0 },
- { LC_VIEW_STEP_INSERT, "Step Insert", 0, 0, 0 },
- { LC_VIEW_STEP_DELETE, "Step Delete", 0, 0, 0 },
// { LC_VIEW_STOP, "", 0, 0, 0 },
// { LC_VIEW_PLAY, "", 0, 0, 0 },
+ { LC_VIEW_CAMERA_FRONT, "Camera Front", 0, LC_KEY_F, 0 },
+ { LC_VIEW_CAMERA_BACK, "Camera Back", 0, LC_KEY_B, 0 },
+ { LC_VIEW_CAMERA_TOP, "Camera Top", 0, LC_KEY_T, 0 },
+ { LC_VIEW_CAMERA_BOTTOM, "Camera Bottom", 0, LC_KEY_U, 0 },
+ { LC_VIEW_CAMERA_LEFT, "Camera Left", 0, LC_KEY_L, 0 },
+ { LC_VIEW_CAMERA_RIGHT, "Camera Right", 0, LC_KEY_R, 0 },
+ { LC_VIEW_CAMERA_MAIN, "Camera Main", 0, LC_KEY_M, 0 },
// { LC_VIEW_CAMERA_MENU, "", 0, 0, 0 },
// { LC_VIEW_CAMERA_RESET, "", 0, 0, 0 },
// { LC_VIEW_AUTOPAN, "", 0, 0, 0 },
@@ -78,6 +83,27 @@ LC_KEYBOARD_COMMAND DefaultKeyboardShortcuts[] =
// { LC_TOOLBAR_SNAPMOVEMENU, "", 0, 0, 0 },
// { LC_TOOLBAR_FASTRENDER, "", 0, 0, 0 },
// { LC_TOOLBAR_BACKGROUND, "", 0, 0, 0 },
+ { LC_VIEW_STEP_INSERT, "Step Insert", 0, 0, 0 },
+ { LC_VIEW_STEP_DELETE, "Step Delete", 0, 0, 0 },
+ { LC_EDIT_MOVE_SNAP_0, "Move Snap 0", 0, LC_KEY_0, 0 },
+ { LC_EDIT_MOVE_SNAP_1, "Move Snap 1", 0, LC_KEY_1, 0 },
+ { LC_EDIT_MOVE_SNAP_2, "Move Snap 2", 0, LC_KEY_2, 0 },
+ { LC_EDIT_MOVE_SNAP_3, "Move Snap 3", 0, LC_KEY_3, 0 },
+ { LC_EDIT_MOVE_SNAP_4, "Move Snap 4", 0, LC_KEY_4, 0 },
+ { LC_EDIT_MOVE_SNAP_5, "Move Snap 5", 0, LC_KEY_5, 0 },
+ { LC_EDIT_MOVE_SNAP_6, "Move Snap 6", 0, LC_KEY_6, 0 },
+ { LC_EDIT_MOVE_SNAP_7, "Move Snap 7", 0, LC_KEY_7, 0 },
+ { LC_EDIT_MOVE_SNAP_8, "Move Snap 8", 0, LC_KEY_8, 0 },
+ { LC_EDIT_MOVE_SNAP_9, "Move Snap 9", 0, LC_KEY_9, 0 },
+ { LC_EDIT_ANGLE_SNAP_0, "Angle Snap 1", LC_KEYMOD1_SHIFT, LC_KEY_0, 0 },
+ { LC_EDIT_ANGLE_SNAP_1, "Angle Snap 5", LC_KEYMOD1_SHIFT, LC_KEY_1, 0 },
+ { LC_EDIT_ANGLE_SNAP_2, "Angle Snap 10", LC_KEYMOD1_SHIFT, LC_KEY_2, 0 },
+ { LC_EDIT_ANGLE_SNAP_3, "Angle Snap 15", LC_KEYMOD1_SHIFT, LC_KEY_3, 0 },
+ { LC_EDIT_ANGLE_SNAP_4, "Angle Snap 30", LC_KEYMOD1_SHIFT, LC_KEY_4, 0 },
+ { LC_EDIT_ANGLE_SNAP_5, "Angle Snap 45", LC_KEYMOD1_SHIFT, LC_KEY_5, 0 },
+ { LC_EDIT_ANGLE_SNAP_6, "Angle Snap 60", LC_KEYMOD1_SHIFT, LC_KEY_6, 0 },
+ { LC_EDIT_ANGLE_SNAP_7, "Angle Snap 90", LC_KEYMOD1_SHIFT, LC_KEY_7, 0 },
+ { LC_EDIT_ANGLE_SNAP_8, "Angle Snap 180", LC_KEYMOD1_SHIFT, LC_KEY_8, 0 },
};
const int KeyboardShortcutsCount = sizeof(DefaultKeyboardShortcuts)/sizeof(KeyboardShortcuts[0]);
diff --git a/common/project.cpp b/common/project.cpp
index 2729f53..884c7b1 100644
--- a/common/project.cpp
+++ b/common/project.cpp
@@ -1496,7 +1496,7 @@ bool Project::DoSave(char* lpszPathName, bool bReplace)
pPiece->GetRotation(rotation);
Matrix mat(rotation, position);
mat.ToLDraw(f);
- sprintf (buf, " 1 %d %.2g %.2g %.2g %.2g %.2g %.2g %.2g %.2g %.2g %.2g %.2g %.2g %s.DAT\r\n",
+ sprintf (buf, " 1 %d %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %s.DAT\r\n",
col[pPiece->GetColor()], f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7], f[8], f[9], f[10], f[11], pPiece->GetPieceInfo()->m_strName);
file.Write(buf, strlen(buf));
}
@@ -6011,6 +6011,41 @@ void Project::HandleCommand(LC_COMMANDS id, unsigned long nParam)
SystemUpdateFocus(NULL);
} break;
+ case LC_VIEW_CAMERA_FRONT:
+ {
+ HandleCommand(LC_VIEW_CAMERA_MENU, LC_CAMERA_FRONT);
+ } break;
+
+ case LC_VIEW_CAMERA_BACK:
+ {
+ HandleCommand(LC_VIEW_CAMERA_MENU, LC_CAMERA_BACK);
+ } break;
+
+ case LC_VIEW_CAMERA_TOP:
+ {
+ HandleCommand(LC_VIEW_CAMERA_MENU, LC_CAMERA_TOP);
+ } break;
+
+ case LC_VIEW_CAMERA_BOTTOM:
+ {
+ HandleCommand(LC_VIEW_CAMERA_MENU, LC_CAMERA_UNDER);
+ } break;
+
+ case LC_VIEW_CAMERA_LEFT:
+ {
+ HandleCommand(LC_VIEW_CAMERA_MENU, LC_CAMERA_LEFT);
+ } break;
+
+ case LC_VIEW_CAMERA_RIGHT:
+ {
+ HandleCommand(LC_VIEW_CAMERA_MENU, LC_CAMERA_RIGHT);
+ } break;
+
+ case LC_VIEW_CAMERA_MAIN:
+ {
+ HandleCommand(LC_VIEW_CAMERA_MENU, LC_CAMERA_MAIN);
+ } break;
+
case LC_VIEW_CAMERA_MENU:
{
Camera* pCamera = m_pCameras;
@@ -6214,6 +6249,75 @@ void Project::HandleCommand(LC_COMMANDS id, unsigned long nParam)
SystemUpdateRenderingMode((m_nDetail & LC_DET_BACKGROUND) != 0, (m_nDetail & LC_DET_FAST) != 0);
} break;
+
+ case LC_EDIT_MOVE_SNAP_0:
+ case LC_EDIT_MOVE_SNAP_1:
+ case LC_EDIT_MOVE_SNAP_2:
+ case LC_EDIT_MOVE_SNAP_3:
+ case LC_EDIT_MOVE_SNAP_4:
+ case LC_EDIT_MOVE_SNAP_5:
+ case LC_EDIT_MOVE_SNAP_6:
+ case LC_EDIT_MOVE_SNAP_7:
+ case LC_EDIT_MOVE_SNAP_8:
+ case LC_EDIT_MOVE_SNAP_9:
+ {
+ m_nMoveSnap = id - LC_EDIT_MOVE_SNAP_0;
+ SystemUpdateSnap(m_nMoveSnap, m_nAngleSnap);
+ } break;
+
+ case LC_EDIT_ANGLE_SNAP_0:
+ {
+ m_nAngleSnap = 1;
+ SystemUpdateSnap(m_nMoveSnap, m_nAngleSnap);
+ } break;
+
+ case LC_EDIT_ANGLE_SNAP_1:
+ {
+ m_nAngleSnap = 5;
+ SystemUpdateSnap(m_nMoveSnap, m_nAngleSnap);
+ } break;
+
+ case LC_EDIT_ANGLE_SNAP_2:
+ {
+ m_nAngleSnap = 10;
+ SystemUpdateSnap(m_nMoveSnap, m_nAngleSnap);
+ } break;
+
+ case LC_EDIT_ANGLE_SNAP_3:
+ {
+ m_nAngleSnap = 15;
+ SystemUpdateSnap(m_nMoveSnap, m_nAngleSnap);
+ } break;
+
+ case LC_EDIT_ANGLE_SNAP_4:
+ {
+ m_nAngleSnap = 30;
+ SystemUpdateSnap(m_nMoveSnap, m_nAngleSnap);
+ } break;
+
+ case LC_EDIT_ANGLE_SNAP_5:
+ {
+ m_nAngleSnap = 45;
+ SystemUpdateSnap(m_nMoveSnap, m_nAngleSnap);
+ } break;
+
+ case LC_EDIT_ANGLE_SNAP_6:
+ {
+ m_nAngleSnap = 60;
+ SystemUpdateSnap(m_nMoveSnap, m_nAngleSnap);
+ } break;
+
+ case LC_EDIT_ANGLE_SNAP_7:
+ {
+ m_nAngleSnap = 90;
+ SystemUpdateSnap(m_nMoveSnap, m_nAngleSnap);
+ } break;
+
+ case LC_EDIT_ANGLE_SNAP_8:
+ {
+ m_nAngleSnap = 180;
+ SystemUpdateSnap(m_nMoveSnap, m_nAngleSnap);
+ } break;
}
}
@@ -7019,76 +7123,10 @@ bool Project::OnKeyDown(char nKey, bool bControl, bool bShift)
{
m_nCurClipboard = nKey - 0x30;
SystemUpdatePaste(m_pClipboard[m_nCurClipboard] != NULL);
+ ret = true;
}
- else
- {
- if (bShift)
- {
- switch (nKey)
- {
- case '0': m_nAngleSnap = 1; break;
- case '1': m_nAngleSnap = 5; break;
- case '2': m_nAngleSnap = 10; break;
- case '3': m_nAngleSnap = 15; break;
- case '4': m_nAngleSnap = 30; break;
- case '5': m_nAngleSnap = 45; break;
- case '6': m_nAngleSnap = 60; break;
- case '7': m_nAngleSnap = 90; break;
- case '8': m_nAngleSnap = 180; break;
- }
- }
- else
- {
- m_nMoveSnap = nKey - 0x30;
- }
-
- SystemUpdateSnap(m_nMoveSnap, m_nAngleSnap);
- }
- ret = true;
} break;
- case 'F':
- if (!bControl)
- {
- HandleCommand(LC_VIEW_CAMERA_MENU, LC_CAMERA_FRONT);
- ret = true;
- } break;
- case 'B':
- if (!bControl)
- {
- HandleCommand(LC_VIEW_CAMERA_MENU, LC_CAMERA_BACK); break;
- ret = true;
- } break;
- case 'T':
- if (!bControl)
- {
- HandleCommand(LC_VIEW_CAMERA_MENU, LC_CAMERA_TOP); break;
- ret = true;
- } break;
- case 'U':
- if (!bControl)
- {
- HandleCommand(LC_VIEW_CAMERA_MENU, LC_CAMERA_UNDER); break;
- ret = true;
- } break;
- case 'L':
- if (!bControl)
- {
- HandleCommand(LC_VIEW_CAMERA_MENU, LC_CAMERA_LEFT); break;
- ret = true;
- } break;
- case 'R':
- if (!bControl)
- {
- HandleCommand(LC_VIEW_CAMERA_MENU, LC_CAMERA_RIGHT); break;
- ret = true;
- } break;
- case 'M':
- if (!bControl)
- {
- HandleCommand(LC_VIEW_CAMERA_MENU, LC_CAMERA_MAIN); break;
- ret = true;
- } break;
case KEY_PLUS: // case '+': case '=':
{
diff --git a/common/typedefs.h b/common/typedefs.h
index 0f15b6e..89df4d8 100644
--- a/common/typedefs.h
+++ b/common/typedefs.h
@@ -74,6 +74,13 @@ typedef enum {
LC_VIEW_STEP_DELETE,
LC_VIEW_STOP,
LC_VIEW_PLAY,
+ LC_VIEW_CAMERA_FRONT,
+ LC_VIEW_CAMERA_BACK,
+ LC_VIEW_CAMERA_TOP,
+ LC_VIEW_CAMERA_BOTTOM,
+ LC_VIEW_CAMERA_LEFT,
+ LC_VIEW_CAMERA_RIGHT,
+ LC_VIEW_CAMERA_MAIN,
LC_VIEW_CAMERA_MENU,
LC_VIEW_CAMERA_RESET,
LC_VIEW_AUTOPAN,
@@ -84,7 +91,26 @@ typedef enum {
LC_TOOLBAR_LOCKMENU,
LC_TOOLBAR_SNAPMOVEMENU,
LC_TOOLBAR_FASTRENDER,
- LC_TOOLBAR_BACKGROUND
+ LC_TOOLBAR_BACKGROUND,
+ LC_EDIT_MOVE_SNAP_0,
+ LC_EDIT_MOVE_SNAP_1,
+ LC_EDIT_MOVE_SNAP_2,
+ LC_EDIT_MOVE_SNAP_3,
+ LC_EDIT_MOVE_SNAP_4,
+ LC_EDIT_MOVE_SNAP_5,
+ LC_EDIT_MOVE_SNAP_6,
+ LC_EDIT_MOVE_SNAP_7,
+ LC_EDIT_MOVE_SNAP_8,
+ LC_EDIT_MOVE_SNAP_9,
+ LC_EDIT_ANGLE_SNAP_0,
+ LC_EDIT_ANGLE_SNAP_1,
+ LC_EDIT_ANGLE_SNAP_2,
+ LC_EDIT_ANGLE_SNAP_3,
+ LC_EDIT_ANGLE_SNAP_4,
+ LC_EDIT_ANGLE_SNAP_5,
+ LC_EDIT_ANGLE_SNAP_6,
+ LC_EDIT_ANGLE_SNAP_7,
+ LC_EDIT_ANGLE_SNAP_8,
} LC_COMMANDS;
typedef enum {
diff --git a/win/Bmpmenu.cpp b/win/Bmpmenu.cpp
index 2f0864e..67bfb0a 100644
--- a/win/Bmpmenu.cpp
+++ b/win/Bmpmenu.cpp
@@ -95,7 +95,8 @@ CBMPMenu::CBMPMenu()
m_bitmapBackground = RGB(192,192,192); //gray
m_bitmapBackgroundFlag=FALSE;
GetCPInfo(CP_ACP,&CPInfo);
- m_List.Create (IDB_VIEWPORTS, 41, 0, RGB (192,192,192));
+ if (!m_List.m_hImageList)
+ m_List.Create (IDB_VIEWPORTS, 41, 0, RGB (192,192,192));
}
CBMPMenu::~CBMPMenu()
@@ -1410,3 +1411,18 @@ BOOL CBMPMenu::ChangeMenuItemShortcut(const char *Shortcut, UINT nID)
return (CMenu::ModifyMenu(nID,mdata->nFlags,nID,(LPCTSTR)mdata));
}
+BOOL CBMPMenu::DeleteMenu(UINT nPosition, UINT nFlags)
+{
+ if (nFlags == MF_BYPOSITION)
+ m_MenuList.RemoveAt(nPosition);
+ else
+ {
+ int nLoc;
+
+ CBMPMenu *psubmenu = FindMenuOption(nPosition, nLoc);
+ if (psubmenu && nLoc >= 0)
+ psubmenu->m_MenuList.RemoveAt(nLoc);
+ }
+
+ return (CMenu::DeleteMenu(nPosition, nFlags));
+}
diff --git a/win/Bmpmenu.h b/win/Bmpmenu.h
index 8866ea7..bc17aa1 100644
--- a/win/Bmpmenu.h
+++ b/win/Bmpmenu.h
@@ -116,6 +116,7 @@ public:
BOOL AppendODMenuW(wchar_t *lpstrText, UINT nFlags = MF_OWNERDRAW, UINT nID = 0, int nIconNormal = -1); // Owner-Drawn Append
BOOL ChangeMenuItemShortcut(const char *Shortcut, UINT nID);
+ BOOL DeleteMenu(UINT nPosition, UINT nFlags);
BOOL ModifyODMenuA(const char *lpstrText,UINT nID=0,int nIconNormal=-1);
BOOL ModifyODMenuA(const char *lpstrText,const char *OptionText,int nIconNormal);
BOOL ModifyODMenuW(wchar_t *lpstrText,UINT nID=0,int nIconNormal=-1);
diff --git a/win/Mainfrm.cpp b/win/Mainfrm.cpp
index 3e4bdee..43d393f 100644
--- a/win/Mainfrm.cpp
+++ b/win/Mainfrm.cpp
@@ -1196,6 +1196,13 @@ void CMainFrame::UpdateMenuAccelerators()
ID_VIEW_STEP_DELETE, // LC_VIEW_STEP_DELETE
ID_ANIMATOR_STOP, // LC_VIEW_STOP
ID_ANIMATOR_PLAY, // LC_VIEW_PLAY
+ ID_CAMERA_FIRST + 0, // LC_VIEW_CAMERA_FRONT,
+ ID_CAMERA_FIRST + 1, // LC_VIEW_CAMERA_BACK,
+ ID_CAMERA_FIRST + 2, // LC_VIEW_CAMERA_TOP,
+ ID_CAMERA_FIRST + 3, // LC_VIEW_CAMERA_BOTTOM,
+ ID_CAMERA_FIRST + 4, // LC_VIEW_CAMERA_LEFT,
+ ID_CAMERA_FIRST + 5, // LC_VIEW_CAMERA_RIGHT,
+ ID_CAMERA_FIRST + 6, // LC_VIEW_CAMERA_MAIN,
0, // LC_VIEW_CAMERA_MENU
ID_VIEW_CAMERAS_RESET, // LC_VIEW_CAMERA_RESET
0, // LC_VIEW_AUTOPAN
@@ -1207,6 +1214,25 @@ void CMainFrame::UpdateMenuAccelerators()
0, // LC_TOOLBAR_SNAPMOVEMENU
0, // LC_TOOLBAR_FASTRENDER
0, // LC_TOOLBAR_BACKGROUND
+ 0, // LC_EDIT_MOVE_SNAP_0,
+ 0, // LC_EDIT_MOVE_SNAP_1,
+ 0, // LC_EDIT_MOVE_SNAP_2,
+ 0, // LC_EDIT_MOVE_SNAP_3,
+ 0, // LC_EDIT_MOVE_SNAP_4,
+ 0, // LC_EDIT_MOVE_SNAP_5,
+ 0, // LC_EDIT_MOVE_SNAP_6,
+ 0, // LC_EDIT_MOVE_SNAP_7,
+ 0, // LC_EDIT_MOVE_SNAP_8,
+ 0, // LC_EDIT_MOVE_SNAP_9,
+ 0, // LC_EDIT_ANGLE_SNAP_0,
+ 0, // LC_EDIT_ANGLE_SNAP_1,
+ 0, // LC_EDIT_ANGLE_SNAP_2,
+ 0, // LC_EDIT_ANGLE_SNAP_3,
+ 0, // LC_EDIT_ANGLE_SNAP_4,
+ 0, // LC_EDIT_ANGLE_SNAP_5,
+ 0, // LC_EDIT_ANGLE_SNAP_6,
+ 0, // LC_EDIT_ANGLE_SNAP_7,
+ 0, // LC_EDIT_ANGLE_SNAP_8,
};
m_bmpMenu.Attach(m_hMenuDefault);
diff --git a/win/System.cpp b/win/System.cpp
index af1710e..6d951ce 100644
--- a/win/System.cpp
+++ b/win/System.cpp
@@ -777,8 +777,6 @@ void SystemUpdateCameraMenu(Camera* pCamera)
CBMPMenu* pMainMenu = (CBMPMenu*)GetMainMenu(2)->GetSubMenu(13);
CMenu* pPopupMenu = menuPopups.GetSubMenu(1)->GetSubMenu(3);
Camera* pFirst = pCamera;
- char tmp[90];
- const char* s = "FBTULRM";
int i;
while (pMainMenu->GetMenuItemCount())
@@ -802,12 +800,10 @@ void SystemUpdateCameraMenu(Camera* pCamera)
pCamera = pFirst;
for (i = 0; pCamera && (i < 7); i++, pCamera = pCamera->m_pNext)
{
- strcpy(tmp, pCamera->GetName());
- strcat(tmp, "\t ");
- tmp[strlen(tmp)-1] = s[i];
+ pMainMenu->AppendODMenu(pCamera->GetName(), MF_ENABLED, i + ID_CAMERA_FIRST);
+ pPopupMenu->AppendMenu(MF_STRING, i + ID_CAMERA_FIRST, pCamera->GetName());
- pMainMenu->AppendODMenu(tmp, MF_ENABLED, i + ID_CAMERA_FIRST);
- pPopupMenu->AppendMenu(MF_STRING, i + ID_CAMERA_FIRST, tmp);
+ pMainMenu->ChangeMenuItemShortcut("str", i + ID_CAMERA_FIRST);
}
pMainMenu->AppendODMenu("", MF_SEPARATOR);
@@ -816,6 +812,8 @@ void SystemUpdateCameraMenu(Camera* pCamera)
pPopupMenu->AppendMenu(MF_STRING, ID_VIEW_CAMERAS_RESET, "Reset");
// pMainMenu->AppendODMenu("Adjust...\t", MF_ENABLED, ID_VIEW_VIEWPOINT);
// pPopupMenu->AppendODMenu("Adjust...\t", MF_ENABLED, ID_VIEW_VIEWPOINT);
+
+ ((CMainFrame*)AfxGetMainWnd())->UpdateMenuAccelerators();
}
extern UINT AFXAPI AfxGetFileTitle(LPCTSTR lpszPathName, LPTSTR lpszTitle, UINT nMax);