Move bitmap2cmp and pcb_calculator to tool framework.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/1939 Fixes https://gitlab.com/kicad/code/kicad/-/issues/7561
This commit is contained in:
parent
d8debfa0ee
commit
75e78f9088
|
@ -11,11 +11,12 @@ include_directories( ${INC_AFTER} )
|
||||||
|
|
||||||
set( BITMAP2COMPONENT_SRCS
|
set( BITMAP2COMPONENT_SRCS
|
||||||
${CMAKE_SOURCE_DIR}/common/single_top.cpp
|
${CMAKE_SOURCE_DIR}/common/single_top.cpp
|
||||||
|
bitmap2cmp_control.cpp
|
||||||
bitmap2cmp_main.cpp
|
bitmap2cmp_main.cpp
|
||||||
bitmap2cmp_settings.cpp
|
bitmap2cmp_settings.cpp
|
||||||
bitmap2component.cpp
|
bitmap2component.cpp
|
||||||
bitmap2cmp_panel_base.cpp
|
bitmap2cmp_panel_base.cpp
|
||||||
bitmap2cmp_frame.cpp
|
bitmap2cmp_frame.cpp
|
||||||
bitmap2cmp_panel.cpp
|
bitmap2cmp_panel.cpp
|
||||||
bitmap2cmp_panel_base.cpp
|
bitmap2cmp_panel_base.cpp
|
||||||
../common/env_vars.cpp # needed on MSW to avoid a link issue (a symbol not found)
|
../common/env_vars.cpp # needed on MSW to avoid a link issue (a symbol not found)
|
||||||
|
|
|
@ -0,0 +1,62 @@
|
||||||
|
/*
|
||||||
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
|
*
|
||||||
|
* Copyright (C) 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
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <kiway.h>
|
||||||
|
#include <tool/tool_manager.h>
|
||||||
|
#include <tool/actions.h>
|
||||||
|
#include <bitmap2cmp_frame.h>
|
||||||
|
#include <bitmap2cmp_control.h>
|
||||||
|
|
||||||
|
|
||||||
|
bool BITMAP2CMP_CONTROL::Init()
|
||||||
|
{
|
||||||
|
Reset( MODEL_RELOAD );
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void BITMAP2CMP_CONTROL::Reset( RESET_REASON aReason )
|
||||||
|
{
|
||||||
|
m_frame = getEditFrame<BITMAP2CMP_FRAME>();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int BITMAP2CMP_CONTROL::Open( const TOOL_EVENT& aEvent )
|
||||||
|
{
|
||||||
|
m_frame->OnLoadFile();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int BITMAP2CMP_CONTROL::Close( const TOOL_EVENT& aEvent )
|
||||||
|
{
|
||||||
|
m_frame->Close();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void BITMAP2CMP_CONTROL::setTransitions()
|
||||||
|
{
|
||||||
|
Go( &BITMAP2CMP_CONTROL::Open, ACTIONS::open.MakeEvent() );
|
||||||
|
Go( &BITMAP2CMP_CONTROL::Close, ACTIONS::quit.MakeEvent() );
|
||||||
|
}
|
|
@ -0,0 +1,64 @@
|
||||||
|
/*
|
||||||
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
|
*
|
||||||
|
* Copyright (C) 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 BITMAP2CMP_CONTROL_H
|
||||||
|
#define BITMAP2CMP_CONTROL_H
|
||||||
|
|
||||||
|
#include <tool/tool_interactive.h>
|
||||||
|
|
||||||
|
class BITMAP2CMP_FRAME;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle actions for the various symbol editor and viewers.
|
||||||
|
*/
|
||||||
|
class BITMAP2CMP_CONTROL : public wxEvtHandler, public TOOL_INTERACTIVE
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
BITMAP2CMP_CONTROL() :
|
||||||
|
TOOL_INTERACTIVE( "bitmap2cmp.Control" ),
|
||||||
|
m_frame( nullptr )
|
||||||
|
{ }
|
||||||
|
|
||||||
|
virtual ~BITMAP2CMP_CONTROL() { }
|
||||||
|
|
||||||
|
/// @copydoc TOOL_INTERACTIVE::Init()
|
||||||
|
bool Init() override;
|
||||||
|
|
||||||
|
/// @copydoc TOOL_INTERACTIVE::Reset()
|
||||||
|
void Reset( RESET_REASON aReason ) override;
|
||||||
|
|
||||||
|
int Open( const TOOL_EVENT& aEvent );
|
||||||
|
int Close( const TOOL_EVENT& aEvent );
|
||||||
|
|
||||||
|
private:
|
||||||
|
///< Set up handlers for various events.
|
||||||
|
void setTransitions() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
BITMAP2CMP_FRAME* m_frame;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif // BITMAP2CMP_CONTROL_H
|
|
@ -31,7 +31,14 @@
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <kiface_base.h>
|
#include <kiface_base.h>
|
||||||
#include <pgm_base.h>
|
#include <pgm_base.h>
|
||||||
|
#include <widgets/wx_menubar.h>
|
||||||
|
#include <menus_helpers.h>
|
||||||
#include <wildcards_and_files_ext.h>
|
#include <wildcards_and_files_ext.h>
|
||||||
|
#include <tool/tool_manager.h>
|
||||||
|
#include <tool/tool_dispatcher.h>
|
||||||
|
#include <tool/common_control.h>
|
||||||
|
#include <bitmap2cmp_control.h>
|
||||||
|
#include <tool/actions.h>
|
||||||
|
|
||||||
#include <wx/filedlg.h>
|
#include <wx/filedlg.h>
|
||||||
#include <wx/msgdlg.h>
|
#include <wx/msgdlg.h>
|
||||||
|
@ -130,18 +137,14 @@ void IMAGE_SIZE::SetUnit( EDA_UNITS aUnit )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BEGIN_EVENT_TABLE( BITMAP2CMP_FRAME, KIWAY_PLAYER )
|
|
||||||
EVT_MENU( wxID_EXIT, BITMAP2CMP_FRAME::OnExit )
|
|
||||||
EVT_MENU( wxID_OPEN, BITMAP2CMP_FRAME::OnLoadFile )
|
|
||||||
END_EVENT_TABLE()
|
|
||||||
|
|
||||||
|
|
||||||
BITMAP2CMP_FRAME::BITMAP2CMP_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
BITMAP2CMP_FRAME::BITMAP2CMP_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||||
KIWAY_PLAYER( aKiway, aParent, FRAME_BM2CMP, _( "Image Converter" ), wxDefaultPosition,
|
KIWAY_PLAYER( aKiway, aParent, FRAME_BM2CMP, _( "Image Converter" ), wxDefaultPosition,
|
||||||
wxDefaultSize, wxDEFAULT_FRAME_STYLE, wxT( "bitmap2cmp" ), unityScale ),
|
wxDefaultSize, wxDEFAULT_FRAME_STYLE, wxT( "bitmap2cmp" ), unityScale ),
|
||||||
m_panel( nullptr ),
|
m_panel( nullptr ),
|
||||||
m_statusBar( nullptr )
|
m_statusBar( nullptr )
|
||||||
{
|
{
|
||||||
|
m_aboutTitle = _HKI( "KiCad Image Converter" );
|
||||||
|
|
||||||
// Give an icon
|
// Give an icon
|
||||||
wxIcon icon;
|
wxIcon icon;
|
||||||
wxIconBundle icon_bundle;
|
wxIconBundle icon_bundle;
|
||||||
|
@ -163,10 +166,20 @@ BITMAP2CMP_FRAME::BITMAP2CMP_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||||
|
|
||||||
m_statusBar = this->CreateStatusBar( 1, wxSTB_SIZEGRIP, wxID_ANY );
|
m_statusBar = this->CreateStatusBar( 1, wxSTB_SIZEGRIP, wxID_ANY );
|
||||||
|
|
||||||
ReCreateMenuBar();
|
|
||||||
|
|
||||||
LoadSettings( config() );
|
LoadSettings( config() );
|
||||||
|
|
||||||
|
m_toolManager = new TOOL_MANAGER;
|
||||||
|
m_toolManager->SetEnvironment( nullptr, nullptr, nullptr, config(), this );
|
||||||
|
|
||||||
|
m_toolDispatcher = new TOOL_DISPATCHER( m_toolManager );
|
||||||
|
|
||||||
|
// Register tools
|
||||||
|
m_toolManager->RegisterTool( new COMMON_CONTROL );
|
||||||
|
m_toolManager->RegisterTool( new BITMAP2CMP_CONTROL );
|
||||||
|
m_toolManager->InitTools();
|
||||||
|
|
||||||
|
ReCreateMenuBar();
|
||||||
|
|
||||||
GetSizer()->SetSizeHints( this );
|
GetSizer()->SetSizeHints( this );
|
||||||
|
|
||||||
SetSize( m_framePos.x, m_framePos.y, m_frameSize.x, m_frameSize.y );
|
SetSize( m_framePos.x, m_framePos.y, m_frameSize.x, m_frameSize.y );
|
||||||
|
@ -195,41 +208,95 @@ wxWindow* BITMAP2CMP_FRAME::GetToolCanvas() const
|
||||||
|
|
||||||
void BITMAP2CMP_FRAME::doReCreateMenuBar()
|
void BITMAP2CMP_FRAME::doReCreateMenuBar()
|
||||||
{
|
{
|
||||||
// wxWidgets handles the Mac Application menu behind the scenes, but that means
|
COMMON_CONTROL* tool = m_toolManager->GetTool<COMMON_CONTROL>();
|
||||||
|
EDA_BASE_FRAME* base_frame = dynamic_cast<EDA_BASE_FRAME*>( this );
|
||||||
|
|
||||||
|
// base_frame == nullptr should not happen, but it makes Coverity happy
|
||||||
|
wxCHECK( base_frame, /* void */ );
|
||||||
|
|
||||||
|
// wxWidgets handles the OSX Application menu behind the scenes, but that means
|
||||||
// we always have to start from scratch with a new wxMenuBar.
|
// we always have to start from scratch with a new wxMenuBar.
|
||||||
wxMenuBar* oldMenuBar = GetMenuBar();
|
wxMenuBar* oldMenuBar = base_frame->GetMenuBar();
|
||||||
wxMenuBar* menuBar = new wxMenuBar();
|
WX_MENUBAR* menuBar = new WX_MENUBAR();
|
||||||
|
|
||||||
wxMenu* fileMenu = new wxMenu;
|
//-- File menu -----------------------------------------------------------
|
||||||
|
//
|
||||||
|
ACTION_MENU* fileMenu = new ACTION_MENU( false, tool );
|
||||||
|
|
||||||
wxMenuItem* item = new wxMenuItem( fileMenu, wxID_OPEN, _( "Open..." ) + wxT( "\tCtrl+O" ),
|
fileMenu->Add( ACTIONS::open );
|
||||||
_( "Load source image" ) );
|
|
||||||
|
|
||||||
fileMenu->Append( item );
|
|
||||||
|
|
||||||
#ifndef __WXMAC__
|
|
||||||
// Mac moves Quit to the App menu so we don't need a separator on Mac
|
|
||||||
fileMenu->AppendSeparator();
|
fileMenu->AppendSeparator();
|
||||||
#endif
|
fileMenu->AddQuit( _( "Image Converter" ) );
|
||||||
|
|
||||||
item = new wxMenuItem( fileMenu, wxID_EXIT, _( "Quit" ) + wxT( "\tCtrl+Q" ),
|
//-- Preferences menu -----------------------------------------------
|
||||||
_( "Quit Image Converter" ) );
|
//
|
||||||
|
ACTION_MENU* prefsMenu = new ACTION_MENU( false, tool );
|
||||||
|
|
||||||
if( Pgm().GetCommonSettings()->m_Appearance.use_icons_in_menus )
|
// We can't use ACTIONS::showPreferences yet because wxWidgets moves this on
|
||||||
item->SetBitmap( KiBitmap( BITMAPS::exit ) );
|
// Mac, and it needs the wxID_PREFERENCES id to find it.
|
||||||
|
prefsMenu->Add( _( "Preferences..." ) + "\tCtrl+,",
|
||||||
|
_( "Show preferences for all open tools" ),
|
||||||
|
wxID_PREFERENCES,
|
||||||
|
BITMAPS::preference );
|
||||||
|
|
||||||
fileMenu->Append( item );
|
prefsMenu->AppendSeparator();
|
||||||
|
AddMenuLanguageList( prefsMenu, tool );
|
||||||
|
|
||||||
|
|
||||||
|
//-- Menubar -------------------------------------------------------------
|
||||||
|
//
|
||||||
menuBar->Append( fileMenu, _( "&File" ) );
|
menuBar->Append( fileMenu, _( "&File" ) );
|
||||||
|
menuBar->Append( prefsMenu, _( "&Preferences" ) );
|
||||||
|
base_frame->AddStandardHelpMenu( menuBar );
|
||||||
|
|
||||||
SetMenuBar( menuBar );
|
base_frame->SetMenuBar( menuBar );
|
||||||
delete oldMenuBar;
|
delete oldMenuBar;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void BITMAP2CMP_FRAME::OnExit( wxCommandEvent& event )
|
void BITMAP2CMP_FRAME::ShowChangedLanguage()
|
||||||
{
|
{
|
||||||
Destroy();
|
EDA_BASE_FRAME::ShowChangedLanguage();
|
||||||
|
|
||||||
|
UpdateTitle();
|
||||||
|
|
||||||
|
SaveSettings( config() );
|
||||||
|
IMAGE_SIZE imageSizeX = m_panel->GetOutputSizeX();
|
||||||
|
IMAGE_SIZE imageSizeY = m_panel->GetOutputSizeY();
|
||||||
|
Freeze();
|
||||||
|
|
||||||
|
wxSizer* mainSizer = m_panel->GetContainingSizer();
|
||||||
|
mainSizer->Detach( m_panel );
|
||||||
|
m_panel->Destroy();
|
||||||
|
|
||||||
|
m_panel = new BITMAP2CMP_PANEL( this );
|
||||||
|
mainSizer->Add( m_panel, 1, wxEXPAND, 5 );
|
||||||
|
Layout();
|
||||||
|
|
||||||
|
if( !m_bitmapFileName.IsEmpty() )
|
||||||
|
OpenProjectFiles( std::vector<wxString>( 1, m_bitmapFileName ) );
|
||||||
|
|
||||||
|
LoadSettings( config() );
|
||||||
|
m_panel->SetOutputSize( imageSizeX, imageSizeY );
|
||||||
|
|
||||||
|
Thaw();
|
||||||
|
Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void BITMAP2CMP_FRAME::UpdateTitle()
|
||||||
|
{
|
||||||
|
wxString title;
|
||||||
|
|
||||||
|
if( !m_bitmapFileName.IsEmpty() )
|
||||||
|
{
|
||||||
|
wxFileName filename( m_bitmapFileName );
|
||||||
|
title = filename.GetFullName() + wxT( " \u2014 " );
|
||||||
|
}
|
||||||
|
|
||||||
|
title += _( "Image Converter" );
|
||||||
|
|
||||||
|
SetTitle( title );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -263,7 +330,7 @@ void BITMAP2CMP_FRAME::SaveSettings( APP_SETTINGS_BASE* aCfg )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void BITMAP2CMP_FRAME::OnLoadFile( wxCommandEvent& event )
|
void BITMAP2CMP_FRAME::OnLoadFile()
|
||||||
{
|
{
|
||||||
wxFileName fn( m_bitmapFileName );
|
wxFileName fn( m_bitmapFileName );
|
||||||
wxString path = fn.GetPath();
|
wxString path = fn.GetPath();
|
||||||
|
@ -288,6 +355,7 @@ void BITMAP2CMP_FRAME::OnLoadFile( wxCommandEvent& event )
|
||||||
fn = fullFilename;
|
fn = fullFilename;
|
||||||
m_mruPath = fn.GetPath();
|
m_mruPath = fn.GetPath();
|
||||||
SetStatusText( fullFilename );
|
SetStatusText( fullFilename );
|
||||||
|
UpdateTitle();
|
||||||
Refresh();
|
Refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,59 +31,6 @@
|
||||||
|
|
||||||
class BITMAP2CMP_PANEL;
|
class BITMAP2CMP_PANEL;
|
||||||
|
|
||||||
class IMAGE_SIZE
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
IMAGE_SIZE();
|
|
||||||
|
|
||||||
// Set the unit used for m_outputSize, and convert the old m_outputSize value
|
|
||||||
// to the value in new unit
|
|
||||||
void SetUnit( EDA_UNITS aUnit );
|
|
||||||
|
|
||||||
// Accessors:
|
|
||||||
void SetOriginalDPI( int aDPI )
|
|
||||||
{
|
|
||||||
m_originalDPI = aDPI;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SetOriginalSizePixels( int aPixels )
|
|
||||||
{
|
|
||||||
m_originalSizePixels = aPixels;
|
|
||||||
}
|
|
||||||
|
|
||||||
double GetOutputSize()
|
|
||||||
{
|
|
||||||
return m_outputSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SetOutputSize( double aSize, EDA_UNITS aUnit )
|
|
||||||
{
|
|
||||||
m_unit = aUnit;
|
|
||||||
m_outputSize = aSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
int GetOriginalSizePixels()
|
|
||||||
{
|
|
||||||
return m_originalSizePixels;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set the m_outputSize value from the m_originalSizePixels and the selected unit
|
|
||||||
void SetOutputSizeFromInitialImageSize();
|
|
||||||
|
|
||||||
/** @return the pixels per inch value to build the output image.
|
|
||||||
* It is used by potrace to build the polygonal image
|
|
||||||
*/
|
|
||||||
int GetOutputDPI();
|
|
||||||
|
|
||||||
private:
|
|
||||||
EDA_UNITS m_unit; // The units for m_outputSize (mm, inch, dpi)
|
|
||||||
double m_outputSize; // The size in m_unit of the output image, depending on
|
|
||||||
// the user settings. Set to the initial image size
|
|
||||||
int m_originalDPI; // The image DPI if specified in file, or 0 if unknown
|
|
||||||
int m_originalSizePixels; // The original image size read from file, in pixels
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
class BITMAP2CMP_FRAME : public KIWAY_PLAYER
|
class BITMAP2CMP_FRAME : public KIWAY_PLAYER
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -94,7 +41,7 @@ public:
|
||||||
bool OpenProjectFiles( const std::vector<wxString>& aFilenames, int aCtl = 0 ) override;
|
bool OpenProjectFiles( const std::vector<wxString>& aFilenames, int aCtl = 0 ) override;
|
||||||
|
|
||||||
void OnExit( wxCommandEvent& event );
|
void OnExit( wxCommandEvent& event );
|
||||||
void OnLoadFile( wxCommandEvent& event );
|
void OnLoadFile();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generate a schematic library which contains one component:
|
* Generate a schematic library which contains one component:
|
||||||
|
@ -117,13 +64,14 @@ public:
|
||||||
*/
|
*/
|
||||||
void ExportLogo();
|
void ExportLogo();
|
||||||
|
|
||||||
|
void UpdateTitle();
|
||||||
|
void ShowChangedLanguage() override;
|
||||||
|
|
||||||
void LoadSettings( APP_SETTINGS_BASE* aCfg ) override;
|
void LoadSettings( APP_SETTINGS_BASE* aCfg ) override;
|
||||||
void SaveSettings( APP_SETTINGS_BASE* aCfg ) override;
|
void SaveSettings( APP_SETTINGS_BASE* aCfg ) override;
|
||||||
|
|
||||||
wxWindow* GetToolCanvas() const override;
|
wxWindow* GetToolCanvas() const override;
|
||||||
|
|
||||||
DECLARE_EVENT_TABLE()
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void doReCreateMenuBar() override;
|
void doReCreateMenuBar() override;
|
||||||
|
|
||||||
|
@ -134,4 +82,5 @@ private:
|
||||||
wxString m_bitmapFileName;
|
wxString m_bitmapFileName;
|
||||||
wxString m_convertedFileName;
|
wxString m_convertedFileName;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif// BITMOP2CMP_GUI_H_
|
#endif// BITMOP2CMP_GUI_H_
|
||||||
|
|
|
@ -44,7 +44,8 @@
|
||||||
|
|
||||||
BITMAP2CMP_PANEL::BITMAP2CMP_PANEL( BITMAP2CMP_FRAME* aParent ) :
|
BITMAP2CMP_PANEL::BITMAP2CMP_PANEL( BITMAP2CMP_FRAME* aParent ) :
|
||||||
BITMAP2CMP_PANEL_BASE( aParent ),
|
BITMAP2CMP_PANEL_BASE( aParent ),
|
||||||
m_parentFrame( aParent )
|
m_parentFrame( aParent ), m_negative( false ),
|
||||||
|
m_aspectRatio( 1.0 )
|
||||||
{
|
{
|
||||||
for( wxString unit : { _( "mm" ), _( "Inch" ), _( "DPI" ) } )
|
for( wxString unit : { _( "mm" ), _( "Inch" ), _( "DPI" ) } )
|
||||||
m_PixelUnit->Append( unit );
|
m_PixelUnit->Append( unit );
|
||||||
|
@ -84,10 +85,10 @@ void BITMAP2CMP_PANEL::LoadSettings( BITMAP2CMP_SETTINGS* cfg )
|
||||||
|
|
||||||
m_sliderThreshold->SetValue( cfg->m_Threshold );
|
m_sliderThreshold->SetValue( cfg->m_Threshold );
|
||||||
|
|
||||||
m_Negative = cfg->m_Negative;
|
m_negative = cfg->m_Negative;
|
||||||
m_checkNegative->SetValue( cfg->m_Negative );
|
m_checkNegative->SetValue( cfg->m_Negative );
|
||||||
|
|
||||||
m_AspectRatio = 1.0;
|
m_aspectRatio = 1.0;
|
||||||
m_aspectRatioCheckbox->SetValue( true );
|
m_aspectRatioCheckbox->SetValue( true );
|
||||||
|
|
||||||
int format = cfg->m_LastFormat;
|
int format = cfg->m_LastFormat;
|
||||||
|
@ -177,7 +178,7 @@ void BITMAP2CMP_PANEL::OnPaintBW( wxPaintEvent& event )
|
||||||
|
|
||||||
void BITMAP2CMP_PANEL::OnLoadFile( wxCommandEvent& event )
|
void BITMAP2CMP_PANEL::OnLoadFile( wxCommandEvent& event )
|
||||||
{
|
{
|
||||||
m_parentFrame->OnLoadFile( event );
|
m_parentFrame->OnLoadFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -217,7 +218,7 @@ bool BITMAP2CMP_PANEL::OpenProjectFiles( const std::vector<wxString>& aFileSet,
|
||||||
|
|
||||||
int h = m_Pict_Bitmap.GetHeight();
|
int h = m_Pict_Bitmap.GetHeight();
|
||||||
int w = m_Pict_Bitmap.GetWidth();
|
int w = m_Pict_Bitmap.GetWidth();
|
||||||
m_AspectRatio = (double) w / h;
|
m_aspectRatio = (double) w / h;
|
||||||
|
|
||||||
m_outputSizeX.SetOriginalDPI( imageDPIx );
|
m_outputSizeX.SetOriginalDPI( imageDPIx );
|
||||||
m_outputSizeX.SetOriginalSizePixels( w );
|
m_outputSizeX.SetOriginalSizePixels( w );
|
||||||
|
@ -253,7 +254,7 @@ bool BITMAP2CMP_PANEL::OpenProjectFiles( const std::vector<wxString>& aFileSet,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( m_Negative )
|
if( m_negative )
|
||||||
NegateGreyscaleImage( );
|
NegateGreyscaleImage( );
|
||||||
|
|
||||||
m_Greyscale_Bitmap = wxBitmap( m_Greyscale_Image );
|
m_Greyscale_Bitmap = wxBitmap( m_Greyscale_Image );
|
||||||
|
@ -326,7 +327,7 @@ void BITMAP2CMP_PANEL::OnSizeChangeX( wxCommandEvent& event )
|
||||||
{
|
{
|
||||||
if( m_aspectRatioCheckbox->GetValue() )
|
if( m_aspectRatioCheckbox->GetValue() )
|
||||||
{
|
{
|
||||||
double calculatedY = new_size / m_AspectRatio;
|
double calculatedY = new_size / m_aspectRatio;
|
||||||
|
|
||||||
if( getUnitFromSelection() == EDA_UNITS::UNSCALED )
|
if( getUnitFromSelection() == EDA_UNITS::UNSCALED )
|
||||||
{
|
{
|
||||||
|
@ -355,7 +356,7 @@ void BITMAP2CMP_PANEL::OnSizeChangeY( wxCommandEvent& event )
|
||||||
{
|
{
|
||||||
if( m_aspectRatioCheckbox->GetValue() )
|
if( m_aspectRatioCheckbox->GetValue() )
|
||||||
{
|
{
|
||||||
double calculatedX = new_size * m_AspectRatio;
|
double calculatedX = new_size * m_aspectRatio;
|
||||||
|
|
||||||
if( getUnitFromSelection() == EDA_UNITS::UNSCALED )
|
if( getUnitFromSelection() == EDA_UNITS::UNSCALED )
|
||||||
{
|
{
|
||||||
|
@ -387,6 +388,17 @@ void BITMAP2CMP_PANEL::OnSizeUnitChange( wxCommandEvent& event )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void BITMAP2CMP_PANEL::SetOutputSize( const IMAGE_SIZE& aSizeX, const IMAGE_SIZE& aSizeY )
|
||||||
|
{
|
||||||
|
m_outputSizeX = aSizeX;
|
||||||
|
m_outputSizeY = aSizeY;
|
||||||
|
updateImageInfo();
|
||||||
|
|
||||||
|
m_UnitSizeX->ChangeValue( FormatOutputSize( m_outputSizeX.GetOutputSize() ) );
|
||||||
|
m_UnitSizeY->ChangeValue( FormatOutputSize( m_outputSizeY.GetOutputSize() ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void BITMAP2CMP_PANEL::ToggleAspectRatioLock( wxCommandEvent& event )
|
void BITMAP2CMP_PANEL::ToggleAspectRatioLock( wxCommandEvent& event )
|
||||||
{
|
{
|
||||||
if( m_aspectRatioCheckbox->GetValue() )
|
if( m_aspectRatioCheckbox->GetValue() )
|
||||||
|
@ -447,13 +459,13 @@ void BITMAP2CMP_PANEL::NegateGreyscaleImage( )
|
||||||
|
|
||||||
void BITMAP2CMP_PANEL::OnNegativeClicked( wxCommandEvent& )
|
void BITMAP2CMP_PANEL::OnNegativeClicked( wxCommandEvent& )
|
||||||
{
|
{
|
||||||
if( m_checkNegative->GetValue() != m_Negative )
|
if( m_checkNegative->GetValue() != m_negative )
|
||||||
{
|
{
|
||||||
NegateGreyscaleImage();
|
NegateGreyscaleImage();
|
||||||
|
|
||||||
m_Greyscale_Bitmap = wxBitmap( m_Greyscale_Image );
|
m_Greyscale_Bitmap = wxBitmap( m_Greyscale_Image );
|
||||||
Binarize( (double)m_sliderThreshold->GetValue()/m_sliderThreshold->GetMax() );
|
Binarize( (double)m_sliderThreshold->GetValue()/m_sliderThreshold->GetMax() );
|
||||||
m_Negative = m_checkNegative->GetValue();
|
m_negative = m_checkNegative->GetValue();
|
||||||
|
|
||||||
Refresh();
|
Refresh();
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,59 @@ class BITMAP2CMP_FRAME;
|
||||||
class BITMAP2CMP_SETTINGS;
|
class BITMAP2CMP_SETTINGS;
|
||||||
|
|
||||||
|
|
||||||
|
class IMAGE_SIZE
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
IMAGE_SIZE();
|
||||||
|
|
||||||
|
// Set the unit used for m_outputSize, and convert the old m_outputSize value
|
||||||
|
// to the value in new unit
|
||||||
|
void SetUnit( EDA_UNITS aUnit );
|
||||||
|
|
||||||
|
// Accessors:
|
||||||
|
void SetOriginalDPI( int aDPI )
|
||||||
|
{
|
||||||
|
m_originalDPI = aDPI;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetOriginalSizePixels( int aPixels )
|
||||||
|
{
|
||||||
|
m_originalSizePixels = aPixels;
|
||||||
|
}
|
||||||
|
|
||||||
|
double GetOutputSize()
|
||||||
|
{
|
||||||
|
return m_outputSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetOutputSize( double aSize, EDA_UNITS aUnit )
|
||||||
|
{
|
||||||
|
m_unit = aUnit;
|
||||||
|
m_outputSize = aSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
int GetOriginalSizePixels()
|
||||||
|
{
|
||||||
|
return m_originalSizePixels;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the m_outputSize value from the m_originalSizePixels and the selected unit
|
||||||
|
void SetOutputSizeFromInitialImageSize();
|
||||||
|
|
||||||
|
/** @return the pixels per inch value to build the output image.
|
||||||
|
* It is used by potrace to build the polygonal image
|
||||||
|
*/
|
||||||
|
int GetOutputDPI();
|
||||||
|
|
||||||
|
private:
|
||||||
|
EDA_UNITS m_unit; // The units for m_outputSize (mm, inch, dpi)
|
||||||
|
double m_outputSize; // The size in m_unit of the output image, depending on
|
||||||
|
// the user settings. Set to the initial image size
|
||||||
|
int m_originalDPI; // The image DPI if specified in file, or 0 if unknown
|
||||||
|
int m_originalSizePixels; // The original image size read from file, in pixels
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
class BITMAP2CMP_PANEL : public BITMAP2CMP_PANEL_BASE
|
class BITMAP2CMP_PANEL : public BITMAP2CMP_PANEL_BASE
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -46,6 +99,10 @@ public:
|
||||||
|
|
||||||
wxWindow* GetCurrentPage();
|
wxWindow* GetCurrentPage();
|
||||||
|
|
||||||
|
IMAGE_SIZE GetOutputSizeX() const { return m_outputSizeX; }
|
||||||
|
IMAGE_SIZE GetOutputSizeY() const { return m_outputSizeY; }
|
||||||
|
void SetOutputSize( const IMAGE_SIZE& aSizeX, const IMAGE_SIZE& aSizeY );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* generate a export data of the current bitmap.
|
* generate a export data of the current bitmap.
|
||||||
* @param aOutput is a string buffer to fill with data
|
* @param aOutput is a string buffer to fill with data
|
||||||
|
@ -86,15 +143,15 @@ private:
|
||||||
private:
|
private:
|
||||||
BITMAP2CMP_FRAME* m_parentFrame;
|
BITMAP2CMP_FRAME* m_parentFrame;
|
||||||
|
|
||||||
wxImage m_Pict_Image;
|
wxImage m_Pict_Image;
|
||||||
wxBitmap m_Pict_Bitmap;
|
wxBitmap m_Pict_Bitmap;
|
||||||
wxImage m_Greyscale_Image;
|
wxImage m_Greyscale_Image;
|
||||||
wxBitmap m_Greyscale_Bitmap;
|
wxBitmap m_Greyscale_Bitmap;
|
||||||
wxImage m_NB_Image;
|
wxImage m_NB_Image;
|
||||||
wxBitmap m_BN_Bitmap;
|
wxBitmap m_BN_Bitmap;
|
||||||
IMAGE_SIZE m_outputSizeX;
|
IMAGE_SIZE m_outputSizeX;
|
||||||
IMAGE_SIZE m_outputSizeY;
|
IMAGE_SIZE m_outputSizeY;
|
||||||
bool m_Negative;
|
bool m_negative;
|
||||||
double m_AspectRatio;
|
double m_aspectRatio;
|
||||||
};
|
};
|
||||||
#endif// BITMAP2CMP_PANEL
|
#endif// BITMAP2CMP_PANEL
|
||||||
|
|
|
@ -235,6 +235,17 @@ void ACTION_MENU::AddQuitOrClose( KIFACE_BASE* aKiface, wxString aAppname )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ACTION_MENU::AddQuit( const wxString& aAppname )
|
||||||
|
{
|
||||||
|
// Don't use ACTIONS::quit; wxWidgets moves this on OSX and expects to find it via
|
||||||
|
// wxID_EXIT
|
||||||
|
Add( _( "Quit" ) + wxS( "\tCtrl+Q" ),
|
||||||
|
wxString::Format( _( "Quit %s" ), aAppname ),
|
||||||
|
wxID_EXIT,
|
||||||
|
BITMAPS::exit );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void ACTION_MENU::Clear()
|
void ACTION_MENU::Clear()
|
||||||
{
|
{
|
||||||
m_titleDisplayed = false;
|
m_titleDisplayed = false;
|
||||||
|
|
|
@ -39,7 +39,8 @@ class SIMULATOR_CONTROL : public wxEvtHandler, public TOOL_INTERACTIVE
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SIMULATOR_CONTROL() :
|
SIMULATOR_CONTROL() :
|
||||||
TOOL_INTERACTIVE( "eeschema.SimulatorControl" ), m_simulatorFrame( nullptr ),
|
TOOL_INTERACTIVE( "eeschema.SimulatorControl" ),
|
||||||
|
m_simulatorFrame( nullptr ),
|
||||||
m_schematicFrame( nullptr )
|
m_schematicFrame( nullptr )
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
|
|
@ -121,13 +121,22 @@ public:
|
||||||
/**
|
/**
|
||||||
* Add either a standard Quit or Close item to the menu.
|
* Add either a standard Quit or Close item to the menu.
|
||||||
*
|
*
|
||||||
* If \a aKiface is NULL or in single-instance then quit (wxID_QUIT) is used, otherwise
|
* If \a aKiface is NULL or in single-instance then quit (wxID_EXIT) is used, otherwise
|
||||||
* close (wxID_CLOSE) is used.
|
* close (wxID_CLOSE) is used.
|
||||||
*
|
*
|
||||||
* @param aAppname is the application name to append to the tooltip.
|
* @param aAppname is the application name to append to the tooltip.
|
||||||
*/
|
*/
|
||||||
void AddQuitOrClose( KIFACE_BASE* aKiface, wxString aAppname = "" );
|
void AddQuitOrClose( KIFACE_BASE* aKiface, wxString aAppname = "" );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a standard Quit item to the menu.
|
||||||
|
*
|
||||||
|
* Emits the wxID_EXIT event.
|
||||||
|
*
|
||||||
|
* @param aAppname is the application name to append to the tooltip.
|
||||||
|
*/
|
||||||
|
void AddQuit( const wxString& aAppname = "" );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove all the entries from the menu (as well as its title).
|
* Remove all the entries from the menu (as well as its title).
|
||||||
*
|
*
|
||||||
|
|
|
@ -10,19 +10,20 @@ include_directories(
|
||||||
set( PCB_CALCULATOR_SRCS
|
set( PCB_CALCULATOR_SRCS
|
||||||
common_data.cpp
|
common_data.cpp
|
||||||
params_read_write.cpp
|
params_read_write.cpp
|
||||||
|
pcb_calculator_control.cpp
|
||||||
pcb_calculator_frame.cpp
|
pcb_calculator_frame.cpp
|
||||||
pcb_calculator_settings.cpp
|
pcb_calculator_settings.cpp
|
||||||
datafile_read_write.cpp
|
datafile_read_write.cpp
|
||||||
calculator_panels/panel_rf_attenuators.cpp
|
calculator_panels/panel_rf_attenuators.cpp
|
||||||
calculator_panels/panel_rf_attenuators_base.cpp
|
calculator_panels/panel_rf_attenuators_base.cpp
|
||||||
calculator_panels/panel_board_class.cpp
|
calculator_panels/panel_board_class.cpp
|
||||||
calculator_panels/panel_board_class_base.cpp
|
calculator_panels/panel_board_class_base.cpp
|
||||||
calculator_panels/panel_cable_size.cpp
|
calculator_panels/panel_cable_size.cpp
|
||||||
calculator_panels/panel_cable_size_base.cpp
|
calculator_panels/panel_cable_size_base.cpp
|
||||||
calculator_panels/panel_color_code.cpp
|
calculator_panels/panel_color_code.cpp
|
||||||
calculator_panels/panel_color_code_base.cpp
|
calculator_panels/panel_color_code_base.cpp
|
||||||
calculator_panels/panel_galvanic_corrosion.cpp
|
calculator_panels/panel_galvanic_corrosion.cpp
|
||||||
calculator_panels/panel_galvanic_corrosion_base.cpp
|
calculator_panels/panel_galvanic_corrosion_base.cpp
|
||||||
calculator_panels/panel_electrical_spacing.cpp
|
calculator_panels/panel_electrical_spacing.cpp
|
||||||
calculator_panels/panel_electrical_spacing_base.cpp
|
calculator_panels/panel_electrical_spacing_base.cpp
|
||||||
calculator_panels/iec60664.cpp
|
calculator_panels/iec60664.cpp
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
/*
|
||||||
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
|
*
|
||||||
|
* Copyright (C) 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
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <kiway.h>
|
||||||
|
#include <tool/tool_manager.h>
|
||||||
|
#include <tool/actions.h>
|
||||||
|
#include <pcb_calculator_frame.h>
|
||||||
|
#include <pcb_calculator_control.h>
|
||||||
|
|
||||||
|
|
||||||
|
bool PCB_CALCULATOR_CONTROL::Init()
|
||||||
|
{
|
||||||
|
Reset( MODEL_RELOAD );
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PCB_CALCULATOR_CONTROL::Reset( RESET_REASON aReason )
|
||||||
|
{
|
||||||
|
m_frame = getEditFrame<PCB_CALCULATOR_FRAME>();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int PCB_CALCULATOR_CONTROL::Close( const TOOL_EVENT& aEvent )
|
||||||
|
{
|
||||||
|
m_frame->Close();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PCB_CALCULATOR_CONTROL::setTransitions()
|
||||||
|
{
|
||||||
|
Go( &PCB_CALCULATOR_CONTROL::Close, ACTIONS::quit.MakeEvent() );
|
||||||
|
}
|
|
@ -0,0 +1,63 @@
|
||||||
|
/*
|
||||||
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
|
*
|
||||||
|
* Copyright (C) 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 PCB_CALCULATOR_CONTROL_H
|
||||||
|
#define PCB_CALCULATOR_CONTROL_H
|
||||||
|
|
||||||
|
#include "tool/tool_interactive.h"
|
||||||
|
|
||||||
|
class PCB_CALCULATOR_FRAME;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle actions for the various symbol editor and viewers.
|
||||||
|
*/
|
||||||
|
class PCB_CALCULATOR_CONTROL : public wxEvtHandler, public TOOL_INTERACTIVE
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
PCB_CALCULATOR_CONTROL() :
|
||||||
|
TOOL_INTERACTIVE( "pcb_calculator.Control" ),
|
||||||
|
m_frame( nullptr )
|
||||||
|
{ }
|
||||||
|
|
||||||
|
virtual ~PCB_CALCULATOR_CONTROL() { }
|
||||||
|
|
||||||
|
/// @copydoc TOOL_INTERACTIVE::Init()
|
||||||
|
bool Init() override;
|
||||||
|
|
||||||
|
/// @copydoc TOOL_INTERACTIVE::Reset()
|
||||||
|
void Reset( RESET_REASON aReason ) override;
|
||||||
|
|
||||||
|
int Close( const TOOL_EVENT& aEvent );
|
||||||
|
|
||||||
|
private:
|
||||||
|
///< Set up handlers for various events.
|
||||||
|
void setTransitions() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
PCB_CALCULATOR_FRAME* m_frame;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif // PCB_CALCULATOR_CONTROL_H
|
|
@ -27,9 +27,14 @@
|
||||||
#include <bitmap_store.h>
|
#include <bitmap_store.h>
|
||||||
#include <geometry/shape_poly_set.h>
|
#include <geometry/shape_poly_set.h>
|
||||||
#include <kiface_base.h>
|
#include <kiface_base.h>
|
||||||
|
#include <menus_helpers.h>
|
||||||
|
#include <tool/tool_manager.h>
|
||||||
|
#include <tool/tool_dispatcher.h>
|
||||||
|
#include <tool/common_control.h>
|
||||||
#include <attenuators/attenuator_classes.h>
|
#include <attenuators/attenuator_classes.h>
|
||||||
#include <pcb_calculator_frame.h>
|
#include <pcb_calculator_frame.h>
|
||||||
#include <pcb_calculator_settings.h>
|
#include <pcb_calculator_settings.h>
|
||||||
|
#include <pcb_calculator_control.h>
|
||||||
|
|
||||||
#include <calculator_panels/panel_rf_attenuators.h>
|
#include <calculator_panels/panel_rf_attenuators.h>
|
||||||
#include <calculator_panels/panel_board_class.h>
|
#include <calculator_panels/panel_board_class.h>
|
||||||
|
@ -44,6 +49,7 @@
|
||||||
#include <calculator_panels/panel_transline.h>
|
#include <calculator_panels/panel_transline.h>
|
||||||
#include <calculator_panels/panel_via_size.h>
|
#include <calculator_panels/panel_via_size.h>
|
||||||
#include <calculator_panels/panel_wavelength.h>
|
#include <calculator_panels/panel_wavelength.h>
|
||||||
|
#include "widgets/wx_menubar.h"
|
||||||
|
|
||||||
|
|
||||||
PCB_CALCULATOR_FRAME::PCB_CALCULATOR_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
PCB_CALCULATOR_FRAME::PCB_CALCULATOR_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||||
|
@ -53,6 +59,8 @@ PCB_CALCULATOR_FRAME::PCB_CALCULATOR_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||||
wxT( "calculator_tools" ), unityScale ),
|
wxT( "calculator_tools" ), unityScale ),
|
||||||
m_lastNotebookPage( -1 )
|
m_lastNotebookPage( -1 )
|
||||||
{
|
{
|
||||||
|
m_aboutTitle = _HKI( "KiCad Calculator Tools" );
|
||||||
|
|
||||||
SHAPE_POLY_SET dummy; // A ugly trick to force the linker to include
|
SHAPE_POLY_SET dummy; // A ugly trick to force the linker to include
|
||||||
// some methods in code and avoid link errors
|
// some methods in code and avoid link errors
|
||||||
|
|
||||||
|
@ -68,35 +76,7 @@ PCB_CALCULATOR_FRAME::PCB_CALCULATOR_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||||
Layout();
|
Layout();
|
||||||
Centre( wxBOTH );
|
Centre( wxBOTH );
|
||||||
|
|
||||||
m_treebook->AddPage( nullptr, _( "General system design" ) );
|
loadPages();
|
||||||
|
|
||||||
AddCalculator( new PANEL_REGULATOR( m_treebook ), _( "Regulators" ) );
|
|
||||||
|
|
||||||
m_treebook->AddPage( nullptr, _( "Power, current and isolation" ) );
|
|
||||||
|
|
||||||
AddCalculator( new PANEL_ELECTRICAL_SPACING( m_treebook ), _( "Electrical Spacing" ) );
|
|
||||||
AddCalculator( new PANEL_VIA_SIZE( m_treebook ), _( "Via Size" ) );
|
|
||||||
AddCalculator( new PANEL_TRACK_WIDTH( m_treebook ), _( "Track Width" ) );
|
|
||||||
AddCalculator( new PANEL_FUSING_CURRENT( m_treebook ), _( "Fusing Current" ) );
|
|
||||||
AddCalculator( new PANEL_CABLE_SIZE( m_treebook ), _( "Cable Size" ) );
|
|
||||||
|
|
||||||
m_treebook->AddPage( nullptr, _( "High speed" ) );
|
|
||||||
|
|
||||||
AddCalculator( new PANEL_WAVELENGTH( m_treebook ), _( "Wavelength" ) );
|
|
||||||
AddCalculator( new PANEL_RF_ATTENUATORS( m_treebook ), _( "RF Attenuators" ) );
|
|
||||||
AddCalculator( new PANEL_TRANSLINE( m_treebook ), _( "Transmission Lines") );
|
|
||||||
|
|
||||||
m_treebook->AddPage( nullptr, _( "Memo" ) );
|
|
||||||
|
|
||||||
AddCalculator( new PANEL_E_SERIES( m_treebook ), _( "E-Series" ) );
|
|
||||||
AddCalculator( new PANEL_COLOR_CODE( m_treebook ), _( "Color Code" ) );
|
|
||||||
AddCalculator( new PANEL_BOARD_CLASS( m_treebook ), _("Board Classes") );
|
|
||||||
AddCalculator( new PANEL_GALVANIC_CORROSION( m_treebook ), _( "Galvanic Corrosion" ) );
|
|
||||||
|
|
||||||
LoadSettings( config() );
|
|
||||||
|
|
||||||
if( PANEL_REGULATOR* regPanel = GetCalculator<PANEL_REGULATOR>() )
|
|
||||||
regPanel->ReadDataFile();
|
|
||||||
|
|
||||||
// Give an icon
|
// Give an icon
|
||||||
wxIcon icon;
|
wxIcon icon;
|
||||||
|
@ -111,6 +91,18 @@ PCB_CALCULATOR_FRAME::PCB_CALCULATOR_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||||
|
|
||||||
SetIcons( icon_bundle );
|
SetIcons( icon_bundle );
|
||||||
|
|
||||||
|
m_toolManager = new TOOL_MANAGER;
|
||||||
|
m_toolManager->SetEnvironment( nullptr, nullptr, nullptr, config(), this );
|
||||||
|
|
||||||
|
m_toolDispatcher = new TOOL_DISPATCHER( m_toolManager );
|
||||||
|
|
||||||
|
// Register tools
|
||||||
|
m_toolManager->RegisterTool( new COMMON_CONTROL );
|
||||||
|
m_toolManager->RegisterTool( new PCB_CALCULATOR_CONTROL );
|
||||||
|
m_toolManager->InitTools();
|
||||||
|
|
||||||
|
ReCreateMenuBar();
|
||||||
|
|
||||||
GetSizer()->SetSizeHints( this );
|
GetSizer()->SetSizeHints( this );
|
||||||
|
|
||||||
// Set previous size and position
|
// Set previous size and position
|
||||||
|
@ -144,6 +136,110 @@ PCB_CALCULATOR_FRAME::~PCB_CALCULATOR_FRAME()
|
||||||
this->Freeze();
|
this->Freeze();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PCB_CALCULATOR_FRAME::loadPages()
|
||||||
|
{
|
||||||
|
m_treebook->AddPage( nullptr, _( "General system design" ) );
|
||||||
|
|
||||||
|
AddCalculator( new PANEL_REGULATOR( m_treebook ), _( "Regulators" ) );
|
||||||
|
|
||||||
|
m_treebook->AddPage( nullptr, _( "Power, current and isolation" ) );
|
||||||
|
|
||||||
|
AddCalculator( new PANEL_ELECTRICAL_SPACING( m_treebook ), _( "Electrical Spacing" ) );
|
||||||
|
AddCalculator( new PANEL_VIA_SIZE( m_treebook ), _( "Via Size" ) );
|
||||||
|
AddCalculator( new PANEL_TRACK_WIDTH( m_treebook ), _( "Track Width" ) );
|
||||||
|
AddCalculator( new PANEL_FUSING_CURRENT( m_treebook ), _( "Fusing Current" ) );
|
||||||
|
AddCalculator( new PANEL_CABLE_SIZE( m_treebook ), _( "Cable Size" ) );
|
||||||
|
|
||||||
|
m_treebook->AddPage( nullptr, _( "High Speed" ) );
|
||||||
|
|
||||||
|
AddCalculator( new PANEL_WAVELENGTH( m_treebook ), _( "Wavelength" ) );
|
||||||
|
AddCalculator( new PANEL_RF_ATTENUATORS( m_treebook ), _( "RF Attenuators" ) );
|
||||||
|
AddCalculator( new PANEL_TRANSLINE( m_treebook ), _( "Transmission Lines") );
|
||||||
|
|
||||||
|
m_treebook->AddPage( nullptr, _( "Memo" ) );
|
||||||
|
|
||||||
|
AddCalculator( new PANEL_E_SERIES( m_treebook ), _( "E-Series" ) );
|
||||||
|
AddCalculator( new PANEL_COLOR_CODE( m_treebook ), _( "Color Code" ) );
|
||||||
|
AddCalculator( new PANEL_BOARD_CLASS( m_treebook ), _( "Board Classes" ) );
|
||||||
|
AddCalculator( new PANEL_GALVANIC_CORROSION( m_treebook ), _( "Galvanic Corrosion" ) );
|
||||||
|
|
||||||
|
LoadSettings( config() );
|
||||||
|
|
||||||
|
if( PANEL_REGULATOR* regPanel = GetCalculator<PANEL_REGULATOR>() )
|
||||||
|
regPanel->ReadDataFile();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PCB_CALCULATOR_FRAME::doReCreateMenuBar()
|
||||||
|
{
|
||||||
|
COMMON_CONTROL* tool = m_toolManager->GetTool<COMMON_CONTROL>();
|
||||||
|
EDA_BASE_FRAME* base_frame = dynamic_cast<EDA_BASE_FRAME*>( this );
|
||||||
|
|
||||||
|
// base_frame == nullptr should not happen, but it makes Coverity happy
|
||||||
|
wxCHECK( base_frame, /* void */ );
|
||||||
|
|
||||||
|
// wxWidgets handles the OSX Application menu behind the scenes, but that means
|
||||||
|
// we always have to start from scratch with a new wxMenuBar.
|
||||||
|
wxMenuBar* oldMenuBar = base_frame->GetMenuBar();
|
||||||
|
WX_MENUBAR* menuBar = new WX_MENUBAR();
|
||||||
|
|
||||||
|
//-- File menu -----------------------------------------------------------
|
||||||
|
//
|
||||||
|
ACTION_MENU* fileMenu = new ACTION_MENU( false, tool );
|
||||||
|
|
||||||
|
fileMenu->AddQuit( _( "Calculator Tools" ) );
|
||||||
|
|
||||||
|
//-- Preferences menu -----------------------------------------------
|
||||||
|
//
|
||||||
|
ACTION_MENU* prefsMenu = new ACTION_MENU( false, tool );
|
||||||
|
|
||||||
|
// We can't use ACTIONS::showPreferences yet because wxWidgets moves this on
|
||||||
|
// Mac, and it needs the wxID_PREFERENCES id to find it.
|
||||||
|
prefsMenu->Add( _( "Preferences..." ) + "\tCtrl+,",
|
||||||
|
_( "Show preferences for all open tools" ),
|
||||||
|
wxID_PREFERENCES,
|
||||||
|
BITMAPS::preference );
|
||||||
|
|
||||||
|
prefsMenu->AppendSeparator();
|
||||||
|
AddMenuLanguageList( prefsMenu, tool );
|
||||||
|
|
||||||
|
|
||||||
|
//-- Menubar -------------------------------------------------------------
|
||||||
|
//
|
||||||
|
menuBar->Append( fileMenu, _( "&File" ) );
|
||||||
|
menuBar->Append( prefsMenu, _( "&Preferences" ) );
|
||||||
|
base_frame->AddStandardHelpMenu( menuBar );
|
||||||
|
|
||||||
|
base_frame->SetMenuBar( menuBar );
|
||||||
|
delete oldMenuBar;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PCB_CALCULATOR_FRAME::ShowChangedLanguage()
|
||||||
|
{
|
||||||
|
EDA_BASE_FRAME::ShowChangedLanguage();
|
||||||
|
|
||||||
|
SetTitle( _( "Calculator Tools" ) );
|
||||||
|
|
||||||
|
SaveSettings( config() );
|
||||||
|
Freeze();
|
||||||
|
|
||||||
|
int page = m_treebook->GetSelection();
|
||||||
|
m_treebook->DeleteAllPages();
|
||||||
|
m_panels.clear();
|
||||||
|
|
||||||
|
loadPages();
|
||||||
|
Layout();
|
||||||
|
|
||||||
|
m_treebook->SetSelection( page );
|
||||||
|
LoadSettings( config() );
|
||||||
|
|
||||||
|
Thaw();
|
||||||
|
Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void PCB_CALCULATOR_FRAME::OnPageChanged ( wxTreebookEvent& aEvent )
|
void PCB_CALCULATOR_FRAME::OnPageChanged ( wxTreebookEvent& aEvent )
|
||||||
{
|
{
|
||||||
int page = aEvent.GetSelection();
|
int page = aEvent.GetSelection();
|
||||||
|
@ -152,11 +248,14 @@ void PCB_CALCULATOR_FRAME::OnPageChanged ( wxTreebookEvent& aEvent )
|
||||||
if ( m_treebook->GetPageParent( page ) == wxNOT_FOUND )
|
if ( m_treebook->GetPageParent( page ) == wxNOT_FOUND )
|
||||||
{
|
{
|
||||||
m_treebook->ExpandNode( page );
|
m_treebook->ExpandNode( page );
|
||||||
|
|
||||||
// Select the first child
|
// Select the first child
|
||||||
m_treebook->ChangeSelection( page + 1 );
|
if( page + 1 < m_treebook->GetPageCount() )
|
||||||
|
m_treebook->ChangeSelection( page + 1 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void PCB_CALCULATOR_FRAME::AddCalculator( CALCULATOR_PANEL *aPanel, const wxString& panelUIName )
|
void PCB_CALCULATOR_FRAME::AddCalculator( CALCULATOR_PANEL *aPanel, const wxString& panelUIName )
|
||||||
{
|
{
|
||||||
// Update internal structures
|
// Update internal structures
|
||||||
|
|
|
@ -63,6 +63,15 @@ public:
|
||||||
|
|
||||||
void AddCalculator( CALCULATOR_PANEL *aPanel, const wxString& panelUIName );
|
void AddCalculator( CALCULATOR_PANEL *aPanel, const wxString& panelUIName );
|
||||||
|
|
||||||
|
void ShowChangedLanguage() override;
|
||||||
|
|
||||||
|
// Config read-write, virtual from EDA_BASE_FRAME
|
||||||
|
void LoadSettings( APP_SETTINGS_BASE* aCfg ) override;
|
||||||
|
void SaveSettings( APP_SETTINGS_BASE* aCfg ) override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void doReCreateMenuBar() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Event handlers
|
// Event handlers
|
||||||
void OnClosePcbCalc( wxCloseEvent& event );
|
void OnClosePcbCalc( wxCloseEvent& event );
|
||||||
|
@ -71,9 +80,7 @@ private:
|
||||||
|
|
||||||
void onThemeChanged( wxSysColourChangedEvent& aEvent );
|
void onThemeChanged( wxSysColourChangedEvent& aEvent );
|
||||||
|
|
||||||
// Config read-write, virtual from EDA_BASE_FRAME
|
void loadPages();
|
||||||
void LoadSettings( APP_SETTINGS_BASE* aCfg ) override;
|
|
||||||
void SaveSettings( APP_SETTINGS_BASE* aCfg ) override;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
wxBoxSizer* m_mainSizer;
|
wxBoxSizer* m_mainSizer;
|
||||||
|
|
Loading…
Reference in New Issue