]>
git.saurik.com Git - wxWidgets.git/blob - src/os2/gauge.cpp
   1 ///////////////////////////////////////////////////////////////////////////// 
   3 // Purpose:     wxGauge class 
   4 // Author:      David Webster 
   8 // Copyright:   (c) David Webster 
   9 // Licence:     wxWindows licence 
  10 ///////////////////////////////////////////////////////////////////////////// 
  12 #include "wx/wxprec.h" 
  17 #include "wx/scrolwin.h" 
  20 #include "wx/os2/private.h" 
  23 static WXFARPROC fnWndProcGauge 
= (WXFARPROC
)NULL
; 
  24 extern void  wxAssociateWinWithHandle( HWND         hWnd
 
  28 IMPLEMENT_DYNAMIC_CLASS(wxGauge
, wxControl
) 
  30 MRESULT EXPENTRY 
wxGaugeWndProc( 
  37     wxGauge
*                        pGauge 
= (wxGauge 
*)::WinQueryWindowULong( hWnd
 
  44     double                          dPixelToRange 
= 0.0; 
  50             hPS 
= ::WinBeginPaint( hWnd
 
  56                 ::WinQueryWindowRect(hWnd
, &vRect
); 
  57                 ::GpiCreateLogColorTable( hPS
 
  61                                          ,(LONG
)wxTheColourDatabase
->m_nSize
 
  62                                          ,(PLONG
)wxTheColourDatabase
->m_palTable
 
  64                 ::GpiCreateLogColorTable( hPS
 
  74                 LONG                lColor 
= 0x00FFFFFF; // White 
  75                 POINTL              vPoint 
= {vRect
.xLeft 
+ 1, vRect
.yBottom 
+ 1}; 
  77                 ::GpiSetColor(hPS
, lColor
); 
  78                 ::GpiMove(hPS
, &vPoint
); 
  79                 vPoint
.x 
= vRect
.xRight 
- 1; 
  80                 ::GpiLine(hPS
, &vPoint
); 
  81                 vPoint
.y 
= vRect
.yTop 
- 1; 
  82                 ::GpiLine(hPS
, &vPoint
); 
  83                 lColor 
= 0x000C0C0C; // Darkish Grey to give depth feel 
  84                 ::GpiSetColor(hPS
, lColor
); 
  85                 vPoint
.x 
= vRect
.xLeft 
+ 1; 
  86                 ::GpiLine(hPS
, &vPoint
); 
  87                 vPoint
.y 
= vRect
.yBottom 
+ 1; 
  88                 ::GpiLine(hPS
, &vPoint
); 
  89                 vRect3
.xLeft   
= vRect
.xLeft 
+ 2; 
  90                 vRect3
.xRight  
= vRect
.xRight 
- 2; 
  91                 vRect3
.yTop    
= vRect
.yTop 
- 2; 
  92                 vRect3
.yBottom 
= vRect
.yBottom 
+ 2; 
  94                 if (pGauge
->GetWindowStyleFlag() & wxGA_VERTICAL
) 
  96                     dRange 
= (double)(vRect3
.yTop 
- vRect3
.yBottom
); 
  97                     dPixelToRange  
= dRange
/(double)pGauge
->GetRange(); 
  98                     vRect2
.yTop    
= (int)(pGauge
->GetValue() * dPixelToRange
); 
  99                     vRect2
.yBottom 
= vRect3
.yBottom
; 
 100                     vRect2
.xLeft   
= vRect3
.xLeft
; 
 101                     vRect2
.xRight  
= vRect3
.xRight
; 
 102                     vRect3
.yBottom  
= vRect2
.yTop
; 
 103                     if (vRect3
.yBottom 
<= 1) 
 105                     ::WinFillRect(hPS
, &vRect3
,  pGauge
->GetBackgroundColour().GetPixel()); 
 106                     ::WinFillRect(hPS
, &vRect2
, pGauge
->GetForegroundColour().GetPixel()); 
 110                     dRange 
= (double)(vRect3
.xRight 
- vRect3
.xLeft
); 
 111                     dPixelToRange  
= dRange
/(double)pGauge
->GetRange(); 
 112                     vRect2
.yTop    
= vRect3
.yTop
; 
 113                     vRect2
.yBottom 
= vRect3
.yBottom
; 
 114                     vRect2
.xLeft   
= vRect3
.xLeft
; 
 115                     vRect2
.xRight  
= (int)(pGauge
->GetValue() * dPixelToRange
); 
 116                     vRect3
.xLeft 
= vRect2
.xRight
; 
 117                     if (vRect3
.xLeft 
<= 1) 
 119                     ::WinFillRect(hPS
, &vRect3
,  pGauge
->GetBackgroundColour().GetPixel()); 
 120                     ::WinFillRect(hPS
, &vRect2
, pGauge
->GetForegroundColour().GetPixel()); 
 125     return (fnWndProcGauge( hWnd
 
 131 } // end of wxGaugeWndProc 
 133 bool wxGauge::Create( 
 137 , const wxPoint
&                    rPos
 
 138 , const wxSize
&                     rSize
 
 140 , const wxValidator
&                rValidator
 
 141 , const wxString
&                   rsName
 
 146     int                             nWidth   
= rSize
.x
; 
 147     int                             nHeight  
= rSize
.y
; 
 153     SetValidator(rValidator
); 
 156         pParent
->AddChild(this); 
 157     m_backgroundColour
.Set(wxString("LIGHT GREY")); 
 158     m_foregroundColour
.Set(wxString("NAVY")); 
 160     m_nRangeMax   
= nRange
; 
 162     m_windowStyle 
= lStyle
; 
 165         m_windowId 
= (int)NewControlId(); 
 169     if (m_windowStyle 
& wxCLIP_SIBLINGS 
) 
 170         lMsStyle 
|= WS_CLIPSIBLINGS
; 
 173     // OS/2 will use an edit control for this, since there is not a native gauge 
 174     // Other choices include using an armless slider but they are more difficult 
 175     // to control and manipulate 
 178     lMsStyle 
= WS_VISIBLE 
| ES_MARGIN 
| ES_LEFT 
| ES_READONLY
; 
 179     if (m_windowStyle 
& wxCLIP_SIBLINGS
) 
 180         lMsStyle 
|= WS_CLIPSIBLINGS
; 
 182     m_hWnd 
= (WXHWND
)::WinCreateWindow( (HWND
)GetHwndOf(pParent
) // Parent window handle 
 183                                        ,WC_ENTRYFIELD            
// Window class 
 184                                        ,(PSZ
)NULL                
// Initial Text 
 185                                        ,(ULONG
)lMsStyle          
// Style flags 
 186                                        ,0L, 0L, 0L, 0L           // Origin -- 0 size 
 187                                        ,(HWND
)GetHwndOf(pParent
) // owner window handle (same as parent 
 188                                        ,HWND_TOP                 
// initial z position 
 189                                        ,(HMENU
)m_windowId        
// Window identifier 
 190                                        ,NULL                     
// Slider control data 
 191                                        ,NULL                     
// no Presentation parameters 
 194     wxAssociateWinWithHandle( m_hWnd
 
 197     ::WinSetWindowULong(GetHwnd(), QWL_USER
, (LONG
)this); 
 198     fnWndProcGauge 
= (WXFARPROC
)::WinSubclassWindow(m_hWnd
, (PFNWP
)wxGaugeWndProc
); 
 199     ::WinQueryWindowPos(m_hWnd
, &vSwp
); 
 202     wxFont
*                          pTextFont 
= new wxFont( 10 
 217     ::WinShowWindow((HWND
)GetHWND(), TRUE
); 
 220 } // end of wxGauge::Create 
 222 int wxGauge::GetBezelFace() const 
 225 } // end of wxGauge::GetBezelFace 
 227 int wxGauge::GetRange() const 
 230 } // end of wxGauge::GetRange 
 232 int wxGauge::GetShadowWidth() const 
 235 } // end of wxGauge::GetShadowWidth 
 237 int wxGauge::GetValue() const 
 240 } // end of wxGauge::GetValue 
 242 bool wxGauge::SetBackgroundColour( 
 243   const wxColour
&                   rColour
 
 246     if (!wxControl::SetBackgroundColour(rColour
)) 
 249     LONG                            lColor 
= (LONG
)rColour
.GetPixel(); 
 251     ::WinSetPresParam( GetHwnd() 
 257 } // end of wxGauge::SetBackgroundColour 
 259 void wxGauge::SetBezelFace( 
 263 } // end of wxGauge::SetBezelFace 
 265 bool wxGauge::SetForegroundColour( 
 266   const wxColour
&                   rColour
 
 269     if (!wxControl::SetForegroundColour(rColour
)) 
 272     LONG                            lColor 
= (LONG
)rColour
.GetPixel(); 
 274     ::WinSetPresParam( GetHwnd() 
 281 } // end of wxGauge::SetForegroundColour 
 283 void wxGauge::SetRange( 
 287     m_nRangeMax 
= nRange
; 
 288 } // end of wxGauge::SetRange 
 290 void wxGauge::SetShadowWidth( 
 294 } // end of wxGauge::SetShadowWidth 
 296 void wxGauge::SetValue( 
 303     ::WinQueryWindowRect(GetHwnd(), &vRect
); 
 304     ::WinInvalidateRect(GetHwnd(), &vRect
, FALSE
); 
 305 } // end of wxGauge::SetValue