Small changed to wxExtDialog

Made DnD use long instead of int
  Made DnD sample compile again
  Re-Updated wxTextDialog
  Added GetDefaultSize() to wxButton


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2951 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
1999-07-04 13:50:13 +00:00
parent ba059d80b4
commit 8dbf458911
18 changed files with 368 additions and 372 deletions

View File

@@ -62,6 +62,14 @@ public:
{ m_clientWindow = clientWindow; } { m_clientWindow = clientWindow; }
wxWindow *GetClientWindow() wxWindow *GetClientWindow()
{ return m_clientWindow; } { return m_clientWindow; }
void SetClientWindowMargin( int margin )
{ m_clientWindowMargin = margin; }
int GetClientWindowMargin()
{ return m_clientWindowMargin; }
void SetSpacePerButton( wxSize space )
{ m_spacePerButton = space; }
wxSize GetSpacePerButton()
{ return m_spacePerButton; }
void AddButton( wxButton *button ); void AddButton( wxButton *button );
@@ -85,6 +93,8 @@ protected:
#if wxUSE_STATLINE #if wxUSE_STATLINE
wxStaticLine *m_statLine; wxStaticLine *m_statLine;
#endif #endif
int m_clientWindowMargin;
wxSize m_spacePerButton;
wxSize LayoutButtons(); wxSize LayoutButtons();

View File

@@ -61,6 +61,8 @@ class wxButton: public wxControl
void SetLabel( const wxString &label ); void SetLabel( const wxString &label );
bool Enable( bool enable ); bool Enable( bool enable );
static wxSize GetDefaultSize();
// implementation // implementation
void ApplyWidgetStyle(); void ApplyWidgetStyle();

View File

@@ -57,17 +57,17 @@ public:
/* may be overridden to reject certain formats or drops /* may be overridden to reject certain formats or drops
on certain areas. always returns TRUE by default on certain areas. always returns TRUE by default
indicating that you'd accept the data from the drag. */ indicating that you'd accept the data from the drag. */
virtual bool OnMove( int x, int y ); virtual bool OnMove( long x, long y );
/* has to be overridden to accept a drop event. call /* has to be overridden to accept a drop event. call
IsSupported() to ask which formats are available IsSupported() to ask which formats are available
and then call RequestData() to indicate the format and then call RequestData() to indicate the format
you request. */ you request. */
virtual bool OnDrop( int x, int y ); virtual bool OnDrop( long x, long y );
/* this gets called once the data has actually arrived. get /* this gets called once the data has actually arrived. get
it with GetData(). this has to be overridden. */ it with GetData(). this has to be overridden. */
virtual bool OnData( int x, int y ); virtual bool OnData( long x, long y );
/* called from within OnDrop() to request a certain format /* called from within OnDrop() to request a certain format
from the drop event. */ from the drop event. */
@@ -106,12 +106,12 @@ public:
wxTextDropTarget() {} wxTextDropTarget() {}
virtual bool OnMove( int x, int y ); virtual bool OnMove( long x, long y );
virtual bool OnDrop( int x, int y ); virtual bool OnDrop( long x, long y );
virtual bool OnData( int x, int y ); virtual bool OnData( long x, long y );
/* you have to override OnDropData to get at the text */ /* you have to override OnDropData to get at the text */
virtual bool OnDropText( int x, int y, const wxChar *text ) = 0; virtual bool OnDropText( long x, long y, const wxChar *text ) = 0;
}; };
@@ -129,12 +129,12 @@ public:
/* see SetId() below for explanation */ /* see SetId() below for explanation */
wxPrivateDropTarget( const wxString &id ); wxPrivateDropTarget( const wxString &id );
virtual bool OnMove( int x, int y ); virtual bool OnMove( long x, long y );
virtual bool OnDrop( int x, int y ); virtual bool OnDrop( long x, long y );
virtual bool OnData( int x, int y ); virtual bool OnData( long x, long y );
/* you have to override OnDropData to get at the data */ /* you have to override OnDropData to get at the data */
virtual bool OnDropData( int x, int y, void *data, size_t size ) = 0; virtual bool OnDropData( long x, long y, void *data, size_t size ) = 0;
/* the string ID identifies the format of clipboard or DnD data. a word /* the string ID identifies the format of clipboard or DnD data. a word
processor would e.g. add a wxTextDataObject and a wxPrivateDataObject processor would e.g. add a wxTextDataObject and a wxPrivateDataObject
@@ -158,12 +158,12 @@ public:
wxFileDropTarget() {} wxFileDropTarget() {}
virtual bool OnMove( int x, int y ); virtual bool OnMove( long x, long y );
virtual bool OnDrop( int x, int y ); virtual bool OnDrop( long x, long y );
virtual bool OnData( int x, int y ); virtual bool OnData( long x, long y );
/* you have to override OnDropFiles to get at the file names */ /* you have to override OnDropFiles to get at the file names */
virtual bool OnDropFiles( int x, int y, size_t nFiles, const wxChar * const aszFiles[] ) = 0; virtual bool OnDropFiles( long x, long y, size_t nFiles, const wxChar * const aszFiles[] ) = 0;
}; };

View File

@@ -18,6 +18,7 @@
#include "wx/setup.h" #include "wx/setup.h"
#include "wx/dialog.h" #include "wx/dialog.h"
#include "wx/extdlg.h"
// Handy dialog functions (will be converted into classes at some point) // Handy dialog functions (will be converted into classes at some point)
WXDLLEXPORT_DATA(extern const wxChar*) wxGetTextFromUserPromptStr; WXDLLEXPORT_DATA(extern const wxChar*) wxGetTextFromUserPromptStr;

View File

@@ -61,6 +61,8 @@ class wxButton: public wxControl
void SetLabel( const wxString &label ); void SetLabel( const wxString &label );
bool Enable( bool enable ); bool Enable( bool enable );
static wxSize GetDefaultSize();
// implementation // implementation
void ApplyWidgetStyle(); void ApplyWidgetStyle();

View File

@@ -57,17 +57,17 @@ public:
/* may be overridden to reject certain formats or drops /* may be overridden to reject certain formats or drops
on certain areas. always returns TRUE by default on certain areas. always returns TRUE by default
indicating that you'd accept the data from the drag. */ indicating that you'd accept the data from the drag. */
virtual bool OnMove( int x, int y ); virtual bool OnMove( long x, long y );
/* has to be overridden to accept a drop event. call /* has to be overridden to accept a drop event. call
IsSupported() to ask which formats are available IsSupported() to ask which formats are available
and then call RequestData() to indicate the format and then call RequestData() to indicate the format
you request. */ you request. */
virtual bool OnDrop( int x, int y ); virtual bool OnDrop( long x, long y );
/* this gets called once the data has actually arrived. get /* this gets called once the data has actually arrived. get
it with GetData(). this has to be overridden. */ it with GetData(). this has to be overridden. */
virtual bool OnData( int x, int y ); virtual bool OnData( long x, long y );
/* called from within OnDrop() to request a certain format /* called from within OnDrop() to request a certain format
from the drop event. */ from the drop event. */
@@ -106,12 +106,12 @@ public:
wxTextDropTarget() {} wxTextDropTarget() {}
virtual bool OnMove( int x, int y ); virtual bool OnMove( long x, long y );
virtual bool OnDrop( int x, int y ); virtual bool OnDrop( long x, long y );
virtual bool OnData( int x, int y ); virtual bool OnData( long x, long y );
/* you have to override OnDropData to get at the text */ /* you have to override OnDropData to get at the text */
virtual bool OnDropText( int x, int y, const wxChar *text ) = 0; virtual bool OnDropText( long x, long y, const wxChar *text ) = 0;
}; };
@@ -129,12 +129,12 @@ public:
/* see SetId() below for explanation */ /* see SetId() below for explanation */
wxPrivateDropTarget( const wxString &id ); wxPrivateDropTarget( const wxString &id );
virtual bool OnMove( int x, int y ); virtual bool OnMove( long x, long y );
virtual bool OnDrop( int x, int y ); virtual bool OnDrop( long x, long y );
virtual bool OnData( int x, int y ); virtual bool OnData( long x, long y );
/* you have to override OnDropData to get at the data */ /* you have to override OnDropData to get at the data */
virtual bool OnDropData( int x, int y, void *data, size_t size ) = 0; virtual bool OnDropData( long x, long y, void *data, size_t size ) = 0;
/* the string ID identifies the format of clipboard or DnD data. a word /* the string ID identifies the format of clipboard or DnD data. a word
processor would e.g. add a wxTextDataObject and a wxPrivateDataObject processor would e.g. add a wxTextDataObject and a wxPrivateDataObject
@@ -158,12 +158,12 @@ public:
wxFileDropTarget() {} wxFileDropTarget() {}
virtual bool OnMove( int x, int y ); virtual bool OnMove( long x, long y );
virtual bool OnDrop( int x, int y ); virtual bool OnDrop( long x, long y );
virtual bool OnData( int x, int y ); virtual bool OnData( long x, long y );
/* you have to override OnDropFiles to get at the file names */ /* you have to override OnDropFiles to get at the file names */
virtual bool OnDropFiles( int x, int y, size_t nFiles, const wxChar * const aszFiles[] ) = 0; virtual bool OnDropFiles( long x, long y, size_t nFiles, const wxChar * const aszFiles[] ) = 0;
}; };

View File

@@ -18,6 +18,7 @@
#include "wx/setup.h" #include "wx/setup.h"
#include "wx/dialog.h" #include "wx/dialog.h"
#include "wx/extdlg.h"
// Handy dialog functions (will be converted into classes at some point) // Handy dialog functions (will be converted into classes at some point)
WXDLLEXPORT_DATA(extern const wxChar*) wxGetTextFromUserPromptStr; WXDLLEXPORT_DATA(extern const wxChar*) wxGetTextFromUserPromptStr;

View File

@@ -117,8 +117,8 @@ void MyFrame::ExtDialog(wxCommandEvent& WXUNUSED(event) )
// other platforms. Also, it will not be resizable // other platforms. Also, it will not be resizable
// anywhere. // anywhere.
wxExtDialog dialog( this, -1, "Test 1 for wxExtDialog", wxExtDialog dialog( this, -1, "Test 1 for wxExtDialog", wxOK|wxFORWARD|wxBACKWARD );
wxOK|wxFORWARD|wxBACKWARD ); dialog.AddButton( new wxButton( &dialog, -1, "Custom") );
dialog.SetClientWindow( new wxTextCtrl( &dialog, -1, "Test", wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE ) ); dialog.SetClientWindow( new wxTextCtrl( &dialog, -1, "Test", wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE ) );
@@ -133,7 +133,8 @@ void MyFrame::ExtDialog(wxCommandEvent& WXUNUSED(event) )
// all platforms. // all platforms.
wxExtDialog dialog2( this, -1, "Test 2 for wxExtDialog", wxExtDialog dialog2( this, -1, "Test 2 for wxExtDialog",
wxOK|wxFORWARD|wxBACKWARD|wxCANCEL, wxDefaultPosition, wxSize(400,170), wxOK|wxFORWARD|wxBACKWARD|wxCANCEL,
wxDefaultPosition, wxSize(400,170),
wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER | wxED_BUTTONS_RIGHT | wxED_STATIC_LINE | wxED_CLIENT_MARGIN ); 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 ) ); dialog2.SetClientWindow( new wxTextCtrl( &dialog2, -1, "Test", wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE ) );

View File

@@ -39,12 +39,7 @@
// file names) we drop on them // file names) we drop on them
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// FIXME this is ugly and should be fixed in the library itself typedef long wxDropPointCoord;
#ifdef __WXMSW__
typedef long wxDropPointCoord;
#else // wxGTK
typedef int wxDropPointCoord;
#endif // MSW/GTK
class DnDText : public wxTextDropTarget class DnDText : public wxTextDropTarget
{ {
@@ -206,80 +201,14 @@ DnDFrame::DnDFrame(wxFrame *frame, char *title, int x, int y, int w, int h)
m_ctrlText = new wxListBox(this, -1, pos, size, 1, &strText, wxLB_HSCROLL); m_ctrlText = new wxListBox(this, -1, pos, size, 1, &strText, wxLB_HSCROLL);
m_ctrlLog = new wxTextCtrl(this, -1, "", pos, size, m_ctrlLog = new wxTextCtrl(this, -1, "", pos, size,
wxTE_MULTILINE | wxTE_READONLY |
wxSUNKEN_BORDER );
// redirect log messages to the text window (don't forget to delete it!)
m_pLog = new wxLogTextCtrl(m_ctrlLog);
m_pLogPrev = wxLog::SetActiveTarget(m_pLog);
// associate drop targets with 2 text controls
m_ctrlFile->SetDropTarget(new DnDFile(m_ctrlFile));
m_ctrlText->SetDropTarget( new DnDText(m_ctrlText) );
wxLayoutConstraints *c;
// Top-left listbox
c = new wxLayoutConstraints;
c->left.SameAs(this, wxLeft);
c->top.SameAs(this, wxTop);
c->right.PercentOf(this, wxRight, 50);
c->height.PercentOf(this, wxHeight, 40);
m_ctrlFile->SetConstraints(c);
// Top-right listbox
c = new wxLayoutConstraints;
c->left.SameAs (m_ctrlFile, wxRight);
c->top.SameAs (this, wxTop);
c->right.SameAs (this, wxRight);
c->height.PercentOf(this, wxHeight, 40);
m_ctrlText->SetConstraints(c);
// Lower text control
c = new wxLayoutConstraints;
c->left.SameAs (this, wxLeft);
c->right.SameAs (this, wxRight);
c->height.PercentOf(this, wxHeight, 40);
c->top.SameAs(m_ctrlText, wxBottom);
m_ctrlLog->SetConstraints(c);
// construct menu
wxMenu *file_menu = new wxMenu;
file_menu->Append(Menu_Drag, "&Test drag...");
file_menu->AppendSeparator();
file_menu->Append(Menu_Quit, "E&xit");
wxMenu *log_menu = new wxMenu;
log_menu->Append(Menu_Clear, "Clear");
wxMenu *help_menu = new wxMenu;
help_menu->Append(Menu_Help, "&Help...");
help_menu->AppendSeparator();
help_menu->Append(Menu_About, "&About");
wxMenuBar *menu_bar = new wxMenuBar;
menu_bar->Append(file_menu, "&File");
menu_bar->Append(log_menu, "&Log");
menu_bar->Append(help_menu, "&Help");
SetMenuBar(menu_bar);
// make a panel with 3 subwindows
wxPoint pos(0, 0);
wxSize size(400, 200);
wxString strFile("Drop files here!"), strText("Drop text on me");
m_ctrlFile = new wxListBox(this, -1, pos, size, 1, &strFile, wxLB_HSCROLL);
m_ctrlText = new wxListBox(this, -1, pos, size, 1, &strText, wxLB_HSCROLL);
m_ctrlLog = new wxTextCtrl(this, -1, "", pos, size,
wxTE_MULTILINE | wxTE_READONLY | wxTE_MULTILINE | wxTE_READONLY |
wxSUNKEN_BORDER ); wxSUNKEN_BORDER );
// redirect log messages to the text window (don't forget to delete it!) #if wxUSE_STD_IOSTREAM
// redirect log messages to the text window (don't forget to delete it!)
m_pLog = new wxLogTextCtrl(m_ctrlLog); m_pLog = new wxLogTextCtrl(m_ctrlLog);
m_pLogPrev = wxLog::SetActiveTarget(m_pLog); m_pLogPrev = wxLog::SetActiveTarget(m_pLog);
#endif
// associate drop targets with 2 text controls // associate drop targets with 2 text controls
m_ctrlFile->SetDropTarget(new DnDFile(m_ctrlFile)); m_ctrlFile->SetDropTarget(new DnDFile(m_ctrlFile));
@@ -427,10 +356,12 @@ void DnDFrame::OnRightDown(wxMouseEvent &event )
DnDFrame::~DnDFrame() DnDFrame::~DnDFrame()
{ {
#if wxUSE_STD_IOSTREAM
if ( m_pLog != NULL ) { if ( m_pLog != NULL ) {
if ( wxLog::SetActiveTarget(m_pLogPrev) == m_pLog ) if ( wxLog::SetActiveTarget(m_pLogPrev) == m_pLog )
delete m_pLog; delete m_pLog;
} }
#endif
} }
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------

View File

@@ -37,8 +37,6 @@
// wxExtDialog // wxExtDialog
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
#define STATIC_LINE_MARGIN 15
#define CLIENT_AREA_MARGIN 10
#define BUTTON_AREA_MARGIN 10 #define BUTTON_AREA_MARGIN 10
#if !USE_SHARED_LIBRARY #if !USE_SHARED_LIBRARY
@@ -70,6 +68,28 @@ bool wxExtDialog::Create( wxWindow *parent, wxWindowID id,
m_extraStyle = extraStyle; m_extraStyle = extraStyle;
m_clientWindowMargin = 10;
if (m_windowStyle & wxED_BUTTONS_RIGHT)
{
m_spacePerButton.x = wxButton::GetDefaultSize().x + 18;
m_spacePerButton.y = wxButton::GetDefaultSize().y + 8;
}
else
{
m_spacePerButton.x = wxButton::GetDefaultSize().x + 8;
m_spacePerButton.y = wxButton::GetDefaultSize().y + 18;
}
#if defined(__WXGTK__) || defined(__WXMOTIF__)
// Under Motif and GTK, the default button has a big frame around
// it and to avoid overlapping buttons we make the margin bigger.
// We could give other platforms a bigger margin as well, but this
// wouldn't be standard L&F.
m_spacePerButton.x += 10;
m_spacePerButton.y += 10;
#endif
wxButton *ok = (wxButton *) NULL; wxButton *ok = (wxButton *) NULL;
wxButton *cancel = (wxButton *) NULL; wxButton *cancel = (wxButton *) NULL;
wxButton *yes = (wxButton *) NULL; wxButton *yes = (wxButton *) NULL;
@@ -112,7 +132,10 @@ bool wxExtDialog::Create( wxWindow *parent, wxWindowID id,
AddButton( new wxButton( this, wxID_SETUP, _("Setup") ) ); AddButton( new wxButton( this, wxID_SETUP, _("Setup") ) );
if (m_extraStyle & wxMORE) if (m_extraStyle & wxMORE)
AddButton( new wxButton( this, wxID_MORE, _("More..") ) ); AddButton( new wxButton( this, wxID_MORE, _("More...") ) );
if (m_extraStyle & wxHELP)
AddButton( new wxButton( this, wxID_HELP, _("Help") ) );
if (m_extraStyle & wxCANCEL) if (m_extraStyle & wxCANCEL)
{ {
@@ -211,10 +234,10 @@ void wxExtDialog::OnSize( wxSizeEvent &WXUNUSED(event) )
if (m_clientWindow) if (m_clientWindow)
{ {
if (m_windowStyle & wxED_CLIENT_MARGIN) if (m_windowStyle & wxED_CLIENT_MARGIN)
m_clientWindow->SetSize( CLIENT_AREA_MARGIN, m_clientWindow->SetSize( m_clientWindowMargin,
CLIENT_AREA_MARGIN, m_clientWindowMargin,
client_size.x - 2*CLIENT_AREA_MARGIN, client_size.x - 2*m_clientWindowMargin,
client_size.y - 2*CLIENT_AREA_MARGIN ); client_size.y - 2*m_clientWindowMargin );
else else
m_clientWindow->SetSize( 0, 0, client_size.x, client_size.y ); m_clientWindow->SetSize( 0, 0, client_size.x, client_size.y );
@@ -249,29 +272,22 @@ wxSize wxExtDialog::GetButtonAreaSize()
wxSize ret(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) if (m_windowStyle & wxED_BUTTONS_RIGHT)
{ {
ret.x = button_size_and_margin_x; ret.x = m_spacePerButton.x;
ret.y = m_buttons.GetCount()*button_size_and_margin_y + 2*BUTTON_AREA_MARGIN; ret.y = m_buttons.GetCount()*m_spacePerButton.y + 2*BUTTON_AREA_MARGIN;
#if wxUSE_STATLINE #if wxUSE_STATLINE
if (m_statLine) if (m_statLine)
ret.x += STATIC_LINE_MARGIN; ret.x += wxStaticLine::GetDefaultSize();
#endif #endif
} }
else else
{ {
ret.x = m_buttons.GetCount()*button_size_and_margin_x + 2*BUTTON_AREA_MARGIN; ret.x = m_buttons.GetCount()*m_spacePerButton.x + 2*BUTTON_AREA_MARGIN;
ret.y = button_size_and_margin_y; ret.y = m_spacePerButton.y;
#if wxUSE_STATLINE #if wxUSE_STATLINE
if (m_statLine) if (m_statLine)
ret.y += STATIC_LINE_MARGIN; ret.y += wxStaticLine::GetDefaultSize();
#endif #endif
} }
@@ -288,6 +304,11 @@ wxSize wxExtDialog::LayoutButtons()
if (m_windowStyle & wxED_BUTTONS_RIGHT) if (m_windowStyle & wxED_BUTTONS_RIGHT)
{ {
area_used.y = client_area.y; area_used.y = client_area.y;
wxSize area_used_by_buttons( area_used );
#if wxUSE_STATLINE
if (m_statLine)
area_used_by_buttons.x -= wxStaticLine::GetDefaultSize();
#endif
int space_for_each_button = (client_area.y-2*BUTTON_AREA_MARGIN) / m_buttons.GetCount(); int space_for_each_button = (client_area.y-2*BUTTON_AREA_MARGIN) / m_buttons.GetCount();
int n = 0; int n = 0;
@@ -297,12 +318,12 @@ wxSize wxExtDialog::LayoutButtons()
wxButton *button = (wxButton*)node->Data(); wxButton *button = (wxButton*)node->Data();
wxSize button_size( button->GetSize() ); wxSize button_size( button->GetSize() );
if (button_size.x < 80) button_size.x = 80; if (button_size.x < wxButton::GetDefaultSize().x) button_size.x = wxButton::GetDefaultSize().x;
int center_of_button_y = n*space_for_each_button + space_for_each_button/2; 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 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 center_of_button_x = client_area.x - area_used_by_buttons.x/2;
int button_x = center_of_button_x - button_size.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 ); button->SetSize( button_x, button_y, button_size.x, button_size.y );
@@ -313,7 +334,7 @@ wxSize wxExtDialog::LayoutButtons()
#if wxUSE_STATLINE #if wxUSE_STATLINE
if (m_statLine) if (m_statLine)
m_statLine->SetSize( client_area.x - area_used.x, m_statLine->SetSize( client_area.x - area_used_by_buttons.x - wxStaticLine::GetDefaultSize(),
0, 0,
wxStaticLine::GetDefaultSize(), wxStaticLine::GetDefaultSize(),
client_area.y ); client_area.y );
@@ -322,6 +343,11 @@ wxSize wxExtDialog::LayoutButtons()
else else
{ {
area_used.x = client_area.x; area_used.x = client_area.x;
wxSize area_used_by_buttons( area_used );
#if wxUSE_STATLINE
if (m_statLine)
area_used_by_buttons.y -= wxStaticLine::GetDefaultSize();
#endif
int space_for_each_button = (client_area.x-2*BUTTON_AREA_MARGIN) / m_buttons.GetCount(); int space_for_each_button = (client_area.x-2*BUTTON_AREA_MARGIN) / m_buttons.GetCount();
int n = 0; int n = 0;
@@ -331,12 +357,12 @@ wxSize wxExtDialog::LayoutButtons()
wxButton *button = (wxButton*)node->Data(); wxButton *button = (wxButton*)node->Data();
wxSize button_size( button->GetSize() ); wxSize button_size( button->GetSize() );
if (button_size.x < 80) button_size.x = 80; if (button_size.x < wxButton::GetDefaultSize().x) button_size.x = wxButton::GetDefaultSize().x;
int center_of_button_x = n*space_for_each_button + space_for_each_button/2; 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 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 center_of_button_y = client_area.y - area_used_by_buttons.y/2;
int button_y = center_of_button_y - button_size.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 ); button->SetSize( button_x, button_y, button_size.x, button_size.y );
@@ -348,7 +374,7 @@ wxSize wxExtDialog::LayoutButtons()
#if wxUSE_STATLINE #if wxUSE_STATLINE
if (m_statLine) if (m_statLine)
m_statLine->SetSize( 0, m_statLine->SetSize( 0,
client_area.y - area_used.y, client_area.y - area_used_by_buttons.y - wxStaticLine::GetDefaultSize(),
client_area.x, client_area.x,
wxStaticLine::GetDefaultSize() ); wxStaticLine::GetDefaultSize() );
#endif #endif

View File

@@ -225,6 +225,7 @@ void wxapp_install_idle_handler()
g_isIdle = FALSE; g_isIdle = FALSE;
} }
/*
#if wxUSE_THREADS #if wxUSE_THREADS
static gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) ) static gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) )
{ {
@@ -232,23 +233,23 @@ static gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) )
wxTheApp->m_wakeUpTimerTag = 0; wxTheApp->m_wakeUpTimerTag = 0;
#if (GTK_MINOR_VERSION > 0) #if (GTK_MINOR_VERSION > 0)
/* when getting called from GDK's time-out handler // when getting called from GDK's time-out handler
we are no longer within GDK's grab on the GUI // we are no longer within GDK's grab on the GUI
thread so we must lock it here ourselves */ // thread so we must lock it here ourselves
GDK_THREADS_ENTER (); GDK_THREADS_ENTER ();
#endif #endif
/* unblock other threads wishing to do some GUI things */ // unblock other threads wishing to do some GUI things
wxMutexGuiLeave(); wxMutexGuiLeave();
/* wake up other threads */ // wake up other threads
wxUsleep( 1 ); wxUsleep( 1 );
/* block other thread again */ // block other thread again
wxMutexGuiEnter(); wxMutexGuiEnter();
#if (GTK_MINOR_VERSION > 0) #if (GTK_MINOR_VERSION > 0)
/* release lock again */ // release lock again
GDK_THREADS_LEAVE (); GDK_THREADS_LEAVE ();
#endif #endif
@@ -257,6 +258,7 @@ static gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) )
return TRUE; return TRUE;
} }
#endif #endif
*/
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// wxApp // wxApp
@@ -277,9 +279,11 @@ wxApp::wxApp()
m_idleTag = gtk_idle_add( wxapp_idle_callback, (gpointer) NULL ); m_idleTag = gtk_idle_add( wxapp_idle_callback, (gpointer) NULL );
/*
#if wxUSE_THREADS #if wxUSE_THREADS
m_wakeUpTimerTag = gtk_timeout_add( 20, wxapp_wakeup_timerout_callback, (gpointer) NULL ); m_wakeUpTimerTag = gtk_timeout_add( 20, wxapp_wakeup_timerout_callback, (gpointer) NULL );
#endif #endif
*/
m_colorCube = (unsigned char*) NULL; m_colorCube = (unsigned char*) NULL;
} }
@@ -288,9 +292,11 @@ wxApp::~wxApp()
{ {
if (m_idleTag) gtk_idle_remove( m_idleTag ); if (m_idleTag) gtk_idle_remove( m_idleTag );
/*
#if wxUSE_THREADS #if wxUSE_THREADS
if (m_wakeUpTimerTag) gtk_timeout_remove( m_wakeUpTimerTag ); if (m_wakeUpTimerTag) gtk_timeout_remove( m_wakeUpTimerTag );
#endif #endif
*/
if (m_colorCube) free(m_colorCube); if (m_colorCube) free(m_colorCube);
} }

View File

@@ -120,6 +120,11 @@ void wxButton::SetDefault(void)
SetSize( m_x, m_y, m_width, m_height ); SetSize( m_x, m_y, m_width, m_height );
} }
static wxSize wxButton::GetDefaultSize()
{
return wxSize(80,26);
}
void wxButton::SetLabel( const wxString &label ) void wxButton::SetLabel( const wxString &label )
{ {
wxCHECK_RET( m_widget != NULL, _T("invalid button") ); wxCHECK_RET( m_widget != NULL, _T("invalid button") );

View File

@@ -337,17 +337,17 @@ void wxDropTarget::OnLeave()
{ {
} }
bool wxDropTarget::OnMove( int WXUNUSED(x), int WXUNUSED(y) ) bool wxDropTarget::OnMove( long WXUNUSED(x), long WXUNUSED(y) )
{ {
return TRUE; return TRUE;
} }
bool wxDropTarget::OnDrop( int WXUNUSED(x), int WXUNUSED(y) ) bool wxDropTarget::OnDrop( long WXUNUSED(x), long WXUNUSED(y) )
{ {
return FALSE; return FALSE;
} }
bool wxDropTarget::OnData( int WXUNUSED(x), int WXUNUSED(y) ) bool wxDropTarget::OnData( long WXUNUSED(x), long WXUNUSED(y) )
{ {
return FALSE; return FALSE;
} }
@@ -472,12 +472,12 @@ void wxDropTarget::RegisterWidget( GtkWidget *widget )
// wxTextDropTarget // wxTextDropTarget
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
bool wxTextDropTarget::OnMove( int WXUNUSED(x), int WXUNUSED(y) ) bool wxTextDropTarget::OnMove( long WXUNUSED(x), long WXUNUSED(y) )
{ {
return IsSupported( wxDF_TEXT ); return IsSupported( wxDF_TEXT );
} }
bool wxTextDropTarget::OnDrop( int WXUNUSED(x), int WXUNUSED(y) ) bool wxTextDropTarget::OnDrop( long WXUNUSED(x), long WXUNUSED(y) )
{ {
if (IsSupported( wxDF_TEXT )) if (IsSupported( wxDF_TEXT ))
{ {
@@ -488,7 +488,7 @@ bool wxTextDropTarget::OnDrop( int WXUNUSED(x), int WXUNUSED(y) )
return FALSE; return FALSE;
} }
bool wxTextDropTarget::OnData( int x, int y ) bool wxTextDropTarget::OnData( long x, long y )
{ {
wxTextDataObject data; wxTextDataObject data;
if (!GetData( &data )) return FALSE; if (!GetData( &data )) return FALSE;
@@ -512,12 +512,12 @@ wxPrivateDropTarget::wxPrivateDropTarget( const wxString &id )
m_id = id; m_id = id;
} }
bool wxPrivateDropTarget::OnMove( int WXUNUSED(x), int WXUNUSED(y) ) bool wxPrivateDropTarget::OnMove( long WXUNUSED(x), long WXUNUSED(y) )
{ {
return IsSupported( m_id ); return IsSupported( m_id );
} }
bool wxPrivateDropTarget::OnDrop( int WXUNUSED(x), int WXUNUSED(y) ) bool wxPrivateDropTarget::OnDrop( long WXUNUSED(x), long WXUNUSED(y) )
{ {
if (!IsSupported( m_id )) if (!IsSupported( m_id ))
{ {
@@ -528,7 +528,7 @@ bool wxPrivateDropTarget::OnDrop( int WXUNUSED(x), int WXUNUSED(y) )
return FALSE; return FALSE;
} }
bool wxPrivateDropTarget::OnData( int x, int y ) bool wxPrivateDropTarget::OnData( long x, long y )
{ {
if (!IsSupported( m_id )) return FALSE; if (!IsSupported( m_id )) return FALSE;
@@ -544,12 +544,12 @@ bool wxPrivateDropTarget::OnData( int x, int y )
// A drop target which accepts files (dragged from File Manager or Explorer) // A drop target which accepts files (dragged from File Manager or Explorer)
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
bool wxFileDropTarget::OnMove( int WXUNUSED(x), int WXUNUSED(y) ) bool wxFileDropTarget::OnMove( long WXUNUSED(x), long WXUNUSED(y) )
{ {
return IsSupported( wxDF_FILENAME ); return IsSupported( wxDF_FILENAME );
} }
bool wxFileDropTarget::OnDrop( int x, int y ) bool wxFileDropTarget::OnDrop( long x, long y )
{ {
if (IsSupported( wxDF_FILENAME )) if (IsSupported( wxDF_FILENAME ))
{ {
@@ -560,7 +560,7 @@ bool wxFileDropTarget::OnDrop( int x, int y )
return FALSE; return FALSE;
} }
bool wxFileDropTarget::OnData( int x, int y ) bool wxFileDropTarget::OnData( long x, long y )
{ {
wxFileDataObject data; wxFileDataObject data;
if (!GetData( &data )) return FALSE; if (!GetData( &data )) return FALSE;

View File

@@ -21,19 +21,58 @@
#endif #endif
#ifndef WX_PRECOMP #ifndef WX_PRECOMP
#include <stdio.h> #include <stdio.h>
#include "wx/utils.h" #include "wx/utils.h"
#include "wx/dialog.h" #include "wx/dialog.h"
#include "wx/listbox.h" #include "wx/button.h"
#include "wx/button.h" #include "wx/stattext.h"
#include "wx/stattext.h" #include "wx/textctrl.h"
#include "wx/textctrl.h" #include "wx/intl.h"
#include "wx/layout.h" #endif
#include "wx/intl.h"
#if wxUSE_STATLINE
#include "wx/statline.h"
#endif #endif
#include "wx/gtk/textdlg.h" #include "wx/gtk/textdlg.h"
/* Split message, using constraints to position controls */
static wxSize wxSplitMessage2( const wxString &message, wxWindow *parent )
{
int y = 10;
int w = 50;
wxString line( _T("") );
for (size_t pos = 0; pos < message.Len(); pos++)
{
if (message[pos] == _T('\n'))
{
if (!line.IsEmpty())
{
wxStaticText *s1 = new wxStaticText( parent, -1, line, wxPoint(15,y) );
wxSize size1( s1->GetSize() );
if (size1.x > w) w = size1.x;
line = _T("");
}
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);
}
// wxTextEntryDialog // wxTextEntryDialog
#if !USE_SHARED_LIBRARY #if !USE_SHARED_LIBRARY
@@ -44,109 +83,70 @@ END_EVENT_TABLE()
IMPLEMENT_CLASS(wxTextEntryDialog, wxDialog) IMPLEMENT_CLASS(wxTextEntryDialog, wxDialog)
#endif #endif
// Split message, using constraints to position controls
static void wxSplitMessage2(const wxChar *message, wxList *messageList, wxWindow *parent, wxRowColSizer *sizer)
{
wxChar *copyMessage = copystring(message);
size_t i = 0;
size_t len = wxStrlen(copyMessage);
wxChar *currentMessage = copyMessage;
// wxWindow *lastWindow = parent;
while (i < len) {
while ((i < len) && (copyMessage[i] != _T('\n'))) i++;
if (i < len) copyMessage[i] = 0;
wxStaticText *mess = new wxStaticText(parent, -1, currentMessage);
/*
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;
}
wxTextEntryDialog::wxTextEntryDialog(wxWindow *parent, const wxString& message, const wxString& caption, wxTextEntryDialog::wxTextEntryDialog(wxWindow *parent, const wxString& message, const wxString& caption,
const wxString& value, long style, const wxPoint& pos): const wxString& value, long style, const wxPoint& pos):
wxDialog(parent, -1, caption, pos, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxDIALOG_MODAL|wxTAB_TRAVERSAL) wxDialog(parent, -1, caption, pos, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxDIALOG_MODAL|wxTAB_TRAVERSAL)
{ {
m_dialogStyle = style; m_dialogStyle = style;
m_value = value; m_value = value;
wxBeginBusyCursor(); wxBeginBusyCursor();
wxSizer *topSizer = new wxSizer(this, wxSizerShrink); wxSize message_size( wxSplitMessage2( message, this ) );
topSizer->SetBorder(10, 10);
wxRowColSizer *messageSizer = new wxRowColSizer(topSizer, wxSIZER_COLS, 100); wxButton *ok = (wxButton *) NULL;
messageSizer->SetName("messageSizer"); wxButton *cancel = (wxButton *) NULL;
wxList m_buttons;
// bool centre = ((style & wxCENTRE) == wxCENTRE); int y = message_size.y + 15;
wxList messageList; wxTextCtrl *textCtrl = new wxTextCtrl(this, wxID_TEXT, value, wxPoint(-1, y), wxSize(350, -1));
wxSplitMessage2(message, &messageList, this, messageSizer);
// Insert a spacer y += 65;
wxSpacingSizer *spacingSizer = new wxSpacingSizer(topSizer, wxBelow, messageSizer, 10);
wxTextCtrl *textCtrl = new wxTextCtrl(this, wxID_TEXT, value, wxPoint(-1, -1), wxSize(350, -1)); if (style & wxOK)
{
ok = new wxButton( this, wxID_OK, _("OK"), wxPoint(-1,y), wxSize(80,-1) );
m_buttons.Append( ok );
}
wxRowColSizer *textSizer = new wxRowColSizer(topSizer, wxSIZER_ROWS); if (style & wxCANCEL)
textSizer->AddSizerChild(textCtrl); {
textSizer->SetName("textSizer"); cancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxPoint(-1,y), wxSize(80,-1) );
m_buttons.Append( cancel );
}
// Create constraints for the text sizer if (ok)
wxLayoutConstraints *textC = new wxLayoutConstraints; {
textC->left.SameAs (messageSizer, wxLeft); ok->SetDefault();
textC->top.Below (spacingSizer); ok->SetFocus();
textSizer->SetConstraints(textC); }
// Insert another spacer int w = wxMax( 350, m_buttons.GetCount() * 100 );
wxSpacingSizer *spacingSizer2 = new wxSpacingSizer(topSizer, wxBelow, textSizer, 10); w = wxMax( w, message_size.x );
spacingSizer->SetName("spacingSizer2"); int space = w / (m_buttons.GetCount()*2);
// Insert a sizer for the buttons textCtrl->SetSize( 20, -1, w-10, -1 );
wxRowColSizer *buttonSizer = new wxRowColSizer(topSizer, wxSIZER_ROWS);
buttonSizer->SetName("buttonSizer");
// Specify constraints for the button sizer int m = 0;
wxLayoutConstraints *c = new wxLayoutConstraints; wxNode *node = m_buttons.First();
c->width.AsIs (); while (node)
c->height.AsIs (); {
c->top.Below (spacingSizer2); wxWindow *win = (wxWindow*)node->Data();
c->centreX.SameAs (textSizer, wxCentreX); int x = (m*2+1)*space - 40 + 15;
buttonSizer->SetConstraints(c); win->Move( x, -1 );
buttonSizer->SetSpacing(12,0); node = node->Next();
m++;
}
wxButton *ok = NULL; #if wxUSE_STATLINE
wxButton *cancel = NULL; (void) new wxStaticLine( this, -1, wxPoint(0,y-20), wxSize(w+30, 5) );
#endif
if (style & wxOK) { SetSize( w+30, y+40 );
ok = new wxButton(this, wxID_OK, _("OK"), wxDefaultPosition, wxSize(75,-1));
buttonSizer->AddSizerChild(ok);
}
if (style & wxCANCEL) { Centre( wxBOTH );
cancel = new wxButton(this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize(75,-1));
buttonSizer->AddSizerChild(cancel);
}
if (ok)
ok->SetDefault();
Layout();
Centre(wxBOTH);
wxEndBusyCursor(); wxEndBusyCursor();
} }

View File

@@ -225,6 +225,7 @@ void wxapp_install_idle_handler()
g_isIdle = FALSE; g_isIdle = FALSE;
} }
/*
#if wxUSE_THREADS #if wxUSE_THREADS
static gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) ) static gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) )
{ {
@@ -232,23 +233,23 @@ static gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) )
wxTheApp->m_wakeUpTimerTag = 0; wxTheApp->m_wakeUpTimerTag = 0;
#if (GTK_MINOR_VERSION > 0) #if (GTK_MINOR_VERSION > 0)
/* when getting called from GDK's time-out handler // when getting called from GDK's time-out handler
we are no longer within GDK's grab on the GUI // we are no longer within GDK's grab on the GUI
thread so we must lock it here ourselves */ // thread so we must lock it here ourselves
GDK_THREADS_ENTER (); GDK_THREADS_ENTER ();
#endif #endif
/* unblock other threads wishing to do some GUI things */ // unblock other threads wishing to do some GUI things
wxMutexGuiLeave(); wxMutexGuiLeave();
/* wake up other threads */ // wake up other threads
wxUsleep( 1 ); wxUsleep( 1 );
/* block other thread again */ // block other thread again
wxMutexGuiEnter(); wxMutexGuiEnter();
#if (GTK_MINOR_VERSION > 0) #if (GTK_MINOR_VERSION > 0)
/* release lock again */ // release lock again
GDK_THREADS_LEAVE (); GDK_THREADS_LEAVE ();
#endif #endif
@@ -257,6 +258,7 @@ static gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) )
return TRUE; return TRUE;
} }
#endif #endif
*/
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// wxApp // wxApp
@@ -277,9 +279,11 @@ wxApp::wxApp()
m_idleTag = gtk_idle_add( wxapp_idle_callback, (gpointer) NULL ); m_idleTag = gtk_idle_add( wxapp_idle_callback, (gpointer) NULL );
/*
#if wxUSE_THREADS #if wxUSE_THREADS
m_wakeUpTimerTag = gtk_timeout_add( 20, wxapp_wakeup_timerout_callback, (gpointer) NULL ); m_wakeUpTimerTag = gtk_timeout_add( 20, wxapp_wakeup_timerout_callback, (gpointer) NULL );
#endif #endif
*/
m_colorCube = (unsigned char*) NULL; m_colorCube = (unsigned char*) NULL;
} }
@@ -288,9 +292,11 @@ wxApp::~wxApp()
{ {
if (m_idleTag) gtk_idle_remove( m_idleTag ); if (m_idleTag) gtk_idle_remove( m_idleTag );
/*
#if wxUSE_THREADS #if wxUSE_THREADS
if (m_wakeUpTimerTag) gtk_timeout_remove( m_wakeUpTimerTag ); if (m_wakeUpTimerTag) gtk_timeout_remove( m_wakeUpTimerTag );
#endif #endif
*/
if (m_colorCube) free(m_colorCube); if (m_colorCube) free(m_colorCube);
} }

View File

@@ -120,6 +120,11 @@ void wxButton::SetDefault(void)
SetSize( m_x, m_y, m_width, m_height ); SetSize( m_x, m_y, m_width, m_height );
} }
static wxSize wxButton::GetDefaultSize()
{
return wxSize(80,26);
}
void wxButton::SetLabel( const wxString &label ) void wxButton::SetLabel( const wxString &label )
{ {
wxCHECK_RET( m_widget != NULL, _T("invalid button") ); wxCHECK_RET( m_widget != NULL, _T("invalid button") );

View File

@@ -337,17 +337,17 @@ void wxDropTarget::OnLeave()
{ {
} }
bool wxDropTarget::OnMove( int WXUNUSED(x), int WXUNUSED(y) ) bool wxDropTarget::OnMove( long WXUNUSED(x), long WXUNUSED(y) )
{ {
return TRUE; return TRUE;
} }
bool wxDropTarget::OnDrop( int WXUNUSED(x), int WXUNUSED(y) ) bool wxDropTarget::OnDrop( long WXUNUSED(x), long WXUNUSED(y) )
{ {
return FALSE; return FALSE;
} }
bool wxDropTarget::OnData( int WXUNUSED(x), int WXUNUSED(y) ) bool wxDropTarget::OnData( long WXUNUSED(x), long WXUNUSED(y) )
{ {
return FALSE; return FALSE;
} }
@@ -472,12 +472,12 @@ void wxDropTarget::RegisterWidget( GtkWidget *widget )
// wxTextDropTarget // wxTextDropTarget
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
bool wxTextDropTarget::OnMove( int WXUNUSED(x), int WXUNUSED(y) ) bool wxTextDropTarget::OnMove( long WXUNUSED(x), long WXUNUSED(y) )
{ {
return IsSupported( wxDF_TEXT ); return IsSupported( wxDF_TEXT );
} }
bool wxTextDropTarget::OnDrop( int WXUNUSED(x), int WXUNUSED(y) ) bool wxTextDropTarget::OnDrop( long WXUNUSED(x), long WXUNUSED(y) )
{ {
if (IsSupported( wxDF_TEXT )) if (IsSupported( wxDF_TEXT ))
{ {
@@ -488,7 +488,7 @@ bool wxTextDropTarget::OnDrop( int WXUNUSED(x), int WXUNUSED(y) )
return FALSE; return FALSE;
} }
bool wxTextDropTarget::OnData( int x, int y ) bool wxTextDropTarget::OnData( long x, long y )
{ {
wxTextDataObject data; wxTextDataObject data;
if (!GetData( &data )) return FALSE; if (!GetData( &data )) return FALSE;
@@ -512,12 +512,12 @@ wxPrivateDropTarget::wxPrivateDropTarget( const wxString &id )
m_id = id; m_id = id;
} }
bool wxPrivateDropTarget::OnMove( int WXUNUSED(x), int WXUNUSED(y) ) bool wxPrivateDropTarget::OnMove( long WXUNUSED(x), long WXUNUSED(y) )
{ {
return IsSupported( m_id ); return IsSupported( m_id );
} }
bool wxPrivateDropTarget::OnDrop( int WXUNUSED(x), int WXUNUSED(y) ) bool wxPrivateDropTarget::OnDrop( long WXUNUSED(x), long WXUNUSED(y) )
{ {
if (!IsSupported( m_id )) if (!IsSupported( m_id ))
{ {
@@ -528,7 +528,7 @@ bool wxPrivateDropTarget::OnDrop( int WXUNUSED(x), int WXUNUSED(y) )
return FALSE; return FALSE;
} }
bool wxPrivateDropTarget::OnData( int x, int y ) bool wxPrivateDropTarget::OnData( long x, long y )
{ {
if (!IsSupported( m_id )) return FALSE; if (!IsSupported( m_id )) return FALSE;
@@ -544,12 +544,12 @@ bool wxPrivateDropTarget::OnData( int x, int y )
// A drop target which accepts files (dragged from File Manager or Explorer) // A drop target which accepts files (dragged from File Manager or Explorer)
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
bool wxFileDropTarget::OnMove( int WXUNUSED(x), int WXUNUSED(y) ) bool wxFileDropTarget::OnMove( long WXUNUSED(x), long WXUNUSED(y) )
{ {
return IsSupported( wxDF_FILENAME ); return IsSupported( wxDF_FILENAME );
} }
bool wxFileDropTarget::OnDrop( int x, int y ) bool wxFileDropTarget::OnDrop( long x, long y )
{ {
if (IsSupported( wxDF_FILENAME )) if (IsSupported( wxDF_FILENAME ))
{ {
@@ -560,7 +560,7 @@ bool wxFileDropTarget::OnDrop( int x, int y )
return FALSE; return FALSE;
} }
bool wxFileDropTarget::OnData( int x, int y ) bool wxFileDropTarget::OnData( long x, long y )
{ {
wxFileDataObject data; wxFileDataObject data;
if (!GetData( &data )) return FALSE; if (!GetData( &data )) return FALSE;

View File

@@ -21,19 +21,58 @@
#endif #endif
#ifndef WX_PRECOMP #ifndef WX_PRECOMP
#include <stdio.h> #include <stdio.h>
#include "wx/utils.h" #include "wx/utils.h"
#include "wx/dialog.h" #include "wx/dialog.h"
#include "wx/listbox.h" #include "wx/button.h"
#include "wx/button.h" #include "wx/stattext.h"
#include "wx/stattext.h" #include "wx/textctrl.h"
#include "wx/textctrl.h" #include "wx/intl.h"
#include "wx/layout.h" #endif
#include "wx/intl.h"
#if wxUSE_STATLINE
#include "wx/statline.h"
#endif #endif
#include "wx/gtk/textdlg.h" #include "wx/gtk/textdlg.h"
/* Split message, using constraints to position controls */
static wxSize wxSplitMessage2( const wxString &message, wxWindow *parent )
{
int y = 10;
int w = 50;
wxString line( _T("") );
for (size_t pos = 0; pos < message.Len(); pos++)
{
if (message[pos] == _T('\n'))
{
if (!line.IsEmpty())
{
wxStaticText *s1 = new wxStaticText( parent, -1, line, wxPoint(15,y) );
wxSize size1( s1->GetSize() );
if (size1.x > w) w = size1.x;
line = _T("");
}
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);
}
// wxTextEntryDialog // wxTextEntryDialog
#if !USE_SHARED_LIBRARY #if !USE_SHARED_LIBRARY
@@ -44,109 +83,70 @@ END_EVENT_TABLE()
IMPLEMENT_CLASS(wxTextEntryDialog, wxDialog) IMPLEMENT_CLASS(wxTextEntryDialog, wxDialog)
#endif #endif
// Split message, using constraints to position controls
static void wxSplitMessage2(const wxChar *message, wxList *messageList, wxWindow *parent, wxRowColSizer *sizer)
{
wxChar *copyMessage = copystring(message);
size_t i = 0;
size_t len = wxStrlen(copyMessage);
wxChar *currentMessage = copyMessage;
// wxWindow *lastWindow = parent;
while (i < len) {
while ((i < len) && (copyMessage[i] != _T('\n'))) i++;
if (i < len) copyMessage[i] = 0;
wxStaticText *mess = new wxStaticText(parent, -1, currentMessage);
/*
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;
}
wxTextEntryDialog::wxTextEntryDialog(wxWindow *parent, const wxString& message, const wxString& caption, wxTextEntryDialog::wxTextEntryDialog(wxWindow *parent, const wxString& message, const wxString& caption,
const wxString& value, long style, const wxPoint& pos): const wxString& value, long style, const wxPoint& pos):
wxDialog(parent, -1, caption, pos, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxDIALOG_MODAL|wxTAB_TRAVERSAL) wxDialog(parent, -1, caption, pos, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxDIALOG_MODAL|wxTAB_TRAVERSAL)
{ {
m_dialogStyle = style; m_dialogStyle = style;
m_value = value; m_value = value;
wxBeginBusyCursor(); wxBeginBusyCursor();
wxSizer *topSizer = new wxSizer(this, wxSizerShrink); wxSize message_size( wxSplitMessage2( message, this ) );
topSizer->SetBorder(10, 10);
wxRowColSizer *messageSizer = new wxRowColSizer(topSizer, wxSIZER_COLS, 100); wxButton *ok = (wxButton *) NULL;
messageSizer->SetName("messageSizer"); wxButton *cancel = (wxButton *) NULL;
wxList m_buttons;
// bool centre = ((style & wxCENTRE) == wxCENTRE); int y = message_size.y + 15;
wxList messageList; wxTextCtrl *textCtrl = new wxTextCtrl(this, wxID_TEXT, value, wxPoint(-1, y), wxSize(350, -1));
wxSplitMessage2(message, &messageList, this, messageSizer);
// Insert a spacer y += 65;
wxSpacingSizer *spacingSizer = new wxSpacingSizer(topSizer, wxBelow, messageSizer, 10);
wxTextCtrl *textCtrl = new wxTextCtrl(this, wxID_TEXT, value, wxPoint(-1, -1), wxSize(350, -1)); if (style & wxOK)
{
ok = new wxButton( this, wxID_OK, _("OK"), wxPoint(-1,y), wxSize(80,-1) );
m_buttons.Append( ok );
}
wxRowColSizer *textSizer = new wxRowColSizer(topSizer, wxSIZER_ROWS); if (style & wxCANCEL)
textSizer->AddSizerChild(textCtrl); {
textSizer->SetName("textSizer"); cancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxPoint(-1,y), wxSize(80,-1) );
m_buttons.Append( cancel );
}
// Create constraints for the text sizer if (ok)
wxLayoutConstraints *textC = new wxLayoutConstraints; {
textC->left.SameAs (messageSizer, wxLeft); ok->SetDefault();
textC->top.Below (spacingSizer); ok->SetFocus();
textSizer->SetConstraints(textC); }
// Insert another spacer int w = wxMax( 350, m_buttons.GetCount() * 100 );
wxSpacingSizer *spacingSizer2 = new wxSpacingSizer(topSizer, wxBelow, textSizer, 10); w = wxMax( w, message_size.x );
spacingSizer->SetName("spacingSizer2"); int space = w / (m_buttons.GetCount()*2);
// Insert a sizer for the buttons textCtrl->SetSize( 20, -1, w-10, -1 );
wxRowColSizer *buttonSizer = new wxRowColSizer(topSizer, wxSIZER_ROWS);
buttonSizer->SetName("buttonSizer");
// Specify constraints for the button sizer int m = 0;
wxLayoutConstraints *c = new wxLayoutConstraints; wxNode *node = m_buttons.First();
c->width.AsIs (); while (node)
c->height.AsIs (); {
c->top.Below (spacingSizer2); wxWindow *win = (wxWindow*)node->Data();
c->centreX.SameAs (textSizer, wxCentreX); int x = (m*2+1)*space - 40 + 15;
buttonSizer->SetConstraints(c); win->Move( x, -1 );
buttonSizer->SetSpacing(12,0); node = node->Next();
m++;
}
wxButton *ok = NULL; #if wxUSE_STATLINE
wxButton *cancel = NULL; (void) new wxStaticLine( this, -1, wxPoint(0,y-20), wxSize(w+30, 5) );
#endif
if (style & wxOK) { SetSize( w+30, y+40 );
ok = new wxButton(this, wxID_OK, _("OK"), wxDefaultPosition, wxSize(75,-1));
buttonSizer->AddSizerChild(ok);
}
if (style & wxCANCEL) { Centre( wxBOTH );
cancel = new wxButton(this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize(75,-1));
buttonSizer->AddSizerChild(cancel);
}
if (ok)
ok->SetDefault();
Layout();
Centre(wxBOTH);
wxEndBusyCursor(); wxEndBusyCursor();
} }