]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/textctrl.cpp
Compilation fixes for Nano-X
[wxWidgets.git] / src / msw / textctrl.cpp
index 6f16032cc9f290dfc25cf3158cc43303e411fc7d..12716ffeb5165b8e13154da8b699a7e2f0b35aaa 100644 (file)
@@ -195,44 +195,8 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id,
     if ( parent )
         parent->AddChild(this);
 
-    // translate wxWin style flags to MSW ones, checking for consistency while
-    // doing it
-    long msStyle = ES_LEFT | WS_TABSTOP;
-
-    if ( m_windowStyle & wxCLIP_SIBLINGS )
-        msStyle |= WS_CLIPSIBLINGS;
-
-    if ( m_windowStyle & wxTE_MULTILINE )
-    {
-        wxASSERT_MSG( !(m_windowStyle & wxTE_PROCESS_ENTER),
-                      wxT("wxTE_PROCESS_ENTER style is ignored for multiline text controls (they always process it)") );
-
-        msStyle |= ES_MULTILINE | ES_WANTRETURN;
-        if ((m_windowStyle & wxTE_NO_VSCROLL) == 0)
-            msStyle |= WS_VSCROLL;
-        m_windowStyle |= wxTE_PROCESS_ENTER;
-    }
-    else // !multiline
-    {
-        // there is really no reason to not have this style for single line
-        // text controls
-        msStyle |= ES_AUTOHSCROLL;
-    }
-
-    if ( m_windowStyle & wxHSCROLL )
-        msStyle |= WS_HSCROLL | ES_AUTOHSCROLL;
-
-    if ( m_windowStyle & wxTE_READONLY )
-        msStyle |= ES_READONLY;
-
-    if ( m_windowStyle & wxTE_PASSWORD )
-        msStyle |= ES_PASSWORD;
-
-    if ( m_windowStyle & wxTE_AUTO_SCROLL )
-        msStyle |= ES_AUTOHSCROLL;
-
-    if ( m_windowStyle & wxTE_NOHIDESEL )
-        msStyle |= ES_NOHIDESEL;
+    // translate wxWin style flags to MSW ones
+    WXDWORD msStyle = MSWGetCreateWindowFlags();
 
     // do create the control - either an EDIT or RICHEDIT
     wxString windowClass = wxT("EDIT");
@@ -391,6 +355,74 @@ void wxTextCtrl::AdoptAttributesFromHWND()
         m_windowStyle |= wxTE_PROCESS_ENTER;
 }
 
+WXDWORD wxTextCtrl::MSWGetStyle(long style, WXDWORD *exstyle) const
+{
+    // default border for the text controls is the sunken one
+    if ( (style & wxBORDER_MASK) == wxBORDER_DEFAULT )
+    {
+        style |= wxBORDER_SUNKEN;
+    }
+
+    long msStyle = wxControl::MSWGetStyle(style, exstyle);
+
+    // default styles
+    msStyle |= ES_LEFT;
+
+    if ( style & wxTE_MULTILINE )
+    {
+        wxASSERT_MSG( !(style & wxTE_PROCESS_ENTER),
+                      wxT("wxTE_PROCESS_ENTER style is ignored for multiline text controls (they always process it)") );
+
+        msStyle |= ES_MULTILINE | ES_WANTRETURN;
+        if ( !(style & wxTE_NO_VSCROLL) )
+            msStyle |= WS_VSCROLL;
+
+        style |= wxTE_PROCESS_ENTER;
+    }
+    else // !multiline
+    {
+        // there is really no reason to not have this style for single line
+        // text controls
+        msStyle |= ES_AUTOHSCROLL;
+    }
+
+    if ( style & wxHSCROLL )
+        msStyle |= WS_HSCROLL | ES_AUTOHSCROLL;
+
+    if ( style & wxTE_READONLY )
+        msStyle |= ES_READONLY;
+
+    if ( style & wxTE_PASSWORD )
+        msStyle |= ES_PASSWORD;
+
+    if ( style & wxTE_AUTO_SCROLL )
+        msStyle |= ES_AUTOHSCROLL;
+
+    if ( style & wxTE_NOHIDESEL )
+        msStyle |= ES_NOHIDESEL;
+
+    return msStyle;
+}
+
+void wxTextCtrl::SetWindowStyleFlag(long style)
+{
+#if wxUSE_RICHEDIT
+    // we have to deal with some styles separately because they can't be
+    // changed by simply calling SetWindowLong(GWL_STYLE) but can be changed
+    // using richedit-specific EM_SETOPTIONS
+    if ( IsRich() &&
+            ((style & wxTE_NOHIDESEL) != (GetWindowStyle() & wxTE_NOHIDESEL)) )
+    {
+        bool set = (style & wxTE_NOHIDESEL) != 0;
+
+        ::SendMessage(GetHwnd(), EM_SETOPTIONS, set ? ECOOP_OR : ECOOP_AND,
+                      set ? ECO_NOHIDESEL : ~ECO_NOHIDESEL);
+    }
+#endif // wxUSE_RICHEDIT
+
+    wxControl::SetWindowStyleFlag(style);
+}
+
 // ----------------------------------------------------------------------------
 // set/get the controls text
 // ----------------------------------------------------------------------------
@@ -607,7 +639,7 @@ void wxTextCtrl::DoWriteText(const wxString& value, bool selectionOnly)
 #if wxUSE_UNICODE_MSLU
         // RichEdit doesn't have Unicode version of EM_REPLACESEL on Win9x,
         // but EM_STREAMIN works
-        if ( wxGetOsVersion() == wxWIN95 && GetRichVersion() > 1 )
+        if ( wxUsingUnicowsDll() && GetRichVersion() > 1 )
         {
            done = StreamIn(valueDos, wxFONTENCODING_SYSTEM, selectionOnly);
         }
@@ -1087,7 +1119,7 @@ bool wxTextCtrl::MSWShouldPreProcessMessage(WXMSG* pMsg)
     // usual preprocessing for them
     if ( msg->message == WM_KEYDOWN )
     {
-        WORD vkey = msg->wParam;
+        WORD vkey = (WORD) msg->wParam;
         if ( (HIWORD(msg->lParam) & KF_ALTDOWN) == KF_ALTDOWN )
         {
             if ( vkey == VK_BACK )
@@ -1437,7 +1469,7 @@ void wxTextCtrl::OnUpdateRedo(wxUpdateUIEvent& event)
 // EN_LINK processing
 // ----------------------------------------------------------------------------
 
-bool wxTextCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
+bool wxTextCtrl::MSWOnNotify(int WXUNUSED(idCtrl), WXLPARAM lParam, WXLPARAM *result)
 {
     NMHDR *hdr = (NMHDR* )lParam;
     if ( hdr->code == EN_LINK )
@@ -1692,7 +1724,7 @@ bool wxRichEditModule::OnInit()
 
 void wxRichEditModule::OnExit()
 {
-    for ( int i = 0; i < WXSIZEOF(ms_hRichEdit); i++ )
+    for ( size_t i = 0; i < WXSIZEOF(ms_hRichEdit); i++ )
     {
         if ( ms_hRichEdit[i] )
         {