]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/stattext.cpp
Fix for the fact that unmapped but managed widgets
[wxWidgets.git] / src / os2 / stattext.cpp
index 7f033e228cde316ff9f501902babf63c177e0d08..d5cfd5c9e4a629b482f66992ac71adbdc0e0e10a 100644 (file)
@@ -67,15 +67,6 @@ bool wxStaticText::Create(
         lSstyle |= DT_RIGHT;
     else
         lSstyle |= DT_LEFT;
-    //
-    // If the parent is a scrolled window the controls must
-    // have this style or they will overlap the scrollbars
-    //
-    if (pParent)
-        if (pParent->IsKindOf(CLASSINFO(wxScrolledWindow)) ||
-            pParent->IsKindOf(CLASSINFO(wxGenericScrolledWindow)))
-            lSstyle |= WS_CLIPSIBLINGS;
-
     m_hWnd = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(pParent) // Parent window handle
                                        ,WC_STATIC                // Window class
                                        ,(PSZ)rsLabel.c_str()     // Initial Text
@@ -110,7 +101,9 @@ bool wxStaticText::Create(
                      );
 
     SubclassWin(m_hWnd);
-    wxControl::SetFont(pParent->GetFont());
+    SetFont(*wxSMALL_FONT);
+    SetXComp(0);
+    SetYComp(0);
     SetSize( nX
             ,nY
             ,nWidth
@@ -128,6 +121,7 @@ wxSize wxStaticText::DoGetBestSize() const
     int                             nHeightLineDefault = 0;
     int                             nHeightLine = 0;
     wxString                        sCurLine;
+    bool                            bLastWasAmpersand = FALSE;
 
     for (const wxChar *pc = sText; ; pc++)
     {
@@ -168,6 +162,29 @@ wxSize wxStaticText::DoGetBestSize() const
         }
         else
         {
+            //
+            // We shouldn't take into account the '&' which just introduces the
+            // mnemonic characters and so are not shown on the screen -- except
+            // when it is preceded by another '&' in which case it stands for a
+            // literal ampersand
+            //
+            if (*pc == _T('&'))
+            {
+                if (!bLastWasAmpersand)
+                {
+                    bLastWasAmpersand = TRUE;
+
+                    //
+                    // Skip the statement adding pc to curLine below
+                    //
+                    continue;
+                }
+
+                //
+                // It is a literal ampersand
+                //
+                bLastWasAmpersand = FALSE;
+            }
             sCurLine += *pc;
         }
     }
@@ -226,9 +243,18 @@ void wxStaticText::SetLabel(
     //
     if (!(GetWindowStyle() & wxST_NO_AUTORESIZE))
     {
-        DoSetSize(-1, -1, -1, -1, wxSIZE_AUTO_WIDTH | wxSIZE_AUTO_HEIGHT);
+        wxCoord                     vX;
+        wxCoord                     vY;
+        wxCoord                     vWidth;
+        wxCoord                     vHeight;
+
+        GetPosition(&vX, &vY);
+        GetSize(&vWidth, &vHeight);
+        if (!(vX == -1 && vY == -1 && vWidth == -1 && vHeight == -1))
+            DoSetSize(vX, vY, vWidth, vHeight, wxSIZE_AUTO_WIDTH | wxSIZE_AUTO_HEIGHT);
+        else
+            DoSetSize(-1, -1, -1, -1, wxSIZE_AUTO_WIDTH | wxSIZE_AUTO_HEIGHT);
     }
-    DoSetSize(-1, -1, -1, -1, wxSIZE_AUTO_WIDTH | wxSIZE_AUTO_HEIGHT);
 } // end of wxStaticText::SetLabel
 
 MRESULT wxStaticText::OS2WindowProc(