Files
wxWidgets/src/generic/textdlgg.cpp
Robert Roebling acf2ac3757 Applied modified form of the StdButtonSize patch.
Tested on GTK2, MSW and Mac.
  Adapted various generic dialogs to stretch the
    button sizer so that the buttons don't end
    up centered but right aligned.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@31198 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2004-12-31 18:57:25 +00:00

203 lines
5.8 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// Name: textdlgg.cpp
// Purpose: wxTextEntryDialog
// Author: Julian Smart
// Modified by:
// Created: 04/01/98
// RCS-ID: $Id$
// Copyright: (c) Julian Smart
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// ============================================================================
// declarations
// ============================================================================
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma implementation "textdlgg.h"
#endif
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#if wxUSE_TEXTDLG
#ifndef WX_PRECOMP
#include "wx/utils.h"
#include "wx/dialog.h"
#include "wx/button.h"
#include "wx/stattext.h"
#include "wx/textctrl.h"
#include "wx/intl.h"
#include "wx/sizer.h"
#endif
#if wxUSE_STATLINE
#include "wx/statline.h"
#endif
#include "wx/generic/textdlgg.h"
// ----------------------------------------------------------------------------
// constants
// ----------------------------------------------------------------------------
static const int wxID_TEXT = 3000;
// ---------------------------------------------------------------------------
// macros
// ---------------------------------------------------------------------------
/* Macro for avoiding #ifdefs when value have to be different depending on size of
device we display on - take it from something like wxDesktopPolicy in the future
*/
#if defined(__SMARTPHONE__)
#define wxLARGESMALL(large,small) small
#else
#define wxLARGESMALL(large,small) large
#endif
// ============================================================================
// implementation
// ============================================================================
// ----------------------------------------------------------------------------
// wxTextEntryDialog
// ----------------------------------------------------------------------------
BEGIN_EVENT_TABLE(wxTextEntryDialog, wxDialog)
EVT_BUTTON(wxID_OK, wxTextEntryDialog::OnOK)
END_EVENT_TABLE()
IMPLEMENT_CLASS(wxTextEntryDialog, wxDialog)
wxTextEntryDialog::wxTextEntryDialog(wxWindow *parent,
const wxString& message,
const wxString& caption,
const wxString& value,
long style,
const wxPoint& pos)
: wxDialog(parent, wxID_ANY, caption, pos, wxDefaultSize,
wxDEFAULT_DIALOG_STYLE | wxDIALOG_MODAL),
m_value(value)
{
m_dialogStyle = style;
m_value = value;
wxBeginBusyCursor();
wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL );
// 1) text message
topsizer->Add( CreateTextSizer( message ), 0, wxALL, wxLARGESMALL(10,0) );
// 2) text ctrl
m_textctrl = new wxTextCtrl(this, wxID_TEXT, value,
wxDefaultPosition, wxSize(300, wxDefaultCoord),
style & ~wxTextEntryDialogStyle);
topsizer->Add( m_textctrl, 1, wxEXPAND | wxLEFT|wxRIGHT, wxLARGESMALL(15,0) );
#if wxUSE_VALIDATORS
wxTextValidator validator( wxFILTER_NONE, &m_value );
m_textctrl->SetValidator( validator );
#endif
// wxUSE_VALIDATORS
// smart phones does not support or do not waste space for wxButtons
#ifdef __SMARTPHONE__
SetRightMenu(wxID_CANCEL, _("Cancel"));
#else // __SMARTPHONE__/!__SMARTPHONE__
#if wxUSE_STATLINE
// 3) static line
topsizer->Add( new wxStaticLine( this, wxID_ANY ), 0, wxEXPAND | wxLEFT|wxRIGHT|wxTOP, 10 );
#endif
// 4) buttons
topsizer->Add( CreateButtonSizer( style ), 0, wxEXPAND | wxALL, 10 );
#endif // !__SMARTPHONE__
SetAutoLayout( true );
SetSizer( topsizer );
topsizer->SetSizeHints( this );
topsizer->Fit( this );
if ( style & wxCENTRE )
Centre( wxBOTH );
m_textctrl->SetSelection(-1, -1);
m_textctrl->SetFocus();
wxEndBusyCursor();
}
void wxTextEntryDialog::OnOK(wxCommandEvent& WXUNUSED(event) )
{
#if wxUSE_VALIDATORS
if( Validate() && TransferDataFromWindow() )
{
EndModal( wxID_OK );
}
#else
m_value = m_textctrl->GetValue();
EndModal(wxID_OK);
#endif
// wxUSE_VALIDATORS
}
void wxTextEntryDialog::SetValue(const wxString& val)
{
m_value = val;
m_textctrl->SetValue(val);
}
#if wxUSE_VALIDATORS
void wxTextEntryDialog::SetTextValidator( long style )
{
wxTextValidator validator( style, &m_value );
m_textctrl->SetValidator( validator );
}
void wxTextEntryDialog::SetTextValidator( wxTextValidator& validator )
{
m_textctrl->SetValidator( validator );
}
#endif
// wxUSE_VALIDATORS
// ----------------------------------------------------------------------------
// wxPasswordEntryDialog
// ----------------------------------------------------------------------------
IMPLEMENT_CLASS(wxPasswordEntryDialog, wxTextEntryDialog)
wxPasswordEntryDialog::wxPasswordEntryDialog(wxWindow *parent,
const wxString& message,
const wxString& caption,
const wxString& value,
long style,
const wxPoint& pos)
: wxTextEntryDialog(parent, message, caption, value,
style | wxTE_PASSWORD, pos)
{
// Only change from wxTextEntryDialog is the password style
}
#endif // wxUSE_TEXTDLG