From f5ea767eb8f7950caa42e06803ff38869b449c8b Mon Sep 17 00:00:00 2001
From: David Webster <Dave.Webster@bhmi.com>
Date: Tue, 3 Sep 2002 22:26:53 +0000
Subject: [PATCH] More OS/2 update to fix some owner drawn things

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16958 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
---
 include/wx/os2/checklst.h | 16 ++++++++--------
 include/wx/os2/control.h  |  2 +-
 include/wx/os2/listbox.h  |  2 +-
 include/wx/os2/window.h   |  2 +-
 src/os2/checklst.cpp      | 12 ++++++------
 src/os2/listbox.cpp       | 21 ++++++++++++---------
 src/os2/window.cpp        | 14 +++++++++-----
 src/os2/wx23.def          | 12 +++++++++++-
 8 files changed, 49 insertions(+), 32 deletions(-)

diff --git a/include/wx/os2/checklst.h b/include/wx/os2/checklst.h
index 335e8c07ed..cbecae5fed 100644
--- a/include/wx/os2/checklst.h
+++ b/include/wx/os2/checklst.h
@@ -24,7 +24,7 @@ class wxCheckListBoxItem; // fwd decl, define in checklst.cpp
 class WXDLLEXPORT wxCheckListBox : public wxListBox
 {
 public:
-    // 
+    //
     // Ctors
     //
     wxCheckListBox();
@@ -41,7 +41,7 @@ public:
                    ,const wxString&    rsName = wxListBoxNameStr
                   );
 
-    // 
+    //
     // Override base class virtuals
     //
     virtual void Delete(int n);
@@ -52,7 +52,7 @@ public:
 
     virtual bool SetFont(const wxFont &rFont);
 
-    // 
+    //
     // Items may be checked
     //
     bool IsChecked(size_t uiIndex) const;
@@ -60,20 +60,20 @@ public:
                ,bool   bCheck = TRUE
               );
 
-    // 
+    //
     // Accessors
     //
     size_t GetItemHeight(void) const { return m_nItemHeight; }
 
 protected:
-    // 
+    //
     // We create our items ourselves and they have non-standard size,
     // so we need to override these functions
     //
     virtual wxOwnerDrawn* CreateItem(size_t n);
-    virtual bool          OS2OnMeasure(WXMEASUREITEMSTRUCT* pItem);
+    virtual long          OS2OnMeasure(WXMEASUREITEMSTRUCT* pItem);
 
-    // 
+    //
     // Pressing space or clicking the check box toggles the item
     //
     void OnChar(wxKeyEvent& rEvent);
@@ -89,7 +89,7 @@ private:
                                   ,const wxItemResource*  pParentResource
                                   ,const wxResourceTable* pTable = (const wxResourceTable *) NULL
                                  )
-    { 
+    {
         return(wxWindowBase::CreateItem( pChildResource
                                         ,pParentResource
                                         ,pTable
diff --git a/include/wx/os2/control.h b/include/wx/os2/control.h
index 55602617a4..fbbb0410c6 100644
--- a/include/wx/os2/control.h
+++ b/include/wx/os2/control.h
@@ -73,7 +73,7 @@ public:
     // For ownerdraw items
     //
     virtual bool OS2OnDraw(WXDRAWITEMSTRUCT* WXUNUSED(pItem)) { return FALSE; };
-    virtual bool OS2OnMeasure(WXMEASUREITEMSTRUCT* WXUNUSED(pItem)) { return FALSE; };
+    virtual long OS2OnMeasure(WXMEASUREITEMSTRUCT* WXUNUSED(pItem)) { return 0L; };
 
     wxArrayLong&     GetSubcontrols() { return m_aSubControls; }
     void             OnEraseBackground(wxEraseEvent& rEvent);
diff --git a/include/wx/os2/listbox.h b/include/wx/os2/listbox.h
index ffe2719d88..a198afb55b 100644
--- a/include/wx/os2/listbox.h
+++ b/include/wx/os2/listbox.h
@@ -121,7 +121,7 @@ public:
     // wxCheckListBox support
     //
 #if wxUSE_OWNER_DRAWN
-    bool                  OS2OnMeasure(WXMEASUREITEMSTRUCT *item);
+    long                  OS2OnMeasure(WXMEASUREITEMSTRUCT *item);
     bool                  OS2OnDraw(WXDRAWITEMSTRUCT *item);
 
     virtual wxOwnerDrawn* CreateItem(size_t n);
diff --git a/include/wx/os2/window.h b/include/wx/os2/window.h
index a64f5ae222..c690cd1dfb 100644
--- a/include/wx/os2/window.h
+++ b/include/wx/os2/window.h
@@ -367,7 +367,7 @@ public:
     virtual bool OS2OnDrawItem( int               nId
                                ,WXDRAWITEMSTRUCT* pItem
                               );
-    virtual bool OS2OnMeasureItem( int                  nId
+    virtual long OS2OnMeasureItem( int                  nId
                                   ,WXMEASUREITEMSTRUCT* pItem
                                  );
 
diff --git a/src/os2/checklst.cpp b/src/os2/checklst.cpp
index f3a639ff6a..5f6282c54e 100644
--- a/src/os2/checklst.cpp
+++ b/src/os2/checklst.cpp
@@ -112,6 +112,9 @@ bool wxCheckListBoxItem::OnDrawItem (
 {
     wxRect                          vRect = rRect;
 
+    ::WinQueryWindowRect( m_pParent->GetHWND()
+                         ,&rDc.m_vRclPaint
+                        );
     if (IsChecked())
         eStat = (wxOwnerDrawn::wxODStatus)(eStat | wxOwnerDrawn::wxODChecked);
 
@@ -141,9 +144,6 @@ bool wxCheckListBoxItem::OnDrawItem (
         m_pParent->GetSize( NULL
                            ,&nParentHeight
                           );
-        ::WinQueryWindowRect( m_pParent->GetHWND()
-                             ,&rDc.m_vRclPaint
-                            );
 
         nY = nParentHeight - nY - nCheckHeight;
         vPenBack = wxPen(vColour, 1, wxSOLID);
@@ -372,7 +372,7 @@ wxOwnerDrawn* wxCheckListBox::CreateItem (
 // Return item size
 // ----------------
 //
-bool wxCheckListBox::OS2OnMeasure (
+long wxCheckListBox::OS2OnMeasure (
   WXMEASUREITEMSTRUCT*             pItem
 )
 {
@@ -391,9 +391,9 @@ bool wxCheckListBox::OS2OnMeasure (
         // Add place for the check mark
         //
         pStruct->rclItem.xRight += wxOwnerDrawn::GetDefaultMarginWidth();
-        return TRUE;
+        return long(MRFROM2SHORT((USHORT)m_nItemHeight, (USHORT)(pStruct->rclItem.xRight - pStruct->rclItem.xLeft)));
     }
-    return FALSE;
+    return 0L;
 } // end of wxCheckListBox::CreateItem
 
 //
diff --git a/src/os2/listbox.cpp b/src/os2/listbox.cpp
index 5621ec8cd3..9f9f1de5d2 100644
--- a/src/os2/listbox.cpp
+++ b/src/os2/listbox.cpp
@@ -279,6 +279,9 @@ int wxListBox::DoAppend(
     if (m_windowStyle & wxLB_OWNERDRAW)
     {
         wxOwnerDrawn*               pNewItem = CreateItem(nIndex); // dummy argument
+        wxScreenDC                  vDc;
+        wxCoord                     vHeight;
+
 
         pNewItem->SetName(rsItem);
         m_aItems.Insert(pNewItem, nIndex);
@@ -809,7 +812,7 @@ bool wxListBox::OS2Command(
 //
 #define OWNER_DRAWN_LISTBOX_EXTRA_SPACE    (1)
 
-bool wxListBox::OS2OnMeasure(
+long wxListBox::OS2OnMeasure(
   WXMEASUREITEMSTRUCT*              pItem
 )
 {
@@ -827,21 +830,21 @@ bool wxListBox::OS2OnMeasure(
     vDc.SetFont(GetFont());
 
     wxCoord                         vHeight;
+    wxCoord                         vWidth;
+
+    GetSize( &vWidth
+            ,NULL
+           );
 
-    pMeasureStruct->rclItem.xRight = 0;
+    pMeasureStruct->rclItem.xRight = (USHORT)vWidth;
     pMeasureStruct->rclItem.xLeft  = 0;
     pMeasureStruct->rclItem.yTop   = 0;
     pMeasureStruct->rclItem.yBottom = 0;
 
     vHeight = vDc.GetCharHeight() * 2.5;
-    pMeasureStruct->rclItem.yTop  = vHeight;
+    pMeasureStruct->rclItem.yTop  = (USHORT)vHeight;
 
-    ::WinSendMsg( GetHWND()
-                 ,LM_SETITEMHEIGHT
-                 ,MPFROMLONG(vHeight)
-                 ,MPFROMLONG(pMeasureStruct->idItem)
-                );
-    return TRUE;
+    return long(MRFROM2SHORT((USHORT)vHeight, (USHORT)vWidth));
 } // end of wxListBox::OS2OnMeasure
 
 bool wxListBox::OS2OnDraw (
diff --git a/src/os2/window.cpp b/src/os2/window.cpp
index 951bf17e8c..ce34797831 100644
--- a/src/os2/window.cpp
+++ b/src/os2/window.cpp
@@ -2841,8 +2841,9 @@ MRESULT wxWindowOS2::OS2WindowProc(
                 }
                 else
                 {
-                    bProcessed = OS2OnMeasureItem(nIdCtrl,
-                                                 (WXMEASUREITEMSTRUCT *)lParam);
+                    return MRFROMLONG(OS2OnMeasureItem( nIdCtrl
+                                                       ,(WXMEASUREITEMSTRUCT *)lParam
+                                                      ));
                 }
 
                 if ( bProcessed )
@@ -3807,7 +3808,7 @@ bool wxWindowOS2::OS2OnDrawItem(
     return FALSE;
 } // end of wxWindowOS2::OS2OnDrawItem
 
-bool wxWindowOS2::OS2OnMeasureItem(
+long wxWindowOS2::OS2OnMeasureItem(
   int                               lId
 , WXMEASUREITEMSTRUCT*              pItemStruct
 )
@@ -3833,13 +3834,16 @@ bool wxWindowOS2::OS2OnMeasureItem(
                                          ,&nHeight
                                         ))
             {
+                MRESULT             mRc;
+
                 pMeasureStruct->rclItem.xRight  = nWidth;
                 pMeasureStruct->rclItem.xLeft   = 0L;
                 pMeasureStruct->rclItem.yTop    = nHeight;
                 pMeasureStruct->rclItem.yBottom = 0L;
-                return TRUE;
+                mRc = MRFROM2SHORT(nHeight, nWidth);
+                return LONGFROMMR(mRc);
             }
-            return FALSE;
+            return 0L;
         }
     }
     wxWindow*                      pItem = FindItem(lId);
diff --git a/src/os2/wx23.def b/src/os2/wx23.def
index 329b08b437..67a5e1ad80 100644
--- a/src/os2/wx23.def
+++ b/src/os2/wx23.def
@@ -4,7 +4,7 @@ DATA MULTIPLE NONSHARED READWRITE LOADONCALL
 CODE LOADONCALL
 
 EXPORTS
-;From library:  H:\Dev\Wx2\WxWindows\lib\wx.lib
+;From library:  H:\DEV\WX2\WXWINDOWS\LIB\wx.lib
   ;From object file:  dummy.cpp
     ;PUBDEFs (Symbols available from object file):
       wxDummyChar
@@ -11902,6 +11902,8 @@ EXPORTS
       SetFont__14wxCheckListBoxFRC6wxFont
       ;wxCheckListBox::OnLeftClick(wxMouseEvent&)
       OnLeftClick__14wxCheckListBoxFR12wxMouseEvent
+      ;wxCheckListBox::OS2OnMeasure(void**)
+      OS2OnMeasure__14wxCheckListBoxFPPv
   ;From object file:  ..\os2\choice.cpp
     ;PUBDEFs (Symbols available from object file):
       ;wxChoice::DoGetItemClientData(int) const
@@ -14230,11 +14232,19 @@ EXPORTS
       GetValue__10wxSpinCtrlCFv
   ;From object file:  ..\os2\statbmp.cpp
     ;PUBDEFs (Symbols available from object file):
+      ;wxStaticBitmap::OnPaint(wxPaintEvent&)
+      OnPaint__14wxStaticBitmapFR12wxPaintEvent
+      ;wxStaticBitmap::sm_eventTable
+      sm_eventTable__14wxStaticBitmap
+      ;wxStaticBitmap::sm_eventTableEntries
+      sm_eventTableEntries__14wxStaticBitmap
       __vft14wxStaticBitmap8wxObject
       ;wxStaticBitmap::Free()
       Free__14wxStaticBitmapFv
       ;wxStaticBitmap::Create(wxWindow*,int,const wxGDIImage&,const wxPoint&,const wxSize&,long,const wxString&)
       Create__14wxStaticBitmapFP8wxWindowiRC10wxGDIImageRC7wxPointRC6wxSizelRC8wxString
+      ;wxStaticBitmap::GetEventTable() const
+      GetEventTable__14wxStaticBitmapCFv
       ;wxStaticBitmap::sm_classwxStaticBitmap
       sm_classwxStaticBitmap__14wxStaticBitmap
       ;wxStaticBitmap::SetImage(const wxGDIImage&)
-- 
2.50.0

