Enhance DIALOG_SHIM to optionally call SetFocus() after the derived class's constructor has been called, for wx 2.8 and wxGTK
This commit is contained in:
parent
24f73eb87c
commit
00d865c173
|
@ -18,13 +18,16 @@ Capitalization:
|
|||
Dialogs:
|
||||
|
||||
Follow the recommendations here:
|
||||
|
||||
http://library.gnome.org/devel/hig-book/2.20/windows-dialog.html.en
|
||||
paying particular attention to "initial focus", "sensible default values",
|
||||
"default buttons", ESC key termination. Please note that the escape key
|
||||
termination only works properly if there is a dialog button defined with
|
||||
an ID of wxID_CANCEL or SetEscapeID( MY_ESCAPE_BUTTON_ID ) is called during
|
||||
dialog initialization. The former is the preferred method for handling
|
||||
escape key dialog termination.
|
||||
escape key dialog termination. There is a checkbox in wxformbuilder for
|
||||
the "default" control, and this is the one fired when the "enter" key
|
||||
is pressed.
|
||||
|
||||
Use wxWidgets "sizers" in all dialogs, no matter how simple they are:
|
||||
http://zetcode.com/tutorials/wxwidgetstutorial/layoutmanagement
|
||||
|
|
|
@ -30,8 +30,9 @@ DIALOG_SHIM::DIALOG_SHIM( wxWindow* aParent, wxWindowID id, const wxString& titl
|
|||
const wxPoint& pos, const wxSize& size, long style, const wxString& name ) :
|
||||
wxDialog( aParent, id, title, pos, size, style, name )
|
||||
{
|
||||
// linux wxGTK needed this at one time to allow the ESCAPE key to close a wxDialog window.
|
||||
SetFocus();
|
||||
#if DLGSHIM_USE_SETFOCUS
|
||||
Connect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( DIALOG_SHIM::onInit ) );
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -70,17 +71,54 @@ bool DIALOG_SHIM::Show( bool show )
|
|||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
const wxSize& DIALOG_SHIM::GetLastSize()
|
||||
|
||||
#if DLGSHIM_USE_SETFOCUS
|
||||
|
||||
static bool findWindowRecursively( const wxWindowList& children, const wxWindow* wanted )
|
||||
{
|
||||
const char* classname = typeid(*this).name();
|
||||
return class_map[ classname ].GetSize();
|
||||
for( wxWindowList::const_iterator it = children.begin(); it != children.end(); ++it )
|
||||
{
|
||||
const wxWindow* child = *it;
|
||||
|
||||
if( wanted == child )
|
||||
return true;
|
||||
else
|
||||
{
|
||||
if( findWindowRecursively( child->GetChildren(), wanted ) )
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
const wxPoint& DIALOG_SHIM::GetLastPosition()
|
||||
static bool findWindowRecursively( const wxWindow* topmost, const wxWindow* wanted )
|
||||
{
|
||||
const char* classname = typeid(*this).name();
|
||||
return class_map[ classname ].GetPosition();
|
||||
// wanted may be NULL and that is ok.
|
||||
|
||||
if( wanted == topmost )
|
||||
return true;
|
||||
|
||||
return findWindowRecursively( topmost->GetChildren(), wanted );
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
/// Set the focus if it is not already set in a derived constructor to a specific control.
|
||||
void DIALOG_SHIM::onInit( wxInitDialogEvent& aEvent )
|
||||
{
|
||||
wxWindow* focusWnd = wxWindow::FindFocus();
|
||||
|
||||
// If focusWnd is not already this window or a child of it, then SetFocus().
|
||||
// Otherwise the derived class's constructor SetFocus() already to a specific
|
||||
// child control.
|
||||
|
||||
if( !findWindowRecursively( this, focusWnd ) )
|
||||
{
|
||||
// Linux wxGTK needs this to allow the ESCAPE key to close a wxDialog window.
|
||||
SetFocus();
|
||||
}
|
||||
|
||||
aEvent.Skip(); // derived class's handler should be called too
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Feb 9 2012)
|
||||
// C++ code generated with wxFormBuilder (version Oct 8 2012)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||
|
@ -9,7 +9,7 @@
|
|||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
DIALOG_EXIT_BASE::DIALOG_EXIT_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
|
||||
DIALOG_EXIT_BASE::DIALOG_EXIT_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style )
|
||||
{
|
||||
this->SetSizeHints( wxDefaultSize, wxDefaultSize );
|
||||
|
||||
|
@ -60,6 +60,7 @@ DIALOG_EXIT_BASE::DIALOG_EXIT_BASE( wxWindow* parent, wxWindowID id, const wxStr
|
|||
bSizerButtons = new wxBoxSizer( wxHORIZONTAL );
|
||||
|
||||
m_buttonSaveAndExit = new wxButton( this, wxID_ANY, _("Save and Exit"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_buttonSaveAndExit->SetDefault();
|
||||
bSizerButtons->Add( m_buttonSaveAndExit, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
m_buttonExitNoSave = new wxButton( this, wxID_ANY, _("Exit without Save"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
|
@ -77,6 +78,7 @@ DIALOG_EXIT_BASE::DIALOG_EXIT_BASE( wxWindow* parent, wxWindowID id, const wxStr
|
|||
|
||||
this->SetSizer( bSizerMain );
|
||||
this->Layout();
|
||||
bSizerMain->Fit( this );
|
||||
|
||||
this->Centre( wxBOTH );
|
||||
|
||||
|
|
|
@ -25,62 +25,28 @@
|
|||
<property name="use_enum">0</property>
|
||||
<property name="use_microsoft_bom">0</property>
|
||||
<object class="Dialog" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_managed">0</property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center">wxBOTH</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="event_handler">impl_virtual</property>
|
||||
<property name="extra_style"></property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">DIALOG_EXIT_BASE</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size">345,155</property>
|
||||
<property name="size">-1,-1</property>
|
||||
<property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
|
||||
<property name="subclass"></property>
|
||||
<property name="subclass">DIALOG_SHIM; dialog_shim.h</property>
|
||||
<property name="title"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
|
@ -196,10 +162,6 @@
|
|||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
|
@ -293,10 +255,6 @@
|
|||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
|
@ -390,10 +348,6 @@
|
|||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
|
@ -489,10 +443,6 @@
|
|||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
|
@ -551,7 +501,7 @@
|
|||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default">0</property>
|
||||
<property name="default">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Feb 9 2012)
|
||||
// C++ code generated with wxFormBuilder (version Oct 8 2012)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||
|
@ -11,15 +11,18 @@
|
|||
#include <wx/artprov.h>
|
||||
#include <wx/xrc/xmlres.h>
|
||||
#include <wx/intl.h>
|
||||
class DIALOG_SHIM;
|
||||
|
||||
#include "dialog_shim.h"
|
||||
#include <wx/bitmap.h>
|
||||
#include <wx/image.h>
|
||||
#include <wx/icon.h>
|
||||
#include <wx/statbmp.h>
|
||||
#include <wx/string.h>
|
||||
#include <wx/gdicmn.h>
|
||||
#include <wx/font.h>
|
||||
#include <wx/colour.h>
|
||||
#include <wx/settings.h>
|
||||
#include <wx/string.h>
|
||||
#include <wx/sizer.h>
|
||||
#include <wx/stattext.h>
|
||||
#include <wx/statline.h>
|
||||
|
@ -32,7 +35,7 @@
|
|||
///////////////////////////////////////////////////////////////////////////////
|
||||
/// Class DIALOG_EXIT_BASE
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
class DIALOG_EXIT_BASE : public wxDialog
|
||||
class DIALOG_EXIT_BASE : public DIALOG_SHIM
|
||||
{
|
||||
private:
|
||||
|
||||
|
@ -53,7 +56,7 @@ class DIALOG_EXIT_BASE : public wxDialog
|
|||
|
||||
public:
|
||||
|
||||
DIALOG_EXIT_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 345,155 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
|
||||
DIALOG_EXIT_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
|
||||
~DIALOG_EXIT_BASE();
|
||||
|
||||
};
|
||||
|
|
|
@ -45,6 +45,7 @@
|
|||
|
||||
#include <dialog_page_settings.h>
|
||||
|
||||
|
||||
// List of page formats.
|
||||
// should be statically initialized, because we need both
|
||||
// the translated and the not translated version.
|
||||
|
@ -109,8 +110,6 @@ void DIALOG_PAGES_SETTINGS::initDialog()
|
|||
double customSizeX;
|
||||
double customSizeY;
|
||||
|
||||
SetFocus();
|
||||
|
||||
// initalize page format choice box and page format list.
|
||||
// The first shows translated strings, the second contains not tralated strings
|
||||
m_paperSizeComboBox->Clear();
|
||||
|
|
|
@ -28,6 +28,12 @@
|
|||
#include <wx/dialog.h>
|
||||
#include <hashtables.h>
|
||||
|
||||
#if wxMINOR_VERSION == 9 && defined(__WXGTK__)
|
||||
#define DLGSHIM_USE_SETFOCUS 0
|
||||
#else
|
||||
#define DLGSHIM_USE_SETFOCUS 1
|
||||
#endif
|
||||
|
||||
|
||||
/**
|
||||
* Class DIALOG_SHIM
|
||||
|
@ -50,10 +56,11 @@ public:
|
|||
|
||||
bool Show( bool show ); // overload wxDialog::Show
|
||||
|
||||
/*
|
||||
const wxSize& GetLastSize();
|
||||
const wxPoint& GetLastPosition();
|
||||
*/
|
||||
|
||||
#if DLGSHIM_USE_SETFOCUS
|
||||
private:
|
||||
void onInit( wxInitDialogEvent& aEvent );
|
||||
#endif
|
||||
};
|
||||
|
||||
#endif // DIALOG_SHIM_
|
||||
|
|
Loading…
Reference in New Issue