<wx/filedlg.h>
+\membersection{::wxGetNumberFromUser}\label{wxgetnumberfromuser}
+
+\func{long}{wxGetNumberFromUser}{
+ \param{const wxString\& }{message},
+ \param{const wxString\& }{prompt},
+ \param{const wxString\& }{caption},
+ \param{long }{value},
+ \param{long }{min = 0},
+ \param{long }{max = 100},
+ \param{wxWindow *}{parent = NULL},
+ \param{const wxPoint\& }{pos = wxDefaultPosition}}
+
+Shows a dialog asking the user for numeric input. The dialogs title is set to
+{\it caption}, it contains a (possibly) multiline {\it message} above the
+single line {\it prompt} and the zone for entering the number.
+
+The number entered must be in the range {\it min}..{\it max} (both of which
+should be positive) and {\it value} is the initial value of it. If the user
+enters an invalid value or cancels the dialog, the function will return -1.
+
+Dialog is centered on its {\it parent} unless an explicit position is given in
+{\it pos}.
+
+\wxheading{Include files}
+
+<wx/textdlg.h>
+
\membersection{::wxGetTextFromUser}\label{wxgettextfromuser}
\func{wxString}{wxGetTextFromUser}{\param{const wxString\& }{message}, \param{const wxString\& }{caption = ``Input text"},\\
event.h \
expr.h \
extdlg.h \
+ ffile.h \
file.h \
fileconf.h \
filedlg.h \
#define wxTE_READONLY 0x0010
#define wxTE_MULTILINE 0x0020
#define wxTE_PROCESS_TAB 0x0040
+// this style means to use RICHEDIT control and does something only under wxMSW
+// and Win32 and is silently ignored under all other platforms
+#define wxTE_RICH 0x0080
/*
* wxComboBox style flags
DECLARE_EVENT_TABLE()
};
+// ----------------------------------------------------------------------------
+// functions to get a string or a number from user
+// ----------------------------------------------------------------------------
+
wxString WXDLLEXPORT
wxGetTextFromUser(const wxString& message,
const wxString& caption = wxGetTextFromUserPromptStr,
int y = -1,
bool centre = TRUE);
+long WXDLLEXPORT
+wxGetNumberFromUser(const wxString& message,
+ const wxString& prompt,
+ const wxString& caption,
+ long value = 0,
+ long min = 0,
+ long max = 100,
+ wxWindow *parent = (wxWindow *)NULL,
+ const wxPoint& pos = wxDefaultPosition);
+
#endif
// __TEXTDLGH_G__
// Created: 01/02/97
// RCS-ID: $Id$
// Copyright: (c) Julian Smart
-// Licence: wxWindows licence
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_RADIOBOX_H_
#define _WX_RADIOBOX_H_
#ifdef __GNUG__
-#pragma interface "radiobox.h"
+ #pragma interface "radiobox.h"
#endif
#include "wx/control.h"
WXDLLEXPORT_DATA(extern const wxChar*) wxRadioBoxNameStr;
-// List box item
class WXDLLEXPORT wxBitmap;
class WXDLLEXPORT wxRadioBox : public wxControl
public:
wxRadioBox();
-#if WXWIN_COMPATIBILITY
- wxRadioBox(wxWindow *parent, wxFunction func, const char *title,
- int x = -1, int y = -1, int width = -1, int height = -1,
- int n = 0, char **choices = NULL,
- int majorDim = 0, long style = wxRA_HORIZONTAL, const char *name = wxRadioBoxNameStr);
-#endif // WXWIN_COMPATIBILITY
-
wxRadioBox(wxWindow *parent, wxWindowID id, const wxString& title,
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
int n = 0, const wxString choices[] = NULL,
int GetNumberOfRowsOrCols() const { return m_noRowsOrCols; }
void SetNumberOfRowsOrCols(int n) { m_noRowsOrCols = n; }
- // Implementation
+ // implementation only from now on
+ // -------------------------------
+
WXHWND *GetRadioButtons() const { return m_radioButtons; }
bool ContainsHWND(WXHWND hWnd) const;
void SendNotificationEvent();
- long MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam);
-
// get the number of buttons per column/row
- inline int GetNumVer() const;
- inline int GetNumHor() const;
+ int GetNumVer() const;
+ int GetNumHor() const;
+
+#if WXWIN_COMPATIBILITY
+ wxRadioBox(wxWindow *parent, wxFunction func, const char *title,
+ int x = -1, int y = -1, int width = -1, int height = -1,
+ int n = 0, char **choices = NULL,
+ int majorDim = 0, long style = wxRA_HORIZONTAL, const char *name = wxRadioBoxNameStr);
+#endif // WXWIN_COMPATIBILITY
protected:
void SubclassRadioButton(WXHWND hWndBtn);
wxStaticBox() { }
wxStaticBox(wxWindow *parent, wxWindowID id,
- const wxString& label,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- long style = 0,
- const wxString& name = wxStaticBoxNameStr)
+ const wxString& label,
+ const wxPoint& pos = wxDefaultPosition,
+ const wxSize& size = wxDefaultSize,
+ long style = 0,
+ const wxString& name = wxStaticBoxNameStr)
{
Create(parent, id, label, pos, size, style, name);
}
bool Create(wxWindow *parent, wxWindowID id,
- const wxString& label,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- long style = 0,
- const wxString& name = wxStaticBoxNameStr);
+ const wxString& label,
+ const wxPoint& pos = wxDefaultPosition,
+ const wxSize& size = wxDefaultSize,
+ long style = 0,
+ const wxString& name = wxStaticBoxNameStr);
// implementation from now on
// --------------------------
virtual bool AcceptsFocus() const { return FALSE; }
protected:
- virtual void DoSetSize(int x, int y,
- int width, int height,
- int sizeFlags = wxSIZE_AUTO);
virtual wxSize DoGetBestSize();
private:
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
CAPTION ""
BEGIN
- LTEXT "", -1,-2,-2,1,1 //necessary for __WATCOMC__
+#ifdef __WATCOMC__
+ LTEXT "", -1,-2,-2,1,1
+#endif
END
wxCaptionDialog DIALOG DISCARDABLE 34, 22, 144, 75
-STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
+STYLE DS_MODALFRAME | WS_CAPTION | WS_POPUP | WS_SYSMENU
CAPTION "Dummy dialog"
BEGIN
- LTEXT "", -1,-2,-2,1,1 //necessary for __WATCOMC__
+#ifdef __WATCOMC__
+ LTEXT "", -1,-2,-2,1,1
+#endif
END
//
wxNoCaptionDialog DIALOG 34, 22, 144, 75
STYLE WS_POPUP
BEGIN
- LTEXT "", -1,-2,-2,1,1 //necessary for __WATCOMC__
+#ifdef __WATCOMC__
+ LTEXT "", -1,-2,-2,1,1
+#endif
END
//////////////////////////////////////////////////////////////////////////////
file_menu->AppendSeparator();
file_menu->Append(DIALOGS_MESSAGE_BOX, "&Message box");
file_menu->Append(DIALOGS_TEXT_ENTRY, "Text &entry");
+ file_menu->Append(DIALOGS_NUM_ENTRY, "&Numeric entry\tCtrl-N");
file_menu->Append(DIALOGS_SINGLE_CHOICE, "&Single choice");
file_menu->Append(DIALOGS_EXT_DIALOG, "&Extended dialog");
file_menu->AppendSeparator();
dialog.ShowModal();
}
+void MyFrame::NumericEntry(wxCommandEvent& WXUNUSED(event) )
+{
+ long res = wxGetNumberFromUser("", "Enter a number:", "Numeric input test",
+ 50, 0, 100, this);
+
+ wxString msg;
+ int icon;
+ if ( res == -1 )
+ {
+ msg = "Invalid number entered or dialog cancelled.";
+ icon = wxICON_HAND;
+ }
+ else
+ {
+ msg.Printf("You've entered %lu", res);
+ icon = wxICON_INFORMATION;
+ }
+
+ wxMessageBox(msg, "Numeric test result", wxOK | icon, this);
+}
+
void MyFrame::TextEntry(wxCommandEvent& WXUNUSED(event) )
{
wxTextEntryDialog dialog(this, "This is a small sample\nA long, long string to test out the text entrybox",
EVT_MENU(DIALOGS_CHOOSE_FONT, MyFrame::ChooseFont)
EVT_MENU(DIALOGS_MESSAGE_BOX, MyFrame::MessageBox)
EVT_MENU(DIALOGS_TEXT_ENTRY, MyFrame::TextEntry)
+ EVT_MENU(DIALOGS_NUM_ENTRY, MyFrame::NumericEntry)
EVT_MENU(DIALOGS_SINGLE_CHOICE, MyFrame::SingleChoice)
EVT_MENU(DIALOGS_FILE_OPEN, MyFrame::FileOpen)
EVT_MENU(DIALOGS_FILE_SAVE, MyFrame::FileSave)
// Created: 04/01/98
// RCS-ID: $Id$
// Copyright: (c) Julian Smart and Markus Holzem
-// Licence: wxWindows license
+// Licence: wxWindows license
/////////////////////////////////////////////////////////////////////////////
#ifndef __DIALOGSH__
// Define a new application type
class MyApp: public wxApp
-{ public:
- bool OnInit(void);
+{
+public:
+ bool OnInit();
wxFont m_canvasFont;
wxColour m_canvasTextColour;
// Define a new frame type
class MyFrame: public wxFrame
-{ public:
- MyFrame(wxWindow *parent, const wxString& title, const wxPoint& pos,
- const wxSize& size);
+{
+public:
+ MyFrame(wxWindow *parent, const wxString& title,
+ const wxPoint& pos, const wxSize& size);
void ChooseColour(wxCommandEvent& event);
void ChooseFont(wxCommandEvent& event);
void MessageBox(wxCommandEvent& event);
void SingleChoice(wxCommandEvent& event);
void TextEntry(wxCommandEvent& event);
+ void NumericEntry(wxCommandEvent& event);
void FileOpen(wxCommandEvent& event);
void FileSave(wxCommandEvent& event);
void DirChoose(wxCommandEvent& event);
void ChooseColourGeneric(wxCommandEvent& event);
void ChooseFontGeneric(wxCommandEvent& event);
#endif
+
void OnExit(wxCommandEvent& event);
-
+
DECLARE_EVENT_TABLE()
};
class MyCanvas: public wxScrolledWindow
{
- public:
- MyCanvas(wxWindow *parent):
- wxScrolledWindow(parent)
- {
- }
- void OnPaint(wxPaintEvent& event);
-DECLARE_EVENT_TABLE()
+public:
+ MyCanvas(wxWindow *parent) : wxScrolledWindow(parent) { }
+
+ void OnPaint(wxPaintEvent& event);
+
+ DECLARE_EVENT_TABLE()
};
#define DIALOGS_DIR_CHOOSE 10
#define DIALOGS_TIP 11
#define DIALOGS_EXT_DIALOG 12
+#define DIALOGS_NUM_ENTRY 13
#endif
wxChar buf[256];
time_t timeNow;
(void)time(&timeNow);
-// wxStrftime(buf, WXSIZEOF(buf), ms_timestamp, localtime(&timeNow));
+ wxStrftime(buf, WXSIZEOF(buf), ms_timestamp, localtime(&timeNow));
str->Empty();
*str << buf << _T(": ");
if ( !m_bErrors ) {
m_aMessages.Empty();
m_aTimes.Empty();
- m_bHasMessages = TRUE;
m_bErrors = TRUE;
}
// fall through
m_aMessages.Add(szString);
m_aTimes.Add((long)t);
+ m_bHasMessages = TRUE;
break;
}
}
#include "wx/generic/textdlgg.h"
+// ----------------------------------------------------------------------------
+// private classes
+// ----------------------------------------------------------------------------
+
+class WXDLLEXPORT wxNumberEntryDialog : public wxDialog
+{
+public:
+ wxNumberEntryDialog(wxWindow *parent,
+ const wxString& message,
+ const wxString& prompt,
+ const wxString& caption,
+ long value, long min, long max,
+ const wxPoint& pos);
+
+ long GetValue() const { return m_value; }
+
+ // implementation only
+ void OnOK(wxCommandEvent& event);
+ void OnCancel(wxCommandEvent& event);
+
+protected:
+ wxTextCtrl *m_spinctrl; // TODO replace it with wxSpinCtrl once it's done
+
+ long m_value, m_min, m_max;
+
+private:
+ DECLARE_EVENT_TABLE()
+};
+
// ----------------------------------------------------------------------------
// constants
// ----------------------------------------------------------------------------
-#define wxID_TEXT 3000
+static const int wxID_TEXT = 3000;
// ============================================================================
// implementation
// ----------------------------------------------------------------------------
#if !USE_SHARED_LIBRARY
+BEGIN_EVENT_TABLE(wxNumberEntryDialog, wxDialog)
+ EVT_BUTTON(wxID_OK, wxNumberEntryDialog::OnOK)
+ EVT_BUTTON(wxID_CANCEL, wxNumberEntryDialog::OnCancel)
+END_EVENT_TABLE()
+
BEGIN_EVENT_TABLE(wxTextEntryDialog, wxDialog)
EVT_BUTTON(wxID_OK, wxTextEntryDialog::OnOK)
END_EVENT_TABLE()
EndModal(wxID_OK);
}
+// ----------------------------------------------------------------------------
+// wxNumberEntryDialog
+// ----------------------------------------------------------------------------
+
+wxNumberEntryDialog::wxNumberEntryDialog(wxWindow *parent,
+ const wxString& message,
+ const wxString& prompt,
+ const wxString& caption,
+ long value,
+ long min,
+ long max,
+ const wxPoint& pos)
+ : wxDialog(parent, -1, caption,
+ pos, wxDefaultSize,
+ wxDEFAULT_DIALOG_STYLE | wxDIALOG_MODAL)
+{
+ // init members
+ // ------------
+
+ m_value = value;
+ m_max = max;
+ m_min = min;
+
+ // calculate the sizes
+ // -------------------
+
+ wxArrayString lines;
+ wxSize sizeText = SplitTextMessage(message, &lines);
+
+ wxSize sizeBtn = GetStandardButtonSize();
+
+ int wPrompt, hPrompt;
+ GetTextExtent(prompt, &wPrompt, &hPrompt);
+
+ long wText = wxMax(2*sizeBtn.GetWidth(),
+ wxMax(wPrompt, sizeText.GetWidth()));
+ long hText = GetStandardTextHeight();
+
+ long wDialog = 5*LAYOUT_X_MARGIN + wText + wPrompt;
+ long hDialog = 2*LAYOUT_Y_MARGIN +
+ sizeText.GetHeight() * lines.GetCount() +
+ 2*LAYOUT_Y_MARGIN +
+ hText +
+ 2*LAYOUT_Y_MARGIN +
+ sizeBtn.GetHeight() +
+ 2*LAYOUT_Y_MARGIN;
+
+ // create the controls
+ // -------------------
+
+ // message
+ long x = 2*LAYOUT_X_MARGIN;
+ long y = CreateTextMessage(lines,
+ wxPoint(x, 2*LAYOUT_Y_MARGIN),
+ sizeText);
+
+ y += 2*LAYOUT_X_MARGIN;
+
+ // prompt
+ (void)new wxStaticText(this, -1, prompt,
+ wxPoint(x, y),
+ wxSize(wPrompt, hPrompt));
+
+ // spin ctrl
+ wxString valStr;
+ valStr.Printf("%lu", m_value);
+ m_spinctrl = new wxTextCtrl(this, -1, valStr,
+ wxPoint(x + wPrompt + LAYOUT_X_MARGIN, y),
+ wxSize(wText, hText));
+ y += hText + 2*LAYOUT_X_MARGIN;
+
+ // and buttons
+ CreateStandardButtons(wDialog, y, sizeBtn.GetWidth(), sizeBtn.GetHeight());
+
+ // set the dialog size and position
+ SetClientSize(wDialog, hDialog);
+ if ( pos == wxDefaultPosition )
+ {
+ // centre the dialog if no explicit position given
+ Centre(wxBOTH | wxCENTER_FRAME);
+ }
+
+ m_spinctrl->SetFocus();
+}
+
+void wxNumberEntryDialog::OnOK(wxCommandEvent& event)
+{
+ if ( (sscanf(m_spinctrl->GetValue(), "%lu", &m_value) != 1) ||
+ (m_value < m_min) || (m_value > m_max) )
+ {
+ // not a number or out of range
+ m_value = -1;
+ }
+
+ EndModal(wxID_OK);
+}
+
+void wxNumberEntryDialog::OnCancel(wxCommandEvent& event)
+{
+ m_value = -1;
+
+ EndModal(wxID_CANCEL);
+}
+
+// ----------------------------------------------------------------------------
+// global functions
+// ----------------------------------------------------------------------------
+
+// wxGetTextFromUser is in utilscmn.cpp
+
+long wxGetNumberFromUser(const wxString& msg,
+ const wxString& prompt,
+ const wxString& title,
+ long value,
+ long min,
+ long max,
+ wxWindow *parent,
+ const wxPoint& pos)
+{
+ wxNumberEntryDialog dialog(parent, msg, prompt, title,
+ value, min, max, pos);
+ (void)dialog.ShowModal();
+
+ return dialog.GetValue();
+}
#endif // __WIN95__
+#if wxUSE_OLE
+
+#ifdef __WIN16__
// for OLE, enlarge message queue to be as large as possible
int iMsg = 96;
- while (!SetMessageQueue(iMsg) && (iMsg -= 8));
+ while (!SetMessageQueue(iMsg) && (iMsg -= 8))
+ ;
+#endif // Win16
-#if wxUSE_OLE
// we need to initialize OLE library
if ( FAILED(::OleInitialize(NULL)) )
wxLogError(_("Cannot initialize OLE"));
-#endif
+#endif // wxUSE_OLE
#if wxUSE_CTL3D
if (!Ctl3dRegister(wxhInstance))
ProcessCommand (event);
}
-long wxRadioBox::MSWWindowProc(WXUINT msg, WXWPARAM wParam, WXLPARAM lParam)
-{
- long rc = 0;
- bool processed = FALSE;
-
- switch ( msg )
- {
- case WM_NCHITTEST:
- {
- int xPos = LOWORD(lParam); // horizontal position of cursor
- int yPos = HIWORD(lParam); // vertical position of cursor
-
- ScreenToClient(&xPos, &yPos);
-
- // Make sure you can drag by the top of the groupbox, but let
- // other (enclosed) controls get mouse events also
- if ( yPos < 10 )
- {
- rc = HTCLIENT;
- processed = TRUE;
- }
- }
- break;
- }
-
- if ( !processed )
- rc = wxControl::MSWWindowProc(msg, wParam, lParam);
-
- return rc;
-}
-
void wxRadioBox::SubclassRadioButton(WXHWND hWndBtn)
{
#ifdef __WIN32__
// Created: 04/01/98
// RCS-ID: $Id$
// Copyright: (c) Julian Smart and Markus Holzem
-// Licence: wxWindows license
+// Licence: wxWindows license
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
return wxSize(wBox, hBox);
}
-void wxStaticBox::DoSetSize(int x, int y, int width, int height, int sizeFlags)
-{
- wxControl::DoSetSize(x, y, width, height, sizeFlags);
-
- return;
-
- // the static box should always be on the bottom of the Z-order, otherwise
- // it may hide controls which are positioned inside it
- if ( !::SetWindowPos(GetHwnd(), HWND_TOP, 0, 0, 0, 0,
- SWP_NOMOVE | SWP_NOSIZE) )
- {
- wxLogLastError(_T("SetWindowPos"));
- }
-}
-
WXHBRUSH wxStaticBox::OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor,
- WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
+ WXUINT message,
+ WXWPARAM wParam,
+ WXLPARAM lParam)
{
#if wxUSE_CTL3D
if ( m_useCtl3D )
// Alternatively, just make sure that wxStaticBox is always at the back! There are probably
// few other circumstances where it matters about child clipping. But what about painting onto
// to panel, inside a groupbox? Doesn't appear, because the box wipes it out.
- wxWindow *parent = 0; //GetParent();
- if ( parent && parent->GetHWND() && (::GetWindowLong((HWND) parent->GetHWND(), GWL_STYLE) & WS_CLIPCHILDREN) )
- {
+ wxWindow *parent = GetParent();
+ if ( parent && parent->GetHWND() && (::GetWindowLong((HWND) parent->GetHWND(), GWL_STYLE) & WS_CLIPCHILDREN) )
+ {
// TODO: May in fact need to generate a paint event for inside this
// control's rectangle, otherwise all controls are going to be clipped -
// ugh.
::FillRect ((HDC) event.GetDC()->GetHDC(), &rect, hBrush);
::DeleteObject(hBrush);
::SetMapMode((HDC) event.GetDC()->GetHDC(), mode);
- }
- else
- {
- event.Skip();
- }
+ }
+ else
+ {
+ event.Skip();
+ }
}
long wxStaticBox::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
const wxChar *windowClass = _T("EDIT");
#if wxUSE_RICHEDIT
- // multiline edit controls are RICHEDITs except for those which have a
- // simple border (VZ: why??)
- if ( (m_windowStyle & wxTE_MULTILINE) &&
- !(m_windowStyle & wxSIMPLE_BORDER) )
+ if ( m_windowStyle & wxTE_RICH )
{
msStyle |= ES_AUTOVSCROLL;
m_isRich = TRUE;