]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/stattext.cpp
Fix wxBase compilation with UTF-8-based wxString under MSW.
[wxWidgets.git] / src / os2 / stattext.cpp
index b636f26e3dc51330d9a994a50a9767db2e7d060a..3e11757d3886900f6d9d6a68d6907a7fa04e2771 100644 (file)
@@ -24,8 +24,6 @@
 #include "wx/os2/private.h"
 #include <stdio.h>
 
-IMPLEMENT_DYNAMIC_CLASS(wxStaticText, wxControl)
-
 bool wxStaticText::Create( wxWindow*        pParent,
                            wxWindowID       vId,
                            const wxString&  rsLabel,
@@ -66,11 +64,9 @@ bool wxStaticText::Create( wxWindow*        pParent,
     else
         lSstyle |= DT_LEFT;
 
-    wxString sLabel = ::wxPMTextToLabel(rsLabel);
-
     m_hWnd = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(pParent) // Parent window handle
                                        ,WC_STATIC                // Window class
-                                       ,(PSZ)sLabel.c_str()      // Initial Text
+                                       ,NULL                     // Initial Text
                                        ,(ULONG)lSstyle           // Style flags
                                        ,0L, 0L, 0L, 0L           // Origin -- 0 size
                                        ,(HWND)GetHwndOf(pParent) // owner window handle (same as parent
@@ -103,12 +99,14 @@ bool wxStaticText::Create( wxWindow*        pParent,
     SetYComp(0);
     SetSize( nX, nY, nWidth, nHeight );
 
+    SetLabel(rsLabel);
+
     return true;
 } // end of wxStaticText::Create
 
 wxSize wxStaticText::DoGetBestSize() const
 {
-    wxString sText(wxGetWindowText(GetHWND()));
+    wxString sText(GetLabel());
     int      nWidthTextMax = 0;
     int      nWidthLine = 0;
     int      nHeightTextTotal = 0;
@@ -131,7 +129,7 @@ wxSize wxStaticText::DoGetBestSize() const
                 if (!nHeightLineDefault)
                     nHeightLineDefault = nHeightLine;
                 if (!nHeightLineDefault)
-                    GetTextExtent(_T("W"), NULL, &nHeightLineDefault);
+                    GetTextExtent(wxT("W"), NULL, &nHeightLineDefault);
                 nHeightTextTotal += nHeightLineDefault;
             }
             else
@@ -162,7 +160,7 @@ wxSize wxStaticText::DoGetBestSize() const
             // when it is preceded by another '~' in which case it stands for a
             // literal tilde
             //
-            if (*pc == _T('~'))
+            if (*pc == wxT('~'))
             {
                 if (!bLastWasTilde)
                 {
@@ -205,6 +203,10 @@ void wxStaticText::DoSetSize(
                                 ,nHeight
                                 ,nSizeFlags
                                );
+
+    // eventually update label (if ellipsizing is on):
+    UpdateLabel();
+
     Refresh();
 } // end of wxStaticText::DoSetSize
 
@@ -229,14 +231,17 @@ void wxStaticText::SetLabel(
   const wxString&                   rsLabel
 )
 {
-    wxString                        sLabel = ::wxPMTextToLabel(rsLabel);
-    ::WinSetWindowText(GetHwnd(), (PSZ)sLabel.c_str());
+    m_labelOrig = rsLabel;       // save original label
+
+    // OS/2 does not support ellipsized labels in static text:
+    DoSetLabel(GetEllipsizedLabel());
 
     //
     // Adjust the size of the window to fit to the label unless autoresizing is
     // disabled
     //
-    if (!(GetWindowStyle() & wxST_NO_AUTORESIZE))
+    if (!(GetWindowStyle() & wxST_NO_AUTORESIZE) &&
+        !IsEllipsized())
     {
         wxCoord                     vX;
         wxCoord                     vY;
@@ -263,3 +268,18 @@ MRESULT wxStaticText::OS2WindowProc(
                                    ,lParam
                                   );
 } // end of wxStaticText::OS2WindowProc
+
+
+// for wxST_ELLIPSIZE_* support:
+
+void wxStaticText::DoSetLabel(const wxString& str)
+{
+    wxString sLabel = ::wxPMTextToLabel(str);
+    ::WinSetWindowText(GetHwnd(), sLabel.c_str());
+}
+
+wxString wxStaticText::DoGetLabel() const
+{
+    return wxGetWindowText(GetHwnd());
+}
+