diff --git a/include/wx/Makefile.am b/include/wx/Makefile.am index dfba90022e..e9bcd162bd 100644 --- a/include/wx/Makefile.am +++ b/include/wx/Makefile.am @@ -57,6 +57,7 @@ wx_include_HEADERS = \ dynlib.h \ event.h \ expr.h \ + extdlg.h \ file.h \ fileconf.h \ filedlg.h \ diff --git a/include/wx/defs.h b/include/wx/defs.h index a61061304a..679247afa2 100644 --- a/include/wx/defs.h +++ b/include/wx/defs.h @@ -372,6 +372,39 @@ WXDLLEXPORT_DATA(extern const bool) wxFalse; // Callback function type definition typedef void (*wxFunction) (wxObject&, wxEvent&); +// ---------------------------------------------------------------------------- +// OS mnemonics -- Identify the running OS (useful for Windows) +// ---------------------------------------------------------------------------- + +// Not all platforms are currently available or supported +enum +{ + wxUNKNOWN_PLATFORM, + wxCURSES, // Text-only CURSES + wxXVIEW_X, // Sun's XView OpenLOOK toolkit + wxMOTIF_X, // OSF Motif 1.x.x + wxCOSE_X, // OSF Common Desktop Environment + wxNEXTSTEP, // NeXTStep + wxMACINTOSH, // Apple System 7 + wxGTK, // GTK on X + wxGTK_WIN32, // GTK on Win32 + wxGTK_OS2, // GTK on OS/2 + wxGTK_BEOS, // GTK on BeOS + wxQT, // Qt + wxGEOS, // GEOS + wxOS2_PM, // OS/2 Workplace + wxWINDOWS, // Windows or WfW + wxPENWINDOWS, // Windows for Pen Computing + wxWINDOWS_NT, // Windows NT + wxWIN32S, // Windows 32S API + wxWIN95, // Windows 95 + wxWIN386, // Watcom 32-bit supervisor modus + wxMGL_UNIX, // MGL with direct hardware access + wxMGL_X, // MGL on X + wxMGL_WIN32, // MGL on Win32 + wxMGL_OS2, // MGL on OS/2 +}; + // ---------------------------------------------------------------------------- // machine specific settings // ---------------------------------------------------------------------------- @@ -411,10 +444,11 @@ typedef int unsigned wxUint32; #if !defined(__WXMSW__) && !defined(__WXMAC__) && !defined(__WXOS2__) #if defined(SIZEOF_INT) - typedef short signed wxInt16; - typedef short unsigned wxUint16; - typedef int signed wxInt32; - typedef int unsigned wxUint32; + /* well, this shouldn't happen... */ + typedef short signed wxInt16; + typedef short unsigned wxUint16; + typedef int signed wxInt32; + typedef int unsigned wxUint32; #else typedef short signed wxInt16; typedef short unsigned wxUint16; @@ -506,27 +540,27 @@ typedef wxUint16 wxWord; /* * Window (Frame/dialog/subwindow/panel item) style flags */ -#define wxVSCROLL 0x80000000 -#define wxHSCROLL 0x40000000 -#define wxCAPTION 0x20000000 +#define wxVSCROLL 0x80000000 +#define wxHSCROLL 0x40000000 +#define wxCAPTION 0x20000000 // New styles -#define wxDOUBLE_BORDER 0x10000000 -#define wxSUNKEN_BORDER 0x08000000 -#define wxRAISED_BORDER 0x04000000 -#define wxBORDER 0x02000000 -#define wxSIMPLE_BORDER wxBORDER -#define wxSTATIC_BORDER 0x01000000 -#define wxTRANSPARENT_WINDOW 0x00100000 -#define wxNO_BORDER 0x00200000 +#define wxDOUBLE_BORDER 0x10000000 +#define wxSUNKEN_BORDER 0x08000000 +#define wxRAISED_BORDER 0x04000000 +#define wxBORDER 0x02000000 +#define wxSIMPLE_BORDER wxBORDER +#define wxSTATIC_BORDER 0x01000000 +#define wxTRANSPARENT_WINDOW 0x00100000 +#define wxNO_BORDER 0x00200000 -#define wxUSER_COLOURS 0x00800000 +#define wxUSER_COLOURS 0x00800000 // Override CTL3D etc. control colour processing to // allow own background colour // OBSOLETE - use wxNO_3D instead -#define wxNO_3D 0x00800000 +#define wxNO_3D 0x00800000 // Override CTL3D or native 3D styles for children -#define wxCLIP_CHILDREN 0x00400000 +#define wxCLIP_CHILDREN 0x00400000 // Clip children when painting, which reduces flicker in // e.g. frames and splitter windows, but can't be used in // a panel where a static box must be 'transparent' (panel @@ -534,24 +568,18 @@ typedef wxUint16 wxWord; // Add this style to a panel to get tab traversal working // outside of dialogs. -#define wxTAB_TRAVERSAL 0x00080000 +#define wxTAB_TRAVERSAL 0x00080000 // Add this style if the control wants to get all keyboard messages (under // Windows, it won't normally get the dialog navigation key events) -#define wxWANTS_CHARS 0x00040000 +#define wxWANTS_CHARS 0x00040000 -// Orientations -enum wxOrientation -{ - wxHORIZONTAL = 0x01, - wxVERTICAL = 0x02, - wxBOTH = (wxVERTICAL | wxHORIZONTAL) -}; - -#define wxCENTER_FRAME 0x04 /* centering into frame rather than screen */ +// Make window retained (mostly Motif, I think) +#define wxRETAINED 0x0002000 +#define wxBACKINGSTORE wxRETAINED /* - * Frame/dialog style flags + * wxFrame/wxDialog style flags */ #define wxSTAY_ON_TOP 0x8000 #define wxICONIZE 0x4000 @@ -567,7 +595,7 @@ enum wxOrientation #define wxRESIZE_BORDER 0x0040 #define wxDIALOG_MODAL 0x0020 #define wxDIALOG_MODELESS 0x0000 -/* Add for normal Windows frame behaviour */ +// Add for normal Windows frame behaviour #define wxFRAME_FLOAT_ON_PARENT 0x0020 @@ -575,7 +603,8 @@ enum wxOrientation #define wxDEFAULT_FRAME wxDEFAULT_FRAME_STYLE #endif -#define wxDEFAULT_FRAME_STYLE (wxSYSTEM_MENU|wxRESIZE_BORDER | wxMINIMIZE_BOX | wxMAXIMIZE_BOX | wxTHICK_FRAME | wxSYSTEM_MENU | wxCAPTION | wxCLIP_CHILDREN) +#define wxDEFAULT_FRAME_STYLE \ + (wxSYSTEM_MENU | wxRESIZE_BORDER | wxMINIMIZE_BOX | wxMAXIMIZE_BOX | wxTHICK_FRAME | wxSYSTEM_MENU | wxCAPTION | wxCLIP_CHILDREN) #ifdef __WXMSW__ # define wxDEFAULT_DIALOG_STYLE (wxSYSTEM_MENU|wxCAPTION|wxTHICK_FRAME) @@ -585,25 +614,30 @@ enum wxOrientation # define wxDEFAULT_DIALOG_STYLE (wxCAPTION) #endif - /* - * Subwindow style flags + * wxExtDialog style flags */ -#define wxRETAINED 0x0001 -#define wxBACKINGSTORE wxRETAINED -// wxCanvas or wxPanel can optionally have a thick frame under MS Windows. -// #define wxTHICK_FRAME 0x1000 +#define wxED_CLIENT_MARGIN 0x0004 +#define wxED_BUTTONS_BOTTOM 0x0000 // has no effect +#define wxED_BUTTONS_RIGHT 0x0002 +#define wxED_STATIC_LINE 0x0001 + +#if defined(__WXMSW__) || defined(__WXMAC__) +# define wxEXT_DIALOG_STYLE (wxDEFAULT_DIALOG_STYLE|wxED_CLIENT_MARGIN) +#else +# define wxEXT_DIALOG_STYLE (wxDEFAULT_DIALOG_STYLE|wxED_CLIENT_MARGIN|wxED_STATIC_LINE) +#endif /* * wxToolBar style flags */ -#define wxTB_3DBUTTONS 0x8000 -#define wxTB_HORIZONTAL 0x0002 -#define wxTB_VERTICAL 0x0004 +#define wxTB_3DBUTTONS 0x8000 +#define wxTB_HORIZONTAL 0x0002 +#define wxTB_VERTICAL 0x0004 // Flatbar/Coolbar under Win98/ GTK 1.2 -#define wxTB_FLAT 0x0008 +#define wxTB_FLAT 0x0008 // use native docking under GTK -#define wxTB_DOCKABLE 0x0010 +#define wxTB_DOCKABLE 0x0010 /* * wxMenuBar style flags @@ -665,9 +699,8 @@ enum wxOrientation /* * wxRadioBox/wxRadioButton style flags */ - + // New, more intuitive names to specify majorDim argument - // Same as wxRA_HORIZONTAL #define wxRA_SPECIFY_COLS 0x0001 // Same as wxRA_VERTICAL @@ -684,7 +717,7 @@ enum wxOrientation #define wxGA_PROGRESSBAR 0x0004 #define wxGA_HORIZONTAL wxHORIZONTAL #define wxGA_VERTICAL wxVERTICAL -/* Windows only */ +// Windows only #define wxGA_SMOOTH 0x0008 /* @@ -759,7 +792,6 @@ enum wxOrientation /* * wxSpinButton flags */ - #define wxSP_VERTICAL 0x0004 #define wxSP_HORIZONTAL 0x0008 #define wxSP_ARROW_KEYS 0x0010 @@ -768,7 +800,6 @@ enum wxOrientation /* * wxSplitterWindow flags */ - #define wxSP_NOBORDER 0x0000 #define wxSP_3D 0x0004 #define wxSP_BORDER 0x0008 @@ -778,49 +809,181 @@ enum wxOrientation /* * wxFrame extra flags */ - // No title on taskbar #define wxFRAME_TOOL_WINDOW 0x0004 /* * wxTabCtrl flags */ - -#define wxTC_MULTILINE 0x0000 -#define wxTC_RIGHTJUSTIFY 0x0004 -#define wxTC_FIXEDWIDTH 0x0008 -#define wxTC_OWNERDRAW 0x0010 +#define wxTC_MULTILINE 0x0000 +#define wxTC_RIGHTJUSTIFY 0x0004 +#define wxTC_FIXEDWIDTH 0x0008 +#define wxTC_OWNERDRAW 0x0010 /* * wxNotebook flags */ -#define wxNB_FIXEDWIDTH 0x0008 +#define wxNB_FIXEDWIDTH 0x0008 /* * wxStatusBar95 flags */ - -#define wxST_SIZEGRIP 0x0002 +#define wxST_SIZEGRIP 0x0002 /* * wxStaticLine flags */ -#define wxLI_HORIZONTAL wxHORIZONTAL -#define wxLI_VERTICAL wxVERTICAL +#define wxLI_HORIZONTAL wxHORIZONTAL +#define wxLI_VERTICAL wxVERTICAL /* * wxProgressDialog flags */ -#define wxPD_CAN_ABORT 0x0001 -#define wxPD_APP_MODAL 0x0002 -#define wxPD_AUTO_HIDE 0x0004 -#define wxPD_ELAPSED_TIME 0x0008 -#define wxPD_ESTIMATED_TIME 0x0010 -#define wxPD_REMAINING_TIME 0x0020 +#define wxPD_CAN_ABORT 0x0001 +#define wxPD_APP_MODAL 0x0002 +#define wxPD_AUTO_HIDE 0x0004 +#define wxPD_ELAPSED_TIME 0x0008 +#define wxPD_ESTIMATED_TIME 0x0010 +#define wxPD_REMAINING_TIME 0x0020 /* - * GDI descriptions + * extended dialog specifiers. these values are stored in a different + * flag and thus do not overlap with other style flags. note that these + * values do not correspond to the return values of the dialogs (for + * those values, look at the wxID_XXX defines). */ +#define wxOK 0x00000001 +#define wxYES_NO 0x00000002 +#define wxCANCEL 0x00000004 +#define wxYES 0x00000008 +#define wxNO 0x00000010 +#define wxNO_DEFAULT 0x00000020 +#define wxYES_DEFAULT 0x00000000 // has no effect + +#define wxICON_EXCLAMATION 0x00000040 +#define wxICON_HAND 0x00000080 +#define wxICON_QUESTION 0x00000100 +#define wxICON_INFORMATION 0x00000200 +#define wxICON_STOP wxICON_HAND +#define wxICON_ASTERISK wxICON_INFORMATION +#define wxICON_MASK (0x00000040|0x00000080|0x00000100|0x00000200) + +#define wxCENTRE 0x00000400 +#define wxCENTER wxCENTRE + +#define wxFORWARD 0x00000800 +#define wxBACKWARD 0x00001000 +#define wxRESET 0x00002000 +#define wxHELP 0x00004000 +#define wxMORE 0x00008000 +#define wxSETUP 0x00010000 + +// ---------------------------------------------------------------------------- +// standard IDs +// ---------------------------------------------------------------------------- + +// Standard menu IDs +#define wxID_LOWEST 4999 + +#define wxID_OPEN 5000 +#define wxID_CLOSE 5001 +#define wxID_NEW 5002 +#define wxID_SAVE 5003 +#define wxID_SAVEAS 5004 +#define wxID_REVERT 5005 +#define wxID_EXIT 5006 +#define wxID_UNDO 5007 +#define wxID_REDO 5008 +#define wxID_HELP 5009 +#define wxID_PRINT 5010 +#define wxID_PRINT_SETUP 5011 +#define wxID_PREVIEW 5012 +#define wxID_ABOUT 5013 +#define wxID_HELP_CONTENTS 5014 +#define wxID_HELP_COMMANDS 5015 +#define wxID_HELP_PROCEDURES 5016 +#define wxID_HELP_CONTEXT 5017 + +#define wxID_CUT 5030 +#define wxID_COPY 5031 +#define wxID_PASTE 5032 +#define wxID_CLEAR 5033 +#define wxID_FIND 5034 +#define wxID_DUPLICATE 5035 +#define wxID_SELECTALL 5036 + +#define wxID_FILE1 5050 +#define wxID_FILE2 5051 +#define wxID_FILE3 5052 +#define wxID_FILE4 5053 +#define wxID_FILE5 5054 +#define wxID_FILE6 5055 +#define wxID_FILE7 5056 +#define wxID_FILE8 5057 +#define wxID_FILE9 5058 + +// Standard button IDs +#define wxID_OK 5100 +#define wxID_CANCEL 5101 +#define wxID_APPLY 5102 +#define wxID_YES 5103 +#define wxID_NO 5104 +#define wxID_STATIC 5105 +#define wxID_FORWARD 5106 +#define wxID_BACKWARD 5107 +#define wxID_DEFAULT 5108 +#define wxID_MORE 5109 +#define wxID_SETUP 5110 +#define wxID_RESET 5111 + +#define wxID_HIGHEST 5999 + +// ---------------------------------------------------------------------------- +// Orientations and directions +// ---------------------------------------------------------------------------- + +enum wxOrientation +{ + wxHORIZONTAL = 0x0001, + wxVERTICAL = 0x0002, + wxBOTH = (wxVERTICAL | wxHORIZONTAL) +}; + +enum wxDirection +{ + wxLEFT = 0x0010, + wxRIGHT = 0x0020, + wxUP = 0x0040, + wxDOWN = 0x0080 +}; + +// wxCENTRE = 0x0400 (defined above) + +// centering into frame rather than screen +#define wxCENTER_FRAME 0x0004 + + +// ---------------------------------------------------------------------------- +// Possible SetSize flags +// ---------------------------------------------------------------------------- + +// Use internally-calculated width if -1 +#define wxSIZE_AUTO_WIDTH 0x0001 +// Use internally-calculated height if -1 +#define wxSIZE_AUTO_HEIGHT 0x0002 +// Use internally-calculated width and height if each is -1 +#define wxSIZE_AUTO (wxSIZE_AUTO_WIDTH|wxSIZE_AUTO_HEIGHT) +// Ignore missing (-1) dimensions (use existing). +// For readability only: test for wxSIZE_AUTO_WIDTH/HEIGHT in code. +#define wxSIZE_USE_EXISTING 0x0000 +// Allow -1 as a valid position +#define wxSIZE_ALLOW_MINUS_ONE 0x0004 +// Don't do parent client adjustments (for implementation only) +#define wxSIZE_NO_ADJUSTMENTS 0x0008 + +// ---------------------------------------------------------------------------- +// GDI descriptions +// ---------------------------------------------------------------------------- enum { // Text font families @@ -898,56 +1061,20 @@ typedef enum wxSRC_AND // source _bitmap_ AND destination } form_ops_t; -// Flood styles +/* Flood styles */ #define wxFLOOD_SURFACE 1 #define wxFLOOD_BORDER 2 -// Polygon filling mode +/* Polygon filling mode */ #define wxODDEVEN_RULE 1 #define wxWINDING_RULE 2 -// ToolPanel in wxFrame +/* ToolPanel in wxFrame */ #define wxTOOL_TOP 1 #define wxTOOL_BOTTOM 2 #define wxTOOL_LEFT 3 #define wxTOOL_RIGHT 4 -// Dialog specifiers/return values - -#define wxOK 0x0001 -#define wxYES_NO 0x0002 -#define wxCANCEL 0x0004 -#define wxYES 0x0008 -#define wxNO 0x0010 -#define wxNO_DEFAULT 0x0020 -#define wxYES_DEFAULT 0x0000 // has no effect -#define wxICON_EXCLAMATION 0x0040 -#define wxICON_HAND 0x0080 -#define wxICON_QUESTION 0x0100 -#define wxICON_INFORMATION 0x0200 - -#define wxICON_STOP wxICON_HAND -#define wxICON_ASTERISK wxICON_INFORMATION -#define wxICON_MASK (0x0040|0x0080|0x0100|0x0200) - -#define wxCENTRE 0x0200 -#define wxCENTER wxCENTRE - -// Possible SetSize flags - -// Use internally-calculated width if -1 -#define wxSIZE_AUTO_WIDTH 0x0001 -// Use internally-calculated height if -1 -#define wxSIZE_AUTO_HEIGHT 0x0002 -// Use internally-calculated width and height if each is -1 -#define wxSIZE_AUTO (wxSIZE_AUTO_WIDTH|wxSIZE_AUTO_HEIGHT) -// Ignore missing (-1) dimensions (use existing). -// For readability only: test for wxSIZE_AUTO_WIDTH/HEIGHT in code. -#define wxSIZE_USE_EXISTING 0x0000 -// Allow -1 as a valid position -#define wxSIZE_ALLOW_MINUS_ONE 0x0004 -// Don't do parent client adjustments (for implementation only) -#define wxSIZE_NO_ADJUSTMENTS 0x0008 enum wxDataFormatId { @@ -1083,78 +1210,6 @@ enum wxKeyCode WXK_NUMPAD_DIVIDE }; -/* OS mnemonics -- Identify the running OS (useful for Windows) - * [Not all platforms are currently available or supported] */ -enum -{ - wxUNKNOWN_PLATFORM, - wxCURSES, // Text-only CURSES - wxXVIEW_X, // Sun's XView OpenLOOK toolkit - wxMOTIF_X, // OSF Motif 1.x.x - wxCOSE_X, // OSF Common Desktop Environment - wxNEXTSTEP, // NeXTStep - wxMACINTOSH, // Apple System 7 - wxGTK, // GTK - wxQT, // Qt - wxGEOS, // GEOS - wxOS2_PM, // OS/2 Workplace - wxWINDOWS, // Windows or WfW - wxPENWINDOWS, // Windows for Pen Computing - wxWINDOWS_NT, // Windows NT - wxWIN32S, // Windows 32S API - wxWIN95, // Windows 95 - wxWIN386 // Watcom 32-bit supervisor modus -}; - -/* Standard menu identifiers */ -#define wxID_LOWEST 4999 - -#define wxID_OPEN 5000 -#define wxID_CLOSE 5001 -#define wxID_NEW 5002 -#define wxID_SAVE 5003 -#define wxID_SAVEAS 5004 -#define wxID_REVERT 5005 -#define wxID_EXIT 5006 -#define wxID_UNDO 5007 -#define wxID_REDO 5008 -#define wxID_HELP 5009 -#define wxID_PRINT 5010 -#define wxID_PRINT_SETUP 5011 -#define wxID_PREVIEW 5012 -#define wxID_ABOUT 5013 -#define wxID_HELP_CONTENTS 5014 -#define wxID_HELP_COMMANDS 5015 -#define wxID_HELP_PROCEDURES 5016 -#define wxID_HELP_CONTEXT 5017 - -#define wxID_CUT 5030 -#define wxID_COPY 5031 -#define wxID_PASTE 5032 -#define wxID_CLEAR 5033 -#define wxID_FIND 5034 -#define wxID_DUPLICATE 5035 -#define wxID_SELECTALL 5036 - -#define wxID_FILE1 5050 -#define wxID_FILE2 5051 -#define wxID_FILE3 5052 -#define wxID_FILE4 5053 -#define wxID_FILE5 5054 -#define wxID_FILE6 5055 -#define wxID_FILE7 5056 -#define wxID_FILE8 5057 -#define wxID_FILE9 5058 - -#define wxID_OK 5100 -#define wxID_CANCEL 5101 -#define wxID_APPLY 5102 -#define wxID_YES 5103 -#define wxID_NO 5104 -#define wxID_STATIC 5105 - -#define wxID_HIGHEST 5999 - // Mapping modes (as per Windows) #define wxMM_TEXT 1 #define wxMM_LOMETRIC 2 @@ -1279,6 +1334,11 @@ typedef enum { wxPRINT_MODE_PRINTER = 3 // Send to printer } wxPrintMode; +// --------------------------------------------------------------------------- +// macros that enable wxWindows apps to be compiled in absence of the +// sytem headers, although some platform specific types are used in the +// platform specific (implementation) parts of the headers +// --------------------------------------------------------------------------- #ifdef __WXMSW__ // Stand-ins for Windows types, to avoid #including all of windows.h diff --git a/include/wx/extdlg.h b/include/wx/extdlg.h new file mode 100644 index 0000000000..3799925eae --- /dev/null +++ b/include/wx/extdlg.h @@ -0,0 +1,7 @@ +#ifndef _WX_EXTDLG_H_BASE_ +#define _WX_EXTDLG_H_BASE_ + +#include "wx/generic/extdlgg.h" + +#endif + // _WX_EXTDLG_H_BASE_ diff --git a/include/wx/generic/Makefile.am b/include/wx/generic/Makefile.am index e5cb5e1ccf..d192e3533e 100644 --- a/include/wx/generic/Makefile.am +++ b/include/wx/generic/Makefile.am @@ -11,6 +11,7 @@ wx_generic_include_HEADERS = \ colrdlgg.h \ dcpsg.h \ dirdlgg.h \ + extdlgg.h \ fontdlgg.h \ gridg.h \ helpext.h \ diff --git a/include/wx/generic/extdlgg.h b/include/wx/generic/extdlgg.h new file mode 100644 index 0000000000..7691d1cfbf --- /dev/null +++ b/include/wx/generic/extdlgg.h @@ -0,0 +1,96 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: extdlgg.h +// Purpose: Extended Generic dialogs +// Author: Robert Roebling +// Modified by: +// Created: 01/02/97 +// RCS-ID: $Id$ +// Copyright: (c) Robert Roebling +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef __EXTDLGH_G__ +#define __EXTDLGH_G__ + +#ifdef __GNUG__ + #pragma interface "extdlgg.h" +#endif + +#include "wx/setup.h" +#include "wx/dialog.h" +#include "wx/button.h" + +//----------------------------------------------------------------------------- +// classes +//----------------------------------------------------------------------------- + +class WXDLLEXPORT wxExtDialog; +class WXDLLEXPORT wxStaticLine; + +//----------------------------------------------------------------------------- +// global data +//----------------------------------------------------------------------------- + +extern const wxChar *wxDialogNameStr; + +//----------------------------------------------------------------------------- +// wxExtDialog +//----------------------------------------------------------------------------- + +class WXDLLEXPORT wxExtDialog: public wxDialog +{ + DECLARE_DYNAMIC_CLASS(wxExtDialog) + +public: + wxExtDialog() {} + wxExtDialog( wxWindow *parent, wxWindowID id, + const wxString& title, + long extraStyle = (wxOK|wxCANCEL|wxCENTRE), + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxEXT_DIALOG_STYLE, + const wxString &name = wxDialogNameStr ); + bool Create( wxWindow *parent, wxWindowID id, + const wxString& title, + long extraStyle = (wxOK|wxCANCEL|wxCENTRE), + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxEXT_DIALOG_STYLE, + const wxString &name = wxDialogNameStr ); + + void SetClientWindow( wxWindow *clientWindow ) + { m_clientWindow = clientWindow; } + wxWindow *GetClientWindow() + { return m_clientWindow; } + + void AddButton( wxButton *button ); + + void SetDefaultButton( wxWindowID button ); + + void EnableButton( wxWindowID button, bool enable=TRUE ); + bool ButtonIsEnabled( wxWindowID button ); + + wxSize GetButtonAreaSize(); + + void OnSize( wxSizeEvent &event ); + + void OnYes(wxCommandEvent& event); + void OnNo(wxCommandEvent& event); + void OnCancel(wxCommandEvent& event); + +protected: + wxWindow *m_clientWindow; + long m_extraStyle; + wxList m_buttons; +#if wxUSE_STATLINE + wxStaticLine *m_statLine; +#endif + + wxSize LayoutButtons(); + +private: + DECLARE_EVENT_TABLE() +}; + + +#endif diff --git a/include/wx/generic/gridg.h b/include/wx/generic/gridg.h index 0156603432..f753026d00 100644 --- a/include/wx/generic/gridg.h +++ b/include/wx/generic/gridg.h @@ -35,14 +35,6 @@ #define wxGRID_DEFAULT_VERTICAL_LABEL_WIDTH 40 #define wxGRID_DEFAULT_HORIZONAL_LABEL_HEIGHT 20 -#ifndef wxLEFT - #define wxLEFT 0x0400 -#endif - -#ifndef wxRIGHT - #define wxRIGHT 0x0800 -#endif - #define WXGENERIC_GRID_VERSION 0.5 class WXDLLEXPORT wxGridEvent; diff --git a/include/wx/generic/msgdlgg.h b/include/wx/generic/msgdlgg.h index a545631340..62dddb1b87 100644 --- a/include/wx/generic/msgdlgg.h +++ b/include/wx/generic/msgdlgg.h @@ -38,7 +38,6 @@ public: void OnCancel(wxCommandEvent& event); private: - wxList m_buttons; int m_dialogStyle; DECLARE_EVENT_TABLE() diff --git a/include/wx/gtk/info.xpm b/include/wx/gtk/info.xpm index 90efcc8dd9..e7a9f5f925 100644 --- a/include/wx/gtk/info.xpm +++ b/include/wx/gtk/info.xpm @@ -1,5 +1,5 @@ /* XPM */ -static char *info[] = { +static char *info_xpm[] = { /* columns rows colors chars-per-pixel */ "48 48 478 2", " c Gray0", diff --git a/include/wx/gtk/statline.h b/include/wx/gtk/statline.h index e29e20d5d0..d892e1ab61 100644 --- a/include/wx/gtk/statline.h +++ b/include/wx/gtk/statline.h @@ -12,12 +12,12 @@ #define __GTKSTATICLINEH__ #ifdef __GNUG__ - #pragma interface +#pragma interface #endif -#if !wxUSE_STATLINE - #error "This file should only be included if wxUSE_STATLINE == 1" -#endif +#include "wx/defs.h" + +#if wxUSE_STATLINE #include "wx/object.h" #include "wx/list.h" @@ -47,4 +47,8 @@ public: long style = wxLI_HORIZONTAL, const wxString &name = wxStaticTextNameStr ); }; -#endif // __GTKSTATICLINEH__ +#endif + // wxUSE_STATLINE + +#endif + // __GTKSTATICLINEH__ diff --git a/include/wx/gtk1/info.xpm b/include/wx/gtk1/info.xpm index 90efcc8dd9..e7a9f5f925 100644 --- a/include/wx/gtk1/info.xpm +++ b/include/wx/gtk1/info.xpm @@ -1,5 +1,5 @@ /* XPM */ -static char *info[] = { +static char *info_xpm[] = { /* columns rows colors chars-per-pixel */ "48 48 478 2", " c Gray0", diff --git a/include/wx/gtk1/statline.h b/include/wx/gtk1/statline.h index e29e20d5d0..d892e1ab61 100644 --- a/include/wx/gtk1/statline.h +++ b/include/wx/gtk1/statline.h @@ -12,12 +12,12 @@ #define __GTKSTATICLINEH__ #ifdef __GNUG__ - #pragma interface +#pragma interface #endif -#if !wxUSE_STATLINE - #error "This file should only be included if wxUSE_STATLINE == 1" -#endif +#include "wx/defs.h" + +#if wxUSE_STATLINE #include "wx/object.h" #include "wx/list.h" @@ -47,4 +47,8 @@ public: long style = wxLI_HORIZONTAL, const wxString &name = wxStaticTextNameStr ); }; -#endif // __GTKSTATICLINEH__ +#endif + // wxUSE_STATLINE + +#endif + // __GTKSTATICLINEH__ diff --git a/samples/dialogs/dialogs.cpp b/samples/dialogs/dialogs.cpp index 70715bb075..a3efceb355 100644 --- a/samples/dialogs/dialogs.cpp +++ b/samples/dialogs/dialogs.cpp @@ -25,12 +25,13 @@ #include "wx/wx.h" #endif -#include -#include -#include -#include -#include -#include +#include "wx/colordlg.h" +#include "wx/filedlg.h" +#include "wx/dirdlg.h" +#include "wx/fontdlg.h" +#include "wx/choicdlg.h" +#include "wx/tipdlg.h" +#include "wx/extdlg.h" #define wxTEST_GENERIC_DIALOGS_IN_MSW 0 @@ -78,6 +79,7 @@ bool MyApp::OnInit(void) file_menu->Append(DIALOGS_MESSAGE_BOX, "&Message box"); file_menu->Append(DIALOGS_TEXT_ENTRY, "Text &entry"); file_menu->Append(DIALOGS_SINGLE_CHOICE, "&Single choice"); + file_menu->Append(DIALOGS_EXT_DIALOG, "&Extended dialog"); file_menu->AppendSeparator(); file_menu->Append(DIALOGS_TIP, "&Tip of the day"); file_menu->AppendSeparator(); @@ -108,6 +110,42 @@ MyFrame::MyFrame(wxWindow *parent, const wxString& title, const wxPoint& pos, co wxFrame(parent, -1, title, pos, size) {} +void MyFrame::ExtDialog(wxCommandEvent& WXUNUSED(event) ) +{ + // The standard flags causes this dialog to display a + // wxStaticLine under wxMotif and wxGTK, but none under + // other platforms. Also, it will not be resizable + // anywhere. + + wxExtDialog dialog( this, -1, "Test 1 for wxExtDialog", + wxOK|wxFORWARD|wxBACKWARD ); + + dialog.SetClientWindow( new wxTextCtrl( &dialog, -1, "Test", wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE ) ); + + // query minimal recommended size from the buttons + dialog.SetSize( dialog.GetButtonAreaSize().x, 170 ); + + dialog.Centre( wxBOTH ); + dialog.ShowModal(); + + // This dialog uses the standard dialog styles but is also + // resizable on all platforms and shows a wxStaticLine on + // all platforms. + + wxExtDialog dialog2( this, -1, "Test 2 for wxExtDialog", + wxOK|wxFORWARD|wxBACKWARD|wxCANCEL, wxDefaultPosition, wxSize(400,170), + wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER | wxED_BUTTONS_RIGHT | wxED_STATIC_LINE | wxED_CLIENT_MARGIN ); + + dialog2.SetClientWindow( new wxTextCtrl( &dialog2, -1, "Test", wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE ) ); + + // query minimal recommended size from the buttons + wxSize min_size( dialog2.GetButtonAreaSize() ); + dialog2.SetSizeHints( min_size.x + 200, min_size.y ); + + dialog2.Centre( wxBOTH ); + dialog2.ShowModal(); +} + void MyFrame::ChooseColour(wxCommandEvent& WXUNUSED(event) ) { wxColourData data; @@ -326,6 +364,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(DIALOGS_FILE_SAVE, MyFrame::FileSave) EVT_MENU(DIALOGS_DIR_CHOOSE, MyFrame::DirChoose) EVT_MENU(DIALOGS_TIP, MyFrame::ShowTip) + EVT_MENU(DIALOGS_EXT_DIALOG, MyFrame::ExtDialog) #if defined(__WXMSW__) && wxTEST_GENERIC_DIALOGS_IN_MSW EVT_MENU(DIALOGS_CHOOSE_COLOUR_GENERIC, MyFrame::ChooseColourGeneric) EVT_MENU(DIALOGS_CHOOSE_FONT_GENERIC, MyFrame::ChooseFontGeneric) diff --git a/samples/dialogs/dialogs.h b/samples/dialogs/dialogs.h index 228fd9a5cb..3143996187 100644 --- a/samples/dialogs/dialogs.h +++ b/samples/dialogs/dialogs.h @@ -27,8 +27,8 @@ class MyFrame: public wxFrame MyFrame(wxWindow *parent, const wxString& title, const wxPoint& pos, const wxSize& size); - void ChooseColour(wxCommandEvent& event); - void ChooseFont(wxCommandEvent& event); + void ChooseColour(wxCommandEvent& event); + void ChooseFont(wxCommandEvent& event); void MessageBox(wxCommandEvent& event); void SingleChoice(wxCommandEvent& event); void TextEntry(wxCommandEvent& event); @@ -36,13 +36,15 @@ class MyFrame: public wxFrame void FileSave(wxCommandEvent& event); void DirChoose(wxCommandEvent& event); void ShowTip(wxCommandEvent& event); + void ExtDialog(wxCommandEvent &event); #if !defined(__WXMSW__) || wxTEST_GENERIC_DIALOGS_IN_MSW - void ChooseColourGeneric(wxCommandEvent& event); - void ChooseFontGeneric(wxCommandEvent& event); + void ChooseColourGeneric(wxCommandEvent& event); + void ChooseFontGeneric(wxCommandEvent& event); #endif - void OnExit(wxCommandEvent& event); -DECLARE_EVENT_TABLE() + void OnExit(wxCommandEvent& event); + + DECLARE_EVENT_TABLE() }; class MyCanvas: public wxScrolledWindow @@ -69,6 +71,7 @@ DECLARE_EVENT_TABLE() #define DIALOGS_FILE_SAVE 9 #define DIALOGS_DIR_CHOOSE 10 #define DIALOGS_TIP 11 +#define DIALOGS_EXT_DIALOG 12 #endif diff --git a/samples/internat/Makefile.am b/samples/internat/Makefile.am index f3be440267..afef5a1203 100644 --- a/samples/internat/Makefile.am +++ b/samples/internat/Makefile.am @@ -1,3 +1,5 @@ +AUTOMAKE_OPTIONS = 1.3 no-dependencies + SUFFIXES = .cpp DEFS = @DEFS@ $(TOOLKIT_DEF) $(WXDEBUG_DEFINE) diff --git a/samples/layout/Makefile.am b/samples/layout/Makefile.am index 514640c798..9841ed0f74 100644 --- a/samples/layout/Makefile.am +++ b/samples/layout/Makefile.am @@ -1,3 +1,5 @@ +AUTOMAKE_OPTIONS = 1.3 no-dependencies + SUFFIXES = .cpp DEFS = @DEFS@ $(TOOLKIT_DEF) $(WXDEBUG_DEFINE) diff --git a/samples/listctrl/Makefile.am b/samples/listctrl/Makefile.am index 1d12eb699c..3af03416f4 100644 --- a/samples/listctrl/Makefile.am +++ b/samples/listctrl/Makefile.am @@ -1,3 +1,5 @@ +AUTOMAKE_OPTIONS = 1.3 no-dependencies + SUFFIXES = .cpp DEFS = @DEFS@ $(TOOLKIT_DEF) $(WXDEBUG_DEFINE) diff --git a/samples/mdi/Makefile.am b/samples/mdi/Makefile.am index 7b37310afc..26ebada631 100644 --- a/samples/mdi/Makefile.am +++ b/samples/mdi/Makefile.am @@ -1,3 +1,5 @@ +AUTOMAKE_OPTIONS = 1.3 no-dependencies + SUFFIXES = .cpp DEFS = @DEFS@ $(TOOLKIT_DEF) $(WXDEBUG_DEFINE) diff --git a/samples/memcheck/Makefile.am b/samples/memcheck/Makefile.am index 58bbbcf3bd..5658a0fe3d 100644 --- a/samples/memcheck/Makefile.am +++ b/samples/memcheck/Makefile.am @@ -1,3 +1,5 @@ +AUTOMAKE_OPTIONS = 1.3 no-dependencies + SUFFIXES = .cpp DEFS = @DEFS@ $(TOOLKIT_DEF) $(WXDEBUG_DEFINE) diff --git a/samples/minifram/Makefile.am b/samples/minifram/Makefile.am index d53aac5146..3631656b63 100644 --- a/samples/minifram/Makefile.am +++ b/samples/minifram/Makefile.am @@ -1,3 +1,5 @@ +AUTOMAKE_OPTIONS = 1.3 no-dependencies + SUFFIXES = .cpp DEFS = @DEFS@ $(TOOLKIT_DEF) $(WXDEBUG_DEFINE) diff --git a/samples/notebook/Makefile.am b/samples/notebook/Makefile.am index d53aac5146..3631656b63 100644 --- a/samples/notebook/Makefile.am +++ b/samples/notebook/Makefile.am @@ -1,3 +1,5 @@ +AUTOMAKE_OPTIONS = 1.3 no-dependencies + SUFFIXES = .cpp DEFS = @DEFS@ $(TOOLKIT_DEF) $(WXDEBUG_DEFINE) diff --git a/samples/png/Makefile.am b/samples/png/Makefile.am index d29b3bdd20..d10b94b698 100644 --- a/samples/png/Makefile.am +++ b/samples/png/Makefile.am @@ -1,3 +1,5 @@ +AUTOMAKE_OPTIONS = 1.3 no-dependencies + SUFFIXES = .cpp DEFS = @DEFS@ $(TOOLKIT_DEF) $(WXDEBUG_DEFINE) diff --git a/samples/printing/Makefile.am b/samples/printing/Makefile.am index 28311d2412..73aa8ade60 100644 --- a/samples/printing/Makefile.am +++ b/samples/printing/Makefile.am @@ -1,3 +1,5 @@ +AUTOMAKE_OPTIONS = 1.3 no-dependencies + SUFFIXES = .cpp DEFS = @DEFS@ $(TOOLKIT_DEF) $(WXDEBUG_DEFINE) diff --git a/samples/proplist/Makefile.am b/samples/proplist/Makefile.am index d53aac5146..3631656b63 100644 --- a/samples/proplist/Makefile.am +++ b/samples/proplist/Makefile.am @@ -1,3 +1,5 @@ +AUTOMAKE_OPTIONS = 1.3 no-dependencies + SUFFIXES = .cpp DEFS = @DEFS@ $(TOOLKIT_DEF) $(WXDEBUG_DEFINE) diff --git a/samples/resource/Makefile.am b/samples/resource/Makefile.am index 45bf3c9ee2..1545a26635 100644 --- a/samples/resource/Makefile.am +++ b/samples/resource/Makefile.am @@ -1,3 +1,5 @@ +AUTOMAKE_OPTIONS = 1.3 no-dependencies + SUFFIXES = .cpp DEFS = @DEFS@ $(TOOLKIT_DEF) $(WXDEBUG_DEFINE) diff --git a/samples/sashtest/Makefile.am b/samples/sashtest/Makefile.am index 4411f611af..f2bbd260b1 100644 --- a/samples/sashtest/Makefile.am +++ b/samples/sashtest/Makefile.am @@ -1,3 +1,5 @@ +AUTOMAKE_OPTIONS = 1.3 no-dependencies + SUFFIXES = .cpp DEFS = @DEFS@ $(TOOLKIT_DEF) $(WXDEBUG_DEFINE) diff --git a/samples/scroll/Makefile.am b/samples/scroll/Makefile.am index f53b6a3ee0..162ff86f4a 100644 --- a/samples/scroll/Makefile.am +++ b/samples/scroll/Makefile.am @@ -1,3 +1,5 @@ +AUTOMAKE_OPTIONS = 1.3 no-dependencies + SUFFIXES = .cpp DEFS = @DEFS@ $(TOOLKIT_DEF) $(WXDEBUG_DEFINE) diff --git a/samples/splitter/Makefile.am b/samples/splitter/Makefile.am index d53aac5146..3631656b63 100644 --- a/samples/splitter/Makefile.am +++ b/samples/splitter/Makefile.am @@ -1,3 +1,5 @@ +AUTOMAKE_OPTIONS = 1.3 no-dependencies + SUFFIXES = .cpp DEFS = @DEFS@ $(TOOLKIT_DEF) $(WXDEBUG_DEFINE) diff --git a/samples/text/Makefile.am b/samples/text/Makefile.am index 5a1a4da929..13c58723b2 100644 --- a/samples/text/Makefile.am +++ b/samples/text/Makefile.am @@ -1,3 +1,5 @@ +AUTOMAKE_OPTIONS = 1.3 no-dependencies + SUFFIXES = .cpp DEFS = @DEFS@ $(TOOLKIT_DEF) $(WXDEBUG_DEFINE) diff --git a/samples/thread/Makefile.am b/samples/thread/Makefile.am index d53aac5146..3631656b63 100644 --- a/samples/thread/Makefile.am +++ b/samples/thread/Makefile.am @@ -1,3 +1,5 @@ +AUTOMAKE_OPTIONS = 1.3 no-dependencies + SUFFIXES = .cpp DEFS = @DEFS@ $(TOOLKIT_DEF) $(WXDEBUG_DEFINE) diff --git a/samples/toolbar/Makefile.am b/samples/toolbar/Makefile.am index d53aac5146..3631656b63 100644 --- a/samples/toolbar/Makefile.am +++ b/samples/toolbar/Makefile.am @@ -1,3 +1,5 @@ +AUTOMAKE_OPTIONS = 1.3 no-dependencies + SUFFIXES = .cpp DEFS = @DEFS@ $(TOOLKIT_DEF) $(WXDEBUG_DEFINE) diff --git a/samples/treectrl/Makefile.am b/samples/treectrl/Makefile.am index 857353617a..2812685365 100644 --- a/samples/treectrl/Makefile.am +++ b/samples/treectrl/Makefile.am @@ -1,3 +1,5 @@ +AUTOMAKE_OPTIONS = 1.3 no-dependencies + SUFFIXES = .cpp DEFS = @DEFS@ $(TOOLKIT_DEF) $(WXDEBUG_DEFINE) diff --git a/samples/typetest/Makefile.am b/samples/typetest/Makefile.am index 255b60146c..48f57ce02d 100644 --- a/samples/typetest/Makefile.am +++ b/samples/typetest/Makefile.am @@ -1,3 +1,5 @@ +AUTOMAKE_OPTIONS = 1.3 no-dependencies + SUFFIXES = .cpp DEFS = @DEFS@ $(TOOLKIT_DEF) $(WXDEBUG_DEFINE) diff --git a/samples/typetest/typetest.cpp b/samples/typetest/typetest.cpp index 0859c51c88..3cc3dc4d83 100644 --- a/samples/typetest/typetest.cpp +++ b/samples/typetest/typetest.cpp @@ -201,15 +201,15 @@ void MyApp::DoStreamDemo(wxCommandEvent& WXUNUSED(event)) file_output.SeekO( 0 ); wxDataOutputStream data_output( file_output ); - wxInt32 i32 = 0xFFFFFFFF; - tmp.Printf( "Signed int32: %d\n", i32 ); + wxInt16 i16 = 0xFFFF; + tmp.Printf( "Signed int16: %d\n", (int)i16 ); textCtrl.WriteText( tmp ); - data_output.Write32( i32 ); + data_output.Write16( i16 ); - wxUint32 ui32 = 0xFFFFFFFF; - tmp.Printf( "Unsigned int32: %u\n", ui32 ); + wxUint16 ui16 = 0xFFFF; + tmp.Printf( "Unsigned int16: %u\n", (unsigned int) ui16 ); textCtrl.WriteText( tmp ); - data_output.Write32( ui32 ); + data_output.Write16( ui16 ); d = 2.01234567890123456789; tmp.Printf( "Double: %f\n", d ); @@ -228,12 +228,12 @@ void MyApp::DoStreamDemo(wxCommandEvent& WXUNUSED(event)) file_input.SeekI( 0 ); wxDataInputStream data_input( file_input ); - i32 = data_input.Read32(); - tmp.Printf( "Signed int32: %d\n", i32 ); + i16 = data_input.Read16(); + tmp.Printf( "Signed int16: %d\n", (int)i16 ); textCtrl.WriteText( tmp ); - ui32 = data_input.Read32(); - tmp.Printf( "Unsigned int32: %u\n", ui32 ); + ui16 = data_input.Read16(); + tmp.Printf( "Unsigned int16: %u\n", (unsigned int) ui16 ); textCtrl.WriteText( tmp ); d = data_input.ReadDouble(); diff --git a/samples/validate/Makefile.am b/samples/validate/Makefile.am index 95727d078f..15d467989a 100644 --- a/samples/validate/Makefile.am +++ b/samples/validate/Makefile.am @@ -1,3 +1,5 @@ +AUTOMAKE_OPTIONS = 1.3 no-dependencies + SUFFIXES = .cpp DEFS = @DEFS@ $(TOOLKIT_DEF) $(WXDEBUG_DEFINE) diff --git a/samples/wxpoem/Makefile.am b/samples/wxpoem/Makefile.am index 7250623699..707a243a85 100644 --- a/samples/wxpoem/Makefile.am +++ b/samples/wxpoem/Makefile.am @@ -1,3 +1,5 @@ +AUTOMAKE_OPTIONS = 1.3 no-dependencies + SUFFIXES = .cpp DEFS = @DEFS@ $(TOOLKIT_DEF) $(WXDEBUG_DEFINE) diff --git a/samples/wxsocket/Makefile.am b/samples/wxsocket/Makefile.am index 72b83bc22d..bb48e08457 100644 --- a/samples/wxsocket/Makefile.am +++ b/samples/wxsocket/Makefile.am @@ -1,3 +1,5 @@ +AUTOMAKE_OPTIONS = 1.3 no-dependencies + SUFFIXES = .cpp DEFS = @DEFS@ $(TOOLKIT_DEF) $(WXDEBUG_DEFINE) diff --git a/src/generic/extdlgg.cpp b/src/generic/extdlgg.cpp new file mode 100644 index 0000000000..77bf06c4bd --- /dev/null +++ b/src/generic/extdlgg.cpp @@ -0,0 +1,360 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: extdlgg.cpp +// Purpose: extended generic dialog +// Author: Robert Roebling +// Modified by: +// Created: 04/01/98 +// RCS-ID: $Id$ +// Copyright: (c) Robert Roebling +// Licence: wxWindows license +///////////////////////////////////////////////////////////////////////////// + +#ifdef __GNUG__ +#pragma implementation "extdlgg.h" +#endif + +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ +#pragma hdrstop +#endif + +#ifndef WX_PRECOMP +#include +#include "wx/intl.h" +#include "wx/dialog.h" +#include "wx/button.h" +#endif + +#if wxUSE_STATLINE +#include "wx/statline.h" +#endif + +#include "wx/generic/extdlgg.h" + +//----------------------------------------------------------------------------- +// wxExtDialog +//----------------------------------------------------------------------------- + +#define STATIC_LINE_MARGIN 15 +#define CLIENT_AREA_MARGIN 10 +#define BUTTON_AREA_MARGIN 10 + +#if !USE_SHARED_LIBRARY +IMPLEMENT_DYNAMIC_CLASS(wxExtDialog, wxDialog) + +BEGIN_EVENT_TABLE(wxExtDialog, wxDialog) + EVT_SIZE(wxExtDialog::OnSize) + EVT_BUTTON(wxID_YES, wxExtDialog::OnYes) + EVT_BUTTON(wxID_NO, wxExtDialog::OnNo) + EVT_BUTTON(wxID_CANCEL, wxExtDialog::OnCancel) +END_EVENT_TABLE() +#endif + +wxExtDialog::wxExtDialog( wxWindow *parent, wxWindowID id, + const wxString& title, long extraStyle, + const wxPoint& pos, const wxSize& size, + long style, const wxString &name ) +{ + Create( parent, id, title, extraStyle, pos, size, style, name ); +} + +bool wxExtDialog::Create( wxWindow *parent, wxWindowID id, + const wxString& title, long extraStyle, + const wxPoint& pos, const wxSize& size, + long style, const wxString &name ) +{ + if (!wxDialog::Create( parent, id, title, pos, size, style, name )) + return FALSE; + + m_extraStyle = extraStyle; + + wxButton *ok = (wxButton *) NULL; + wxButton *cancel = (wxButton *) NULL; + wxButton *yes = (wxButton *) NULL; + wxButton *no = (wxButton *) NULL; + + + if (m_extraStyle & wxYES_NO) + { + yes = new wxButton( this, wxID_YES, _("Yes") ); + m_buttons.Append( yes ); + no = new wxButton( this, wxID_NO, _("No") ); + m_buttons.Append( no ); + } + + if (m_extraStyle & wxYES) + { + yes = new wxButton( this, wxID_YES, _("Yes") ); + m_buttons.Append( yes ); + } + + if (m_extraStyle & wxNO) + { + no = new wxButton( this, wxID_NO, _("No") ); + m_buttons.Append( no ); + } + + if (m_extraStyle & wxOK) + { + ok = new wxButton( this, wxID_OK, _("OK") ); + m_buttons.Append( ok ); + } + + if (m_extraStyle & wxFORWARD) + AddButton( new wxButton( this, wxID_FORWARD, _("Forward") ) ); + + if (m_extraStyle & wxBACKWARD) + AddButton( new wxButton( this, wxID_BACKWARD, _("Backward") ) ); + + if (m_extraStyle & wxSETUP) + AddButton( new wxButton( this, wxID_SETUP, _("Setup") ) ); + + if (m_extraStyle & wxMORE) + AddButton( new wxButton( this, wxID_MORE, _("More..") ) ); + + if (m_extraStyle & wxCANCEL) + { + cancel = new wxButton( this, wxID_CANCEL, _("Cancel") ); + m_buttons.Append( cancel ); + } + + if ((m_extraStyle & wxNO_DEFAULT) == 0) + { + if (ok) + { + ok->SetDefault(); + ok->SetFocus(); + } + else if (yes) + { + yes->SetDefault(); + yes->SetFocus(); + } + } + +#if wxUSE_STATLINE + if (style & wxED_STATIC_LINE) + { + int line_style = wxLI_HORIZONTAL; + if (style & wxED_BUTTONS_RIGHT) line_style = wxLI_VERTICAL; + + m_statLine = new wxStaticLine( this, -1, wxDefaultPosition, wxDefaultSize, line_style ); + } + else + m_statLine = (wxStaticLine*) NULL; +#endif + + if (m_extraStyle & wxCENTRE) + Centre( wxBOTH ); + + return TRUE; +} + +void wxExtDialog::AddButton( wxButton *button ) +{ + m_buttons.Append( button ); +} + +void wxExtDialog::SetDefaultButton( wxWindowID button ) +{ + wxNode *node = m_buttons.First(); + while (node) + { + wxButton *but = (wxButton*) node->Data(); + if (but->GetId() == button) + { + but->SetDefault(); + but->SetFocus(); + return; + } + } +} + +void wxExtDialog::EnableButton( wxWindowID button, bool enable ) +{ + wxNode *node = m_buttons.First(); + while (node) + { + wxButton *but = (wxButton*) node->Data(); + if (but->GetId() == button) + { + but->Enable(enable); + return; + } + } +} + +bool wxExtDialog::ButtonIsEnabled( wxWindowID button ) +{ + wxNode *node = m_buttons.First(); + while (node) + { + wxButton *but = (wxButton*) node->Data(); + if (but->GetId() == button) + return but->IsEnabled(); + } + return FALSE; +} + +void wxExtDialog::OnSize( wxSizeEvent &WXUNUSED(event) ) +{ + wxSize client_size( GetClientSize() ); + wxSize button_area( LayoutButtons() ); + + if (HasFlag(wxED_BUTTONS_RIGHT)) + client_size.x -= button_area.x; + else + client_size.y -= button_area.y; + + if (m_clientWindow) + { + if (m_windowStyle & wxED_CLIENT_MARGIN) + m_clientWindow->SetSize( CLIENT_AREA_MARGIN, + CLIENT_AREA_MARGIN, + client_size.x - 2*CLIENT_AREA_MARGIN, + client_size.y - 2*CLIENT_AREA_MARGIN ); + else + m_clientWindow->SetSize( 0, 0, client_size.x, client_size.y ); + + if (m_clientWindow->GetAutoLayout()) + m_clientWindow->Layout(); + } +} + +void wxExtDialog::OnYes(wxCommandEvent& event) +{ + EndModal( wxID_YES ); +} + +void wxExtDialog::OnNo(wxCommandEvent& event) +{ + EndModal( wxID_NO ); +} + +void wxExtDialog::OnCancel(wxCommandEvent& event) +{ + /* allow cancellation via ESC/Close button except if + only YES and NO are specified. */ + if ((m_extraStyle & wxYES_NO) != wxYES_NO || (m_extraStyle & wxCANCEL)) + { + EndModal( wxID_CANCEL ); + } +} + +wxSize wxExtDialog::GetButtonAreaSize() +{ + if (m_buttons.GetCount() == 0) return wxSize(0,0); + + wxSize ret(0,0); + + // this routine can be improved to measure the string length + // of the button text or the bitmap size if using wxBmpButton + // or to query the standard button size somehow. + + int button_size_and_margin_x = 110; + int button_size_and_margin_y = 44; + + if (m_windowStyle & wxED_BUTTONS_RIGHT) + { + ret.x = button_size_and_margin_x; + ret.y = m_buttons.GetCount()*button_size_and_margin_y + 2*BUTTON_AREA_MARGIN; +#if wxUSE_STATLINE + if (m_statLine) + ret.x += STATIC_LINE_MARGIN; +#endif + } + else + { + ret.x = m_buttons.GetCount()*button_size_and_margin_x + 2*BUTTON_AREA_MARGIN; + ret.y = button_size_and_margin_y; +#if wxUSE_STATLINE + if (m_statLine) + ret.y += STATIC_LINE_MARGIN; +#endif + } + + return ret; +} + +wxSize wxExtDialog::LayoutButtons() +{ + if (m_buttons.GetCount() == 0) return wxSize(0,0); + + wxSize area_used( GetButtonAreaSize() ); + wxSize client_area( GetClientSize() ); + + if (m_windowStyle & wxED_BUTTONS_RIGHT) + { + area_used.y = client_area.y; + + int space_for_each_button = (client_area.y-2*BUTTON_AREA_MARGIN) / m_buttons.GetCount(); + int n = 0; + wxNode *node = m_buttons.First(); + while (node) + { + wxButton *button = (wxButton*)node->Data(); + + wxSize button_size( button->GetSize() ); + if (button_size.x < 80) button_size.x = 80; + + int center_of_button_y = n*space_for_each_button + space_for_each_button/2; + int button_y = BUTTON_AREA_MARGIN + center_of_button_y - button_size.y/2; + + int center_of_button_x = client_area.x - area_used.x/2; + int button_x = center_of_button_x - button_size.x/2; + + button->SetSize( button_x, button_y, button_size.x, button_size.y ); + + node = node->Next(); + n++; + } + +#if wxUSE_STATLINE + if (m_statLine) + m_statLine->SetSize( client_area.x - area_used.x, + 0, + wxStaticLine::GetDefaultSize(), + client_area.y ); +#endif + } + else + { + area_used.x = client_area.x; + + int space_for_each_button = (client_area.x-2*BUTTON_AREA_MARGIN) / m_buttons.GetCount(); + int n = 0; + wxNode *node = m_buttons.First(); + while (node) + { + wxButton *button = (wxButton*)node->Data(); + + wxSize button_size( button->GetSize() ); + if (button_size.x < 80) button_size.x = 80; + + int center_of_button_x = n*space_for_each_button + space_for_each_button/2; + int button_x = BUTTON_AREA_MARGIN + center_of_button_x - button_size.x/2; + + int center_of_button_y = client_area.y - area_used.y/2; + int button_y = center_of_button_y - button_size.y/2; + + button->SetSize( button_x, button_y, button_size.x, button_size.y ); + + node = node->Next(); + n++; + } + +#if wxUSE_STATLINE + if (m_statLine) + m_statLine->SetSize( 0, + client_area.y - area_used.y, + client_area.x, + wxStaticLine::GetDefaultSize() ); +#endif + } + + return area_used; +} + + diff --git a/src/gtk/Makefile.am b/src/gtk/Makefile.am index 2ff1e24db6..3e510bc20b 100644 --- a/src/gtk/Makefile.am +++ b/src/gtk/Makefile.am @@ -108,6 +108,7 @@ libwx_gtk_la_SOURCES = \ colrdlgg.cpp \ dcpsg.cpp \ dirdlgg.cpp \ + extdlgg.cpp \ fontdlgg.cpp \ gridg.cpp \ helpext.cpp \ diff --git a/src/gtk1/Makefile.am b/src/gtk1/Makefile.am index 2ff1e24db6..3e510bc20b 100644 --- a/src/gtk1/Makefile.am +++ b/src/gtk1/Makefile.am @@ -108,6 +108,7 @@ libwx_gtk_la_SOURCES = \ colrdlgg.cpp \ dcpsg.cpp \ dirdlgg.cpp \ + extdlgg.cpp \ fontdlgg.cpp \ gridg.cpp \ helpext.cpp \