Various OS/2 changes to keep up with general library changes and some new dilaog support.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@13639 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
David Webster
2002-01-18 17:01:08 +00:00
parent 19f1a09ac9
commit 1b086de146
6 changed files with 110 additions and 131 deletions

View File

@@ -27,6 +27,11 @@
IMPLEMENT_DYNAMIC_CLASS(wxRadioButton, wxControl)
void wxRadioButton::Init()
{
m_bFocusJustSet = FALSE;
} // end of wxRadioButton::Init
void wxRadioButton::Command (
wxCommandEvent& rEvent
)
@@ -48,103 +53,81 @@ bool wxRadioButton::Create(
, const wxString& rsName
)
{
int nX = rPos.x;
int nY = rPos.y;
int nWidth = rSize.x;
int nHeight = rSize.y;
long lsStyle = 0L;
long lGroupStyle = 0L;
SetName(rsName);
if ( !CreateControl( pParent
,vId
,rPos
,rSize
,lStyle
#if wxUSE_VALIDATORS
SetValidator(rValidator);
,rValidator
#endif
,rsName))
return FALSE;
if (pParent)
pParent->AddChild(this);
long lSstyle = HasFlag(wxRB_GROUP) ? WS_GROUP : 0;
SetBackgroundColour(pParent->GetBackgroundColour());
SetForegroundColour(pParent->GetForegroundColour());
lSstyle |= BS_AUTORADIOBUTTON;
if (vId == -1)
m_windowId = (int)NewControlId();
else
m_windowId = vId;
if (HasFlag(wxCLIP_SIBLINGS))
lSstyle |= WS_CLIPSIBLINGS;
if (!OS2CreateControl( _T("BUTTON")
,lSstyle
,rPos
,rSize
,rsLabel
,0
))
return FALSE;
m_windowStyle = lStyle ;
if (HasFlag(wxRB_GROUP))
SetValue(TRUE);
if (m_windowStyle & wxRB_GROUP)
lGroupStyle = WS_GROUP;
lsStyle = lGroupStyle | BS_AUTORADIOBUTTON | WS_VISIBLE ;
if (m_windowStyle & wxCLIP_SIBLINGS )
lsStyle |= WS_CLIPSIBLINGS;
//
// 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 ( GetHwndOf(pParent)
,WC_BUTTON
,rsLabel.c_str()
,lsStyle
,0, 0, 0, 0
,GetWinHwnd(pParent)
,HWND_TOP
,(HMENU)m_windowId
,NULL
,NULL
);
wxCHECK_MSG(m_hWnd, FALSE, wxT("Failed to create radiobutton"));
if (rsLabel != wxT(""))
{
int nLabelWidth;
int nLabelHeight;
GetTextExtent( rsLabel
,&nLabelWidth
,&nLabelHeight
,NULL
,NULL
,&this->GetFont()
);
if (nWidth < 0)
nWidth = (int)(nLabelWidth + RADIO_SIZE);
if (nHeight<0)
{
nHeight = (int)(nLabelHeight);
if (nHeight < RADIO_SIZE)
nHeight = RADIO_SIZE;
}
}
else
{
if (nWidth < 0)
nWidth = RADIO_SIZE;
if (nHeight < 0)
nHeight = RADIO_SIZE;
}
//
// Subclass again for purposes of dialog editing mode
//
SubclassWin((WXHWND)m_hWnd);
SetFont(pParent->GetFont());
SetSize( nX
,nY
,nWidth
,nHeight
SetFont(*wxSMALL_FONT);
SetSize( rPos.x
,rPos.y
,rSize.x
,rSize.y
);
return FALSE;
return TRUE;
} // end of wxRadioButton::Create
wxSize wxRadioButton::DoGetBestSize() const
{
static int snRadioSize = 0;
if (!snRadioSize)
{
wxScreenDC vDC;
vDC.SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT));
snRadioSize = vDC.GetCharHeight();
}
wxString sStr = GetLabel();
int nRadioWidth;
int nRadioHeight;
if (!sStr.empty())
{
GetTextExtent( sStr
,&nRadioWidth
,&nRadioHeight
);
nRadioWidth += snRadioSize + GetCharWidth();
if (nRadioHeight < snRadioSize)
nRadioHeight = snRadioSize;
}
else
{
nRadioWidth = snRadioSize;
nRadioHeight = snRadioSize;
}
return wxSize( nRadioWidth
,nRadioHeight
);
} // end of wxRadioButton::DoGetBestSize
//
// Get single selection, for single choice list items
//
@@ -172,6 +155,22 @@ bool wxRadioButton::OS2Command(
return FALSE;
} // end of wxRadioButton::OS2Command
void wxRadioButton::SetFocus()
{
// when the radio button receives a WM_SETFOCUS message it generates a
// BN_CLICKED which is totally unexpected and leads to catastrophic results
// if you pop up a dialog from the radio button event handler as, when the
// dialog is dismissed, the focus is returned to the radio button which
// generates BN_CLICKED which leads to showing another dialog and so on
// without end!
//
// to aviod this, we drop the pseudo BN_CLICKED events generated when the
// button gains focus
m_bFocusJustSet = TRUE;
wxControl::SetFocus();
}
void wxRadioButton::SetLabel(
const wxString& rsLabel
)