From: Robert Roebling Date: Sun, 7 Apr 2002 20:46:55 +0000 (+0000) Subject: Further work on wxTextCtrl. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/40de795fb9d55f137a94ff607db9641a7383b558?ds=inline Further work on wxTextCtrl. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15001 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/mobile/Makefile.in b/mobile/Makefile.in index 8ef3b38439..98b2df0eae 100644 --- a/mobile/Makefile.in +++ b/mobile/Makefile.in @@ -5,7 +5,7 @@ MOBILE_SUBDIRS=@MOBILE_SUBDIRS@ all: - @for d in $(SAMPLES_SUBDIRS); do (cd $$d && $(MAKE)); done + @for d in $(MOBILE_SUBDIRS); do (cd $$d && $(MAKE)); done clean: - @for d in $(SAMPLES_SUBDIRS); do (cd $$d && $(MAKE) clean); done + @for d in $(MOBILE_SUBDIRS); do (cd $$d && $(MAKE) clean); done diff --git a/mobile/wxedit/wxedit.cpp b/mobile/wxedit/wxedit.cpp index c27370b10e..98c5d0bbee 100644 --- a/mobile/wxedit/wxedit.cpp +++ b/mobile/wxedit/wxedit.cpp @@ -16,6 +16,8 @@ #pragma hdrstop #endif +#include "wx/filename.h" + // Include private headers #include "wxedit.h" @@ -74,7 +76,39 @@ void MyFrame::OnOpen( wxCommandEvent &event ) "Text file (*.txt)|*.txt|" "Any file (*)|*", wxOPEN|wxFILE_MUST_EXIST ); - dialog.ShowModal(); + if (dialog.ShowModal() == wxID_OK) + { + m_text->Clear(); + +#ifdef __WXX11__ + wxFileName fname( dialog.GetPath() ); + if ((fname.GetExt() == "cpp") || + (fname.GetExt() == "c") || + (fname.GetExt() == "h") || + (fname.GetExt() == "cxx") || + (fname.GetExt() == "hxx")) + { + m_text->SetLanguage( wxSOURCE_LANG_CPP ); + } + else + if (fname.GetExt() == "py") + { + m_text->SetLanguage( wxSOURCE_LANG_PYTHON ); + } + else + if ((fname.GetExt() == "pl") || + (fname.GetExt() == "pm")) + { + m_text->SetLanguage( wxSOURCE_LANG_PYTHON ); + } + else + { + m_text->SetLanguage( wxSOURCE_LANG_NONE ); + } +#endif + + m_text->LoadFile( dialog.GetPath() ); + } } void MyFrame::OnSave( wxCommandEvent &event ) diff --git a/src/x11/textctrl.cpp b/src/x11/textctrl.cpp index 9a0718f33c..073f79466c 100644 --- a/src/x11/textctrl.cpp +++ b/src/x11/textctrl.cpp @@ -221,6 +221,8 @@ bool wxTextCtrl::Create( wxWindow *parent, SetCursor( wxCursor( wxCURSOR_IBEAM ) ); + m_editable = ((m_windowStyle & wxTE_READONLY) == 0); + if (HasFlag(wxTE_PASSWORD)) m_sourceFont = wxFont( 12, wxMODERN, wxNORMAL, wxNORMAL ); else @@ -983,7 +985,20 @@ bool wxTextCtrl::Enable( bool enable ) bool wxTextCtrl::SetFont(const wxFont& font) { - return FALSE; + wxTextCtrlBase::SetFont( font ); + + m_sourceFont = font; + + wxClientDC dc(this); + dc.SetFont( m_sourceFont ); + m_lineHeight = dc.GetCharHeight(); + m_charWidth = dc.GetCharWidth(); + + // TODO: recalc longest lines + + MyAdjustScrollbars(); + + return TRUE; } bool wxTextCtrl::SetForegroundColour(const wxColour& colour) @@ -1816,13 +1831,18 @@ void wxTextCtrl::OnPaint( wxPaintEvent &event ) int scroll_y = 0; GetViewStart( NULL, &scroll_y ); + // We have a inner border of two pixels + // around the text, so scroll units do + // not correspond to lines. + if (scroll_y > 0) scroll_y--; + int size_x = 0; int size_y = 0; GetClientSize( &size_x, &size_y ); dc.SetPen( *wxTRANSPARENT_PEN ); dc.SetBrush( wxBrush( wxTHEME_COLOUR(HIGHLIGHT), wxSOLID ) ); - int upper = wxMin( (int)m_lines.GetCount(), scroll_y+(size_y/m_lineHeight)+1 ); + int upper = wxMin( (int)m_lines.GetCount(), scroll_y+(size_y/m_lineHeight)+2 ); for (int i = scroll_y; i < upper; i++) { int x = 0+2; @@ -1834,10 +1854,13 @@ void wxTextCtrl::OnPaint( wxPaintEvent &event ) DrawLine( dc, 0+2, i*m_lineHeight+2, m_lines[i].m_text, i ); } - dc.SetBrush( *wxRED_BRUSH ); - // int xx = m_cursorX*m_charWidth; - int xx = PosToPixel( m_cursorY, m_cursorX ); - dc.DrawRectangle( xx+2, m_cursorY*m_lineHeight+2, 2, m_lineHeight ); + if (m_editable) + { + dc.SetBrush( *wxRED_BRUSH ); + // int xx = m_cursorX*m_charWidth; + int xx = PosToPixel( m_cursorY, m_cursorX ); + dc.DrawRectangle( xx+2, m_cursorY*m_lineHeight+2, 2, m_lineHeight ); + } } void wxTextCtrl::OnMouse( wxMouseEvent &event ) @@ -1891,6 +1914,8 @@ void wxTextCtrl::OnChar( wxKeyEvent &event ) { if (m_lines.GetCount() == 0) return; + if (!m_editable) return; + int size_x = 0; int size_y = 0; GetClientSize( &size_x, &size_y ); @@ -2183,7 +2208,9 @@ void wxTextCtrl::RefreshDown( int n ) void wxTextCtrl::MoveCursor( int new_x, int new_y, bool shift, bool centre ) { - // if (IsSingleLine()) + if (!m_editable) return; + + // if (IsSingleLine() || (m_lang == wxSOURCE_LANG_NONE)) { if (new_x > m_lines[new_y].m_text.Len()) new_x = m_lines[new_y].m_text.Len();