/////////////////////////////////////////////////////////////////////////////
-// Name: button.cpp
+// Name: src/os2/button.cpp
// Purpose: wxButton
// Author: David Webster
// Modified by:
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
+#include "wx/button.h"
+
#ifndef WX_PRECOMP
- #include "wx/button.h"
+ #include "wx/app.h"
#include "wx/brush.h"
#include "wx/panel.h"
#include "wx/bmpbuttn.h"
#include "wx/settings.h"
#include "wx/dcscreen.h"
#include "wx/scrolwin.h"
+ #include "wx/toplevel.h"
#endif
+#include "wx/stockitem.h"
#include "wx/os2/private.h"
#define BUTTON_HEIGHT_FROM_CHAR_HEIGHT(cy) (11*EDIT_HEIGHT_FROM_CHAR_HEIGHT(cy)/10)
#define BST_CHECKED 0x0001
#endif
-IMPLEMENT_DYNAMIC_CLASS(wxButton, wxControl)
-
// Button
-bool wxButton::Create(
- wxWindow* pParent
-, wxWindowID vId
-, const wxString& rsLabel
-, const wxPoint& rPos
-, const wxSize& rSize
-, long lStyle
-#if wxUSE_VALIDATORS
-, const wxValidator& rValidator
-#endif
-, const wxString& rsName
-)
+bool wxButton::Create( wxWindow* pParent,
+ wxWindowID vId,
+ const wxString& rsLbl,
+ const wxPoint& rPos,
+ const wxSize& rSize,
+ long lStyle,
+ const wxValidator& rValidator,
+ const wxString& rsName)
{
+ wxString rsLabel(rsLbl);
+ if (rsLabel.empty() && wxIsStockID(vId))
+ rsLabel = wxGetStockLabel(vId);
+
+ wxString sLabel = ::wxPMTextToLabel(rsLabel);
+
SetName(rsName);
#if wxUSE_VALIDATORS
SetValidator(rValidator);
m_hWnd = (WXHWND)::WinCreateWindow( GetHwndOf(pParent) // Parent handle
,WC_BUTTON // A Button class window
- ,(PSZ)rsLabel.c_str() // Button text
+ ,sLabel.c_str() // Button text
,lStyle // Button style
,0, 0, 0, 0 // Location and size
,GetHwndOf(pParent) // Owner handle
);
if (m_hWnd == 0)
{
- return FALSE;
+ return false;
}
//
,rSize.y
);
delete pButtonFont;
- return TRUE;
+ return true;
} // end of wxButton::Create
wxButton::~wxButton()
{
- wxPanel* pPanel = wxDynamicCast(GetParent(), wxPanel);
+ wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow);
- if (pPanel)
+ if (tlw)
{
- if (pPanel->GetDefaultItem() == this)
+ if (tlw->GetDefaultItem() == this)
{
//
// Don't leave the panel with invalid default item
//
- pPanel->SetDefaultItem(NULL);
+ tlw->SetDefaultItem(NULL);
}
}
} // end of wxButton::~wxButton
int nWidthButton;
int nWidthChar;
int nHeightChar;
+ wxFont vFont = (wxFont)GetFont();
GetTextExtent( rsLabel
,&nWidthButton
wxGetCharSize( GetHWND()
,&nWidthChar
,&nHeightChar
- ,(wxFont*)&GetFont()
+ ,&vFont
);
//
//
// Need a little extra to make it look right
//
- nHeightButton += nHeightChar/1.5;
+ nHeightButton += (int)(nHeightChar/1.5);
if (!HasFlag(wxBU_EXACTFIT))
{
bool wxButton::SendClickEvent()
{
- wxCommandEvent vEvent( wxEVT_COMMAND_BUTTON_CLICKED
+ wxCommandEvent vEvent( wxEVT_BUTTON
,GetId()
);
return ProcessCommand(vEvent);
} // end of wxButton::SendClickEvent
-void wxButton::SetDefault()
+wxWindow *wxButton::SetDefault()
{
- wxWindow* pParent = GetParent();
-
- wxCHECK_RET( pParent, _T("button without parent?") );
-
//
- // Set this one as the default button both for wxWindows and Windows
+ // Set this one as the default button both for wxWidgets and Windows
//
- wxWindow* pWinOldDefault = pParent->SetDefaultItem(this);
-
- SetDefaultStyle( wxDynamicCast(pWinOldDefault, wxButton)
- ,FALSE
- );
- SetDefaultStyle( this
- ,TRUE
- );
+ wxWindow* pWinOldDefault = wxButtonBase::SetDefault();
+
+ SetDefaultStyle( wxDynamicCast(pWinOldDefault, wxButton), false);
+ SetDefaultStyle( this, true );
+
+ return pWinOldDefault;
} // end of wxButton::SetDefault
void wxButton::SetTmpDefault()
{
- wxWindow* pParent = GetParent();
+ wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow);
- wxCHECK_RET( pParent, _T("button without parent?") );
+ wxCHECK_RET( tlw, wxT("button without top level window?") );
- wxWindow* pWinOldDefault = pParent->GetDefaultItem();
+ wxWindow* pWinOldDefault = tlw->GetDefaultItem();
- pParent->SetTmpDefaultItem(this);
- SetDefaultStyle( wxDynamicCast(pWinOldDefault, wxButton)
- ,FALSE
- );
- SetDefaultStyle( this
- ,TRUE
- );
+ tlw->SetTmpDefaultItem(this);
+ SetDefaultStyle( wxDynamicCast(pWinOldDefault, wxButton), false);
+ SetDefaultStyle( this, true );
} // end of wxButton::SetTmpDefault
void wxButton::UnsetTmpDefault()
{
- wxWindow* pParent = GetParent();
+ wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow);
- wxCHECK_RET( pParent, _T("button without parent?") );
+ wxCHECK_RET( tlw, wxT("button without top level window?") );
- pParent->SetTmpDefaultItem(NULL);
+ tlw->SetTmpDefaultItem(NULL);
- wxWindow* pWinOldDefault = pParent->GetDefaultItem();
+ wxWindow* pWinOldDefault = tlw->GetDefaultItem();
- SetDefaultStyle( this
- ,FALSE
- );
- SetDefaultStyle( wxDynamicCast(pWinOldDefault, wxButton)
- ,TRUE
- );
+ SetDefaultStyle( this, false );
+ SetDefaultStyle( wxDynamicCast(pWinOldDefault, wxButton), true );
} // end of wxButton::UnsetTmpDefault
void wxButton::SetDefaultStyle(
if ((lStyle & BS_USERBUTTON) != BS_USERBUTTON)
{
if (bOn)
- lStyle | BS_DEFAULT;
+ lStyle |= BS_DEFAULT;
else
lStyle &= ~BS_DEFAULT;
::WinSetWindowULong(GetHwndOf(pBtn), QWL_STYLE, lStyle);
// event/message handlers
// ----------------------------------------------------------------------------
-bool wxButton::OS2Command(
- WXUINT uParam
-, WXWORD wId
-)
+bool wxButton::OS2Command(WXUINT uParam, WXWORD WXUNUSED(wId))
{
- bool bProcessed = FALSE;
+ bool bProcessed = false;
switch (uParam)
{
bProcessed = SendClickEvent();
break;
}
+
return bProcessed;
} // end of wxButton::OS2Command
-WXHBRUSH wxButton::OnCtlColor(
- WXHDC pDC
-, WXHWND pWnd
-, WXUINT nCtlColor
-, WXUINT uMessage
-, WXWPARAM wParam
-, WXLPARAM lParam
-)
+WXHBRUSH wxButton::OnCtlColor( WXHDC WXUNUSED(pDC),
+ WXHWND WXUNUSED(pWnd),
+ WXUINT WXUNUSED(nCtlColor),
+ WXUINT WXUNUSED(uMessage),
+ WXWPARAM WXUNUSED(wParam),
+ WXLPARAM WXUNUSED(lParam) )
{
- wxBrush* pBackgroundBrush = wxTheBrushList->FindOrCreateBrush( GetBackgroundColour()
- ,wxSOLID
- );
+ wxBrush* pBackgroundBrush = wxTheBrushList->FindOrCreateBrush( GetBackgroundColour()
+ ,wxSOLID
+ );
return (WXHBRUSH)pBackgroundBrush->GetResourceHandle();
} // end of wxButton::OnCtlColor
//
// We must use WS_CLIPSIBLINGS with the buttons or they would draw over
- // each other in any resizeable dialog which has more than one button in
+ // each other in any resizable dialog which has more than one button in
// the bottom
//
dwStyle |= WS_CLIPSIBLINGS;
return dwStyle;
} // end of wxButton::OS2GetStyle
-MRESULT wxButton::WindowProc(
- WXUINT uMsg
-, WXWPARAM wParam
-, WXLPARAM lParam
-)
+MRESULT wxButton::WindowProc( WXUINT uMsg,
+ WXWPARAM wParam,
+ WXLPARAM lParam )
{
//
// When we receive focus, we want to temporary become the default button in
,lParam
));
} // end of wxWindowProc
-