{
}
+wxTextCtrl::~wxTextCtrl()
+{
+}
+
bool wxTextCtrl::Create(
wxWindow* pParent
, wxWindowID vId
, const wxPoint& rPos
, const wxSize& rSize
, long lStyle
-#if wxUSE_VALIDATORS
, const wxValidator& rValidator
-#endif
, const wxString& rsName
)
{
- HWND hParent;
- int nTempy;
//
// Base initialization
//
,rPos
,rSize
,lStyle
-#if wxUSE_VALIDATORS
,rValidator
-#endif
,rsName
))
return FALSE;
}
m_windowStyle = lStyle;
+ m_bIsMLE = FALSE;
long lSstyle = WS_VISIBLE | WS_TABSTOP;
//
// Set font, position, size and initial value
//
- wxFont* pTextFont = new wxFont( 10
+ wxFont* pTextFont = new wxFont( 8
,wxMODERN
,wxNORMAL
,wxNORMAL
::WinQueryWindowPos(m_hWnd, &vSwp);
SetXComp(vSwp.x);
SetYComp(vSwp.y);
- SetSize( vPos.x
- ,vPos.y
+ SetSize( vPos.x - GetXComp()
+ ,vPos.y - GetYComp()
,rSize.x
,rSize.y
);
if (*zStr == '\r')
*zStr = '\n';
}
- sStr = zStr;
return sStr;
} // end of wxTextCtrl::GetValue
{
long lPos = GetLastPosition();
+ //
+ // We must not do anything if the caret is already there because calling
+ // SetInsertionPoint() thaws the controls if Freeze() had been called even
+ // if it doesn't actually move the caret anywhere and so the simple fact of
+ // doing it results in horrible flicker when appending big amounts of text
+ // to the control in a few chunks (see DoAddText() test in the text sample)
+ //
+ if (GetInsertionPoint() == GetLastPosition())
+ return;
SetInsertionPoint(lPos);
} // end of wxTextCtrl::SetInsertionPointEnd
{
#if wxUSE_CLIPBOARD
HWND hWnd = GetHwnd();
- long lFromChar = lFrom;
- long lToChar = lTo;
//
// Set selection and remove it
)
{
HWND hWnd = GetHwnd();
- long lFromChar = lFrom;
- long lToChar = lTo;
if (m_bIsMLE)
{
return bRc;
} // end of wxTextCtrl::IsModified
+void wxTextCtrl::MarkDirty()
+{
+ if (m_bIsMLE)
+ ::WinSendMsg(GetHwnd(), MLM_SETCHANGED, MPFROMLONG(TRUE), 0);
+ else
+ // EM controls do not have a SETCHANGED, what can we do??
+ wxFAIL_MSG( _T("not implemented") );
+}
+
//
// Makes 'unmodified'
//
, long lY
) const
{
- HWND hWnd = GetHwnd();
long lCharIndex = 0L;
long lLen;
)
{
HPS hPS = (HPS)hWxDC;
- wxBrush* pBrush = NULL;
wxColour vColBack = GetBackgroundColour();
wxColour vColFore = GetForegroundColour();
wxBrush* pBackgroundBrush = wxTheBrushList->FindOrCreateBrush( GetBackgroundColour()
wxKeyEvent& rEvent
)
{
- switch (rEvent.KeyCode())
+ switch (rEvent.GetKeyCode())
{
case WXK_RETURN:
if ( !(m_windowStyle & wxTE_MULTILINE) )
}
else
{
- ENTRYFDATA* pEfd;
+ ENTRYFDATA Efd;
WNDPARAMS vParams;
vParams.fsStatus = WPM_CBCTLDATA;
+ vParams.pCtlData = &Efd;
vParams.cbCtlData = sizeof(ENTRYFDATA);
if (::WinSendMsg( GetHwnd()
,&vParams
,0
))
- {
- pEfd = (ENTRYFDATA*)vParams.pCtlData;
- uLimit = (unsigned int)pEfd->cchEditLimit;
- }
+ uLimit = (unsigned int)Efd.cchEditLimit;
else
uLimit = 32; //PM's default
}
if (m_bIsMLE)
::WinSendMsg(GetHwnd(), MLM_SETTEXTLIMIT, MPFROMLONG(uLimit), 0);
else
- ::WinSendMsg(GetHwnd(), EM_SETTEXTLIMIT, MPFROMLONG(uLimit), 0);
+ ::WinSendMsg(GetHwnd(), EM_SETTEXTLIMIT, MPFROMSHORT(uLimit), 0);
}
} // end of wxTextCtrl::AdjustSpaceLimit
bool wxTextCtrl::AcceptsFocus() const
{
//
- // We don't want focus if we can't be edited
+ // We don't want focus if we can't be edited unless we're a multiline
+ // control because then it might be still nice to get focus from keyboard
+ // to be able to scroll it without mouse
//
- return IsEditable() && wxControl::AcceptsFocus();
+ return (IsEditable() || IsMultiLine()) && wxControl::AcceptsFocus();
} // end of wxTextCtrl::Command
wxSize wxTextCtrl::DoGetBestSize() const
wxGetCharSize(GetHWND(), &nCx, &nCy, (wxFont*)&GetFont());
int wText = DEFAULT_ITEM_WIDTH;
- int hText = (EDIT_HEIGHT_FROM_CHAR_HEIGHT(nCy) * .8);
+ int hText = (int)(EDIT_HEIGHT_FROM_CHAR_HEIGHT(nCy) * .8);
if (m_windowStyle & wxTE_MULTILINE)
{
Redo();
} // end of wxTextCtrl::OnRedo
+void wxTextCtrl::OnDelete(
+ wxCommandEvent& rEvent
+)
+{
+ long lFrom;
+ long lTo;
+
+ GetSelection( &lFrom
+ ,&lTo
+ );
+ if (lFrom != -1 && lTo != -1)
+ Remove( lFrom
+ ,lTo
+ );
+} // end of wxTextCtrl::OnDelete
+
+void wxTextCtrl::OnSelectAll(
+ wxCommandEvent& rEvent
+)
+{
+ SetSelection(-1, -1);
+} // end of wxTextCtrl::OnSelectAll
+
void wxTextCtrl::OnUpdateCut(
wxUpdateUIEvent& rEvent
)
rEvent.Enable(CanRedo());
} // end of wxTextCtrl::OnUpdateRedo
+void wxTextCtrl::OnUpdateDelete(
+ wxUpdateUIEvent& rEvent
+)
+{
+ long lFrom;
+ long lTo;
+
+ GetSelection( &lFrom
+ ,&lTo
+ );
+ rEvent.Enable( lFrom != -1L && lTo != -1L && lFrom != lTo && IsEditable()) ;
+} // end of wxTextCtrl::OnUpdateDelete
+
+void wxTextCtrl::OnUpdateSelectAll(
+ wxUpdateUIEvent& rEvent
+)
+{
+ rEvent.Enable(GetLastPosition() > 0);
+} // end of wxTextCtrl::OnUpdateSelectAll
+
bool wxTextCtrl::SetBackgroundColour(
const wxColour& rColour
)