#include "wx/event.h"
#include "wx/gauge.h"
#include "wx/intl.h"
- #include "wx/settings.h"
#include "wx/dcclient.h"
#include "wx/timer.h"
#endif
#include "wx/generic/progdlgg.h"
+#include "wx/settings.h"
// ---------------------------------------------------------------------------
// macros
wxWindow *parent,
int style)
: wxDialog(parent, wxID_ANY, title),
+ m_skip(false),
m_delay(3),
- m_skip(false)
+ m_hasAbortButton(false),
+ m_hasSkipButton(false)
{
// we may disappear at any moment, let the others know about it
SetExtraStyle(GetExtraStyle() | wxWS_EX_TRANSIENT);
m_windowStyle |= style;
- bool hasAbortButton = (style & wxPD_CAN_ABORT) != 0;
- bool hasSkipButton = (style & wxPD_CAN_SKIP) != 0;
+ m_hasAbortButton = (style & wxPD_CAN_ABORT) != 0;
+ m_hasSkipButton = (style & wxPD_CAN_SKIP) != 0;
+ bool isPda = (wxSystemSettings::GetScreenType() <= wxSYS_SCREEN_PDA);
+
#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
// we have to remove the "Close" button from the title bar then as it is
// confusing to have it - it doesn't work anyhow
//
// FIXME: should probably have a (extended?) window style for this
- if ( !hasAbortButton )
+ if ( !m_hasAbortButton )
{
EnableCloseButton(false);
}
SetLeftMenu();
#endif
- m_state = hasAbortButton ? Continue : Uncancelable;
+ m_state = m_hasAbortButton ? Continue : Uncancelable;
m_maximum = maximum;
#if defined(__WXMSW__) || defined(__WXPM__)
}
#if defined(__SMARTPHONE__)
- if ( hasSkipButton )
+ if ( m_hasSkipButton )
SetRightMenu(wxID_SKIP, _("Skip"));
- if ( hasAbortButton )
+ if ( m_hasAbortButton )
SetLeftMenu(wxID_CANCEL);
#else
m_btnAbort = m_btnSkip = (wxButton *)NULL;
bool sizeDlgModified = false;
wxBoxSizer *buttonSizer = new wxBoxSizer(wxHORIZONTAL);
- const int sizerFlags =
+ const int sizerFlags =
#if defined(__WXMSW__) || defined(__WXPM__)
wxALIGN_RIGHT | wxALL
#else // !MSW
#endif // MSW/!MSW
;
- if ( hasSkipButton )
+ if ( m_hasSkipButton )
{
m_btnSkip = new wxButton(this, wxID_SKIP, _("Skip"));
sizeDlgModified = true;
}
- if ( hasAbortButton )
+ if ( m_hasAbortButton )
{
m_btnAbort = new wxButton(this, wxID_CANCEL);
SetSizerAndFit(sizer);
- sizeDlg.y += 2*LAYOUT_MARGIN;
+ if (!isPda)
+ {
+ sizeDlg.y += 2*LAYOUT_MARGIN;
- // try to make the dialog not square but rectangular of reasonabel width
- sizeDlg.x = (wxCoord)wxMax(widthText, 4*sizeDlg.y/3);
- sizeDlg.x *= 3;
- sizeDlg.x /= 2;
- SetClientSize(sizeDlg);
+ // try to make the dialog not square but rectangular of reasonable width
+ sizeDlg.x = (wxCoord)wxMax(widthText, 4*sizeDlg.y/3);
+ sizeDlg.x *= 3;
+ sizeDlg.x /= 2;
+ SetClientSize(sizeDlg);
+ }
Centre(wxCENTER_FRAME | wxBOTH);
m_state = Finished;
if( !(GetWindowStyle() & wxPD_AUTO_HIDE) )
{
-#if defined(__SMARTPHONE__)
- SetLeftMenu(wxID_CANCEL, _("Close"));
- SetRightMenu();
-#endif
- if ( m_btnSkip )
- {
- // tell the user what he should do...
- m_btnSkip->Disable();
- }
-
- if ( m_btnAbort )
- {
- // tell the user what he should do...
- m_btnAbort->SetLabel(_("Close"));
- }
+ EnableClose();
+ DisableSkip();
#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
- else // enable the button to give the user a way to close the dlg
- {
- EnableCloseButton();
- }
+ EnableCloseButton();
#endif // __WXMSW__
if ( !newmsg.empty() )
{
*skip = true;
m_skip = false;
- if(m_btnSkip)
- m_btnSkip->Enable();
+ EnableSkip();
}
}
m_ctdelay = m_delay; // force an update of the elapsed/estimated/remaining time
m_break += wxGetCurrentTime()-m_timeStop;
- // it may have been disabled by OnCancel(), so enable it back to let the
- // user interrupt us again if needed
- if(m_btnAbort)
- m_btnAbort->Enable();
-
- // enable skipping because the one before OnCancel() is no more valid
+ EnableAbort();
+ EnableSkip();
m_skip = false;
- if(m_btnSkip)
- m_btnSkip->Enable();
-
-#if defined(__SMARTPHONE__)
- SetLeftMenu(wxID_CANCEL, _("Cancel"));
-#endif
}
bool wxProgressDialog::Show( bool show )
// will handle it
m_state = Canceled;
- // update the button state immediately so that the user knows that the
+ // update the buttons state immediately so that the user knows that the
// request has been noticed
- if(m_btnAbort)
- m_btnAbort->Disable();
- if(m_btnSkip)
- m_btnSkip->Disable();
-
-#if defined(__SMARTPHONE__)
- SetLeftMenu();
-#endif
+ DisableAbort();
+ DisableSkip();
// save the time when the dialog was stopped
m_timeStop = wxGetCurrentTime();
void wxProgressDialog::OnSkip(wxCommandEvent& WXUNUSED(event))
{
- if(m_btnSkip)
- m_btnSkip->Disable();
+ DisableSkip();
m_skip = true;
}
{
// next Update() will notice it
m_state = Canceled;
- if(m_btnAbort)
- m_btnAbort->Disable();
- if(m_btnSkip)
- m_btnSkip->Disable();
+ DisableAbort();
+ DisableSkip();
-#if defined(__SMARTPHONE__)
- SetLeftMenu();
-#endif
m_timeStop = wxGetCurrentTime();
}
}
}
}
+void wxProgressDialog::EnableSkip(bool enable)
+{
+ if(m_hasSkipButton)
+ {
+#ifdef __SMARTPHONE__
+ if(enable)
+ SetRightMenu(wxID_SKIP, _("Skip"));
+ else
+ SetRightMenu();
+#else
+ if(m_btnSkip)
+ m_btnSkip->Enable(enable);
+#endif
+ }
+}
+
+void wxProgressDialog::EnableAbort(bool enable)
+{
+ if(m_hasAbortButton)
+ {
+#ifdef __SMARTPHONE__
+ if(enable)
+ SetLeftMenu(wxID_CANCEL); // stock buttons makes Cancel label
+ else
+ SetLeftMenu();
+#else
+ if(m_btnAbort)
+ m_btnAbort->Enable(enable);
+#endif
+ }
+}
+
+void wxProgressDialog::EnableClose()
+{
+ if(m_hasAbortButton)
+ {
+#ifdef __SMARTPHONE__
+ SetLeftMenu(wxID_CANCEL, _("Close"));
+#else
+ if(m_btnAbort)
+ {
+ m_btnAbort->Enable();
+ m_btnAbort->SetLabel(_("Close"));
+ }
+#endif
+ }
+}
+
#endif // wxUSE_PROGRESSDLG