-
-
Notifications
You must be signed in to change notification settings - Fork 485
/
kicad_manager_frame.h
234 lines (179 loc) · 7.65 KB
/
kicad_manager_frame.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2013 CERN (www.cern.ch)
* Copyright (C) 2019-2023 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef KICAD_H
#define KICAD_H
#include <kiway_player.h>
class ACTION_TOOLBAR;
class BITMAP_BUTTON;
class EDA_BASE_FRAME;
class KICAD_SETTINGS;
class PANEL_KICAD_LAUNCHER;
class PLUGIN_CONTENT_MANAGER;
class PROJECT_TREE;
class PROJECT_TREE_PANE;
class UPDATE_MANAGER;
/**
* The main KiCad project manager frame. It is not a KIWAY_PLAYER.
*/
class KICAD_MANAGER_FRAME : public EDA_BASE_FRAME
{
public:
KICAD_MANAGER_FRAME( wxWindow* parent, const wxString& title,
const wxPoint& pos, const wxSize& size );
~KICAD_MANAGER_FRAME();
void OnIdle( wxIdleEvent& event );
bool canCloseWindow( wxCloseEvent& aCloseEvent ) override;
void doCloseWindow() override;
void OnSize( wxSizeEvent& event ) override;
void OnArchiveFiles( wxCommandEvent& event );
void OnUnarchiveFiles( wxCommandEvent& event );
void OnOpenFileInTextEditor( wxCommandEvent& event );
void OnBrowseInFileExplorer( wxCommandEvent& event );
void OnFileHistory( wxCommandEvent& event );
void OnClearFileHistory( wxCommandEvent& aEvent );
void OnExit( wxCommandEvent& event );
/** Create the status line (like a wxStatusBar). This is actually a KISTATUSBAR status bar.
* the specified number of fields is the extra number of fields, not the full field count.
* @return a KISTATUSBAR (derived from wxStatusBar)
*/
wxStatusBar* OnCreateStatusBar( int number, long style, wxWindowID id,
const wxString& name ) override;
/**
* (Re)Create the left vertical toolbar
*/
void RecreateBaseLeftToolbar();
wxString GetCurrentFileName() const override
{
return GetProjectFileName();
}
/**
* @brief Creates a project and imports a non-KiCad Schematic and PCB
* @param aWindowTitle to display to the user when opening the files
* @param aFilesWildcard that includes both PCB and Schematic files (from
* wildcards_and_files_ext.h)
* @param aSchFileExtensions e.g. { "sch" } or { "csa" }. Specify { "INPUT" } to copy input file.
* @param aPcbFileExtensions e.g. { "brd" } or { "cpa" }. Specify { "INPUT" } to copy input file.
* @param aSchFileType Type of Schematic File to import (from SCH_IO_MGR::SCH_FILE_T)
* @param aPcbFileType Type of PCB File to import (from IO_MGR::PCB_FILE_T)
*/
void ImportNonKiCadProject( const wxString& aWindowTitle, const wxString& aFilesWildcard,
const std::vector<std::string>& aSchFileExtensions,
const std::vector<std::string>& aPcbFileExtensions,
int aSchFileType, int aPcbFileType );
/**
* Open dialog to import CADSTAR Schematic and PCB Archive files.
*/
void OnImportCadstarArchiveFiles( wxCommandEvent& event );
/**
* Open dialog to import Eagle schematic and board files.
*/
void OnImportEagleFiles( wxCommandEvent& event );
/**
* Open dialog to import EasyEDA Std schematic and board files.
*/
void OnImportEasyEdaFiles( wxCommandEvent& event );
/**
* Open dialog to import EasyEDA Pro schematic and board files.
*/
void OnImportEasyEdaProFiles( wxCommandEvent& event );
/**
* Prints the current working directory name and the project name on the text panel.
*/
void PrintPrjInfo();
void RefreshProjectTree();
/**
* Creates a new project by setting up and initial project, schematic, and board files.
*
* The project file is copied from the kicad.pro template file if possible. Otherwise,
* a minimal project file is created from an empty project. A minimal schematic and
* board file are created to prevent the schematic and board editors from complaining.
* If any of these files already exist, they are not overwritten.
*
* @param aProjectFileName is the absolute path of the project file name.
* @param aCreateStubFiles specifies if an empty PCB and schematic should be created
*/
void CreateNewProject( const wxFileName& aProjectFileName, bool aCreateStubFiles = true );
/**
* Closes the project, and saves it if aSave is true;
*/
bool CloseProject( bool aSave );
void LoadProject( const wxFileName& aProjectFileName );
void OpenJobsFile( const wxFileName& aFileName, bool aCreate = false );
void LoadSettings( APP_SETTINGS_BASE* aCfg ) override;
void SaveSettings( APP_SETTINGS_BASE* aCfg ) override;
void ShowChangedLanguage() override;
void CommonSettingsChanged( bool aEnvVarsChanged, bool aTextVarsChanged ) override;
void ProjectChanged() override;
/**
* Called by sending a event with id = ID_INIT_WATCHED_PATHS
* rebuild the list of watched paths
*/
void OnChangeWatchedPaths( wxCommandEvent& aEvent );
const wxString GetProjectFileName() const;
bool IsProjectActive();
// read only accessors
const wxString SchFileName();
const wxString SchLegacyFileName();
const wxString PcbFileName();
const wxString PcbLegacyFileName();
void ReCreateTreePrj();
wxWindow* GetToolCanvas() const override;
std::shared_ptr<PLUGIN_CONTENT_MANAGER> GetPcm() { return m_pcm; };
void SetPcmButton( BITMAP_BUTTON* aButton );
void CreatePCM(); // creates the PLUGIN_CONTENT_MANAGER
// Used only on Windows: stores the info message about file watcher
wxString m_FileWatcherInfo;
DECLARE_EVENT_TABLE()
protected:
virtual void setupUIConditions() override;
void doReCreateMenuBar() override;
void onToolbarSizeChanged();
void onNotebookPageCloseRequest( wxAuiNotebookEvent& evt );
private:
void setupTools();
void setupActions();
void DoWithAcceptedFiles() override;
APP_SETTINGS_BASE* config() const override;
KICAD_SETTINGS* kicadSettings() const;
const SEARCH_STACK& sys_search() override;
wxString help_name() override;
void language_change( wxCommandEvent& event );
void updatePcmButtonBadge();
bool m_openSavedWindows;
int m_leftWinWidth;
bool m_active_project;
PROJECT_TREE_PANE* m_leftWin;
wxAuiNotebook* m_notebook;
PANEL_KICAD_LAUNCHER* m_launcher;
ACTION_TOOLBAR* m_mainToolBar;
int m_lastToolbarIconSize;
std::shared_ptr<PLUGIN_CONTENT_MANAGER> m_pcm;
BITMAP_BUTTON* m_pcmButton;
int m_pcmUpdateCount;
std::unique_ptr<UPDATE_MANAGER> m_updateManager;
};
// The C++ project manager includes a single PROJECT in its link image.
class PROJECT;
extern PROJECT& Prj();
#endif