{ m_clientWindow = clientWindow; }
wxWindow *GetClientWindow()
{ 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 OnYes(wxCommandEvent& event);
void OnNo(wxCommandEvent& event);
void OnCancel(wxCommandEvent& event);
-
+
protected:
wxWindow *m_clientWindow;
long m_extraStyle;
#if wxUSE_STATLINE
wxStaticLine *m_statLine;
#endif
-
+ int m_clientWindowMargin;
+ wxSize m_spacePerButton;
+
wxSize LayoutButtons();
private:
void SetDefault();
void SetLabel( const wxString &label );
bool Enable( bool enable );
+
+ static wxSize GetDefaultSize();
// implementation
/* may be overridden to reject certain formats or drops
on certain areas. always returns TRUE by default
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
IsSupported() to ask which formats are available
and then call RequestData() to indicate the format
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
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
from the drop event. */
wxTextDropTarget() {}
- virtual bool OnMove( int x, int y );
- virtual bool OnDrop( int x, int y );
- virtual bool OnData( int x, int y );
+ virtual bool OnMove( long x, long y );
+ virtual bool OnDrop( long x, long y );
+ virtual bool OnData( long x, long y );
/* 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;
};
/* see SetId() below for explanation */
wxPrivateDropTarget( const wxString &id );
- virtual bool OnMove( int x, int y );
- virtual bool OnDrop( int x, int y );
- virtual bool OnData( int x, int y );
+ virtual bool OnMove( long x, long y );
+ virtual bool OnDrop( long x, long y );
+ virtual bool OnData( long x, long y );
/* 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
processor would e.g. add a wxTextDataObject and a wxPrivateDataObject
wxFileDropTarget() {}
- virtual bool OnMove( int x, int y );
- virtual bool OnDrop( int x, int y );
- virtual bool OnData( int x, int y );
+ virtual bool OnMove( long x, long y );
+ virtual bool OnDrop( long x, long y );
+ virtual bool OnData( long x, long y );
/* 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;
};
#include "wx/setup.h"
#include "wx/dialog.h"
+#include "wx/extdlg.h"
// Handy dialog functions (will be converted into classes at some point)
WXDLLEXPORT_DATA(extern const wxChar*) wxGetTextFromUserPromptStr;
void SetDefault();
void SetLabel( const wxString &label );
bool Enable( bool enable );
+
+ static wxSize GetDefaultSize();
// implementation
/* may be overridden to reject certain formats or drops
on certain areas. always returns TRUE by default
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
IsSupported() to ask which formats are available
and then call RequestData() to indicate the format
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
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
from the drop event. */
wxTextDropTarget() {}
- virtual bool OnMove( int x, int y );
- virtual bool OnDrop( int x, int y );
- virtual bool OnData( int x, int y );
+ virtual bool OnMove( long x, long y );
+ virtual bool OnDrop( long x, long y );
+ virtual bool OnData( long x, long y );
/* 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;
};
/* see SetId() below for explanation */
wxPrivateDropTarget( const wxString &id );
- virtual bool OnMove( int x, int y );
- virtual bool OnDrop( int x, int y );
- virtual bool OnData( int x, int y );
+ virtual bool OnMove( long x, long y );
+ virtual bool OnDrop( long x, long y );
+ virtual bool OnData( long x, long y );
/* 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
processor would e.g. add a wxTextDataObject and a wxPrivateDataObject
wxFileDropTarget() {}
- virtual bool OnMove( int x, int y );
- virtual bool OnDrop( int x, int y );
- virtual bool OnData( int x, int y );
+ virtual bool OnMove( long x, long y );
+ virtual bool OnDrop( long x, long y );
+ virtual bool OnData( long x, long y );
/* 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;
};
#include "wx/setup.h"
#include "wx/dialog.h"
+#include "wx/extdlg.h"
// Handy dialog functions (will be converted into classes at some point)
WXDLLEXPORT_DATA(extern const wxChar*) wxGetTextFromUserPromptStr;
// other platforms. Also, it will not be resizable
// anywhere.
- wxExtDialog dialog( this, -1, "Test 1 for wxExtDialog",
- wxOK|wxFORWARD|wxBACKWARD );
+ wxExtDialog dialog( this, -1, "Test 1 for wxExtDialog", wxOK|wxFORWARD|wxBACKWARD );
+ dialog.AddButton( new wxButton( &dialog, -1, "Custom") );
dialog.SetClientWindow( new wxTextCtrl( &dialog, -1, "Test", wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE ) );
// all platforms.
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 );
dialog2.SetClientWindow( new wxTextCtrl( &dialog2, -1, "Test", wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE ) );
// file names) we drop on them
// ----------------------------------------------------------------------------
-// FIXME this is ugly and should be fixed in the library itself
-#ifdef __WXMSW__
- typedef long wxDropPointCoord;
-#else // wxGTK
- typedef int wxDropPointCoord;
-#endif // MSW/GTK
+typedef long wxDropPointCoord;
class DnDText : public wxTextDropTarget
{
m_ctrlText = new wxListBox(this, -1, pos, size, 1, &strText, wxLB_HSCROLL);
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 |
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_pLogPrev = wxLog::SetActiveTarget(m_pLog);
+#endif
// associate drop targets with 2 text controls
m_ctrlFile->SetDropTarget(new DnDFile(m_ctrlFile));
DnDFrame::~DnDFrame()
{
+#if wxUSE_STD_IOSTREAM
if ( m_pLog != NULL ) {
if ( wxLog::SetActiveTarget(m_pLogPrev) == m_pLog )
delete m_pLog;
}
+#endif
}
// ---------------------------------------------------------------------------
// wxExtDialog
//-----------------------------------------------------------------------------
-#define STATIC_LINE_MARGIN 15
-#define CLIENT_AREA_MARGIN 10
#define BUTTON_AREA_MARGIN 10
#if !USE_SHARED_LIBRARY
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 *cancel = (wxButton *) NULL;
wxButton *yes = (wxButton *) NULL;
AddButton( new wxButton( this, wxID_SETUP, _("Setup") ) );
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_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 );
+ m_clientWindow->SetSize( m_clientWindowMargin,
+ m_clientWindowMargin,
+ client_size.x - 2*m_clientWindowMargin,
+ client_size.y - 2*m_clientWindowMargin );
else
m_clientWindow->SetSize( 0, 0, client_size.x, client_size.y );
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;
+ ret.x = m_spacePerButton.x;
+ ret.y = m_buttons.GetCount()*m_spacePerButton.y + 2*BUTTON_AREA_MARGIN;
#if wxUSE_STATLINE
if (m_statLine)
- ret.x += STATIC_LINE_MARGIN;
+ ret.x += wxStaticLine::GetDefaultSize();
#endif
}
else
{
- ret.x = m_buttons.GetCount()*button_size_and_margin_x + 2*BUTTON_AREA_MARGIN;
- ret.y = button_size_and_margin_y;
+ ret.x = m_buttons.GetCount()*m_spacePerButton.x + 2*BUTTON_AREA_MARGIN;
+ ret.y = m_spacePerButton.y;
#if wxUSE_STATLINE
if (m_statLine)
- ret.y += STATIC_LINE_MARGIN;
+ ret.y += wxStaticLine::GetDefaultSize();
#endif
}
if (m_windowStyle & wxED_BUTTONS_RIGHT)
{
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 n = 0;
wxButton *button = (wxButton*)node->Data();
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 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;
button->SetSize( button_x, button_y, button_size.x, button_size.y );
#if wxUSE_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,
wxStaticLine::GetDefaultSize(),
client_area.y );
else
{
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 n = 0;
wxButton *button = (wxButton*)node->Data();
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 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;
button->SetSize( button_x, button_y, button_size.x, button_size.y );
#if wxUSE_STATLINE
if (m_statLine)
m_statLine->SetSize( 0,
- client_area.y - area_used.y,
+ client_area.y - area_used_by_buttons.y - wxStaticLine::GetDefaultSize(),
client_area.x,
wxStaticLine::GetDefaultSize() );
#endif
g_isIdle = FALSE;
}
+/*
#if wxUSE_THREADS
static gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) )
{
wxTheApp->m_wakeUpTimerTag = 0;
#if (GTK_MINOR_VERSION > 0)
- /* when getting called from GDK's time-out handler
- we are no longer within GDK's grab on the GUI
- thread so we must lock it here ourselves */
+ // when getting called from GDK's time-out handler
+ // we are no longer within GDK's grab on the GUI
+ // thread so we must lock it here ourselves
GDK_THREADS_ENTER ();
#endif
- /* unblock other threads wishing to do some GUI things */
+ // unblock other threads wishing to do some GUI things
wxMutexGuiLeave();
- /* wake up other threads */
+ // wake up other threads
wxUsleep( 1 );
- /* block other thread again */
+ // block other thread again
wxMutexGuiEnter();
#if (GTK_MINOR_VERSION > 0)
- /* release lock again */
+ // release lock again
GDK_THREADS_LEAVE ();
#endif
return TRUE;
}
#endif
+*/
//-----------------------------------------------------------------------------
// wxApp
m_idleTag = gtk_idle_add( wxapp_idle_callback, (gpointer) NULL );
+/*
#if wxUSE_THREADS
m_wakeUpTimerTag = gtk_timeout_add( 20, wxapp_wakeup_timerout_callback, (gpointer) NULL );
#endif
+*/
m_colorCube = (unsigned char*) NULL;
}
{
if (m_idleTag) gtk_idle_remove( m_idleTag );
+/*
#if wxUSE_THREADS
if (m_wakeUpTimerTag) gtk_timeout_remove( m_wakeUpTimerTag );
#endif
+*/
if (m_colorCube) free(m_colorCube);
}
SetSize( m_x, m_y, m_width, m_height );
}
+static wxSize wxButton::GetDefaultSize()
+{
+ return wxSize(80,26);
+}
+
void wxButton::SetLabel( const wxString &label )
{
wxCHECK_RET( m_widget != NULL, _T("invalid button") );
{
}
-bool wxDropTarget::OnMove( int WXUNUSED(x), int WXUNUSED(y) )
+bool wxDropTarget::OnMove( long WXUNUSED(x), long WXUNUSED(y) )
{
return TRUE;
}
-bool wxDropTarget::OnDrop( int WXUNUSED(x), int WXUNUSED(y) )
+bool wxDropTarget::OnDrop( long WXUNUSED(x), long WXUNUSED(y) )
{
return FALSE;
}
-bool wxDropTarget::OnData( int WXUNUSED(x), int WXUNUSED(y) )
+bool wxDropTarget::OnData( long WXUNUSED(x), long WXUNUSED(y) )
{
return FALSE;
}
// wxTextDropTarget
//-------------------------------------------------------------------------
-bool wxTextDropTarget::OnMove( int WXUNUSED(x), int WXUNUSED(y) )
+bool wxTextDropTarget::OnMove( long WXUNUSED(x), long WXUNUSED(y) )
{
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 ))
{
return FALSE;
}
-bool wxTextDropTarget::OnData( int x, int y )
+bool wxTextDropTarget::OnData( long x, long y )
{
wxTextDataObject data;
if (!GetData( &data )) return FALSE;
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 );
}
-bool wxPrivateDropTarget::OnDrop( int WXUNUSED(x), int WXUNUSED(y) )
+bool wxPrivateDropTarget::OnDrop( long WXUNUSED(x), long WXUNUSED(y) )
{
if (!IsSupported( m_id ))
{
return FALSE;
}
-bool wxPrivateDropTarget::OnData( int x, int y )
+bool wxPrivateDropTarget::OnData( long x, long y )
{
if (!IsSupported( m_id )) return FALSE;
// 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 );
}
-bool wxFileDropTarget::OnDrop( int x, int y )
+bool wxFileDropTarget::OnDrop( long x, long y )
{
if (IsSupported( wxDF_FILENAME ))
{
return FALSE;
}
-bool wxFileDropTarget::OnData( int x, int y )
+bool wxFileDropTarget::OnData( long x, long y )
{
wxFileDataObject data;
if (!GetData( &data )) return FALSE;
#endif
#ifndef WX_PRECOMP
-#include <stdio.h>
-#include "wx/utils.h"
-#include "wx/dialog.h"
-#include "wx/listbox.h"
-#include "wx/button.h"
-#include "wx/stattext.h"
-#include "wx/textctrl.h"
-#include "wx/layout.h"
-#include "wx/intl.h"
+ #include <stdio.h>
+ #include "wx/utils.h"
+ #include "wx/dialog.h"
+ #include "wx/button.h"
+ #include "wx/stattext.h"
+ #include "wx/textctrl.h"
+ #include "wx/intl.h"
+#endif
+
+#if wxUSE_STATLINE
+ #include "wx/statline.h"
#endif
#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
#if !USE_SHARED_LIBRARY
IMPLEMENT_CLASS(wxTextEntryDialog, wxDialog)
#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,
const wxString& value, long style, const wxPoint& pos):
wxDialog(parent, -1, caption, pos, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxDIALOG_MODAL|wxTAB_TRAVERSAL)
{
- m_dialogStyle = style;
- m_value = value;
-
- wxBeginBusyCursor();
-
- wxSizer *topSizer = new wxSizer(this, wxSizerShrink);
- topSizer->SetBorder(10, 10);
-
- wxRowColSizer *messageSizer = new wxRowColSizer(topSizer, wxSIZER_COLS, 100);
- messageSizer->SetName("messageSizer");
-
-// bool centre = ((style & wxCENTRE) == wxCENTRE);
-
- wxList messageList;
- wxSplitMessage2(message, &messageList, this, messageSizer);
-
- // Insert a spacer
- wxSpacingSizer *spacingSizer = new wxSpacingSizer(topSizer, wxBelow, messageSizer, 10);
-
- wxTextCtrl *textCtrl = new wxTextCtrl(this, wxID_TEXT, value, wxPoint(-1, -1), wxSize(350, -1));
-
- wxRowColSizer *textSizer = new wxRowColSizer(topSizer, wxSIZER_ROWS);
- textSizer->AddSizerChild(textCtrl);
- textSizer->SetName("textSizer");
-
- // Create constraints for the text sizer
- wxLayoutConstraints *textC = new wxLayoutConstraints;
- textC->left.SameAs (messageSizer, wxLeft);
- textC->top.Below (spacingSizer);
- textSizer->SetConstraints(textC);
-
- // Insert another spacer
- wxSpacingSizer *spacingSizer2 = new wxSpacingSizer(topSizer, wxBelow, textSizer, 10);
- spacingSizer->SetName("spacingSizer2");
-
- // Insert a sizer for the buttons
- wxRowColSizer *buttonSizer = new wxRowColSizer(topSizer, wxSIZER_ROWS);
- buttonSizer->SetName("buttonSizer");
-
- // Specify constraints for the button sizer
- wxLayoutConstraints *c = new wxLayoutConstraints;
- c->width.AsIs ();
- c->height.AsIs ();
- c->top.Below (spacingSizer2);
- c->centreX.SameAs (textSizer, wxCentreX);
- buttonSizer->SetConstraints(c);
- buttonSizer->SetSpacing(12,0);
-
- wxButton *ok = NULL;
- wxButton *cancel = NULL;
-
- if (style & wxOK) {
- ok = new wxButton(this, wxID_OK, _("OK"), wxDefaultPosition, wxSize(75,-1));
- buttonSizer->AddSizerChild(ok);
- }
-
- if (style & wxCANCEL) {
- cancel = new wxButton(this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize(75,-1));
- buttonSizer->AddSizerChild(cancel);
- }
+ m_dialogStyle = style;
+ m_value = value;
+
+ wxBeginBusyCursor();
+
+ wxSize message_size( wxSplitMessage2( message, this ) );
+
+ wxButton *ok = (wxButton *) NULL;
+ wxButton *cancel = (wxButton *) NULL;
+ wxList m_buttons;
+
+ int y = message_size.y + 15;
+
+ wxTextCtrl *textCtrl = new wxTextCtrl(this, wxID_TEXT, value, wxPoint(-1, y), wxSize(350, -1));
+
+ y += 65;
+
+ if (style & wxOK)
+ {
+ ok = new wxButton( this, wxID_OK, _("OK"), wxPoint(-1,y), wxSize(80,-1) );
+ m_buttons.Append( ok );
+ }
+
+ if (style & wxCANCEL)
+ {
+ cancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxPoint(-1,y), wxSize(80,-1) );
+ m_buttons.Append( cancel );
+ }
+
+ if (ok)
+ {
+ ok->SetDefault();
+ ok->SetFocus();
+ }
+
+ int w = wxMax( 350, m_buttons.GetCount() * 100 );
+ w = wxMax( w, message_size.x );
+ int space = w / (m_buttons.GetCount()*2);
+
+ textCtrl->SetSize( 20, -1, w-10, -1 );
+
+ int m = 0;
+ wxNode *node = m_buttons.First();
+ while (node)
+ {
+ wxWindow *win = (wxWindow*)node->Data();
+ int x = (m*2+1)*space - 40 + 15;
+ win->Move( x, -1 );
+ node = node->Next();
+ m++;
+ }
+
+#if wxUSE_STATLINE
+ (void) new wxStaticLine( this, -1, wxPoint(0,y-20), wxSize(w+30, 5) );
+#endif
+
+ SetSize( w+30, y+40 );
- if (ok)
- ok->SetDefault();
+ Centre( wxBOTH );
- Layout();
- Centre(wxBOTH);
wxEndBusyCursor();
}
g_isIdle = FALSE;
}
+/*
#if wxUSE_THREADS
static gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) )
{
wxTheApp->m_wakeUpTimerTag = 0;
#if (GTK_MINOR_VERSION > 0)
- /* when getting called from GDK's time-out handler
- we are no longer within GDK's grab on the GUI
- thread so we must lock it here ourselves */
+ // when getting called from GDK's time-out handler
+ // we are no longer within GDK's grab on the GUI
+ // thread so we must lock it here ourselves
GDK_THREADS_ENTER ();
#endif
- /* unblock other threads wishing to do some GUI things */
+ // unblock other threads wishing to do some GUI things
wxMutexGuiLeave();
- /* wake up other threads */
+ // wake up other threads
wxUsleep( 1 );
- /* block other thread again */
+ // block other thread again
wxMutexGuiEnter();
#if (GTK_MINOR_VERSION > 0)
- /* release lock again */
+ // release lock again
GDK_THREADS_LEAVE ();
#endif
return TRUE;
}
#endif
+*/
//-----------------------------------------------------------------------------
// wxApp
m_idleTag = gtk_idle_add( wxapp_idle_callback, (gpointer) NULL );
+/*
#if wxUSE_THREADS
m_wakeUpTimerTag = gtk_timeout_add( 20, wxapp_wakeup_timerout_callback, (gpointer) NULL );
#endif
+*/
m_colorCube = (unsigned char*) NULL;
}
{
if (m_idleTag) gtk_idle_remove( m_idleTag );
+/*
#if wxUSE_THREADS
if (m_wakeUpTimerTag) gtk_timeout_remove( m_wakeUpTimerTag );
#endif
+*/
if (m_colorCube) free(m_colorCube);
}
SetSize( m_x, m_y, m_width, m_height );
}
+static wxSize wxButton::GetDefaultSize()
+{
+ return wxSize(80,26);
+}
+
void wxButton::SetLabel( const wxString &label )
{
wxCHECK_RET( m_widget != NULL, _T("invalid button") );
{
}
-bool wxDropTarget::OnMove( int WXUNUSED(x), int WXUNUSED(y) )
+bool wxDropTarget::OnMove( long WXUNUSED(x), long WXUNUSED(y) )
{
return TRUE;
}
-bool wxDropTarget::OnDrop( int WXUNUSED(x), int WXUNUSED(y) )
+bool wxDropTarget::OnDrop( long WXUNUSED(x), long WXUNUSED(y) )
{
return FALSE;
}
-bool wxDropTarget::OnData( int WXUNUSED(x), int WXUNUSED(y) )
+bool wxDropTarget::OnData( long WXUNUSED(x), long WXUNUSED(y) )
{
return FALSE;
}
// wxTextDropTarget
//-------------------------------------------------------------------------
-bool wxTextDropTarget::OnMove( int WXUNUSED(x), int WXUNUSED(y) )
+bool wxTextDropTarget::OnMove( long WXUNUSED(x), long WXUNUSED(y) )
{
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 ))
{
return FALSE;
}
-bool wxTextDropTarget::OnData( int x, int y )
+bool wxTextDropTarget::OnData( long x, long y )
{
wxTextDataObject data;
if (!GetData( &data )) return FALSE;
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 );
}
-bool wxPrivateDropTarget::OnDrop( int WXUNUSED(x), int WXUNUSED(y) )
+bool wxPrivateDropTarget::OnDrop( long WXUNUSED(x), long WXUNUSED(y) )
{
if (!IsSupported( m_id ))
{
return FALSE;
}
-bool wxPrivateDropTarget::OnData( int x, int y )
+bool wxPrivateDropTarget::OnData( long x, long y )
{
if (!IsSupported( m_id )) return FALSE;
// 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 );
}
-bool wxFileDropTarget::OnDrop( int x, int y )
+bool wxFileDropTarget::OnDrop( long x, long y )
{
if (IsSupported( wxDF_FILENAME ))
{
return FALSE;
}
-bool wxFileDropTarget::OnData( int x, int y )
+bool wxFileDropTarget::OnData( long x, long y )
{
wxFileDataObject data;
if (!GetData( &data )) return FALSE;
#endif
#ifndef WX_PRECOMP
-#include <stdio.h>
-#include "wx/utils.h"
-#include "wx/dialog.h"
-#include "wx/listbox.h"
-#include "wx/button.h"
-#include "wx/stattext.h"
-#include "wx/textctrl.h"
-#include "wx/layout.h"
-#include "wx/intl.h"
+ #include <stdio.h>
+ #include "wx/utils.h"
+ #include "wx/dialog.h"
+ #include "wx/button.h"
+ #include "wx/stattext.h"
+ #include "wx/textctrl.h"
+ #include "wx/intl.h"
+#endif
+
+#if wxUSE_STATLINE
+ #include "wx/statline.h"
#endif
#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
#if !USE_SHARED_LIBRARY
IMPLEMENT_CLASS(wxTextEntryDialog, wxDialog)
#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,
const wxString& value, long style, const wxPoint& pos):
wxDialog(parent, -1, caption, pos, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxDIALOG_MODAL|wxTAB_TRAVERSAL)
{
- m_dialogStyle = style;
- m_value = value;
-
- wxBeginBusyCursor();
-
- wxSizer *topSizer = new wxSizer(this, wxSizerShrink);
- topSizer->SetBorder(10, 10);
-
- wxRowColSizer *messageSizer = new wxRowColSizer(topSizer, wxSIZER_COLS, 100);
- messageSizer->SetName("messageSizer");
-
-// bool centre = ((style & wxCENTRE) == wxCENTRE);
-
- wxList messageList;
- wxSplitMessage2(message, &messageList, this, messageSizer);
-
- // Insert a spacer
- wxSpacingSizer *spacingSizer = new wxSpacingSizer(topSizer, wxBelow, messageSizer, 10);
-
- wxTextCtrl *textCtrl = new wxTextCtrl(this, wxID_TEXT, value, wxPoint(-1, -1), wxSize(350, -1));
-
- wxRowColSizer *textSizer = new wxRowColSizer(topSizer, wxSIZER_ROWS);
- textSizer->AddSizerChild(textCtrl);
- textSizer->SetName("textSizer");
-
- // Create constraints for the text sizer
- wxLayoutConstraints *textC = new wxLayoutConstraints;
- textC->left.SameAs (messageSizer, wxLeft);
- textC->top.Below (spacingSizer);
- textSizer->SetConstraints(textC);
-
- // Insert another spacer
- wxSpacingSizer *spacingSizer2 = new wxSpacingSizer(topSizer, wxBelow, textSizer, 10);
- spacingSizer->SetName("spacingSizer2");
-
- // Insert a sizer for the buttons
- wxRowColSizer *buttonSizer = new wxRowColSizer(topSizer, wxSIZER_ROWS);
- buttonSizer->SetName("buttonSizer");
-
- // Specify constraints for the button sizer
- wxLayoutConstraints *c = new wxLayoutConstraints;
- c->width.AsIs ();
- c->height.AsIs ();
- c->top.Below (spacingSizer2);
- c->centreX.SameAs (textSizer, wxCentreX);
- buttonSizer->SetConstraints(c);
- buttonSizer->SetSpacing(12,0);
-
- wxButton *ok = NULL;
- wxButton *cancel = NULL;
-
- if (style & wxOK) {
- ok = new wxButton(this, wxID_OK, _("OK"), wxDefaultPosition, wxSize(75,-1));
- buttonSizer->AddSizerChild(ok);
- }
-
- if (style & wxCANCEL) {
- cancel = new wxButton(this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize(75,-1));
- buttonSizer->AddSizerChild(cancel);
- }
+ m_dialogStyle = style;
+ m_value = value;
+
+ wxBeginBusyCursor();
+
+ wxSize message_size( wxSplitMessage2( message, this ) );
+
+ wxButton *ok = (wxButton *) NULL;
+ wxButton *cancel = (wxButton *) NULL;
+ wxList m_buttons;
+
+ int y = message_size.y + 15;
+
+ wxTextCtrl *textCtrl = new wxTextCtrl(this, wxID_TEXT, value, wxPoint(-1, y), wxSize(350, -1));
+
+ y += 65;
+
+ if (style & wxOK)
+ {
+ ok = new wxButton( this, wxID_OK, _("OK"), wxPoint(-1,y), wxSize(80,-1) );
+ m_buttons.Append( ok );
+ }
+
+ if (style & wxCANCEL)
+ {
+ cancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxPoint(-1,y), wxSize(80,-1) );
+ m_buttons.Append( cancel );
+ }
+
+ if (ok)
+ {
+ ok->SetDefault();
+ ok->SetFocus();
+ }
+
+ int w = wxMax( 350, m_buttons.GetCount() * 100 );
+ w = wxMax( w, message_size.x );
+ int space = w / (m_buttons.GetCount()*2);
+
+ textCtrl->SetSize( 20, -1, w-10, -1 );
+
+ int m = 0;
+ wxNode *node = m_buttons.First();
+ while (node)
+ {
+ wxWindow *win = (wxWindow*)node->Data();
+ int x = (m*2+1)*space - 40 + 15;
+ win->Move( x, -1 );
+ node = node->Next();
+ m++;
+ }
+
+#if wxUSE_STATLINE
+ (void) new wxStaticLine( this, -1, wxPoint(0,y-20), wxSize(w+30, 5) );
+#endif
+
+ SetSize( w+30, y+40 );
- if (ok)
- ok->SetDefault();
+ Centre( wxBOTH );
- Layout();
- Centre(wxBOTH);
wxEndBusyCursor();
}