summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/keyboard.cpp44
-rw-r--r--common/keyboard.h14
-rw-r--r--win/Mainfrm.cpp43
-rw-r--r--win/Prefpage.cpp32
4 files changed, 82 insertions, 51 deletions
diff --git a/common/keyboard.cpp b/common/keyboard.cpp
index 0a83bc8..d056d7a 100644
--- a/common/keyboard.cpp
+++ b/common/keyboard.cpp
@@ -65,13 +65,13 @@ LC_KEYBOARD_COMMAND DefaultKeyboardShortcuts[] =
// { LC_VIEW_STEP_SET, "", 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_FRONT, "Camera Front", LC_KEYMOD_VIEWONLY, LC_KEY_F, 0 },
+ { LC_VIEW_CAMERA_BACK, "Camera Back", LC_KEYMOD_VIEWONLY, LC_KEY_B, 0 },
+ { LC_VIEW_CAMERA_TOP, "Camera Top", LC_KEYMOD_VIEWONLY, LC_KEY_T, 0 },
+ { LC_VIEW_CAMERA_BOTTOM, "Camera Bottom", LC_KEYMOD_VIEWONLY, LC_KEY_U, 0 },
+ { LC_VIEW_CAMERA_LEFT, "Camera Left", LC_KEYMOD_VIEWONLY, LC_KEY_L, 0 },
+ { LC_VIEW_CAMERA_RIGHT, "Camera Right", LC_KEYMOD_VIEWONLY, LC_KEY_R, 0 },
+ { LC_VIEW_CAMERA_MAIN, "Camera Main", LC_KEYMOD_VIEWONLY, LC_KEY_M, 0 },
// { LC_VIEW_CAMERA_MENU, "", 0, 0, 0 },
// { LC_VIEW_CAMERA_RESET, "", 0, 0, 0 },
// { LC_VIEW_AUTOPAN, "", 0, 0, 0 },
@@ -130,10 +130,10 @@ bool SaveKeyboardShortcuts(const char* FileName)
if (Cmd.Key1)
{
- if (Cmd.Modifiers & LC_KEYMOD1_SHIFT)
+ if (Cmd.Flags & LC_KEYMOD1_SHIFT)
str += "Shift+";
- if (Cmd.Modifiers & LC_KEYMOD1_CONTROL)
+ if (Cmd.Flags & LC_KEYMOD1_CONTROL)
str += "Ctrl+";
str += "\"";
@@ -145,10 +145,10 @@ bool SaveKeyboardShortcuts(const char* FileName)
{
str += ",";
- if (Cmd.Modifiers & LC_KEYMOD2_SHIFT)
+ if (Cmd.Flags & LC_KEYMOD2_SHIFT)
str += "Shift+";
- if (Cmd.Modifiers & LC_KEYMOD2_CONTROL)
+ if (Cmd.Flags & LC_KEYMOD2_CONTROL)
str += "Ctrl+";
str += "\"";
@@ -179,7 +179,7 @@ bool LoadKeyboardShortcuts(const char* FileName)
Cmd.Key1 = 0;
Cmd.Key2 = 0;
- Cmd.Modifiers = 0;
+ Cmd.Flags = DefaultKeyboardShortcuts[i].Flags & ~LC_KEYMOD_MASK;
}
char Line[1024];
@@ -203,13 +203,13 @@ bool LoadKeyboardShortcuts(const char* FileName)
if (!strncmp(ptr, "Shift+", 6))
{
- Cmd.Modifiers |= LC_KEYMOD1_SHIFT;
+ Cmd.Flags |= LC_KEYMOD1_SHIFT;
ptr += 6;
}
if (!strncmp(ptr, "Ctrl+", 5))
{
- Cmd.Modifiers |= LC_KEYMOD1_CONTROL;
+ Cmd.Flags |= LC_KEYMOD1_CONTROL;
ptr += 5;
}
@@ -218,8 +218,8 @@ bool LoadKeyboardShortcuts(const char* FileName)
if (ptr2 == NULL)
{
- Cmd.Modifiers = 0;
- continue;
+ Cmd.Flags &= ~(LC_KEYMOD1_SHIFT | LC_KEYMOD1_CONTROL);
+ break;
}
*ptr2 = 0;
@@ -228,18 +228,18 @@ bool LoadKeyboardShortcuts(const char* FileName)
ptr = ptr2 + 1;
if (*ptr != ',')
- continue;
+ break;
ptr++;
if (!strncmp(ptr, "Shift+", 6))
{
- Cmd.Modifiers |= LC_KEYMOD2_SHIFT;
+ Cmd.Flags |= LC_KEYMOD2_SHIFT;
ptr += 6;
}
if (!strncmp(ptr, "Ctrl+", 5))
{
- Cmd.Modifiers |= LC_KEYMOD2_CONTROL;
+ Cmd.Flags |= LC_KEYMOD2_CONTROL;
ptr += 5;
}
@@ -248,12 +248,14 @@ bool LoadKeyboardShortcuts(const char* FileName)
if (ptr2 == NULL)
{
- Cmd.Modifiers &= ~(LC_KEYMOD2_SHIFT | LC_KEYMOD2_CONTROL);
- continue;
+ Cmd.Flags &= ~(LC_KEYMOD2_SHIFT | LC_KEYMOD2_CONTROL);
+ break;
}
*ptr2 = 0;
Cmd.Key2 = GetKeyFromName(ptr);
+
+ break;
}
}
diff --git a/common/keyboard.h b/common/keyboard.h
index 9151542..9d43f4a 100644
--- a/common/keyboard.h
+++ b/common/keyboard.h
@@ -117,14 +117,22 @@
#define LC_KEYMOD1_SHIFT 0x01
#define LC_KEYMOD1_CONTROL 0x02
-#define LC_KEYMOD2_SHIFT 0x10
-#define LC_KEYMOD2_CONTROL 0x20
+#define LC_KEYMOD2_SHIFT 0x04
+#define LC_KEYMOD2_CONTROL 0x08
+#define LC_KEYMOD_VIEWONLY 0x10
+
+#define LC_KEYMOD1_MASK (LC_KEYMOD1_SHIFT | LC_KEYMOD1_CONTROL)
+#define LC_KEYMOD2_MASK (LC_KEYMOD2_SHIFT | LC_KEYMOD2_CONTROL)
+#define LC_KEYMOD_MASK (LC_KEYMOD1_MASK | LC_KEYMOD2_MASK)
+
+#define LC_KEYMOD_1TO2(a) ((a & ~LC_KEYMOD_MASK) | ((a & LC_KEYMOD1_MASK) << 2))
+#define LC_KEYMOD_2TO1(a) ((a & ~LC_KEYMOD_MASK) | ((a & LC_KEYMOD2_MASK) >> 2))
typedef struct
{
LC_COMMANDS ID;
const char* Description;
- unsigned char Modifiers;
+ unsigned char Flags;
unsigned char Key1;
unsigned char Key2;
} LC_KEYBOARD_COMMAND;
diff --git a/win/Mainfrm.cpp b/win/Mainfrm.cpp
index 43d393f..bc80225 100644
--- a/win/Mainfrm.cpp
+++ b/win/Mainfrm.cpp
@@ -65,6 +65,8 @@ static void mainframe_console_func (LC_CONSOLE_LEVEL level, const char* text, vo
break;
}
+ ctrl.SetRedraw(FALSE);
+
// select the last line
line = ctrl.GetLineCount ();
index = ctrl.LineIndex (line - 1);
@@ -83,6 +85,7 @@ static void mainframe_console_func (LC_CONSOLE_LEVEL level, const char* text, vo
index = ctrl.LineIndex (line - 1);
ctrl.SetSel (index, index);
+ ctrl.SetRedraw(TRUE);
ctrl.InvalidateRect(NULL, FALSE);
}
@@ -1108,14 +1111,32 @@ BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
bool Control = GetKeyState(VK_CONTROL) < 0;
bool Shift = GetKeyState(VK_SHIFT) < 0;
+ // Don't process key presses if the user is typing text.
+ if (m_wndPiecesBar.m_wndPiecesCombo.IsChild(GetFocus()) ||
+ m_wndPiecesBar.m_wndPiecesList.IsChild(GetFocus()))
+ {
+ if (!Control && (((pMsg->wParam >= 'A') && (pMsg->wParam <= 'Z')) || ((pMsg->wParam >= '0') && (pMsg->wParam <= '9'))))
+ {
+ return CFrameWnd::PreTranslateMessage(pMsg);
+ }
+ }
+
for (int i = 0; i < KeyboardShortcutsCount; i++)
{
LC_KEYBOARD_COMMAND& Cmd = KeyboardShortcuts[i];
+ if (Cmd.Flags & LC_KEYMOD_VIEWONLY)
+ {
+ if (GetFocus() != GetActiveView())
+ {
+ break;
+ }
+ }
+
if (pMsg->wParam == Cmd.Key1)
{
- if ((Shift == ((Cmd.Modifiers & LC_KEYMOD1_SHIFT) != 0)) &&
- (Control == ((Cmd.Modifiers & LC_KEYMOD1_CONTROL) != 0)))
+ if ((Shift == ((Cmd.Flags & LC_KEYMOD1_SHIFT) != 0)) &&
+ (Control == ((Cmd.Flags & LC_KEYMOD1_CONTROL) != 0)))
{
project->HandleCommand(Cmd.ID, 0);
return true;
@@ -1124,8 +1145,8 @@ BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
if (pMsg->wParam == Cmd.Key2)
{
- if ((Shift == ((Cmd.Modifiers & LC_KEYMOD2_SHIFT) != 0)) &&
- (Control == ((Cmd.Modifiers & LC_KEYMOD2_CONTROL) != 0)))
+ if ((Shift == ((Cmd.Flags & LC_KEYMOD2_SHIFT) != 0)) &&
+ (Control == ((Cmd.Flags & LC_KEYMOD2_CONTROL) != 0)))
{
project->HandleCommand(Cmd.ID, 0);
return true;
@@ -1140,7 +1161,7 @@ BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
void CMainFrame::UpdateMenuAccelerators()
{
- DWORD CmdToID[] =
+ WORD CmdToID[] =
{
ID_FILE_NEW, // LC_FILE_NEW
ID_FILE_OPEN, // LC_FILE_OPEN
@@ -1240,7 +1261,7 @@ void CMainFrame::UpdateMenuAccelerators()
for (int i = 0; i < KeyboardShortcutsCount; i++)
{
LC_KEYBOARD_COMMAND& Cmd = KeyboardShortcuts[i];
- DWORD ID = CmdToID[Cmd.ID];
+ WORD ID = CmdToID[Cmd.ID];
String str;
if (ID == 0)
@@ -1248,21 +1269,21 @@ void CMainFrame::UpdateMenuAccelerators()
if (Cmd.Key1)
{
- if (Cmd.Modifiers & LC_KEYMOD1_SHIFT)
+ if (Cmd.Flags & LC_KEYMOD1_SHIFT)
str += "Shift+";
- if (Cmd.Modifiers & LC_KEYMOD1_CONTROL)
+ if (Cmd.Flags & LC_KEYMOD1_CONTROL)
str += "Ctrl+";
str += GetKeyName(Cmd.Key1);
if (Cmd.Key2)
{
- str += ",";
- if (Cmd.Modifiers & LC_KEYMOD2_SHIFT)
+ str += ", ";
+ if (Cmd.Flags & LC_KEYMOD2_SHIFT)
str += "Shift+";
- if (Cmd.Modifiers & LC_KEYMOD2_CONTROL)
+ if (Cmd.Flags & LC_KEYMOD2_CONTROL)
str += "Ctrl+";
str += GetKeyName(Cmd.Key2);
diff --git a/win/Prefpage.cpp b/win/Prefpage.cpp
index adb1594..c9f25b1 100644
--- a/win/Prefpage.cpp
+++ b/win/Prefpage.cpp
@@ -784,14 +784,14 @@ void CPreferencesKeyboard::OnKeydlgRemove()
if (Sel == 0)
{
- Cmd.Modifiers >>= 4;
+ Cmd.Flags = LC_KEYMOD_2TO1(Cmd.Flags);
Cmd.Key1 = Cmd.Key2;
Cmd.Key2 = 0;
}
else
{
Cmd.Key2 = 0;
- Cmd.Modifiers &= 0x0f;
+ Cmd.Flags &= ~LC_KEYMOD2_MASK;
}
OnSelchangeKeydlgCmdlist();
@@ -812,8 +812,8 @@ void CPreferencesKeyboard::OnKeydlgAssign()
if (Cmd.Key1 == m_Edit.m_Key)
{
- if ((((Cmd.Modifiers & LC_KEYMOD1_SHIFT) != 0) == m_Edit.m_Shift) &&
- (((Cmd.Modifiers & LC_KEYMOD1_CONTROL) != 0) == m_Edit.m_Control))
+ if ((((Cmd.Flags & LC_KEYMOD1_SHIFT) != 0) == m_Edit.m_Shift) &&
+ (((Cmd.Flags & LC_KEYMOD1_CONTROL) != 0) == m_Edit.m_Control))
{
Match = 1;
}
@@ -821,8 +821,8 @@ void CPreferencesKeyboard::OnKeydlgAssign()
if (Cmd.Key2 == m_Edit.m_Key)
{
- if ((((Cmd.Modifiers & LC_KEYMOD2_SHIFT) != 0) == m_Edit.m_Shift) &&
- (((Cmd.Modifiers & LC_KEYMOD2_CONTROL) != 0) == m_Edit.m_Control))
+ if ((((Cmd.Flags & LC_KEYMOD2_SHIFT) != 0) == m_Edit.m_Shift) &&
+ (((Cmd.Flags & LC_KEYMOD2_CONTROL) != 0) == m_Edit.m_Control))
{
Match = 2;
}
@@ -844,14 +844,14 @@ void CPreferencesKeyboard::OnKeydlgAssign()
// Remove old shortcut.
if (Match == 1)
{
- Cmd.Modifiers >>= 4;
+ Cmd.Flags = LC_KEYMOD_2TO1(Cmd.Flags);
Cmd.Key1 = Cmd.Key2;
Cmd.Key2 = 0;
}
else
{
Cmd.Key2 = 0;
- Cmd.Modifiers |= 0x0f;
+ Cmd.Flags &= ~LC_KEYMOD2_MASK;
}
}
}
@@ -865,20 +865,20 @@ void CPreferencesKeyboard::OnKeydlgAssign()
Cmd.Key1 = m_Edit.m_Key;
if (m_Edit.m_Shift)
- Cmd.Modifiers |= LC_KEYMOD1_SHIFT;
+ Cmd.Flags |= LC_KEYMOD1_SHIFT;
if (m_Edit.m_Control)
- Cmd.Modifiers |= LC_KEYMOD1_CONTROL;
+ Cmd.Flags |= LC_KEYMOD1_CONTROL;
}
else
{
Cmd.Key2 = m_Edit.m_Key;
if (m_Edit.m_Shift)
- Cmd.Modifiers |= LC_KEYMOD2_SHIFT;
+ Cmd.Flags |= LC_KEYMOD2_SHIFT;
if (m_Edit.m_Control)
- Cmd.Modifiers |= LC_KEYMOD2_CONTROL;
+ Cmd.Flags |= LC_KEYMOD2_CONTROL;
}
m_Edit.ResetKey();
@@ -903,10 +903,10 @@ void CPreferencesKeyboard::OnSelchangeKeydlgCmdlist()
{
CString str;
- if (Cmd.Modifiers & LC_KEYMOD1_SHIFT)
+ if (Cmd.Flags & LC_KEYMOD1_SHIFT)
str = "Shift+";
- if (Cmd.Modifiers & LC_KEYMOD1_CONTROL)
+ if (Cmd.Flags & LC_KEYMOD1_CONTROL)
str += "Ctrl+";
str += GetKeyName(Cmd.Key1);
@@ -919,10 +919,10 @@ void CPreferencesKeyboard::OnSelchangeKeydlgCmdlist()
{
str = "";
- if (Cmd.Modifiers & LC_KEYMOD2_SHIFT)
+ if (Cmd.Flags & LC_KEYMOD2_SHIFT)
str = "Shift+";
- if (Cmd.Modifiers & LC_KEYMOD2_CONTROL)
+ if (Cmd.Flags & LC_KEYMOD2_CONTROL)
str += "Ctrl+";
str += GetKeyName(Cmd.Key2);