Add a radioButton mode to IMAGE_BUTTON.

Fixes https://gitlab.com/kicad/code/kicad/issues/11797
This commit is contained in:
Jeff Young 2022-06-12 20:09:21 +01:00
parent c6604e3576
commit 52bc2511cd
11 changed files with 60 additions and 48 deletions

View File

@ -35,6 +35,7 @@
BITMAP_BUTTON::BITMAP_BUTTON( wxWindow* aParent, wxWindowID aId, const wxPoint& aPos, BITMAP_BUTTON::BITMAP_BUTTON( wxWindow* aParent, wxWindowID aId, const wxPoint& aPos,
const wxSize& aSize, int aStyles ) : const wxSize& aSize, int aStyles ) :
wxPanel( aParent, aId, aPos, aSize, aStyles ), wxPanel( aParent, aId, aPos, aSize, aStyles ),
m_isRadioButton( false ),
m_buttonState( 0 ), m_buttonState( 0 ),
m_padding( 0 ), m_padding( 0 ),
m_acceptDraggedInClicks( false ) m_acceptDraggedInClicks( false )
@ -49,6 +50,7 @@ BITMAP_BUTTON::BITMAP_BUTTON( wxWindow* aParent, wxWindowID aId, const wxPoint&
BITMAP_BUTTON::BITMAP_BUTTON( wxWindow* aParent, wxWindowID aId, const wxBitmap& aDummyBitmap, BITMAP_BUTTON::BITMAP_BUTTON( wxWindow* aParent, wxWindowID aId, const wxBitmap& aDummyBitmap,
const wxPoint& aPos, const wxSize& aSize, int aStyles ) : const wxPoint& aPos, const wxSize& aSize, int aStyles ) :
wxPanel( aParent, aId, aPos, aSize, aStyles ), wxPanel( aParent, aId, aPos, aSize, aStyles ),
m_isRadioButton( false ),
m_buttonState( 0 ), m_buttonState( 0 ),
m_padding( 5 ), m_padding( 5 ),
m_acceptDraggedInClicks( false ) m_acceptDraggedInClicks( false )
@ -165,7 +167,7 @@ void BITMAP_BUTTON::OnLeftButtonDown( wxMouseEvent& aEvent )
{ {
if( hasFlag( wxCONTROL_CHECKABLE ) ) if( hasFlag( wxCONTROL_CHECKABLE ) )
{ {
if( hasFlag( wxCONTROL_CHECKED ) ) if( hasFlag( wxCONTROL_CHECKED ) && !m_isRadioButton )
{ {
clearFlag( wxCONTROL_CHECKED ); clearFlag( wxCONTROL_CHECKED );
@ -280,6 +282,13 @@ void BITMAP_BUTTON::SetIsCheckButton()
} }
void BITMAP_BUTTON::SetIsRadioButton()
{
setFlag( wxCONTROL_CHECKABLE );
m_isRadioButton = true;
}
void BITMAP_BUTTON::SetIsSeparator() void BITMAP_BUTTON::SetIsSeparator()
{ {
setFlag( wxCONTROL_SEPARATOR | wxCONTROL_DISABLED ); setFlag( wxCONTROL_SEPARATOR | wxCONTROL_DISABLED );

View File

@ -80,9 +80,9 @@ DIALOG_FIELD_PROPERTIES::DIALOG_FIELD_PROPERTIES( SCH_BASE_FRAME* aParent, const
m_separator1->SetIsSeparator(); m_separator1->SetIsSeparator();
m_horizontal->SetIsCheckButton(); m_horizontal->SetIsRadioButton();
m_horizontal->SetBitmap( KiBitmap( BITMAPS::text_horizontal ) ); m_horizontal->SetBitmap( KiBitmap( BITMAPS::text_horizontal ) );
m_vertical->SetIsCheckButton(); m_vertical->SetIsRadioButton();
m_vertical->SetBitmap( KiBitmap( BITMAPS::text_vertical ) ); m_vertical->SetBitmap( KiBitmap( BITMAPS::text_vertical ) );
m_separator2->SetIsSeparator(); m_separator2->SetIsSeparator();
@ -94,20 +94,20 @@ DIALOG_FIELD_PROPERTIES::DIALOG_FIELD_PROPERTIES( SCH_BASE_FRAME* aParent, const
m_separator3->SetIsSeparator(); m_separator3->SetIsSeparator();
m_hAlignLeft->SetIsCheckButton(); m_hAlignLeft->SetIsRadioButton();
m_hAlignLeft->SetBitmap( KiBitmap( BITMAPS::text_align_left ) ); m_hAlignLeft->SetBitmap( KiBitmap( BITMAPS::text_align_left ) );
m_hAlignCenter->SetIsCheckButton(); m_hAlignCenter->SetIsRadioButton();
m_hAlignCenter->SetBitmap( KiBitmap( BITMAPS::text_align_center ) ); m_hAlignCenter->SetBitmap( KiBitmap( BITMAPS::text_align_center ) );
m_hAlignRight->SetIsCheckButton(); m_hAlignRight->SetIsRadioButton();
m_hAlignRight->SetBitmap( KiBitmap( BITMAPS::text_align_right ) ); m_hAlignRight->SetBitmap( KiBitmap( BITMAPS::text_align_right ) );
m_separator4->SetIsSeparator(); m_separator4->SetIsSeparator();
m_vAlignTop->SetIsCheckButton(); m_vAlignTop->SetIsRadioButton();
m_vAlignTop->SetBitmap( KiBitmap( BITMAPS::text_valign_top ) ); m_vAlignTop->SetBitmap( KiBitmap( BITMAPS::text_valign_top ) );
m_vAlignCenter->SetIsCheckButton(); m_vAlignCenter->SetIsRadioButton();
m_vAlignCenter->SetBitmap( KiBitmap( BITMAPS::text_valign_center ) ); m_vAlignCenter->SetBitmap( KiBitmap( BITMAPS::text_valign_center ) );
m_vAlignBottom->SetIsCheckButton(); m_vAlignBottom->SetIsRadioButton();
m_vAlignBottom->SetBitmap( KiBitmap( BITMAPS::text_valign_bottom ) ); m_vAlignBottom->SetBitmap( KiBitmap( BITMAPS::text_valign_bottom ) );
m_separator5->SetIsSeparator(); m_separator5->SetIsSeparator();

View File

@ -139,10 +139,10 @@ DIALOG_LABEL_PROPERTIES::DIALOG_LABEL_PROPERTIES( SCH_EDIT_FRAME* aParent, SCH_L
m_separator2->SetIsSeparator(); m_separator2->SetIsSeparator();
m_spin0->SetIsCheckButton(); m_spin0->SetIsRadioButton();
m_spin1->SetIsCheckButton(); m_spin1->SetIsRadioButton();
m_spin2->SetIsCheckButton(); m_spin2->SetIsRadioButton();
m_spin3->SetIsCheckButton(); m_spin3->SetIsRadioButton();
m_separator3->SetIsSeparator(); m_separator3->SetIsSeparator();

View File

@ -54,9 +54,9 @@ DIALOG_LIB_TEXT_PROPERTIES::DIALOG_LIB_TEXT_PROPERTIES( SYMBOL_EDIT_FRAME* aPare
m_separator1->SetIsSeparator(); m_separator1->SetIsSeparator();
m_horizontal->SetIsCheckButton(); m_horizontal->SetIsRadioButton();
m_horizontal->SetBitmap( KiBitmap( BITMAPS::text_horizontal ) ); m_horizontal->SetBitmap( KiBitmap( BITMAPS::text_horizontal ) );
m_vertical->SetIsCheckButton(); m_vertical->SetIsRadioButton();
m_vertical->SetBitmap( KiBitmap( BITMAPS::text_vertical ) ); m_vertical->SetBitmap( KiBitmap( BITMAPS::text_vertical ) );
m_separator2->SetIsSeparator(); m_separator2->SetIsSeparator();
@ -68,20 +68,20 @@ DIALOG_LIB_TEXT_PROPERTIES::DIALOG_LIB_TEXT_PROPERTIES( SYMBOL_EDIT_FRAME* aPare
m_separator3->SetIsSeparator(); m_separator3->SetIsSeparator();
m_hAlignLeft->SetIsCheckButton(); m_hAlignLeft->SetIsRadioButton();
m_hAlignLeft->SetBitmap( KiBitmap( BITMAPS::text_align_left ) ); m_hAlignLeft->SetBitmap( KiBitmap( BITMAPS::text_align_left ) );
m_hAlignCenter->SetIsCheckButton(); m_hAlignCenter->SetIsRadioButton();
m_hAlignCenter->SetBitmap( KiBitmap( BITMAPS::text_align_center ) ); m_hAlignCenter->SetBitmap( KiBitmap( BITMAPS::text_align_center ) );
m_hAlignRight->SetIsCheckButton(); m_hAlignRight->SetIsRadioButton();
m_hAlignRight->SetBitmap( KiBitmap( BITMAPS::text_align_right ) ); m_hAlignRight->SetBitmap( KiBitmap( BITMAPS::text_align_right ) );
m_separator4->SetIsSeparator(); m_separator4->SetIsSeparator();
m_vAlignTop->SetIsCheckButton(); m_vAlignTop->SetIsRadioButton();
m_vAlignTop->SetBitmap( KiBitmap( BITMAPS::text_valign_top ) ); m_vAlignTop->SetBitmap( KiBitmap( BITMAPS::text_valign_top ) );
m_vAlignCenter->SetIsCheckButton(); m_vAlignCenter->SetIsRadioButton();
m_vAlignCenter->SetBitmap( KiBitmap( BITMAPS::text_valign_center ) ); m_vAlignCenter->SetBitmap( KiBitmap( BITMAPS::text_valign_center ) );
m_vAlignBottom->SetIsCheckButton(); m_vAlignBottom->SetIsRadioButton();
m_vAlignBottom->SetBitmap( KiBitmap( BITMAPS::text_valign_bottom ) ); m_vAlignBottom->SetBitmap( KiBitmap( BITMAPS::text_valign_bottom ) );
m_separator5->SetIsSeparator(); m_separator5->SetIsSeparator();

View File

@ -85,17 +85,17 @@ DIALOG_LIB_TEXTBOX_PROPERTIES::DIALOG_LIB_TEXTBOX_PROPERTIES( SYMBOL_EDIT_FRAME*
m_separator2->SetIsSeparator(); m_separator2->SetIsSeparator();
m_spin0->SetIsCheckButton(); m_spin0->SetIsRadioButton();
m_spin0->SetBitmap( KiBitmap( BITMAPS::text_align_left ) ); m_spin0->SetBitmap( KiBitmap( BITMAPS::text_align_left ) );
m_spin1->SetIsCheckButton(); m_spin1->SetIsRadioButton();
m_spin1->SetBitmap( KiBitmap( BITMAPS::text_align_center ) ); m_spin1->SetBitmap( KiBitmap( BITMAPS::text_align_center ) );
m_spin2->SetIsCheckButton(); m_spin2->SetIsRadioButton();
m_spin2->SetBitmap( KiBitmap( BITMAPS::text_align_right ) ); m_spin2->SetBitmap( KiBitmap( BITMAPS::text_align_right ) );
m_spin3->SetIsCheckButton(); m_spin3->SetIsRadioButton();
m_spin3->SetBitmap( KiBitmap( BITMAPS::text_align_bottom ) ); m_spin3->SetBitmap( KiBitmap( BITMAPS::text_align_bottom ) );
m_spin4->SetIsCheckButton(); m_spin4->SetIsRadioButton();
m_spin4->SetBitmap( KiBitmap( BITMAPS::text_align_middle ) ); m_spin4->SetBitmap( KiBitmap( BITMAPS::text_align_middle ) );
m_spin5->SetIsCheckButton(); m_spin5->SetIsRadioButton();
m_spin5->SetBitmap( KiBitmap( BITMAPS::text_align_top ) ); m_spin5->SetBitmap( KiBitmap( BITMAPS::text_align_top ) );
m_separator3->SetIsSeparator(); m_separator3->SetIsSeparator();

View File

@ -111,17 +111,17 @@ DIALOG_TEXT_PROPERTIES::DIALOG_TEXT_PROPERTIES( SCH_EDIT_FRAME* aParent, SCH_ITE
m_separator2->SetIsSeparator(); m_separator2->SetIsSeparator();
m_spin0->SetIsCheckButton(); m_spin0->SetIsRadioButton();
m_spin0->SetBitmap( KiBitmap( BITMAPS::text_align_left ) ); m_spin0->SetBitmap( KiBitmap( BITMAPS::text_align_left ) );
m_spin1->SetIsCheckButton(); m_spin1->SetIsRadioButton();
m_spin1->SetBitmap( KiBitmap( BITMAPS::text_align_center ) ); m_spin1->SetBitmap( KiBitmap( BITMAPS::text_align_center ) );
m_spin2->SetIsCheckButton(); m_spin2->SetIsRadioButton();
m_spin2->SetBitmap( KiBitmap( BITMAPS::text_align_right ) ); m_spin2->SetBitmap( KiBitmap( BITMAPS::text_align_right ) );
m_spin3->SetIsCheckButton(); m_spin3->SetIsRadioButton();
m_spin3->SetBitmap( KiBitmap( BITMAPS::text_align_bottom ) ); m_spin3->SetBitmap( KiBitmap( BITMAPS::text_align_bottom ) );
m_spin4->SetIsCheckButton(); m_spin4->SetIsRadioButton();
m_spin4->SetBitmap( KiBitmap( BITMAPS::text_align_middle ) ); m_spin4->SetBitmap( KiBitmap( BITMAPS::text_align_middle ) );
m_spin5->SetIsCheckButton(); m_spin5->SetIsRadioButton();
m_spin5->SetBitmap( KiBitmap( BITMAPS::text_align_top ) ); m_spin5->SetBitmap( KiBitmap( BITMAPS::text_align_top ) );
m_separator3->SetIsSeparator(); m_separator3->SetIsSeparator();

View File

@ -81,6 +81,8 @@ public:
*/ */
void SetIsCheckButton(); void SetIsCheckButton();
void SetIsRadioButton();
/** /**
* Check the control. This is the equivalent to toggling a toolbar button. * Check the control. This is the equivalent to toggling a toolbar button.
*/ */
@ -132,6 +134,7 @@ private:
wxBitmap m_normalBitmap; wxBitmap m_normalBitmap;
wxBitmap m_disabledBitmap; wxBitmap m_disabledBitmap;
bool m_isRadioButton;
int m_buttonState; int m_buttonState;
int m_padding; int m_padding;
wxSize m_unadjustedMinSize; wxSize m_unadjustedMinSize;

View File

@ -81,20 +81,20 @@ PROPERTIES_FRAME::PROPERTIES_FRAME( PL_EDITOR_FRAME* aParent ) :
m_separator2->SetIsSeparator(); m_separator2->SetIsSeparator();
m_alignLeft->SetIsCheckButton(); m_alignLeft->SetIsRadioButton();
m_alignLeft->SetBitmap( KiBitmap( BITMAPS::text_align_left ) ); m_alignLeft->SetBitmap( KiBitmap( BITMAPS::text_align_left ) );
m_alignCenter->SetIsCheckButton(); m_alignCenter->SetIsRadioButton();
m_alignCenter->SetBitmap( KiBitmap( BITMAPS::text_align_center ) ); m_alignCenter->SetBitmap( KiBitmap( BITMAPS::text_align_center ) );
m_alignRight->SetIsCheckButton(); m_alignRight->SetIsRadioButton();
m_alignRight->SetBitmap( KiBitmap( BITMAPS::text_align_right ) ); m_alignRight->SetBitmap( KiBitmap( BITMAPS::text_align_right ) );
m_separator3->SetIsSeparator(); m_separator3->SetIsSeparator();
m_vAlignTop->SetIsCheckButton(); m_vAlignTop->SetIsRadioButton();
m_vAlignTop->SetBitmap( KiBitmap( BITMAPS::text_valign_top ) ); m_vAlignTop->SetBitmap( KiBitmap( BITMAPS::text_valign_top ) );
m_vAlignMiddle->SetIsCheckButton(); m_vAlignMiddle->SetIsRadioButton();
m_vAlignMiddle->SetBitmap( KiBitmap( BITMAPS::text_valign_center ) ); m_vAlignMiddle->SetBitmap( KiBitmap( BITMAPS::text_valign_center ) );
m_vAlignBottom->SetIsCheckButton(); m_vAlignBottom->SetIsRadioButton();
m_vAlignBottom->SetBitmap( KiBitmap( BITMAPS::text_valign_bottom ) ); m_vAlignBottom->SetBitmap( KiBitmap( BITMAPS::text_valign_bottom ) );
m_separator4->SetIsSeparator(); m_separator4->SetIsSeparator();

View File

@ -101,11 +101,11 @@ DIALOG_DIMENSION_PROPERTIES::DIALOG_DIMENSION_PROPERTIES( PCB_BASE_EDIT_FRAME* a
m_separator1->SetIsSeparator(); m_separator1->SetIsSeparator();
m_alignLeft->SetIsCheckButton(); m_alignLeft->SetIsRadioButton();
m_alignLeft->SetBitmap( KiBitmap( BITMAPS::text_align_left ) ); m_alignLeft->SetBitmap( KiBitmap( BITMAPS::text_align_left ) );
m_alignCenter->SetIsCheckButton(); m_alignCenter->SetIsRadioButton();
m_alignCenter->SetBitmap( KiBitmap( BITMAPS::text_align_center ) ); m_alignCenter->SetBitmap( KiBitmap( BITMAPS::text_align_center ) );
m_alignRight->SetIsCheckButton(); m_alignRight->SetIsRadioButton();
m_alignRight->SetBitmap( KiBitmap( BITMAPS::text_align_right ) ); m_alignRight->SetBitmap( KiBitmap( BITMAPS::text_align_right ) );
m_separator2->SetIsSeparator(); m_separator2->SetIsSeparator();

View File

@ -126,11 +126,11 @@ DIALOG_TEXT_PROPERTIES::DIALOG_TEXT_PROPERTIES( PCB_BASE_EDIT_FRAME* aParent, BO
m_separator1->SetIsSeparator(); m_separator1->SetIsSeparator();
m_alignLeft->SetIsCheckButton(); m_alignLeft->SetIsRadioButton();
m_alignLeft->SetBitmap( KiBitmap( BITMAPS::text_align_left ) ); m_alignLeft->SetBitmap( KiBitmap( BITMAPS::text_align_left ) );
m_alignCenter->SetIsCheckButton(); m_alignCenter->SetIsRadioButton();
m_alignCenter->SetBitmap( KiBitmap( BITMAPS::text_align_center ) ); m_alignCenter->SetBitmap( KiBitmap( BITMAPS::text_align_center ) );
m_alignRight->SetIsCheckButton(); m_alignRight->SetIsRadioButton();
m_alignRight->SetBitmap( KiBitmap( BITMAPS::text_align_right ) ); m_alignRight->SetBitmap( KiBitmap( BITMAPS::text_align_right ) );
m_separator2->SetIsSeparator(); m_separator2->SetIsSeparator();

View File

@ -96,11 +96,11 @@ DIALOG_TEXTBOX_PROPERTIES::DIALOG_TEXTBOX_PROPERTIES( PCB_BASE_EDIT_FRAME* aPare
m_separator1->SetIsSeparator(); m_separator1->SetIsSeparator();
m_alignLeft->SetIsCheckButton(); m_alignLeft->SetIsRadioButton();
m_alignLeft->SetBitmap( KiBitmap( BITMAPS::text_align_left ) ); m_alignLeft->SetBitmap( KiBitmap( BITMAPS::text_align_left ) );
m_alignCenter->SetIsCheckButton(); m_alignCenter->SetIsRadioButton();
m_alignCenter->SetBitmap( KiBitmap( BITMAPS::text_align_center ) ); m_alignCenter->SetBitmap( KiBitmap( BITMAPS::text_align_center ) );
m_alignRight->SetIsCheckButton(); m_alignRight->SetIsRadioButton();
m_alignRight->SetBitmap( KiBitmap( BITMAPS::text_align_right ) ); m_alignRight->SetBitmap( KiBitmap( BITMAPS::text_align_right ) );
m_separator2->SetIsSeparator(); m_separator2->SetIsSeparator();