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 (C) 2021 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>
28#include <wx/stattext.h>
29
31
32
35{
36 m_frame = static_cast<KICAD_MANAGER_FRAME*>( aParent );
39
40 Bind( wxEVT_SYS_COLOUR_CHANGED,
41 wxSysColourChangedEventHandler( PANEL_KICAD_LAUNCHER::onThemeChanged ), this );
42}
43
44
46{
47 m_frame->SetPcmButton( nullptr );
48
49 if( m_toolsSizer->GetEffectiveRowsCount() > 0 )
50 {
51 m_toolsSizer->Clear( true );
52 m_toolsSizer->SetRows( 0 );
53 }
54
55 wxFont titleFont = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT );
56#ifndef __WXGTK__
57 titleFont.SetPointSize( titleFont.GetPointSize() + 2 );
58#endif
59 titleFont.SetWeight( wxFONTWEIGHT_BOLD );
60
61 wxFont helpFont = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT );
62 helpFont.SetStyle( wxFONTSTYLE_ITALIC );
63
64 auto addLauncher = [&]( const TOOL_ACTION& aAction, BITMAPS aBitmaps,
65 const wxString& aHelpText, bool enabled = true )
66 {
67 BITMAP_BUTTON* btn = new BITMAP_BUTTON( m_scrolledWindow, wxID_ANY );
68 btn->SetBitmap( KiBitmapBundle( aBitmaps ) );
69 btn->SetDisabledBitmap( KiDisabledBitmapBundle( aBitmaps ) );
70 btn->SetPadding( FromDIP( 4 ) );
71 btn->SetToolTip( aAction.GetTooltip() );
72
73 auto handler =
74 [&]( wxEvent& aEvent )
75 {
76 // Defocus the button because leaving the large buttons
77 // focused after a click looks out of place in the launcher
78 m_frame->SetFocus();
79 // Gives a slice of time to update the button state (mandatory on GTK,
80 // useful on MSW to avoid some cosmetic issues).
81 wxSafeYield();
82
83 OPT_TOOL_EVENT evt = aAction.MakeEvent();
84 evt->SetHasPosition( false );
86 };
87
88 wxStaticText* label = new wxStaticText( m_scrolledWindow, wxID_ANY, wxEmptyString );
89 wxStaticText* help = new wxStaticText( m_scrolledWindow, wxID_ANY, wxEmptyString );
90
91 label->SetToolTip( aAction.GetTooltip() );
92 label->SetFont( titleFont );
93 label->SetLabel( aAction.GetFriendlyName() );
94
95 help->SetFont( helpFont );
96 help->SetLabel( aHelpText );
97
98 btn->Bind( wxEVT_BUTTON, handler );
99
100 // The bug fix below makes this handler active for the entire window width. Without
101 // any visual feedback that's a bit odd. Disabling for now.
102 // label->Bind( wxEVT_LEFT_UP, handler );
103
104 m_toolsSizer->Add( btn, 1, wxALIGN_CENTER_VERTICAL );
105
106 wxBoxSizer* textSizer = new wxBoxSizer( wxVERTICAL );
107
108 textSizer->Add( label );
109 textSizer->Add( help );
110
111 m_toolsSizer->Add( textSizer, 1, wxEXPAND | wxALIGN_CENTER_VERTICAL );
112
113 btn->Enable( enabled );
114 if( !enabled )
115 {
116 help->Disable();
117 label->Disable();
118 }
119
120 return btn;
121 };
122
123 addLauncher( KICAD_MANAGER_ACTIONS::editSchematic, BITMAPS::icon_eeschema,
124 _( "Edit the project schematic" ) );
125
126 addLauncher( KICAD_MANAGER_ACTIONS::editSymbols, BITMAPS::icon_libedit,
127 _( "Edit global and/or project schematic symbol libraries" ) );
128
129 addLauncher( KICAD_MANAGER_ACTIONS::editPCB, BITMAPS::icon_pcbnew,
130 _( "Edit the project PCB design" ) );
131
132 addLauncher( KICAD_MANAGER_ACTIONS::editFootprints, BITMAPS::icon_modedit,
133 _( "Edit global and/or project PCB footprint libraries" ) );
134
135 addLauncher( KICAD_MANAGER_ACTIONS::viewGerbers, BITMAPS::icon_gerbview,
136 _( "Preview Gerber files" ) );
137
138 addLauncher( KICAD_MANAGER_ACTIONS::convertImage, BITMAPS::icon_bitmap2component,
139 _( "Convert bitmap images to schematic symbols or PCB footprints" ) );
140
141 addLauncher( KICAD_MANAGER_ACTIONS::showCalculator, BITMAPS::icon_pcbcalculator,
142 _( "Show tools for calculating resistance, current capacity, etc." ) );
143
144 addLauncher( KICAD_MANAGER_ACTIONS::editDrawingSheet, BITMAPS::icon_pagelayout_editor,
145 _( "Edit drawing sheet borders and title blocks for use in schematics and PCB "
146 "designs" ) );
147
148 BITMAP_BUTTON* bb =
149 addLauncher( KICAD_MANAGER_ACTIONS::showPluginManager, BITMAPS::icon_pcm,
150 _( "Manage downloadable packages from KiCad and 3rd party repositories" ),
153
154 m_frame->SetPcmButton( bb );
155
156 Layout();
157}
158
159
160void PANEL_KICAD_LAUNCHER::onThemeChanged( wxSysColourChangedEvent &aEvent )
161{
164
165 aEvent.Skip();
166}
167
168
wxBitmapBundle KiBitmapBundle(BITMAPS aBitmap)
Definition: bitmap.cpp:110
BITMAP_STORE * GetBitmapStore()
Definition: bitmap.cpp:92
wxBitmapBundle KiDisabledBitmapBundle(BITMAPS aBitmap)
Definition: bitmap.cpp:116
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
The main KiCad project manager frame.
void SetPcmButton(BITMAP_BUTTON *aButton)
Class PANEL_KICAD_LAUNCHER_BASE.
TOOL_MANAGER * m_toolManager
void onThemeChanged(wxSysColourChangedEvent &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:269
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)
Returns if the action associated with this event should be treated as immediate regardless of the cur...
Definition: tool_event.h:257
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:629