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.
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 );
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
147 addLauncher( KICAD_MANAGER_ACTIONS::editSchematic, BITMAPS::icon_eeschema,
148 _( "Edit the project schematic" ) );
149
150 addLauncher( KICAD_MANAGER_ACTIONS::editSymbols, BITMAPS::icon_libedit,
151 _( "Edit global and/or project schematic symbol libraries" ) );
152
153 addLauncher( KICAD_MANAGER_ACTIONS::editPCB, BITMAPS::icon_pcbnew,
154 _( "Edit the project PCB design" ) );
155
156 addLauncher( KICAD_MANAGER_ACTIONS::editFootprints, BITMAPS::icon_modedit,
157 _( "Edit global and/or project PCB footprint libraries" ) );
158
159 addLauncher( KICAD_MANAGER_ACTIONS::viewGerbers, BITMAPS::icon_gerbview,
160 _( "Preview Gerber files" ) );
161
162 addLauncher( KICAD_MANAGER_ACTIONS::convertImage, BITMAPS::icon_bitmap2component,
163 _( "Convert bitmap images to schematic symbols or PCB footprints" ) );
164
165 addLauncher( KICAD_MANAGER_ACTIONS::showCalculator, BITMAPS::icon_pcbcalculator,
166 _( "Show tools for calculating resistance, current capacity, etc." ) );
167
168 addLauncher( KICAD_MANAGER_ACTIONS::editDrawingSheet, BITMAPS::icon_pagelayout_editor,
169 _( "Edit drawing sheet borders and title blocks for use in schematics and PCB designs" ) );
170
171 BITMAP_BUTTON* bb = addLauncher( KICAD_MANAGER_ACTIONS::showPluginManager, BITMAPS::icon_pcm,
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.
Definition: bitmaps_list.h:33
A bitmap button widget that behaves like an AUI toolbar item's button when it is drawn.
Definition: bitmap_button.h:42
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 editPCB
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.
void SetPcmButton(BITMAP_BUTTON *aButton)
Class PANEL_KICAD_LAUNCHER_BASE.
void onThemeChanged(wxSysColourChangedEvent &aEvent)
void onLauncherButtonClick(wxCommandEvent &aEvent)
PANEL_KICAD_LAUNCHER(wxWindow *aParent)
KICAD_MANAGER_FRAME * m_frame
TOOL_MANAGER * GetToolManager() const
Return the MVC controller.
Definition: tools_holder.h:55
Represent a single user action.
Definition: tool_action.h:304
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:258
bool ProcessEvent(const TOOL_EVENT &aEvent)
Propagate an event to tools that requested events of matching type(s).
#define _(s)
PBOOL GetPolicyBool(const wxString &aKey)
Definition: unix/policy.cpp:26
#define POLICY_KEY_PCM
Definition: policy_keys.h:31
std::optional< TOOL_EVENT > OPT_TOOL_EVENT
Definition: tool_event.h:633