24#include "wx/artprov.h"
25#include <wx/aui/framemanager.h>
27#include <wx/infobar.h>
30#include <wx/hyperlink.h>
31#include <wx/bmpbuttn.h>
38BEGIN_EVENT_TABLE(
WX_INFOBAR, wxInfoBarGeneric )
48 : wxInfoBarGeneric( aParent, aWinid ),
50 m_updateLock( false ),
51 m_showTimer(
nullptr ),
60 SetBackgroundColour( wxColour( 28, 27, 20 ) );
62 SetBackgroundColour( wxColour( 255, 249, 189 ) );
65 SetShowHideEffects( wxSHOW_EFFECT_ROLL_TO_BOTTOM, wxSHOW_EFFECT_ROLL_TO_TOP );
66 SetEffectDuration( 300 );
69 SetShowHideEffects( wxSHOW_EFFECT_NONE, wxSHOW_EFFECT_NONE );
81 wxSizer* sizer = GetSizer();
82 wxSize iconSize = wxArtProvider::GetSizeHint( wxART_BUTTON );
84 sizer->SetItemMinSize( (
size_t) 0, iconSize.x, sy );
111 wxCommandEvent* evt =
new wxCommandEvent( KIEVT_SHOW_INFOBAR );
113 evt->SetString( aMessage.c_str() );
114 evt->SetInt( aFlags );
116 GetEventHandler()->QueueEvent( evt );
122 wxCommandEvent* evt =
new wxCommandEvent( KIEVT_DISMISS_INFOBAR );
124 GetEventHandler()->QueueEvent( evt );
150 wxInfoBarGeneric::ShowMessage( aMessage, aFlags );
186 wxInfoBarGeneric::Dismiss();
200 int barWidth = GetSize().GetWidth();
206 int parentWidth = m_parent->GetClientSize().GetWidth();
213 if( barWidth != parentWidth )
214 SetSize( parentWidth, GetSize().GetHeight() );
242 wxButton* button =
new wxButton(
this, aId, aLabel );
250 wxSizer* sizer = GetSizer();
257 aButton->SetWindowVariant( wxWINDOW_VARIANT_SMALL );
259 sizer->Add( aButton, wxSizerFlags().Centre().Border( wxRIGHT ) );
268 wxSizer* sizer = GetSizer();
270 wxASSERT( aHypertextButton );
272 sizer->Add( aHypertextButton, wxSizerFlags().Centre().Border( wxRIGHT ) );
281 wxBitmapButton* button = wxBitmapButton::NewCloseButton(
this,
ID_CLOSE_INFOBAR );
283 button->SetToolTip( aTooltip );
291 wxSizer* sizer = GetSizer();
293 if( sizer->GetItemCount() == 0 )
297 if( sizer->GetItem( sizer->GetItemCount() - 1 )->IsSpacer() )
300 for(
int i = sizer->GetItemCount() - 1; i >= 0; i-- )
302 wxSizerItem* sItem = sizer->GetItem( i );
305 if( sItem->IsSpacer() )
308 delete sItem->GetWindow();
315 wxSizer* sizer = GetSizer();
317 if( sizer->GetItemCount() == 0 )
320 if( sizer->GetItem( sizer->GetItemCount() - 1 )->IsSpacer() )
323 wxSizerItem* item = sizer->GetItem( sizer->GetItemCount() - 1 );
333 ShowMessage( aEvent.GetString(), aEvent.GetInt() );
360 const wxSize& aSize,
long aStyle,
const wxString& aName )
361 : wxPanel( aParent, aId, aPos, aSize, aStyle, aName )
374 wxASSERT( aInfoBar );
376 aInfoBar->Reparent(
this );
384 wxASSERT( aOtherItem );
386 aOtherItem->Reparent(
this );
The base frame for deriving all KiCad main window classes.
EDA_INFOBAR_PANEL(wxWindow *aParent, wxWindowID aId=wxID_ANY, const wxPoint &aPos=wxDefaultPosition, const wxSize &aSize=wxSize(-1,-1), long aStyle=wxTAB_TRAVERSAL, const wxString &aName=wxEmptyString)
wxFlexGridSizer * m_mainSizer
void AddInfoBar(WX_INFOBAR *aInfoBar)
Add the given infobar object to the panel.
void AddOtherItem(wxWindow *aOtherItem)
Add the other item to the panel.
A modified version of the wxInfoBar class that allows us to:
void SetShowTime(int aTime)
Set the time period to show the infobar.
void RemoveAllButtons()
Remove all the buttons that have been added by the user.
void ShowMessageFor(const wxString &aMessage, int aTime, int aFlags=wxICON_INFORMATION, MESSAGE_TYPE aType=WX_INFOBAR::MESSAGE_TYPE::GENERIC)
Show the infobar with the provided message and icon for a specific period of time.
bool HasCloseButton() const
MESSAGE_TYPE m_type
The type of message being displayed.
void updateAuiLayout(bool aShow)
Update the AUI pane to show or hide this infobar.
std::optional< std::function< void(void)> > m_callback
Optional callback made when closing infobar.
int m_showTime
The time to show the infobar. 0 = don't auto hide.
bool m_updateLock
True if this infobar requested the UI update.
void onShowInfoBar(wxCommandEvent &aEvent)
Event handler for showing the infobar using a wxCommandEvent of the type KIEVT_SHOW_INFOBAR.
void onDismissInfoBar(wxCommandEvent &aEvent)
Event handler for dismissing the infobar using a wxCommandEvent of the type KIEVT_DISMISS_INFOBAR.
void AddButton(wxButton *aButton)
Add an already created button to the infobar.
MESSAGE_TYPE
Sets the type of message for special handling if needed.
@ GENERIC
GENERIC Are messages that do not have special handling.
void QueueShowMessage(const wxString &aMessage, int aFlags=wxICON_INFORMATION)
Send the infobar an event telling it to show a message.
void onCloseButton(wxCommandEvent &aEvent)
Event handler for the close button.
void Dismiss() override
Dismisses the infobar and updates the containing layout and AUI manager (if one is provided).
void AddCloseButton(const wxString &aTooltip=_("Hide this message."))
Add the default close button to the infobar on the right side.
wxTimer * m_showTimer
The timer counting the autoclose period.
void onTimer(wxTimerEvent &aEvent)
Event handler for the automatic closing timer.
void ShowMessage(const wxString &aMessage, int aFlags=wxICON_INFORMATION) override
Show the info bar with the provided message and icon.
wxAuiManager * m_auiManager
The AUI manager that contains this infobar.
void onSize(wxSizeEvent &aEvent)
void QueueDismiss()
Send the infobar an event telling it to hide itself.
Base window classes and related definitions.
wxDEFINE_EVENT(KIEVT_SHOW_INFOBAR, wxCommandEvent)
@ ID_CLOSE_INFOBAR
ID for the close button on the frame's infobar.