int maximum,
wxWindow *parent,
int style)
- : wxDialog(parent, wxID_ANY, title),
+ : wxDialog(GetParentForModalDialog(parent), wxID_ANY, title),
m_skip(false),
m_delay(3),
m_hasAbortButton(false),
wxClientDC dc(this);
dc.SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT));
- long widthText = 0;
+ wxCoord widthText = 0;
dc.GetTextExtent(message, &widthText, NULL, NULL, NULL, NULL);
wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
m_display_estimated = m_last_timeupdate = m_break = 0;
m_ctdelay = 0;
- // if we are going to have at least one label, remmeber it in this var
+ // if we are going to have at least one label, remember it in this var
wxStaticText *label = NULL;
// also count how many labels we really have
sizeDlg.y += 2*LAYOUT_MARGIN;
// 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;
+ sizeDlg.x = (wxCoord)wxMax(3*widthText/2, 4*sizeDlg.y/3);
SetClientSize(sizeDlg);
}
wxASSERT_MSG( value <= m_maximum, wxT("invalid progress value") );
- // fill up the gauge if value == maximum because this means that the dialog
- // is going to close and the gauge shouldn't be partly empty in this case
- if ( m_gauge && value <= m_maximum )
- {
- m_gauge->SetValue(value == m_maximum ? value : value + 1);
- }
+ if ( m_gauge )
+ m_gauge->SetValue(value);
UpdateMessage(newmsg);
Hide();
}
}
- else
+ else // not at maximum yet
{
- // we have to yield because not only we want to update the display but
- // also to process the clicks on the cancel and skip buttons
- wxYieldIfNeeded() ;
-
- if ( (m_skip) && (skip != NULL) && (*skip == false) )
- {
- *skip = true;
- m_skip = false;
- EnableSkip();
- }
+ return DoAfterUpdate(skip);
}
// update the display in case yielding above didn't do it
return m_state != Canceled;
}
-bool
-wxProgressDialog::UpdatePulse(const wxString& newmsg, bool *skip)
+bool wxProgressDialog::Pulse(const wxString& newmsg, bool *skip)
{
wxASSERT_MSG( m_gauge, wxT("cannot update non existent dialog") );
SetTimeLabel((unsigned long)-1, m_remaining);
}
+ return DoAfterUpdate(skip);
+}
+
+bool wxProgressDialog::DoAfterUpdate(bool *skip)
+{
// we have to yield because not only we want to update the display but
// also to process the clicks on the cancel and skip buttons
- wxYieldIfNeeded() ;
+ wxYieldIfNeeded();
+
+ Update();
- if ( (m_skip) && (skip != NULL) && (*skip == false) )
+ if ( m_skip && skip && !*skip )
{
*skip = true;
m_skip = false;