/////////////////////////////////////////////////////////////////////////////
-// Name: radiobox.cpp
+// Name: src/os2/radiobox.cpp
// Purpose: wxRadioBox
// Author: David Webster
// Modified by:
,MPARAM wParam
,MPARAM lParam
);
+MRESULT EXPENTRY wxRadioBoxWndProc( HWND hWnd
+ ,UINT uMessage
+ ,MPARAM wParam
+ ,MPARAM lParam
+ );
// ---------------------------------------------------------------------------
// global vars
// ---------------------------------------------------------------------------
// the pointer to standard radio button wnd proc
+extern void wxAssociateWinWithHandle( HWND hWnd
+ ,wxWindowOS2* pWin
+ );
static WXFARPROC fnWndProcRadioBtn = NULL;
+static WXFARPROC fnWndProcRadioBox = NULL;
// ===========================================================================
// implementation
wxRadioBox::~wxRadioBox()
{
- m_isBeingDeleted = TRUE;
+ m_isBeingDeleted = true;
if (m_ahRadioButtons)
{
delete[] m_pnRadioHeight;
} // end of wxRadioBox::~wxRadioBox
-void wxRadioBox::AdjustButtons(
- int nX
-, int nY
-, int nWidth
-, int nHeight
-, long lSizeFlags
-)
+void wxRadioBox::AdjustButtons( int nX,
+ int nY,
+ int nWidth,
+ int nHeight,
+ int WXUNUSED(nSizeFlags) )
{
- wxSize vMaxSize;
- int nXOffset = nX;
- int nYOffset = nY + nHeight;
- int nCx1;
- int nCy1;
- int nStartX;
- int nStartY;
- int nMaxWidth;
- int nMaxHeight;
- int nTotWidth;
- int nTotHeight;
+ wxSize vMaxSize;
+ int nXOffset = nX;
+ int nYOffset = nY + nHeight;
+ int nCx1;
+ int nCy1;
+ int nStartX;
+ int nStartY;
+ int nMaxWidth;
+ int nMaxHeight;
+ wxFont vFont = GetFont();
wxGetCharSize( m_hWnd
,&nCx1
,&nCy1
- ,&GetFont()
+ ,&vFont
);
vMaxSize = GetMaxButtonSize();
nMaxWidth = vMaxSize.x;
for (i = 0; i < nCount; i++)
{
if (GetRadioButtons()[i] == hWnd)
- return TRUE;
+ return true;
}
- return FALSE;
+ return false;
} // end of wxRadioBox::ContainsHWND
+bool wxRadioBox::Create(
+ wxWindow* pParent
+, wxWindowID vId
+, const wxString& rsTitle
+, const wxPoint& rPos
+, const wxSize& rSize
+, const wxArrayString& asChoices
+, int nMajorDim
+, long lStyle
+, const wxValidator& rVal
+, const wxString& rsName
+)
+{
+ wxCArrayString chs(asChoices);
+
+ return Create(pParent, vId, rsTitle, rPos, rSize, chs.GetCount(),
+ chs.GetStrings(), nMajorDim, lStyle, rVal, rsName);
+}
+
bool wxRadioBox::Create(
wxWindow* pParent
, wxWindowID vId
, const wxString asChoices[]
, int nMajorDim
, long lStyle
-#if wxUSE_VALIDATORS
, const wxValidator& rVal
-#endif
, const wxString& rsName
)
{
- //
- // System fonts are too big in OS/2 and they are blue
- // We want smaller fonts and black by default.
- //
- wxFont& rFont = *wxSMALL_FONT;
wxColour vColour;
LONG lColor;
- vColour.Set(wxString("BLACK"));
- lColor = (LONG)vColour.GetPixel();
+ vColour.Set(wxString(wxT("BLACK")));
+ m_backgroundColour = pParent->GetBackgroundColour();
m_nSelectedButton = -1;
- m_nNoItems = nNum;
+ m_nNoItems = 0;
m_nMajorDim = nMajorDim == 0 ? nNum : nMajorDim;
m_nNoRowsOrCols = nMajorDim;
//
// Common initialization
//
- if (!OS2CreateControl( pParent
- ,vId
- ,rPos
- ,rSize
- ,lStyle
-#if wxUSE_VALIDATORS
- ,rVal
-#endif
- ,rsName
- ))
-
-
-
-
- if (!OS2CreateControl( "STATIC"
- ,SS_GROUPBOX | WS_GROUP
+ if (!CreateControl( pParent
+ ,vId
+ ,rPos
+ ,rSize
+ ,lStyle
+ ,rVal
+ ,rsName
+ ))
+ return false;
+ if (!OS2CreateControl( wxT("STATIC")
+ ,SS_GROUPBOX
,rPos
,rSize
,rsTitle
))
+ return false;
-#if RADIOBTN_PARENT_IS_RADIOBOX
- HWND hWndParent = GetHwnd();
-#else
- HWND hWndParent = GetHwndOf(pParent);
-#endif
- HFONT hFont;
+ wxAssociateWinWithHandle(m_hWnd, this);
//
// Some radio boxes test consecutive id.
//
+ m_nNoItems = nNum;
(void)NewControlId();
m_ahRadioButtons = new WXHWND[nNum];
m_pnRadioWidth = new int[nNum];
m_pnRadioHeight = new int[nNum];
- if (rFont.Ok())
- {
- hFont = rFont.GetResourceHandle();
- }
-
for (int i = 0; i < nNum; i++)
{
m_pnRadioWidth[i] = m_pnRadioHeight[i] = -1;
HWND hWndBtn = (WXHWND)::WinCreateWindow ( GetHwndOf(pParent)
,WC_BUTTON
- ,asChoices[i]
+ ,(PSZ)asChoices[i].c_str()
,lStyleBtn
,0, 0, 0, 0
,GetWinHwnd(pParent)
,NULL
,NULL
);
+ lColor = (LONG)vColour.GetPixel();
::WinSetPresParam( hWndBtn
,PP_FOREGROUNDCOLOR
,sizeof(LONG)
,(PVOID)&lColor
);
+ lColor = (LONG)m_backgroundColour.GetPixel();
+
+ ::WinSetPresParam( hWndBtn
+ ,PP_BACKGROUNDCOLOR
+ ,sizeof(LONG)
+ ,(PVOID)&lColor
+ );
if (!hWndBtn)
{
- return FALSE;
+ return false;
}
m_ahRadioButtons[i] = (WXHWND)hWndBtn;
SubclassRadioButton((WXHWND)hWndBtn);
+ wxAssociateWinWithHandle(hWndBtn, this);
wxOS2SetFont( hWndBtn
- ,rFont
+ ,*wxSMALL_FONT
);
::WinSetWindowULong(hWndBtn, QWL_USER, (ULONG)this);
m_aSubControls.Add(nNewId);
,NULL
,NULL
);
- SetFont(*wxSMALL_FONT);
+ SetFont(*wxSMALL_FONT);
+ fnWndProcRadioBox = (WXFARPROC)::WinSubclassWindow( GetHwnd()
+ ,(PFNWP)wxRadioBoxWndProc
+ );
+ ::WinSetWindowULong(GetHwnd(), QWL_USER, (ULONG)this);
+ lColor = (LONG)vColour.GetPixel();
::WinSetPresParam( m_hWnd
,PP_FOREGROUNDCOLOR
,sizeof(LONG)
,(PVOID)&lColor
);
+ ::WinSetPresParam( m_hWnd
+ ,PP_BORDERDARKCOLOR
+ ,sizeof(LONG)
+ ,(PVOID)&lColor
+ );
+ lColor = (LONG)m_backgroundColour.GetPixel();
+
+ ::WinSetPresParam( m_hWnd
+ ,PP_BACKGROUNDCOLOR
+ ,sizeof(LONG)
+ ,(PVOID)&lColor
+ );
+ ::WinSetPresParam( m_hWnd
+ ,PP_BORDERLIGHTCOLOR
+ ,sizeof(LONG)
+ ,(PVOID)&lColor
+ );
+ SetXComp(0);
+ SetYComp(0);
SetSelection(0);
SetSize( rPos.x
,rPos.y
,rSize.x
,rSize.y
);
- return TRUE;
+ return true;
} // end of wxRadioBox::Create
wxSize wxRadioBox::DoGetBestSize() const
int nTotHeight;
int nStartX;
int nStartY;
+ wxFont vFont = GetFont();
m_nSizeFlags = nSizeFlags;
GetPosition( &nCurrentX
,&nHeightOld
);
- if (nX == -1 && !(nSizeFlags & wxSIZE_ALLOW_MINUS_ONE))
+ if (nX == wxDefaultCoord && !(nSizeFlags & wxSIZE_ALLOW_MINUS_ONE))
nXx = nCurrentX;
- if (nY == -1 && !(nSizeFlags & wxSIZE_ALLOW_MINUS_ONE))
+ if (nY == wxDefaultCoord && !(nSizeFlags & wxSIZE_ALLOW_MINUS_ONE))
nYy = nCurrentY;
-
+ if (nYy < 0)
+ nYy = 0;
+ if (nXx < 0)
+ nXx = 0;
wxGetCharSize( m_hWnd
,&nCx1
,&nCy1
- ,&GetFont()
+ ,&vFont
);
//
if (pParent)
{
- nYy = pParent->GetClientSize().y - (nYy + nHeight);
+ int nOS2Height = GetOS2ParentHeight(pParent);
+
+ nYy = nOS2Height - (nYy + nHeight);
nYOffset = nYy + nHeight;
}
else
}
} // end of wxRadioBox::DoSetSize
-void wxRadioBox::Enable(
- int nItem
-, bool bEnable
-)
+bool wxRadioBox::Enable(int nItem, bool bEnable)
{
- wxCHECK_RET( nItem >= 0 && nItem < m_nNoItems,
+ wxCHECK_MSG( IsValid(nItem), false,
wxT("invalid item in wxRadioBox::Enable()") );
::WinEnableWindow((HWND) m_ahRadioButtons[nItem], bEnable);
+ return true;
} // end of wxRadioBox::Enable
bool wxRadioBox::Enable(
)
{
if ( !wxControl::Enable(bEnable) )
- return FALSE;
+ return false;
for (int i = 0; i < m_nNoItems; i++)
::WinEnableWindow((HWND)m_ahRadioButtons[i], bEnable);
- return TRUE;
+ return true;
} // end of wxRadioBox::Enable
-int wxRadioBox::FindString(
- const wxString& rsStr
-) const
-{
- for (int i = 0; i < m_nNoItems; i++)
- {
- if (rsStr == wxGetWindowText(m_ahRadioButtons[i]) )
- return i;
- }
- return wxNOT_FOUND;
-} // end of wxRadioBox::FindString
-
int wxRadioBox::GetColumnCount() const
{
return GetNumHor();
return m_nNoItems;
} // end of wxRadioBox::GetCount
-wxString wxRadioBox::GetLabel(
- int nItem
-) const
+wxString wxRadioBox::GetLabel(int nItem) const
{
- wxCHECK_MSG(nItem >= 0 && nItem < m_nNoItems, wxT(""), wxT("invalid radiobox index") );
+ wxCHECK_MSG( IsValid(nItem), wxEmptyString, wxT("invalid radiobox index") );
return wxGetWindowText(m_ahRadioButtons[nItem]);
} // end of wxRadioBox::GetLabel
if (nHeightMax < nHeight )
nHeightMax = nHeight;
}
- return(wxSize( nWidthMax
- ,nHeightMax
- )
- );
+ wxSize maxsize( nWidthMax, nHeightMax);
+ return maxsize;
} // end of wxRadioBox::GetMaxButtonSize
int wxRadioBox::GetNumHor() const
}
} // end of wxRadioBox::GetNumVer
-void wxRadioBox::GetPosition(
- int* pnX
-, int* pnY
-) const
+void wxRadioBox::GetPosition( int* pnX,
+ int* WXUNUSED(pnY) ) const
{
wxWindowOS2* pParent = GetParent();
- RECT vRect = { -1, -1, -1, -1 };;
+ RECT vRect = { -1, -1, -1, -1 };
POINTL vPoint;
int i;
,&vRect
);
- *pnWidth = vRect.xRight - vRect.xLeft;
- *pnHeight = vRect.yBottom - vRect.yTop;
+ if (pnWidth)
+ *pnWidth = vRect.xRight - vRect.xLeft;
+ if (pnHeight)
+ *pnHeight = vRect.yTop - vRect.yBottom;
} // end of wxRadioBox::GetSize
// Find string for position
return sResult;
} // end of wxRadioBox::GetStringSelection
-wxSize wxRadioBox::GetTotalButtonSize(
- const wxSize& rSizeBtn
-) const
+wxSize wxRadioBox::GetTotalButtonSize( const wxSize& rSizeBtn ) const
{
- int nCx1;
- int nCy1;
- int nExtraHeight;
- int nHeight;
- int nWidth;
- int nWidthLabel;
-
- wxGetCharSize( m_hWnd
- ,&nCx1
- ,&nCy1
- ,(wxFont*)&GetFont()
- );
+ int nCx1;
+ int nCy1;
+ int nExtraHeight;
+ int nHeight;
+ int nWidth;
+ int nWidthLabel;
+ wxFont vFont = GetFont();
+
+ wxGetCharSize( m_hWnd, &nCx1, &nCy1, &vFont );
nExtraHeight = nCy1;
nHeight = GetNumVer() * rSizeBtn.y + (2 * nCy1);
if (nWidthLabel > nWidth)
nWidth = nWidthLabel;
- return(wxSize( nWidth
- ,nHeight
- )
- );
+ wxSize total( nWidth, nHeight );
+ return total;
} // end of wxRadioBox::GetTotalButtonSize
-WXHBRUSH wxRadioBox::OnCtlColor(
- WXHDC hwinDC
-, WXHWND hWnd
-, WXUINT uCtlColor
-, WXUINT uMessage
-, WXWPARAM wParam
-, WXLPARAM lParam
-)
+WXHBRUSH wxRadioBox::OnCtlColor( WXHDC hwinDC,
+ WXHWND WXUNUSED(hWnd),
+ WXUINT WXUNUSED(uCtlColor),
+ WXUINT WXUNUSED(uMessage),
+ WXWPARAM WXUNUSED(wParam),
+ WXLPARAM WXUNUSED(lParam) )
{
- HPS hPS = (HPS)hwinDC; // pass in a PS handle in OS/2
+ HPS hPS = (HPS)hwinDC; // pass in a PS handle in OS/2
if (GetParent()->GetTransparentBackground())
::GpiSetBackMix(hPS, BM_LEAVEALONE);
else
::GpiSetBackMix(hPS, BM_OVERPAINT);
- wxColour vColBack = GetBackgroundColour();
+ wxColour vColBack = GetBackgroundColour();
::GpiSetBackColor(hPS, vColBack.GetPixel());
::GpiSetColor(hPS, vColBack.GetPixel());
-
- wxBrush* pBrush = wxTheBrushList->FindOrCreateBrush( vColBack
- ,wxSOLID
- );
+ wxBrush* pBrush = wxTheBrushList->FindOrCreateBrush( vColBack, wxSOLID );
return ((WXHBRUSH)pBrush->GetResourceHandle());
} // end of wxRadioBox::OnCtlColor
-bool wxRadioBox::OS2Command(
- WXUINT uCmd
-, WXWORD wId
-)
+bool wxRadioBox::OS2Command( WXUINT uCmd,
+ WXWORD wId)
{
- int nSelectedButton = -1;
+ int nSelectedButton = -1;
if (uCmd == BN_CLICKED)
{
if (wId == GetId())
- return TRUE;
+ return true;
for (int i = 0; i < m_nNoItems; i++)
if (nSelectedButton == -1)
{
//
- // Just ignore it - due to a hack with WM_NCHITTEST handling in our
- // wnd proc, we can receive dummy click messages when we click near
- // the radiobox edge (this is ugly but Julian wouldn't let me get
- // rid of this...)
- return FALSE;
+ // Just ignore it
+ //
+ return false;
}
if (nSelectedButton != m_nSelectedButton)
{
m_nSelectedButton = nSelectedButton;
SendNotificationEvent();
}
- return TRUE;
+ return true;
}
else
- return FALSE;
+ return false;
} // end of wxRadioBox::OS2Command
void wxRadioBox::SendNotificationEvent()
//
// Nothing to do
//
- return FALSE;
+ return false;
}
//
// Also set the font of our radio buttons
//
- WXHFONT hFont = wxFont(rFont).GetResourceHandle();
-
for (int n = 0; n < (int)m_nNoItems; n++)
{
HWND hWndBtn = (HWND)m_ahRadioButtons[n];
);
::WinInvalidateRect(hWndBtn, NULL, FALSE);
}
- return TRUE;
+ return true;
} // end of wxRadioBox::SetFont
void wxRadioBox::SetSelection(
int nNum
)
{
- wxCHECK_RET( (nNum >= 0) && (nNum < m_nNoItems), wxT("invalid radiobox index") );
+ wxCHECK_RET( IsValid(nNum), wxT("invalid radiobox index") );
- if (m_nSelectedButton >= 0 && m_nSelectedButton < m_nNoItems)
+ if ( IsValid(m_nSelectedButton) )
::WinSendMsg((HWND)m_ahRadioButtons[m_nSelectedButton], BM_SETCHECK, (MPARAM)0, (MPARAM)0);
::WinSendMsg((HWND)m_ahRadioButtons[nNum], BM_SETCHECK, (MPARAM)1, (MPARAM)0);
, const wxString& rsLabel
)
{
- wxCHECK_RET( nItem >= 0 && nItem < m_nNoItems, wxT("invalid radiobox index") );
+ wxCHECK_RET( IsValid(nItem), wxT("invalid radiobox index") );
m_pnRadioWidth[nItem] = m_pnRadioHeight[nItem] = -1;
- ::WinSetWindowText((HWND)m_ahRadioButtons[nItem], rsLabel.c_str());
+ ::WinSetWindowText((HWND)m_ahRadioButtons[nItem], (PSZ)rsLabel.c_str());
} // end of wxRadioBox::SetString
-bool wxRadioBox::SetStringSelection(
- const wxString& rsStr
-)
+bool wxRadioBox::SetStringSelection(const wxString& rsStr)
{
- int nSel = FindString(rsStr);
+ int nSel = FindString(rsStr);
if (nSel > -1)
{
SetSelection(nSel);
- return TRUE;
+ return true;
}
else
- return FALSE;
+ return false;
} // end of wxRadioBox::SetStringSelection
bool wxRadioBox::Show(
bool bShow
)
{
- int nCmdShow = 0;
-
if (!wxControl::Show(bShow))
- return FALSE;
+ return false;
for (int i = 0; i < m_nNoItems; i++)
{
::WinShowWindow((HWND)m_ahRadioButtons[i], (BOOL)bShow);
}
- return TRUE;
+ return true;
} // end of wxRadioBox::Show
// Show a specific button
-void wxRadioBox::Show(
+bool wxRadioBox::Show(
int nItem
, bool bShow
)
{
- wxCHECK_RET( nItem >= 0 && nItem < m_nNoItems,
+ wxCHECK_MSG( IsValid(nItem), false,
wxT("invalid item in wxRadioBox::Show()") );
::WinShowWindow((HWND)m_ahRadioButtons[nItem], bShow);
+
+ return true;
} // end of wxRadioBox::Show
void wxRadioBox::SubclassRadioButton(
WXHWND hWndBtn
)
{
- HWND hwndBtn = (HWND)hWndBtn;
-
fnWndProcRadioBtn = (WXFARPROC)::WinSubclassWindow(hWndBtn, (PFNWP)wxRadioBtnWndProc);
} // end of wxRadioBox::SubclassRadioButton
,QWL_USER
);
USHORT uVk = SHORT2FROMMP((MPARAM)lParam);
- bool bProcessed = TRUE;
+ bool bProcessed = true;
wxDirection eDir;
switch(uVk)
break;
default:
- bProcessed = FALSE;
+ bProcessed = false;
//
// Just to suppress the compiler warning
);
} // end of wxRadioBtnWndProc
+MRESULT EXPENTRY wxRadioBoxWndProc(
+ HWND hWnd
+, UINT uMessage
+, MPARAM wParam
+, MPARAM lParam
+)
+{
+ return (fnWndProcRadioBox( hWnd
+ ,(ULONG)uMessage
+ ,(MPARAM)wParam
+ ,(MPARAM)lParam
+ )
+ );
+} // end of wxRadioBoxWndProc