123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- #include "BFWindow.h"
- #include "gfx/RenderDevice.h"
- USING_NS_BF;
- BFMenu::BFMenu()
- {
- mParent = NULL;
- mKeyCode = 0;
- mKeyCtrl = 0;
- mKeyAlt = 0;
- mKeyShift = 0;
- }
- struct BFNamedVirtKey
- {
- public:
- const char* mName;
- int mKeyCode;
- };
- #define VK_SPACE 0x20
- #define VK_PRIOR 0x21
- #define VK_NEXT 0x22
- #define VK_END 0x23
- #define VK_HOME 0x24
- #define VK_LEFT 0x25
- #define VK_UP 0x26
- #define VK_RIGHT 0x27
- #define VK_DOWN 0x28
- #define VK_SELECT 0x29
- #define VK_PRINT 0x2A
- #define VK_EXECUTE 0x2B
- #define VK_SNAPSHOT 0x2C
- #define VK_INSERT 0x2D
- #define VK_DELETE 0x2E
- #define VK_HELP 0x2F
- #define VK_F1 0x70
- #define VK_F2 0x71
- #define VK_F3 0x72
- #define VK_F4 0x73
- #define VK_F5 0x74
- #define VK_F6 0x75
- #define VK_F7 0x76
- #define VK_F8 0x77
- #define VK_F9 0x78
- #define VK_F10 0x79
- #define VK_F11 0x7A
- #define VK_F12 0x7B
- #define VK_SEMICOLON 0xBA
- #define VK_EQUALS 0xBB
- #define VK_COMMA 0xBC
- #define VK_MINUS 0xBD
- #define VK_PERIOD 0xBE
- #define VK_SLASH 0xBF
- #define VK_GRAVE 0xC0
- #define VK_LBRACKET 0xDB
- #define VK_BACKSLASH 0xDC
- #define VK_RBRACKET 0xDD
- #define VK_APOSTROPHE 0xDE
- #define VK_BACKTICK 0xDF
- #define VK_PAUSE 0x13
- #define VK_CANCEL 0x03
- static BFNamedVirtKey gNamedKeys[] =
- {{"F1", VK_F1}, {"F2", VK_F2}, {"F3", VK_F3}, {"F4", VK_F4}, {"F5", VK_F5}, {"F6", VK_F6},
- {"F7", VK_F7}, {"F8", VK_F8}, {"F9", VK_F9}, {"F10", VK_F10}, {"F11", VK_F11}, {"F12", VK_F12},
- {"INSERT", VK_INSERT}, {"INSERT", VK_INSERT}, {"DE", VK_DELETE}, {"DELETE", VK_DELETE},
- {"BREAK", VK_PAUSE},
- {"HOME", VK_HOME}, {"END", VK_END}, {"PGUP", VK_PRIOR}, {"PAGEUP", VK_PRIOR}, {"PGDN", VK_NEXT}, {"PAGEDN", VK_NEXT}, {"PAGEDOWN", VK_NEXT},
- {"UP", VK_UP}, {"LEFT", VK_LEFT}, {"RIGHT", VK_RIGHT}, {"DOWN", VK_DOWN}
- };
- bool BFMenu::ParseHotKey(const StringImpl& hotKey)
- {
- String aHotKey = ToUpper(hotKey);
- if (aHotKey.StartsWith("#"))
- return false;
-
- while (true)
- {
- int idx = (int)aHotKey.IndexOf('+');
- if (idx == -1)
- idx = (int)aHotKey.IndexOf('-');
- if (idx == -1)
- break;
- String aModifier = Trim(aHotKey.Substring(0, idx));
- aHotKey = Trim(aHotKey.Substring(idx + 1));
- if (aModifier == "SHIFT")
- mKeyShift = true;
- else if (aModifier == "CTRL")
- mKeyCtrl = true;
- else if (aModifier == "ALT")
- mKeyAlt = true;
- else
- {
- BF_FATAL("Unknown hotkey modifier");
- return false;
- }
- }
- if (aHotKey.length() == 1)
- {
- if (aHotKey == ",")
- mKeyCode = /*VK_COMMA*/0xBC;
- else
- mKeyCode = (int) aHotKey[0];
- return true;
- }
- int count = sizeof(gNamedKeys) / sizeof(BFNamedVirtKey);
- for (int i = 0; i < count; i++)
- {
- if (aHotKey == gNamedKeys[i].mName)
- {
- mKeyCode = gNamedKeys[i].mKeyCode;
- if ((mKeyCode == VK_PAUSE) && (mKeyCtrl))
- {
- // Ctrl-Pause is really "Cancel"
- mKeyCode = VK_CANCEL;
- }
- return true;
- }
- }
- BF_FATAL("Unknown hotkey key name");
- return false;
- }
- ///
- BFWindow::BFWindow()
- {
- mParent = NULL;
- mMenu = NULL;
- mRenderWindow = NULL;
- mNonExclusiveMouseCapture = false;
- mParent = NULL;
- mMovedFunc = NULL;
- mCloseQueryFunc = NULL;
- mClosedFunc = NULL;
- mGotFocusFunc = NULL;
- mLostFocusFunc = NULL;
- mKeyCharFunc = NULL;
- mKeyDownFunc = NULL;
- mKeyUpFunc = NULL;
- mMouseMoveFunc = NULL;
- mMouseProxyMoveFunc = NULL;
- mMouseDownFunc = NULL;
- mMouseUpFunc = NULL;
- mMouseWheelFunc = NULL;
- mMouseLeaveFunc = NULL;
- mMenuItemSelectedFunc = NULL;
- mDragDropFileFunc = NULL;
- mHitTestFunc = NULL;
- mFlags = 0;
- for (int i = 0; i < KEYCODE_MAX; i++)
- mIsKeyDown[i] = false;
- for (int i = 0; i < MOUSEBUTTON_MAX; i++)
- {
- mIsMouseDown[i] = false;
- mMouseClickCount[i] = 0;
- mMouseDownTicks[i] = 0;
- mMouseDownCoords[i] = { -1, -1 };
- }
- }
- BFWindow::~BFWindow()
- {
- delete mRenderWindow;
- delete mMenu;
- }
|