Rewrite generic message box
Minor corrections to frame/resizing Update for wxPython git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2322 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
8d72073ee3
commit
15b24b148a
@ -35,11 +35,110 @@ working the same as described in the wxWindows documents the best
|
|||||||
thing to do is to scan through the wxPython sources, especially the .i
|
thing to do is to scan through the wxPython sources, especially the .i
|
||||||
files, as that is where the interfaces for wxPython are defined.
|
files, as that is where the interfaces for wxPython are defined.
|
||||||
|
|
||||||
Currently this extension module is designed such that the entire
|
I have reports of successfully embedding wxPython within a wxWindows
|
||||||
application will be written in Python. I havn't tried it yet, but I
|
C++ app on GTK. It hasn't yet been attempted on MSW (to my knowledge)
|
||||||
am sure that attempting to embed wxPython in a C++ wxWindows
|
so I don't know how successful such an attempt would be. However it
|
||||||
application will cause problems. However there is a plan to support
|
is certainly possible.
|
||||||
this in the future.
|
|
||||||
|
|
||||||
|
|
||||||
|
Getting Help
|
||||||
|
------------
|
||||||
|
|
||||||
|
Since wxPython is a blending of multiple technologies, help comes from
|
||||||
|
multiple sources. See the http://alldunn.com/wxPython for details on
|
||||||
|
various sources of help, but probably the best source is the
|
||||||
|
wxPython-users mail list. You can view the archive or subscribe by
|
||||||
|
going to
|
||||||
|
|
||||||
|
http://starship.python.net/mailman/listinfo/wxpython-users
|
||||||
|
|
||||||
|
Or you can send mail directly to the list using this address:
|
||||||
|
|
||||||
|
wxpython-users@starship.python.net
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
What's new in 2.0b9
|
||||||
|
-------------------
|
||||||
|
Bug fix for ListCtrl in test4.py (Was a missing file... DSM!)
|
||||||
|
|
||||||
|
Bug fix for occassional GPF on Win32 systems upon termination of a
|
||||||
|
wxPython application.
|
||||||
|
|
||||||
|
Added wxListBox.GetSelections returning selections as a Tuple.
|
||||||
|
|
||||||
|
Added a wxTreeItemData that is able to hold any Python object and be
|
||||||
|
associated with items in a wxTreeCtrl. Added test pytree.py to show
|
||||||
|
this feature off.
|
||||||
|
|
||||||
|
Added wxSafeYield function.
|
||||||
|
|
||||||
|
OpenGL Canvas can be optionally compiled in to wxPython.
|
||||||
|
|
||||||
|
Awesome new Demo Framework for showing off wxPython and for learning
|
||||||
|
how it all works.
|
||||||
|
|
||||||
|
The pre-built Win32 version is no longer distributing the wxWindows
|
||||||
|
DLL. It is statically linked with the wxWindows library instead.
|
||||||
|
|
||||||
|
Added a couple missing items from the docs.
|
||||||
|
|
||||||
|
Added wxImage, wxImageHandler, wxPNGHandler, wxJPEGHandler,
|
||||||
|
wxGIFHandler and wxBMPHandler.
|
||||||
|
|
||||||
|
Added new methods to wxTextCtrl.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
What's new in 2.0b8
|
||||||
|
-------------------
|
||||||
|
Support for using Python threads in wxPython apps.
|
||||||
|
|
||||||
|
Several missing methods from various classes.
|
||||||
|
|
||||||
|
Various bug fixes.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
What's new in 2.0b7
|
||||||
|
-------------------
|
||||||
|
Added DLG_PNT and DLG_SZE convienience methods to wxWindow class.
|
||||||
|
|
||||||
|
Added missing constructor and other methods for wxMenuItem.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
What's new in 2.0b6
|
||||||
|
-------------------
|
||||||
|
Just a quickie update to fix the self-installer to be compatible with
|
||||||
|
Python 1.5.2b2's Registry settings.
|
||||||
|
|
||||||
|
|
||||||
|
What's new in 2.0b5
|
||||||
|
-------------------
|
||||||
|
Well obviously the numbering scheme has changed. I did this to
|
||||||
|
reflect the fact that this truly is the second major revision of
|
||||||
|
wxPython, (well the third actually if you count the one I did for
|
||||||
|
wxWindows 1.68 and then threw away...) and also that it is associated
|
||||||
|
with the 2.0 version of wxWindows.
|
||||||
|
|
||||||
|
I have finally started documenting wxPython. There are several pages
|
||||||
|
in the wxWindows documentation tree specifically about wxPython, and I
|
||||||
|
have added notes within the class references about where wxPython
|
||||||
|
diverges from wxWindows.
|
||||||
|
|
||||||
|
Added wxWindow_FromHWND(hWnd) for wxMSW to construct a wxWindow from a
|
||||||
|
window handle. If you can get the window handle into the python code,
|
||||||
|
it should just work... More news on this later.
|
||||||
|
|
||||||
|
Added wxImageList, wxToolTip.
|
||||||
|
|
||||||
|
Re-enabled wxConfig.DeleteAll() since it is reportedly fixed for the
|
||||||
|
wxRegConfig class.
|
||||||
|
|
||||||
|
As usual, some bug fixes, tweaks, etc.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
What's new in 0.5.3
|
What's new in 0.5.3
|
||||||
@ -142,11 +241,11 @@ there, make sure wxUSE_OWNER_DRAWN is also set to 1.
|
|||||||
|
|
||||||
2. Change into the $(WXWIN)/utils/wxPython/src directory.
|
2. Change into the $(WXWIN)/utils/wxPython/src directory.
|
||||||
|
|
||||||
3. Edit makefile.nt and specify where your python installation is at.
|
3. Edit makefile.vc and specify where your python installation is at.
|
||||||
You may also want to fiddle with the TARGETDIR variable as described
|
You may also want to fiddle with the TARGETDIR variable as described
|
||||||
above.
|
above.
|
||||||
|
|
||||||
4. Run nmake -f makefile.nt
|
4. Run nmake -f makefile.vc
|
||||||
|
|
||||||
5. If it builds successfully, congratulations! Move on to the next
|
5. If it builds successfully, congratulations! Move on to the next
|
||||||
step. If not then you can try mailing me for help. Also, I will
|
step. If not then you can try mailing me for help. Also, I will
|
||||||
@ -169,7 +268,7 @@ version of Python either from the command line or from a shortcut.
|
|||||||
Unix
|
Unix
|
||||||
----
|
----
|
||||||
|
|
||||||
1. Change into the wxPython/src directory.
|
1. Change into the $(WXWIN)/utils/wxPython/src directory.
|
||||||
|
|
||||||
2. Edit Setup.in and ensure that the flags, directories, and toolkit
|
2. Edit Setup.in and ensure that the flags, directories, and toolkit
|
||||||
options are correct. See the above commentary about TARGETDIR. There
|
options are correct. See the above commentary about TARGETDIR. There
|
||||||
@ -191,15 +290,16 @@ module:
|
|||||||
|
|
||||||
make install
|
make install
|
||||||
|
|
||||||
|
4c. Log out from root. [Robert Roebling]
|
||||||
|
|
||||||
5. Change to the wxPython/tests directory.
|
|
||||||
|
5. Change to the $(WXWIN)/utils/wxPython/tests directory.
|
||||||
|
|
||||||
6. Try executing the test programs. For example:
|
6. Try executing the test programs. For example:
|
||||||
|
|
||||||
python test1.py
|
python test1.py
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
------------------------
|
------------------------
|
||||||
10/20/1998
|
10/20/1998
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ CCC=g++
|
|||||||
WXWIN=~/wxWindows
|
WXWIN=~/wxWindows
|
||||||
GENCODEDIR=gtk
|
GENCODEDIR=gtk
|
||||||
srcdir=$(GENCODEDIR)
|
srcdir=$(GENCODEDIR)
|
||||||
WX_CONFIG_CFLAGS=`wx-config --cflags`
|
WX_CONFIG_CFLAGS=`wx-config --cflags` `gtk-config --cflags`
|
||||||
WX_CONFIG_LIBS=`wx-config --libs`
|
WX_CONFIG_LIBS=`wx-config --libs`
|
||||||
|
|
||||||
# Depending on how your Python was built, you may have to set this
|
# Depending on how your Python was built, you may have to set this
|
||||||
|
@ -27,16 +27,20 @@ WXDLLEXPORT_DATA(extern const wxChar*) wxMessageBoxCaptionStr;
|
|||||||
class WXDLLEXPORT wxGenericMessageDialog: public wxDialog
|
class WXDLLEXPORT wxGenericMessageDialog: public wxDialog
|
||||||
{
|
{
|
||||||
DECLARE_DYNAMIC_CLASS(wxGenericMessageDialog)
|
DECLARE_DYNAMIC_CLASS(wxGenericMessageDialog)
|
||||||
protected:
|
|
||||||
long m_dialogStyle;
|
|
||||||
public:
|
public:
|
||||||
wxGenericMessageDialog(wxWindow *parent, const wxString& message, const wxString& caption = wxMessageBoxCaptionStr,
|
wxGenericMessageDialog(wxWindow *parent, const wxString& message,
|
||||||
|
const wxString& caption = wxMessageBoxCaptionStr,
|
||||||
long style = wxOK|wxCENTRE, const wxPoint& pos = wxDefaultPosition);
|
long style = wxOK|wxCENTRE, const wxPoint& pos = wxDefaultPosition);
|
||||||
|
|
||||||
void OnYes(wxCommandEvent& event);
|
void OnYes(wxCommandEvent& event);
|
||||||
void OnNo(wxCommandEvent& event);
|
void OnNo(wxCommandEvent& event);
|
||||||
void OnCancel(wxCommandEvent& event);
|
void OnCancel(wxCommandEvent& event);
|
||||||
|
|
||||||
|
private:
|
||||||
|
wxList m_buttons;
|
||||||
|
int m_dialogStyle;
|
||||||
|
|
||||||
DECLARE_EVENT_TABLE()
|
DECLARE_EVENT_TABLE()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
// Name: msgdlgg.cpp
|
// Name: msgdlgg.cpp
|
||||||
// Purpose: wxGenericMessageDialog
|
// Purpose: wxGenericMessageDialog
|
||||||
// Author: Julian Smart
|
// Author: Julian Smart, Robert Roebling
|
||||||
// Modified by:
|
// Modified by:
|
||||||
// Created: 04/01/98
|
// Created: 04/01/98
|
||||||
// RCS-ID: $Id$
|
// RCS-ID: $Id$
|
||||||
// Copyright: (c) Julian Smart and Markus Holzem
|
// Copyright: (c) Julian Smart, Markus Holzem, Robert Roebling
|
||||||
// Licence: wxWindows license
|
// Licence: wxWindows license
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
@ -39,36 +39,40 @@
|
|||||||
// New dialog box implementations
|
// New dialog box implementations
|
||||||
|
|
||||||
// Split message, using constraints to position controls
|
// Split message, using constraints to position controls
|
||||||
void wxSplitMessage2(const wxChar *message, wxList *messageList, wxWindow *parent, wxRowColSizer *sizer)
|
wxSize wxSplitMessage2( const wxString &message, wxWindow *parent )
|
||||||
{
|
{
|
||||||
wxChar *copyMessage = copystring(message);
|
int y = 10;
|
||||||
size_t i = 0;
|
int w = 50;
|
||||||
size_t len = wxStrlen(copyMessage);
|
wxString line( _T("") );
|
||||||
wxChar *currentMessage = copyMessage;
|
for (uint pos = 0; pos < message.Len(); pos++)
|
||||||
|
{
|
||||||
// wxWindow *lastWindow = parent;
|
if (message[pos] == _T('\n'))
|
||||||
|
{
|
||||||
while (i < len) {
|
if (!line.IsEmpty())
|
||||||
while ((i < len) && (copyMessage[i] != _T('\n'))) i++;
|
{
|
||||||
if (i < len) copyMessage[i] = 0;
|
wxStaticText *s1 = new wxStaticText( parent, -1, line, wxPoint(15,y) );
|
||||||
wxStaticText *mess = new wxStaticText(parent, -1, currentMessage);
|
wxSize size1( s1->GetSize() );
|
||||||
|
if (size1.x > w) w = size1.x;
|
||||||
/*
|
line = _T("");
|
||||||
wxLayoutConstraints *c = new wxLayoutConstraints;
|
|
||||||
c->left.SameAs (parent, wxLeft, 10);
|
|
||||||
c->top.SameAs (lastWindow, wxBottom, 5);
|
|
||||||
c->right.AsIs ();
|
|
||||||
c->height.AsIs ();
|
|
||||||
|
|
||||||
mess->SetConstraints(c);
|
|
||||||
*/
|
|
||||||
sizer->AddSizerChild(mess);
|
|
||||||
|
|
||||||
messageList->Append(mess);
|
|
||||||
|
|
||||||
currentMessage = copyMessage + i + 1;
|
|
||||||
}
|
}
|
||||||
delete[] copyMessage;
|
y += 18;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
line += message[pos];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!line.IsEmpty())
|
||||||
|
{
|
||||||
|
wxStaticText *s2 = new wxStaticText( parent, -1, line, wxPoint(15,y) );
|
||||||
|
wxSize size2( s2->GetSize() );
|
||||||
|
if (size2.x > w) w = size2.x;
|
||||||
|
}
|
||||||
|
|
||||||
|
y += 18;
|
||||||
|
|
||||||
|
return wxSize(w+30,y);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !USE_SHARED_LIBRARY
|
#if !USE_SHARED_LIBRARY
|
||||||
@ -81,70 +85,39 @@ END_EVENT_TABLE()
|
|||||||
IMPLEMENT_CLASS(wxGenericMessageDialog, wxDialog)
|
IMPLEMENT_CLASS(wxGenericMessageDialog, wxDialog)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
wxGenericMessageDialog::wxGenericMessageDialog(wxWindow *parent, const wxString& message, const wxString& caption,
|
wxGenericMessageDialog::wxGenericMessageDialog( wxWindow *parent, const wxString& message,
|
||||||
long style, const wxPoint& pos):
|
const wxString& caption, long style, const wxPoint& pos) :
|
||||||
wxDialog(parent, -1, caption, pos,
|
wxDialog( parent, -1, caption, pos, wxDefaultSize )
|
||||||
#ifdef __WXMOTIF_
|
|
||||||
wxSize(400, 300),
|
|
||||||
#else
|
|
||||||
wxDefaultSize,
|
|
||||||
#endif
|
|
||||||
wxDEFAULT_DIALOG_STYLE|wxDIALOG_MODAL)
|
|
||||||
{
|
{
|
||||||
m_dialogStyle = style;
|
m_dialogStyle = style;
|
||||||
|
|
||||||
wxBeginBusyCursor();
|
wxSize message_size( wxSplitMessage2( message, this ) );
|
||||||
|
|
||||||
wxSizer *topSizer = new wxSizer(this, wxSizerShrink);
|
|
||||||
topSizer->SetBorder(10, 10);
|
|
||||||
|
|
||||||
// message sizer at the top
|
|
||||||
wxRowColSizer *messageSizer = new wxRowColSizer(topSizer, wxSIZER_COLS, 100);
|
|
||||||
messageSizer->SetName(_T("messageSizer"));
|
|
||||||
|
|
||||||
// bool centre = ((style & wxCENTRE) == wxCENTRE);
|
|
||||||
|
|
||||||
wxList messageList;
|
|
||||||
wxSplitMessage2(message, &messageList, this, messageSizer);
|
|
||||||
|
|
||||||
// spacer size in the middle
|
|
||||||
wxSpacingSizer *spacingSizer = new wxSpacingSizer(topSizer, wxBelow, messageSizer, 20);
|
|
||||||
|
|
||||||
// row size at the bottom
|
|
||||||
wxRowColSizer *buttonSizer = new wxRowColSizer(topSizer, wxSIZER_ROWS );
|
|
||||||
buttonSizer->SetName(_T("buttonSizer"));
|
|
||||||
buttonSizer->SetSpacing(12,0);
|
|
||||||
|
|
||||||
// Specify constraints for the button sizer
|
|
||||||
wxLayoutConstraints *c = new wxLayoutConstraints;
|
|
||||||
c->width.AsIs ();
|
|
||||||
c->height.AsIs ();
|
|
||||||
c->top.Below (spacingSizer);
|
|
||||||
c->left.Absolute (10);
|
|
||||||
// c->centreX.SameAs (spacingSizer, wxCentreX);
|
|
||||||
buttonSizer->SetConstraints(c);
|
|
||||||
|
|
||||||
wxButton *ok = (wxButton *) NULL;
|
wxButton *ok = (wxButton *) NULL;
|
||||||
wxButton *cancel = (wxButton *) NULL;
|
wxButton *cancel = (wxButton *) NULL;
|
||||||
wxButton *yes = (wxButton *) NULL;
|
wxButton *yes = (wxButton *) NULL;
|
||||||
wxButton *no = (wxButton *) NULL;
|
wxButton *no = (wxButton *) NULL;
|
||||||
|
|
||||||
if (style & wxYES_NO) {
|
int y = message_size.y + 30;
|
||||||
yes = new wxButton(this, wxID_YES, _("Yes"), wxDefaultPosition, wxSize(75,-1) );
|
|
||||||
no = new wxButton(this, wxID_NO, _("No"), wxDefaultPosition, wxSize(75,-1) );
|
|
||||||
|
|
||||||
buttonSizer->AddSizerChild(yes);
|
if (style & wxYES_NO)
|
||||||
buttonSizer->AddSizerChild(no);
|
{
|
||||||
|
yes = new wxButton( this, wxID_YES, _("Yes"), wxPoint(-1,y), wxSize(80,-1) );
|
||||||
|
m_buttons.Append( yes );
|
||||||
|
no = new wxButton( this, wxID_NO, _("No"), wxPoint(-1,y), wxSize(80,-1) );
|
||||||
|
m_buttons.Append( no );
|
||||||
}
|
}
|
||||||
|
|
||||||
if (style & wxOK) {
|
if (style & wxOK)
|
||||||
ok = new wxButton(this, wxID_OK, _("OK"), wxDefaultPosition, wxSize(75,-1) );
|
{
|
||||||
buttonSizer->AddSizerChild(ok);
|
ok = new wxButton( this, wxID_OK, _("OK"), wxPoint(-1,y), wxSize(80,-1) );
|
||||||
|
m_buttons.Append( ok );
|
||||||
}
|
}
|
||||||
|
|
||||||
if (style & wxCANCEL) {
|
if (style & wxCANCEL)
|
||||||
cancel = new wxButton(this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize(75,-1) );
|
{
|
||||||
buttonSizer->AddSizerChild(cancel);
|
cancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxPoint(-1,y), wxSize(80,-1) );
|
||||||
|
m_buttons.Append( cancel );
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ok)
|
if (ok)
|
||||||
@ -158,29 +131,44 @@ wxGenericMessageDialog::wxGenericMessageDialog(wxWindow *parent, const wxString&
|
|||||||
yes->SetFocus();
|
yes->SetFocus();
|
||||||
}
|
}
|
||||||
|
|
||||||
Layout();
|
int w = m_buttons.GetCount() * 100;
|
||||||
|
if (message_size.x > w) w = message_size.x;
|
||||||
|
int space = w / (m_buttons.GetCount()*2);
|
||||||
|
|
||||||
Centre(wxBOTH);
|
int n = 0;
|
||||||
|
wxNode *node = m_buttons.First();
|
||||||
|
while (node)
|
||||||
|
{
|
||||||
|
wxWindow *win = (wxWindow*)node->Data();
|
||||||
|
int x = (n*2+1)*space - 40 + 15;
|
||||||
|
win->Move( x, -1 );
|
||||||
|
node = node->Next();
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
|
||||||
wxEndBusyCursor();
|
SetSize( w+30, y+40 );
|
||||||
|
|
||||||
|
Centre( wxBOTH );
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxGenericMessageDialog::OnYes(wxCommandEvent& WXUNUSED(event))
|
void wxGenericMessageDialog::OnYes(wxCommandEvent& WXUNUSED(event))
|
||||||
{
|
{
|
||||||
EndModal(wxID_YES);
|
EndModal( wxID_YES );
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxGenericMessageDialog::OnNo(wxCommandEvent& WXUNUSED(event))
|
void wxGenericMessageDialog::OnNo(wxCommandEvent& WXUNUSED(event))
|
||||||
{
|
{
|
||||||
EndModal(wxID_NO);
|
EndModal( wxID_NO );
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxGenericMessageDialog::OnCancel(wxCommandEvent& WXUNUSED(event))
|
void wxGenericMessageDialog::OnCancel(wxCommandEvent& WXUNUSED(event))
|
||||||
{
|
{
|
||||||
// Allow cancellation via ESC/Close button except if
|
/* Allow cancellation via ESC/Close button except if
|
||||||
// only YES and NO are specified.
|
only YES and NO are specified. */
|
||||||
if ( (m_dialogStyle & wxYES_NO) != wxYES_NO || (m_dialogStyle & wxCANCEL) )
|
if ( (m_dialogStyle & wxYES_NO) != wxYES_NO || (m_dialogStyle & wxCANCEL) )
|
||||||
EndModal(wxID_CANCEL);
|
{
|
||||||
|
EndModal( wxID_CANCEL );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -109,35 +109,6 @@ gtk_dialog_realized_callback( GtkWidget *widget, wxDialog *win )
|
|||||||
{
|
{
|
||||||
if (g_isIdle) wxapp_install_idle_handler();
|
if (g_isIdle) wxapp_install_idle_handler();
|
||||||
|
|
||||||
/* all this is for Motif Window Manager "hints" and is supposed to be
|
|
||||||
recognized by other WM as well. not tested. */
|
|
||||||
long decor = (long) GDK_DECOR_ALL;
|
|
||||||
long func = (long) GDK_FUNC_ALL;
|
|
||||||
|
|
||||||
if ((win->m_windowStyle & wxCAPTION) == 0)
|
|
||||||
decor |= GDK_DECOR_TITLE;
|
|
||||||
/* if ((win->m_windowStyle & wxMINIMIZE) == 0)
|
|
||||||
func |= GDK_FUNC_MINIMIZE;
|
|
||||||
if ((win->m_windowStyle & wxMAXIMIZE) == 0)
|
|
||||||
func |= GDK_FUNC_MAXIMIZE; */
|
|
||||||
if ((win->m_windowStyle & wxSYSTEM_MENU) == 0)
|
|
||||||
decor |= GDK_DECOR_MENU;
|
|
||||||
if ((win->m_windowStyle & wxMINIMIZE_BOX) == 0)
|
|
||||||
decor |= GDK_DECOR_MINIMIZE;
|
|
||||||
if ((win->m_windowStyle & wxMAXIMIZE_BOX) == 0)
|
|
||||||
decor |= GDK_DECOR_MAXIMIZE;
|
|
||||||
if ((win->m_windowStyle & wxRESIZE_BORDER) == 0)
|
|
||||||
func |= GDK_FUNC_RESIZE;
|
|
||||||
|
|
||||||
gdk_window_set_decorations( win->m_widget->window, (GdkWMDecoration)decor);
|
|
||||||
gdk_window_set_functions( win->m_widget->window, (GdkWMFunction)func);
|
|
||||||
|
|
||||||
/* GTK's shrinking/growing policy */
|
|
||||||
if ((win->m_windowStyle & wxRESIZE_BORDER) == 0)
|
|
||||||
gtk_window_set_policy(GTK_WINDOW(win->m_widget), 0, 0, 1);
|
|
||||||
else
|
|
||||||
gtk_window_set_policy(GTK_WINDOW(win->m_widget), 1, 1, 1);
|
|
||||||
|
|
||||||
/* reset the icon */
|
/* reset the icon */
|
||||||
if (win->m_icon != wxNullIcon)
|
if (win->m_icon != wxNullIcon)
|
||||||
{
|
{
|
||||||
@ -156,8 +127,41 @@ gtk_dialog_realized_callback( GtkWidget *widget, wxDialog *win )
|
|||||||
static gint
|
static gint
|
||||||
gtk_dialog_map_callback( GtkWidget *widget, wxDialog *win )
|
gtk_dialog_map_callback( GtkWidget *widget, wxDialog *win )
|
||||||
{
|
{
|
||||||
|
/* I haven''t been able to set the position of
|
||||||
|
the dialog before it is shown, so I do it here */
|
||||||
gtk_widget_set_uposition( widget, win->m_x, win->m_y );
|
gtk_widget_set_uposition( widget, win->m_x, win->m_y );
|
||||||
|
|
||||||
|
/* all this is for Motif Window Manager "hints" and is supposed to be
|
||||||
|
recognized by other WM as well. not tested. */
|
||||||
|
long decor = (long) GDK_DECOR_ALL;
|
||||||
|
long func = (long) GDK_FUNC_ALL;
|
||||||
|
|
||||||
|
if ((win->m_windowStyle & wxCAPTION) == 0)
|
||||||
|
decor |= GDK_DECOR_TITLE;
|
||||||
|
if ((win->m_windowStyle & wxSYSTEM_MENU) == 0)
|
||||||
|
decor |= GDK_DECOR_MENU;
|
||||||
|
if ((win->m_windowStyle & wxMINIMIZE_BOX) == 0)
|
||||||
|
{
|
||||||
|
func |= GDK_FUNC_MINIMIZE;
|
||||||
|
decor |= GDK_DECOR_MINIMIZE;
|
||||||
|
}
|
||||||
|
if ((win->m_windowStyle & wxMAXIMIZE_BOX) == 0)
|
||||||
|
{
|
||||||
|
decor |= GDK_DECOR_MAXIMIZE;
|
||||||
|
func |= GDK_FUNC_MAXIMIZE;
|
||||||
|
}
|
||||||
|
if ((win->m_windowStyle & wxRESIZE_BORDER) == 0)
|
||||||
|
func |= GDK_FUNC_RESIZE;
|
||||||
|
|
||||||
|
gdk_window_set_decorations( win->m_widget->window, (GdkWMDecoration)decor);
|
||||||
|
gdk_window_set_functions( win->m_widget->window, (GdkWMFunction)func);
|
||||||
|
|
||||||
|
/* GTK's shrinking/growing policy */
|
||||||
|
if ((win->m_windowStyle & wxRESIZE_BORDER) == 0)
|
||||||
|
gtk_window_set_policy(GTK_WINDOW(win->m_widget), 0, 0, 1);
|
||||||
|
else
|
||||||
|
gtk_window_set_policy(GTK_WINDOW(win->m_widget), 1, 1, 1);
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -196,16 +196,18 @@ gtk_frame_realized_callback( GtkWidget *widget, wxFrame *win )
|
|||||||
|
|
||||||
if ((win->m_windowStyle & wxCAPTION) == 0)
|
if ((win->m_windowStyle & wxCAPTION) == 0)
|
||||||
decor |= GDK_DECOR_TITLE;
|
decor |= GDK_DECOR_TITLE;
|
||||||
/* if ((win->m_windowStyle & wxMINIMIZE) == 0)
|
|
||||||
func |= GDK_FUNC_MINIMIZE;
|
|
||||||
if ((win->m_windowStyle & wxMAXIMIZE) == 0)
|
|
||||||
func |= GDK_FUNC_MAXIMIZE; */
|
|
||||||
if ((win->m_windowStyle & wxSYSTEM_MENU) == 0)
|
if ((win->m_windowStyle & wxSYSTEM_MENU) == 0)
|
||||||
decor |= GDK_DECOR_MENU;
|
decor |= GDK_DECOR_MENU;
|
||||||
if ((win->m_windowStyle & wxMINIMIZE_BOX) == 0)
|
if ((win->m_windowStyle & wxMINIMIZE_BOX) == 0)
|
||||||
|
{
|
||||||
|
func |= GDK_FUNC_MINIMIZE;
|
||||||
decor |= GDK_DECOR_MINIMIZE;
|
decor |= GDK_DECOR_MINIMIZE;
|
||||||
|
}
|
||||||
if ((win->m_windowStyle & wxMAXIMIZE_BOX) == 0)
|
if ((win->m_windowStyle & wxMAXIMIZE_BOX) == 0)
|
||||||
|
{
|
||||||
|
func |= GDK_FUNC_MAXIMIZE;
|
||||||
decor |= GDK_DECOR_MAXIMIZE;
|
decor |= GDK_DECOR_MAXIMIZE;
|
||||||
|
}
|
||||||
if ((win->m_windowStyle & wxRESIZE_BORDER) == 0)
|
if ((win->m_windowStyle & wxRESIZE_BORDER) == 0)
|
||||||
func |= GDK_FUNC_RESIZE;
|
func |= GDK_FUNC_RESIZE;
|
||||||
|
|
||||||
|
@ -3532,6 +3532,7 @@ bool wxWindow::Layout()
|
|||||||
GetSizer()->LayoutPhase1(&noChanges);
|
GetSizer()->LayoutPhase1(&noChanges);
|
||||||
GetSizer()->LayoutPhase2(&noChanges);
|
GetSizer()->LayoutPhase2(&noChanges);
|
||||||
GetSizer()->SetConstraintSizes(); // Recursively set the real window sizes
|
GetSizer()->SetConstraintSizes(); // Recursively set the real window sizes
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -109,35 +109,6 @@ gtk_dialog_realized_callback( GtkWidget *widget, wxDialog *win )
|
|||||||
{
|
{
|
||||||
if (g_isIdle) wxapp_install_idle_handler();
|
if (g_isIdle) wxapp_install_idle_handler();
|
||||||
|
|
||||||
/* all this is for Motif Window Manager "hints" and is supposed to be
|
|
||||||
recognized by other WM as well. not tested. */
|
|
||||||
long decor = (long) GDK_DECOR_ALL;
|
|
||||||
long func = (long) GDK_FUNC_ALL;
|
|
||||||
|
|
||||||
if ((win->m_windowStyle & wxCAPTION) == 0)
|
|
||||||
decor |= GDK_DECOR_TITLE;
|
|
||||||
/* if ((win->m_windowStyle & wxMINIMIZE) == 0)
|
|
||||||
func |= GDK_FUNC_MINIMIZE;
|
|
||||||
if ((win->m_windowStyle & wxMAXIMIZE) == 0)
|
|
||||||
func |= GDK_FUNC_MAXIMIZE; */
|
|
||||||
if ((win->m_windowStyle & wxSYSTEM_MENU) == 0)
|
|
||||||
decor |= GDK_DECOR_MENU;
|
|
||||||
if ((win->m_windowStyle & wxMINIMIZE_BOX) == 0)
|
|
||||||
decor |= GDK_DECOR_MINIMIZE;
|
|
||||||
if ((win->m_windowStyle & wxMAXIMIZE_BOX) == 0)
|
|
||||||
decor |= GDK_DECOR_MAXIMIZE;
|
|
||||||
if ((win->m_windowStyle & wxRESIZE_BORDER) == 0)
|
|
||||||
func |= GDK_FUNC_RESIZE;
|
|
||||||
|
|
||||||
gdk_window_set_decorations( win->m_widget->window, (GdkWMDecoration)decor);
|
|
||||||
gdk_window_set_functions( win->m_widget->window, (GdkWMFunction)func);
|
|
||||||
|
|
||||||
/* GTK's shrinking/growing policy */
|
|
||||||
if ((win->m_windowStyle & wxRESIZE_BORDER) == 0)
|
|
||||||
gtk_window_set_policy(GTK_WINDOW(win->m_widget), 0, 0, 1);
|
|
||||||
else
|
|
||||||
gtk_window_set_policy(GTK_WINDOW(win->m_widget), 1, 1, 1);
|
|
||||||
|
|
||||||
/* reset the icon */
|
/* reset the icon */
|
||||||
if (win->m_icon != wxNullIcon)
|
if (win->m_icon != wxNullIcon)
|
||||||
{
|
{
|
||||||
@ -156,8 +127,41 @@ gtk_dialog_realized_callback( GtkWidget *widget, wxDialog *win )
|
|||||||
static gint
|
static gint
|
||||||
gtk_dialog_map_callback( GtkWidget *widget, wxDialog *win )
|
gtk_dialog_map_callback( GtkWidget *widget, wxDialog *win )
|
||||||
{
|
{
|
||||||
|
/* I haven''t been able to set the position of
|
||||||
|
the dialog before it is shown, so I do it here */
|
||||||
gtk_widget_set_uposition( widget, win->m_x, win->m_y );
|
gtk_widget_set_uposition( widget, win->m_x, win->m_y );
|
||||||
|
|
||||||
|
/* all this is for Motif Window Manager "hints" and is supposed to be
|
||||||
|
recognized by other WM as well. not tested. */
|
||||||
|
long decor = (long) GDK_DECOR_ALL;
|
||||||
|
long func = (long) GDK_FUNC_ALL;
|
||||||
|
|
||||||
|
if ((win->m_windowStyle & wxCAPTION) == 0)
|
||||||
|
decor |= GDK_DECOR_TITLE;
|
||||||
|
if ((win->m_windowStyle & wxSYSTEM_MENU) == 0)
|
||||||
|
decor |= GDK_DECOR_MENU;
|
||||||
|
if ((win->m_windowStyle & wxMINIMIZE_BOX) == 0)
|
||||||
|
{
|
||||||
|
func |= GDK_FUNC_MINIMIZE;
|
||||||
|
decor |= GDK_DECOR_MINIMIZE;
|
||||||
|
}
|
||||||
|
if ((win->m_windowStyle & wxMAXIMIZE_BOX) == 0)
|
||||||
|
{
|
||||||
|
decor |= GDK_DECOR_MAXIMIZE;
|
||||||
|
func |= GDK_FUNC_MAXIMIZE;
|
||||||
|
}
|
||||||
|
if ((win->m_windowStyle & wxRESIZE_BORDER) == 0)
|
||||||
|
func |= GDK_FUNC_RESIZE;
|
||||||
|
|
||||||
|
gdk_window_set_decorations( win->m_widget->window, (GdkWMDecoration)decor);
|
||||||
|
gdk_window_set_functions( win->m_widget->window, (GdkWMFunction)func);
|
||||||
|
|
||||||
|
/* GTK's shrinking/growing policy */
|
||||||
|
if ((win->m_windowStyle & wxRESIZE_BORDER) == 0)
|
||||||
|
gtk_window_set_policy(GTK_WINDOW(win->m_widget), 0, 0, 1);
|
||||||
|
else
|
||||||
|
gtk_window_set_policy(GTK_WINDOW(win->m_widget), 1, 1, 1);
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -196,16 +196,18 @@ gtk_frame_realized_callback( GtkWidget *widget, wxFrame *win )
|
|||||||
|
|
||||||
if ((win->m_windowStyle & wxCAPTION) == 0)
|
if ((win->m_windowStyle & wxCAPTION) == 0)
|
||||||
decor |= GDK_DECOR_TITLE;
|
decor |= GDK_DECOR_TITLE;
|
||||||
/* if ((win->m_windowStyle & wxMINIMIZE) == 0)
|
|
||||||
func |= GDK_FUNC_MINIMIZE;
|
|
||||||
if ((win->m_windowStyle & wxMAXIMIZE) == 0)
|
|
||||||
func |= GDK_FUNC_MAXIMIZE; */
|
|
||||||
if ((win->m_windowStyle & wxSYSTEM_MENU) == 0)
|
if ((win->m_windowStyle & wxSYSTEM_MENU) == 0)
|
||||||
decor |= GDK_DECOR_MENU;
|
decor |= GDK_DECOR_MENU;
|
||||||
if ((win->m_windowStyle & wxMINIMIZE_BOX) == 0)
|
if ((win->m_windowStyle & wxMINIMIZE_BOX) == 0)
|
||||||
|
{
|
||||||
|
func |= GDK_FUNC_MINIMIZE;
|
||||||
decor |= GDK_DECOR_MINIMIZE;
|
decor |= GDK_DECOR_MINIMIZE;
|
||||||
|
}
|
||||||
if ((win->m_windowStyle & wxMAXIMIZE_BOX) == 0)
|
if ((win->m_windowStyle & wxMAXIMIZE_BOX) == 0)
|
||||||
|
{
|
||||||
|
func |= GDK_FUNC_MAXIMIZE;
|
||||||
decor |= GDK_DECOR_MAXIMIZE;
|
decor |= GDK_DECOR_MAXIMIZE;
|
||||||
|
}
|
||||||
if ((win->m_windowStyle & wxRESIZE_BORDER) == 0)
|
if ((win->m_windowStyle & wxRESIZE_BORDER) == 0)
|
||||||
func |= GDK_FUNC_RESIZE;
|
func |= GDK_FUNC_RESIZE;
|
||||||
|
|
||||||
|
@ -3532,6 +3532,7 @@ bool wxWindow::Layout()
|
|||||||
GetSizer()->LayoutPhase1(&noChanges);
|
GetSizer()->LayoutPhase1(&noChanges);
|
||||||
GetSizer()->LayoutPhase2(&noChanges);
|
GetSizer()->LayoutPhase2(&noChanges);
|
||||||
GetSizer()->SetConstraintSizes(); // Recursively set the real window sizes
|
GetSizer()->SetConstraintSizes(); // Recursively set the real window sizes
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
Loading…
Reference in New Issue
Block a user