2011-10-13 19:56:32 +00:00
|
|
|
/*
|
|
|
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
|
|
|
*
|
2015-03-03 14:53:47 +00:00
|
|
|
* Copyright (C) 2009-2015 Jean-Pierre Charras, jp.charras wanadoo.fr
|
2017-09-21 12:58:08 +00:00
|
|
|
* Copyright (C) 2011 Wayne Stambaugh <stambaughw@gmail.com>
|
2019-05-13 18:33:30 +00:00
|
|
|
* Copyright (C) 1992-2019 KiCad Developers, see AUTHORS.txt for contributors.
|
2011-10-13 19:56:32 +00:00
|
|
|
*
|
|
|
|
* 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
|
|
|
|
*/
|
|
|
|
|
2011-09-01 12:54:34 +00:00
|
|
|
/**
|
2018-01-29 12:38:23 +00:00
|
|
|
* @file eda_base_frame.h
|
2011-09-01 12:54:34 +00:00
|
|
|
* @brief Base window classes and related definitions.
|
|
|
|
*/
|
2007-06-05 12:10:51 +00:00
|
|
|
|
2012-01-09 17:24:01 +00:00
|
|
|
#ifndef WXSTRUCT_H_
|
|
|
|
#define WXSTRUCT_H_
|
2007-06-05 12:10:51 +00:00
|
|
|
|
|
|
|
|
2009-01-29 14:26:20 +00:00
|
|
|
#include <vector>
|
|
|
|
|
2007-06-05 12:10:51 +00:00
|
|
|
#include <wx/socket.h>
|
2012-01-23 04:33:36 +00:00
|
|
|
#include <wx/log.h>
|
|
|
|
#include <wx/config.h>
|
2007-06-05 12:10:51 +00:00
|
|
|
#include <wx/wxhtml.h>
|
|
|
|
#include <wx/laywin.h>
|
2009-11-02 22:24:55 +00:00
|
|
|
#include <wx/aui/aui.h>
|
2011-03-17 19:14:45 +00:00
|
|
|
#include <wx/docview.h>
|
2009-11-02 22:24:55 +00:00
|
|
|
|
2013-03-30 17:24:04 +00:00
|
|
|
#include <fctsys.h>
|
2012-01-23 04:33:36 +00:00
|
|
|
#include <common.h>
|
2013-03-30 17:24:04 +00:00
|
|
|
#include <layers_id_colors_and_visibility.h>
|
2014-04-19 18:47:20 +00:00
|
|
|
#include <frame_type.h>
|
2018-05-14 17:34:18 +00:00
|
|
|
#include "hotkeys_basic.h"
|
2007-10-10 18:01:14 +00:00
|
|
|
|
2012-01-10 17:54:40 +00:00
|
|
|
#ifdef USE_WX_OVERLAY
|
|
|
|
#include <wx/overlay.h>
|
|
|
|
#endif
|
|
|
|
|
2013-11-15 09:28:31 +00:00
|
|
|
// Option for main frames
|
2009-01-29 14:26:20 +00:00
|
|
|
#define KICAD_DEFAULT_DRAWFRAME_STYLE wxDEFAULT_FRAME_STYLE | wxWANTS_CHARS
|
2007-06-05 12:10:51 +00:00
|
|
|
|
2011-10-15 13:25:57 +00:00
|
|
|
|
|
|
|
// Readability helper definitions for creating backup files.
|
|
|
|
#define CREATE_BACKUP_FILE true
|
|
|
|
#define NO_BACKUP_FILE false
|
|
|
|
|
2010-12-08 20:12:46 +00:00
|
|
|
class EDA_ITEM;
|
2011-03-29 19:33:07 +00:00
|
|
|
class EDA_RECT;
|
2011-01-21 19:30:59 +00:00
|
|
|
class EDA_DRAW_PANEL;
|
Introduction of Graphics Abstraction Layer based rendering for pcbnew.
New classes:
- VIEW - represents view that is seen by user, takes care of layer ordering & visibility and how it is displayed (which location, how much zoomed, etc.)
- VIEW_ITEM - Base class for every item that can be displayed on VIEW (the biggest change is that now it may be necessary to override ViewBBox & ViewGetLayers method for derived classes).
- EDA_DRAW_PANEL_GAL - Inherits after EDA_DRAW_PANEL, displays VIEW output, right now it is not editable (in opposite to usual EDA_DRAW_PANEL).
- GAL/OPENGL_GAL/CAIRO_GAL - Base Graphics Abstraction Layer class + two different flavours (Cairo is not fully supported yet), that offers methods to draw primitives using different libraries.
- WX_VIEW_CONTROLS - Controller for VIEW, handles user events, allows zooming, panning, etc.
- PAINTER/PCB_PAINTER - Classes that uses GAL interface to draw items (as you may have already guessed - PCB_PAINTER is a class for drawing PCB specific object, PAINTER is an abstract class). Its methods are invoked by VIEW, when an item has to be drawn. To display a new type of item - you need to implement draw(ITEM_TYPE*) method that draws it using GAL methods.
- STROKE_FONT - Implements stroke font drawing using GAL methods.
Most important changes to Kicad original code:
* EDA_ITEM now inherits from VIEW_ITEM, which is a base class for all drawable objects.
* EDA_DRAW_FRAME contains both usual EDA_DRAW_PANEL and new EDA_DRAW_PANEL_GAL, that can be switched anytime.
* There are some new layers for displaying multilayer pads, vias & pads holes (these are not shown yet on the right sidebar in pcbnew)
* Display order of layers is different than in previous versions (if you are curious - you may check m_galLayerOrder@pcbnew/basepcbframe.cpp). Preserving usual order would result in not very natural display, such as showing silkscreen texts on the bottom.
* Introduced new hotkey (Alt+F12) and new menu option (View->Switch canvas) for switching canvas during runtime.
* Some of classes (mostly derived from BOARD_ITEM) now includes ViewBBox & ViewGetLayers methods.
* Removed tools/class_painter.h, as now it is extended and included in source code.
Build changes:
* GAL-based rendering option is turned on by a new compilation CMake option KICAD_GAL.
* When compiling with CMake option KICAD_GAL=ON, GLEW and Cairo libraries are required.
* GAL-related code is compiled into a static library (common/libgal).
* Build with KICAD_GAL=OFF should not need any new libraries and should come out as a standard version of Kicad
Currently most of items in pcbnew can be displayed using OpenGL (to be done are DIMENSIONS and MARKERS).
More details about GAL can be found in: http://www.ohwr.org/attachments/1884/view-spec.pdf
2013-04-02 06:54:03 +00:00
|
|
|
class EDA_DRAW_PANEL_GAL;
|
2011-04-12 14:19:59 +00:00
|
|
|
class EDA_MSG_PANEL;
|
2007-06-05 12:10:51 +00:00
|
|
|
class BASE_SCREEN;
|
|
|
|
class PARAM_CFG_BASE;
|
2011-12-22 21:57:50 +00:00
|
|
|
class PAGE_INFO;
|
2009-08-29 10:20:48 +00:00
|
|
|
class PLOTTER;
|
2012-01-09 08:35:06 +00:00
|
|
|
class TITLE_BLOCK;
|
2013-01-12 17:32:24 +00:00
|
|
|
class MSG_PANEL_ITEM;
|
2015-04-30 08:46:02 +00:00
|
|
|
class TOOL_MANAGER;
|
|
|
|
class TOOL_DISPATCHER;
|
2017-02-21 12:42:08 +00:00
|
|
|
class ACTIONS;
|
2018-05-14 17:34:18 +00:00
|
|
|
class PAGED_DIALOG;
|
2018-07-19 19:15:40 +00:00
|
|
|
class DIALOG_EDIT_LIBRARY_TABLES;
|
2013-01-12 17:32:24 +00:00
|
|
|
|
2007-06-05 12:10:51 +00:00
|
|
|
|
2007-08-04 04:42:49 +00:00
|
|
|
enum id_librarytype {
|
|
|
|
LIBRARY_TYPE_EESCHEMA,
|
|
|
|
LIBRARY_TYPE_PCBNEW,
|
2009-08-27 11:41:56 +00:00
|
|
|
LIBRARY_TYPE_DOC,
|
|
|
|
LIBRARY_TYPE_SYMBOL
|
2007-06-05 12:10:51 +00:00
|
|
|
};
|
|
|
|
|
* KIWAY Milestone A): Make major modules into DLL/DSOs.
! The initial testing of this commit should be done using a Debug build so that
all the wxASSERT()s are enabled. Also, be sure and keep enabled the
USE_KIWAY_DLLs option. The tree won't likely build without it. Turning it
off is senseless anyways. If you want stable code, go back to a prior version,
the one tagged with "stable".
* Relocate all functionality out of the wxApp derivative into more finely
targeted purposes:
a) DLL/DSO specific
b) PROJECT specific
c) EXE or process specific
d) configuration file specific data
e) configuration file manipulations functions.
All of this functionality was blended into an extremely large wxApp derivative
and that was incompatible with the desire to support multiple concurrently
loaded DLL/DSO's ("KIFACE")s and multiple concurrently open projects.
An amazing amount of organization come from simply sorting each bit of
functionality into the proper box.
* Switch to wxConfigBase from wxConfig everywhere except instantiation.
* Add classes KIWAY, KIFACE, KIFACE_I, SEARCH_STACK, PGM_BASE, PGM_KICAD,
PGM_SINGLE_TOP,
* Remove "Return" prefix on many function names.
* Remove obvious comments from CMakeLists.txt files, and from else() and endif()s.
* Fix building boost for use in a DSO on linux.
* Remove some of the assumptions in the CMakeLists.txt files that windows had
to be the host platform when building windows binaries.
* Reduce the number of wxStrings being constructed at program load time via
static construction.
* Pass wxConfigBase* to all SaveSettings() and LoadSettings() functions so that
these functions are useful even when the wxConfigBase comes from another
source, as is the case in the KICAD_MANAGER_FRAME.
* Move the setting of the KIPRJMOD environment variable into class PROJECT,
so that it can be moved into a project variable soon, and out of FP_LIB_TABLE.
* Add the KIWAY_PLAYER which is associated with a particular PROJECT, and all
its child wxFrames and wxDialogs now have a Kiway() member function which
returns a KIWAY& that that window tree branch is in support of. This is like
wxWindows DNA in that child windows get this member with proper value at time
of construction.
* Anticipate some of the needs for milestones B) and C) and make code
adjustments now in an effort to reduce work in those milestones.
* No testing has been done for python scripting, since milestone C) has that
being largely reworked and re-thought-out.
2014-03-20 00:42:08 +00:00
|
|
|
|
2011-09-01 12:54:34 +00:00
|
|
|
/**
|
2019-05-13 18:33:30 +00:00
|
|
|
* The base frame for deriving all KiCad main window classes.
|
|
|
|
*
|
|
|
|
* This class is not intended to be used directly. It provides support for automatic calls
|
|
|
|
* to SaveSettings() function. SaveSettings() for a derived class can choose to do nothing,
|
|
|
|
* or rely on basic SaveSettings() support in this base class to do most of the work by
|
|
|
|
* calling it from the derived class's SaveSettings().
|
* KIWAY Milestone A): Make major modules into DLL/DSOs.
! The initial testing of this commit should be done using a Debug build so that
all the wxASSERT()s are enabled. Also, be sure and keep enabled the
USE_KIWAY_DLLs option. The tree won't likely build without it. Turning it
off is senseless anyways. If you want stable code, go back to a prior version,
the one tagged with "stable".
* Relocate all functionality out of the wxApp derivative into more finely
targeted purposes:
a) DLL/DSO specific
b) PROJECT specific
c) EXE or process specific
d) configuration file specific data
e) configuration file manipulations functions.
All of this functionality was blended into an extremely large wxApp derivative
and that was incompatible with the desire to support multiple concurrently
loaded DLL/DSO's ("KIFACE")s and multiple concurrently open projects.
An amazing amount of organization come from simply sorting each bit of
functionality into the proper box.
* Switch to wxConfigBase from wxConfig everywhere except instantiation.
* Add classes KIWAY, KIFACE, KIFACE_I, SEARCH_STACK, PGM_BASE, PGM_KICAD,
PGM_SINGLE_TOP,
* Remove "Return" prefix on many function names.
* Remove obvious comments from CMakeLists.txt files, and from else() and endif()s.
* Fix building boost for use in a DSO on linux.
* Remove some of the assumptions in the CMakeLists.txt files that windows had
to be the host platform when building windows binaries.
* Reduce the number of wxStrings being constructed at program load time via
static construction.
* Pass wxConfigBase* to all SaveSettings() and LoadSettings() functions so that
these functions are useful even when the wxConfigBase comes from another
source, as is the case in the KICAD_MANAGER_FRAME.
* Move the setting of the KIPRJMOD environment variable into class PROJECT,
so that it can be moved into a project variable soon, and out of FP_LIB_TABLE.
* Add the KIWAY_PLAYER which is associated with a particular PROJECT, and all
its child wxFrames and wxDialogs now have a Kiway() member function which
returns a KIWAY& that that window tree branch is in support of. This is like
wxWindows DNA in that child windows get this member with proper value at time
of construction.
* Anticipate some of the needs for milestones B) and C) and make code
adjustments now in an effort to reduce work in those milestones.
* No testing has been done for python scripting, since milestone C) has that
being largely reworked and re-thought-out.
2014-03-20 00:42:08 +00:00
|
|
|
* <p>
|
|
|
|
* This class is not a KIWAY_PLAYER because KICAD_MANAGER_FRAME is derived from it
|
|
|
|
* and that class is not a player.
|
2019-05-13 18:33:30 +00:00
|
|
|
* </p>
|
2011-09-01 12:54:34 +00:00
|
|
|
*/
|
2011-01-21 19:30:59 +00:00
|
|
|
class EDA_BASE_FRAME : public wxFrame
|
2007-06-05 12:10:51 +00:00
|
|
|
{
|
2014-02-02 20:18:10 +00:00
|
|
|
/**
|
|
|
|
* (with its unexpected name so it does not collide with the real OnWindowClose()
|
|
|
|
* function provided in derived classes) is called just before a window
|
|
|
|
* closing, and is used to call a derivation specific
|
|
|
|
* SaveSettings(). SaveSettings() is called for all derived wxFrames in this
|
|
|
|
* base class overload. (Calling it from a destructor is deprecated since the
|
|
|
|
* wxFrame's position is not available in the destructor on linux.) In other words,
|
2014-08-29 17:49:49 +00:00
|
|
|
* you should not need to call SaveSettings() anywhere, except in this
|
2014-02-02 20:18:10 +00:00
|
|
|
* one function found only in this class.
|
|
|
|
*/
|
|
|
|
void windowClosing( wxCloseEvent& event );
|
|
|
|
|
2018-03-24 18:28:35 +00:00
|
|
|
wxWindow* findQuasiModalDialog();
|
|
|
|
|
2011-10-13 19:56:32 +00:00
|
|
|
protected:
|
Modular-Kicad milestone B), major portions:
*) Rework the set language support, simplify it by using KIWAY. Now any major
frame with a "change language" menu can change the language for all KIWAY_PLAYERs
in the whole KIWAY. Multiple KIWAYs are not supported yet.
*) Simplify "modal wxFrame" support, and add that support exclusively to
KIWAY_PLAYER where it is inherited by all derivatives. The function
KIWAY_PLAYER::ShowModal() is in the vtable and so is cross module capable.
*) Remove the requirements and assumptions that the wxFrame hierarchy always
had PCB_EDIT_FRAME and SCH_EDIT_FRAME as immediate parents of their viewers
and editors. This is no longer the case, nor required.
*) Use KIWAY::Player() everywhere to make KIWAY_PLAYERs, this registers the
KIWAY_PLAYER within the KIWAY and makes it very easy to find an open frame
quickly. It also gives control to the KIWAY as to frame hierarchical
relationships.
*) Change single_top to use the KIWAY for loading a KIFACE and instantiating
the single KIWAY_PLAYER, see bullet immediately above.
*) Add KIWAY::OnKiwayEnd() and call it from PGM_BASE at program termination, this
gives the KIFACEs a chance to save their final configuration dope to disk.
*) Add dedicated FRAME_T's for the modal frames, so m_Ident can be tested and
these modal frames are distinctly different than their non-modal equivalents.
KIWAY_PLAYER::IsModal() is !not! a valid test during the wxFrame's constructor,
so this is another important reason for having a dedicated FRAME_T for each
modal wxFrame.
On balance, more lines were deleted than were added to achieve all this.
2014-05-03 17:40:19 +00:00
|
|
|
FRAME_T m_Ident; ///< Id Type (pcb, schematic, library..)
|
2011-04-13 19:30:27 +00:00
|
|
|
wxPoint m_FramePos;
|
|
|
|
wxSize m_FrameSize;
|
|
|
|
|
2015-08-31 06:43:33 +00:00
|
|
|
wxString m_configFrameName; ///< prefix used in config to identify some params (frame size...)
|
|
|
|
///< if empty, the frame name defined in CTOR is used
|
|
|
|
|
2013-08-03 05:15:23 +00:00
|
|
|
wxAuiToolBar* m_mainToolBar; ///< Standard horizontal Toolbar
|
2015-03-03 14:53:47 +00:00
|
|
|
|
2013-08-03 05:15:23 +00:00
|
|
|
wxString m_AboutTitle; ///< Name of program displayed in About.
|
2007-06-05 12:10:51 +00:00
|
|
|
|
2011-04-13 19:30:27 +00:00
|
|
|
wxAuiManager m_auimgr;
|
2009-11-02 22:24:55 +00:00
|
|
|
|
2011-10-13 19:56:32 +00:00
|
|
|
/// Flag to indicate if this frame supports auto save.
|
|
|
|
bool m_hasAutoSave;
|
|
|
|
|
|
|
|
/// Flag to indicate the last auto save state.
|
|
|
|
bool m_autoSaveState;
|
|
|
|
|
|
|
|
/// The auto save interval time in seconds.
|
|
|
|
int m_autoSaveInterval;
|
|
|
|
|
|
|
|
/// The timer used to implement the auto save feature;
|
|
|
|
wxTimer* m_autoSaveTimer;
|
|
|
|
|
2013-12-07 00:33:16 +00:00
|
|
|
wxString m_perspective; ///< wxAuiManager perspective.
|
|
|
|
|
2015-09-25 19:38:09 +00:00
|
|
|
wxString m_mruPath; ///< Most recently used path.
|
|
|
|
|
2017-09-27 17:40:18 +00:00
|
|
|
///> Default style flags used for wxAUI toolbars
|
|
|
|
static constexpr int KICAD_AUI_TB_STYLE = wxAUI_TB_DEFAULT_STYLE | wxAUI_TB_PLAIN_BACKGROUND;
|
|
|
|
|
2019-03-18 12:22:33 +00:00
|
|
|
/**
|
|
|
|
* @return the suffix to be appended to the file extension on backup
|
|
|
|
*/
|
|
|
|
static wxString GetBackupSuffix()
|
|
|
|
{
|
|
|
|
return wxT( "-bak" );
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return the string to prepend to a file name for automatic save.
|
|
|
|
*/
|
|
|
|
static wxString GetAutoSaveFilePrefix()
|
|
|
|
{
|
|
|
|
return wxT( "_autosave-" );
|
|
|
|
}
|
|
|
|
|
2011-10-13 19:56:32 +00:00
|
|
|
/**
|
2019-05-13 18:33:30 +00:00
|
|
|
* Handle the auto save timer event.
|
2011-10-13 19:56:32 +00:00
|
|
|
*/
|
|
|
|
void onAutoSaveTimer( wxTimerEvent& aEvent );
|
|
|
|
|
|
|
|
/**
|
2019-05-13 18:33:30 +00:00
|
|
|
* Return the auto save status of the application.
|
|
|
|
*
|
|
|
|
* Override this function if your derived frame supports automatic file saving.
|
2011-10-13 19:56:32 +00:00
|
|
|
*/
|
2011-10-15 13:25:57 +00:00
|
|
|
virtual bool isAutoSaveRequired() const { return false; }
|
2011-10-13 19:56:32 +00:00
|
|
|
|
|
|
|
/**
|
2019-05-13 18:33:30 +00:00
|
|
|
* This should be overridden by the derived class to handle the auto save feature.
|
2011-10-13 19:56:32 +00:00
|
|
|
*
|
|
|
|
* @return true if the auto save was successful otherwise false.
|
|
|
|
*/
|
|
|
|
virtual bool doAutoSave();
|
|
|
|
|
* KIWAY Milestone A): Make major modules into DLL/DSOs.
! The initial testing of this commit should be done using a Debug build so that
all the wxASSERT()s are enabled. Also, be sure and keep enabled the
USE_KIWAY_DLLs option. The tree won't likely build without it. Turning it
off is senseless anyways. If you want stable code, go back to a prior version,
the one tagged with "stable".
* Relocate all functionality out of the wxApp derivative into more finely
targeted purposes:
a) DLL/DSO specific
b) PROJECT specific
c) EXE or process specific
d) configuration file specific data
e) configuration file manipulations functions.
All of this functionality was blended into an extremely large wxApp derivative
and that was incompatible with the desire to support multiple concurrently
loaded DLL/DSO's ("KIFACE")s and multiple concurrently open projects.
An amazing amount of organization come from simply sorting each bit of
functionality into the proper box.
* Switch to wxConfigBase from wxConfig everywhere except instantiation.
* Add classes KIWAY, KIFACE, KIFACE_I, SEARCH_STACK, PGM_BASE, PGM_KICAD,
PGM_SINGLE_TOP,
* Remove "Return" prefix on many function names.
* Remove obvious comments from CMakeLists.txt files, and from else() and endif()s.
* Fix building boost for use in a DSO on linux.
* Remove some of the assumptions in the CMakeLists.txt files that windows had
to be the host platform when building windows binaries.
* Reduce the number of wxStrings being constructed at program load time via
static construction.
* Pass wxConfigBase* to all SaveSettings() and LoadSettings() functions so that
these functions are useful even when the wxConfigBase comes from another
source, as is the case in the KICAD_MANAGER_FRAME.
* Move the setting of the KIPRJMOD environment variable into class PROJECT,
so that it can be moved into a project variable soon, and out of FP_LIB_TABLE.
* Add the KIWAY_PLAYER which is associated with a particular PROJECT, and all
its child wxFrames and wxDialogs now have a Kiway() member function which
returns a KIWAY& that that window tree branch is in support of. This is like
wxWindows DNA in that child windows get this member with proper value at time
of construction.
* Anticipate some of the needs for milestones B) and C) and make code
adjustments now in an effort to reduce work in those milestones.
* No testing has been done for python scripting, since milestone C) has that
being largely reworked and re-thought-out.
2014-03-20 00:42:08 +00:00
|
|
|
/**
|
2019-05-13 18:33:30 +00:00
|
|
|
* Return the wxConfigBase used in SaveSettings().
|
|
|
|
*
|
|
|
|
* This is overloaded in #KICAD_MANAGER_FRAME
|
* KIWAY Milestone A): Make major modules into DLL/DSOs.
! The initial testing of this commit should be done using a Debug build so that
all the wxASSERT()s are enabled. Also, be sure and keep enabled the
USE_KIWAY_DLLs option. The tree won't likely build without it. Turning it
off is senseless anyways. If you want stable code, go back to a prior version,
the one tagged with "stable".
* Relocate all functionality out of the wxApp derivative into more finely
targeted purposes:
a) DLL/DSO specific
b) PROJECT specific
c) EXE or process specific
d) configuration file specific data
e) configuration file manipulations functions.
All of this functionality was blended into an extremely large wxApp derivative
and that was incompatible with the desire to support multiple concurrently
loaded DLL/DSO's ("KIFACE")s and multiple concurrently open projects.
An amazing amount of organization come from simply sorting each bit of
functionality into the proper box.
* Switch to wxConfigBase from wxConfig everywhere except instantiation.
* Add classes KIWAY, KIFACE, KIFACE_I, SEARCH_STACK, PGM_BASE, PGM_KICAD,
PGM_SINGLE_TOP,
* Remove "Return" prefix on many function names.
* Remove obvious comments from CMakeLists.txt files, and from else() and endif()s.
* Fix building boost for use in a DSO on linux.
* Remove some of the assumptions in the CMakeLists.txt files that windows had
to be the host platform when building windows binaries.
* Reduce the number of wxStrings being constructed at program load time via
static construction.
* Pass wxConfigBase* to all SaveSettings() and LoadSettings() functions so that
these functions are useful even when the wxConfigBase comes from another
source, as is the case in the KICAD_MANAGER_FRAME.
* Move the setting of the KIPRJMOD environment variable into class PROJECT,
so that it can be moved into a project variable soon, and out of FP_LIB_TABLE.
* Add the KIWAY_PLAYER which is associated with a particular PROJECT, and all
its child wxFrames and wxDialogs now have a Kiway() member function which
returns a KIWAY& that that window tree branch is in support of. This is like
wxWindows DNA in that child windows get this member with proper value at time
of construction.
* Anticipate some of the needs for milestones B) and C) and make code
adjustments now in an effort to reduce work in those milestones.
* No testing has been done for python scripting, since milestone C) has that
being largely reworked and re-thought-out.
2014-03-20 00:42:08 +00:00
|
|
|
*/
|
|
|
|
virtual wxConfigBase* config();
|
|
|
|
|
2014-04-14 18:49:52 +00:00
|
|
|
/**
|
2019-05-13 18:33:30 +00:00
|
|
|
* Return a SEARCH_STACK pertaining to entire program.
|
|
|
|
*
|
|
|
|
* This is overloaded in #KICAD_MANAGER_FRAME
|
2014-04-14 18:49:52 +00:00
|
|
|
*/
|
|
|
|
virtual const SEARCH_STACK& sys_search();
|
|
|
|
|
|
|
|
virtual wxString help_name();
|
|
|
|
|
2020-02-21 22:57:32 +00:00
|
|
|
DECLARE_EVENT_TABLE()
|
|
|
|
|
2007-06-05 12:10:51 +00:00
|
|
|
public:
|
2014-04-19 18:47:20 +00:00
|
|
|
EDA_BASE_FRAME( wxWindow* aParent, FRAME_T aFrameType,
|
* KIWAY Milestone A): Make major modules into DLL/DSOs.
! The initial testing of this commit should be done using a Debug build so that
all the wxASSERT()s are enabled. Also, be sure and keep enabled the
USE_KIWAY_DLLs option. The tree won't likely build without it. Turning it
off is senseless anyways. If you want stable code, go back to a prior version,
the one tagged with "stable".
* Relocate all functionality out of the wxApp derivative into more finely
targeted purposes:
a) DLL/DSO specific
b) PROJECT specific
c) EXE or process specific
d) configuration file specific data
e) configuration file manipulations functions.
All of this functionality was blended into an extremely large wxApp derivative
and that was incompatible with the desire to support multiple concurrently
loaded DLL/DSO's ("KIFACE")s and multiple concurrently open projects.
An amazing amount of organization come from simply sorting each bit of
functionality into the proper box.
* Switch to wxConfigBase from wxConfig everywhere except instantiation.
* Add classes KIWAY, KIFACE, KIFACE_I, SEARCH_STACK, PGM_BASE, PGM_KICAD,
PGM_SINGLE_TOP,
* Remove "Return" prefix on many function names.
* Remove obvious comments from CMakeLists.txt files, and from else() and endif()s.
* Fix building boost for use in a DSO on linux.
* Remove some of the assumptions in the CMakeLists.txt files that windows had
to be the host platform when building windows binaries.
* Reduce the number of wxStrings being constructed at program load time via
static construction.
* Pass wxConfigBase* to all SaveSettings() and LoadSettings() functions so that
these functions are useful even when the wxConfigBase comes from another
source, as is the case in the KICAD_MANAGER_FRAME.
* Move the setting of the KIPRJMOD environment variable into class PROJECT,
so that it can be moved into a project variable soon, and out of FP_LIB_TABLE.
* Add the KIWAY_PLAYER which is associated with a particular PROJECT, and all
its child wxFrames and wxDialogs now have a Kiway() member function which
returns a KIWAY& that that window tree branch is in support of. This is like
wxWindows DNA in that child windows get this member with proper value at time
of construction.
* Anticipate some of the needs for milestones B) and C) and make code
adjustments now in an effort to reduce work in those milestones.
* No testing has been done for python scripting, since milestone C) has that
being largely reworked and re-thought-out.
2014-03-20 00:42:08 +00:00
|
|
|
const wxString& aTitle, const wxPoint& aPos, const wxSize& aSize,
|
|
|
|
long aStyle, const wxString& aFrameName );
|
2011-10-13 19:56:32 +00:00
|
|
|
|
2011-01-21 19:30:59 +00:00
|
|
|
~EDA_BASE_FRAME();
|
2007-10-01 15:37:42 +00:00
|
|
|
|
2011-10-13 19:56:32 +00:00
|
|
|
/**
|
2019-05-13 18:33:30 +00:00
|
|
|
* Override the default process event handler to implement the auto save feature.
|
2011-10-13 19:56:32 +00:00
|
|
|
*
|
|
|
|
* @warning If you override this function in a derived class, make sure you call
|
|
|
|
* down to this or the auto save feature will be disabled.
|
|
|
|
*/
|
2016-09-24 18:53:15 +00:00
|
|
|
bool ProcessEvent( wxEvent& aEvent ) override;
|
2014-05-04 18:22:27 +00:00
|
|
|
|
2020-02-21 22:57:32 +00:00
|
|
|
virtual void OnMove( wxMoveEvent& aEvent )
|
|
|
|
{
|
|
|
|
aEvent.Skip();
|
|
|
|
}
|
|
|
|
|
2016-11-22 10:07:33 +00:00
|
|
|
void SetAutoSaveInterval( int aInterval );
|
2011-10-13 19:56:32 +00:00
|
|
|
|
|
|
|
int GetAutoSaveInterval() const { return m_autoSaveInterval; }
|
|
|
|
|
2014-04-19 18:47:20 +00:00
|
|
|
bool IsType( FRAME_T aType ) const { return m_Ident == aType; }
|
2011-10-13 19:56:32 +00:00
|
|
|
|
2011-09-01 12:54:34 +00:00
|
|
|
void GetKicadHelp( wxCommandEvent& event );
|
2011-10-13 19:56:32 +00:00
|
|
|
|
2016-09-24 00:44:52 +00:00
|
|
|
void GetKicadContribute( wxCommandEvent& event );
|
|
|
|
|
2011-09-01 12:54:34 +00:00
|
|
|
void GetKicadAbout( wxCommandEvent& event );
|
2010-08-24 17:26:51 +00:00
|
|
|
|
2018-05-14 17:34:18 +00:00
|
|
|
bool ShowPreferences( EDA_HOTKEY_CONFIG* aHotkeys, EDA_HOTKEY_CONFIG* aShowHotkeys,
|
|
|
|
const wxString& aHotkeysNickname );
|
|
|
|
|
2011-09-01 12:54:34 +00:00
|
|
|
void PrintMsg( const wxString& text );
|
2009-04-07 11:53:58 +00:00
|
|
|
|
2018-05-14 17:34:18 +00:00
|
|
|
/**
|
2019-05-13 18:33:30 +00:00
|
|
|
* Allow a frame to load its preference panels (if any) into the preferences dialog.
|
|
|
|
*
|
2018-05-14 17:34:18 +00:00
|
|
|
* @param aParent a paged dialog into which the preference panels should be installed
|
|
|
|
*/
|
|
|
|
virtual void InstallPreferences( PAGED_DIALOG* aParent ) { }
|
|
|
|
|
2011-10-13 19:56:32 +00:00
|
|
|
/**
|
2019-05-13 18:33:30 +00:00
|
|
|
* Load common frame parameters from a configuration file.
|
2011-10-13 19:56:32 +00:00
|
|
|
*
|
* KIWAY Milestone A): Make major modules into DLL/DSOs.
! The initial testing of this commit should be done using a Debug build so that
all the wxASSERT()s are enabled. Also, be sure and keep enabled the
USE_KIWAY_DLLs option. The tree won't likely build without it. Turning it
off is senseless anyways. If you want stable code, go back to a prior version,
the one tagged with "stable".
* Relocate all functionality out of the wxApp derivative into more finely
targeted purposes:
a) DLL/DSO specific
b) PROJECT specific
c) EXE or process specific
d) configuration file specific data
e) configuration file manipulations functions.
All of this functionality was blended into an extremely large wxApp derivative
and that was incompatible with the desire to support multiple concurrently
loaded DLL/DSO's ("KIFACE")s and multiple concurrently open projects.
An amazing amount of organization come from simply sorting each bit of
functionality into the proper box.
* Switch to wxConfigBase from wxConfig everywhere except instantiation.
* Add classes KIWAY, KIFACE, KIFACE_I, SEARCH_STACK, PGM_BASE, PGM_KICAD,
PGM_SINGLE_TOP,
* Remove "Return" prefix on many function names.
* Remove obvious comments from CMakeLists.txt files, and from else() and endif()s.
* Fix building boost for use in a DSO on linux.
* Remove some of the assumptions in the CMakeLists.txt files that windows had
to be the host platform when building windows binaries.
* Reduce the number of wxStrings being constructed at program load time via
static construction.
* Pass wxConfigBase* to all SaveSettings() and LoadSettings() functions so that
these functions are useful even when the wxConfigBase comes from another
source, as is the case in the KICAD_MANAGER_FRAME.
* Move the setting of the KIPRJMOD environment variable into class PROJECT,
so that it can be moved into a project variable soon, and out of FP_LIB_TABLE.
* Add the KIWAY_PLAYER which is associated with a particular PROJECT, and all
its child wxFrames and wxDialogs now have a Kiway() member function which
returns a KIWAY& that that window tree branch is in support of. This is like
wxWindows DNA in that child windows get this member with proper value at time
of construction.
* Anticipate some of the needs for milestones B) and C) and make code
adjustments now in an effort to reduce work in those milestones.
* No testing has been done for python scripting, since milestone C) has that
being largely reworked and re-thought-out.
2014-03-20 00:42:08 +00:00
|
|
|
* Don't forget to call the base method or your frames won't
|
2011-10-13 19:56:32 +00:00
|
|
|
* remember their positions and sizes.
|
|
|
|
*/
|
* KIWAY Milestone A): Make major modules into DLL/DSOs.
! The initial testing of this commit should be done using a Debug build so that
all the wxASSERT()s are enabled. Also, be sure and keep enabled the
USE_KIWAY_DLLs option. The tree won't likely build without it. Turning it
off is senseless anyways. If you want stable code, go back to a prior version,
the one tagged with "stable".
* Relocate all functionality out of the wxApp derivative into more finely
targeted purposes:
a) DLL/DSO specific
b) PROJECT specific
c) EXE or process specific
d) configuration file specific data
e) configuration file manipulations functions.
All of this functionality was blended into an extremely large wxApp derivative
and that was incompatible with the desire to support multiple concurrently
loaded DLL/DSO's ("KIFACE")s and multiple concurrently open projects.
An amazing amount of organization come from simply sorting each bit of
functionality into the proper box.
* Switch to wxConfigBase from wxConfig everywhere except instantiation.
* Add classes KIWAY, KIFACE, KIFACE_I, SEARCH_STACK, PGM_BASE, PGM_KICAD,
PGM_SINGLE_TOP,
* Remove "Return" prefix on many function names.
* Remove obvious comments from CMakeLists.txt files, and from else() and endif()s.
* Fix building boost for use in a DSO on linux.
* Remove some of the assumptions in the CMakeLists.txt files that windows had
to be the host platform when building windows binaries.
* Reduce the number of wxStrings being constructed at program load time via
static construction.
* Pass wxConfigBase* to all SaveSettings() and LoadSettings() functions so that
these functions are useful even when the wxConfigBase comes from another
source, as is the case in the KICAD_MANAGER_FRAME.
* Move the setting of the KIPRJMOD environment variable into class PROJECT,
so that it can be moved into a project variable soon, and out of FP_LIB_TABLE.
* Add the KIWAY_PLAYER which is associated with a particular PROJECT, and all
its child wxFrames and wxDialogs now have a Kiway() member function which
returns a KIWAY& that that window tree branch is in support of. This is like
wxWindows DNA in that child windows get this member with proper value at time
of construction.
* Anticipate some of the needs for milestones B) and C) and make code
adjustments now in an effort to reduce work in those milestones.
* No testing has been done for python scripting, since milestone C) has that
being largely reworked and re-thought-out.
2014-03-20 00:42:08 +00:00
|
|
|
virtual void LoadSettings( wxConfigBase* aCfg );
|
2011-10-13 19:56:32 +00:00
|
|
|
|
|
|
|
/**
|
2019-05-13 18:33:30 +00:00
|
|
|
* Saves common frame parameters to a configuration data file.
|
2011-10-13 19:56:32 +00:00
|
|
|
*
|
* KIWAY Milestone A): Make major modules into DLL/DSOs.
! The initial testing of this commit should be done using a Debug build so that
all the wxASSERT()s are enabled. Also, be sure and keep enabled the
USE_KIWAY_DLLs option. The tree won't likely build without it. Turning it
off is senseless anyways. If you want stable code, go back to a prior version,
the one tagged with "stable".
* Relocate all functionality out of the wxApp derivative into more finely
targeted purposes:
a) DLL/DSO specific
b) PROJECT specific
c) EXE or process specific
d) configuration file specific data
e) configuration file manipulations functions.
All of this functionality was blended into an extremely large wxApp derivative
and that was incompatible with the desire to support multiple concurrently
loaded DLL/DSO's ("KIFACE")s and multiple concurrently open projects.
An amazing amount of organization come from simply sorting each bit of
functionality into the proper box.
* Switch to wxConfigBase from wxConfig everywhere except instantiation.
* Add classes KIWAY, KIFACE, KIFACE_I, SEARCH_STACK, PGM_BASE, PGM_KICAD,
PGM_SINGLE_TOP,
* Remove "Return" prefix on many function names.
* Remove obvious comments from CMakeLists.txt files, and from else() and endif()s.
* Fix building boost for use in a DSO on linux.
* Remove some of the assumptions in the CMakeLists.txt files that windows had
to be the host platform when building windows binaries.
* Reduce the number of wxStrings being constructed at program load time via
static construction.
* Pass wxConfigBase* to all SaveSettings() and LoadSettings() functions so that
these functions are useful even when the wxConfigBase comes from another
source, as is the case in the KICAD_MANAGER_FRAME.
* Move the setting of the KIPRJMOD environment variable into class PROJECT,
so that it can be moved into a project variable soon, and out of FP_LIB_TABLE.
* Add the KIWAY_PLAYER which is associated with a particular PROJECT, and all
its child wxFrames and wxDialogs now have a Kiway() member function which
returns a KIWAY& that that window tree branch is in support of. This is like
wxWindows DNA in that child windows get this member with proper value at time
of construction.
* Anticipate some of the needs for milestones B) and C) and make code
adjustments now in an effort to reduce work in those milestones.
* No testing has been done for python scripting, since milestone C) has that
being largely reworked and re-thought-out.
2014-03-20 00:42:08 +00:00
|
|
|
* Don't forget to call the base class's SaveSettings() from
|
2014-01-28 01:29:26 +00:00
|
|
|
* your derived SaveSettings() otherwise the frames won't remember their
|
* KIWAY Milestone A): Make major modules into DLL/DSOs.
! The initial testing of this commit should be done using a Debug build so that
all the wxASSERT()s are enabled. Also, be sure and keep enabled the
USE_KIWAY_DLLs option. The tree won't likely build without it. Turning it
off is senseless anyways. If you want stable code, go back to a prior version,
the one tagged with "stable".
* Relocate all functionality out of the wxApp derivative into more finely
targeted purposes:
a) DLL/DSO specific
b) PROJECT specific
c) EXE or process specific
d) configuration file specific data
e) configuration file manipulations functions.
All of this functionality was blended into an extremely large wxApp derivative
and that was incompatible with the desire to support multiple concurrently
loaded DLL/DSO's ("KIFACE")s and multiple concurrently open projects.
An amazing amount of organization come from simply sorting each bit of
functionality into the proper box.
* Switch to wxConfigBase from wxConfig everywhere except instantiation.
* Add classes KIWAY, KIFACE, KIFACE_I, SEARCH_STACK, PGM_BASE, PGM_KICAD,
PGM_SINGLE_TOP,
* Remove "Return" prefix on many function names.
* Remove obvious comments from CMakeLists.txt files, and from else() and endif()s.
* Fix building boost for use in a DSO on linux.
* Remove some of the assumptions in the CMakeLists.txt files that windows had
to be the host platform when building windows binaries.
* Reduce the number of wxStrings being constructed at program load time via
static construction.
* Pass wxConfigBase* to all SaveSettings() and LoadSettings() functions so that
these functions are useful even when the wxConfigBase comes from another
source, as is the case in the KICAD_MANAGER_FRAME.
* Move the setting of the KIPRJMOD environment variable into class PROJECT,
so that it can be moved into a project variable soon, and out of FP_LIB_TABLE.
* Add the KIWAY_PLAYER which is associated with a particular PROJECT, and all
its child wxFrames and wxDialogs now have a Kiway() member function which
returns a KIWAY& that that window tree branch is in support of. This is like
wxWindows DNA in that child windows get this member with proper value at time
of construction.
* Anticipate some of the needs for milestones B) and C) and make code
adjustments now in an effort to reduce work in those milestones.
* No testing has been done for python scripting, since milestone C) has that
being largely reworked and re-thought-out.
2014-03-20 00:42:08 +00:00
|
|
|
* positions and sizes.
|
2011-10-13 19:56:32 +00:00
|
|
|
*/
|
* KIWAY Milestone A): Make major modules into DLL/DSOs.
! The initial testing of this commit should be done using a Debug build so that
all the wxASSERT()s are enabled. Also, be sure and keep enabled the
USE_KIWAY_DLLs option. The tree won't likely build without it. Turning it
off is senseless anyways. If you want stable code, go back to a prior version,
the one tagged with "stable".
* Relocate all functionality out of the wxApp derivative into more finely
targeted purposes:
a) DLL/DSO specific
b) PROJECT specific
c) EXE or process specific
d) configuration file specific data
e) configuration file manipulations functions.
All of this functionality was blended into an extremely large wxApp derivative
and that was incompatible with the desire to support multiple concurrently
loaded DLL/DSO's ("KIFACE")s and multiple concurrently open projects.
An amazing amount of organization come from simply sorting each bit of
functionality into the proper box.
* Switch to wxConfigBase from wxConfig everywhere except instantiation.
* Add classes KIWAY, KIFACE, KIFACE_I, SEARCH_STACK, PGM_BASE, PGM_KICAD,
PGM_SINGLE_TOP,
* Remove "Return" prefix on many function names.
* Remove obvious comments from CMakeLists.txt files, and from else() and endif()s.
* Fix building boost for use in a DSO on linux.
* Remove some of the assumptions in the CMakeLists.txt files that windows had
to be the host platform when building windows binaries.
* Reduce the number of wxStrings being constructed at program load time via
static construction.
* Pass wxConfigBase* to all SaveSettings() and LoadSettings() functions so that
these functions are useful even when the wxConfigBase comes from another
source, as is the case in the KICAD_MANAGER_FRAME.
* Move the setting of the KIPRJMOD environment variable into class PROJECT,
so that it can be moved into a project variable soon, and out of FP_LIB_TABLE.
* Add the KIWAY_PLAYER which is associated with a particular PROJECT, and all
its child wxFrames and wxDialogs now have a Kiway() member function which
returns a KIWAY& that that window tree branch is in support of. This is like
wxWindows DNA in that child windows get this member with proper value at time
of construction.
* Anticipate some of the needs for milestones B) and C) and make code
adjustments now in an effort to reduce work in those milestones.
* No testing has been done for python scripting, since milestone C) has that
being largely reworked and re-thought-out.
2014-03-20 00:42:08 +00:00
|
|
|
virtual void SaveSettings( wxConfigBase* aCfg );
|
2009-04-07 11:53:58 +00:00
|
|
|
|
2015-08-31 06:43:33 +00:00
|
|
|
/**
|
|
|
|
* @return a base name prefix used in Load/Save settings to build
|
|
|
|
* the full name of keys used in config.
|
|
|
|
* This is usually the name of the frame set by CTOR, unless m_configFrameName
|
|
|
|
* contains a base name.
|
|
|
|
* this is the case of frames which can be shown in normal or modal mode.
|
|
|
|
* This is needed because we want only one base name prefix,
|
|
|
|
* regardless the mode used.
|
|
|
|
*/
|
|
|
|
wxString ConfigBaseName()
|
|
|
|
{
|
|
|
|
wxString baseCfgName = m_configFrameName.IsEmpty() ? GetName() : m_configFrameName;
|
|
|
|
return baseCfgName;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2013-07-19 18:27:22 +00:00
|
|
|
/**
|
2019-05-13 18:33:30 +00:00
|
|
|
* Save changes to the project settings to the project (.pro) file.
|
|
|
|
*
|
2013-07-19 18:27:22 +00:00
|
|
|
* The method is virtual so you can override it to call the suitable save method.
|
|
|
|
* The base method do nothing
|
|
|
|
* @param aAskForSave = true to open a dialog before saving the settings
|
|
|
|
*/
|
|
|
|
virtual void SaveProjectSettings( bool aAskForSave ) {};
|
|
|
|
|
2010-08-28 18:02:24 +00:00
|
|
|
// Read/Save and Import/export hotkeys config
|
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
2010-08-28 18:02:24 +00:00
|
|
|
* Store the current hotkey list
|
2019-05-13 18:33:30 +00:00
|
|
|
*
|
|
|
|
* The hotkey list is stored using the standard wxConfig mechanism or a file.
|
2010-08-28 18:02:24 +00:00
|
|
|
*
|
|
|
|
* @param aDescList = pointer to the current hotkey list.
|
2011-09-01 12:54:34 +00:00
|
|
|
* @param aFullFileName = a wxString pointer to a full file name.
|
2010-08-28 18:02:24 +00:00
|
|
|
* if NULL, use the standard wxConfig mechanism (default)
|
|
|
|
* the output format is: shortcut "key" "function"
|
|
|
|
* lines starting with # are comments
|
|
|
|
*/
|
2019-05-13 18:33:30 +00:00
|
|
|
virtual int WriteHotkeyConfig( struct EDA_HOTKEY_CONFIG* aDescList,
|
|
|
|
wxString* aFullFileName = NULL );
|
2010-08-28 18:02:24 +00:00
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
2010-08-28 18:02:24 +00:00
|
|
|
* Prompt the user for an old hotkey file to read, and read it.
|
2019-05-13 18:33:30 +00:00
|
|
|
*
|
2011-09-01 12:54:34 +00:00
|
|
|
* @param aDescList = current hotkey list descr. to initialize.
|
2019-05-13 18:33:30 +00:00
|
|
|
* @param aDefaultShortname = a default short name (extension not needed)
|
2015-03-02 17:29:18 +00:00
|
|
|
* like eechema, kicad...
|
2010-08-28 18:02:24 +00:00
|
|
|
*/
|
2015-03-02 17:29:18 +00:00
|
|
|
void ImportHotkeyConfigFromFile( EDA_HOTKEY_CONFIG* aDescList,
|
|
|
|
const wxString& aDefaultShortname );
|
2010-08-28 18:02:24 +00:00
|
|
|
|
2010-11-12 15:17:10 +00:00
|
|
|
/**
|
2010-08-28 18:02:24 +00:00
|
|
|
* Prompt the user for an old hotkey file to read, and read it.
|
2019-05-13 18:33:30 +00:00
|
|
|
*
|
2011-09-01 12:54:34 +00:00
|
|
|
* @param aDescList = current hotkey list descr. to initialize.
|
2019-05-13 18:33:30 +00:00
|
|
|
* @param aDefaultShortname = a default short name (extension not needed)
|
2015-03-02 17:29:18 +00:00
|
|
|
* like eechema, kicad...
|
2010-08-28 18:02:24 +00:00
|
|
|
*/
|
2015-03-02 17:29:18 +00:00
|
|
|
void ExportHotkeyConfigToFile( EDA_HOTKEY_CONFIG* aDescList,
|
|
|
|
const wxString& aDefaultShortname );
|
2010-08-28 18:02:24 +00:00
|
|
|
|
2011-03-17 19:14:45 +00:00
|
|
|
/**
|
2019-05-13 18:33:30 +00:00
|
|
|
* Fetches the file name from the file history list.
|
|
|
|
*
|
|
|
|
* This removes the selected file, if this file does not exist. The menu is also updated,
|
|
|
|
* if wxFileHistory::UseMenu was called at init time
|
|
|
|
*
|
2011-03-25 19:16:05 +00:00
|
|
|
* @param cmdId The command ID associated with the \a aFileHistory object.
|
|
|
|
* @param type Please document me!
|
|
|
|
* @param aFileHistory The wxFileHistory in use. If null, the main application file
|
|
|
|
* history is used
|
2011-03-17 19:14:45 +00:00
|
|
|
* @return a wxString containing the selected filename
|
|
|
|
*/
|
2011-09-01 12:54:34 +00:00
|
|
|
wxString GetFileFromHistory( int cmdId, const wxString& type,
|
|
|
|
wxFileHistory* aFileHistory = NULL );
|
2011-03-17 19:14:45 +00:00
|
|
|
|
|
|
|
/**
|
2019-05-13 18:33:30 +00:00
|
|
|
* Update the list of recently opened files.
|
|
|
|
*
|
|
|
|
* The menu is also updated, if wxFileHistory::UseMenu was called at init time.
|
|
|
|
*
|
2011-03-25 19:16:05 +00:00
|
|
|
* @param FullFileName The full file name including the path.
|
2011-04-17 13:54:17 +00:00
|
|
|
* @param aFileHistory The wxFileHistory in use.
|
|
|
|
* If NULL, the main application file history is used.
|
2011-03-17 19:14:45 +00:00
|
|
|
*/
|
2011-09-01 12:54:34 +00:00
|
|
|
void UpdateFileHistory( const wxString& FullFileName, wxFileHistory * aFileHistory = NULL );
|
2011-03-17 19:14:45 +00:00
|
|
|
|
2015-09-25 19:38:09 +00:00
|
|
|
void SetMruPath( const wxString& aPath ) { m_mruPath = aPath; }
|
|
|
|
|
|
|
|
wxString GetMruPath() const { return m_mruPath; }
|
|
|
|
|
2011-04-17 13:54:17 +00:00
|
|
|
/**
|
2019-05-13 18:33:30 +00:00
|
|
|
* Recreates the menu bar.
|
|
|
|
*
|
2011-04-17 13:54:17 +00:00
|
|
|
* Needed when the language is changed
|
|
|
|
*/
|
2009-04-07 11:53:58 +00:00
|
|
|
virtual void ReCreateMenuBar();
|
2011-08-18 19:25:12 +00:00
|
|
|
|
|
|
|
/**
|
2019-05-13 18:33:30 +00:00
|
|
|
* Checks if \a aFileName can be written.
|
2011-08-18 19:25:12 +00:00
|
|
|
* <p>
|
2011-10-28 20:30:50 +00:00
|
|
|
* The function performs a number of tests on \a aFileName to verify that it
|
|
|
|
* can be saved. If \a aFileName defines a path with no file name, them the
|
|
|
|
* path is tested for user write permission. If \a aFileName defines a file
|
|
|
|
* name that does not exist in the path, the path is tested for user write
|
|
|
|
* permission. If \a aFileName defines a file that already exits, the file
|
|
|
|
* name is tested for user write permissions.
|
2011-08-18 19:25:12 +00:00
|
|
|
* </p>
|
|
|
|
*
|
2011-10-28 20:30:50 +00:00
|
|
|
* @note The file name path must be set or an assertion will be raised on debug
|
|
|
|
* builds and return false on release builds.
|
2011-08-18 19:25:12 +00:00
|
|
|
* @param aFileName The full path and/or file name of the file to test.
|
|
|
|
* @return False if \a aFileName cannot be written.
|
|
|
|
*/
|
|
|
|
bool IsWritable( const wxFileName& aFileName );
|
2011-10-15 13:25:57 +00:00
|
|
|
|
|
|
|
/**
|
2019-05-13 18:33:30 +00:00
|
|
|
* Check if an auto save file exists for \a aFileName and takes the appropriate
|
2011-10-15 13:25:57 +00:00
|
|
|
* action depending on the user input.
|
|
|
|
* <p>
|
|
|
|
* If an auto save file exists for \a aFileName, the user is prompted if they wish
|
|
|
|
* to replace file \a aFileName with the auto saved file. If the user chooses to
|
|
|
|
* replace the file, the backup file of \a aFileName is removed, \a aFileName is
|
|
|
|
* renamed to the backup file name, and the auto save file is renamed to \a aFileName.
|
|
|
|
* If user chooses to keep the existing version of \a aFileName, the auto save file
|
|
|
|
* is removed.
|
|
|
|
* </p>
|
|
|
|
* @param aFileName A wxFileName object containing the file name to check.
|
|
|
|
*/
|
2019-03-18 12:22:33 +00:00
|
|
|
void CheckForAutoSaveFile( const wxFileName& aFileName );
|
2012-09-11 19:03:21 +00:00
|
|
|
|
|
|
|
/**
|
2019-05-13 18:33:30 +00:00
|
|
|
* Redraw the menus and what not in current language.
|
2012-09-11 19:03:21 +00:00
|
|
|
*/
|
Modular-Kicad milestone B), major portions:
*) Rework the set language support, simplify it by using KIWAY. Now any major
frame with a "change language" menu can change the language for all KIWAY_PLAYERs
in the whole KIWAY. Multiple KIWAYs are not supported yet.
*) Simplify "modal wxFrame" support, and add that support exclusively to
KIWAY_PLAYER where it is inherited by all derivatives. The function
KIWAY_PLAYER::ShowModal() is in the vtable and so is cross module capable.
*) Remove the requirements and assumptions that the wxFrame hierarchy always
had PCB_EDIT_FRAME and SCH_EDIT_FRAME as immediate parents of their viewers
and editors. This is no longer the case, nor required.
*) Use KIWAY::Player() everywhere to make KIWAY_PLAYERs, this registers the
KIWAY_PLAYER within the KIWAY and makes it very easy to find an open frame
quickly. It also gives control to the KIWAY as to frame hierarchical
relationships.
*) Change single_top to use the KIWAY for loading a KIFACE and instantiating
the single KIWAY_PLAYER, see bullet immediately above.
*) Add KIWAY::OnKiwayEnd() and call it from PGM_BASE at program termination, this
gives the KIFACEs a chance to save their final configuration dope to disk.
*) Add dedicated FRAME_T's for the modal frames, so m_Ident can be tested and
these modal frames are distinctly different than their non-modal equivalents.
KIWAY_PLAYER::IsModal() is !not! a valid test during the wxFrame's constructor,
so this is another important reason for having a dedicated FRAME_T for each
modal wxFrame.
On balance, more lines were deleted than were added to achieve all this.
2014-05-03 17:40:19 +00:00
|
|
|
virtual void ShowChangedLanguage();
|
2017-01-17 05:57:53 +00:00
|
|
|
|
2017-03-03 13:18:07 +00:00
|
|
|
/**
|
2018-05-14 17:34:18 +00:00
|
|
|
* Notification event that some of the common (suite-wide) settings have changed.
|
|
|
|
* Update menus, toolbars, local variables, etc.
|
2017-03-02 13:46:18 +00:00
|
|
|
*/
|
2018-05-14 17:34:18 +00:00
|
|
|
virtual void CommonSettingsChanged();
|
2017-01-17 05:57:53 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Post a menu event to the frame, which can be used to trigger actions
|
|
|
|
* bound to menu items.
|
|
|
|
*/
|
|
|
|
bool PostCommandMenuEvent( int evt_type );
|
2019-05-13 18:33:30 +00:00
|
|
|
|
|
|
|
const wxString& GetAboutTitle() const { return m_AboutTitle; }
|
2007-06-05 12:10:51 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2011-09-15 18:25:44 +00:00
|
|
|
/**
|
2011-09-30 18:15:37 +00:00
|
|
|
* Specialization of the wxAuiPaneInfo class for KiCad panels.
|
2011-09-15 18:25:44 +00:00
|
|
|
*
|
|
|
|
* Documentation for wxAui is poor at this time. The following notes spring from errors made in
|
2011-09-30 18:15:37 +00:00
|
|
|
* previous KiCad implementations:
|
2011-09-15 18:25:44 +00:00
|
|
|
*
|
|
|
|
* wxAuiPaneInfo.ToolbarPane() and .Defaults() are used to clear and then prepare the objects so
|
|
|
|
* only use them once at the beginning of configuration..
|
|
|
|
*
|
|
|
|
* Panels are organized in layers, from 0 (close to the center) and increasing outward. Note
|
|
|
|
* that for ToolbarPanes, layer 0 considered a special default value, and ToolbarPanes on
|
|
|
|
* layer 0 are pushed to layer 10 automatically. Use Layer 1 for the inner layer as a work-
|
|
|
|
* around.
|
|
|
|
*
|
|
|
|
* Each panel has rows, starting at 0. Each row has positions starting at 0. Each item in a panel
|
|
|
|
* can have it's row and position set.
|
|
|
|
*
|
2011-11-07 19:04:24 +00:00
|
|
|
* Eventually panels will be movable. Each initialization function sets up the panel for this,
|
2011-09-15 18:25:44 +00:00
|
|
|
* then after a //==// break has additional calls to anchor toolbars in a way that matches
|
|
|
|
* present functionality.
|
|
|
|
*/
|
2018-08-11 16:04:46 +00:00
|
|
|
class EDA_PANE : public wxAuiPaneInfo
|
2011-09-15 18:25:44 +00:00
|
|
|
{
|
|
|
|
public:
|
2018-08-11 16:04:46 +00:00
|
|
|
EDA_PANE()
|
|
|
|
{
|
|
|
|
Gripper( false );
|
|
|
|
CloseButton( false );
|
|
|
|
PaneBorder( false );
|
|
|
|
}
|
2011-09-15 18:25:44 +00:00
|
|
|
|
|
|
|
/**
|
2018-08-11 16:04:46 +00:00
|
|
|
* Turn *this to a horizontal toolbar for KiCad.
|
2011-09-15 18:25:44 +00:00
|
|
|
*/
|
2018-08-11 16:04:46 +00:00
|
|
|
EDA_PANE& HToolbar()
|
2011-09-15 18:25:44 +00:00
|
|
|
{
|
2018-08-11 16:04:46 +00:00
|
|
|
SetFlag( optionToolbar, true );
|
|
|
|
CaptionVisible( false );
|
|
|
|
TopDockable().BottomDockable();
|
2011-09-15 18:25:44 +00:00
|
|
|
DockFixed( true );
|
|
|
|
Movable( false );
|
2018-08-11 16:04:46 +00:00
|
|
|
Resizable( true ); // expand to fit available space
|
2011-09-15 18:25:44 +00:00
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2018-08-11 16:04:46 +00:00
|
|
|
* Turn *this into a vertical toolbar for KiCad.
|
2011-09-15 18:25:44 +00:00
|
|
|
*/
|
2018-08-11 16:04:46 +00:00
|
|
|
EDA_PANE& VToolbar()
|
2011-09-15 18:25:44 +00:00
|
|
|
{
|
2018-08-11 16:04:46 +00:00
|
|
|
SetFlag( optionToolbar, true );
|
|
|
|
CaptionVisible( false );
|
|
|
|
LeftDockable().RightDockable();
|
2011-09-15 18:25:44 +00:00
|
|
|
DockFixed( true );
|
|
|
|
Movable( false );
|
2018-08-11 16:04:46 +00:00
|
|
|
Resizable( true ); // expand to fit available space
|
2011-09-15 18:25:44 +00:00
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2018-08-11 16:04:46 +00:00
|
|
|
* Turn *this into a captioned palette suitable for a symbol tree, layers manager, etc.
|
2011-09-15 18:25:44 +00:00
|
|
|
*/
|
2018-08-11 16:04:46 +00:00
|
|
|
EDA_PANE& Palette()
|
2011-09-15 18:25:44 +00:00
|
|
|
{
|
2018-08-11 16:04:46 +00:00
|
|
|
CaptionVisible( true );
|
|
|
|
PaneBorder( true );
|
2011-09-15 18:25:44 +00:00
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2018-08-11 16:04:46 +00:00
|
|
|
* Turn *this into an undecorated pane suitable for a drawing canvas.
|
2011-09-15 18:25:44 +00:00
|
|
|
*/
|
2018-08-11 16:04:46 +00:00
|
|
|
EDA_PANE& Canvas()
|
2011-09-15 18:25:44 +00:00
|
|
|
{
|
2018-08-11 16:04:46 +00:00
|
|
|
CaptionVisible( false );
|
|
|
|
Layer( 0 );
|
|
|
|
PaneBorder( true );
|
|
|
|
Resizable( true ); // expand to fit available space
|
2011-09-15 18:25:44 +00:00
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2018-08-11 16:04:46 +00:00
|
|
|
* Turn *this into a messages pane for KiCad.
|
2011-09-15 18:25:44 +00:00
|
|
|
*/
|
2018-08-11 16:04:46 +00:00
|
|
|
EDA_PANE& Messages()
|
2011-09-15 18:25:44 +00:00
|
|
|
{
|
|
|
|
CaptionVisible( false );
|
2018-08-11 16:04:46 +00:00
|
|
|
BottomDockable( true );
|
|
|
|
DockFixed( true );
|
|
|
|
Movable( false );
|
|
|
|
Resizable( true ); // expand to fit available space
|
2011-09-15 18:25:44 +00:00
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2012-01-09 17:24:01 +00:00
|
|
|
#endif // WXSTRUCT_H_
|