Check whether we should ignore the event and mark the control as being dirty if necessary in a virtual method, which can be defined in wxTextEntry and overridden by wxTextCtrl, instead of doing it in GTK callback itself. This will allow to reuse wxTextEntry callback for wxTextCtrl too in the upcoming commits. No real changes so far.
118 lines
4.0 KiB
C++
118 lines
4.0 KiB
C++
///////////////////////////////////////////////////////////////////////////////
|
|
// Name: wx/gtk/textentry.h
|
|
// Purpose: wxGTK-specific wxTextEntry implementation
|
|
// Author: Vadim Zeitlin
|
|
// Created: 2007-09-24
|
|
// Copyright: (c) 2007 Vadim Zeitlin <vadim@wxwidgets.org>
|
|
// Licence: wxWindows licence
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef _WX_GTK_TEXTENTRY_H_
|
|
#define _WX_GTK_TEXTENTRY_H_
|
|
|
|
typedef struct _GdkEventKey GdkEventKey;
|
|
typedef struct _GtkEditable GtkEditable;
|
|
typedef struct _GtkEntry GtkEntry;
|
|
|
|
class wxTextAutoCompleteData; // private class used only by wxTextEntry itself
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// wxTextEntry: roughly corresponds to GtkEditable
|
|
// ----------------------------------------------------------------------------
|
|
|
|
class WXDLLIMPEXP_CORE wxTextEntry : public wxTextEntryBase
|
|
{
|
|
public:
|
|
wxTextEntry();
|
|
virtual ~wxTextEntry();
|
|
|
|
// implement wxTextEntryBase pure virtual methods
|
|
virtual void WriteText(const wxString& text) wxOVERRIDE;
|
|
virtual void Remove(long from, long to) wxOVERRIDE;
|
|
|
|
virtual void Copy() wxOVERRIDE;
|
|
virtual void Cut() wxOVERRIDE;
|
|
virtual void Paste() wxOVERRIDE;
|
|
|
|
virtual void Undo() wxOVERRIDE;
|
|
virtual void Redo() wxOVERRIDE;
|
|
virtual bool CanUndo() const wxOVERRIDE;
|
|
virtual bool CanRedo() const wxOVERRIDE;
|
|
|
|
virtual void SetInsertionPoint(long pos) wxOVERRIDE;
|
|
virtual long GetInsertionPoint() const wxOVERRIDE;
|
|
virtual long GetLastPosition() const wxOVERRIDE;
|
|
|
|
virtual void SetSelection(long from, long to) wxOVERRIDE;
|
|
virtual void GetSelection(long *from, long *to) const wxOVERRIDE;
|
|
|
|
virtual bool IsEditable() const wxOVERRIDE;
|
|
virtual void SetEditable(bool editable) wxOVERRIDE;
|
|
|
|
virtual void SetMaxLength(unsigned long len) wxOVERRIDE;
|
|
virtual void ForceUpper() wxOVERRIDE;
|
|
|
|
#ifdef __WXGTK3__
|
|
virtual bool SetHint(const wxString& hint) wxOVERRIDE;
|
|
virtual wxString GetHint() const wxOVERRIDE;
|
|
#endif
|
|
|
|
// implementation only from now on
|
|
void SendMaxLenEvent();
|
|
bool GTKEntryOnInsertText(const char* text);
|
|
bool GTKIsUpperCase() const { return m_isUpperCase; }
|
|
|
|
// Called from "changed" signal handler for GtkEntry.
|
|
//
|
|
// By default just generates a wxEVT_TEXT, but overridden to do more things
|
|
// in wxTextCtrl.
|
|
virtual void GTKOnTextChanged() { SendTextUpdatedEvent(); }
|
|
|
|
protected:
|
|
// This method must be called from the derived class Create() to connect
|
|
// the handlers for the clipboard (cut/copy/paste) events.
|
|
void GTKConnectClipboardSignals(GtkWidget* entry);
|
|
|
|
// And this one to connect "insert-text" signal.
|
|
void GTKConnectInsertTextSignal(GtkEntry* entry);
|
|
|
|
|
|
virtual void DoSetValue(const wxString& value, int flags) wxOVERRIDE;
|
|
virtual wxString DoGetValue() const wxOVERRIDE;
|
|
|
|
// margins functions
|
|
virtual bool DoSetMargins(const wxPoint& pt) wxOVERRIDE;
|
|
virtual wxPoint DoGetMargins() const wxOVERRIDE;
|
|
|
|
virtual bool DoAutoCompleteStrings(const wxArrayString& choices) wxOVERRIDE;
|
|
virtual bool DoAutoCompleteCustom(wxTextCompleter *completer) wxOVERRIDE;
|
|
|
|
// Override the base class method to use GtkEntry IM context.
|
|
virtual int GTKIMFilterKeypress(GdkEventKey* event) const;
|
|
|
|
static int GTKGetEntryTextLength(GtkEntry* entry);
|
|
|
|
private:
|
|
// implement this to return the associated GtkEntry or another widget
|
|
// implementing GtkEditable
|
|
virtual GtkEditable *GetEditable() const = 0;
|
|
|
|
// implement this to return the associated GtkEntry
|
|
virtual GtkEntry *GetEntry() const = 0;
|
|
|
|
// Various auto-completion-related stuff, only used if any of AutoComplete()
|
|
// methods are called.
|
|
wxTextAutoCompleteData *m_autoCompleteData;
|
|
|
|
// It needs to call our GetEntry() method.
|
|
friend class wxTextAutoCompleteData;
|
|
|
|
bool m_isUpperCase;
|
|
};
|
|
|
|
// We don't need the generic version.
|
|
#define wxHAS_NATIVE_TEXT_FORCEUPPER
|
|
|
|
#endif // _WX_GTK_TEXTENTRY_H_
|
|
|