c937bcac0f
Implemented ellipsization in the generic, GTK and both OS X Carbon and Cocoa versions but it currently doesn't work well in GTK as it changes the item alignment unconditionally, this will need to be fixed later. The behaviour for the columns is currently inconsistent between ports too: under MSW they (natively) use wxELLIPSIZE_END, under GTK -- wxELLIPSIZE_NONE and under OS X the same ellipsization mode as the column contents, i.e. wxELLIPSIZE_MIDDLE by default. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62433 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
202 lines
6.6 KiB
C++
202 lines
6.6 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: wx/control.h
|
|
// Purpose: wxControl common interface
|
|
// Author: Vadim Zeitlin
|
|
// Modified by:
|
|
// Created: 26.07.99
|
|
// RCS-ID: $Id$
|
|
// Copyright: (c) wxWidgets team
|
|
// Licence: wxWindows licence
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef _WX_CONTROL_H_BASE_
|
|
#define _WX_CONTROL_H_BASE_
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// headers
|
|
// ----------------------------------------------------------------------------
|
|
|
|
#include "wx/defs.h"
|
|
|
|
#if wxUSE_CONTROLS
|
|
|
|
#include "wx/window.h" // base class
|
|
|
|
extern WXDLLIMPEXP_DATA_CORE(const char) wxControlNameStr[];
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Ellipsize() constants
|
|
// ----------------------------------------------------------------------------
|
|
|
|
enum wxEllipsizeFlags
|
|
{
|
|
wxELLIPSIZE_FLAGS_NONE = 0,
|
|
wxELLIPSIZE_FLAGS_PROCESS_MNEMONICS = 1,
|
|
wxELLIPSIZE_FLAGS_EXPAND_TABS = 2,
|
|
|
|
wxELLIPSIZE_FLAGS_DEFAULT = wxELLIPSIZE_FLAGS_PROCESS_MNEMONICS |
|
|
wxELLIPSIZE_FLAGS_EXPAND_TABS
|
|
};
|
|
|
|
// NB: Don't change the order of these values, they're the same as in
|
|
// PangoEllipsizeMode enum.
|
|
enum wxEllipsizeMode
|
|
{
|
|
wxELLIPSIZE_NONE,
|
|
wxELLIPSIZE_START,
|
|
wxELLIPSIZE_MIDDLE,
|
|
wxELLIPSIZE_END
|
|
};
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// wxControl is the base class for all controls
|
|
// ----------------------------------------------------------------------------
|
|
|
|
class WXDLLIMPEXP_CORE wxControlBase : public wxWindow
|
|
{
|
|
public:
|
|
wxControlBase() { }
|
|
|
|
virtual ~wxControlBase();
|
|
|
|
// Create() function adds the validator parameter
|
|
bool Create(wxWindow *parent, wxWindowID id,
|
|
const wxPoint& pos = wxDefaultPosition,
|
|
const wxSize& size = wxDefaultSize,
|
|
long style = 0,
|
|
const wxValidator& validator = wxDefaultValidator,
|
|
const wxString& name = wxControlNameStr);
|
|
|
|
// get the control alignment (left/right/centre, top/bottom/centre)
|
|
int GetAlignment() const { return m_windowStyle & wxALIGN_MASK; }
|
|
|
|
virtual void SetLabel(const wxString& label)
|
|
{
|
|
m_labelOrig = label;
|
|
|
|
InvalidateBestSize();
|
|
|
|
wxWindow::SetLabel(label);
|
|
}
|
|
|
|
virtual wxString GetLabel() const
|
|
{
|
|
// return the original string, as it was passed to SetLabel()
|
|
// (i.e. with wx-style mnemonics)
|
|
return m_labelOrig;
|
|
}
|
|
|
|
// get just the text of the label, without mnemonic characters ('&')
|
|
wxString GetLabelText() const { return GetLabelText(GetLabel()); }
|
|
|
|
void SetLabelText(const wxString& text)
|
|
{
|
|
SetLabel(EscapeMnemonics(text));
|
|
}
|
|
|
|
// controls by default inherit the colours of their parents, if a
|
|
// particular control class doesn't want to do it, it can override
|
|
// ShouldInheritColours() to return false
|
|
virtual bool ShouldInheritColours() const { return true; }
|
|
|
|
|
|
// WARNING: this doesn't work for all controls nor all platforms!
|
|
//
|
|
// simulates the event of given type (i.e. wxButton::Command() is just as
|
|
// if the button was clicked)
|
|
virtual void Command(wxCommandEvent &event);
|
|
|
|
virtual bool SetFont(const wxFont& font);
|
|
|
|
// wxControl-specific processing after processing the update event
|
|
virtual void DoUpdateWindowUI(wxUpdateUIEvent& event);
|
|
|
|
|
|
|
|
// static utilities
|
|
// ----------------
|
|
|
|
// replaces parts of the (multiline) string with ellipsis if needed
|
|
static wxString Ellipsize(const wxString& label, const wxDC& dc,
|
|
wxEllipsizeMode mode, int maxWidth,
|
|
int flags = wxELLIPSIZE_FLAGS_DEFAULT);
|
|
|
|
// get the string without mnemonic characters ('&')
|
|
static wxString GetLabelText(const wxString& label);
|
|
|
|
// removes the mnemonics characters
|
|
static wxString RemoveMnemonics(const wxString& str);
|
|
|
|
// escapes (by doubling them) the mnemonics
|
|
static wxString EscapeMnemonics(const wxString& str);
|
|
|
|
// return the accel index in the string or -1 if none and puts the modified
|
|
// string into second parameter if non NULL
|
|
static int FindAccelIndex(const wxString& label,
|
|
wxString *labelOnly = NULL);
|
|
|
|
// this is a helper for the derived class GetClassDefaultAttributes()
|
|
// implementation: it returns the right colours for the classes which
|
|
// contain something else (e.g. wxListBox, wxTextCtrl, ...) instead of
|
|
// being simple controls (such as wxButton, wxCheckBox, ...)
|
|
static wxVisualAttributes
|
|
GetCompositeControlsDefaultAttributes(wxWindowVariant variant);
|
|
|
|
protected:
|
|
// choose the default border for this window
|
|
virtual wxBorder GetDefaultBorder() const;
|
|
|
|
// creates the control (calls wxWindowBase::CreateBase inside) and adds it
|
|
// to the list of parents children
|
|
bool CreateControl(wxWindowBase *parent,
|
|
wxWindowID id,
|
|
const wxPoint& pos,
|
|
const wxSize& size,
|
|
long style,
|
|
const wxValidator& validator,
|
|
const wxString& name);
|
|
|
|
// initialize the common fields of wxCommandEvent
|
|
void InitCommandEvent(wxCommandEvent& event) const;
|
|
|
|
// Ellipsize() helper:
|
|
static wxString DoEllipsizeSingleLine(const wxString& label, const wxDC& dc,
|
|
wxEllipsizeMode mode, int maxWidth,
|
|
int replacementWidth, int marginWidth);
|
|
|
|
// this field contains the label in wx format, i.e. with '&' mnemonics
|
|
wxString m_labelOrig;
|
|
|
|
wxDECLARE_NO_COPY_CLASS(wxControlBase);
|
|
};
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// include platform-dependent wxControl declarations
|
|
// ----------------------------------------------------------------------------
|
|
|
|
#if defined(__WXUNIVERSAL__)
|
|
#include "wx/univ/control.h"
|
|
#elif defined(__WXPALMOS__)
|
|
#include "wx/palmos/control.h"
|
|
#elif defined(__WXMSW__)
|
|
#include "wx/msw/control.h"
|
|
#elif defined(__WXMOTIF__)
|
|
#include "wx/motif/control.h"
|
|
#elif defined(__WXGTK20__)
|
|
#include "wx/gtk/control.h"
|
|
#elif defined(__WXGTK__)
|
|
#include "wx/gtk1/control.h"
|
|
#elif defined(__WXMAC__)
|
|
#include "wx/osx/control.h"
|
|
#elif defined(__WXCOCOA__)
|
|
#include "wx/cocoa/control.h"
|
|
#elif defined(__WXPM__)
|
|
#include "wx/os2/control.h"
|
|
#endif
|
|
|
|
#endif // wxUSE_CONTROLS
|
|
|
|
#endif
|
|
// _WX_CONTROL_H_BASE_
|