void wxTextEntry::Cut() { wxCHECK_RET( GetTextPeer(), "Must create the control first" ); if (CanCut()) GetTextPeer()->Cut() ; }
bool wxTextCtrl::SetStyle(long start, long end, const wxTextAttr& style) { if (GetTextPeer()) GetTextPeer()->SetStyle( start , end , style ) ; return true ; }
bool wxTextEntry::CanRedo() const { if ( !IsEditable() ) return false ; wxCHECK_MSG( GetTextPeer(), false, "Must create the control first" ); return GetTextPeer()->CanRedo() ; }
bool wxTextCtrl::SetHint(const wxString& hint) { m_hintString = hint; if ( GetTextPeer() && GetTextPeer()->SetHint(hint) ) return true; return false; }
void wxTextEntry::SetEditable(bool editable) { if ( editable == m_editable ) return; m_editable = editable ; wxCHECK_RET( GetTextPeer(), "Must create the control first" ); GetTextPeer()->SetEditable( editable ) ; }
void wxTextEntry::Clear() { wxCHECK_RET( GetTextPeer(), "Must create the control first" ); { EventsSuppressor noevents(this); GetTextPeer()->Clear(); } SendTextUpdatedEventIfAllowed(); }
void wxTextEntry::WriteText(const wxString& str) { wxCHECK_RET( GetTextPeer(), "Must create the control first" ); { EventsSuppressor noevents(this); GetTextPeer()->WriteText( str ); } SendTextUpdatedEventIfAllowed(); }
void wxTextEntry::Remove(long from, long to) { wxCHECK_RET( GetTextPeer(), "Must create the control first" ); { EventsSuppressor noevents(this); GetTextPeer()->Remove( from , to ); } SendTextUpdatedEventIfAllowed(); }
void wxTextCtrl::OnContextMenu(wxContextMenuEvent& event) { if ( GetTextPeer()->HasOwnContextMenu() ) { event.Skip() ; return ; } #if wxUSE_MENUS if (m_privateContextMenu == NULL) { m_privateContextMenu = new wxMenu; m_privateContextMenu->Append(wxID_UNDO, _("&Undo")); m_privateContextMenu->Append(wxID_REDO, _("&Redo")); m_privateContextMenu->AppendSeparator(); m_privateContextMenu->Append(wxID_CUT, _("Cu&t")); m_privateContextMenu->Append(wxID_COPY, _("&Copy")); m_privateContextMenu->Append(wxID_PASTE, _("&Paste")); m_privateContextMenu->Append(wxID_CLEAR, _("&Delete")); m_privateContextMenu->AppendSeparator(); m_privateContextMenu->Append(wxID_SELECTALL, _("Select &All")); } PopupMenu(m_privateContextMenu); #endif }
bool wxTextCtrl::MacSetupCursor( const wxPoint& pt ) { if ( !GetTextPeer()->SetupCursor( pt ) ) return wxWindow::MacSetupCursor( pt ) ; else return true ; }
wxSize wxTextCtrl::DoGetBestSize() const { if (GetTextPeer()) { wxSize size = GetTextPeer()->GetBestSize(); if (size.x > 0 && size.y > 0) return size; } int wText, hText; // these are the numbers from the HIG: // we reduce them by the borders first wText = 100 ; switch ( m_windowVariant ) { case wxWINDOW_VARIANT_NORMAL : hText = 22 - 6 ; break ; case wxWINDOW_VARIANT_SMALL : hText = 19 - 6 ; break ; case wxWINDOW_VARIANT_MINI : hText = 15 - 6 ; break ; default : hText = 22 - 6; break ; } // as the above numbers have some free space around the text // we get 5 lines like this anyway if ( m_windowStyle & wxTE_MULTILINE ) hText *= 5 ; if ( !HasFlag(wxNO_BORDER) ) hText += 6 ; return wxSize(wText, hText); }
bool wxTextCtrl::Create( wxWindow *parent, wxWindowID id, const wxString& str, const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator, const wxString& name ) { DontCreatePeer(); m_editable = true ; if ( ! (style & wxNO_BORDER) ) style = (style & ~wxBORDER_MASK) | wxSUNKEN_BORDER ; if ( !wxTextCtrlBase::Create( parent, id, pos, size, style & ~(wxHSCROLL | wxVSCROLL), validator, name ) ) return false; if ( m_windowStyle & wxTE_MULTILINE ) { // always turn on this style for multi-line controls m_windowStyle |= wxTE_PROCESS_ENTER; style |= wxTE_PROCESS_ENTER ; } SetPeer(wxWidgetImpl::CreateTextControl( this, GetParent(), GetId(), str, pos, size, style, GetExtraStyle() )); MacPostControlCreate(pos, size) ; #if wxOSX_USE_COCOA // under carbon everything can already be set before the MacPostControlCreate embedding takes place // but under cocoa for single line textfields this only works after everything has been set up GetTextPeer()->SetStringValue(str); #endif // only now the embedding is correct and we can do a positioning update MacSuperChangedPosition() ; if ( m_windowStyle & wxTE_READONLY) SetEditable( false ) ; SetCursor( wxCursor( wxCURSOR_IBEAM ) ) ; return true; }
void wxTextCtrl::OSXEnableAutomaticDashSubstitution(bool enable) { GetTextPeer()->EnableAutomaticDashSubstitution(enable); }
void wxTextEntry::SetSelection(long from, long to) { wxCHECK_RET( GetTextPeer(), "Must create the control first" ); GetTextPeer()->SetSelection( from , to ) ; }
wxTextPos wxTextEntry::GetLastPosition() const { wxCHECK_MSG( GetTextPeer(), -1, "Must create the control first" ); return GetTextPeer()->GetLastPosition() ; }
void wxTextCtrl::OnChar(wxKeyEvent& event) { int key = event.GetKeyCode() ; bool eat_key = false ; long from, to; if ( !IsEditable() && !event.IsKeyInCategory(WXK_CATEGORY_ARROW | WXK_CATEGORY_TAB) && !( key == WXK_RETURN && ( (m_windowStyle & wxTE_PROCESS_ENTER) || (m_windowStyle & wxTE_MULTILINE) ) ) // && key != WXK_PAGEUP && key != WXK_PAGEDOWN && key != WXK_HOME && key != WXK_END ) { // eat it return ; } if ( !GetTextPeer()->CanClipMaxLength() ) { // Check if we have reached the max # of chars (if it is set), but still // allow navigation and deletion GetSelection( &from, &to ); if ( !IsMultiLine() && m_maxLength && GetValue().length() >= m_maxLength && !event.IsKeyInCategory(WXK_CATEGORY_ARROW | WXK_CATEGORY_TAB | WXK_CATEGORY_CUT) && !( key == WXK_RETURN && (m_windowStyle & wxTE_PROCESS_ENTER) ) && from == to ) { // eat it, we don't want to add more than allowed # of characters // TODO: generate EVT_TEXT_MAXLEN() return; } } // assume that any key not processed yet is going to modify the control m_dirty = true; switch ( key ) { case WXK_RETURN: if (m_windowStyle & wxTE_PROCESS_ENTER) { wxCommandEvent event(wxEVT_TEXT_ENTER, m_windowId); event.SetEventObject( this ); event.SetString( GetValue() ); if ( HandleWindowEvent(event) ) return; } if ( !(m_windowStyle & wxTE_MULTILINE) ) { wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow); if ( tlw && tlw->GetDefaultItem() ) { wxButton *def = wxDynamicCast(tlw->GetDefaultItem(), wxButton); if ( def && def->IsEnabled() ) { wxCommandEvent event(wxEVT_BUTTON, def->GetId() ); event.SetEventObject(def); def->Command(event); return ; } } // this will make wxWidgets eat the ENTER key so that // we actually prevent line wrapping in a single line text control eat_key = true; } break; case WXK_TAB: if ( !(m_windowStyle & wxTE_PROCESS_TAB)) { int flags = 0; if (!event.ShiftDown()) flags |= wxNavigationKeyEvent::IsForward ; if (event.ControlDown()) flags |= wxNavigationKeyEvent::WinChange ; Navigate(flags); return; } else { // This is necessary (don't know why); // otherwise the tab will not be inserted. WriteText(wxT("\t")); eat_key = true; } break; default: break; } if (!eat_key) { // perform keystroke handling event.Skip(true) ; } // osx_cocoa sends its event upon insertText #if wxOSX_USE_CARBON if ( ( key >= 0x20 && key < WXK_START ) || ( key >= WXK_NUMPAD0 && key <= WXK_DIVIDE ) || key == WXK_RETURN || key == WXK_DELETE || key == WXK_BACK) { wxCommandEvent event1(wxEVT_TEXT, m_windowId); event1.SetEventObject( this ); wxPostEvent( GetEventHandler(), event1 ); } #endif }
bool wxTextEntry::SetHint(const wxString& hint) { m_hintString = hint; return GetTextPeer() && GetTextPeer()->SetHint(hint); }
int wxTextCtrl::GetLineLength(long lineNo) const { return GetTextPeer()->GetLineLength(lineNo) ; }
wxString wxTextCtrl::GetLineText(long lineNo) const { return GetTextPeer()->GetLineText(lineNo) ; }
bool wxTextCtrl::PositionToXY(long pos, long *x, long *y) const { return GetTextPeer()->PositionToXY( pos , x , y ) ; }
void wxTextCtrl::ShowPosition(long pos) { return GetTextPeer()->ShowPosition(pos) ; }
int wxTextCtrl::GetNumberOfLines() const { return GetTextPeer()->GetNumberOfLines() ; }
long wxTextCtrl::XYToPosition(long x, long y) const { return GetTextPeer()->XYToPosition( x , y ) ; }
bool wxTextCtrl::GetStyle(long position, wxTextAttr& style) { return GetTextPeer()->GetStyle(position, style); }
wxString wxTextEntry::DoGetValue() const { wxCHECK_MSG( GetTextPeer(), wxString(), "Must create the control first" ); return GetTextPeer()->GetStringValue() ; }
void wxTextEntry::GetSelection(long* from, long* to) const { wxCHECK_RET( GetTextPeer(), "Must create the control first" ); GetTextPeer()->GetSelection( from , to ) ; }
void wxTextCtrl::MacCheckSpelling(bool check) { GetTextPeer()->CheckSpelling(check); }
void wxTextEntry::SetMaxLength(unsigned long len) { if ( GetTextPeer()->CanClipMaxLength() ) GetTextPeer()->SetMaxLength(len); m_maxLength = len ; }