1. added wxGetNumberFromUser (to textdlgg.cpp and dialogs sample)

2. wxTE_RICH style added to wxMSW, the text controls don't use RICHEDIT
   class by default any more
3. wxRadioBox doesn't generate button events any more (grrr...)
4. commented out code in log.cpp restored and a bug corrected


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3088 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
1999-07-22 23:39:47 +00:00
parent 953704c1c7
commit c49245f8ba
15 changed files with 302 additions and 112 deletions

View File

@@ -323,7 +323,7 @@ void wxLog::TimeStamp(wxString *str)
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(": ");
@@ -577,7 +577,6 @@ void wxLogGui::DoLog(wxLogLevel level, const wxChar *szString, time_t t)
if ( !m_bErrors ) {
m_aMessages.Empty();
m_aTimes.Empty();
m_bHasMessages = TRUE;
m_bErrors = TRUE;
}
// fall through
@@ -590,6 +589,7 @@ void wxLogGui::DoLog(wxLogLevel level, const wxChar *szString, time_t t)
m_aMessages.Add(szString);
m_aTimes.Add((long)t);
m_bHasMessages = TRUE;
break;
}
}

View File

@@ -45,11 +45,40 @@
#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
@@ -60,6 +89,11 @@
// ----------------------------------------------------------------------------
#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()
@@ -135,3 +169,128 @@ void wxTextEntryDialog::OnOK(wxCommandEvent& WXUNUSED(event) )
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();
}

View File

@@ -204,15 +204,19 @@ bool wxApp::Initialize()
#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))

View File

@@ -682,37 +682,6 @@ void wxRadioBox::Command (wxCommandEvent & event)
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__

View File

@@ -6,7 +6,7 @@
// Created: 04/01/98
// RCS-ID: $Id$
// Copyright: (c) Julian Smart and Markus Holzem
// Licence: wxWindows license
// Licence: wxWindows license
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
@@ -113,23 +113,10 @@ wxSize wxStaticBox::DoGetBestSize()
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 )
@@ -174,9 +161,9 @@ void wxStaticBox::OnEraseBackground(wxEraseEvent& event)
// 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.
@@ -189,11 +176,11 @@ void wxStaticBox::OnEraseBackground(wxEraseEvent& event)
::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)

View File

@@ -164,10 +164,7 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id,
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;