1. implemented wxRegKey::Copy() and CopyValue()
2. regtest sample doesn't crash any more 3. wxLogGui uses msg box for only 1 message 4. "const wxEventType" => "enum" 5. wxEVT_COMMAND_TREE_END_DRAG introduced - see sample for example 6. fixed several non fatal bugs in wxRegKey 7. many changes in regtest sample, not tested yet git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@6017 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -42,489 +42,229 @@ class WXDLLEXPORT wxList;
|
||||
// Event types
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
typedef int wxEventType;
|
||||
|
||||
#if defined(__VISAGECPP__) && __IBMCPP__ >= 400
|
||||
// must define these static for VA or else you get multiply defined symbols everywhere
|
||||
extern const wxEventType wxEVT_NULL;
|
||||
extern const wxEventType wxEVT_FIRST;
|
||||
|
||||
extern const wxEventType wxEVT_COMMAND_BUTTON_CLICKED;
|
||||
extern const wxEventType wxEVT_COMMAND_CHECKBOX_CLICKED;
|
||||
extern const wxEventType wxEVT_COMMAND_CHOICE_SELECTED;
|
||||
extern const wxEventType wxEVT_COMMAND_LISTBOX_SELECTED;
|
||||
extern const wxEventType wxEVT_COMMAND_LISTBOX_DOUBLECLICKED;
|
||||
extern const wxEventType wxEVT_COMMAND_CHECKLISTBOX_TOGGLED;
|
||||
extern const wxEventType wxEVT_COMMAND_TEXT_UPDATED;
|
||||
extern const wxEventType wxEVT_COMMAND_TEXT_ENTER;
|
||||
extern const wxEventType wxEVT_COMMAND_MENU_SELECTED;
|
||||
extern const wxEventType wxEVT_COMMAND_TOOL_CLICKED;
|
||||
extern const wxEventType wxEVT_COMMAND_SLIDER_UPDATED;
|
||||
extern const wxEventType wxEVT_COMMAND_RADIOBOX_SELECTED;
|
||||
extern const wxEventType wxEVT_COMMAND_RADIOBUTTON_SELECTED;
|
||||
extern const wxEventType wxEVT_COMMAND_SCROLLBAR_UPDATED;
|
||||
extern const wxEventType wxEVT_COMMAND_VLBOX_SELECTED;
|
||||
extern const wxEventType wxEVT_COMMAND_COMBOBOX_SELECTED;
|
||||
extern const wxEventType wxEVT_COMMAND_TOOL_RCLICKED;
|
||||
extern const wxEventType wxEVT_COMMAND_TOOL_ENTER;
|
||||
extern const wxEventType wxEVT_COMMAND_SPINCTRL_UPDATED;
|
||||
|
||||
/* Sockets and timers send events, too */
|
||||
extern const wxEventType wxEVT_SOCKET;
|
||||
extern const wxEventType wxEVT_TIMER;
|
||||
|
||||
/* Mouse event types */
|
||||
extern const wxEventType wxEVT_LEFT_DOWN;
|
||||
extern const wxEventType wxEVT_LEFT_UP;
|
||||
extern const wxEventType wxEVT_MIDDLE_DOWN;
|
||||
extern const wxEventType wxEVT_MIDDLE_UP;
|
||||
extern const wxEventType wxEVT_RIGHT_DOWN;
|
||||
extern const wxEventType wxEVT_RIGHT_UP;
|
||||
extern const wxEventType wxEVT_MOTION;
|
||||
extern const wxEventType wxEVT_ENTER_WINDOW;
|
||||
extern const wxEventType wxEVT_LEAVE_WINDOW;
|
||||
extern const wxEventType wxEVT_LEFT_DCLICK;
|
||||
extern const wxEventType wxEVT_MIDDLE_DCLICK;
|
||||
extern const wxEventType wxEVT_RIGHT_DCLICK;
|
||||
extern const wxEventType wxEVT_SET_FOCUS;
|
||||
extern const wxEventType wxEVT_KILL_FOCUS;
|
||||
|
||||
/* Non-client mouse events */
|
||||
extern const wxEventType wxEVT_NC_LEFT_DOWN;
|
||||
extern const wxEventType wxEVT_NC_LEFT_UP;
|
||||
extern const wxEventType wxEVT_NC_MIDDLE_DOWN;
|
||||
extern const wxEventType wxEVT_NC_MIDDLE_UP;
|
||||
extern const wxEventType wxEVT_NC_RIGHT_DOWN;
|
||||
extern const wxEventType wxEVT_NC_RIGHT_UP;
|
||||
extern const wxEventType wxEVT_NC_MOTION;
|
||||
extern const wxEventType wxEVT_NC_ENTER_WINDOW;
|
||||
extern const wxEventType wxEVT_NC_LEAVE_WINDOW;
|
||||
extern const wxEventType wxEVT_NC_LEFT_DCLICK;
|
||||
extern const wxEventType wxEVT_NC_MIDDLE_DCLICK;
|
||||
extern const wxEventType wxEVT_NC_RIGHT_DCLICK;
|
||||
|
||||
/* Character input event type */
|
||||
extern const wxEventType wxEVT_CHAR;
|
||||
extern const wxEventType wxEVT_CHAR_HOOK;
|
||||
extern const wxEventType wxEVT_NAVIGATION_KEY;
|
||||
extern const wxEventType wxEVT_KEY_DOWN;
|
||||
extern const wxEventType wxEVT_KEY_UP;
|
||||
|
||||
/*
|
||||
* wxScrollbar and wxSlider event identifiers
|
||||
*/
|
||||
extern const wxEventType wxEVT_SCROLL_TOP;
|
||||
extern const wxEventType wxEVT_SCROLL_BOTTOM;
|
||||
extern const wxEventType wxEVT_SCROLL_LINEUP;
|
||||
extern const wxEventType wxEVT_SCROLL_LINEDOWN;
|
||||
extern const wxEventType wxEVT_SCROLL_PAGEUP;
|
||||
extern const wxEventType wxEVT_SCROLL_PAGEDOWN;
|
||||
extern const wxEventType wxEVT_SCROLL_THUMBTRACK;
|
||||
extern const wxEventType wxEVT_SCROLL_THUMBRELEASE;
|
||||
|
||||
/*
|
||||
* Scroll events from wxWindow
|
||||
*/
|
||||
extern const wxEventType wxEVT_SCROLLWIN_TOP;
|
||||
extern const wxEventType wxEVT_SCROLLWIN_BOTTOM;
|
||||
extern const wxEventType wxEVT_SCROLLWIN_LINEUP;
|
||||
extern const wxEventType wxEVT_SCROLLWIN_LINEDOWN;
|
||||
extern const wxEventType wxEVT_SCROLLWIN_PAGEUP;
|
||||
extern const wxEventType wxEVT_SCROLLWIN_PAGEDOWN;
|
||||
extern const wxEventType wxEVT_SCROLLWIN_THUMBTRACK;
|
||||
extern const wxEventType wxEVT_SCROLLWIN_THUMBRELEASE;
|
||||
|
||||
/*
|
||||
* System events
|
||||
*/
|
||||
extern const wxEventType wxEVT_SIZE;
|
||||
extern const wxEventType wxEVT_MOVE;
|
||||
extern const wxEventType wxEVT_CLOSE_WINDOW;
|
||||
extern const wxEventType wxEVT_END_SESSION;
|
||||
extern const wxEventType wxEVT_QUERY_END_SESSION;
|
||||
extern const wxEventType wxEVT_ACTIVATE_APP;
|
||||
extern const wxEventType wxEVT_POWER;
|
||||
extern const wxEventType wxEVT_ACTIVATE;
|
||||
extern const wxEventType wxEVT_CREATE;
|
||||
extern const wxEventType wxEVT_DESTROY;
|
||||
extern const wxEventType wxEVT_SHOW;
|
||||
extern const wxEventType wxEVT_ICONIZE;
|
||||
extern const wxEventType wxEVT_MAXIMIZE;
|
||||
extern const wxEventType wxEVT_MOUSE_CAPTURE_CHANGED;
|
||||
extern const wxEventType wxEVT_PAINT;
|
||||
extern const wxEventType wxEVT_ERASE_BACKGROUND;
|
||||
extern const wxEventType wxEVT_NC_PAINT;
|
||||
extern const wxEventType wxEVT_PAINT_ICON;
|
||||
extern const wxEventType wxEVT_MENU_CHAR;
|
||||
extern const wxEventType wxEVT_MENU_INIT;
|
||||
extern const wxEventType wxEVT_MENU_HIGHLIGHT;
|
||||
extern const wxEventType wxEVT_POPUP_MENU_INIT;
|
||||
extern const wxEventType wxEVT_CONTEXT_MENU;
|
||||
extern const wxEventType wxEVT_SYS_COLOUR_CHANGED;
|
||||
extern const wxEventType wxEVT_SETTING_CHANGED;
|
||||
extern const wxEventType wxEVT_QUERY_NEW_PALETTE;
|
||||
extern const wxEventType wxEVT_PALETTE_CHANGED;
|
||||
extern const wxEventType wxEVT_JOY_BUTTON_DOWN;
|
||||
extern const wxEventType wxEVT_JOY_BUTTON_UP;
|
||||
extern const wxEventType wxEVT_JOY_MOVE;
|
||||
extern const wxEventType wxEVT_JOY_ZMOVE;
|
||||
extern const wxEventType wxEVT_DROP_FILES;
|
||||
extern const wxEventType wxEVT_DRAW_ITEM;
|
||||
extern const wxEventType wxEVT_MEASURE_ITEM;
|
||||
extern const wxEventType wxEVT_COMPARE_ITEM;
|
||||
extern const wxEventType wxEVT_INIT_DIALOG;
|
||||
extern const wxEventType wxEVT_IDLE;
|
||||
extern const wxEventType wxEVT_UPDATE_UI;
|
||||
|
||||
/* System misc. */
|
||||
extern const wxEventType wxEVT_END_PROCESS;
|
||||
|
||||
/* Dial up events */
|
||||
extern const wxEventType wxEVT_DIALUP_CONNECTED;
|
||||
extern const wxEventType wxEVT_DIALUP_DISCONNECTED;
|
||||
|
||||
/* Generic command events */
|
||||
/* Note: a click is a higher-level event than button down/up */
|
||||
extern const wxEventType wxEVT_COMMAND_LEFT_CLICK;
|
||||
extern const wxEventType wxEVT_COMMAND_LEFT_DCLICK;
|
||||
extern const wxEventType wxEVT_COMMAND_RIGHT_CLICK;
|
||||
extern const wxEventType wxEVT_COMMAND_RIGHT_DCLICK;
|
||||
extern const wxEventType wxEVT_COMMAND_SET_FOCUS;
|
||||
extern const wxEventType wxEVT_COMMAND_KILL_FOCUS;
|
||||
extern const wxEventType wxEVT_COMMAND_ENTER;
|
||||
|
||||
/* Tree control event types */
|
||||
extern const wxEventType wxEVT_COMMAND_TREE_BEGIN_DRAG;
|
||||
extern const wxEventType wxEVT_COMMAND_TREE_BEGIN_RDRAG;
|
||||
extern const wxEventType wxEVT_COMMAND_TREE_BEGIN_LABEL_EDIT;
|
||||
extern const wxEventType wxEVT_COMMAND_TREE_END_LABEL_EDIT;
|
||||
extern const wxEventType wxEVT_COMMAND_TREE_DELETE_ITEM;
|
||||
extern const wxEventType wxEVT_COMMAND_TREE_GET_INFO;
|
||||
extern const wxEventType wxEVT_COMMAND_TREE_SET_INFO;
|
||||
extern const wxEventType wxEVT_COMMAND_TREE_ITEM_EXPANDED;
|
||||
extern const wxEventType wxEVT_COMMAND_TREE_ITEM_EXPANDING;
|
||||
extern const wxEventType wxEVT_COMMAND_TREE_ITEM_COLLAPSED;
|
||||
extern const wxEventType wxEVT_COMMAND_TREE_ITEM_COLLAPSING;
|
||||
extern const wxEventType wxEVT_COMMAND_TREE_SEL_CHANGED;
|
||||
extern const wxEventType wxEVT_COMMAND_TREE_SEL_CHANGING;
|
||||
extern const wxEventType wxEVT_COMMAND_TREE_KEY_DOWN;
|
||||
extern const wxEventType wxEVT_COMMAND_TREE_ITEM_ACTIVATED;
|
||||
extern const wxEventType wxEVT_COMMAND_TREE_ITEM_RIGHT_CLICK;
|
||||
extern const wxEventType wxEVT_COMMAND_TREE_ITEM_MIDDLE_CLICK;
|
||||
|
||||
/* List control event types */
|
||||
extern const wxEventType wxEVT_COMMAND_LIST_BEGIN_DRAG;
|
||||
extern const wxEventType wxEVT_COMMAND_LIST_BEGIN_RDRAG;
|
||||
extern const wxEventType wxEVT_COMMAND_LIST_BEGIN_LABEL_EDIT;
|
||||
extern const wxEventType wxEVT_COMMAND_LIST_END_LABEL_EDIT;
|
||||
extern const wxEventType wxEVT_COMMAND_LIST_DELETE_ITEM;
|
||||
extern const wxEventType wxEVT_COMMAND_LIST_DELETE_ALL_ITEMS;
|
||||
extern const wxEventType wxEVT_COMMAND_LIST_GET_INFO;
|
||||
extern const wxEventType wxEVT_COMMAND_LIST_SET_INFO;
|
||||
extern const wxEventType wxEVT_COMMAND_LIST_ITEM_SELECTED;
|
||||
extern const wxEventType wxEVT_COMMAND_LIST_ITEM_DESELECTED;
|
||||
extern const wxEventType wxEVT_COMMAND_LIST_KEY_DOWN;
|
||||
extern const wxEventType wxEVT_COMMAND_LIST_INSERT_ITEM;
|
||||
extern const wxEventType wxEVT_COMMAND_LIST_COL_CLICK;
|
||||
extern const wxEventType wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK;
|
||||
extern const wxEventType wxEVT_COMMAND_LIST_ITEM_MIDDLE_CLICK;
|
||||
extern const wxEventType wxEVT_COMMAND_LIST_ITEM_ACTIVATED;
|
||||
|
||||
/* Tab and notebook control event types */
|
||||
extern const wxEventType wxEVT_COMMAND_TAB_SEL_CHANGED;
|
||||
extern const wxEventType wxEVT_COMMAND_TAB_SEL_CHANGING;
|
||||
extern const wxEventType wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED;
|
||||
extern const wxEventType wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING;
|
||||
|
||||
/* Splitter events */
|
||||
extern const wxEventType wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED;
|
||||
extern const wxEventType wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGING;
|
||||
extern const wxEventType wxEVT_COMMAND_SPLITTER_DOUBLECLICKED;
|
||||
extern const wxEventType wxEVT_COMMAND_SPLITTER_UNSPLIT;
|
||||
|
||||
/* Wizard events */
|
||||
extern const wxEventType wxEVT_WIZARD_PAGE_CHANGED;
|
||||
extern const wxEventType wxEVT_WIZARD_PAGE_CHANGING;
|
||||
extern const wxEventType wxEVT_WIZARD_CANCEL;
|
||||
|
||||
/* Calendar events */
|
||||
extern const wxEventType wxEVT_CALENDAR_SEL_CHANGED;
|
||||
extern const wxEventType wxEVT_CALENDAR_DAY_CHANGED;
|
||||
extern const wxEventType wxEVT_CALENDAR_MONTH_CHANGED;
|
||||
extern const wxEventType wxEVT_CALENDAR_YEAR_CHANGED;
|
||||
extern const wxEventType wxEVT_CALENDAR_DOUBLECLICKED;
|
||||
extern const wxEventType wxEVT_CALENDAR_WEEKDAY_CLICKED;
|
||||
|
||||
/* Plot events */
|
||||
extern const wxEventType wxEVT_PLOT_SEL_CHANGING;
|
||||
extern const wxEventType wxEVT_PLOT_SEL_CHANGED;
|
||||
extern const wxEventType wxEVT_PLOT_CLICKED;
|
||||
extern const wxEventType wxEVT_PLOT_DOUBLECLICKED;
|
||||
extern const wxEventType wxEVT_PLOT_ZOOM_IN;
|
||||
extern const wxEventType wxEVT_PLOT_ZOOM_OUT;
|
||||
extern const wxEventType wxEVT_PLOT_VALUE_SEL_CREATING;
|
||||
extern const wxEventType wxEVT_PLOT_VALUE_SEL_CREATED;
|
||||
extern const wxEventType wxEVT_PLOT_VALUE_SEL_CHANGING;
|
||||
extern const wxEventType wxEVT_PLOT_VALUE_SEL_CHANGED;
|
||||
extern const wxEventType wxEVT_PLOT_AREA_SEL_CREATING;
|
||||
extern const wxEventType wxEVT_PLOT_AREA_SEL_CREATED;
|
||||
extern const wxEventType wxEVT_PLOT_AREA_SEL_CHANGING;
|
||||
extern const wxEventType wxEVT_PLOT_AREA_SEL_CHANGED;
|
||||
extern const wxEventType wxEVT_PLOT_BEGIN_X_LABEL_EDIT;
|
||||
extern const wxEventType wxEVT_PLOT_END_X_LABEL_EDIT;
|
||||
extern const wxEventType wxEVT_PLOT_BEGIN_Y_LABEL_EDIT;
|
||||
extern const wxEventType wxEVT_PLOT_END_Y_LABEL_EDIT;
|
||||
extern const wxEventType wxEVT_PLOT_BEGIN_TITLE_EDIT;
|
||||
extern const wxEventType wxEVT_PLOT_END_TITLE_EDIT;
|
||||
|
||||
extern const wxEventType wxEVT_USER_FIRST;
|
||||
|
||||
#else // everybody else
|
||||
|
||||
const wxEventType wxEVT_NULL = 0;
|
||||
const wxEventType wxEVT_FIRST = 10000;
|
||||
|
||||
const wxEventType wxEVT_COMMAND_BUTTON_CLICKED = wxEVT_FIRST + 1;
|
||||
const wxEventType wxEVT_COMMAND_CHECKBOX_CLICKED = wxEVT_FIRST + 2;
|
||||
const wxEventType wxEVT_COMMAND_CHOICE_SELECTED = wxEVT_FIRST + 3;
|
||||
const wxEventType wxEVT_COMMAND_LISTBOX_SELECTED = wxEVT_FIRST + 4;
|
||||
const wxEventType wxEVT_COMMAND_LISTBOX_DOUBLECLICKED = wxEVT_FIRST + 5;
|
||||
const wxEventType wxEVT_COMMAND_CHECKLISTBOX_TOGGLED = wxEVT_FIRST + 6;
|
||||
const wxEventType wxEVT_COMMAND_TEXT_UPDATED = wxEVT_FIRST + 7;
|
||||
const wxEventType wxEVT_COMMAND_TEXT_ENTER = wxEVT_FIRST + 8;
|
||||
const wxEventType wxEVT_COMMAND_MENU_SELECTED = wxEVT_FIRST + 9;
|
||||
const wxEventType wxEVT_COMMAND_TOOL_CLICKED = wxEVT_COMMAND_MENU_SELECTED;
|
||||
const wxEventType wxEVT_COMMAND_SLIDER_UPDATED = wxEVT_FIRST + 10;
|
||||
const wxEventType wxEVT_COMMAND_RADIOBOX_SELECTED = wxEVT_FIRST + 11;
|
||||
const wxEventType wxEVT_COMMAND_RADIOBUTTON_SELECTED = wxEVT_FIRST + 12;
|
||||
//const wxEventType wxEVT_COMMAND_SCROLLBAR_UPDATED is now obsolete since we use wxEVT_SCROLL... events
|
||||
const wxEventType wxEVT_COMMAND_SCROLLBAR_UPDATED = wxEVT_FIRST + 13;
|
||||
const wxEventType wxEVT_COMMAND_VLBOX_SELECTED = wxEVT_FIRST + 14;
|
||||
const wxEventType wxEVT_COMMAND_COMBOBOX_SELECTED = wxEVT_FIRST + 15;
|
||||
const wxEventType wxEVT_COMMAND_TOOL_RCLICKED = wxEVT_FIRST + 16;
|
||||
const wxEventType wxEVT_COMMAND_TOOL_ENTER = wxEVT_FIRST + 17;
|
||||
const wxEventType wxEVT_COMMAND_SPINCTRL_UPDATED = wxEVT_FIRST + 18;
|
||||
|
||||
/* Sockets send events, too */
|
||||
const wxEventType wxEVT_SOCKET = wxEVT_FIRST + 50;
|
||||
|
||||
/* And timers do as well */
|
||||
const wxEventType wxEVT_TIMER = wxEVT_FIRST + 80;
|
||||
|
||||
/* Mouse event types */
|
||||
const wxEventType wxEVT_LEFT_DOWN = wxEVT_FIRST + 100;
|
||||
const wxEventType wxEVT_LEFT_UP = wxEVT_FIRST + 101;
|
||||
const wxEventType wxEVT_MIDDLE_DOWN = wxEVT_FIRST + 102;
|
||||
const wxEventType wxEVT_MIDDLE_UP = wxEVT_FIRST + 103;
|
||||
const wxEventType wxEVT_RIGHT_DOWN = wxEVT_FIRST + 104;
|
||||
const wxEventType wxEVT_RIGHT_UP = wxEVT_FIRST + 105;
|
||||
const wxEventType wxEVT_MOTION = wxEVT_FIRST + 106;
|
||||
const wxEventType wxEVT_ENTER_WINDOW = wxEVT_FIRST + 107;
|
||||
const wxEventType wxEVT_LEAVE_WINDOW = wxEVT_FIRST + 108;
|
||||
const wxEventType wxEVT_LEFT_DCLICK = wxEVT_FIRST + 109;
|
||||
const wxEventType wxEVT_MIDDLE_DCLICK = wxEVT_FIRST + 110;
|
||||
const wxEventType wxEVT_RIGHT_DCLICK = wxEVT_FIRST + 111;
|
||||
const wxEventType wxEVT_SET_FOCUS = wxEVT_FIRST + 112;
|
||||
const wxEventType wxEVT_KILL_FOCUS = wxEVT_FIRST + 113;
|
||||
|
||||
/* Non-client mouse events */
|
||||
const wxEventType wxEVT_NC_LEFT_DOWN = wxEVT_FIRST + 200;
|
||||
const wxEventType wxEVT_NC_LEFT_UP = wxEVT_FIRST + 201;
|
||||
const wxEventType wxEVT_NC_MIDDLE_DOWN = wxEVT_FIRST + 202;
|
||||
const wxEventType wxEVT_NC_MIDDLE_UP = wxEVT_FIRST + 203;
|
||||
const wxEventType wxEVT_NC_RIGHT_DOWN = wxEVT_FIRST + 204;
|
||||
const wxEventType wxEVT_NC_RIGHT_UP = wxEVT_FIRST + 205;
|
||||
const wxEventType wxEVT_NC_MOTION = wxEVT_FIRST + 206;
|
||||
const wxEventType wxEVT_NC_ENTER_WINDOW = wxEVT_FIRST + 207;
|
||||
const wxEventType wxEVT_NC_LEAVE_WINDOW = wxEVT_FIRST + 208;
|
||||
const wxEventType wxEVT_NC_LEFT_DCLICK = wxEVT_FIRST + 209;
|
||||
const wxEventType wxEVT_NC_MIDDLE_DCLICK = wxEVT_FIRST + 210;
|
||||
const wxEventType wxEVT_NC_RIGHT_DCLICK = wxEVT_FIRST + 211;
|
||||
|
||||
/* Character input event type */
|
||||
const wxEventType wxEVT_CHAR = wxEVT_FIRST + 212;
|
||||
const wxEventType wxEVT_CHAR_HOOK = wxEVT_FIRST + 213;
|
||||
const wxEventType wxEVT_NAVIGATION_KEY = wxEVT_FIRST + 214;
|
||||
const wxEventType wxEVT_KEY_DOWN = wxEVT_FIRST + 215;
|
||||
const wxEventType wxEVT_KEY_UP = wxEVT_FIRST + 216;
|
||||
|
||||
/*
|
||||
* wxScrollbar and wxSlider event identifiers
|
||||
*/
|
||||
const wxEventType wxEVT_SCROLL_TOP = wxEVT_FIRST + 300;
|
||||
const wxEventType wxEVT_SCROLL_BOTTOM = wxEVT_FIRST + 301;
|
||||
const wxEventType wxEVT_SCROLL_LINEUP = wxEVT_FIRST + 302;
|
||||
const wxEventType wxEVT_SCROLL_LINEDOWN = wxEVT_FIRST + 303;
|
||||
const wxEventType wxEVT_SCROLL_PAGEUP = wxEVT_FIRST + 304;
|
||||
const wxEventType wxEVT_SCROLL_PAGEDOWN = wxEVT_FIRST + 305;
|
||||
const wxEventType wxEVT_SCROLL_THUMBTRACK = wxEVT_FIRST + 306;
|
||||
const wxEventType wxEVT_SCROLL_THUMBRELEASE = wxEVT_FIRST + 307;
|
||||
|
||||
/*
|
||||
* Scroll events from wxWindow
|
||||
*/
|
||||
const wxEventType wxEVT_SCROLLWIN_TOP = wxEVT_FIRST + 320;
|
||||
const wxEventType wxEVT_SCROLLWIN_BOTTOM = wxEVT_FIRST + 321;
|
||||
const wxEventType wxEVT_SCROLLWIN_LINEUP = wxEVT_FIRST + 322;
|
||||
const wxEventType wxEVT_SCROLLWIN_LINEDOWN = wxEVT_FIRST + 323;
|
||||
const wxEventType wxEVT_SCROLLWIN_PAGEUP = wxEVT_FIRST + 324;
|
||||
const wxEventType wxEVT_SCROLLWIN_PAGEDOWN = wxEVT_FIRST + 325;
|
||||
const wxEventType wxEVT_SCROLLWIN_THUMBTRACK = wxEVT_FIRST + 326;
|
||||
const wxEventType wxEVT_SCROLLWIN_THUMBRELEASE = wxEVT_FIRST + 327;
|
||||
|
||||
/*
|
||||
* System events
|
||||
*/
|
||||
const wxEventType wxEVT_SIZE = wxEVT_FIRST + 400;
|
||||
const wxEventType wxEVT_MOVE = wxEVT_FIRST + 401;
|
||||
const wxEventType wxEVT_CLOSE_WINDOW = wxEVT_FIRST + 402;
|
||||
const wxEventType wxEVT_END_SESSION = wxEVT_FIRST + 403;
|
||||
const wxEventType wxEVT_QUERY_END_SESSION = wxEVT_FIRST + 404;
|
||||
const wxEventType wxEVT_ACTIVATE_APP = wxEVT_FIRST + 405;
|
||||
const wxEventType wxEVT_POWER = wxEVT_FIRST + 406;
|
||||
const wxEventType wxEVT_ACTIVATE = wxEVT_FIRST + 409;
|
||||
const wxEventType wxEVT_CREATE = wxEVT_FIRST + 410;
|
||||
const wxEventType wxEVT_DESTROY = wxEVT_FIRST + 411;
|
||||
const wxEventType wxEVT_SHOW = wxEVT_FIRST + 412;
|
||||
const wxEventType wxEVT_ICONIZE = wxEVT_FIRST + 413;
|
||||
const wxEventType wxEVT_MAXIMIZE = wxEVT_FIRST + 414;
|
||||
const wxEventType wxEVT_MOUSE_CAPTURE_CHANGED = wxEVT_FIRST + 415;
|
||||
const wxEventType wxEVT_PAINT = wxEVT_FIRST + 416;
|
||||
const wxEventType wxEVT_ERASE_BACKGROUND = wxEVT_FIRST + 417;
|
||||
const wxEventType wxEVT_NC_PAINT = wxEVT_FIRST + 418;
|
||||
const wxEventType wxEVT_PAINT_ICON = wxEVT_FIRST + 419;
|
||||
const wxEventType wxEVT_MENU_CHAR = wxEVT_FIRST + 420;
|
||||
const wxEventType wxEVT_MENU_INIT = wxEVT_FIRST + 421;
|
||||
const wxEventType wxEVT_MENU_HIGHLIGHT = wxEVT_FIRST + 422;
|
||||
const wxEventType wxEVT_POPUP_MENU_INIT = wxEVT_FIRST + 423;
|
||||
const wxEventType wxEVT_CONTEXT_MENU = wxEVT_FIRST + 424;
|
||||
const wxEventType wxEVT_SYS_COLOUR_CHANGED = wxEVT_FIRST + 425;
|
||||
const wxEventType wxEVT_SETTING_CHANGED = wxEVT_FIRST + 426;
|
||||
const wxEventType wxEVT_QUERY_NEW_PALETTE = wxEVT_FIRST + 427;
|
||||
const wxEventType wxEVT_PALETTE_CHANGED = wxEVT_FIRST + 428;
|
||||
const wxEventType wxEVT_JOY_BUTTON_DOWN = wxEVT_FIRST + 429;
|
||||
const wxEventType wxEVT_JOY_BUTTON_UP = wxEVT_FIRST + 430;
|
||||
const wxEventType wxEVT_JOY_MOVE = wxEVT_FIRST + 431;
|
||||
const wxEventType wxEVT_JOY_ZMOVE = wxEVT_FIRST + 432;
|
||||
const wxEventType wxEVT_DROP_FILES = wxEVT_FIRST + 433;
|
||||
const wxEventType wxEVT_DRAW_ITEM = wxEVT_FIRST + 434;
|
||||
const wxEventType wxEVT_MEASURE_ITEM = wxEVT_FIRST + 435;
|
||||
const wxEventType wxEVT_COMPARE_ITEM = wxEVT_FIRST + 436;
|
||||
const wxEventType wxEVT_INIT_DIALOG = wxEVT_FIRST + 437;
|
||||
const wxEventType wxEVT_IDLE = wxEVT_FIRST + 438;
|
||||
const wxEventType wxEVT_UPDATE_UI = wxEVT_FIRST + 439;
|
||||
|
||||
/* System misc. */
|
||||
const wxEventType wxEVT_END_PROCESS = wxEVT_FIRST + 440;
|
||||
|
||||
/* Dial up events */
|
||||
const wxEventType wxEVT_DIALUP_CONNECTED = wxEVT_FIRST + 450;
|
||||
const wxEventType wxEVT_DIALUP_DISCONNECTED = wxEVT_FIRST + 451;
|
||||
|
||||
/* Generic command events */
|
||||
/* Note: a click is a higher-level event than button down/up */
|
||||
const wxEventType wxEVT_COMMAND_LEFT_CLICK = wxEVT_FIRST + 500;
|
||||
const wxEventType wxEVT_COMMAND_LEFT_DCLICK = wxEVT_FIRST + 501;
|
||||
const wxEventType wxEVT_COMMAND_RIGHT_CLICK = wxEVT_FIRST + 502;
|
||||
const wxEventType wxEVT_COMMAND_RIGHT_DCLICK = wxEVT_FIRST + 503;
|
||||
const wxEventType wxEVT_COMMAND_SET_FOCUS = wxEVT_FIRST + 504;
|
||||
const wxEventType wxEVT_COMMAND_KILL_FOCUS = wxEVT_FIRST + 505;
|
||||
const wxEventType wxEVT_COMMAND_ENTER = wxEVT_FIRST + 506;
|
||||
|
||||
/* Tree control event types */
|
||||
const wxEventType wxEVT_COMMAND_TREE_BEGIN_DRAG = wxEVT_FIRST + 600;
|
||||
const wxEventType wxEVT_COMMAND_TREE_BEGIN_RDRAG = wxEVT_FIRST + 601;
|
||||
const wxEventType wxEVT_COMMAND_TREE_BEGIN_LABEL_EDIT = wxEVT_FIRST + 602;
|
||||
const wxEventType wxEVT_COMMAND_TREE_END_LABEL_EDIT = wxEVT_FIRST + 603;
|
||||
const wxEventType wxEVT_COMMAND_TREE_DELETE_ITEM = wxEVT_FIRST + 604;
|
||||
const wxEventType wxEVT_COMMAND_TREE_GET_INFO = wxEVT_FIRST + 605;
|
||||
const wxEventType wxEVT_COMMAND_TREE_SET_INFO = wxEVT_FIRST + 606;
|
||||
const wxEventType wxEVT_COMMAND_TREE_ITEM_EXPANDED = wxEVT_FIRST + 607;
|
||||
const wxEventType wxEVT_COMMAND_TREE_ITEM_EXPANDING = wxEVT_FIRST + 608;
|
||||
const wxEventType wxEVT_COMMAND_TREE_ITEM_COLLAPSED = wxEVT_FIRST + 609;
|
||||
const wxEventType wxEVT_COMMAND_TREE_ITEM_COLLAPSING = wxEVT_FIRST + 610;
|
||||
const wxEventType wxEVT_COMMAND_TREE_SEL_CHANGED = wxEVT_FIRST + 611;
|
||||
const wxEventType wxEVT_COMMAND_TREE_SEL_CHANGING = wxEVT_FIRST + 612;
|
||||
const wxEventType wxEVT_COMMAND_TREE_KEY_DOWN = wxEVT_FIRST + 613;
|
||||
const wxEventType wxEVT_COMMAND_TREE_ITEM_ACTIVATED = wxEVT_FIRST + 614;
|
||||
const wxEventType wxEVT_COMMAND_TREE_ITEM_RIGHT_CLICK = wxEVT_FIRST + 615;
|
||||
const wxEventType wxEVT_COMMAND_TREE_ITEM_MIDDLE_CLICK = wxEVT_FIRST + 616;
|
||||
|
||||
/* List control event types */
|
||||
const wxEventType wxEVT_COMMAND_LIST_BEGIN_DRAG = wxEVT_FIRST + 700;
|
||||
const wxEventType wxEVT_COMMAND_LIST_BEGIN_RDRAG = wxEVT_FIRST + 701;
|
||||
const wxEventType wxEVT_COMMAND_LIST_BEGIN_LABEL_EDIT = wxEVT_FIRST + 702;
|
||||
const wxEventType wxEVT_COMMAND_LIST_END_LABEL_EDIT = wxEVT_FIRST + 703;
|
||||
const wxEventType wxEVT_COMMAND_LIST_DELETE_ITEM = wxEVT_FIRST + 704;
|
||||
const wxEventType wxEVT_COMMAND_LIST_DELETE_ALL_ITEMS = wxEVT_FIRST + 705;
|
||||
const wxEventType wxEVT_COMMAND_LIST_GET_INFO = wxEVT_FIRST + 706;
|
||||
const wxEventType wxEVT_COMMAND_LIST_SET_INFO = wxEVT_FIRST + 707;
|
||||
const wxEventType wxEVT_COMMAND_LIST_ITEM_SELECTED = wxEVT_FIRST + 708;
|
||||
const wxEventType wxEVT_COMMAND_LIST_ITEM_DESELECTED = wxEVT_FIRST + 709;
|
||||
const wxEventType wxEVT_COMMAND_LIST_KEY_DOWN = wxEVT_FIRST + 710;
|
||||
const wxEventType wxEVT_COMMAND_LIST_INSERT_ITEM = wxEVT_FIRST + 711;
|
||||
const wxEventType wxEVT_COMMAND_LIST_COL_CLICK = wxEVT_FIRST + 712;
|
||||
const wxEventType wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK = wxEVT_FIRST + 713;
|
||||
const wxEventType wxEVT_COMMAND_LIST_ITEM_MIDDLE_CLICK = wxEVT_FIRST + 714;
|
||||
const wxEventType wxEVT_COMMAND_LIST_ITEM_ACTIVATED = wxEVT_FIRST + 715;
|
||||
|
||||
/* Tab and notebook control event types */
|
||||
const wxEventType wxEVT_COMMAND_TAB_SEL_CHANGED = wxEVT_FIRST + 800;
|
||||
const wxEventType wxEVT_COMMAND_TAB_SEL_CHANGING = wxEVT_FIRST + 801;
|
||||
|
||||
#if defined(__BORLANDC__) && defined(__WIN16__)
|
||||
/* For 16-bit BC++, these 2 are identical (truncated) */
|
||||
const wxEventType wxEVT_COMMAND_NB_PAGE_CHANGED = wxEVT_FIRST + 802;
|
||||
const wxEventType wxEVT_COMMAND_NB_PAGE_CHANGING = wxEVT_FIRST + 803;
|
||||
#else
|
||||
const wxEventType wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED = wxEVT_FIRST + 802;
|
||||
const wxEventType wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING = wxEVT_FIRST + 803;
|
||||
// For 16-bit BC++, these 2 would be identical otherwise (truncated)
|
||||
#define wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED wxEVT_COMMAND_NB_PAGE_CHANGED
|
||||
#define wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING wxEVT_COMMAND_NB_PAGE_CHANGING
|
||||
#endif
|
||||
|
||||
/* Splitter events */
|
||||
const wxEventType wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED = wxEVT_FIRST + 850;
|
||||
const wxEventType wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGING = wxEVT_FIRST + 851;
|
||||
const wxEventType wxEVT_COMMAND_SPLITTER_DOUBLECLICKED = wxEVT_FIRST + 852;
|
||||
const wxEventType wxEVT_COMMAND_SPLITTER_UNSPLIT = wxEVT_FIRST + 853;
|
||||
typedef int wxEventType;
|
||||
|
||||
/* Wizard events */
|
||||
const wxEventType wxEVT_WIZARD_PAGE_CHANGED = wxEVT_FIRST + 900;
|
||||
const wxEventType wxEVT_WIZARD_PAGE_CHANGING = wxEVT_FIRST + 901;
|
||||
const wxEventType wxEVT_WIZARD_CANCEL = wxEVT_FIRST + 902;
|
||||
// the standard event types
|
||||
enum
|
||||
{
|
||||
wxEVT_NULL = 0,
|
||||
wxEVT_FIRST = 10000,
|
||||
|
||||
/* Calendar events */
|
||||
const wxEventType wxEVT_CALENDAR_SEL_CHANGED = wxEVT_FIRST + 950;
|
||||
const wxEventType wxEVT_CALENDAR_DAY_CHANGED = wxEVT_FIRST + 951;
|
||||
const wxEventType wxEVT_CALENDAR_MONTH_CHANGED = wxEVT_FIRST + 952;
|
||||
const wxEventType wxEVT_CALENDAR_YEAR_CHANGED = wxEVT_FIRST + 953;
|
||||
const wxEventType wxEVT_CALENDAR_DOUBLECLICKED = wxEVT_FIRST + 954;
|
||||
const wxEventType wxEVT_CALENDAR_WEEKDAY_CLICKED = wxEVT_FIRST + 955;
|
||||
wxEVT_COMMAND_BUTTON_CLICKED = wxEVT_FIRST + 1,
|
||||
wxEVT_COMMAND_CHECKBOX_CLICKED = wxEVT_FIRST + 2,
|
||||
wxEVT_COMMAND_CHOICE_SELECTED = wxEVT_FIRST + 3,
|
||||
wxEVT_COMMAND_LISTBOX_SELECTED = wxEVT_FIRST + 4,
|
||||
wxEVT_COMMAND_LISTBOX_DOUBLECLICKED = wxEVT_FIRST + 5,
|
||||
wxEVT_COMMAND_CHECKLISTBOX_TOGGLED = wxEVT_FIRST + 6,
|
||||
wxEVT_COMMAND_TEXT_UPDATED = wxEVT_FIRST + 7,
|
||||
wxEVT_COMMAND_TEXT_ENTER = wxEVT_FIRST + 8,
|
||||
wxEVT_COMMAND_MENU_SELECTED = wxEVT_FIRST + 9,
|
||||
wxEVT_COMMAND_TOOL_CLICKED = wxEVT_COMMAND_MENU_SELECTED,
|
||||
wxEVT_COMMAND_SLIDER_UPDATED = wxEVT_FIRST + 10,
|
||||
wxEVT_COMMAND_RADIOBOX_SELECTED = wxEVT_FIRST + 11,
|
||||
wxEVT_COMMAND_RADIOBUTTON_SELECTED = wxEVT_FIRST + 12,
|
||||
//wxEVT_COMMAND_SCROLLBAR_UPDATED is now obsolete since we use wxEVT_SCROLL... events
|
||||
wxEVT_COMMAND_SCROLLBAR_UPDATED = wxEVT_FIRST + 13,
|
||||
wxEVT_COMMAND_VLBOX_SELECTED = wxEVT_FIRST + 14,
|
||||
wxEVT_COMMAND_COMBOBOX_SELECTED = wxEVT_FIRST + 15,
|
||||
wxEVT_COMMAND_TOOL_RCLICKED = wxEVT_FIRST + 16,
|
||||
wxEVT_COMMAND_TOOL_ENTER = wxEVT_FIRST + 17,
|
||||
wxEVT_COMMAND_SPINCTRL_UPDATED = wxEVT_FIRST + 18,
|
||||
|
||||
/* Plot events */
|
||||
const wxEventType wxEVT_PLOT_SEL_CHANGING = wxEVT_FIRST + 1000;
|
||||
const wxEventType wxEVT_PLOT_SEL_CHANGED = wxEVT_FIRST + 1001;
|
||||
const wxEventType wxEVT_PLOT_CLICKED = wxEVT_FIRST + 1002;
|
||||
const wxEventType wxEVT_PLOT_DOUBLECLICKED = wxEVT_FIRST + 1003;
|
||||
const wxEventType wxEVT_PLOT_ZOOM_IN = wxEVT_FIRST + 1004;
|
||||
const wxEventType wxEVT_PLOT_ZOOM_OUT = wxEVT_FIRST + 1005;
|
||||
const wxEventType wxEVT_PLOT_VALUE_SEL_CREATING = wxEVT_FIRST + 1010;
|
||||
const wxEventType wxEVT_PLOT_VALUE_SEL_CREATED = wxEVT_FIRST + 1011;
|
||||
const wxEventType wxEVT_PLOT_VALUE_SEL_CHANGING = wxEVT_FIRST + 1012;
|
||||
const wxEventType wxEVT_PLOT_VALUE_SEL_CHANGED = wxEVT_FIRST + 1013;
|
||||
const wxEventType wxEVT_PLOT_AREA_SEL_CREATING = wxEVT_FIRST + 1014;
|
||||
const wxEventType wxEVT_PLOT_AREA_SEL_CREATED = wxEVT_FIRST + 1015;
|
||||
const wxEventType wxEVT_PLOT_AREA_SEL_CHANGING = wxEVT_FIRST + 1016;
|
||||
const wxEventType wxEVT_PLOT_AREA_SEL_CHANGED = wxEVT_FIRST + 1017;
|
||||
const wxEventType wxEVT_PLOT_BEGIN_X_LABEL_EDIT = wxEVT_FIRST + 1020;
|
||||
const wxEventType wxEVT_PLOT_END_X_LABEL_EDIT = wxEVT_FIRST + 1021;
|
||||
const wxEventType wxEVT_PLOT_BEGIN_Y_LABEL_EDIT = wxEVT_FIRST + 1022;
|
||||
const wxEventType wxEVT_PLOT_END_Y_LABEL_EDIT = wxEVT_FIRST + 1023;
|
||||
const wxEventType wxEVT_PLOT_BEGIN_TITLE_EDIT = wxEVT_FIRST + 1024;
|
||||
const wxEventType wxEVT_PLOT_END_TITLE_EDIT = wxEVT_FIRST + 1025;
|
||||
/* Sockets and timers send events, too */
|
||||
wxEVT_SOCKET = wxEVT_FIRST + 50,
|
||||
wxEVT_TIMER = wxEVT_FIRST + 80,
|
||||
|
||||
const wxEventType wxEVT_USER_FIRST = wxEVT_FIRST + 2000;
|
||||
/* Mouse event types */
|
||||
wxEVT_LEFT_DOWN = wxEVT_FIRST + 100,
|
||||
wxEVT_LEFT_UP = wxEVT_FIRST + 101,
|
||||
wxEVT_MIDDLE_DOWN = wxEVT_FIRST + 102,
|
||||
wxEVT_MIDDLE_UP = wxEVT_FIRST + 103,
|
||||
wxEVT_RIGHT_DOWN = wxEVT_FIRST + 104,
|
||||
wxEVT_RIGHT_UP = wxEVT_FIRST + 105,
|
||||
wxEVT_MOTION = wxEVT_FIRST + 106,
|
||||
wxEVT_ENTER_WINDOW = wxEVT_FIRST + 107,
|
||||
wxEVT_LEAVE_WINDOW = wxEVT_FIRST + 108,
|
||||
wxEVT_LEFT_DCLICK = wxEVT_FIRST + 109,
|
||||
wxEVT_MIDDLE_DCLICK = wxEVT_FIRST + 110,
|
||||
wxEVT_RIGHT_DCLICK = wxEVT_FIRST + 111,
|
||||
wxEVT_SET_FOCUS = wxEVT_FIRST + 112,
|
||||
wxEVT_KILL_FOCUS = wxEVT_FIRST + 113,
|
||||
|
||||
#endif // for VisualAge C++ V4.0
|
||||
/* Non-client mouse events */
|
||||
wxEVT_NC_LEFT_DOWN = wxEVT_FIRST + 200,
|
||||
wxEVT_NC_LEFT_UP = wxEVT_FIRST + 201,
|
||||
wxEVT_NC_MIDDLE_DOWN = wxEVT_FIRST + 202,
|
||||
wxEVT_NC_MIDDLE_UP = wxEVT_FIRST + 203,
|
||||
wxEVT_NC_RIGHT_DOWN = wxEVT_FIRST + 204,
|
||||
wxEVT_NC_RIGHT_UP = wxEVT_FIRST + 205,
|
||||
wxEVT_NC_MOTION = wxEVT_FIRST + 206,
|
||||
wxEVT_NC_ENTER_WINDOW = wxEVT_FIRST + 207,
|
||||
wxEVT_NC_LEAVE_WINDOW = wxEVT_FIRST + 208,
|
||||
wxEVT_NC_LEFT_DCLICK = wxEVT_FIRST + 209,
|
||||
wxEVT_NC_MIDDLE_DCLICK = wxEVT_FIRST + 210,
|
||||
wxEVT_NC_RIGHT_DCLICK = wxEVT_FIRST + 211,
|
||||
|
||||
/* Character input event type */
|
||||
wxEVT_CHAR = wxEVT_FIRST + 212,
|
||||
wxEVT_CHAR_HOOK = wxEVT_FIRST + 213,
|
||||
wxEVT_NAVIGATION_KEY = wxEVT_FIRST + 214,
|
||||
wxEVT_KEY_DOWN = wxEVT_FIRST + 215,
|
||||
wxEVT_KEY_UP = wxEVT_FIRST + 216,
|
||||
|
||||
/*
|
||||
* wxScrollbar and wxSlider event identifiers
|
||||
*/
|
||||
wxEVT_SCROLL_TOP = wxEVT_FIRST + 300,
|
||||
wxEVT_SCROLL_BOTTOM = wxEVT_FIRST + 301,
|
||||
wxEVT_SCROLL_LINEUP = wxEVT_FIRST + 302,
|
||||
wxEVT_SCROLL_LINEDOWN = wxEVT_FIRST + 303,
|
||||
wxEVT_SCROLL_PAGEUP = wxEVT_FIRST + 304,
|
||||
wxEVT_SCROLL_PAGEDOWN = wxEVT_FIRST + 305,
|
||||
wxEVT_SCROLL_THUMBTRACK = wxEVT_FIRST + 306,
|
||||
|
||||
/*
|
||||
* Scroll events from wxWindow
|
||||
*/
|
||||
wxEVT_SCROLLWIN_TOP = wxEVT_FIRST + 320,
|
||||
wxEVT_SCROLLWIN_BOTTOM = wxEVT_FIRST + 321,
|
||||
wxEVT_SCROLLWIN_LINEUP = wxEVT_FIRST + 322,
|
||||
wxEVT_SCROLLWIN_LINEDOWN = wxEVT_FIRST + 323,
|
||||
wxEVT_SCROLLWIN_PAGEUP = wxEVT_FIRST + 324,
|
||||
wxEVT_SCROLLWIN_PAGEDOWN = wxEVT_FIRST + 325,
|
||||
wxEVT_SCROLLWIN_THUMBTRACK = wxEVT_FIRST + 326,
|
||||
wxEVT_SCROLL_THUMBRELEASE = wxEVT_FIRST + 327,
|
||||
|
||||
/*
|
||||
* System events
|
||||
*/
|
||||
wxEVT_SIZE = wxEVT_FIRST + 400,
|
||||
wxEVT_MOVE = wxEVT_FIRST + 401,
|
||||
wxEVT_CLOSE_WINDOW = wxEVT_FIRST + 402,
|
||||
wxEVT_END_SESSION = wxEVT_FIRST + 403,
|
||||
wxEVT_QUERY_END_SESSION = wxEVT_FIRST + 404,
|
||||
wxEVT_ACTIVATE_APP = wxEVT_FIRST + 405,
|
||||
wxEVT_POWER = wxEVT_FIRST + 406,
|
||||
wxEVT_ACTIVATE = wxEVT_FIRST + 409,
|
||||
wxEVT_CREATE = wxEVT_FIRST + 410,
|
||||
wxEVT_DESTROY = wxEVT_FIRST + 411,
|
||||
wxEVT_SHOW = wxEVT_FIRST + 412,
|
||||
wxEVT_ICONIZE = wxEVT_FIRST + 413,
|
||||
wxEVT_MAXIMIZE = wxEVT_FIRST + 414,
|
||||
wxEVT_MOUSE_CAPTURE_CHANGED = wxEVT_FIRST + 415,
|
||||
wxEVT_PAINT = wxEVT_FIRST + 416,
|
||||
wxEVT_ERASE_BACKGROUND = wxEVT_FIRST + 417,
|
||||
wxEVT_NC_PAINT = wxEVT_FIRST + 418,
|
||||
wxEVT_PAINT_ICON = wxEVT_FIRST + 419,
|
||||
wxEVT_MENU_CHAR = wxEVT_FIRST + 420,
|
||||
wxEVT_MENU_INIT = wxEVT_FIRST + 421,
|
||||
wxEVT_MENU_HIGHLIGHT = wxEVT_FIRST + 422,
|
||||
wxEVT_POPUP_MENU_INIT = wxEVT_FIRST + 423,
|
||||
wxEVT_CONTEXT_MENU = wxEVT_FIRST + 424,
|
||||
wxEVT_SYS_COLOUR_CHANGED = wxEVT_FIRST + 425,
|
||||
wxEVT_SETTING_CHANGED = wxEVT_FIRST + 426,
|
||||
wxEVT_QUERY_NEW_PALETTE = wxEVT_FIRST + 427,
|
||||
wxEVT_PALETTE_CHANGED = wxEVT_FIRST + 428,
|
||||
wxEVT_JOY_BUTTON_DOWN = wxEVT_FIRST + 429,
|
||||
wxEVT_JOY_BUTTON_UP = wxEVT_FIRST + 430,
|
||||
wxEVT_JOY_MOVE = wxEVT_FIRST + 431,
|
||||
wxEVT_JOY_ZMOVE = wxEVT_FIRST + 432,
|
||||
wxEVT_DROP_FILES = wxEVT_FIRST + 433,
|
||||
wxEVT_DRAW_ITEM = wxEVT_FIRST + 434,
|
||||
wxEVT_MEASURE_ITEM = wxEVT_FIRST + 435,
|
||||
wxEVT_COMPARE_ITEM = wxEVT_FIRST + 436,
|
||||
wxEVT_INIT_DIALOG = wxEVT_FIRST + 437,
|
||||
wxEVT_IDLE = wxEVT_FIRST + 438,
|
||||
wxEVT_UPDATE_UI = wxEVT_FIRST + 439,
|
||||
|
||||
/* System misc. */
|
||||
wxEVT_END_PROCESS = wxEVT_FIRST + 440,
|
||||
|
||||
/* Dial up events */
|
||||
wxEVT_DIALUP_CONNECTED = wxEVT_FIRST + 450,
|
||||
wxEVT_DIALUP_DISCONNECTED = wxEVT_FIRST + 451,
|
||||
|
||||
/* Generic command events */
|
||||
/* Note: a click is a higher-level event than button down/up */
|
||||
wxEVT_COMMAND_LEFT_CLICK = wxEVT_FIRST + 500,
|
||||
wxEVT_COMMAND_LEFT_DCLICK = wxEVT_FIRST + 501,
|
||||
wxEVT_COMMAND_RIGHT_CLICK = wxEVT_FIRST + 502,
|
||||
wxEVT_COMMAND_RIGHT_DCLICK = wxEVT_FIRST + 503,
|
||||
wxEVT_COMMAND_SET_FOCUS = wxEVT_FIRST + 504,
|
||||
wxEVT_COMMAND_KILL_FOCUS = wxEVT_FIRST + 505,
|
||||
wxEVT_COMMAND_ENTER = wxEVT_FIRST + 506,
|
||||
|
||||
/* Tree control event types */
|
||||
wxEVT_COMMAND_TREE_BEGIN_DRAG = wxEVT_FIRST + 600,
|
||||
wxEVT_COMMAND_TREE_BEGIN_RDRAG = wxEVT_FIRST + 601,
|
||||
wxEVT_COMMAND_TREE_BEGIN_LABEL_EDIT = wxEVT_FIRST + 602,
|
||||
wxEVT_COMMAND_TREE_END_LABEL_EDIT = wxEVT_FIRST + 603,
|
||||
wxEVT_COMMAND_TREE_DELETE_ITEM = wxEVT_FIRST + 604,
|
||||
wxEVT_COMMAND_TREE_GET_INFO = wxEVT_FIRST + 605,
|
||||
wxEVT_COMMAND_TREE_SET_INFO = wxEVT_FIRST + 606,
|
||||
wxEVT_COMMAND_TREE_ITEM_EXPANDED = wxEVT_FIRST + 607,
|
||||
wxEVT_COMMAND_TREE_ITEM_EXPANDING = wxEVT_FIRST + 608,
|
||||
wxEVT_COMMAND_TREE_ITEM_COLLAPSED = wxEVT_FIRST + 609,
|
||||
wxEVT_COMMAND_TREE_ITEM_COLLAPSING = wxEVT_FIRST + 610,
|
||||
wxEVT_COMMAND_TREE_SEL_CHANGED = wxEVT_FIRST + 611,
|
||||
wxEVT_COMMAND_TREE_SEL_CHANGING = wxEVT_FIRST + 612,
|
||||
wxEVT_COMMAND_TREE_KEY_DOWN = wxEVT_FIRST + 613,
|
||||
wxEVT_COMMAND_TREE_ITEM_ACTIVATED = wxEVT_FIRST + 614,
|
||||
wxEVT_COMMAND_TREE_ITEM_RIGHT_CLICK = wxEVT_FIRST + 615,
|
||||
wxEVT_COMMAND_TREE_ITEM_MIDDLE_CLICK = wxEVT_FIRST + 616,
|
||||
wxEVT_COMMAND_TREE_END_DRAG = wxEVT_FIRST + 617,
|
||||
|
||||
/* List control event types */
|
||||
wxEVT_COMMAND_LIST_BEGIN_DRAG = wxEVT_FIRST + 700,
|
||||
wxEVT_COMMAND_LIST_BEGIN_RDRAG = wxEVT_FIRST + 701,
|
||||
wxEVT_COMMAND_LIST_BEGIN_LABEL_EDIT = wxEVT_FIRST + 702,
|
||||
wxEVT_COMMAND_LIST_END_LABEL_EDIT = wxEVT_FIRST + 703,
|
||||
wxEVT_COMMAND_LIST_DELETE_ITEM = wxEVT_FIRST + 704,
|
||||
wxEVT_COMMAND_LIST_DELETE_ALL_ITEMS = wxEVT_FIRST + 705,
|
||||
wxEVT_COMMAND_LIST_GET_INFO = wxEVT_FIRST + 706,
|
||||
wxEVT_COMMAND_LIST_SET_INFO = wxEVT_FIRST + 707,
|
||||
wxEVT_COMMAND_LIST_ITEM_SELECTED = wxEVT_FIRST + 708,
|
||||
wxEVT_COMMAND_LIST_ITEM_DESELECTED = wxEVT_FIRST + 709,
|
||||
wxEVT_COMMAND_LIST_KEY_DOWN = wxEVT_FIRST + 710,
|
||||
wxEVT_COMMAND_LIST_INSERT_ITEM = wxEVT_FIRST + 711,
|
||||
wxEVT_COMMAND_LIST_COL_CLICK = wxEVT_FIRST + 712,
|
||||
wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK = wxEVT_FIRST + 713,
|
||||
wxEVT_COMMAND_LIST_ITEM_MIDDLE_CLICK = wxEVT_FIRST + 714,
|
||||
wxEVT_COMMAND_LIST_ITEM_ACTIVATED = wxEVT_FIRST + 715,
|
||||
|
||||
/* Tab and notebook control event types */
|
||||
wxEVT_COMMAND_TAB_SEL_CHANGED = wxEVT_FIRST + 800,
|
||||
wxEVT_COMMAND_TAB_SEL_CHANGING = wxEVT_FIRST + 801,
|
||||
wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED = wxEVT_FIRST + 802,
|
||||
wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING = wxEVT_FIRST + 803,
|
||||
|
||||
/* Splitter events */
|
||||
wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED = wxEVT_FIRST + 850,
|
||||
wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGING = wxEVT_FIRST + 851,
|
||||
wxEVT_COMMAND_SPLITTER_DOUBLECLICKED = wxEVT_FIRST + 852,
|
||||
wxEVT_COMMAND_SPLITTER_UNSPLIT = wxEVT_FIRST + 853,
|
||||
|
||||
/* Wizard events */
|
||||
wxEVT_WIZARD_PAGE_CHANGED = wxEVT_FIRST + 900,
|
||||
wxEVT_WIZARD_PAGE_CHANGING = wxEVT_FIRST + 901,
|
||||
wxEVT_WIZARD_CANCEL = wxEVT_FIRST + 902,
|
||||
|
||||
/* Calendar events */
|
||||
wxEVT_CALENDAR_SEL_CHANGED = wxEVT_FIRST + 950,
|
||||
wxEVT_CALENDAR_DAY_CHANGED = wxEVT_FIRST + 951,
|
||||
wxEVT_CALENDAR_MONTH_CHANGED = wxEVT_FIRST + 952,
|
||||
wxEVT_CALENDAR_YEAR_CHANGED = wxEVT_FIRST + 953,
|
||||
wxEVT_CALENDAR_DOUBLECLICKED = wxEVT_FIRST + 954,
|
||||
wxEVT_CALENDAR_WEEKDAY_CLICKED = wxEVT_FIRST + 955,
|
||||
|
||||
wxEVT_USER_FIRST = wxEVT_FIRST + 2000
|
||||
};
|
||||
|
||||
/* Compatibility */
|
||||
|
||||
@@ -704,9 +444,12 @@ public:
|
||||
wxNotifyEvent(wxEventType commandType = wxEVT_NULL, int id = 0)
|
||||
: wxCommandEvent(commandType, id) { m_bAllow = TRUE; }
|
||||
|
||||
// veto the operation (by default it's allowed)
|
||||
// veto the operation (usually it's allowed by default)
|
||||
void Veto() { m_bAllow = FALSE; }
|
||||
|
||||
// allow the operation if it was disabled by default
|
||||
void Allow() { m_bAllow = TRUE; }
|
||||
|
||||
// for implementation code only: is the operation allowed?
|
||||
bool IsAllowed() const { return m_bAllow; }
|
||||
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: dragimag.h
|
||||
// Name: wx/msw/dragimag.h
|
||||
// Purpose: wxDragImage class: a kind of a cursor, that can cope
|
||||
// with more sophisticated images
|
||||
// Author: Julian Smart
|
||||
@@ -7,7 +7,7 @@
|
||||
// Created: 08/04/99
|
||||
// RCS-ID: $Id$
|
||||
// Copyright: (c) Julian Smart
|
||||
// Licence: wxWindows licence
|
||||
// Licence: wxWindows licence
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef _WX_DRAGIMAG_H_
|
||||
@@ -100,9 +100,8 @@
|
||||
|
||||
class WXDLLEXPORT wxDragImage: public wxObject
|
||||
{
|
||||
DECLARE_DYNAMIC_CLASS(wxDragImage)
|
||||
public:
|
||||
|
||||
|
||||
// Ctors & dtor
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -133,19 +132,19 @@ public:
|
||||
Create(listCtrl, id);
|
||||
}
|
||||
~wxDragImage();
|
||||
|
||||
|
||||
// Attributes
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
// Operations
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
// Create a drag image from a bitmap and optional cursor
|
||||
bool Create(const wxBitmap& image, const wxCursor& cursor = wxNullCursor, const wxPoint& hotspot = wxPoint(0, 0));
|
||||
|
||||
|
||||
// Create a drag image from an icon and optional cursor
|
||||
bool Create(const wxIcon& image, const wxCursor& cursor = wxNullCursor, const wxPoint& hotspot = wxPoint(0, 0));
|
||||
|
||||
|
||||
// Create a drag image from a string and optional cursor
|
||||
bool Create(const wxString& str, const wxCursor& cursor = wxNullCursor, const wxPoint& hotspot = wxPoint(0, 0));
|
||||
|
||||
@@ -158,10 +157,10 @@ public:
|
||||
// Begin drag. hotspot is the location of the drag position relative to the upper-left
|
||||
// corner of the image.
|
||||
bool BeginDrag(const wxPoint& hotspot, wxWindow* window);
|
||||
|
||||
|
||||
// End drag
|
||||
bool EndDrag(wxWindow* window);
|
||||
|
||||
|
||||
// Move the image: call from OnMouseMove. Pt is in window client coordinates if window
|
||||
// is non-NULL, or in screen coordinates if NULL.
|
||||
bool Move(const wxPoint& pt, wxWindow* window);
|
||||
@@ -171,18 +170,21 @@ public:
|
||||
|
||||
// Hide the image
|
||||
bool Hide(wxWindow* window);
|
||||
|
||||
|
||||
// Implementation
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
// Returns the native image list handle
|
||||
inline WXHIMAGELIST GetHIMAGELIST() const { return m_hImageList; }
|
||||
|
||||
WXHIMAGELIST GetHIMAGELIST() const { return m_hImageList; }
|
||||
|
||||
protected:
|
||||
WXHIMAGELIST m_hImageList;
|
||||
wxCursor m_cursor;
|
||||
wxPoint m_hotspot;
|
||||
wxPoint m_position;
|
||||
|
||||
private:
|
||||
DECLARE_DYNAMIC_CLASS(wxDragImage)
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@@ -2,7 +2,7 @@
|
||||
// Name: msw/registry.h
|
||||
// Purpose: Registry classes and functions
|
||||
// Author: Vadim Zeitlin
|
||||
// Modified by:
|
||||
// Modified by:
|
||||
// Created: 03.04.198
|
||||
// RCS-ID: $Id$
|
||||
// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
|
||||
@@ -56,7 +56,8 @@ public:
|
||||
// (with environment variable references)
|
||||
Type_Binary, // Free form binary
|
||||
Type_Dword, // 32-bit number
|
||||
Type_Dword_little_endian, // 32-bit number (same as Type_DWORD)
|
||||
Type_Dword_little_endian // 32-bit number
|
||||
= Type_Dword, // (same as Type_DWORD)
|
||||
Type_Dword_big_endian, // 32-bit number
|
||||
Type_Link, // Symbolic Link (unicode)
|
||||
Type_Multi_String, // Multiple Unicode strings
|
||||
@@ -69,15 +70,17 @@ public:
|
||||
// predefined registry keys
|
||||
enum StdKey
|
||||
{
|
||||
HKCR // classes root
|
||||
HKCR // classes root
|
||||
#ifdef __WIN32__
|
||||
, HKCU, // current user
|
||||
HKLM, // local machine
|
||||
HKUSR, // users
|
||||
HKPD // performance data (@@ NT only?)
|
||||
#if WINVER >= 0x0400
|
||||
, HKCC, // current config
|
||||
HKDD // dynamic data
|
||||
,
|
||||
HKCU, // current user
|
||||
HKLM, // local machine
|
||||
HKUSR, // users
|
||||
HKPD // performance data (WinNT/2K only)
|
||||
#if WINVER >= 0x0400
|
||||
,
|
||||
HKCC, // current config (starting from Win95/NT 4.0)
|
||||
HKDD // dynamic data (Win95/98 only)
|
||||
#endif // Winver
|
||||
#endif // Win32/16
|
||||
};
|
||||
@@ -124,18 +127,10 @@ public:
|
||||
// return true if the key exists
|
||||
bool Exists() const;
|
||||
// get the info about key (any number of these pointers may be NULL)
|
||||
|
||||
#if defined( __GNUWIN32_OLD__ )
|
||||
bool GetKeyInfo(size_t *pnSubKeys, // number of subkeys
|
||||
size_t *pnMaxKeyLen, // max len of subkey name
|
||||
size_t *pnValues, // number of values
|
||||
size_t *pnMaxValueLen) const;
|
||||
#else
|
||||
bool GetKeyInfo(ulong *pnSubKeys, // number of subkeys
|
||||
ulong *pnMaxKeyLen, // max len of subkey name
|
||||
ulong *pnValues, // number of values
|
||||
ulong *pnMaxValueLen) const;
|
||||
#endif
|
||||
// return true if the key is opened
|
||||
bool IsOpened() const { return m_hKey != 0; }
|
||||
// for "if ( !key ) wxLogError(...)" kind of expressions
|
||||
@@ -145,8 +140,18 @@ public:
|
||||
// explicitly open the key (will be automatically done by all functions
|
||||
// which need the key to be opened if the key is not opened yet)
|
||||
bool Open();
|
||||
// create the key: will fail if the key already exists and bOkIfExists
|
||||
// create the key: will fail if the key already exists and !bOkIfExists
|
||||
bool Create(bool bOkIfExists = TRUE);
|
||||
// rename a value from old name to new one
|
||||
bool RenameValue(const wxChar *szValueOld, const wxChar *szValueNew);
|
||||
// copy value to another key possibly changing its name (by default it will
|
||||
// remain the same)
|
||||
bool CopyValue(const wxChar *szValue, wxRegKey& keyDst,
|
||||
const wxChar *szNewName = NULL);
|
||||
// copy the entire contents of the key recursively to another location
|
||||
bool Copy(const wxString& strNewName);
|
||||
// same as Copy() but using a key and not the name
|
||||
bool Copy(wxRegKey& keyDst);
|
||||
// close the key (will be automatically done in dtor)
|
||||
bool Close();
|
||||
|
||||
|
@@ -34,6 +34,7 @@ typedef long wxDataType;
|
||||
|
||||
// fwd decl
|
||||
class WXDLLEXPORT wxImageList;
|
||||
class WXDLLEXPORT wxDragImage;
|
||||
struct WXDLLEXPORT wxTreeViewItem;
|
||||
|
||||
// a callback function used for sorting tree items, it should return -1 if the
|
||||
@@ -439,6 +440,7 @@ public:
|
||||
|
||||
// implementation
|
||||
// --------------
|
||||
virtual long MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam);
|
||||
virtual bool MSWCommand(WXUINT param, WXWORD id);
|
||||
virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result);
|
||||
|
||||
@@ -498,6 +500,9 @@ private:
|
||||
// TRUE if the hash above is not empty
|
||||
bool m_hasAnyAttr;
|
||||
|
||||
// used for dragging
|
||||
wxDragImage *m_dragImage;
|
||||
|
||||
DECLARE_DYNAMIC_CLASS(wxTreeCtrl)
|
||||
};
|
||||
|
||||
|
@@ -149,7 +149,7 @@ public:
|
||||
const wxString& GetLabel() const { return m_label; }
|
||||
|
||||
private:
|
||||
// TODO we could save some space by using union here
|
||||
// we could probably save some space by using union here
|
||||
int m_code;
|
||||
wxTreeItemId m_item,
|
||||
m_itemOld;
|
||||
@@ -166,9 +166,16 @@ typedef void (wxEvtHandler::*wxTreeEventFunction)(wxTreeEvent&);
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// GetItem() returns the item being dragged, GetPoint() the mouse coords
|
||||
//
|
||||
// if you call event.Allow(), the drag operation will start and a
|
||||
// EVT_TREE_END_DRAG event will be sent when the drag is over.
|
||||
#define EVT_TREE_BEGIN_DRAG(id, fn) { wxEVT_COMMAND_TREE_BEGIN_DRAG, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, (wxObject *) NULL },
|
||||
#define EVT_TREE_BEGIN_RDRAG(id, fn) { wxEVT_COMMAND_TREE_BEGIN_RDRAG, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, (wxObject *) NULL },
|
||||
|
||||
// GetItem() is the item on which the drop occured (if any) and GetPoint() the
|
||||
// current mouse coords
|
||||
#define EVT_TREE_END_DRAG(id, fn) { wxEVT_COMMAND_TREE_END_DRAG, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTreeEventFunction) & fn, (wxObject *) NULL },
|
||||
|
||||
// GetItem() returns the itme whose label is being edited, GetLabel() returns
|
||||
// the current item label for BEGIN and the would be new one for END.
|
||||
//
|
||||
|
@@ -1,8 +1,8 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Name: registry.cpp
|
||||
// Name: regtest.cpp
|
||||
// Purpose: wxRegKey class demo
|
||||
// Author: Vadim Zeitlin
|
||||
// Modified by:
|
||||
// Modified by:
|
||||
// Created: 03.04.98
|
||||
// RCS-ID: $Id$
|
||||
// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
|
||||
@@ -35,9 +35,9 @@
|
||||
// application type
|
||||
// ----------------------------------------------------------------------------
|
||||
class RegApp : public wxApp
|
||||
{
|
||||
{
|
||||
public:
|
||||
bool OnInit(void);
|
||||
bool OnInit();
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
@@ -58,9 +58,6 @@ public:
|
||||
RegImageList();
|
||||
};
|
||||
|
||||
// array of children of the node
|
||||
//class TreeNode;
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// our control
|
||||
// ----------------------------------------------------------------------------
|
||||
@@ -76,14 +73,19 @@ public:
|
||||
void OnItemExpanding(wxTreeEvent& event);
|
||||
void OnSelChanged (wxTreeEvent& event);
|
||||
|
||||
void OnBeginDrag (wxTreeEvent& event);
|
||||
void OnEndDrag (wxTreeEvent& event);
|
||||
|
||||
void OnRightClick (wxMouseEvent& event);
|
||||
void OnChar (wxKeyEvent& event);
|
||||
void OnIdle (wxIdleEvent& event);
|
||||
|
||||
// forwarded notifications (by the frame)
|
||||
void OnMenuTest();
|
||||
|
||||
// operations
|
||||
void DeleteSelected();
|
||||
void ShowProperties();
|
||||
void CreateNewKey(const wxString& strName);
|
||||
void CreateNewTextValue(const wxString& strName);
|
||||
void CreateNewBinaryValue(const wxString& strName);
|
||||
@@ -91,77 +93,79 @@ public:
|
||||
// information
|
||||
bool IsKeySelected() const;
|
||||
|
||||
DECLARE_EVENT_TABLE();
|
||||
|
||||
private:
|
||||
|
||||
// structure describing a registry key/value
|
||||
class TreeNode : public wxTreeItemData
|
||||
class TreeNode : public wxTreeItemData
|
||||
{
|
||||
WX_DEFINE_ARRAY(TreeNode *, TreeChildren);
|
||||
WX_DEFINE_ARRAY(TreeNode *, TreeChildren);
|
||||
public:
|
||||
RegTreeCtrl *m_pTree; // must be !NULL
|
||||
TreeNode *m_pParent; // NULL only for the root node
|
||||
long m_id; // the id of the tree control item
|
||||
wxString m_strName; // name of the key/value
|
||||
TreeChildren m_aChildren; // array of subkeys/values
|
||||
bool m_bKey; // key or value?
|
||||
wxRegKey *m_pKey; // only may be !NULL if m_bKey == true
|
||||
long m_lDummy; // dummy subkey (to make expansion possible)
|
||||
RegTreeCtrl *m_pTree; // must be !NULL
|
||||
TreeNode *m_pParent; // NULL only for the root node
|
||||
long m_id; // the id of the tree control item
|
||||
wxString m_strName; // name of the key/value
|
||||
TreeChildren m_aChildren; // array of subkeys/values
|
||||
bool m_bKey; // key or value?
|
||||
wxRegKey *m_pKey; // only may be !NULL if m_bKey == true
|
||||
|
||||
// ctor
|
||||
TreeNode() { m_lDummy = 0; }
|
||||
// trivial accessors
|
||||
long Id() const { return m_id; }
|
||||
bool IsRoot() const { return m_pParent == NULL; }
|
||||
bool IsKey() const { return m_bKey; }
|
||||
TreeNode *Parent() const { return m_pParent; }
|
||||
|
||||
// trivial accessors
|
||||
long Id() const { return m_id; }
|
||||
bool IsRoot() const { return m_pParent == NULL; }
|
||||
bool IsKey() const { return m_bKey; }
|
||||
TreeNode *Parent() const { return m_pParent; }
|
||||
// notifications
|
||||
bool OnExpand();
|
||||
void OnCollapse();
|
||||
|
||||
// notifications
|
||||
bool OnExpand();
|
||||
void OnCollapse();
|
||||
// operations
|
||||
void Refresh();
|
||||
bool DeleteChild(TreeNode *child);
|
||||
void DestroyChildren();
|
||||
const char *FullName() const;
|
||||
|
||||
// operations
|
||||
void Refresh() { OnCollapse(); OnExpand(); }
|
||||
void AddDummy();
|
||||
void DestroyChildren();
|
||||
const char *FullName() const;
|
||||
// get the associated key: make sure the pointer is !NULL
|
||||
wxRegKey& Key() { if ( !m_pKey ) OnExpand(); return *m_pKey; }
|
||||
|
||||
// get the associated key: make sure the pointer is !NULL
|
||||
wxRegKey& Key() { if ( !m_pKey ) OnExpand(); return *m_pKey; }
|
||||
|
||||
// dtor deletes all children
|
||||
~TreeNode();
|
||||
// dtor deletes all children
|
||||
~TreeNode();
|
||||
};
|
||||
|
||||
wxMenu *m_pMenuPopup;
|
||||
TreeNode *m_pRoot;
|
||||
wxImageList *m_imageList;
|
||||
wxMenu *m_pMenuPopup;
|
||||
|
||||
TreeNode *m_pRoot;
|
||||
|
||||
TreeNode *m_draggedItem; // the item being dragged
|
||||
bool m_copyOnDrop; // if FALSE, then move
|
||||
|
||||
bool m_restoreStatus; // after OnItemExpanding()
|
||||
|
||||
TreeNode *GetNode(const wxTreeEvent& event)
|
||||
{ return (TreeNode *)GetItemData((WXHTREEITEM)event.GetItem()); }
|
||||
|
||||
public:
|
||||
// create a new node and insert it to the tree
|
||||
TreeNode *InsertNewTreeNode(TreeNode *pParent,
|
||||
TreeNode *InsertNewTreeNode(TreeNode *pParent,
|
||||
const wxString& strName,
|
||||
int idImage = RegImageList::ClosedKey,
|
||||
const wxString *pstrValue = NULL);
|
||||
// add standard registry keys
|
||||
void AddStdKeys();
|
||||
|
||||
private:
|
||||
DECLARE_EVENT_TABLE();
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// the main window of our application
|
||||
// ----------------------------------------------------------------------------
|
||||
class RegFrame : public wxFrame
|
||||
{
|
||||
{
|
||||
public:
|
||||
// ctor & dtor
|
||||
RegFrame(wxFrame *parent, char *title, int x, int y, int w, int h);
|
||||
virtual ~RegFrame(void);
|
||||
|
||||
virtual ~RegFrame();
|
||||
|
||||
// callbacks
|
||||
void OnQuit (wxCommandEvent& event);
|
||||
void OnAbout(wxCommandEvent& event);
|
||||
@@ -176,7 +180,7 @@ public:
|
||||
void OnNewText (wxCommandEvent& event);
|
||||
void OnNewBinary(wxCommandEvent& event);
|
||||
|
||||
bool OnClose () { return TRUE; }
|
||||
void OnInfo (wxCommandEvent& event);
|
||||
|
||||
DECLARE_EVENT_TABLE();
|
||||
|
||||
@@ -197,10 +201,11 @@ enum
|
||||
Menu_Collapse,
|
||||
Menu_Toggle,
|
||||
Menu_New,
|
||||
Menu_NewKey,
|
||||
Menu_NewText,
|
||||
Menu_NewKey,
|
||||
Menu_NewText,
|
||||
Menu_NewBinary,
|
||||
Menu_Delete,
|
||||
Menu_Info,
|
||||
|
||||
Ctrl_RegTree = 200,
|
||||
};
|
||||
@@ -220,15 +225,20 @@ BEGIN_EVENT_TABLE(RegFrame, wxFrame)
|
||||
EVT_MENU(Menu_NewKey, RegFrame::OnNewKey)
|
||||
EVT_MENU(Menu_NewText, RegFrame::OnNewText)
|
||||
EVT_MENU(Menu_NewBinary,RegFrame::OnNewBinary)
|
||||
EVT_MENU(Menu_Info, RegFrame::OnInfo)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
BEGIN_EVENT_TABLE(RegTreeCtrl, wxTreeCtrl)
|
||||
EVT_TREE_DELETE_ITEM (Ctrl_RegTree, RegTreeCtrl::OnDeleteItem)
|
||||
EVT_TREE_ITEM_EXPANDING(Ctrl_RegTree, RegTreeCtrl::OnItemExpanding)
|
||||
EVT_TREE_SEL_CHANGED (Ctrl_RegTree, RegTreeCtrl::OnSelChanged)
|
||||
EVT_TREE_BEGIN_DRAG (Ctrl_RegTree, RegTreeCtrl::OnBeginDrag)
|
||||
EVT_TREE_BEGIN_RDRAG (Ctrl_RegTree, RegTreeCtrl::OnBeginDrag)
|
||||
EVT_TREE_END_DRAG (Ctrl_RegTree, RegTreeCtrl::OnEndDrag)
|
||||
|
||||
EVT_CHAR (RegTreeCtrl::OnChar)
|
||||
EVT_RIGHT_DOWN(RegTreeCtrl::OnRightClick)
|
||||
EVT_IDLE (RegTreeCtrl::OnIdle)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
// ============================================================================
|
||||
@@ -255,6 +265,8 @@ wxMenu *CreateRegistryMenu()
|
||||
pMenuReg->Append(Menu_Expand, "&Expand", "Expand current key");
|
||||
pMenuReg->Append(Menu_Collapse, "&Collapse", "Collapse current key");
|
||||
pMenuReg->Append(Menu_Toggle, "&Toggle", "Toggle current key");
|
||||
pMenuReg->AppendSeparator();
|
||||
pMenuReg->Append(Menu_Info, "&Properties","Information about current selection");
|
||||
|
||||
return pMenuReg;
|
||||
}
|
||||
@@ -268,9 +280,9 @@ IMPLEMENT_APP(RegApp)
|
||||
bool RegApp::OnInit()
|
||||
{
|
||||
// create the main frame window and show it
|
||||
RegFrame *frame = new RegFrame(NULL, "wxRegKey Test", 50, 50, 600, 350);
|
||||
RegFrame *frame = new RegFrame(NULL, "wxRegTest", 50, 50, 600, 350);
|
||||
frame->Show(TRUE);
|
||||
|
||||
|
||||
SetTopWindow(frame);
|
||||
|
||||
return TRUE;
|
||||
@@ -317,8 +329,10 @@ RegFrame::RegFrame(wxFrame *parent, char *title, int x, int y, int w, int h)
|
||||
SetStatusWidths(2, aWidths);
|
||||
}
|
||||
|
||||
RegFrame::~RegFrame(void)
|
||||
RegFrame::~RegFrame()
|
||||
{
|
||||
// this makes deletion of it *much* quicker
|
||||
m_treeCtrl->Hide();
|
||||
}
|
||||
|
||||
void RegFrame::OnQuit(wxCommandEvent& event)
|
||||
@@ -328,8 +342,10 @@ void RegFrame::OnQuit(wxCommandEvent& event)
|
||||
|
||||
void RegFrame::OnAbout(wxCommandEvent& event)
|
||||
{
|
||||
wxMessageDialog dialog(this, "wxRegistry sample\n(c) 1998 Vadim Zeitlin",
|
||||
"About wxRegistry", wxOK);
|
||||
wxMessageDialog dialog(this,
|
||||
"wxRegistry sample\n"
|
||||
"<EFBFBD> 1998, 2000 Vadim Zeitlin",
|
||||
"About wxRegTest", wxOK);
|
||||
|
||||
dialog.ShowModal();
|
||||
}
|
||||
@@ -383,6 +399,11 @@ void RegFrame::OnNewBinary(wxCommandEvent& event)
|
||||
}
|
||||
}
|
||||
|
||||
void RegFrame::OnInfo(wxCommandEvent& event)
|
||||
{
|
||||
m_treeCtrl->ShowProperties();
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// RegImageList
|
||||
// ----------------------------------------------------------------------------
|
||||
@@ -401,7 +422,7 @@ RegImageList::RegImageList() : wxImageList(16, 16, TRUE)
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// create a new tree item and insert it into the tree
|
||||
RegTreeCtrl::TreeNode *RegTreeCtrl::InsertNewTreeNode(TreeNode *pParent,
|
||||
RegTreeCtrl::TreeNode *RegTreeCtrl::InsertNewTreeNode(TreeNode *pParent,
|
||||
const wxString& strName,
|
||||
int idImage,
|
||||
const wxString *pstrValue)
|
||||
@@ -413,7 +434,7 @@ RegTreeCtrl::TreeNode *RegTreeCtrl::InsertNewTreeNode(TreeNode *pParent,
|
||||
pNewNode->m_strName = strName;
|
||||
pNewNode->m_bKey = pstrValue == NULL;
|
||||
pNewNode->m_pKey = NULL;
|
||||
pNewNode->m_id = InsertItem(pParent ? pParent->m_id : 0,
|
||||
pNewNode->m_id = InsertItem(pParent ? pParent->Id() : 0,
|
||||
pNewNode->IsKey() ? strName : *pstrValue,
|
||||
idImage);
|
||||
|
||||
@@ -427,17 +448,28 @@ RegTreeCtrl::TreeNode *RegTreeCtrl::InsertNewTreeNode(TreeNode *pParent,
|
||||
pParent->m_aChildren.Add(pNewNode);
|
||||
}
|
||||
|
||||
// force the [+] button (@@@ not very elegant...)
|
||||
if ( pNewNode->IsKey() )
|
||||
pNewNode->AddDummy();
|
||||
if ( pNewNode->IsKey() ) {
|
||||
SetItemHasChildren(pNewNode->Id());
|
||||
|
||||
if ( !pNewNode->IsRoot() ) {
|
||||
// set the expanded icon as well
|
||||
SetItemImage(pNewNode->Id(),
|
||||
RegImageList::OpenedKey,
|
||||
wxTreeItemIcon_Expanded);
|
||||
}
|
||||
}
|
||||
|
||||
return pNewNode;
|
||||
}
|
||||
|
||||
RegTreeCtrl::RegTreeCtrl(wxWindow *parent, wxWindowID id)
|
||||
: wxTreeCtrl(parent, id, wxDefaultPosition, wxDefaultSize,
|
||||
: wxTreeCtrl(parent, id, wxDefaultPosition, wxDefaultSize,
|
||||
wxTR_HAS_BUTTONS | wxSUNKEN_BORDER)
|
||||
{
|
||||
// init members
|
||||
m_draggedItem = NULL;
|
||||
m_restoreStatus = FALSE;
|
||||
|
||||
// create the image list
|
||||
// ---------------------
|
||||
m_imageList = new RegImageList;
|
||||
@@ -455,7 +487,7 @@ RegTreeCtrl::RegTreeCtrl(wxWindow *parent, wxWindowID id)
|
||||
RegTreeCtrl::~RegTreeCtrl()
|
||||
{
|
||||
delete m_pMenuPopup;
|
||||
delete m_pRoot;
|
||||
// delete m_pRoot; -- this is done by the tree now
|
||||
delete m_imageList;
|
||||
}
|
||||
|
||||
@@ -470,16 +502,30 @@ void RegTreeCtrl::AddStdKeys()
|
||||
// notifications
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
void RegTreeCtrl::OnIdle(wxIdleEvent& WXUNUSED(event))
|
||||
{
|
||||
if ( m_restoreStatus ) {
|
||||
// restore it after OnItemExpanding()
|
||||
wxLogStatus("Ok");
|
||||
wxSetCursor(*wxSTANDARD_CURSOR);
|
||||
|
||||
m_restoreStatus = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
void RegTreeCtrl::OnRightClick(wxMouseEvent& event)
|
||||
{
|
||||
int iFlags;
|
||||
long lId = HitTest(wxPoint(event.GetX(), event.GetY()), iFlags);
|
||||
if ( iFlags & wxTREE_HITTEST_ONITEMLABEL ) {
|
||||
// popup menu only if an item was clicked
|
||||
wxASSERT( lId != 0 );
|
||||
SelectItem(lId);
|
||||
PopupMenu(m_pMenuPopup, event.GetX(), event.GetY());
|
||||
if ( !(iFlags & wxTREE_HITTEST_ONITEMLABEL) ) {
|
||||
// take the currently selected item if click not on item
|
||||
lId = GetSelection();
|
||||
}
|
||||
else {
|
||||
SelectItem(lId);
|
||||
}
|
||||
|
||||
PopupMenu(m_pMenuPopup, event.GetX(), event.GetY());
|
||||
}
|
||||
|
||||
|
||||
@@ -520,16 +566,28 @@ void RegTreeCtrl::OnMenuTest()
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
wxLogError("Creation of test keys failed.");
|
||||
}
|
||||
|
||||
void RegTreeCtrl::OnChar(wxKeyEvent& event)
|
||||
{
|
||||
if ( event.KeyCode() == WXK_DELETE )
|
||||
DeleteSelected();
|
||||
else
|
||||
event.Skip();
|
||||
switch ( event.KeyCode() )
|
||||
{
|
||||
case WXK_DELETE:
|
||||
DeleteSelected();
|
||||
return;
|
||||
|
||||
case WXK_RETURN:
|
||||
if ( event.AltDown() )
|
||||
{
|
||||
ShowProperties();
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
event.Skip();
|
||||
}
|
||||
|
||||
void RegTreeCtrl::OnSelChanged(wxTreeEvent& event)
|
||||
@@ -547,6 +605,7 @@ void RegTreeCtrl::OnItemExpanding(wxTreeEvent& event)
|
||||
wxSetCursor(*wxHOURGLASS_CURSOR);
|
||||
wxLogStatus("Working...");
|
||||
wxYield(); // to give the status line a chance to refresh itself
|
||||
m_restoreStatus = TRUE; // some time later...
|
||||
|
||||
if ( pNode->IsKey() ) {
|
||||
if ( bExpanding ) {
|
||||
@@ -558,17 +617,116 @@ void RegTreeCtrl::OnItemExpanding(wxTreeEvent& event)
|
||||
// collapsing: clean up
|
||||
pNode->OnCollapse();
|
||||
}
|
||||
|
||||
// change icon for non root key
|
||||
if ( !pNode->IsRoot() ) {
|
||||
int idIcon = bExpanding ? RegImageList::OpenedKey
|
||||
: RegImageList::ClosedKey;
|
||||
SetItemImage(pNode->Id(), idIcon);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
wxLogStatus("Ok");
|
||||
wxSetCursor(*wxSTANDARD_CURSOR);
|
||||
void RegTreeCtrl::OnBeginDrag(wxTreeEvent& event)
|
||||
{
|
||||
m_copyOnDrop = event.GetEventType() == wxEVT_COMMAND_TREE_BEGIN_DRAG;
|
||||
|
||||
TreeNode *pNode = GetNode(event);
|
||||
if ( pNode->IsRoot() || pNode->Parent()->IsRoot() )
|
||||
{
|
||||
wxLogStatus("This registry key can't be %s.",
|
||||
m_copyOnDrop ? "copied" : "moved");
|
||||
}
|
||||
else
|
||||
{
|
||||
wxLogStatus("%s item %s...",
|
||||
m_copyOnDrop ? "Copying" : "Moving",
|
||||
pNode->FullName());
|
||||
|
||||
m_draggedItem = pNode;
|
||||
|
||||
event.Allow();
|
||||
}
|
||||
}
|
||||
|
||||
void RegTreeCtrl::OnEndDrag(wxTreeEvent& event)
|
||||
{
|
||||
wxCHECK_RET( m_draggedItem, "end drag without begin drag?" );
|
||||
|
||||
// clear the pointer anyhow
|
||||
TreeNode *src = m_draggedItem;
|
||||
m_draggedItem = NULL;
|
||||
|
||||
// where are we going to drop it?
|
||||
TreeNode *dst = GetNode(event);
|
||||
if ( dst && !dst->IsKey() ) {
|
||||
// we need a parent key
|
||||
dst = dst->Parent();
|
||||
}
|
||||
if ( !dst || dst->IsRoot() ) {
|
||||
wxLogError("Can't create a key here.");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
bool isKey = src->IsKey();
|
||||
if ( (isKey && (src == dst)) ||
|
||||
(!isKey && (src->Parent() == dst)) ) {
|
||||
wxLogStatus("Can't copy something on itself");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// remove the "Registry Root\\" from the full name
|
||||
wxString nameSrc, nameDst;
|
||||
nameSrc << wxString(src->FullName()).AfterFirst('\\');
|
||||
nameDst << wxString(dst->FullName()).AfterFirst('\\') << '\\'
|
||||
<< wxString(src->FullName()).AfterLast('\\');
|
||||
|
||||
wxString verb = m_copyOnDrop ? "copy" : "move";
|
||||
wxString what = isKey ? "key" : "value";
|
||||
|
||||
if ( wxMessageBox(wxString::Format
|
||||
(
|
||||
"Do you really want to %s the %s %s to %s?",
|
||||
verb.c_str(),
|
||||
what.c_str(),
|
||||
nameSrc.c_str(),
|
||||
nameDst.c_str()
|
||||
),
|
||||
"RegTest Confirm",
|
||||
wxICON_QUESTION | wxYES_NO | wxCANCEL, this) != wxYES ) {
|
||||
return;
|
||||
}
|
||||
|
||||
bool dstExpanded = IsExpanded(dst->Id());
|
||||
|
||||
bool ok;
|
||||
if ( isKey ) {
|
||||
wxRegKey& key = src->Key();
|
||||
ok = key.Copy(dst->Key());
|
||||
if ( ok && dstExpanded ) {
|
||||
dst->OnCollapse();
|
||||
dst->OnExpand();
|
||||
}
|
||||
|
||||
if ( ok && !m_copyOnDrop ) {
|
||||
// delete the old key
|
||||
ok = key.DeleteSelf();
|
||||
if ( ok ) {
|
||||
src->Parent()->Refresh();
|
||||
}
|
||||
}
|
||||
}
|
||||
else { // value
|
||||
wxRegKey& key = src->Parent()->Key();
|
||||
ok = key.CopyValue(src->m_strName, dst->Key());
|
||||
if ( ok && !m_copyOnDrop ) {
|
||||
// we move it, so delete the old one
|
||||
ok = key.DeleteValue(src->m_strName);
|
||||
if ( ok ) {
|
||||
// reexpand the key
|
||||
dst->Refresh();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( !ok ) {
|
||||
wxLogError("Failed to %s registry %s.", verb.c_str(), what.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
@@ -576,12 +734,8 @@ void RegTreeCtrl::OnItemExpanding(wxTreeEvent& event)
|
||||
// ----------------------------------------------------------------------------
|
||||
bool RegTreeCtrl::TreeNode::OnExpand()
|
||||
{
|
||||
// remove dummy item
|
||||
if ( m_lDummy != 0 ) {
|
||||
m_pTree->Delete(m_lDummy);
|
||||
m_lDummy = 0;
|
||||
}
|
||||
else {
|
||||
// we add children only once
|
||||
if ( !m_aChildren.IsEmpty() ) {
|
||||
// we've been already expanded
|
||||
return TRUE;
|
||||
}
|
||||
@@ -606,6 +760,9 @@ bool RegTreeCtrl::TreeNode::OnExpand()
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// if we're empty, we shouldn't be expandable at all
|
||||
bool isEmpty = TRUE;
|
||||
|
||||
// enumeration variables
|
||||
long l;
|
||||
wxString str;
|
||||
@@ -616,6 +773,9 @@ bool RegTreeCtrl::TreeNode::OnExpand()
|
||||
while ( bCont ) {
|
||||
m_pTree->InsertNewTreeNode(this, str, RegImageList::ClosedKey);
|
||||
bCont = m_pKey->GetNextKey(str, l);
|
||||
|
||||
// we have at least this key...
|
||||
isEmpty = FALSE;
|
||||
}
|
||||
|
||||
// enumerate all values
|
||||
@@ -649,11 +809,9 @@ bool RegTreeCtrl::TreeNode::OnExpand()
|
||||
|
||||
case wxRegKey::Type_Dword:
|
||||
{
|
||||
char szBuf[128];
|
||||
long l;
|
||||
m_pKey->QueryValue(str, &l);
|
||||
sprintf(szBuf, "%lx", l);
|
||||
strItem += szBuf;
|
||||
strItem << l;
|
||||
}
|
||||
|
||||
// fall through
|
||||
@@ -664,6 +822,17 @@ bool RegTreeCtrl::TreeNode::OnExpand()
|
||||
|
||||
m_pTree->InsertNewTreeNode(this, str, icon, &strItem);
|
||||
bCont = m_pKey->GetNextValue(str, l);
|
||||
|
||||
// we have at least this value...
|
||||
isEmpty = FALSE;
|
||||
}
|
||||
|
||||
if ( isEmpty ) {
|
||||
// this is for the case when our last child was just deleted
|
||||
m_pTree->Collapse(Id());
|
||||
|
||||
// we won't be expanded any more
|
||||
m_pTree->SetItemHasChildren(Id(), FALSE);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
@@ -671,30 +840,58 @@ bool RegTreeCtrl::TreeNode::OnExpand()
|
||||
|
||||
void RegTreeCtrl::TreeNode::OnCollapse()
|
||||
{
|
||||
bool bHasChildren = !m_aChildren.IsEmpty();
|
||||
DestroyChildren();
|
||||
if ( bHasChildren )
|
||||
AddDummy();
|
||||
else
|
||||
m_lDummy = 0;
|
||||
|
||||
delete m_pKey;
|
||||
m_pKey = NULL;
|
||||
}
|
||||
|
||||
void RegTreeCtrl::TreeNode::AddDummy()
|
||||
void RegTreeCtrl::TreeNode::Refresh()
|
||||
{
|
||||
// insert dummy item forcing appearance of [+] button
|
||||
m_lDummy = m_pTree->InsertItem(Id(), "");
|
||||
if ( m_pTree->IsExpanded(Id()) )
|
||||
{
|
||||
m_pTree->Collapse(Id());
|
||||
m_pTree->SetItemHasChildren(Id());
|
||||
m_pTree->Expand(Id());
|
||||
}
|
||||
}
|
||||
|
||||
bool RegTreeCtrl::TreeNode::DeleteChild(TreeNode *child)
|
||||
{
|
||||
int index = m_aChildren.Index(child);
|
||||
wxCHECK_MSG( index != wxNOT_FOUND, FALSE,
|
||||
"our child in tree should be in m_aChildren" );
|
||||
|
||||
m_aChildren.RemoveAt((size_t)index);
|
||||
|
||||
bool ok;
|
||||
if ( child->IsKey() ) {
|
||||
// must close key before deleting it
|
||||
child->OnCollapse();
|
||||
|
||||
ok = Key().DeleteKey(child->m_strName);
|
||||
}
|
||||
else {
|
||||
ok = Key().DeleteValue(child->m_strName);
|
||||
}
|
||||
|
||||
if ( ok ) {
|
||||
m_pTree->Delete(child->Id());
|
||||
|
||||
Refresh();
|
||||
}
|
||||
|
||||
return ok;
|
||||
}
|
||||
|
||||
void RegTreeCtrl::TreeNode::DestroyChildren()
|
||||
{
|
||||
// destroy all children
|
||||
unsigned int nCount = m_aChildren.Count();
|
||||
for ( unsigned int n = 0; n < nCount; n++ ) {
|
||||
long lId = m_aChildren[n]->Id();
|
||||
delete m_aChildren[n];
|
||||
size_t nCount = m_aChildren.GetCount();
|
||||
for ( size_t n = 0; n < nCount; n++ ) {
|
||||
long lId = m_aChildren[n]->Id();
|
||||
// no, wxTreeCtrl will do it
|
||||
//delete m_aChildren[n];
|
||||
m_pTree->Delete(lId);
|
||||
}
|
||||
|
||||
@@ -703,8 +900,6 @@ void RegTreeCtrl::TreeNode::DestroyChildren()
|
||||
|
||||
RegTreeCtrl::TreeNode::~TreeNode()
|
||||
{
|
||||
DestroyChildren();
|
||||
|
||||
delete m_pKey;
|
||||
}
|
||||
|
||||
@@ -716,7 +911,7 @@ const char *RegTreeCtrl::TreeNode::FullName() const
|
||||
return "Registry Root";
|
||||
}
|
||||
else {
|
||||
// our own registry key might not (yet) exist or we might be a value,
|
||||
// our own registry key might not (yet) exist or we might be a value,
|
||||
// so just use the parent's and concatenate
|
||||
s_strName = Parent()->FullName();
|
||||
s_strName << '\\' << m_strName;
|
||||
@@ -749,29 +944,18 @@ void RegTreeCtrl::DeleteSelected()
|
||||
return;
|
||||
}
|
||||
|
||||
if ( pCurrent->IsKey() ) {
|
||||
if ( wxMessageBox("Do you really want to delete this key?",
|
||||
"Confirmation",
|
||||
wxICON_QUESTION | wxYES_NO | wxCANCEL, this) != wxYES ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// must close key before deleting it
|
||||
pCurrent->OnCollapse();
|
||||
|
||||
if ( pParent->Key().DeleteKey(pCurrent->m_strName) )
|
||||
pParent->Refresh();
|
||||
wxString what = pCurrent->IsKey() ? "key" : "value";
|
||||
if ( wxMessageBox(wxString::Format
|
||||
(
|
||||
"Do you really want to delete this %s?",
|
||||
what.c_str()
|
||||
),
|
||||
"Confirmation",
|
||||
wxICON_QUESTION | wxYES_NO | wxCANCEL, this) != wxYES ) {
|
||||
return;
|
||||
}
|
||||
else {
|
||||
if ( wxMessageBox("Do you really want to delete this value?",
|
||||
"Confirmation",
|
||||
wxICON_QUESTION | wxYES_NO | wxCANCEL, this) != wxYES ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( pParent->Key().DeleteValue(pCurrent->m_strName) )
|
||||
pParent->Refresh();
|
||||
}
|
||||
pParent->DeleteChild(pCurrent);
|
||||
}
|
||||
|
||||
void RegTreeCtrl::CreateNewKey(const wxString& strName)
|
||||
@@ -780,7 +964,7 @@ void RegTreeCtrl::CreateNewKey(const wxString& strName)
|
||||
TreeNode *pCurrent = (TreeNode *)GetItemData(lCurrent);
|
||||
|
||||
wxCHECK_RET( pCurrent != NULL, "node without data?" );
|
||||
|
||||
|
||||
wxASSERT( pCurrent->IsKey() ); // check must have been done before
|
||||
|
||||
if ( pCurrent->IsRoot() ) {
|
||||
@@ -799,7 +983,7 @@ void RegTreeCtrl::CreateNewTextValue(const wxString& strName)
|
||||
TreeNode *pCurrent = (TreeNode *)GetItemData(lCurrent);
|
||||
|
||||
wxCHECK_RET( pCurrent != NULL, "node without data?" );
|
||||
|
||||
|
||||
wxASSERT( pCurrent->IsKey() ); // check must have been done before
|
||||
|
||||
if ( pCurrent->IsRoot() ) {
|
||||
@@ -817,7 +1001,7 @@ void RegTreeCtrl::CreateNewBinaryValue(const wxString& strName)
|
||||
TreeNode *pCurrent = (TreeNode *)GetItemData(lCurrent);
|
||||
|
||||
wxCHECK_RET( pCurrent != NULL, "node without data?" );
|
||||
|
||||
|
||||
wxASSERT( pCurrent->IsKey() ); // check must have been done before
|
||||
|
||||
if ( pCurrent->IsRoot() ) {
|
||||
@@ -829,6 +1013,49 @@ void RegTreeCtrl::CreateNewBinaryValue(const wxString& strName)
|
||||
pCurrent->Refresh();
|
||||
}
|
||||
|
||||
void RegTreeCtrl::ShowProperties()
|
||||
{
|
||||
long lCurrent = GetSelection();
|
||||
TreeNode *pCurrent = (TreeNode *)GetItemData(lCurrent);
|
||||
|
||||
if ( !pCurrent || pCurrent->IsRoot() )
|
||||
{
|
||||
wxLogStatus("No properties");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if ( pCurrent->IsKey() )
|
||||
{
|
||||
const wxRegKey& key = pCurrent->Key();
|
||||
size_t nSubKeys, nValues;
|
||||
if ( !key.GetKeyInfo(&nSubKeys, NULL, &nValues, NULL) )
|
||||
{
|
||||
wxLogError("Couldn't get key info");
|
||||
}
|
||||
else
|
||||
{
|
||||
wxLogMessage("Key '%s' has %u subkeys and %u values.",
|
||||
key.GetName().c_str(), nSubKeys, nValues);
|
||||
}
|
||||
}
|
||||
else // it's a value
|
||||
{
|
||||
TreeNode *parent = pCurrent->Parent();
|
||||
wxCHECK_RET( parent, "reg value without key?" );
|
||||
|
||||
const wxRegKey& key = parent->Key();
|
||||
const char *value = pCurrent->m_strName.c_str();
|
||||
wxLogMessage("Value '%s' under the key '%s' is of type "
|
||||
"%d (%s).",
|
||||
value,
|
||||
parent->m_strName.c_str(),
|
||||
key.GetValueType(value),
|
||||
key.IsNumericValue(value) ? "numeric" : "string");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
bool RegTreeCtrl::IsKeySelected() const
|
||||
{
|
||||
long lCurrent = GetSelection();
|
||||
@@ -837,4 +1064,4 @@ bool RegTreeCtrl::IsKeySelected() const
|
||||
wxCHECK( pCurrent != NULL, FALSE );
|
||||
|
||||
return pCurrent->IsKey();
|
||||
}
|
||||
}
|
||||
|
@@ -5,7 +5,7 @@
|
||||
// source such as opening and closing the data source.
|
||||
// Author: Doug Card
|
||||
// Modified by: George Tasker
|
||||
// Mods: Dec, 1998:
|
||||
// Mods: Dec, 1998:
|
||||
// -Added support for SQL statement logging and database cataloging
|
||||
// Mods: April, 1999
|
||||
// -Added QUERY_ONLY mode support to reduce default number of cursors
|
||||
@@ -111,7 +111,7 @@ char *SQLLOGfn = (char*) SQL_LOG_FILENAME;
|
||||
// database object is closed. This is necessary if the database
|
||||
// connection fails so the calling application can show the operator
|
||||
// why the connection failed. Note: as each wxDB object is closed, it
|
||||
// will overwrite the errors of the previously destroyed wxDB object in
|
||||
// will overwrite the errors of the previously destroyed wxDB object in
|
||||
// this variable.
|
||||
char DBerrorList[DB_MAX_ERROR_HISTORY][DB_MAX_ERROR_MSG_LEN];
|
||||
|
||||
@@ -225,7 +225,7 @@ wxDB::wxDB(HENV &aHenv, bool FwdOnlyCursors)
|
||||
fpSqlLog = 0; // Sql Log file pointer
|
||||
sqlLogState = sqlLogOFF; // By default, logging is turned off
|
||||
nTables = 0;
|
||||
|
||||
|
||||
wxStrcpy(sqlState,"");
|
||||
wxStrcpy(errorMsg,"");
|
||||
nativeError = cbErrorMsg = 0;
|
||||
@@ -256,10 +256,10 @@ wxDB::wxDB(HENV &aHenv, bool FwdOnlyCursors)
|
||||
typeInfDate.Precision = 0;
|
||||
typeInfDate.CaseSensitive = 0;
|
||||
typeInfDate.MaximumScale = 0;
|
||||
|
||||
|
||||
// Error reporting is turned OFF by default
|
||||
silent = TRUE;
|
||||
|
||||
|
||||
// Copy the HENV into the db class
|
||||
henv = aHenv;
|
||||
fwdOnlyCursors = FwdOnlyCursors;
|
||||
@@ -454,12 +454,12 @@ bool wxDB::setConnectionOptions(void)
|
||||
// Display the connection options to verify them
|
||||
#ifdef DBDEBUG_CONSOLE
|
||||
long l;
|
||||
cout << ">>>>> CONNECTION OPTIONS <<<<<<" << endl;
|
||||
|
||||
cout << "****** CONNECTION OPTIONS ******" << endl;
|
||||
|
||||
if (SQLGetConnectOption(hdbc, SQL_AUTOCOMMIT, &l) != SQL_SUCCESS)
|
||||
return(DispAllErrors(henv, hdbc));
|
||||
cout << "AUTOCOMMIT: " << (l == SQL_AUTOCOMMIT_OFF ? "OFF" : "ON") << endl;
|
||||
|
||||
|
||||
if (SQLGetConnectOption(hdbc, SQL_ODBC_CURSORS, &l) != SQL_SUCCESS)
|
||||
return(DispAllErrors(henv, hdbc));
|
||||
cout << "ODBC CURSORS: ";
|
||||
@@ -476,7 +476,7 @@ bool wxDB::setConnectionOptions(void)
|
||||
break;
|
||||
}
|
||||
cout << endl;
|
||||
|
||||
|
||||
if (SQLGetConnectOption(hdbc, SQL_OPT_TRACE, &l) != SQL_SUCCESS)
|
||||
return(DispAllErrors(henv, hdbc));
|
||||
cout << "TRACING: " << (l == SQL_OPT_TRACE_OFF ? "OFF" : "ON") << endl;
|
||||
@@ -593,7 +593,7 @@ bool wxDB::getDbInfo(void)
|
||||
return(DispAllErrors(henv, hdbc));
|
||||
|
||||
#ifdef DBDEBUG_CONSOLE
|
||||
cout << ">>>>> DATA SOURCE INFORMATION <<<<<" << endl;
|
||||
cout << "***** DATA SOURCE INFORMATION *****" << endl;
|
||||
cout << "SERVER Name: " << dbInf.serverName << endl;
|
||||
cout << "DBMS Name: " << dbInf.dbmsName << "; DBMS Version: " << dbInf.dbmsVer << endl;
|
||||
cout << "ODBC Version: " << dbInf.odbcVer << "; Driver Version: " << dbInf.driverVer << endl;
|
||||
@@ -1218,7 +1218,7 @@ int wxDB::TranslateSqlState(const char *SQLState)
|
||||
|
||||
} // wxDB::TranslateSqlState()
|
||||
|
||||
|
||||
|
||||
/********** wxDB::Grant() **********/
|
||||
bool wxDB::Grant(int privileges, const char *tableName, const char *userList)
|
||||
{
|
||||
@@ -1286,7 +1286,7 @@ bool wxDB::CreateView(const char *viewName, const char *colList, const char *pSq
|
||||
// Build the create view statement
|
||||
sqlStmt = "CREATE VIEW ";
|
||||
sqlStmt += viewName;
|
||||
|
||||
|
||||
if (wxStrlen(colList))
|
||||
{
|
||||
sqlStmt += " (";
|
||||
@@ -1560,7 +1560,7 @@ wxColInf *wxDB::GetColumns(char *tableName[], const char *userID)
|
||||
* userID != "" ... UserID set equal to 'userID'
|
||||
*
|
||||
* NOTE: ALL column bindings associated with this wxDB instance are unbound
|
||||
* by this function. This function should use its own wxDB instance
|
||||
* by this function. This function should use its own wxDB instance
|
||||
* to avoid undesired unbinding of columns.
|
||||
*/
|
||||
{
|
||||
@@ -1588,7 +1588,7 @@ wxColInf *wxDB::GetColumns(char *tableName[], const char *userID)
|
||||
if (Dbms() == dbmsDBASE)
|
||||
UserID = "";
|
||||
|
||||
// Oracle user names may only be in uppercase, so force
|
||||
// Oracle user names may only be in uppercase, so force
|
||||
// the name to uppercase
|
||||
if (Dbms() == dbmsORACLE)
|
||||
UserID = UserID.Upper();
|
||||
@@ -1617,7 +1617,7 @@ wxColInf *wxDB::GetColumns(char *tableName[], const char *userID)
|
||||
for (tbl = 0; tableName[tbl]; tbl++)
|
||||
{
|
||||
TableName = tableName[tbl];
|
||||
// Oracle table names are uppercase only, so force
|
||||
// Oracle table names are uppercase only, so force
|
||||
// the name to uppercase just in case programmer forgot to do this
|
||||
if (Dbms() == dbmsORACLE)
|
||||
TableName = TableName.Upper();
|
||||
@@ -1720,7 +1720,7 @@ wxColInf *wxDB::GetColumns(char *tableName, int *numCols, const char *userID)
|
||||
* userID != "" ... UserID set equal to 'userID'
|
||||
*
|
||||
* NOTE: ALL column bindings associated with this wxDB instance are unbound
|
||||
* by this function. This function should use its own wxDB instance
|
||||
* by this function. This function should use its own wxDB instance
|
||||
* to avoid undesired unbinding of columns.
|
||||
*/
|
||||
{
|
||||
@@ -1748,7 +1748,7 @@ wxColInf *wxDB::GetColumns(char *tableName, int *numCols, const char *userID)
|
||||
if (Dbms() == dbmsDBASE)
|
||||
UserID = "";
|
||||
|
||||
// Oracle user names may only be in uppercase, so force
|
||||
// Oracle user names may only be in uppercase, so force
|
||||
// the name to uppercase
|
||||
if (Dbms() == dbmsORACLE)
|
||||
UserID = UserID.Upper();
|
||||
@@ -1774,7 +1774,7 @@ wxColInf *wxDB::GetColumns(char *tableName, int *numCols, const char *userID)
|
||||
}
|
||||
|
||||
TableName = tableName;
|
||||
// Oracle table names are uppercase only, so force
|
||||
// Oracle table names are uppercase only, so force
|
||||
// the name to uppercase just in case programmer forgot to do this
|
||||
if (Dbms() == dbmsORACLE)
|
||||
TableName = TableName.Upper();
|
||||
@@ -1829,7 +1829,7 @@ wxColInf *wxDB::GetColumns(char *tableName, int *numCols, const char *userID)
|
||||
GetData( 6, SQL_C_CHAR, (UCHAR*) colInf[colNo].typeName, 128+1, &cb);
|
||||
GetData( 7, SQL_C_SLONG, (UCHAR*) &colInf[colNo].columnSize, 0, &cb);
|
||||
// BJO 991214 : SQL_C_SSHORT instead of SQL_C_SLONG, otherwise fails on Sparc (probably all 64 bit architectures)
|
||||
GetData( 8, SQL_C_SSHORT, (UCHAR*) &colInf[colNo].bufferLength, 0, &cb);
|
||||
GetData( 8, SQL_C_SSHORT, (UCHAR*) &colInf[colNo].bufferLength, 0, &cb);
|
||||
GetData( 9, SQL_C_SSHORT, (UCHAR*) &colInf[colNo].decimalDigits,0, &cb);
|
||||
GetData(10, SQL_C_SSHORT, (UCHAR*) &colInf[colNo].numPrecRadix, 0, &cb);
|
||||
GetData(11, SQL_C_SSHORT, (UCHAR*) &colInf[colNo].nullable, 0, &cb);
|
||||
@@ -1892,7 +1892,7 @@ int wxDB::GetColumnCount(char *tableName, const char *userID)
|
||||
* userID != "" ... UserID set equal to 'userID'
|
||||
*
|
||||
* NOTE: ALL column bindings associated with this wxDB instance are unbound
|
||||
* by this function. This function should use its own wxDB instance
|
||||
* by this function. This function should use its own wxDB instance
|
||||
* to avoid undesired unbinding of columns.
|
||||
*/
|
||||
{
|
||||
@@ -1917,7 +1917,7 @@ int wxDB::GetColumnCount(char *tableName, const char *userID)
|
||||
if (Dbms() == dbmsDBASE)
|
||||
UserID = "";
|
||||
|
||||
// Oracle user names may only be in uppercase, so force
|
||||
// Oracle user names may only be in uppercase, so force
|
||||
// the name to uppercase
|
||||
if (Dbms() == dbmsORACLE)
|
||||
UserID = UserID.Upper();
|
||||
@@ -1926,7 +1926,7 @@ int wxDB::GetColumnCount(char *tableName, const char *userID)
|
||||
// Loop through each table name
|
||||
{
|
||||
TableName = tableName;
|
||||
// Oracle table names are uppercase only, so force
|
||||
// Oracle table names are uppercase only, so force
|
||||
// the name to uppercase just in case programmer forgot to do this
|
||||
if (Dbms() == dbmsORACLE)
|
||||
TableName = TableName.Upper();
|
||||
@@ -1999,7 +1999,7 @@ wxDbInf *wxDB::GetCatalog(char *userID)
|
||||
* userID != "" ... UserID set equal to 'userID'
|
||||
*
|
||||
* NOTE: ALL column bindings associated with this wxDB instance are unbound
|
||||
* by this function. This function should use its own wxDB instance
|
||||
* by this function. This function should use its own wxDB instance
|
||||
* to avoid undesired unbinding of columns.
|
||||
*/
|
||||
{
|
||||
@@ -2027,7 +2027,7 @@ wxDbInf *wxDB::GetCatalog(char *userID)
|
||||
if (Dbms() == dbmsDBASE)
|
||||
UserID = "";
|
||||
|
||||
// Oracle user names may only be in uppercase, so force
|
||||
// Oracle user names may only be in uppercase, so force
|
||||
// the name to uppercase
|
||||
if (Dbms() == dbmsORACLE)
|
||||
UserID = UserID.Upper();
|
||||
@@ -2132,7 +2132,7 @@ bool wxDB::Catalog(const char *userID, const char *fileName)
|
||||
* userID != "" ... UserID set equal to 'userID'
|
||||
*
|
||||
* NOTE: ALL column bindings associated with this wxDB instance are unbound
|
||||
* by this function. This function should use its own wxDB instance
|
||||
* by this function. This function should use its own wxDB instance
|
||||
* to avoid undesired unbinding of columns.
|
||||
*/
|
||||
{
|
||||
@@ -2169,7 +2169,7 @@ bool wxDB::Catalog(const char *userID, const char *fileName)
|
||||
if (Dbms() == dbmsDBASE)
|
||||
UserID = "";
|
||||
|
||||
// Oracle user names may only be in uppercase, so force
|
||||
// Oracle user names may only be in uppercase, so force
|
||||
// the name to uppercase
|
||||
if (Dbms() == dbmsORACLE)
|
||||
UserID = UserID.Upper();
|
||||
@@ -2295,13 +2295,13 @@ bool wxDB::TableExists(const char *tableName, const char *userID, const char *ta
|
||||
else
|
||||
UserID = "";
|
||||
|
||||
// Oracle user names may only be in uppercase, so force
|
||||
// Oracle user names may only be in uppercase, so force
|
||||
// the name to uppercase
|
||||
if (Dbms() == dbmsORACLE)
|
||||
UserID = UserID.Upper();
|
||||
|
||||
TableName = tableName;
|
||||
// Oracle table names are uppercase only, so force
|
||||
// Oracle table names are uppercase only, so force
|
||||
// the name to uppercase just in case programmer forgot to do this
|
||||
if (Dbms() == dbmsORACLE)
|
||||
TableName = TableName.Upper();
|
||||
@@ -2434,7 +2434,7 @@ DBMS wxDB::Dbms(void)
|
||||
* - Cannot support selecting for update [::CanSelectForUpdate()]. Always returns FALSE
|
||||
*
|
||||
* POSTGRES
|
||||
* - Does not support the keywords 'ASC' or 'DESC' as of release v6.5.0
|
||||
* - Does not support the keywords 'ASC' or 'DESC' as of release v6.5.0
|
||||
*
|
||||
*
|
||||
*/
|
||||
@@ -2444,7 +2444,7 @@ DBMS wxDB::Dbms(void)
|
||||
wxStrncpy(baseName,dbInf.dbmsName,25);
|
||||
if (!wxStricmp(dbInf.dbmsName,"Adaptive Server Anywhere"))
|
||||
return(dbmsSYBASE_ASA);
|
||||
if (!wxStricmp(dbInf.dbmsName,"SQL Server")) // Sybase Adaptive Server
|
||||
if (!wxStricmp(dbInf.dbmsName,"SQL Server")) // Sybase Adaptive Server
|
||||
return(dbmsSYBASE_ASE);
|
||||
if (!wxStricmp(dbInf.dbmsName,"Microsoft SQL Server"))
|
||||
return(dbmsMS_SQL_SERVER);
|
||||
@@ -2559,7 +2559,7 @@ bool WXDLLEXPORT FreeDbConnection(wxDB *pDb)
|
||||
void WXDLLEXPORT CloseDbConnections(void)
|
||||
{
|
||||
DbList *pList, *pNext;
|
||||
|
||||
|
||||
// Traverse the linked list closing database connections and freeing memory as I go.
|
||||
for (pList = PtrBegDbList; pList; pList = pNext)
|
||||
{
|
||||
|
@@ -46,268 +46,52 @@
|
||||
#include "wx/validate.h"
|
||||
#endif // wxUSE_GUI
|
||||
|
||||
|
||||
#if defined(__VISAGECPP__) && __IBMCPP__ >= 400
|
||||
// must define these static for VA or else you get multiply defined symbols everywhere
|
||||
const wxEventType wxEVT_NULL = 0;
|
||||
const wxEventType wxEVT_FIRST = 10000;
|
||||
|
||||
const wxEventType wxEVT_COMMAND_BUTTON_CLICKED = wxEVT_FIRST + 1;
|
||||
const wxEventType wxEVT_COMMAND_CHECKBOX_CLICKED = wxEVT_FIRST + 2;
|
||||
const wxEventType wxEVT_COMMAND_CHOICE_SELECTED = wxEVT_FIRST + 3;
|
||||
const wxEventType wxEVT_COMMAND_LISTBOX_SELECTED = wxEVT_FIRST + 4;
|
||||
const wxEventType wxEVT_COMMAND_LISTBOX_DOUBLECLICKED = wxEVT_FIRST + 5;
|
||||
const wxEventType wxEVT_COMMAND_CHECKLISTBOX_TOGGLED = wxEVT_FIRST + 6;
|
||||
const wxEventType wxEVT_COMMAND_TEXT_UPDATED = wxEVT_FIRST + 7;
|
||||
const wxEventType wxEVT_COMMAND_TEXT_ENTER = wxEVT_FIRST + 8;
|
||||
const wxEventType wxEVT_COMMAND_MENU_SELECTED = wxEVT_FIRST + 9;
|
||||
const wxEventType wxEVT_COMMAND_TOOL_CLICKED = wxEVT_COMMAND_MENU_SELECTED;
|
||||
const wxEventType wxEVT_COMMAND_SLIDER_UPDATED = wxEVT_FIRST + 10;
|
||||
const wxEventType wxEVT_COMMAND_RADIOBOX_SELECTED = wxEVT_FIRST + 11;
|
||||
const wxEventType wxEVT_COMMAND_RADIOBUTTON_SELECTED = wxEVT_FIRST + 12;
|
||||
//const wxEventType wxEVT_COMMAND_SCROLLBAR_UPDATED is now obsolete since we use wxEVT_SCROLL... events
|
||||
const wxEventType wxEVT_COMMAND_SCROLLBAR_UPDATED = wxEVT_FIRST + 13;
|
||||
const wxEventType wxEVT_COMMAND_VLBOX_SELECTED = wxEVT_FIRST + 14;
|
||||
const wxEventType wxEVT_COMMAND_COMBOBOX_SELECTED = wxEVT_FIRST + 15;
|
||||
const wxEventType wxEVT_COMMAND_TOOL_RCLICKED = wxEVT_FIRST + 16;
|
||||
const wxEventType wxEVT_COMMAND_TOOL_ENTER = wxEVT_FIRST + 17;
|
||||
const wxEventType wxEVT_COMMAND_SPINCTRL_UPDATED = wxEVT_FIRST + 18;
|
||||
|
||||
/* Sockets send events, too */
|
||||
const wxEventType wxEVT_SOCKET = wxEVT_FIRST + 50;
|
||||
const wxEventType wxEVT_TIMER = wxEVT_FIRST + 80;
|
||||
|
||||
/* Mouse event types */
|
||||
const wxEventType wxEVT_LEFT_DOWN = wxEVT_FIRST + 100;
|
||||
const wxEventType wxEVT_LEFT_UP = wxEVT_FIRST + 101;
|
||||
const wxEventType wxEVT_MIDDLE_DOWN = wxEVT_FIRST + 102;
|
||||
const wxEventType wxEVT_MIDDLE_UP = wxEVT_FIRST + 103;
|
||||
const wxEventType wxEVT_RIGHT_DOWN = wxEVT_FIRST + 104;
|
||||
const wxEventType wxEVT_RIGHT_UP = wxEVT_FIRST + 105;
|
||||
const wxEventType wxEVT_MOTION = wxEVT_FIRST + 106;
|
||||
const wxEventType wxEVT_ENTER_WINDOW = wxEVT_FIRST + 107;
|
||||
const wxEventType wxEVT_LEAVE_WINDOW = wxEVT_FIRST + 108;
|
||||
const wxEventType wxEVT_LEFT_DCLICK = wxEVT_FIRST + 109;
|
||||
const wxEventType wxEVT_MIDDLE_DCLICK = wxEVT_FIRST + 110;
|
||||
const wxEventType wxEVT_RIGHT_DCLICK = wxEVT_FIRST + 111;
|
||||
const wxEventType wxEVT_SET_FOCUS = wxEVT_FIRST + 112;
|
||||
const wxEventType wxEVT_KILL_FOCUS = wxEVT_FIRST + 113;
|
||||
|
||||
/* Non-client mouse events */
|
||||
const wxEventType wxEVT_NC_LEFT_DOWN = wxEVT_FIRST + 200;
|
||||
const wxEventType wxEVT_NC_LEFT_UP = wxEVT_FIRST + 201;
|
||||
const wxEventType wxEVT_NC_MIDDLE_DOWN = wxEVT_FIRST + 202;
|
||||
const wxEventType wxEVT_NC_MIDDLE_UP = wxEVT_FIRST + 203;
|
||||
const wxEventType wxEVT_NC_RIGHT_DOWN = wxEVT_FIRST + 204;
|
||||
const wxEventType wxEVT_NC_RIGHT_UP = wxEVT_FIRST + 205;
|
||||
const wxEventType wxEVT_NC_MOTION = wxEVT_FIRST + 206;
|
||||
const wxEventType wxEVT_NC_ENTER_WINDOW = wxEVT_FIRST + 207;
|
||||
const wxEventType wxEVT_NC_LEAVE_WINDOW = wxEVT_FIRST + 208;
|
||||
const wxEventType wxEVT_NC_LEFT_DCLICK = wxEVT_FIRST + 209;
|
||||
const wxEventType wxEVT_NC_MIDDLE_DCLICK = wxEVT_FIRST + 210;
|
||||
const wxEventType wxEVT_NC_RIGHT_DCLICK = wxEVT_FIRST + 211;
|
||||
|
||||
/* Character input event type */
|
||||
const wxEventType wxEVT_CHAR = wxEVT_FIRST + 212;
|
||||
const wxEventType wxEVT_CHAR_HOOK = wxEVT_FIRST + 213;
|
||||
const wxEventType wxEVT_NAVIGATION_KEY = wxEVT_FIRST + 214;
|
||||
const wxEventType wxEVT_KEY_DOWN = wxEVT_FIRST + 215;
|
||||
const wxEventType wxEVT_KEY_UP = wxEVT_FIRST + 216;
|
||||
|
||||
/*
|
||||
* wxScrollbar and wxSlider event identifiers
|
||||
*/
|
||||
const wxEventType wxEVT_SCROLL_TOP = wxEVT_FIRST + 300;
|
||||
const wxEventType wxEVT_SCROLL_BOTTOM = wxEVT_FIRST + 301;
|
||||
const wxEventType wxEVT_SCROLL_LINEUP = wxEVT_FIRST + 302;
|
||||
const wxEventType wxEVT_SCROLL_LINEDOWN = wxEVT_FIRST + 303;
|
||||
const wxEventType wxEVT_SCROLL_PAGEUP = wxEVT_FIRST + 304;
|
||||
const wxEventType wxEVT_SCROLL_PAGEDOWN = wxEVT_FIRST + 305;
|
||||
const wxEventType wxEVT_SCROLL_THUMBTRACK = wxEVT_FIRST + 306;
|
||||
const wxEventType wxEVT_SCROLL_THUMBRELEASE = wxEVT_FIRST + 307;
|
||||
|
||||
/*
|
||||
* Scroll events from wxWindow
|
||||
*/
|
||||
const wxEventType wxEVT_SCROLLWIN_TOP = wxEVT_FIRST + 320;
|
||||
const wxEventType wxEVT_SCROLLWIN_BOTTOM = wxEVT_FIRST + 321;
|
||||
const wxEventType wxEVT_SCROLLWIN_LINEUP = wxEVT_FIRST + 322;
|
||||
const wxEventType wxEVT_SCROLLWIN_LINEDOWN = wxEVT_FIRST + 323;
|
||||
const wxEventType wxEVT_SCROLLWIN_PAGEUP = wxEVT_FIRST + 324;
|
||||
const wxEventType wxEVT_SCROLLWIN_PAGEDOWN = wxEVT_FIRST + 325;
|
||||
const wxEventType wxEVT_SCROLLWIN_THUMBTRACK = wxEVT_FIRST + 326;
|
||||
const wxEventType wxEVT_SCROLLWIN_THUMBRELEASE = wxEVT_FIRST + 327;
|
||||
|
||||
/*
|
||||
* System events
|
||||
*/
|
||||
const wxEventType wxEVT_SIZE = wxEVT_FIRST + 400;
|
||||
const wxEventType wxEVT_MOVE = wxEVT_FIRST + 401;
|
||||
const wxEventType wxEVT_CLOSE_WINDOW = wxEVT_FIRST + 402;
|
||||
const wxEventType wxEVT_END_SESSION = wxEVT_FIRST + 403;
|
||||
const wxEventType wxEVT_QUERY_END_SESSION = wxEVT_FIRST + 404;
|
||||
const wxEventType wxEVT_ACTIVATE_APP = wxEVT_FIRST + 405;
|
||||
const wxEventType wxEVT_POWER = wxEVT_FIRST + 406;
|
||||
const wxEventType wxEVT_ACTIVATE = wxEVT_FIRST + 409;
|
||||
const wxEventType wxEVT_CREATE = wxEVT_FIRST + 410;
|
||||
const wxEventType wxEVT_DESTROY = wxEVT_FIRST + 411;
|
||||
const wxEventType wxEVT_SHOW = wxEVT_FIRST + 412;
|
||||
const wxEventType wxEVT_ICONIZE = wxEVT_FIRST + 413;
|
||||
const wxEventType wxEVT_MAXIMIZE = wxEVT_FIRST + 414;
|
||||
const wxEventType wxEVT_MOUSE_CAPTURE_CHANGED = wxEVT_FIRST + 415;
|
||||
const wxEventType wxEVT_PAINT = wxEVT_FIRST + 416;
|
||||
const wxEventType wxEVT_ERASE_BACKGROUND = wxEVT_FIRST + 417;
|
||||
const wxEventType wxEVT_NC_PAINT = wxEVT_FIRST + 418;
|
||||
const wxEventType wxEVT_PAINT_ICON = wxEVT_FIRST + 419;
|
||||
const wxEventType wxEVT_MENU_CHAR = wxEVT_FIRST + 420;
|
||||
const wxEventType wxEVT_MENU_INIT = wxEVT_FIRST + 421;
|
||||
const wxEventType wxEVT_MENU_HIGHLIGHT = wxEVT_FIRST + 422;
|
||||
const wxEventType wxEVT_POPUP_MENU_INIT = wxEVT_FIRST + 423;
|
||||
const wxEventType wxEVT_CONTEXT_MENU = wxEVT_FIRST + 424;
|
||||
const wxEventType wxEVT_SYS_COLOUR_CHANGED = wxEVT_FIRST + 425;
|
||||
const wxEventType wxEVT_SETTING_CHANGED = wxEVT_FIRST + 426;
|
||||
const wxEventType wxEVT_QUERY_NEW_PALETTE = wxEVT_FIRST + 427;
|
||||
const wxEventType wxEVT_PALETTE_CHANGED = wxEVT_FIRST + 428;
|
||||
const wxEventType wxEVT_JOY_BUTTON_DOWN = wxEVT_FIRST + 429;
|
||||
const wxEventType wxEVT_JOY_BUTTON_UP = wxEVT_FIRST + 430;
|
||||
const wxEventType wxEVT_JOY_MOVE = wxEVT_FIRST + 431;
|
||||
const wxEventType wxEVT_JOY_ZMOVE = wxEVT_FIRST + 432;
|
||||
const wxEventType wxEVT_DROP_FILES = wxEVT_FIRST + 433;
|
||||
const wxEventType wxEVT_DRAW_ITEM = wxEVT_FIRST + 434;
|
||||
const wxEventType wxEVT_MEASURE_ITEM = wxEVT_FIRST + 435;
|
||||
const wxEventType wxEVT_COMPARE_ITEM = wxEVT_FIRST + 436;
|
||||
const wxEventType wxEVT_INIT_DIALOG = wxEVT_FIRST + 437;
|
||||
const wxEventType wxEVT_IDLE = wxEVT_FIRST + 438;
|
||||
const wxEventType wxEVT_UPDATE_UI = wxEVT_FIRST + 439;
|
||||
|
||||
/* System misc. */
|
||||
const wxEventType wxEVT_END_PROCESS = wxEVT_FIRST + 440;
|
||||
|
||||
/* Dial up events */
|
||||
const wxEventType wxEVT_DIALUP_CONNECTED = wxEVT_FIRST + 450;
|
||||
const wxEventType wxEVT_DIALUP_DISCONNECTED = wxEVT_FIRST + 451;
|
||||
|
||||
/* Generic command events */
|
||||
/* Note: a click is a higher-level event than button down/up */
|
||||
const wxEventType wxEVT_COMMAND_LEFT_CLICK = wxEVT_FIRST + 500;
|
||||
const wxEventType wxEVT_COMMAND_LEFT_DCLICK = wxEVT_FIRST + 501;
|
||||
const wxEventType wxEVT_COMMAND_RIGHT_CLICK = wxEVT_FIRST + 502;
|
||||
const wxEventType wxEVT_COMMAND_RIGHT_DCLICK = wxEVT_FIRST + 503;
|
||||
const wxEventType wxEVT_COMMAND_SET_FOCUS = wxEVT_FIRST + 504;
|
||||
const wxEventType wxEVT_COMMAND_KILL_FOCUS = wxEVT_FIRST + 505;
|
||||
const wxEventType wxEVT_COMMAND_ENTER = wxEVT_FIRST + 506;
|
||||
|
||||
/* Tree control event types */
|
||||
const wxEventType wxEVT_COMMAND_TREE_BEGIN_DRAG = wxEVT_FIRST + 600;
|
||||
const wxEventType wxEVT_COMMAND_TREE_BEGIN_RDRAG = wxEVT_FIRST + 601;
|
||||
const wxEventType wxEVT_COMMAND_TREE_BEGIN_LABEL_EDIT = wxEVT_FIRST + 602;
|
||||
const wxEventType wxEVT_COMMAND_TREE_END_LABEL_EDIT = wxEVT_FIRST + 603;
|
||||
const wxEventType wxEVT_COMMAND_TREE_DELETE_ITEM = wxEVT_FIRST + 604;
|
||||
const wxEventType wxEVT_COMMAND_TREE_GET_INFO = wxEVT_FIRST + 605;
|
||||
const wxEventType wxEVT_COMMAND_TREE_SET_INFO = wxEVT_FIRST + 606;
|
||||
const wxEventType wxEVT_COMMAND_TREE_ITEM_EXPANDED = wxEVT_FIRST + 607;
|
||||
const wxEventType wxEVT_COMMAND_TREE_ITEM_EXPANDING = wxEVT_FIRST + 608;
|
||||
const wxEventType wxEVT_COMMAND_TREE_ITEM_COLLAPSED = wxEVT_FIRST + 609;
|
||||
const wxEventType wxEVT_COMMAND_TREE_ITEM_COLLAPSING = wxEVT_FIRST + 610;
|
||||
const wxEventType wxEVT_COMMAND_TREE_SEL_CHANGED = wxEVT_FIRST + 611;
|
||||
const wxEventType wxEVT_COMMAND_TREE_SEL_CHANGING = wxEVT_FIRST + 612;
|
||||
const wxEventType wxEVT_COMMAND_TREE_KEY_DOWN = wxEVT_FIRST + 613;
|
||||
const wxEventType wxEVT_COMMAND_TREE_ITEM_ACTIVATED = wxEVT_FIRST + 614;
|
||||
const wxEventType wxEVT_COMMAND_TREE_ITEM_RIGHT_CLICK = wxEVT_FIRST + 615;
|
||||
const wxEventType wxEVT_COMMAND_TREE_ITEM_MIDDLE_CLICK = wxEVT_FIRST + 616;
|
||||
|
||||
/* List control event types */
|
||||
const wxEventType wxEVT_COMMAND_LIST_BEGIN_DRAG = wxEVT_FIRST + 700;
|
||||
const wxEventType wxEVT_COMMAND_LIST_BEGIN_RDRAG = wxEVT_FIRST + 701;
|
||||
const wxEventType wxEVT_COMMAND_LIST_BEGIN_LABEL_EDIT = wxEVT_FIRST + 702;
|
||||
const wxEventType wxEVT_COMMAND_LIST_END_LABEL_EDIT = wxEVT_FIRST + 703;
|
||||
const wxEventType wxEVT_COMMAND_LIST_DELETE_ITEM = wxEVT_FIRST + 704;
|
||||
const wxEventType wxEVT_COMMAND_LIST_DELETE_ALL_ITEMS = wxEVT_FIRST + 705;
|
||||
const wxEventType wxEVT_COMMAND_LIST_GET_INFO = wxEVT_FIRST + 706;
|
||||
const wxEventType wxEVT_COMMAND_LIST_SET_INFO = wxEVT_FIRST + 707;
|
||||
const wxEventType wxEVT_COMMAND_LIST_ITEM_SELECTED = wxEVT_FIRST + 708;
|
||||
const wxEventType wxEVT_COMMAND_LIST_ITEM_DESELECTED = wxEVT_FIRST + 709;
|
||||
const wxEventType wxEVT_COMMAND_LIST_KEY_DOWN = wxEVT_FIRST + 710;
|
||||
const wxEventType wxEVT_COMMAND_LIST_INSERT_ITEM = wxEVT_FIRST + 711;
|
||||
const wxEventType wxEVT_COMMAND_LIST_COL_CLICK = wxEVT_FIRST + 712;
|
||||
const wxEventType wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK = wxEVT_FIRST + 713;
|
||||
const wxEventType wxEVT_COMMAND_LIST_ITEM_MIDDLE_CLICK = wxEVT_FIRST + 714;
|
||||
const wxEventType wxEVT_COMMAND_LIST_ITEM_ACTIVATED = wxEVT_FIRST + 715;
|
||||
|
||||
/* Tab and notebook control event types */
|
||||
const wxEventType wxEVT_COMMAND_TAB_SEL_CHANGED = wxEVT_FIRST + 800;
|
||||
const wxEventType wxEVT_COMMAND_TAB_SEL_CHANGING = wxEVT_FIRST + 801;
|
||||
const wxEventType wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED = wxEVT_FIRST + 802;
|
||||
const wxEventType wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING = wxEVT_FIRST + 803;
|
||||
|
||||
/* Splitter events */
|
||||
const wxEventType wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED = wxEVT_FIRST + 850;
|
||||
const wxEventType wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGING = wxEVT_FIRST + 851;
|
||||
const wxEventType wxEVT_COMMAND_SPLITTER_DOUBLECLICKED = wxEVT_FIRST + 852;
|
||||
const wxEventType wxEVT_COMMAND_SPLITTER_UNSPLIT = wxEVT_FIRST + 853;
|
||||
|
||||
/* Wizard events */
|
||||
const wxEventType wxEVT_WIZARD_PAGE_CHANGED = wxEVT_FIRST + 900;
|
||||
const wxEventType wxEVT_WIZARD_PAGE_CHANGING = wxEVT_FIRST + 901;
|
||||
const wxEventType wxEVT_WIZARD_CANCEL = wxEVT_FIRST + 902;
|
||||
|
||||
/* Calendar events */
|
||||
const wxEventType wxEVT_CALENDAR_SEL_CHANGED = wxEVT_FIRST + 950;
|
||||
const wxEventType wxEVT_CALENDAR_DAY_CHANGED = wxEVT_FIRST + 951;
|
||||
const wxEventType wxEVT_CALENDAR_MONTH_CHANGED = wxEVT_FIRST + 952;
|
||||
const wxEventType wxEVT_CALENDAR_YEAR_CHANGED = wxEVT_FIRST + 953;
|
||||
const wxEventType wxEVT_CALENDAR_DOUBLECLICKED = wxEVT_FIRST + 954;
|
||||
const wxEventType wxEVT_CALENDAR_WEEKDAY_CLICKED = wxEVT_FIRST + 955;
|
||||
|
||||
const wxEventType wxEVT_USER_FIRST = wxEVT_FIRST + 2000;
|
||||
#endif
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxWin macros
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxEvtHandler, wxObject)
|
||||
IMPLEMENT_ABSTRACT_CLASS(wxEvent, wxObject)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxIdleEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxEvtHandler, wxObject)
|
||||
IMPLEMENT_ABSTRACT_CLASS(wxEvent, wxObject)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxIdleEvent, wxEvent)
|
||||
|
||||
#if wxUSE_GUI
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxCommandEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxNotifyEvent, wxCommandEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxScrollEvent, wxCommandEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxScrollWinEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxMouseEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxKeyEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxSizeEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxPaintEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxEraseEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxMoveEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxFocusEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxCloseEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxShowEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxMaximizeEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxIconizeEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxMenuEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxJoystickEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxDropFilesEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxActivateEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxInitDialogEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxSysColourChangedEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxUpdateUIEvent, wxCommandEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxNavigationKeyEvent, wxCommandEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxPaletteChangedEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxQueryNewPaletteEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxWindowCreateEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxWindowDestroyEvent, wxEvent)
|
||||
#endif // wxUSE_GUI
|
||||
#if wxUSE_GUI
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxCommandEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxNotifyEvent, wxCommandEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxScrollEvent, wxCommandEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxScrollWinEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxMouseEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxKeyEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxSizeEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxPaintEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxEraseEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxMoveEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxFocusEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxCloseEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxShowEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxMaximizeEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxIconizeEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxMenuEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxJoystickEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxDropFilesEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxActivateEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxInitDialogEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxSysColourChangedEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxUpdateUIEvent, wxCommandEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxNavigationKeyEvent, wxCommandEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxPaletteChangedEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxQueryNewPaletteEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxWindowCreateEvent, wxEvent)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxWindowDestroyEvent, wxEvent)
|
||||
#endif // wxUSE_GUI
|
||||
|
||||
const wxEventTable *wxEvtHandler::GetEventTable() const
|
||||
{ return &wxEvtHandler::sm_eventTable; }
|
||||
const wxEventTable *wxEvtHandler::GetEventTable() const
|
||||
{ return &wxEvtHandler::sm_eventTable; }
|
||||
|
||||
const wxEventTable wxEvtHandler::sm_eventTable =
|
||||
{ (const wxEventTable *)NULL, &wxEvtHandler::sm_eventTableEntries[0] };
|
||||
const wxEventTable wxEvtHandler::sm_eventTable =
|
||||
{ (const wxEventTable *)NULL, &wxEvtHandler::sm_eventTableEntries[0] };
|
||||
|
||||
const wxEventTableEntry wxEvtHandler::sm_eventTableEntries[] =
|
||||
{ { 0, 0, 0, (wxObjectEventFunction) NULL, (wxObject*) NULL } };
|
||||
const wxEventTableEntry wxEvtHandler::sm_eventTableEntries[] =
|
||||
{ { 0, 0, 0, (wxObjectEventFunction) NULL, (wxObject*) NULL } };
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
@@ -421,6 +205,19 @@ wxScrollEvent::wxScrollEvent(wxEventType commandType,
|
||||
{
|
||||
m_extraLong = orient;
|
||||
m_commandInt = pos;
|
||||
<<<<<<< event.cpp
|
||||
m_isScrolling = TRUE;
|
||||
}
|
||||
|
||||
void wxScrollEvent::CopyObject(wxObject& obj_d) const
|
||||
{
|
||||
wxScrollEvent *obj = (wxScrollEvent*)&obj_d;
|
||||
|
||||
wxCommandEvent::CopyObject(obj_d);
|
||||
|
||||
obj->m_isScrolling = m_isScrolling;
|
||||
=======
|
||||
>>>>>>> 1.69
|
||||
}
|
||||
|
||||
/*
|
||||
|
@@ -210,48 +210,62 @@ void wxLogGui::Flush()
|
||||
style = wxICON_INFORMATION;
|
||||
}
|
||||
|
||||
#if wxUSE_LOG_DIALOG
|
||||
wxLogDialog dlg(wxTheApp->GetTopWindow(),
|
||||
m_aMessages, m_aSeverity, m_aTimes,
|
||||
title, style);
|
||||
// this is the best we can do here
|
||||
wxWindow *parent = wxTheApp->GetTopWindow();
|
||||
|
||||
// clear the message list before showing the dialog because while it's
|
||||
// shown some new messages may appear
|
||||
Clear();
|
||||
size_t nMsgCount = m_aMessages.Count();
|
||||
|
||||
(void)dlg.ShowModal();
|
||||
|
||||
#else // !wxUSE_LOG_DIALOG
|
||||
// concatenate all strings (but not too many to not overfill the msg box)
|
||||
wxString str;
|
||||
size_t nLines = 0,
|
||||
nMsgCount = m_aMessages.Count();
|
||||
if ( nMsgCount == 1 )
|
||||
{
|
||||
str = m_aMessages[0];
|
||||
}
|
||||
else // more than one message
|
||||
{
|
||||
#if wxUSE_LOG_DIALOG
|
||||
wxLogDialog dlg(parent,
|
||||
m_aMessages, m_aSeverity, m_aTimes,
|
||||
title, style);
|
||||
|
||||
// start from the most recent message
|
||||
for ( size_t n = nMsgCount; n > 0; n-- ) {
|
||||
// for Windows strings longer than this value are wrapped (NT 4.0)
|
||||
const size_t nMsgLineWidth = 156;
|
||||
// clear the message list before showing the dialog because while it's
|
||||
// shown some new messages may appear
|
||||
Clear();
|
||||
|
||||
nLines += (m_aMessages[n - 1].Len() + nMsgLineWidth - 1) / nMsgLineWidth;
|
||||
(void)dlg.ShowModal();
|
||||
#else // !wxUSE_LOG_DIALOG
|
||||
// concatenate all strings (but not too many to not overfill the msg box)
|
||||
size_t nLines = 0;
|
||||
|
||||
if ( nLines > 25 ) // don't put too many lines in message box
|
||||
break;
|
||||
// start from the most recent message
|
||||
for ( size_t n = nMsgCount; n > 0; n-- ) {
|
||||
// for Windows strings longer than this value are wrapped (NT 4.0)
|
||||
const size_t nMsgLineWidth = 156;
|
||||
|
||||
str << m_aMessages[n - 1] << wxT("\n");
|
||||
nLines += (m_aMessages[n - 1].Len() + nMsgLineWidth - 1) / nMsgLineWidth;
|
||||
|
||||
if ( nLines > 25 ) // don't put too many lines in message box
|
||||
break;
|
||||
|
||||
str << m_aMessages[n - 1] << wxT("\n");
|
||||
}
|
||||
#endif // wxUSE_LOG_DIALOG/!wxUSE_LOG_DIALOG
|
||||
}
|
||||
|
||||
wxMessageBox(str, title, wxOK | style);
|
||||
// this catches both cases of 1 message with wxUSE_LOG_DIALOG and any
|
||||
// situation without it
|
||||
if ( !!str )
|
||||
{
|
||||
wxMessageBox(str, title, wxOK | style, parent);
|
||||
|
||||
// no undisplayed messages whatsoever
|
||||
Clear();
|
||||
#endif // wxUSE_LOG_DIALOG/!wxUSE_LOG_DIALOG
|
||||
// no undisplayed messages whatsoever
|
||||
Clear();
|
||||
}
|
||||
|
||||
// do it here again
|
||||
m_bHasMessages = FALSE;
|
||||
}
|
||||
|
||||
// the default behaviour is to discard all informational messages if there
|
||||
// are any errors/warnings.
|
||||
// log all kinds of messages
|
||||
void wxLogGui::DoLog(wxLogLevel level, const wxChar *szString, time_t t)
|
||||
{
|
||||
switch ( level ) {
|
||||
@@ -696,12 +710,15 @@ wxLogDialog::wxLogDialog(wxWindow *parent,
|
||||
|
||||
btnOk->SetFocus();
|
||||
|
||||
// this can't happen any more as we don't use this dialog in this case
|
||||
#if 0
|
||||
if ( count == 1 )
|
||||
{
|
||||
// no details... it's easier to disable a button than to change the
|
||||
// dialog layout depending on whether we have details or not
|
||||
m_btnDetails->Disable();
|
||||
}
|
||||
#endif // 0
|
||||
|
||||
Centre();
|
||||
}
|
||||
|
@@ -6,9 +6,17 @@
|
||||
// Created: 08/04/99
|
||||
// RCS-ID: $Id$
|
||||
// Copyright: (c) Julian Smart
|
||||
// Licence: wxWindows licence
|
||||
// Licence: wxWindows licence
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// ============================================================================
|
||||
// declarations
|
||||
// ============================================================================
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// headers
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
#ifdef __GNUG__
|
||||
#pragma implementation "dragimag.h"
|
||||
#endif
|
||||
@@ -39,12 +47,26 @@
|
||||
#include "wx/msw/dragimag.h"
|
||||
#include "wx/msw/private.h"
|
||||
|
||||
#if (defined(__WIN95__) && !defined(__GNUWIN32__)) || defined(__TWIN32__) || defined(wxUSE_NORLANDER_HEADERS)
|
||||
#if defined(__WIN95__) && !(defined(__GNUWIN32_OLD__) || defined(__TWIN32__))
|
||||
#include <commctrl.h>
|
||||
#endif
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// macros
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxDragImage, wxObject)
|
||||
|
||||
#define GetHimageList() ((HIMAGELIST) m_hImageList)
|
||||
|
||||
// ============================================================================
|
||||
// implementation
|
||||
// ============================================================================
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxDragImage ctors/dtor
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
wxDragImage::wxDragImage()
|
||||
{
|
||||
m_hImageList = 0;
|
||||
@@ -52,9 +74,8 @@ wxDragImage::wxDragImage()
|
||||
|
||||
wxDragImage::~wxDragImage()
|
||||
{
|
||||
if ( m_hImageList )
|
||||
ImageList_Destroy((HIMAGELIST) m_hImageList);
|
||||
m_hImageList = 0;
|
||||
if ( m_hImageList )
|
||||
ImageList_Destroy(GetHimageList());
|
||||
}
|
||||
|
||||
|
||||
@@ -68,24 +89,24 @@ wxDragImage::~wxDragImage()
|
||||
// Create a drag image from a bitmap and optional cursor
|
||||
bool wxDragImage::Create(const wxBitmap& image, const wxCursor& cursor, const wxPoint& hotspot)
|
||||
{
|
||||
if ( m_hImageList )
|
||||
ImageList_Destroy((HIMAGELIST) m_hImageList);
|
||||
m_hImageList = 0;
|
||||
if ( m_hImageList )
|
||||
ImageList_Destroy(GetHimageList());
|
||||
m_hImageList = 0;
|
||||
|
||||
UINT flags = 0;
|
||||
UINT flags = 0;
|
||||
bool mask = TRUE; // ?
|
||||
if ( mask )
|
||||
flags |= ILC_MASK;
|
||||
if ( mask )
|
||||
flags |= ILC_MASK;
|
||||
|
||||
m_hImageList = (WXHIMAGELIST) ImageList_Create(image.GetWidth(), image.GetHeight(), flags, 1, 1);
|
||||
m_hImageList = (WXHIMAGELIST) ImageList_Create(image.GetWidth(), image.GetHeight(), flags, 1, 1);
|
||||
|
||||
HBITMAP hBitmap1 = (HBITMAP) image.GetHBITMAP();
|
||||
HBITMAP hBitmap2 = 0;
|
||||
if ( image.GetMask() )
|
||||
hBitmap2 = (HBITMAP) image.GetMask()->GetMaskBitmap();
|
||||
HBITMAP hBitmap1 = (HBITMAP) image.GetHBITMAP();
|
||||
HBITMAP hBitmap2 = 0;
|
||||
if ( image.GetMask() )
|
||||
hBitmap2 = (HBITMAP) image.GetMask()->GetMaskBitmap();
|
||||
|
||||
int index = ImageList_Add((HIMAGELIST) m_hImageList, hBitmap1, hBitmap2);
|
||||
if ( index == -1 )
|
||||
int index = ImageList_Add(GetHimageList(), hBitmap1, hBitmap2);
|
||||
if ( index == -1 )
|
||||
{
|
||||
wxLogError(_("Couldn't add an image to the image list."));
|
||||
}
|
||||
@@ -95,25 +116,25 @@ bool wxDragImage::Create(const wxBitmap& image, const wxCursor& cursor, const wx
|
||||
|
||||
return (index != -1) ;
|
||||
}
|
||||
|
||||
|
||||
// Create a drag image from an icon and optional cursor
|
||||
bool wxDragImage::Create(const wxIcon& image, const wxCursor& cursor, const wxPoint& hotspot)
|
||||
{
|
||||
if ( m_hImageList )
|
||||
ImageList_Destroy((HIMAGELIST) m_hImageList);
|
||||
m_hImageList = 0;
|
||||
if ( m_hImageList )
|
||||
ImageList_Destroy(GetHimageList());
|
||||
m_hImageList = 0;
|
||||
|
||||
UINT flags = 0;
|
||||
UINT flags = 0;
|
||||
bool mask = TRUE; // ?
|
||||
if ( mask )
|
||||
flags |= ILC_MASK;
|
||||
if ( mask )
|
||||
flags |= ILC_MASK;
|
||||
|
||||
m_hImageList = (WXHIMAGELIST) ImageList_Create(image.GetWidth(), image.GetHeight(), flags, 1, 1);
|
||||
m_hImageList = (WXHIMAGELIST) ImageList_Create(image.GetWidth(), image.GetHeight(), flags, 1, 1);
|
||||
|
||||
HICON hIcon = (HICON) image.GetHICON();
|
||||
HICON hIcon = (HICON) image.GetHICON();
|
||||
|
||||
int index = ImageList_AddIcon((HIMAGELIST) m_hImageList, hIcon);
|
||||
if ( index == -1 )
|
||||
int index = ImageList_AddIcon(GetHimageList(), hIcon);
|
||||
if ( index == -1 )
|
||||
{
|
||||
wxLogError(_("Couldn't add an image to the image list."));
|
||||
}
|
||||
@@ -123,7 +144,7 @@ bool wxDragImage::Create(const wxIcon& image, const wxCursor& cursor, const wxPo
|
||||
|
||||
return (index != -1) ;
|
||||
}
|
||||
|
||||
|
||||
// Create a drag image from a string and optional cursor
|
||||
bool wxDragImage::Create(const wxString& str, const wxCursor& cursor, const wxPoint& hotspot)
|
||||
{
|
||||
@@ -151,8 +172,8 @@ bool wxDragImage::Create(const wxString& str, const wxCursor& cursor, const wxPo
|
||||
// Create a drag image for the given tree control item
|
||||
bool wxDragImage::Create(const wxTreeCtrl& treeCtrl, wxTreeItemId& id)
|
||||
{
|
||||
if ( m_hImageList )
|
||||
ImageList_Destroy((HIMAGELIST) m_hImageList);
|
||||
if ( m_hImageList )
|
||||
ImageList_Destroy(GetHimageList());
|
||||
m_hImageList = (WXHIMAGELIST) TreeView_CreateDragImage((HWND) treeCtrl.GetHWND(), (HTREEITEM) (WXHTREEITEM) id);
|
||||
return TRUE;
|
||||
}
|
||||
@@ -160,8 +181,8 @@ bool wxDragImage::Create(const wxTreeCtrl& treeCtrl, wxTreeItemId& id)
|
||||
// Create a drag image for the given list control item
|
||||
bool wxDragImage::Create(const wxListCtrl& listCtrl, long id)
|
||||
{
|
||||
if ( m_hImageList )
|
||||
ImageList_Destroy((HIMAGELIST) m_hImageList);
|
||||
if ( m_hImageList )
|
||||
ImageList_Destroy(GetHimageList());
|
||||
POINT pt;
|
||||
pt.x = 0; pt.y = 0;
|
||||
m_hImageList = (WXHIMAGELIST) ListView_CreateDragImage((HWND) listCtrl.GetHWND(), id, & pt);
|
||||
@@ -169,35 +190,38 @@ bool wxDragImage::Create(const wxListCtrl& listCtrl, long id)
|
||||
}
|
||||
|
||||
// Begin drag
|
||||
bool wxDragImage::BeginDrag(const wxPoint& hotspot, wxWindow* WXUNUSED(window))
|
||||
bool wxDragImage::BeginDrag(const wxPoint& hotspot, wxWindow* window)
|
||||
{
|
||||
wxASSERT_MSG( (m_hImageList != 0), wxT("Image list must not be null in BeginDrag."));
|
||||
|
||||
bool ret = (ImageList_BeginDrag((HIMAGELIST) m_hImageList, 0, hotspot.x, hotspot.y) != 0);
|
||||
|
||||
wxASSERT_MSG( (ret), wxT("BeginDrag failed."));
|
||||
bool ret = (ImageList_BeginDrag(GetHimageList(), 0, hotspot.x, hotspot.y) != 0);
|
||||
|
||||
if (!ret)
|
||||
{
|
||||
wxFAIL_MSG( _T("BeginDrag failed.") );
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (m_cursor.Ok())
|
||||
{
|
||||
// First add the cursor to the image list
|
||||
int cursorIndex = ImageList_AddIcon((HIMAGELIST) m_hImageList, (HICON) m_cursor.GetHCURSOR());
|
||||
int cursorIndex = ImageList_AddIcon(GetHimageList(), (HICON) m_cursor.GetHCURSOR());
|
||||
|
||||
wxASSERT_MSG( (cursorIndex != -1), wxT("ImageList_AddIcon failed in BeginDrag."));
|
||||
|
||||
if (cursorIndex != -1)
|
||||
{
|
||||
ImageList_SetDragCursorImage((HIMAGELIST) m_hImageList, cursorIndex, m_hotspot.x, m_hotspot.y);
|
||||
ImageList_SetDragCursorImage(GetHimageList(), cursorIndex, m_hotspot.x, m_hotspot.y);
|
||||
}
|
||||
}
|
||||
|
||||
::ShowCursor(FALSE);
|
||||
::SetCapture(GetHwndOf(window));
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
// End drag
|
||||
bool wxDragImage::EndDrag(wxWindow* WXUNUSED(window))
|
||||
{
|
||||
@@ -205,11 +229,16 @@ bool wxDragImage::EndDrag(wxWindow* WXUNUSED(window))
|
||||
|
||||
ImageList_EndDrag();
|
||||
|
||||
if ( !::ReleaseCapture() )
|
||||
{
|
||||
wxLogLastError("ReleaseCapture");
|
||||
}
|
||||
|
||||
::ShowCursor(TRUE);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
// Move the image: call from OnMouseMove. Pt is in window client coordinates if window
|
||||
// is non-NULL, or in screen coordinates if NULL.
|
||||
bool wxDragImage::Move(const wxPoint& pt, wxWindow* window)
|
||||
|
@@ -2,7 +2,7 @@
|
||||
// Name: msw/registry.cpp
|
||||
// Purpose: implementation of registry classes and functions
|
||||
// Author: Vadim Zeitlin
|
||||
// Modified by:
|
||||
// Modified by:
|
||||
// Created: 03.04.98
|
||||
// RCS-ID: $Id$
|
||||
// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
|
||||
@@ -65,8 +65,8 @@ static struct
|
||||
const wxChar *szName;
|
||||
const wxChar *szShortName;
|
||||
}
|
||||
aStdKeys[] =
|
||||
{
|
||||
aStdKeys[] =
|
||||
{
|
||||
{ HKEY_CLASSES_ROOT, wxT("HKEY_CLASSES_ROOT"), wxT("HKCR") },
|
||||
#ifdef __WIN32__
|
||||
{ HKEY_CURRENT_USER, wxT("HKEY_CURRENT_USER"), wxT("HKCU") },
|
||||
@@ -110,7 +110,7 @@ static inline void RemoveTrailingSeparator(wxString& str);
|
||||
static bool KeyExists(WXHKEY hRootKey, const wxChar *szKey);
|
||||
|
||||
// combines value and key name (uses static buffer!)
|
||||
static const wxChar *GetFullName(const wxRegKey *pKey,
|
||||
static const wxChar *GetFullName(const wxRegKey *pKey,
|
||||
const wxChar *szValue = NULL);
|
||||
|
||||
// ============================================================================
|
||||
@@ -124,7 +124,7 @@ static const wxChar *GetFullName(const wxRegKey *pKey,
|
||||
const size_t wxRegKey::nStdKeys = WXSIZEOF(aStdKeys);
|
||||
|
||||
// @@ should take a `StdKey key', but as it's often going to be used in loops
|
||||
// it would require casts in user code.
|
||||
// it would require casts in user code.
|
||||
const wxChar *wxRegKey::GetStdKeyName(size_t key)
|
||||
{
|
||||
// return empty string if key is invalid
|
||||
@@ -148,7 +148,7 @@ wxRegKey::StdKey wxRegKey::ExtractKeyName(wxString& strKey)
|
||||
HKEY hRootKey = 0;
|
||||
size_t ui;
|
||||
for ( ui = 0; ui < nStdKeys; ui++ ) {
|
||||
if ( strRoot.CmpNoCase(aStdKeys[ui].szName) == 0 ||
|
||||
if ( strRoot.CmpNoCase(aStdKeys[ui].szName) == 0 ||
|
||||
strRoot.CmpNoCase(aStdKeys[ui].szShortName) == 0 ) {
|
||||
hRootKey = aStdKeys[ui].hkey;
|
||||
break;
|
||||
@@ -175,7 +175,7 @@ wxRegKey::StdKey wxRegKey::GetStdKeyFromHkey(WXHKEY hkey)
|
||||
if ( (int) aStdKeys[ui].hkey == (int) hkey )
|
||||
return (StdKey)ui;
|
||||
}
|
||||
|
||||
|
||||
wxFAIL_MSG(wxT("non root hkey passed to wxRegKey::GetStdKeyFromHkey."));
|
||||
|
||||
return HKCR;
|
||||
@@ -213,7 +213,7 @@ wxRegKey::wxRegKey(const wxRegKey& keyParent, const wxString& strKey)
|
||||
: m_strKey(keyParent.m_strKey)
|
||||
{
|
||||
// combine our name with parent's to get the full name
|
||||
if ( !m_strKey.IsEmpty() &&
|
||||
if ( !m_strKey.IsEmpty() &&
|
||||
(strKey.IsEmpty() || strKey[0] != REG_SEPARATOR) ) {
|
||||
m_strKey += REG_SEPARATOR;
|
||||
}
|
||||
@@ -294,7 +294,7 @@ bool wxRegKey::Exists() const
|
||||
wxString wxRegKey::GetName(bool bShortPrefix) const
|
||||
{
|
||||
StdKey key = GetStdKeyFromHkey((StdKey) m_hRootKey);
|
||||
wxString str = bShortPrefix ? aStdKeys[key].szShortName
|
||||
wxString str = bShortPrefix ? aStdKeys[key].szShortName
|
||||
: aStdKeys[key].szName;
|
||||
if ( !m_strKey.IsEmpty() )
|
||||
str << "\\" << m_strKey;
|
||||
@@ -302,37 +302,44 @@ wxString wxRegKey::GetName(bool bShortPrefix) const
|
||||
return str;
|
||||
}
|
||||
|
||||
#if defined( __GNUWIN32_OLD__ )
|
||||
bool wxRegKey::GetKeyInfo(size_t* pnSubKeys,
|
||||
size_t* pnMaxKeyLen,
|
||||
size_t* pnValues,
|
||||
size_t* pnMaxValueLen) const
|
||||
#else
|
||||
bool wxRegKey::GetKeyInfo(ulong *pnSubKeys,
|
||||
ulong *pnMaxKeyLen,
|
||||
ulong *pnValues,
|
||||
ulong *pnMaxValueLen) const
|
||||
#endif
|
||||
bool wxRegKey::GetKeyInfo(size_t *pnSubKeys,
|
||||
size_t *pnMaxKeyLen,
|
||||
size_t *pnValues,
|
||||
size_t *pnMaxValueLen) const
|
||||
{
|
||||
#if defined(__WIN32__) && !defined(__TWIN32__)
|
||||
|
||||
// old gcc headers incorrectly prototype RegQueryInfoKey()
|
||||
#ifdef __GNUWIN32_OLD__
|
||||
#define REG_PARAM (size_t *)
|
||||
#else
|
||||
#define REG_PARAM (LPDWORD)
|
||||
#endif
|
||||
|
||||
m_dwLastError = ::RegQueryInfoKey
|
||||
(
|
||||
(HKEY) m_hKey,
|
||||
NULL, // class name
|
||||
NULL, // (ptr to) size of class name buffer
|
||||
RESERVED,
|
||||
REG_PARAM
|
||||
pnSubKeys, // [out] number of subkeys
|
||||
REG_PARAM
|
||||
pnMaxKeyLen, // [out] max length of a subkey name
|
||||
NULL, // longest subkey class name
|
||||
REG_PARAM
|
||||
pnValues, // [out] number of values
|
||||
REG_PARAM
|
||||
pnMaxValueLen, // [out] max length of a value name
|
||||
NULL, // longest value data
|
||||
NULL, // security descriptor
|
||||
NULL // time of last modification
|
||||
);
|
||||
|
||||
#undef REG_PARAM
|
||||
|
||||
if ( m_dwLastError != ERROR_SUCCESS ) {
|
||||
wxLogSysError(m_dwLastError, _("can't get info about registry key '%s'"),
|
||||
wxLogSysError(m_dwLastError, _("Can't get info about registry key '%s'"),
|
||||
GetName().c_str());
|
||||
return FALSE;
|
||||
}
|
||||
@@ -358,7 +365,7 @@ bool wxRegKey::Open()
|
||||
HKEY tmpKey;
|
||||
m_dwLastError = RegOpenKey((HKEY) m_hRootKey, m_strKey, &tmpKey);
|
||||
if ( m_dwLastError != ERROR_SUCCESS ) {
|
||||
wxLogSysError(m_dwLastError, _("can't open registry key '%s'"),
|
||||
wxLogSysError(m_dwLastError, _("Can't open registry key '%s'"),
|
||||
GetName().c_str());
|
||||
return FALSE;
|
||||
}
|
||||
@@ -383,7 +390,7 @@ bool wxRegKey::Create(bool bOkIfExists)
|
||||
HKEY tmpKey;
|
||||
m_dwLastError = RegCreateKey((HKEY) m_hRootKey, m_strKey, &tmpKey);
|
||||
if ( m_dwLastError != ERROR_SUCCESS ) {
|
||||
wxLogSysError(m_dwLastError, _("can't create registry key '%s'"),
|
||||
wxLogSysError(m_dwLastError, _("Can't create registry key '%s'"),
|
||||
GetName().c_str());
|
||||
return FALSE;
|
||||
}
|
||||
@@ -400,7 +407,7 @@ bool wxRegKey::Close()
|
||||
if ( IsOpened() ) {
|
||||
m_dwLastError = RegCloseKey((HKEY) m_hKey);
|
||||
if ( m_dwLastError != ERROR_SUCCESS ) {
|
||||
wxLogSysError(m_dwLastError, _("can't close registry key '%s'"),
|
||||
wxLogSysError(m_dwLastError, _("Can't close registry key '%s'"),
|
||||
GetName().c_str());
|
||||
|
||||
m_hKey = 0;
|
||||
@@ -414,6 +421,126 @@ bool wxRegKey::Close()
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool wxRegKey::RenameValue(const wxChar *szValueOld, const wxChar *szValueNew)
|
||||
{
|
||||
bool ok = TRUE;
|
||||
if ( HasValue(szValueNew) ) {
|
||||
wxLogError(_("Registry value '%s' already exists."), szValueNew);
|
||||
|
||||
ok = FALSE;
|
||||
}
|
||||
|
||||
if ( !ok || !CopyValue(szValueOld, *this, szValueNew) ) {
|
||||
wxLogError(_("Failed to rename registry value '%s' to '%s'."),
|
||||
szValueOld, szValueNew);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool wxRegKey::CopyValue(const wxChar *szValue,
|
||||
wxRegKey& keyDst,
|
||||
const wxChar *szValueNew)
|
||||
{
|
||||
switch ( GetValueType(szValue) ) {
|
||||
case Type_String:
|
||||
{
|
||||
wxString strVal;
|
||||
return QueryValue(szValue, strVal) &&
|
||||
keyDst.SetValue(szValueNew, strVal);
|
||||
}
|
||||
|
||||
case Type_Dword:
|
||||
/* case Type_Dword_little_endian: == Type_Dword */
|
||||
{
|
||||
long dwVal;
|
||||
return QueryValue(szValue, &dwVal) &&
|
||||
keyDst.SetValue(szValueNew, dwVal);
|
||||
}
|
||||
|
||||
// these types are unsupported because I am not sure about how
|
||||
// exactly they should be copied and because they shouldn't
|
||||
// occur among the application keys (supposedly created with
|
||||
// this class)
|
||||
#ifdef __WIN32__
|
||||
case Type_None:
|
||||
case Type_Expand_String:
|
||||
case Type_Binary:
|
||||
case Type_Dword_big_endian:
|
||||
case Type_Link:
|
||||
case Type_Multi_String:
|
||||
case Type_Resource_list:
|
||||
case Type_Full_resource_descriptor:
|
||||
case Type_Resource_requirements_list:
|
||||
#endif // Win32
|
||||
default:
|
||||
wxLogError(_("Can't copy values of unsupported type %d."),
|
||||
GetValueType(szValue));
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
bool wxRegKey::Copy(const wxString& strNewName)
|
||||
{
|
||||
// create the new key first
|
||||
wxRegKey keyDst(strNewName);
|
||||
bool ok = keyDst.Create(FALSE /* fail if alredy exists */);
|
||||
if ( ok ) {
|
||||
ok = Copy(keyDst);
|
||||
|
||||
// we created the dest key but copying to it failed - delete it
|
||||
if ( !ok ) {
|
||||
(void)keyDst.DeleteSelf();
|
||||
}
|
||||
}
|
||||
|
||||
return ok;
|
||||
}
|
||||
|
||||
bool wxRegKey::Copy(wxRegKey& keyDst)
|
||||
{
|
||||
bool ok = TRUE;
|
||||
|
||||
// copy all sub keys to the new location
|
||||
wxString strKey;
|
||||
long lIndex;
|
||||
bool bCont = GetFirstKey(strKey, lIndex);
|
||||
while ( ok && bCont ) {
|
||||
wxRegKey key(*this, strKey);
|
||||
wxString keyName;
|
||||
keyName << GetFullName(&keyDst) << REG_SEPARATOR << strKey;
|
||||
ok = key.Copy(keyName);
|
||||
|
||||
if ( ok )
|
||||
bCont = GetNextKey(strKey, lIndex);
|
||||
}
|
||||
|
||||
// copy all values
|
||||
wxString strVal;
|
||||
bCont = GetFirstValue(strVal, lIndex);
|
||||
while ( ok && bCont ) {
|
||||
ok = CopyValue(strVal, keyDst);
|
||||
|
||||
if ( !ok ) {
|
||||
wxLogSysError(m_dwLastError,
|
||||
_("Failed to copy registry value '%s'"),
|
||||
strVal.c_str());
|
||||
}
|
||||
else {
|
||||
bCont = GetNextValue(strVal, lIndex);
|
||||
}
|
||||
}
|
||||
|
||||
if ( !ok ) {
|
||||
wxLogError(_("Failed to copy the contents of registry key '%s' to "
|
||||
"'%s'."), GetFullName(this), GetFullName(&keyDst));
|
||||
}
|
||||
|
||||
return ok;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// delete keys/values
|
||||
// ----------------------------------------------------------------------------
|
||||
@@ -464,7 +591,7 @@ bool wxRegKey::DeleteSelf()
|
||||
|
||||
m_dwLastError = RegDeleteKey((HKEY) m_hRootKey, m_strKey);
|
||||
if ( m_dwLastError != ERROR_SUCCESS ) {
|
||||
wxLogSysError(m_dwLastError, _("can't delete key '%s'"),
|
||||
wxLogSysError(m_dwLastError, _("Can't delete key '%s'"),
|
||||
GetName().c_str());
|
||||
return FALSE;
|
||||
}
|
||||
@@ -489,7 +616,7 @@ bool wxRegKey::DeleteValue(const wxChar *szValue)
|
||||
#if defined(__WIN32__) && !defined(__TWIN32__)
|
||||
m_dwLastError = RegDeleteValue((HKEY) m_hKey, WXSTRINGCAST szValue);
|
||||
if ( m_dwLastError != ERROR_SUCCESS ) {
|
||||
wxLogSysError(m_dwLastError, _("can't delete value '%s' from key '%s'"),
|
||||
wxLogSysError(m_dwLastError, _("Can't delete value '%s' from key '%s'"),
|
||||
szValue, GetName().c_str());
|
||||
return FALSE;
|
||||
}
|
||||
@@ -500,7 +627,7 @@ bool wxRegKey::DeleteValue(const wxChar *szValue)
|
||||
// just set the (default and unique) value of the key to ""
|
||||
m_dwLastError = RegSetValue((HKEY) m_hKey, NULL, REG_SZ, "", RESERVED);
|
||||
if ( m_dwLastError != ERROR_SUCCESS ) {
|
||||
wxLogSysError(m_dwLastError, _("can't delete value of key '%s'"),
|
||||
wxLogSysError(m_dwLastError, _("Can't delete value of key '%s'"),
|
||||
GetName().c_str());
|
||||
return FALSE;
|
||||
}
|
||||
@@ -518,7 +645,7 @@ bool wxRegKey::HasValue(const wxChar *szValue) const
|
||||
{
|
||||
// this function should be silent, so suppress possible messages from Open()
|
||||
wxLogNull nolog;
|
||||
|
||||
|
||||
#ifdef __WIN32__
|
||||
if ( CONST_CAST Open() ) {
|
||||
return RegQueryValueEx((HKEY) m_hKey, WXSTRINGCAST szValue, RESERVED,
|
||||
@@ -537,7 +664,7 @@ bool wxRegKey::HasValues() const
|
||||
{
|
||||
// suppress possible messages from GetFirstValue()
|
||||
wxLogNull nolog;
|
||||
|
||||
|
||||
// just call GetFirstValue with dummy parameters
|
||||
wxString str;
|
||||
long l;
|
||||
@@ -549,7 +676,7 @@ bool wxRegKey::HasSubkeys() const
|
||||
{
|
||||
// suppress possible messages from GetFirstKey()
|
||||
wxLogNull nolog;
|
||||
|
||||
|
||||
// just call GetFirstKey with dummy parameters
|
||||
wxString str;
|
||||
long l;
|
||||
@@ -561,7 +688,7 @@ bool wxRegKey::HasSubKey(const wxChar *szKey) const
|
||||
{
|
||||
// this function should be silent, so suppress possible messages from Open()
|
||||
wxLogNull nolog;
|
||||
|
||||
|
||||
if ( CONST_CAST Open() )
|
||||
return KeyExists(m_hKey, szKey);
|
||||
else
|
||||
@@ -578,7 +705,7 @@ wxRegKey::ValueType wxRegKey::GetValueType(const wxChar *szValue) const
|
||||
m_dwLastError = RegQueryValueEx((HKEY) m_hKey, WXSTRINGCAST szValue, RESERVED,
|
||||
&dwType, NULL, NULL);
|
||||
if ( m_dwLastError != ERROR_SUCCESS ) {
|
||||
wxLogSysError(m_dwLastError, _("can't read value of key '%s'"),
|
||||
wxLogSysError(m_dwLastError, _("Can't read value of key '%s'"),
|
||||
GetName().c_str());
|
||||
return Type_None;
|
||||
}
|
||||
@@ -603,7 +730,7 @@ bool wxRegKey::SetValue(const wxChar *szValue, long lValue)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
wxLogSysError(m_dwLastError, _("can't set value of '%s'"),
|
||||
wxLogSysError(m_dwLastError, _("Can't set value of '%s'"),
|
||||
GetFullName(this, szValue));
|
||||
return FALSE;
|
||||
#endif
|
||||
@@ -617,13 +744,13 @@ bool wxRegKey::QueryValue(const wxChar *szValue, long *plValue) const
|
||||
m_dwLastError = RegQueryValueEx((HKEY) m_hKey, WXSTRINGCAST szValue, RESERVED,
|
||||
&dwType, pBuf, &dwSize);
|
||||
if ( m_dwLastError != ERROR_SUCCESS ) {
|
||||
wxLogSysError(m_dwLastError, _("can't read value of key '%s'"),
|
||||
wxLogSysError(m_dwLastError, _("Can't read value of key '%s'"),
|
||||
GetName().c_str());
|
||||
return FALSE;
|
||||
}
|
||||
else {
|
||||
// check that we read the value of right type
|
||||
wxASSERT_MSG( dwType == REG_DWORD,
|
||||
wxASSERT_MSG( IsNumericValue(szValue),
|
||||
wxT("Type mismatch in wxRegKey::QueryValue().") );
|
||||
|
||||
return TRUE;
|
||||
@@ -644,13 +771,25 @@ bool wxRegKey::QueryValue(const wxChar *szValue, wxString& strValue) const
|
||||
m_dwLastError = RegQueryValueEx((HKEY) m_hKey, WXSTRINGCAST szValue, RESERVED,
|
||||
&dwType, NULL, &dwSize);
|
||||
if ( m_dwLastError == ERROR_SUCCESS ) {
|
||||
RegString pBuf = (RegString)strValue.GetWriteBuf(dwSize);
|
||||
m_dwLastError = RegQueryValueEx((HKEY) m_hKey, WXSTRINGCAST szValue, RESERVED,
|
||||
&dwType, pBuf, &dwSize);
|
||||
strValue.UngetWriteBuf();
|
||||
if ( !dwSize ) {
|
||||
// must treat this case specially as GetWriteBuf() doesn't like
|
||||
// being called with 0 size
|
||||
strValue.Empty();
|
||||
}
|
||||
else {
|
||||
RegString pBuf = (RegString)strValue.GetWriteBuf(dwSize);
|
||||
m_dwLastError = RegQueryValueEx((HKEY) m_hKey,
|
||||
WXSTRINGCAST szValue,
|
||||
RESERVED,
|
||||
&dwType,
|
||||
pBuf,
|
||||
&dwSize);
|
||||
strValue.UngetWriteBuf();
|
||||
}
|
||||
|
||||
if ( m_dwLastError == ERROR_SUCCESS ) {
|
||||
// check that it was the right type
|
||||
wxASSERT_MSG( dwType == REG_SZ,
|
||||
wxASSERT_MSG( !IsNumericValue(szValue),
|
||||
wxT("Type mismatch in wxRegKey::QueryValue().") );
|
||||
|
||||
return TRUE;
|
||||
@@ -667,7 +806,7 @@ bool wxRegKey::QueryValue(const wxChar *szValue, wxString& strValue) const
|
||||
#endif //WIN16/32
|
||||
}
|
||||
|
||||
wxLogSysError(m_dwLastError, _("can't read value of '%s'"),
|
||||
wxLogSysError(m_dwLastError, _("Can't read value of '%s'"),
|
||||
GetFullName(this, szValue));
|
||||
return FALSE;
|
||||
}
|
||||
@@ -677,7 +816,7 @@ bool wxRegKey::SetValue(const wxChar *szValue, const wxString& strValue)
|
||||
if ( CONST_CAST Open() ) {
|
||||
#if defined( __WIN32__) && !defined(__TWIN32__)
|
||||
m_dwLastError = RegSetValueEx((HKEY) m_hKey, szValue, (DWORD) RESERVED, REG_SZ,
|
||||
(RegString)strValue.c_str(),
|
||||
(RegString)strValue.c_str(),
|
||||
strValue.Len() + 1);
|
||||
if ( m_dwLastError == ERROR_SUCCESS )
|
||||
return TRUE;
|
||||
@@ -691,7 +830,7 @@ bool wxRegKey::SetValue(const wxChar *szValue, const wxString& strValue)
|
||||
#endif //WIN16/32
|
||||
}
|
||||
|
||||
wxLogSysError(m_dwLastError, _("can't set value of '%s'"),
|
||||
wxLogSysError(m_dwLastError, _("Can't set value of '%s'"),
|
||||
GetFullName(this, szValue));
|
||||
return FALSE;
|
||||
}
|
||||
@@ -732,8 +871,8 @@ bool wxRegKey::GetNextValue(wxString& strValueName, long& lIndex) const
|
||||
|
||||
m_dwLastError = RegEnumValue((HKEY) m_hKey, lIndex++,
|
||||
szValueName, &dwValueLen,
|
||||
RESERVED,
|
||||
NULL, // [out] type
|
||||
RESERVED,
|
||||
NULL, // [out] type
|
||||
NULL, // [out] buffer for value
|
||||
NULL); // [i/o] it's length
|
||||
|
||||
@@ -743,7 +882,7 @@ bool wxRegKey::GetNextValue(wxString& strValueName, long& lIndex) const
|
||||
lIndex = -1;
|
||||
}
|
||||
else {
|
||||
wxLogSysError(m_dwLastError, _("can't enumerate values of key '%s'"),
|
||||
wxLogSysError(m_dwLastError, _("Can't enumerate values of key '%s'"),
|
||||
GetName().c_str());
|
||||
}
|
||||
|
||||
@@ -788,7 +927,7 @@ bool wxRegKey::GetNextKey(wxString& strKeyName, long& lIndex) const
|
||||
lIndex = -1;
|
||||
}
|
||||
else {
|
||||
wxLogSysError(m_dwLastError, _("can't enumerate subkeys of key '%s'"),
|
||||
wxLogSysError(m_dwLastError, _("Can't enumerate subkeys of key '%s'"),
|
||||
GetName().c_str());
|
||||
}
|
||||
|
||||
@@ -801,11 +940,11 @@ bool wxRegKey::GetNextKey(wxString& strKeyName, long& lIndex) const
|
||||
|
||||
// returns TRUE if the value contains a number (else it's some string)
|
||||
bool wxRegKey::IsNumericValue(const wxChar *szValue) const
|
||||
{
|
||||
{
|
||||
ValueType type = GetValueType(szValue);
|
||||
switch ( type ) {
|
||||
case Type_Dword:
|
||||
case Type_Dword_little_endian:
|
||||
/* case Type_Dword_little_endian: == Type_Dword */
|
||||
case Type_Dword_big_endian:
|
||||
return TRUE;
|
||||
|
||||
|
@@ -27,7 +27,6 @@
|
||||
#pragma hdrstop
|
||||
#endif
|
||||
|
||||
#include "wx/window.h"
|
||||
#include "wx/msw/private.h"
|
||||
|
||||
// Mingw32 is a bit mental even though this is done in winundef
|
||||
@@ -47,6 +46,8 @@
|
||||
#include "wx/treectrl.h"
|
||||
#include "wx/settings.h"
|
||||
|
||||
#include "wx/msw/dragimag.h"
|
||||
|
||||
#ifdef __GNUWIN32_OLD__
|
||||
#include "wx/msw/gnuwin32/extra.h"
|
||||
#endif
|
||||
@@ -236,11 +237,24 @@ private:
|
||||
wxTreeItemData *m_data;
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// private functions
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
static HTREEITEM GetItemFromPoint(HWND hwndTV, int x, int y)
|
||||
{
|
||||
TVHITTESTINFO tvht;
|
||||
tvht.pt.x = x;
|
||||
tvht.pt.y = y;
|
||||
|
||||
return TreeView_HitTest(hwndTV, &tvht);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// macros
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxTreeCtrl, wxControl)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxTreeCtrl, wxControl)
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// variables
|
||||
@@ -298,6 +312,7 @@ void wxTreeCtrl::Init()
|
||||
m_imageListState = NULL;
|
||||
m_textCtrl = NULL;
|
||||
m_hasAnyAttr = FALSE;
|
||||
m_dragImage = NULL;
|
||||
}
|
||||
|
||||
bool wxTreeCtrl::Create(wxWindow *parent,
|
||||
@@ -1462,6 +1477,62 @@ bool wxTreeCtrl::MSWCommand(WXUINT cmd, WXWORD id)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// we hook into WndProc to process WM_MOUSEMOVE/WM_BUTTONUP messages - as we
|
||||
// only do it during dragging, minimize wxWin overhead (this is important for
|
||||
// WM_MOUSEMOVE as they're a lot of them) by catching Windows messages directly
|
||||
// instead of passing by wxWin events
|
||||
long wxTreeCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
|
||||
{
|
||||
if ( m_dragImage )
|
||||
{
|
||||
switch ( nMsg )
|
||||
{
|
||||
case WM_MOUSEMOVE:
|
||||
{
|
||||
int x = GET_X_LPARAM(lParam),
|
||||
y = GET_Y_LPARAM(lParam);
|
||||
|
||||
m_dragImage->Move(wxPoint(x, y), this);
|
||||
|
||||
HTREEITEM htiTarget = GetItemFromPoint(GetHwnd(), x, y);
|
||||
if ( htiTarget )
|
||||
{
|
||||
// highlight the item as target (hiding drag image is
|
||||
// necessary - otherwise the display will be corrupted)
|
||||
m_dragImage->Hide(this);
|
||||
TreeView_SelectDropTarget(GetHwnd(), htiTarget);
|
||||
m_dragImage->Show(this);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_LBUTTONUP:
|
||||
case WM_RBUTTONUP:
|
||||
{
|
||||
m_dragImage->EndDrag(this);
|
||||
delete m_dragImage;
|
||||
m_dragImage = NULL;
|
||||
|
||||
// generate the drag end event
|
||||
wxTreeEvent event(wxEVT_COMMAND_TREE_END_DRAG, m_windowId);
|
||||
|
||||
int x = GET_X_LPARAM(lParam),
|
||||
y = GET_Y_LPARAM(lParam);
|
||||
|
||||
event.m_item
|
||||
= (WXHTREEITEM)GetItemFromPoint(GetHwnd(), x, y);
|
||||
event.m_pointDrag = wxPoint(x, y);
|
||||
event.SetEventObject(this);
|
||||
|
||||
(void)GetEventHandler()->ProcessEvent(event);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return wxControl::MSWWindowProc(nMsg, wParam, lParam);
|
||||
}
|
||||
|
||||
// process WM_NOTIFY Windows message
|
||||
bool wxTreeCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
|
||||
{
|
||||
@@ -1504,6 +1575,11 @@ bool wxTreeCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
|
||||
|
||||
event.m_item = (WXHTREEITEM) tv->itemNew.hItem;
|
||||
event.m_pointDrag = wxPoint(tv->ptDrag.x, tv->ptDrag.y);
|
||||
|
||||
// don't allow dragging by default: the user code must
|
||||
// explicitly say that it wants to allow it to avoid breaking
|
||||
// the old apps
|
||||
event.Veto();
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -1736,6 +1812,20 @@ bool wxTreeCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
|
||||
// post processing
|
||||
switch ( hdr->code )
|
||||
{
|
||||
case TVN_BEGINDRAG:
|
||||
case TVN_BEGINRDRAG:
|
||||
if ( event.IsAllowed() )
|
||||
{
|
||||
// normally this is impossible because the m_dragImage is
|
||||
// deleted once the drag operation is over
|
||||
wxASSERT_MSG( !m_dragImage, _T("starting to drag once again?") );
|
||||
|
||||
m_dragImage = new wxDragImage(*this, event.m_item);
|
||||
m_dragImage->BeginDrag(wxPoint(0, 0), this);
|
||||
m_dragImage->Show(this);
|
||||
}
|
||||
break;
|
||||
|
||||
case TVN_DELETEITEM:
|
||||
{
|
||||
// NB: we might process this message using wxWindows event
|
||||
|
Reference in New Issue
Block a user