KiCad PCB EDA Suite
Loading...
Searching...
No Matches
panel_kicad_launcher.cpp
Go to the documentation of this file.
1/*
2 * This program source code file is part of KiCad, a free EDA CAD application.
3 *
4 * Copyright The KiCad Developers, see AUTHORS.txt for contributors.
5 *
6 * This program is free software: you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation, either version 3 of the License, or (at your
9 * option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License along
17 * with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20#include <bitmaps.h>
21#include <bitmap_store.h>
22#include <kicad_manager_frame.h>
23#include <kiplatform/policy.h>
24#include <policy_keys.h>
25#include <tool/tool_manager.h>
29#include <wx/stattext.h>
30
32
33
36 m_frame( static_cast<KICAD_MANAGER_FRAME*>( aParent->GetParent() ) )
37{
39
40 Bind( wxEVT_SYS_COLOUR_CHANGED, wxSysColourChangedEventHandler( PANEL_KICAD_LAUNCHER::onThemeChanged ), this );
41}
42
43
45{
46 m_frame->SetPcmButton( nullptr );
47
48 for( wxWindow* window : m_scrolledWindow->GetChildren() )
49 {
50 if( dynamic_cast<BITMAP_BUTTON*>( window ) != nullptr )
51 window->Unbind( wxEVT_BUTTON, &PANEL_KICAD_LAUNCHER::onLauncherButtonClick, this );
52 }
53
54 Unbind( wxEVT_SYS_COLOUR_CHANGED, wxSysColourChangedEventHandler( PANEL_KICAD_LAUNCHER::onThemeChanged ), this );
55}
56
57
58void PANEL_KICAD_LAUNCHER::onLauncherButtonClick( wxCommandEvent& aEvent )
59{
60 // Don't accept clicks processed during wxProgressReporter updating. In particular, the wxSafeYield()
61 // call below will puke.
62 if( m_frame->GetToolManager()->GetTool<KICAD_MANAGER_CONTROL>()->InShowPlayer() )
63 return;
64
65 // Defocus the button because leaving the large buttons focused after a click looks out of place in
66 // the launcher
67 m_frame->SetFocus();
68
69 // Gives a slice of time to update the button state (mandatory on GTK, useful on MSW to avoid some
70 // cosmetic issues).
71 wxSafeYield();
72
73 BITMAP_BUTTON* button = (BITMAP_BUTTON*) aEvent.GetEventObject();
74 const TOOL_ACTION* action = static_cast<const TOOL_ACTION*>( button->GetClientData() );
75
76 if( action == nullptr )
77 return;
78
79 OPT_TOOL_EVENT evt = action->MakeEvent();
80 evt->SetHasPosition( false );
81 m_frame->GetToolManager()->ProcessEvent( *evt );
82}
83
84
86{
87 m_frame->SetPcmButton( nullptr );
88
89 if( m_toolsSizer->GetEffectiveRowsCount() > 0 )
90 {
91 m_toolsSizer->Clear( true );
92 m_toolsSizer->SetRows( 0 );
93 }
94
95 wxFont titleFont = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT );
96#ifndef __WXGTK__
97 titleFont.SetPointSize( titleFont.GetPointSize() + 2 );
98#endif
99 titleFont.SetWeight( wxFONTWEIGHT_BOLD );
100
101 wxFont helpFont = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT );
102 helpFont.SetStyle( wxFONTSTYLE_ITALIC );
103
104 auto addLauncher =
105 [&]( const TOOL_ACTION& aAction, BITMAPS aBitmaps, const wxString& aHelpText, bool enabled = true )
106 {
107 BITMAP_BUTTON* btn = new BITMAP_BUTTON( m_scrolledWindow, wxID_ANY );
108 btn->SetBitmap( KiBitmapBundle( aBitmaps ) );
109 btn->SetDisabledBitmap( KiDisabledBitmapBundle( aBitmaps ) );
110 btn->SetPadding( FromDIP( 4 ) );
111 btn->SetToolTip( aAction.GetTooltip() );
112
113 m_scrolledWindow->SetFont( titleFont ); // Use font inheritance to avoid extra SetFont call.
114 wxStaticText* label = new wxStaticText( m_scrolledWindow, wxID_ANY, aAction.GetFriendlyName() );
115 label->SetToolTip( aAction.GetTooltip() );
116
117 m_scrolledWindow->SetFont( helpFont ); // Use font inheritance to avoid extra SetFont call.
118 wxStaticText* help = new wxStaticText( m_scrolledWindow, wxID_ANY, aHelpText );
119
120 btn->Bind( wxEVT_BUTTON, &PANEL_KICAD_LAUNCHER::onLauncherButtonClick, this );
121 btn->SetClientData( (void*) &aAction );
122
123 // The bug fix below makes this handler active for the entire window width. Without any visual
124 // feedback that's a bit odd. Disabling for now.
125 // label->Bind( wxEVT_LEFT_UP, handler );
126
127 m_toolsSizer->Add( btn, 1, wxALIGN_CENTER_VERTICAL );
128
129 wxBoxSizer* textSizer = new wxBoxSizer( wxVERTICAL );
130
131 textSizer->Add( label );
132 textSizer->Add( help );
133
134 m_toolsSizer->Add( textSizer, 1, wxEXPAND | wxALIGN_CENTER_VERTICAL );
135
136 btn->Enable( enabled );
137
138 if( !enabled )
139 {
140 help->Disable();
141 label->Disable();
142 }
143
144 return btn;
145 };
146
148 _( "Edit the project schematic" ) );
149
151 _( "Edit global and/or project schematic symbol libraries" ) );
152
154 _( "Edit the project PCB design" ) );
155
157 _( "Edit global and/or project PCB footprint libraries" ) );
158
160 _( "Preview Gerber files" ) );
161
163 _( "Convert bitmap images to schematic symbols or PCB footprints" ) );
164
166 _( "Show tools for calculating resistance, current capacity, etc." ) );
167
169 _( "Edit drawing sheet borders and title blocks for use in schematics and PCB designs" ) );
170
172 _( "Manage downloadable packages from KiCad and 3rd party repositories" ),
175
176 m_frame->SetPcmButton( bb );
177
178 Layout();
179}
180
181
182void PANEL_KICAD_LAUNCHER::onThemeChanged( wxSysColourChangedEvent& aEvent )
183{
186
187 aEvent.Skip();
188}
BITMAP_STORE * GetBitmapStore()
Definition bitmap.cpp:92
wxBitmapBundle KiDisabledBitmapBundle(BITMAPS aBitmap)
Definition bitmap.cpp:116
wxBitmapBundle KiBitmapBundle(BITMAPS aBitmap, int aMinHeight)
Definition bitmap.cpp:110
BITMAPS
A list of all bitmap identifiers.
@ icon_pagelayout_editor
@ icon_bitmap2component
@ icon_pcbcalculator
A bitmap button widget that behaves like an AUI toolbar item's button when it is drawn.
bool Enable(bool aEnable=true) override
Enable the button.
void SetDisabledBitmap(const wxBitmapBundle &aBmp)
Set the bitmap shown when the button is disabled.
void SetBitmap(const wxBitmapBundle &aBmp)
Set the bitmap shown when the button is enabled.
void SetPadding(int aPadding)
Set the amount of padding present on each side of the bitmap.
void ThemeChanged()
Notifies the store that the icon theme has been changed by the user, so caches must be invalidated.
static TOOL_ACTION editSchematic
static TOOL_ACTION convertImage
static TOOL_ACTION editDrawingSheet
static TOOL_ACTION editFootprints
static TOOL_ACTION showPluginManager
static TOOL_ACTION showCalculator
static TOOL_ACTION viewGerbers
static TOOL_ACTION editSymbols
Handle actions in the kicad manager frame.
The main KiCad project manager frame.
PANEL_KICAD_LAUNCHER_BASE(wxWindow *parent, wxWindowID id=wxID_ANY, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxSize(-1,-1), long style=wxTAB_TRAVERSAL, const wxString &name=wxEmptyString)
void onThemeChanged(wxSysColourChangedEvent &aEvent)
void onLauncherButtonClick(wxCommandEvent &aEvent)
PANEL_KICAD_LAUNCHER(wxWindow *aParent)
KICAD_MANAGER_FRAME * m_frame
Represent a single user action.
wxString GetTooltip(bool aIncludeHotkey=true) const
TOOL_EVENT MakeEvent() const
Return the event associated with the action (i.e.
wxString GetFriendlyName() const
Return the translated user-friendly name of the action.
void SetHasPosition(bool aHasPosition)
Definition tool_event.h:261
#define _(s)
PBOOL GetPolicyBool(const wxString &aKey)
#define POLICY_KEY_PCM
Definition policy_keys.h:31
std::optional< TOOL_EVENT > OPT_TOOL_EVENT
Definition tool_event.h:641