]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/ownerdrw.cpp
Fix for crash when opening empty node
[wxWidgets.git] / src / os2 / ownerdrw.cpp
index dabe50894300123bf76c77a7481427909423b95e..12790b51ceb709c55bece245e4f9b07bcc1d2e0c 100644 (file)
@@ -1,5 +1,5 @@
 ///////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////
-// Name:        msw/ownerdrw.cpp
+// Name:        src/os2/ownerdrw.cpp
 // Purpose:     implementation of wxOwnerDrawn class
 // Author:      David Webster
 // Modified by:
 // Purpose:     implementation of wxOwnerDrawn class
 // Author:      David Webster
 // Modified by:
@@ -9,29 +9,24 @@
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
-#pragma implementation
-#endif
-
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
+#if wxUSE_OWNER_DRAWN
+
 #ifndef WX_PRECOMP
 #ifndef WX_PRECOMP
-  #include "wx/window.h"
-  #include "wx/os2/private.h"
-  #include "wx/font.h"
-  #include "wx/bitmap.h"
-  #include "wx/dcmemory.h"
-  #include "wx/menu.h"
-  #include "wx/utils.h"
+    #include "wx/window.h"
+    #include "wx/os2/private.h"
+    #include "wx/font.h"
+    #include "wx/bitmap.h"
+    #include "wx/dcmemory.h"
+    #include "wx/menu.h"
+    #include "wx/utils.h"
+    #include "wx/settings.h"
+    #include "wx/menuitem.h"
 #endif
 
 #endif
 
-#if wxUSE_OWNER_DRAWN
-
-#include "wx/settings.h"
 #include "wx/ownerdrw.h"
 #include "wx/ownerdrw.h"
-#include "wx/menuitem.h"
-
 
 // ============================================================================
 // implementation of wxOwnerDrawn class
 
 // ============================================================================
 // implementation of wxOwnerDrawn class
 // ctor
 // ----
 //
 // ctor
 // ----
 //
-wxOwnerDrawn::wxOwnerDrawn(
-  const wxString&                   rsStr
-, bool                              bCheckable
-, bool                              bMenuItem
-)
+wxOwnerDrawn::wxOwnerDrawn( const wxString& rsStr,
+                            bool            bCheckable,
+                            bool            WXUNUSED(bMenuItem) )
 : m_strName(rsStr)
 {
     m_bCheckable   = bCheckable;
 : m_strName(rsStr)
 {
     m_bCheckable   = bCheckable;
-    m_bOwnerDrawn  = FALSE;
+    m_bOwnerDrawn  = false;
     m_nHeight      = 0;
     m_nMarginWidth = ms_nLastMarginWidth;
     if (wxNORMAL_FONT)
         m_font = *wxNORMAL_FONT;
 } // end of wxOwnerDrawn::wxOwnerDrawn
 
     m_nHeight      = 0;
     m_nMarginWidth = ms_nLastMarginWidth;
     if (wxNORMAL_FONT)
         m_font = *wxNORMAL_FONT;
 } // end of wxOwnerDrawn::wxOwnerDrawn
 
+wxOwnerDrawn::~wxOwnerDrawn() { }
+
 size_t wxOwnerDrawn::ms_nDefaultMarginWidth = 15;
 
 size_t wxOwnerDrawn::ms_nLastMarginWidth = ms_nDefaultMarginWidth;
 size_t wxOwnerDrawn::ms_nDefaultMarginWidth = 15;
 
 size_t wxOwnerDrawn::ms_nLastMarginWidth = ms_nDefaultMarginWidth;
@@ -65,15 +60,12 @@ size_t wxOwnerDrawn::ms_nLastMarginWidth = ms_nDefaultMarginWidth;
 // -------
 //
 
 // -------
 //
 
-bool wxOwnerDrawn::OnMeasureItem(
-  size_t*                           pWidth
-, size_t*                           pHeight
-)
+bool wxOwnerDrawn::OnMeasureItem( size_t* pWidth,
+                                  size_t* pHeight )
 {
 {
-    wxMemoryDC                      vDC;
-
+    wxMemoryDC vDC;
 
 
-    wxString                        sStr = wxStripMenuCodes(m_strName);
+    wxString  sStr = wxStripMenuCodes(m_strName);
 
     //
     // If we have a valid accel string, then pad out
 
     //
     // If we have a valid accel string, then pad out
@@ -81,7 +73,7 @@ bool wxOwnerDrawn::OnMeasureItem(
     // placed on top of each other.
     if (!m_strAccel.empty() )
     {
     // placed on top of each other.
     if (!m_strAccel.empty() )
     {
-        sStr.Pad(sStr.Length()%8);
+        sStr.Pad(sStr.length()%8);
         sStr += m_strAccel;
     }
     vDC.SetFont(GetFont());
         sStr += m_strAccel;
     }
     vDC.SetFont(GetFont());
@@ -89,7 +81,7 @@ bool wxOwnerDrawn::OnMeasureItem(
                       ,(long *)pWidth
                       ,(long *)pHeight
                      );
                       ,(long *)pWidth
                       ,(long *)pHeight
                      );
-    if (!m_strAccel.IsEmpty())
+    if (!m_strAccel.empty())
     {
         //
         // Measure the accelerator string, and add its width to
     {
         //
         // Measure the accelerator string, and add its width to
@@ -166,22 +158,20 @@ bool wxOwnerDrawn::OnMeasureItem(
     if (*pHeight < m_nMinHeight)
         *pHeight = m_nMinHeight;
     m_nHeight = *pHeight;                // remember height for use in OnDrawItem
     if (*pHeight < m_nMinHeight)
         *pHeight = m_nMinHeight;
     m_nHeight = *pHeight;                // remember height for use in OnDrawItem
-    return TRUE;
+    return true;
 } // end of wxOwnerDrawn::OnMeasureItem
 
 // draw the item
 } // end of wxOwnerDrawn::OnMeasureItem
 
 // draw the item
-bool wxOwnerDrawn::OnDrawItem(
-  wxDC&                             rDC
-, const wxRect&                     rRect
-, wxODAction                        eAction
-, wxODStatus                        eStatus
-)
+bool wxOwnerDrawn::OnDrawItem( wxDC& rDC,
+                               const wxRect& rRect,
+                               wxODAction eAction,
+                               wxODStatus eStatus )
 {
     //
     // We do nothing on focus change
     //
     if (eAction == wxODFocusChanged )
 {
     //
     // We do nothing on focus change
     //
     if (eAction == wxODFocusChanged )
-        return TRUE;
+        return true;
 
     //
     // Select the font and draw the text
 
     //
     // Select the font and draw the text
@@ -214,12 +204,22 @@ bool wxOwnerDrawn::OnDrawItem(
     //
     if (eStatus & wxODSelected)
     {
     //
     if (eStatus & wxODSelected)
     {
-        wxColour                        vCol2(wxT("WHITE"));
-        vColBack.Set( (unsigned char)0
-                     ,(unsigned char)0
-                     ,(unsigned char)160
-                    ); // no dark blue in color table
-        vColText = vCol2;
+        vRef = (ULONG)::WinQuerySysColor( HWND_DESKTOP
+                                         ,SYSCLR_MENUHILITEBGND
+                                         ,0L
+                                        );
+        vColBack.Set( GetRValue(vRef)
+                     ,GetGValue(vRef)
+                     ,GetBValue(vRef)
+                    );
+        vRef = (ULONG)::WinQuerySysColor( HWND_DESKTOP
+                                         ,SYSCLR_MENUHILITE
+                                         ,0L
+                                        );
+        vColText.Set( GetRValue(vRef)
+                     ,GetGValue(vRef)
+                     ,GetBValue(vRef)
+                    );
     }
     else if (eStatus & wxODDisabled)
     {
     }
     else if (eStatus & wxODDisabled)
     {
@@ -300,23 +300,23 @@ bool wxOwnerDrawn::OnDrawItem(
     //
     // Display main text and accel text separately to align better
     //
     //
     // Display main text and accel text separately to align better
     //
-    wxString                        sTgt = wxT("\t");
-    wxString                        sFullString = m_strName; // need to save the original text
-    wxString                        sAccel;
-    int                             nIndex;
-    size_t                          nWidth;
-    size_t                          nCharWidth;
-    size_t                          nHeight;
-    bool                            bFoundMnemonic = FALSE;
-    bool                            bFoundAccel = FALSE;
+    wxString sTgt = wxT("\t");
+    wxString sFullString = m_strName; // need to save the original text
+    wxString sAccel;
+    int      nIndex;
+    size_t   nWidth;
+    size_t   nCharWidth;
+    size_t   nHeight;
+    bool     bFoundMnemonic = false;
+    bool     bFoundAccel = false;
 
     //
     // Deal with the tab, extracting the Accel text
     //
 
     //
     // Deal with the tab, extracting the Accel text
     //
-    nIndex = sFullString.Find(sTgt.c_str());
+    nIndex = sFullString.Find(sTgt);
     if (nIndex != -1)
     {
     if (nIndex != -1)
     {
-        bFoundAccel = TRUE;
+        bFoundAccel = true;
         sAccel = sFullString.Mid(nIndex + 1);
         sFullString.Remove(nIndex);
     }
         sAccel = sFullString.Mid(nIndex + 1);
         sFullString.Remove(nIndex);
     }
@@ -325,12 +325,12 @@ bool wxOwnerDrawn::OnDrawItem(
     // Deal with the mnemonic character
     //
     sTgt = wxT("~");
     // Deal with the mnemonic character
     //
     sTgt = wxT("~");
-    nIndex = sFullString.Find(sTgt.c_str());
+    nIndex = sFullString.Find(sTgt);
     if (nIndex != -1)
     {
     if (nIndex != -1)
     {
-        wxString                    sTmp = sFullString;
+        wxString sTmp = sFullString;
 
 
-        bFoundMnemonic = TRUE;
+        bFoundMnemonic = true;
         sTmp.Remove(nIndex);
         rDC.GetTextExtent( sTmp
                           ,(long *)&nWidth
         sTmp.Remove(nIndex);
         rDC.GetTextExtent( sTmp
                           ,(long *)&nWidth
@@ -341,7 +341,7 @@ bool wxOwnerDrawn::OnDrawItem(
                           ,(long *)&nCharWidth
                           ,(long *)&nHeight
                          );
                           ,(long *)&nCharWidth
                           ,(long *)&nHeight
                          );
-        sFullString.Replace(sTgt.c_str(), wxEmptyString, TRUE);
+        sFullString.Replace(sTgt.c_str(), wxEmptyString, true);
     }
 
     //
     }
 
     //
@@ -351,7 +351,7 @@ bool wxOwnerDrawn::OnDrawItem(
     ::GpiCharStringAt( rDC.GetHPS()
                       ,&vPntStart
                       ,sFullString.length()
     ::GpiCharStringAt( rDC.GetHPS()
                       ,&vPntStart
                       ,sFullString.length()
-                      ,(PCH)sFullString.c_str()
+                      ,sFullString.char_str()
                      );
     if (bFoundMnemonic)
     {
                      );
     if (bFoundMnemonic)
     {
@@ -389,7 +389,7 @@ bool wxOwnerDrawn::OnDrawItem(
         ::GpiCharStringAt( rDC.GetHPS()
                           ,&vPntStart
                           ,sAccel.length()
         ::GpiCharStringAt( rDC.GetHPS()
                           ,&vPntStart
                           ,sAccel.length()
-                          ,(PCH)sAccel.c_str()
+                          ,sAccel.char_str()
                          );
     }
 
                          );
     }
 
@@ -424,7 +424,7 @@ bool wxOwnerDrawn::OnDrawItem(
         //
         // For uncheckable item we use only the 'checked' bitmap
         //
         //
         // For uncheckable item we use only the 'checked' bitmap
         //
-        wxBitmap                    vBmp(GetBitmap(IsCheckable() ? ((eStatus & wxODChecked) != 0) : TRUE));
+        wxBitmap vBmp(GetBitmap(IsCheckable() ? ((eStatus & wxODChecked) != 0) : TRUE));
 
         if (vBmp.Ok())
         {
 
         if (vBmp.Ok())
         {
@@ -459,7 +459,7 @@ bool wxOwnerDrawn::OnDrawItem(
                      ,0
                      ,0
                      ,wxCOPY
                      ,0
                      ,0
                      ,wxCOPY
-                     ,TRUE
+                     ,true
                     );
 
             if (eStatus & wxODSelected)
                     );
 
             if (eStatus & wxODSelected)
@@ -487,7 +487,7 @@ bool wxOwnerDrawn::OnDrawItem(
             vBmp.SetSelectedInto(NULL);
         }
     }
             vBmp.SetSelectedInto(NULL);
         }
     }
-    return TRUE;
+    return true;
 } // end of wxOwnerDrawn::OnDrawItem
 
 #endif //wxUSE_OWNER_DRAWN
 } // end of wxOwnerDrawn::OnDrawItem
 
 #endif //wxUSE_OWNER_DRAWN