24#include "wx/artprov.h" 
   25#include <wx/aui/framemanager.h> 
   26#include <wx/bmpbuttn.h> 
   28#include <wx/hyperlink.h> 
   29#include <wx/infobar.h> 
   31#include <wx/stattext.h> 
   33#include <wx/dcclient.h> 
   44BEGIN_EVENT_TABLE( 
WX_INFOBAR, wxInfoBarGeneric )
 
   55        : wxInfoBarGeneric( aParent, aWinid ),
 
   66    SetBackgroundColour( bg );
 
   67    SetForegroundColour( fg );
 
   71    SetShowHideEffects( wxSHOW_EFFECT_ROLL_TO_BOTTOM, wxSHOW_EFFECT_ROLL_TO_TOP );
 
   72    SetEffectDuration( 200 );
 
   75    SetShowHideEffects( wxSHOW_EFFECT_NONE, wxSHOW_EFFECT_NONE );
 
   85    wxSizer* sizer    = GetSizer();
 
   86    wxSize   iconSize = wxArtProvider::GetSizeHint( wxART_BUTTON );
 
   97    sizer->SetItemMinSize( (
size_t) 0, iconSize.x, sy );
 
 
  126    wxCommandEvent* evt = 
new wxCommandEvent( KIEVT_SHOW_INFOBAR );
 
  128    evt->SetString( aMessage.c_str() );
 
  129    evt->SetInt( aFlags );
 
  131    GetEventHandler()->QueueEvent( evt );
 
 
  137    wxCommandEvent* evt = 
new wxCommandEvent( KIEVT_DISMISS_INFOBAR );
 
  139    GetEventHandler()->QueueEvent( evt );
 
 
  168    wxInfoBarGeneric::ShowMessage( 
m_message, aFlags );
 
 
  195    if( !IsShownOnScreen() )
 
  204    wxInfoBarGeneric::Dismiss();
 
 
  220    SetBackgroundColour( bg );
 
  221    SetForegroundColour( fg );
 
  225        wxString tooltip = btn->GetToolTipText();
 
 
  234    int barWidth = GetSize().GetWidth();
 
  235    wxSizer* sizer = GetSizer();
 
  242    #if wxCHECK_VERSION( 3, 3, 0 ) 
  243    wxSizerItem* outerSizer = sizer->GetItem( (
size_t) 0 );
 
  244    wxSizerItem* textSizer = 
nullptr;
 
  246    if (outerSizer->IsSizer())
 
  248        wxBoxSizer* innerSizer1 = 
dynamic_cast<wxBoxSizer*
>( outerSizer->GetSizer() );
 
  249        wxBoxSizer* innerSizer2 =
 
  250                dynamic_cast<wxBoxSizer*
>( innerSizer1->GetItem((
size_t)0)->GetSizer() );
 
  253            textSizer = innerSizer2->GetItem( 1 );
 
  256    wxSizerItem* textSizer = sizer->GetItem( 1 );
 
  261        if( wxStaticText* textCtrl = 
dynamic_cast<wxStaticText*
>( textSizer->GetWindow() ) )
 
  269    int parentWidth = m_parent->GetClientSize().GetWidth();
 
  275    if( barWidth != parentWidth )
 
  276        SetSize( parentWidth, GetSize().GetHeight() );
 
  280        if( wxStaticText* textCtrl = 
dynamic_cast<wxStaticText*
>( textSizer->GetWindow() ) )
 
  288            textCtrl->Wrap( -1 );
 
  289            wxString wrapped_text = textCtrl->GetLabel();
 
  290            int line_count = wrapped_text.Freq( 
'\n' ) + 1;
 
  292            wxWindowDC dc( textCtrl );
 
  293            dc.GetTextExtent( wxT( 
"Xp" ), &txt_h, &txt_v );
 
  295            int      height = txt_v * line_count;
 
  296            int      margins = txt_v - 1;
 
  297            SetMinSize( wxSize( GetSize().GetWidth(), height + margins ) );
 
  299            textCtrl->Wrap( -1 );
 
 
  329    wxButton* button = 
new wxButton( 
this, aId, aLabel );
 
 
  337    wxSizer* sizer = GetSizer();
 
  344    aButton->SetWindowVariant( wxWINDOW_VARIANT_SMALL );
 
  347    auto element = sizer->Add( aButton, wxSizerFlags( 0 ).Centre().Border( wxRIGHT ) );
 
  349    element->SetFlag( wxSTRETCH_MASK );
 
  351    if( IsShownOnScreen() )
 
 
  358    wxSizer* sizer = GetSizer();
 
  360    wxASSERT( aHypertextButton );
 
  362    sizer->Add( aHypertextButton, wxSizerFlags().Centre().Border( wxRIGHT ).Shaped() );
 
  364    if( IsShownOnScreen() )
 
 
  371    wxBitmapButton* button = wxBitmapButton::NewCloseButton( 
this, 
ID_CLOSE_INFOBAR );
 
  373    button->SetToolTip( aTooltip );
 
 
  381    wxSizer* sizer = GetSizer();
 
  383    if( sizer->GetItemCount() == 0 )
 
  387    if( sizer->GetItem( sizer->GetItemCount() - 1 )->IsSpacer() )
 
  390    for( 
int i = sizer->GetItemCount() - 1; i >= 0; i-- )
 
  392        wxSizerItem* sItem = sizer->GetItem( i );
 
  395        if( sItem->IsSpacer() )
 
  398        delete sItem->GetWindow();
 
 
  411    wxSizer* sizer = GetSizer();
 
  416    if( sizer->GetItemCount() == 0 )
 
  419    if( sizer->GetItem( sizer->GetItemCount() - 1 )->IsSpacer() )
 
  422    wxSizerItem* item = sizer->GetItem( sizer->GetItemCount() - 1 );
 
  424    if( item && item->GetWindow() && item->GetWindow()->GetId() == 
ID_CLOSE_INFOBAR )
 
  425        return static_cast<wxBitmapButton*
>( item->GetWindow() );
 
 
  435    ShowMessage( aEvent.GetString(), aEvent.GetInt() );
 
 
  462                                      const wxSize& aSize, 
long aStyle, 
const wxString& aName )
 
  463         : wxPanel( aParent, aId, aPos, aSize, aStyle, aName )
 
 
  476    wxASSERT( aInfoBar );
 
  478    aInfoBar->Reparent( 
this );
 
 
  486    wxASSERT( aOtherItem );
 
  488    aOtherItem->Reparent( 
this );
 
 
  498    m_message.reset( 
new wxString( aText ) );
 
 
  522    int icon = wxICON_NONE;
 
 
Class to handle configuration and automatic determination of the DPI scale to use for canvases.
 
double GetContentScaleFactor() const override
Get the content scale factor, which may be different from the scale factor on some platforms.
 
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.
 
void Finalize()
Update the infobar with the reported text.
 
REPORTER & Report(const wxString &aText, SEVERITY aSeverity=RPT_SEVERITY_UNDEFINED) override
Report a string with a given severity.
 
std::unique_ptr< wxString > m_message
 
bool HasMessage() const override
Returns true if any messages were reported.
 
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.
 
wxString m_message
The original message without wrapping.
 
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.
 
WX_INFOBAR(wxWindow *aParent, wxAuiManager *aMgr=nullptr, wxWindowID aWinid=wxID_ANY)
Construct an infobar that can exist inside an AUI managed frame.
 
void onCloseButton(wxCommandEvent &aEvent)
Event handler for the close button.
 
wxBitmapButton * GetCloseButton() const
 
void Dismiss() override
Dismisses the infobar and updates the containing layout and AUI manager (if one is provided).
 
void onThemeChange(wxSysColourChangedEvent &aEvent)
Event handler for the color theme change event.
 
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.