diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index 4f6b8454bf..a3483eaab6 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -415,6 +415,8 @@ set( COMMON_DLG_SRCS dialogs/panel_setup_severities.cpp dialogs/panel_text_variables.cpp dialogs/panel_text_variables_base.cpp + dialogs/panel_toolbar_customization.cpp + dialogs/panel_toolbar_customization_base.cpp ) if( KICAD_USE_SENTRY ) diff --git a/common/dialogs/panel_toolbar_customization.cpp b/common/dialogs/panel_toolbar_customization.cpp new file mode 100644 index 0000000000..e5c6f5b880 --- /dev/null +++ b/common/dialogs/panel_toolbar_customization.cpp @@ -0,0 +1,388 @@ +/* + * This program source code file is part of KICAD, a free EDA CAD application. + * + * Copyright The 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 <dialogs/panel_toolbar_customization.h> + +#include <bitmaps.h> +#include <settings/app_settings.h> +#include <tool/ui/toolbar_configuration.h> +#include <widgets/split_button.h> +#include <widgets/std_bitmap_button.h> + +#include <wx/listctrl.h> +#include <wx/menu.h> + +// Simple IDs for the split button menu +enum +{ + ID_SEPARATOR_MENU = ( wxID_HIGHEST + 5 ), + ID_SPACER_MENU, + ID_GROUP_MENU +}; + + +enum class TOOLBAR_TREE_ITEM_TYPE +{ + TOOL, + GROUP, + SPACER, + SEPARATOR +}; + +class TOOLBAR_TREE_ITEM_DATA : public wxTreeItemData +{ +public: + TOOLBAR_TREE_ITEM_DATA( TOOLBAR_TREE_ITEM_TYPE aType ) : + wxTreeItemData(), + m_name( "" ), + m_action( nullptr ), + m_type( aType ) + { + // Hard-code the name for the separator + if( aType == TOOLBAR_TREE_ITEM_TYPE::SEPARATOR ) + m_name = "separator"; + } + + void SetAction( TOOL_ACTION* aAction ) { m_action = aAction; } + TOOL_ACTION* GetAction() const { return m_action; } + + void SetName( std::string aName ) { m_name = aName; } + std::string GetName() const { return m_name; } + + TOOLBAR_TREE_ITEM_TYPE GetType() const { return m_type; } + +private: + std::string m_name; + TOOL_ACTION* m_action; + + TOOLBAR_TREE_ITEM_TYPE m_type; +}; + + +PANEL_TOOLBAR_CUSTOMIZATION::PANEL_TOOLBAR_CUSTOMIZATION( wxWindow* aParent, APP_SETTINGS_BASE* aCfg, + TOOLBAR_SETTINGS* aTbSettings, + std::vector<TOOL_ACTION*> aTools, + std::vector<ACTION_TOOLBAR_CONTROL*> aControls ) : + PANEL_TOOLBAR_CUSTOMIZATION_BASE( aParent ), + m_actionImageList( nullptr ), + m_appSettings( aCfg ), + m_tbSettings( aTbSettings ) +{ + // Copy the tools and controls into the internal maps + for( auto& tool : aTools ) + m_availableTools.emplace( tool->GetName(), tool ); + + for( auto& control : aControls ) + m_availableControls.emplace( control->GetName(), control ); + + // Configure the Ui elements + m_btnToolDelete->SetBitmap( KiBitmapBundle( BITMAPS::small_trash ) ); + m_btnToolMoveUp->SetBitmap( KiBitmapBundle( BITMAPS::small_up ) ); + m_btnToolMoveDown->SetBitmap( KiBitmapBundle( BITMAPS::small_down ) ); + m_btnAddTool->SetBitmap( KiBitmapBundle( BITMAPS::left ) ); + + m_insertButton->SetLabel( _( "Insert separator" ) ); + //m_insertButton->SetWidthPadding( 4 ); + + // Populate the browse library options + wxMenu* insertMenu = m_insertButton->GetSplitButtonMenu(); + + insertMenu->Append( ID_SPACER_MENU, _( "Insert spacer" ) ); + insertMenu->Append( ID_GROUP_MENU, _( "Insert group" ) ); + + insertMenu->Bind( wxEVT_COMMAND_MENU_SELECTED, &PANEL_TOOLBAR_CUSTOMIZATION::onSpacerPress, + this, ID_SPACER_MENU ); + insertMenu->Bind( wxEVT_COMMAND_MENU_SELECTED, &PANEL_TOOLBAR_CUSTOMIZATION::onGroupPress, + this, ID_GROUP_MENU ); + + // This is the button only press for the browse button instead of the menu + m_insertButton->Bind( wxEVT_BUTTON, &PANEL_TOOLBAR_CUSTOMIZATION::onSeparatorPress, this ); +} + + +PANEL_TOOLBAR_CUSTOMIZATION::~PANEL_TOOLBAR_CUSTOMIZATION() +{ + delete m_actionImageList; +} + +void PANEL_TOOLBAR_CUSTOMIZATION::ResetPanel() +{ + +} + + +bool PANEL_TOOLBAR_CUSTOMIZATION::TransferDataToWindow() +{ + auto tb = m_tbSettings->GetToolbarConfig( TOOLBAR_LOC::RIGHT, false ); + + // Always populate the actions before the toolbars, that way the icons are available + populateActions( m_availableTools, m_availableControls ); + + // Populate the choicebox to select the toolbar to edit + + + if( tb.has_value() ) + populateToolbarTree( tb.value() ); + + // Sync the enable/disable control + enableCustomControls( m_appSettings->m_CustomToolbars ); + m_customToolbars->SetValue( m_appSettings->m_CustomToolbars ); + + return true; +} + + +bool PANEL_TOOLBAR_CUSTOMIZATION::TransferDataFromWindow() +{ + return true; +} + + +void PANEL_TOOLBAR_CUSTOMIZATION::populateToolbarTree( const TOOLBAR_CONFIGURATION& aToolbar ) +{ + m_toolbarTree->DeleteAllItems(); + m_toolbarTree->SetImageList( m_actionImageList ); + + wxTreeItemId root = m_toolbarTree->AddRoot( "Toolbar" ); + + for( auto& item : aToolbar.GetToolbarItems() ) + { + if( item == "separator" ) + { + // Add a separator + TOOLBAR_TREE_ITEM_DATA* sepTreeItem = new TOOLBAR_TREE_ITEM_DATA( TOOLBAR_TREE_ITEM_TYPE::SEPARATOR ); + m_toolbarTree->AppendItem( root, "Separator", -1, -1, sepTreeItem ); + } + else if( item.starts_with( "group" ) ) + { + // Add a group of items to the toolbar + const TOOLBAR_GROUP_CONFIG* groupConfig = aToolbar.GetGroup( item ); + + if( !groupConfig ) + { + wxASSERT_MSG( false, wxString::Format( "Unable to find group %s", item ) ); + continue; + } + + TOOLBAR_TREE_ITEM_DATA* groupTreeItem = new TOOLBAR_TREE_ITEM_DATA( TOOLBAR_TREE_ITEM_TYPE::GROUP ); + groupTreeItem->SetName( item ); + + wxTreeItemId groupId = m_toolbarTree->AppendItem( root, item, -1, -1, groupTreeItem ); + + // Add the elements below the group + for( auto& groupItem : groupConfig->GetGroupItems() ) + { + auto toolMap = m_availableTools.find( groupItem ); + + if( toolMap == m_availableTools.end() ) + { + wxASSERT_MSG( false, wxString::Format( "Unable to find group tool %s", groupItem ) ); + continue; + } + + TOOLBAR_TREE_ITEM_DATA* toolTreeItem = new TOOLBAR_TREE_ITEM_DATA( TOOLBAR_TREE_ITEM_TYPE::TOOL ); + toolTreeItem->SetName( groupItem ); + toolTreeItem->SetAction( toolMap->second ); + + int imgIdx = -1; + auto imgMap = m_actionImageListMap.find( groupItem ); + + if( imgMap != m_actionImageListMap.end() ) + imgIdx = imgMap->second; + + m_toolbarTree->AppendItem( groupId, toolMap->second->GetFriendlyName(), + imgIdx, -1, toolTreeItem ); + } + } + else if( item.starts_with( "control" ) ) + { + // Add a custom control to the toolbar + + } + else if( item.starts_with( "spacer" ) ) + { + + } + else + { + // Add a tool + auto toolMap = m_availableTools.find( item ); + + if( toolMap == m_availableTools.end() ) + { + wxASSERT_MSG( false, wxString::Format( "Unable to find tool %s", item ) ); + continue; + } + + TOOLBAR_TREE_ITEM_DATA* toolTreeItem = new TOOLBAR_TREE_ITEM_DATA( TOOLBAR_TREE_ITEM_TYPE::TOOL ); + toolTreeItem->SetName( item ); + toolTreeItem->SetAction( toolMap->second ); + + int imgIdx = -1; + auto imgMap = m_actionImageListMap.find( item ); + + if( imgMap != m_actionImageListMap.end() ) + imgIdx = imgMap->second; + + m_toolbarTree->AppendItem( root, toolMap->second->GetFriendlyName(), + imgIdx, -1, toolTreeItem ); + } + } + + m_toolbarTree->ExpandAll(); +} + + +void PANEL_TOOLBAR_CUSTOMIZATION::populateActions( const std::map<std::string, TOOL_ACTION*>& aTools, + const std::map<std::string, ACTION_TOOLBAR_CONTROL*>& aControls ) +{ + // Clear all existing information for the actions + delete m_actionImageList; + m_actionImageListMap.clear(); + m_actionImageBundleVector.clear(); + + // Prep the control + m_actionsList->DeleteAllItems(); + m_actionsList->DeleteAllColumns(); + m_actionsList->InsertColumn( 0, "", wxLIST_FORMAT_LEFT, wxLIST_AUTOSIZE ); + + // Prepare the image list (taken from project_tree.cpp) + int logicSize = 24 * GetDPIScaleFactor() / GetContentScaleFactor(); // Cross-platform way + int physSize = ToPhys( logicSize ); // aka *GetContentScaleFactor() + + if( physSize >= 64 ) + physSize = 64; + else if( physSize >= 48 ) + physSize = 48; + else if( physSize >= 32 ) + physSize = 32; + else + physSize = 24; + + logicSize = std::min( logicSize, physSize ); + int bmpsf = std::max( 1, physSize / logicSize ); + + logicSize = physSize / bmpsf; + + auto toBitmap = [&]( BITMAPS aBmps ) + { + wxBitmap bmp = KiBitmap( aBmps, physSize ); + bmp.SetScaleFactor( bmpsf ); + wxASSERT(bmp.IsOk()); + return bmp; + }; + + m_actionImageList = new wxImageList( logicSize, logicSize, true, + static_cast<int>( aTools.size() ) ); + + // Populate the various image lists for the action icons, and the actual control + int itemIdx = 0; + + for( auto [k, tool] : aTools ) + { + if( tool->CheckToolbarState( TOOLBAR_STATE::HIDDEN ) ) + continue; + + wxListItem item; + item.SetText( tool->GetFriendlyName() ); + item.SetData( static_cast<void*>( tool ) ); + item.SetId( itemIdx++ ); + + if( tool->GetIcon() != BITMAPS::INVALID_BITMAP ) + { + int idx = m_actionImageList->Add( toBitmap( tool->GetIcon() ) ); + + // If the image list throws away the image, then we shouldn't show the image anywhere. + // TODO: Make sure all images have all possible sizes so the image list doesn't get grumpy. + if( idx != -1 ) + { + m_actionImageBundleVector.push_back( KiBitmapBundle( tool->GetIcon() ) ); + m_actionImageListMap.emplace( tool->GetName(), idx ); + + item.SetImage( idx ); + } + } + + m_actionsList->InsertItem( item ); + } + + m_actionsList->SetSmallImages( m_actionImageBundleVector ); + + // This must be done after adding everything to the list to make the columns wide enough + m_actionsList->SetColumnWidth( 0, wxLIST_AUTOSIZE ); +} + + +void PANEL_TOOLBAR_CUSTOMIZATION::onGroupPress( wxCommandEvent& aEvent ) +{ + +} + + +void PANEL_TOOLBAR_CUSTOMIZATION::onSpacerPress( wxCommandEvent& aEvent ) +{ + +} + + +void PANEL_TOOLBAR_CUSTOMIZATION::onSeparatorPress( wxCommandEvent& aEvent ) +{ + +} + + +void PANEL_TOOLBAR_CUSTOMIZATION::onCustomizeTbCb( wxCommandEvent& event ) +{ + enableCustomControls( event.IsChecked() ); +} + + +void PANEL_TOOLBAR_CUSTOMIZATION::enableCustomControls( bool enable ) +{ + m_tbChoice->Enable( enable ); + m_toolbarTree->Enable( enable ); + m_btnAddTool->Enable( enable ); + m_btnToolDelete->Enable( enable ); + m_btnToolMoveDown->Enable( enable ); + m_btnToolMoveUp->Enable( enable ); + m_actionsList->Enable( enable ); + m_insertButton->Enable( enable ); +} + + +void PANEL_TOOLBAR_CUSTOMIZATION::OnToolDelete( wxCommandEvent& event ) +{ + +} + + +void PANEL_TOOLBAR_CUSTOMIZATION::OnToolMoveUp( wxCommandEvent& event ) +{ + +} + + +void PANEL_TOOLBAR_CUSTOMIZATION::OnToolMoveDown( wxCommandEvent& event ) +{ + +} diff --git a/common/dialogs/panel_toolbar_customization.fbp b/common/dialogs/panel_toolbar_customization.fbp new file mode 100644 index 0000000000..ed371812dd --- /dev/null +++ b/common/dialogs/panel_toolbar_customization.fbp @@ -0,0 +1,856 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<wxFormBuilder_Project> + <FileVersion major="1" minor="18"/> + <object class="Project" expanded="true"> + <property name="code_generation">C++</property> + <property name="cpp_class_decoration"></property> + <property name="cpp_disconnect_events">1</property> + <property name="cpp_event_generation">connect</property> + <property name="cpp_help_provider">none</property> + <property name="cpp_namespace"></property> + <property name="cpp_precompiled_header"></property> + <property name="cpp_use_array_enum">0</property> + <property name="cpp_use_enum">1</property> + <property name="embedded_files_path">res</property> + <property name="encoding">UTF-8</property> + <property name="file">panel_toolbar_customization_base</property> + <property name="first_id">1000</property> + <property name="internationalize">1</property> + <property name="lua_skip_events">1</property> + <property name="lua_ui_table">UI</property> + <property name="name">PanelToolbarCustomization</property> + <property name="path">.</property> + <property name="php_disconnect_events">0</property> + <property name="php_disconnect_mode">source_name</property> + <property name="php_skip_events">1</property> + <property name="python_disconnect_events">0</property> + <property name="python_disconnect_mode">source_name</property> + <property name="python_image_path_wrapper_function_name"></property> + <property name="python_indent_with_spaces"></property> + <property name="python_skip_events">1</property> + <property name="relative_path">1</property> + <property name="use_microsoft_bom">0</property> + <property name="use_native_eol">0</property> + <object class="Panel" expanded="true"> + <property name="aui_managed">0</property> + <property name="aui_manager_style"></property> + <property name="bg"></property> + <property name="context_help"></property> + <property name="context_menu">1</property> + <property name="drag_accept_files">0</property> + <property name="enabled">1</property> + <property name="event_handler">impl_virtual</property> + <property name="fg"></property> + <property name="font"></property> + <property name="hidden">0</property> + <property name="id">wxID_ANY</property> + <property name="maximum_size"></property> + <property name="minimum_size"></property> + <property name="name">PANEL_TOOLBAR_CUSTOMIZATION_BASE</property> + <property name="pos"></property> + <property name="size">-1,-1</property> + <property name="subclass">RESETTABLE_PANEL; widgets/resettable_panel.h; forward_declare</property> + <property name="tooltip"></property> + <property name="two_step_creation">0</property> + <property name="window_extra_style"></property> + <property name="window_name"></property> + <property name="window_style">wxTAB_TRAVERSAL</property> + <event name="OnUpdateUI">OnUpdateUI</event> + <object class="wxBoxSizer" expanded="true"> + <property name="minimum_size"></property> + <property name="name">bPanelSizer</property> + <property name="orient">wxVERTICAL</property> + <property name="permission">none</property> + <object class="sizeritem" expanded="false"> + <property name="border">5</property> + <property name="flag">wxALL</property> + <property name="proportion">0</property> + <object class="wxCheckBox" expanded="false"> + <property name="BottomDockable">1</property> + <property name="LeftDockable">1</property> + <property name="RightDockable">1</property> + <property name="TopDockable">1</property> + <property name="aui_layer">0</property> + <property name="aui_name"></property> + <property name="aui_position">0</property> + <property name="aui_row">0</property> + <property name="best_size"></property> + <property name="bg"></property> + <property name="caption"></property> + <property name="caption_visible">1</property> + <property name="center_pane">0</property> + <property name="checked">0</property> + <property name="close_button">1</property> + <property name="context_help"></property> + <property name="context_menu">1</property> + <property name="default_pane">0</property> + <property name="dock">Dock</property> + <property name="dock_fixed">0</property> + <property name="docking">Left</property> + <property name="drag_accept_files">0</property> + <property name="enabled">1</property> + <property name="fg"></property> + <property name="floatable">1</property> + <property name="font"></property> + <property name="gripper">0</property> + <property name="hidden">0</property> + <property name="id">wxID_ANY</property> + <property name="label">Customize toolbars</property> + <property name="max_size"></property> + <property name="maximize_button">0</property> + <property name="maximum_size"></property> + <property name="min_size"></property> + <property name="minimize_button">0</property> + <property name="minimum_size"></property> + <property name="moveable">1</property> + <property name="name">m_customToolbars</property> + <property name="pane_border">1</property> + <property name="pane_position"></property> + <property name="pane_size"></property> + <property name="permission">protected</property> + <property name="pin_button">1</property> + <property name="pos"></property> + <property name="resize">Resizable</property> + <property name="show">1</property> + <property name="size"></property> + <property name="style"></property> + <property name="subclass">; ; forward_declare</property> + <property name="toolbar_pane">0</property> + <property name="tooltip"></property> + <property name="validator_data_type"></property> + <property name="validator_style">wxFILTER_NONE</property> + <property name="validator_type">wxDefaultValidator</property> + <property name="validator_variable"></property> + <property name="window_extra_style"></property> + <property name="window_name"></property> + <property name="window_style"></property> + <event name="OnCheckBox">onCustomizeTbCb</event> + </object> + </object> + <object class="sizeritem" expanded="false"> + <property name="border">5</property> + <property name="flag">wxEXPAND | wxALL</property> + <property name="proportion">0</property> + <object class="wxStaticLine" expanded="false"> + <property name="BottomDockable">1</property> + <property name="LeftDockable">1</property> + <property name="RightDockable">1</property> + <property name="TopDockable">1</property> + <property name="aui_layer">0</property> + <property name="aui_name"></property> + <property name="aui_position">0</property> + <property name="aui_row">0</property> + <property name="best_size"></property> + <property name="bg"></property> + <property name="caption"></property> + <property name="caption_visible">1</property> + <property name="center_pane">0</property> + <property name="close_button">1</property> + <property name="context_help"></property> + <property name="context_menu">1</property> + <property name="default_pane">0</property> + <property name="dock">Dock</property> + <property name="dock_fixed">0</property> + <property name="docking">Left</property> + <property name="drag_accept_files">0</property> + <property name="enabled">1</property> + <property name="fg"></property> + <property name="floatable">1</property> + <property name="font"></property> + <property name="gripper">0</property> + <property name="hidden">0</property> + <property name="id">wxID_ANY</property> + <property name="max_size"></property> + <property name="maximize_button">0</property> + <property name="maximum_size"></property> + <property name="min_size"></property> + <property name="minimize_button">0</property> + <property name="minimum_size"></property> + <property name="moveable">1</property> + <property name="name">m_staticline1</property> + <property name="pane_border">1</property> + <property name="pane_position"></property> + <property name="pane_size"></property> + <property name="permission">protected</property> + <property name="pin_button">1</property> + <property name="pos"></property> + <property name="resize">Resizable</property> + <property name="show">1</property> + <property name="size"></property> + <property name="style">wxLI_HORIZONTAL</property> + <property name="subclass">; ; forward_declare</property> + <property name="toolbar_pane">0</property> + <property name="tooltip"></property> + <property name="window_extra_style"></property> + <property name="window_name"></property> + <property name="window_style"></property> + </object> + </object> + <object class="sizeritem" expanded="true"> + <property name="border">5</property> + <property name="flag">wxEXPAND</property> + <property name="proportion">1</property> + <object class="wxFlexGridSizer" expanded="true"> + <property name="cols">3</property> + <property name="flexible_direction">wxHORIZONTAL</property> + <property name="growablecols"></property> + <property name="growablerows"></property> + <property name="hgap">0</property> + <property name="minimum_size"></property> + <property name="name">m_customizeControls</property> + <property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property> + <property name="permission">none</property> + <property name="rows">1</property> + <property name="vgap">0</property> + <object class="sizeritem" expanded="true"> + <property name="border">5</property> + <property name="flag">wxEXPAND</property> + <property name="proportion">1</property> + <object class="wxBoxSizer" expanded="true"> + <property name="minimum_size"></property> + <property name="name">bSizer8</property> + <property name="orient">wxVERTICAL</property> + <property name="permission">none</property> + <object class="sizeritem" expanded="false"> + <property name="border">5</property> + <property name="flag">wxALL|wxEXPAND</property> + <property name="proportion">0</property> + <object class="wxChoice" expanded="false"> + <property name="BottomDockable">1</property> + <property name="LeftDockable">1</property> + <property name="RightDockable">1</property> + <property name="TopDockable">1</property> + <property name="aui_layer">0</property> + <property name="aui_name"></property> + <property name="aui_position">0</property> + <property name="aui_row">0</property> + <property name="best_size"></property> + <property name="bg"></property> + <property name="caption"></property> + <property name="caption_visible">1</property> + <property name="center_pane">0</property> + <property name="choices"></property> + <property name="close_button">1</property> + <property name="context_help"></property> + <property name="context_menu">1</property> + <property name="default_pane">0</property> + <property name="dock">Dock</property> + <property name="dock_fixed">0</property> + <property name="docking">Left</property> + <property name="drag_accept_files">0</property> + <property name="enabled">1</property> + <property name="fg"></property> + <property name="floatable">1</property> + <property name="font"></property> + <property name="gripper">0</property> + <property name="hidden">0</property> + <property name="id">wxID_ANY</property> + <property name="max_size"></property> + <property name="maximize_button">0</property> + <property name="maximum_size"></property> + <property name="min_size"></property> + <property name="minimize_button">0</property> + <property name="minimum_size"></property> + <property name="moveable">1</property> + <property name="name">m_tbChoice</property> + <property name="pane_border">1</property> + <property name="pane_position"></property> + <property name="pane_size"></property> + <property name="permission">protected</property> + <property name="pin_button">1</property> + <property name="pos"></property> + <property name="resize">Resizable</property> + <property name="selection">0</property> + <property name="show">1</property> + <property name="size"></property> + <property name="style"></property> + <property name="subclass">; ; forward_declare</property> + <property name="toolbar_pane">0</property> + <property name="tooltip"></property> + <property name="validator_data_type"></property> + <property name="validator_style">wxFILTER_NONE</property> + <property name="validator_type">wxDefaultValidator</property> + <property name="validator_variable"></property> + <property name="window_extra_style"></property> + <property name="window_name"></property> + <property name="window_style"></property> + </object> + </object> + <object class="sizeritem" expanded="true"> + <property name="border">5</property> + <property name="flag">wxEXPAND</property> + <property name="proportion">1</property> + <object class="wxBoxSizer" expanded="true"> + <property name="minimum_size"></property> + <property name="name">bSizer10</property> + <property name="orient">wxHORIZONTAL</property> + <property name="permission">none</property> + <object class="sizeritem" expanded="true"> + <property name="border">5</property> + <property name="flag">wxEXPAND</property> + <property name="proportion">1</property> + <object class="wxBoxSizer" expanded="true"> + <property name="minimum_size"></property> + <property name="name">bSizer11</property> + <property name="orient">wxVERTICAL</property> + <property name="permission">none</property> + <object class="sizeritem" expanded="false"> + <property name="border">5</property> + <property name="flag">wxALL|wxEXPAND</property> + <property name="proportion">0</property> + <object class="wxTreeCtrl" expanded="false"> + <property name="BottomDockable">1</property> + <property name="LeftDockable">1</property> + <property name="RightDockable">1</property> + <property name="TopDockable">1</property> + <property name="aui_layer">0</property> + <property name="aui_name"></property> + <property name="aui_position">0</property> + <property name="aui_row">0</property> + <property name="best_size"></property> + <property name="bg"></property> + <property name="caption"></property> + <property name="caption_visible">1</property> + <property name="center_pane">0</property> + <property name="close_button">1</property> + <property name="context_help"></property> + <property name="context_menu">1</property> + <property name="default_pane">0</property> + <property name="dock">Dock</property> + <property name="dock_fixed">0</property> + <property name="docking">Left</property> + <property name="drag_accept_files">0</property> + <property name="enabled">1</property> + <property name="fg"></property> + <property name="floatable">1</property> + <property name="font"></property> + <property name="gripper">0</property> + <property name="hidden">0</property> + <property name="id">wxID_ANY</property> + <property name="max_size"></property> + <property name="maximize_button">0</property> + <property name="maximum_size"></property> + <property name="min_size"></property> + <property name="minimize_button">0</property> + <property name="minimum_size"></property> + <property name="moveable">1</property> + <property name="name">m_toolbarTree</property> + <property name="pane_border">1</property> + <property name="pane_position"></property> + <property name="pane_size"></property> + <property name="permission">protected</property> + <property name="pin_button">1</property> + <property name="pos"></property> + <property name="resize">Resizable</property> + <property name="show">1</property> + <property name="size"></property> + <property name="style">wxTR_DEFAULT_STYLE|wxTR_HIDE_ROOT|wxTR_NO_LINES</property> + <property name="subclass">; ; forward_declare</property> + <property name="toolbar_pane">0</property> + <property name="tooltip"></property> + <property name="window_extra_style"></property> + <property name="window_name"></property> + <property name="window_style"></property> + </object> + </object> + </object> + </object> + </object> + </object> + <object class="sizeritem" expanded="true"> + <property name="border">5</property> + <property name="flag">wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT|wxTOP</property> + <property name="proportion">0</property> + <object class="wxBoxSizer" expanded="true"> + <property name="minimum_size"></property> + <property name="name">bSizerToolbarBtns</property> + <property name="orient">wxHORIZONTAL</property> + <property name="permission">none</property> + <object class="sizeritem" expanded="false"> + <property name="border">5</property> + <property name="flag">wxALL</property> + <property name="proportion">0</property> + <object class="wxBitmapButton" expanded="false"> + <property name="BottomDockable">1</property> + <property name="LeftDockable">1</property> + <property name="RightDockable">1</property> + <property name="TopDockable">1</property> + <property name="aui_layer">0</property> + <property name="aui_name"></property> + <property name="aui_position">0</property> + <property name="aui_row">0</property> + <property name="auth_needed">0</property> + <property name="best_size"></property> + <property name="bg"></property> + <property name="bitmap"></property> + <property name="caption"></property> + <property name="caption_visible">1</property> + <property name="center_pane">0</property> + <property name="close_button">1</property> + <property name="context_help"></property> + <property name="context_menu">1</property> + <property name="current"></property> + <property name="default">0</property> + <property name="default_pane">0</property> + <property name="disabled"></property> + <property name="dock">Dock</property> + <property name="dock_fixed">0</property> + <property name="docking">Left</property> + <property name="drag_accept_files">0</property> + <property name="enabled">1</property> + <property name="fg"></property> + <property name="floatable">1</property> + <property name="focus"></property> + <property name="font"></property> + <property name="gripper">0</property> + <property name="hidden">0</property> + <property name="id">wxID_ANY</property> + <property name="label">Delete Text Variable</property> + <property name="margins"></property> + <property name="markup">0</property> + <property name="max_size"></property> + <property name="maximize_button">0</property> + <property name="maximum_size"></property> + <property name="min_size"></property> + <property name="minimize_button">0</property> + <property name="minimum_size">-1,-1</property> + <property name="moveable">1</property> + <property name="name">m_btnToolDelete</property> + <property name="pane_border">1</property> + <property name="pane_position"></property> + <property name="pane_size"></property> + <property name="permission">protected</property> + <property name="pin_button">1</property> + <property name="pos"></property> + <property name="position"></property> + <property name="pressed"></property> + <property name="resize">Resizable</property> + <property name="show">1</property> + <property name="size"></property> + <property name="style"></property> + <property name="subclass">STD_BITMAP_BUTTON; widgets/std_bitmap_button.h; forward_declare</property> + <property name="toolbar_pane">0</property> + <property name="tooltip"></property> + <property name="validator_data_type"></property> + <property name="validator_style">wxFILTER_NONE</property> + <property name="validator_type">wxDefaultValidator</property> + <property name="validator_variable"></property> + <property name="window_extra_style"></property> + <property name="window_name"></property> + <property name="window_style"></property> + <event name="OnButtonClick">OnToolDelete</event> + </object> + </object> + <object class="sizeritem" expanded="false"> + <property name="border">5</property> + <property name="flag">wxBOTTOM|wxLEFT|wxTOP</property> + <property name="proportion">0</property> + <object class="wxBitmapButton" expanded="false"> + <property name="BottomDockable">1</property> + <property name="LeftDockable">1</property> + <property name="RightDockable">1</property> + <property name="TopDockable">1</property> + <property name="aui_layer">0</property> + <property name="aui_name"></property> + <property name="aui_position">0</property> + <property name="aui_row">0</property> + <property name="auth_needed">0</property> + <property name="best_size"></property> + <property name="bg"></property> + <property name="bitmap"></property> + <property name="caption"></property> + <property name="caption_visible">1</property> + <property name="center_pane">0</property> + <property name="close_button">1</property> + <property name="context_help"></property> + <property name="context_menu">1</property> + <property name="current"></property> + <property name="default">0</property> + <property name="default_pane">0</property> + <property name="disabled"></property> + <property name="dock">Dock</property> + <property name="dock_fixed">0</property> + <property name="docking">Left</property> + <property name="drag_accept_files">0</property> + <property name="enabled">1</property> + <property name="fg"></property> + <property name="floatable">1</property> + <property name="focus"></property> + <property name="font"></property> + <property name="gripper">0</property> + <property name="hidden">0</property> + <property name="id">wxID_ANY</property> + <property name="label">Delete Text Variable</property> + <property name="margins"></property> + <property name="markup">0</property> + <property name="max_size"></property> + <property name="maximize_button">0</property> + <property name="maximum_size"></property> + <property name="min_size"></property> + <property name="minimize_button">0</property> + <property name="minimum_size">-1,-1</property> + <property name="moveable">1</property> + <property name="name">m_btnToolMoveUp</property> + <property name="pane_border">1</property> + <property name="pane_position"></property> + <property name="pane_size"></property> + <property name="permission">protected</property> + <property name="pin_button">1</property> + <property name="pos"></property> + <property name="position"></property> + <property name="pressed"></property> + <property name="resize">Resizable</property> + <property name="show">1</property> + <property name="size"></property> + <property name="style"></property> + <property name="subclass">STD_BITMAP_BUTTON; widgets/std_bitmap_button.h; forward_declare</property> + <property name="toolbar_pane">0</property> + <property name="tooltip"></property> + <property name="validator_data_type"></property> + <property name="validator_style">wxFILTER_NONE</property> + <property name="validator_type">wxDefaultValidator</property> + <property name="validator_variable"></property> + <property name="window_extra_style"></property> + <property name="window_name"></property> + <property name="window_style"></property> + <event name="OnButtonClick">OnToolMoveUp</event> + </object> + </object> + <object class="sizeritem" expanded="false"> + <property name="border">5</property> + <property name="flag">wxALL</property> + <property name="proportion">0</property> + <object class="wxBitmapButton" expanded="false"> + <property name="BottomDockable">1</property> + <property name="LeftDockable">1</property> + <property name="RightDockable">1</property> + <property name="TopDockable">1</property> + <property name="aui_layer">0</property> + <property name="aui_name"></property> + <property name="aui_position">0</property> + <property name="aui_row">0</property> + <property name="auth_needed">0</property> + <property name="best_size"></property> + <property name="bg"></property> + <property name="bitmap"></property> + <property name="caption"></property> + <property name="caption_visible">1</property> + <property name="center_pane">0</property> + <property name="close_button">1</property> + <property name="context_help"></property> + <property name="context_menu">1</property> + <property name="current"></property> + <property name="default">0</property> + <property name="default_pane">0</property> + <property name="disabled"></property> + <property name="dock">Dock</property> + <property name="dock_fixed">0</property> + <property name="docking">Left</property> + <property name="drag_accept_files">0</property> + <property name="enabled">1</property> + <property name="fg"></property> + <property name="floatable">1</property> + <property name="focus"></property> + <property name="font"></property> + <property name="gripper">0</property> + <property name="hidden">0</property> + <property name="id">wxID_ANY</property> + <property name="label">Delete Text Variable</property> + <property name="margins"></property> + <property name="markup">0</property> + <property name="max_size"></property> + <property name="maximize_button">0</property> + <property name="maximum_size"></property> + <property name="min_size"></property> + <property name="minimize_button">0</property> + <property name="minimum_size">-1,-1</property> + <property name="moveable">1</property> + <property name="name">m_btnToolMoveDown</property> + <property name="pane_border">1</property> + <property name="pane_position"></property> + <property name="pane_size"></property> + <property name="permission">protected</property> + <property name="pin_button">1</property> + <property name="pos"></property> + <property name="position"></property> + <property name="pressed"></property> + <property name="resize">Resizable</property> + <property name="show">1</property> + <property name="size"></property> + <property name="style"></property> + <property name="subclass">STD_BITMAP_BUTTON; widgets/std_bitmap_button.h; forward_declare</property> + <property name="toolbar_pane">0</property> + <property name="tooltip"></property> + <property name="validator_data_type"></property> + <property name="validator_style">wxFILTER_NONE</property> + <property name="validator_type">wxDefaultValidator</property> + <property name="validator_variable"></property> + <property name="window_extra_style"></property> + <property name="window_name"></property> + <property name="window_style"></property> + <event name="OnButtonClick">OnToolMoveDown</event> + </object> + </object> + <object class="sizeritem" expanded="false"> + <property name="border">5</property> + <property name="flag">wxEXPAND</property> + <property name="proportion">0</property> + <object class="spacer" expanded="false"> + <property name="height">0</property> + <property name="permission">protected</property> + <property name="width">20</property> + </object> + </object> + <object class="sizeritem" expanded="false"> + <property name="border">5</property> + <property name="flag">wxALL</property> + <property name="proportion">0</property> + <object class="CustomControl" expanded="false"> + <property name="BottomDockable">1</property> + <property name="LeftDockable">1</property> + <property name="RightDockable">1</property> + <property name="TopDockable">1</property> + <property name="aui_layer">0</property> + <property name="aui_name"></property> + <property name="aui_position">0</property> + <property name="aui_row">0</property> + <property name="best_size"></property> + <property name="bg"></property> + <property name="caption"></property> + <property name="caption_visible">1</property> + <property name="center_pane">0</property> + <property name="class">SPLIT_BUTTON</property> + <property name="close_button">1</property> + <property name="construction">m_insertButton = new SPLIT_BUTTON( this, wxID_ANY, _( "Insert separator" ), wxDefaultPosition );</property> + <property name="context_help"></property> + <property name="context_menu">1</property> + <property name="declaration"></property> + <property name="default_pane">0</property> + <property name="dock">Dock</property> + <property name="dock_fixed">0</property> + <property name="docking">Left</property> + <property name="drag_accept_files">0</property> + <property name="enabled">1</property> + <property name="fg"></property> + <property name="floatable">1</property> + <property name="font"></property> + <property name="gripper">0</property> + <property name="hidden">0</property> + <property name="id">wxID_ANY</property> + <property name="include">#include <widgets/split_button.h></property> + <property name="max_size"></property> + <property name="maximize_button">0</property> + <property name="maximum_size"></property> + <property name="min_size"></property> + <property name="minimize_button">0</property> + <property name="minimum_size"></property> + <property name="moveable">1</property> + <property name="name">m_insertButton</property> + <property name="pane_border">1</property> + <property name="pane_position"></property> + <property name="pane_size"></property> + <property name="permission">protected</property> + <property name="pin_button">1</property> + <property name="pos"></property> + <property name="resize">Resizable</property> + <property name="settings"></property> + <property name="show">1</property> + <property name="size"></property> + <property name="subclass"></property> + <property name="toolbar_pane">0</property> + <property name="tooltip"></property> + <property name="window_extra_style"></property> + <property name="window_name"></property> + <property name="window_style"></property> + </object> + </object> + </object> + </object> + </object> + </object> + <object class="sizeritem" expanded="true"> + <property name="border">5</property> + <property name="flag">wxEXPAND</property> + <property name="proportion">1</property> + <object class="wxBoxSizer" expanded="true"> + <property name="minimum_size"></property> + <property name="name">bSizer6</property> + <property name="orient">wxVERTICAL</property> + <property name="permission">none</property> + <object class="sizeritem" expanded="false"> + <property name="border">5</property> + <property name="flag">wxEXPAND</property> + <property name="proportion">1</property> + <object class="spacer" expanded="false"> + <property name="height">0</property> + <property name="permission">protected</property> + <property name="width">0</property> + </object> + </object> + <object class="sizeritem" expanded="false"> + <property name="border">5</property> + <property name="flag">wxALL</property> + <property name="proportion">0</property> + <object class="wxBitmapButton" expanded="false"> + <property name="BottomDockable">1</property> + <property name="LeftDockable">1</property> + <property name="RightDockable">1</property> + <property name="TopDockable">1</property> + <property name="aui_layer">0</property> + <property name="aui_name"></property> + <property name="aui_position">0</property> + <property name="aui_row">0</property> + <property name="auth_needed">0</property> + <property name="best_size"></property> + <property name="bg"></property> + <property name="bitmap"></property> + <property name="caption"></property> + <property name="caption_visible">1</property> + <property name="center_pane">0</property> + <property name="close_button">1</property> + <property name="context_help"></property> + <property name="context_menu">1</property> + <property name="current"></property> + <property name="default">0</property> + <property name="default_pane">0</property> + <property name="disabled"></property> + <property name="dock">Dock</property> + <property name="dock_fixed">0</property> + <property name="docking">Left</property> + <property name="drag_accept_files">0</property> + <property name="enabled">1</property> + <property name="fg"></property> + <property name="floatable">1</property> + <property name="focus"></property> + <property name="font"></property> + <property name="gripper">0</property> + <property name="hidden">0</property> + <property name="id">wxID_ANY</property> + <property name="label">Add Text Variable</property> + <property name="margins"></property> + <property name="markup">0</property> + <property name="max_size"></property> + <property name="maximize_button">0</property> + <property name="maximum_size"></property> + <property name="min_size"></property> + <property name="minimize_button">0</property> + <property name="minimum_size">-1,-1</property> + <property name="moveable">1</property> + <property name="name">m_btnAddTool</property> + <property name="pane_border">1</property> + <property name="pane_position"></property> + <property name="pane_size"></property> + <property name="permission">protected</property> + <property name="pin_button">1</property> + <property name="pos"></property> + <property name="position"></property> + <property name="pressed"></property> + <property name="resize">Resizable</property> + <property name="show">1</property> + <property name="size"></property> + <property name="style"></property> + <property name="subclass">STD_BITMAP_BUTTON; widgets/std_bitmap_button.h; forward_declare</property> + <property name="toolbar_pane">0</property> + <property name="tooltip"></property> + <property name="validator_data_type"></property> + <property name="validator_style">wxFILTER_NONE</property> + <property name="validator_type">wxDefaultValidator</property> + <property name="validator_variable"></property> + <property name="window_extra_style"></property> + <property name="window_name"></property> + <property name="window_style"></property> + <event name="OnButtonClick">OnAddTextVar</event> + </object> + </object> + <object class="sizeritem" expanded="false"> + <property name="border">5</property> + <property name="flag">wxEXPAND</property> + <property name="proportion">1</property> + <object class="spacer" expanded="false"> + <property name="height">0</property> + <property name="permission">protected</property> + <property name="width">0</property> + </object> + </object> + </object> + </object> + <object class="sizeritem" expanded="true"> + <property name="border">5</property> + <property name="flag">wxEXPAND</property> + <property name="proportion">1</property> + <object class="wxBoxSizer" expanded="true"> + <property name="minimum_size"></property> + <property name="name">bSizer9</property> + <property name="orient">wxHORIZONTAL</property> + <property name="permission">none</property> + <object class="sizeritem" expanded="false"> + <property name="border">5</property> + <property name="flag">wxALL|wxEXPAND</property> + <property name="proportion">0</property> + <object class="wxListCtrl" expanded="false"> + <property name="BottomDockable">1</property> + <property name="LeftDockable">1</property> + <property name="RightDockable">1</property> + <property name="TopDockable">1</property> + <property name="aui_layer">0</property> + <property name="aui_name"></property> + <property name="aui_position">0</property> + <property name="aui_row">0</property> + <property name="best_size"></property> + <property name="bg"></property> + <property name="caption"></property> + <property name="caption_visible">1</property> + <property name="center_pane">0</property> + <property name="close_button">1</property> + <property name="context_help"></property> + <property name="context_menu">1</property> + <property name="default_pane">0</property> + <property name="dock">Dock</property> + <property name="dock_fixed">0</property> + <property name="docking">Left</property> + <property name="drag_accept_files">0</property> + <property name="enabled">1</property> + <property name="fg"></property> + <property name="floatable">1</property> + <property name="font"></property> + <property name="gripper">0</property> + <property name="hidden">0</property> + <property name="id">wxID_ANY</property> + <property name="max_size"></property> + <property name="maximize_button">0</property> + <property name="maximum_size"></property> + <property name="min_size"></property> + <property name="minimize_button">0</property> + <property name="minimum_size"></property> + <property name="moveable">1</property> + <property name="name">m_actionsList</property> + <property name="pane_border">1</property> + <property name="pane_position"></property> + <property name="pane_size"></property> + <property name="permission">protected</property> + <property name="pin_button">1</property> + <property name="pos"></property> + <property name="resize">Resizable</property> + <property name="show">1</property> + <property name="size"></property> + <property name="style">wxLC_ICON|wxLC_NO_HEADER|wxLC_REPORT|wxLC_SINGLE_SEL</property> + <property name="subclass">; ; forward_declare</property> + <property name="toolbar_pane">0</property> + <property name="tooltip"></property> + <property name="validator_data_type"></property> + <property name="validator_style">wxFILTER_NONE</property> + <property name="validator_type">wxDefaultValidator</property> + <property name="validator_variable"></property> + <property name="window_extra_style"></property> + <property name="window_name"></property> + <property name="window_style"></property> + </object> + </object> + </object> + </object> + </object> + </object> + </object> + </object> + </object> +</wxFormBuilder_Project> diff --git a/common/dialogs/panel_toolbar_customization_base.cpp b/common/dialogs/panel_toolbar_customization_base.cpp new file mode 100644 index 0000000000..c31fea1156 --- /dev/null +++ b/common/dialogs/panel_toolbar_customization_base.cpp @@ -0,0 +1,128 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6-dirty) +// http://www.wxformbuilder.org/ +// +// PLEASE DO *NOT* EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#include "widgets/std_bitmap_button.h" + +#include "panel_toolbar_customization_base.h" + +/////////////////////////////////////////////////////////////////////////// + +PANEL_TOOLBAR_CUSTOMIZATION_BASE::PANEL_TOOLBAR_CUSTOMIZATION_BASE( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) : RESETTABLE_PANEL( parent, id, pos, size, style, name ) +{ + wxBoxSizer* bPanelSizer; + bPanelSizer = new wxBoxSizer( wxVERTICAL ); + + m_customToolbars = new wxCheckBox( this, wxID_ANY, _("Customize toolbars"), wxDefaultPosition, wxDefaultSize, 0 ); + bPanelSizer->Add( m_customToolbars, 0, wxALL, 5 ); + + m_staticline1 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bPanelSizer->Add( m_staticline1, 0, wxEXPAND | wxALL, 5 ); + + wxFlexGridSizer* m_customizeControls; + m_customizeControls = new wxFlexGridSizer( 1, 3, 0, 0 ); + m_customizeControls->SetFlexibleDirection( wxHORIZONTAL ); + m_customizeControls->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + + wxBoxSizer* bSizer8; + bSizer8 = new wxBoxSizer( wxVERTICAL ); + + wxArrayString m_tbChoiceChoices; + m_tbChoice = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_tbChoiceChoices, 0 ); + m_tbChoice->SetSelection( 0 ); + bSizer8->Add( m_tbChoice, 0, wxALL|wxEXPAND, 5 ); + + wxBoxSizer* bSizer10; + bSizer10 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer11; + bSizer11 = new wxBoxSizer( wxVERTICAL ); + + m_toolbarTree = new wxTreeCtrl( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTR_DEFAULT_STYLE|wxTR_HIDE_ROOT|wxTR_NO_LINES ); + bSizer11->Add( m_toolbarTree, 0, wxALL|wxEXPAND, 5 ); + + + bSizer10->Add( bSizer11, 1, wxEXPAND, 5 ); + + + bSizer8->Add( bSizer10, 1, wxEXPAND, 5 ); + + wxBoxSizer* bSizerToolbarBtns; + bSizerToolbarBtns = new wxBoxSizer( wxHORIZONTAL ); + + m_btnToolDelete = new STD_BITMAP_BUTTON( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 ); + bSizerToolbarBtns->Add( m_btnToolDelete, 0, wxALL, 5 ); + + m_btnToolMoveUp = new STD_BITMAP_BUTTON( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 ); + bSizerToolbarBtns->Add( m_btnToolMoveUp, 0, wxBOTTOM|wxLEFT|wxTOP, 5 ); + + m_btnToolMoveDown = new STD_BITMAP_BUTTON( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 ); + bSizerToolbarBtns->Add( m_btnToolMoveDown, 0, wxALL, 5 ); + + + bSizerToolbarBtns->Add( 20, 0, 0, wxEXPAND, 5 ); + + m_insertButton = new SPLIT_BUTTON( this, wxID_ANY, _( "Insert separator" ), wxDefaultPosition ); + bSizerToolbarBtns->Add( m_insertButton, 0, wxALL, 5 ); + + + bSizer8->Add( bSizerToolbarBtns, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 ); + + + m_customizeControls->Add( bSizer8, 1, wxEXPAND, 5 ); + + wxBoxSizer* bSizer6; + bSizer6 = new wxBoxSizer( wxVERTICAL ); + + + bSizer6->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_btnAddTool = new STD_BITMAP_BUTTON( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 ); + bSizer6->Add( m_btnAddTool, 0, wxALL, 5 ); + + + bSizer6->Add( 0, 0, 1, wxEXPAND, 5 ); + + + m_customizeControls->Add( bSizer6, 1, wxEXPAND, 5 ); + + wxBoxSizer* bSizer9; + bSizer9 = new wxBoxSizer( wxHORIZONTAL ); + + m_actionsList = new wxListCtrl( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_ICON|wxLC_NO_HEADER|wxLC_REPORT|wxLC_SINGLE_SEL ); + bSizer9->Add( m_actionsList, 0, wxALL|wxEXPAND, 5 ); + + + m_customizeControls->Add( bSizer9, 1, wxEXPAND, 5 ); + + + bPanelSizer->Add( m_customizeControls, 1, wxEXPAND, 5 ); + + + this->SetSizer( bPanelSizer ); + this->Layout(); + bPanelSizer->Fit( this ); + + // Connect Events + this->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( PANEL_TOOLBAR_CUSTOMIZATION_BASE::OnUpdateUI ) ); + m_customToolbars->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_TOOLBAR_CUSTOMIZATION_BASE::onCustomizeTbCb ), NULL, this ); + m_btnToolDelete->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_TOOLBAR_CUSTOMIZATION_BASE::OnToolDelete ), NULL, this ); + m_btnToolMoveUp->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_TOOLBAR_CUSTOMIZATION_BASE::OnToolMoveUp ), NULL, this ); + m_btnToolMoveDown->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_TOOLBAR_CUSTOMIZATION_BASE::OnToolMoveDown ), NULL, this ); + m_btnAddTool->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_TOOLBAR_CUSTOMIZATION_BASE::OnAddTextVar ), NULL, this ); +} + +PANEL_TOOLBAR_CUSTOMIZATION_BASE::~PANEL_TOOLBAR_CUSTOMIZATION_BASE() +{ + // Disconnect Events + this->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( PANEL_TOOLBAR_CUSTOMIZATION_BASE::OnUpdateUI ) ); + m_customToolbars->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_TOOLBAR_CUSTOMIZATION_BASE::onCustomizeTbCb ), NULL, this ); + m_btnToolDelete->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_TOOLBAR_CUSTOMIZATION_BASE::OnToolDelete ), NULL, this ); + m_btnToolMoveUp->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_TOOLBAR_CUSTOMIZATION_BASE::OnToolMoveUp ), NULL, this ); + m_btnToolMoveDown->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_TOOLBAR_CUSTOMIZATION_BASE::OnToolMoveDown ), NULL, this ); + m_btnAddTool->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_TOOLBAR_CUSTOMIZATION_BASE::OnAddTextVar ), NULL, this ); + +} diff --git a/common/dialogs/panel_toolbar_customization_base.h b/common/dialogs/panel_toolbar_customization_base.h new file mode 100644 index 0000000000..432f6e7fdb --- /dev/null +++ b/common/dialogs/panel_toolbar_customization_base.h @@ -0,0 +1,72 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6-dirty) +// http://www.wxformbuilder.org/ +// +// PLEASE DO *NOT* EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include <wx/artprov.h> +#include <wx/xrc/xmlres.h> +#include <wx/intl.h> +class STD_BITMAP_BUTTON; + +#include "widgets/resettable_panel.h" +#include <wx/string.h> +#include <wx/checkbox.h> +#include <wx/gdicmn.h> +#include <wx/font.h> +#include <wx/colour.h> +#include <wx/settings.h> +#include <wx/statline.h> +#include <wx/choice.h> +#include <wx/treectrl.h> +#include <wx/sizer.h> +#include <wx/bmpbuttn.h> +#include <wx/bitmap.h> +#include <wx/image.h> +#include <wx/icon.h> +#include <wx/button.h> +#include <widgets/split_button.h> +#include <wx/listctrl.h> +#include <wx/panel.h> + +/////////////////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////////////////// +/// Class PANEL_TOOLBAR_CUSTOMIZATION_BASE +/////////////////////////////////////////////////////////////////////////////// +class PANEL_TOOLBAR_CUSTOMIZATION_BASE : public RESETTABLE_PANEL +{ + private: + + protected: + wxCheckBox* m_customToolbars; + wxStaticLine* m_staticline1; + wxChoice* m_tbChoice; + wxTreeCtrl* m_toolbarTree; + STD_BITMAP_BUTTON* m_btnToolDelete; + STD_BITMAP_BUTTON* m_btnToolMoveUp; + STD_BITMAP_BUTTON* m_btnToolMoveDown; + SPLIT_BUTTON* m_insertButton; + STD_BITMAP_BUTTON* m_btnAddTool; + wxListCtrl* m_actionsList; + + // Virtual event handlers, override them in your derived class + virtual void OnUpdateUI( wxUpdateUIEvent& event ) { event.Skip(); } + virtual void onCustomizeTbCb( wxCommandEvent& event ) { event.Skip(); } + virtual void OnToolDelete( wxCommandEvent& event ) { event.Skip(); } + virtual void OnToolMoveUp( wxCommandEvent& event ) { event.Skip(); } + virtual void OnToolMoveDown( wxCommandEvent& event ) { event.Skip(); } + virtual void OnAddTextVar( wxCommandEvent& event ) { event.Skip(); } + + + public: + + PANEL_TOOLBAR_CUSTOMIZATION_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxTAB_TRAVERSAL, const wxString& name = wxEmptyString ); + + ~PANEL_TOOLBAR_CUSTOMIZATION_BASE(); + +}; + diff --git a/common/eda_base_frame.cpp b/common/eda_base_frame.cpp index 8c23641812..64cad956a1 100644 --- a/common/eda_base_frame.cpp +++ b/common/eda_base_frame.cpp @@ -1309,6 +1309,7 @@ void EDA_BASE_FRAME::ShowPreferences( wxString aStartPage, wxString aStartParent book->AddLazySubPage( LAZY_CTOR( PANEL_SCH_EDIT_OPTIONS ), _( "Editing Options" ) ); book->AddLazySubPage( LAZY_CTOR( PANEL_SCH_ANNO_OPTIONS ), _( "Annotation Options" ) ); book->AddLazySubPage( LAZY_CTOR( PANEL_SCH_COLORS ), _( "Colors" ) ); + book->AddLazySubPage( LAZY_CTOR( PANEL_SCH_TOOLBARS ), _( "Toolbars" ) ); book->AddLazySubPage( LAZY_CTOR( PANEL_SCH_FIELD_NAME_TEMPLATES ), _( "Field Name Templates" ) ); book->AddLazySubPage( LAZY_CTOR( PANEL_SCH_SIMULATOR ), _( "Simulator" ) ); @@ -1348,6 +1349,7 @@ void EDA_BASE_FRAME::ShowPreferences( wxString aStartPage, wxString aStartParent book->AddLazySubPage( LAZY_CTOR( PANEL_PCB_ORIGINS_AXES ), _( "Origins & Axes" ) ); book->AddLazySubPage( LAZY_CTOR( PANEL_PCB_EDIT_OPTIONS ), _( "Editing Options" ) ); book->AddLazySubPage( LAZY_CTOR( PANEL_PCB_COLORS ), _( "Colors" ) ); + book->AddLazySubPage( LAZY_CTOR( PANEL_PCB_TOOLBARS ), _( "Toolbars" ) ); book->AddLazySubPage( LAZY_CTOR( PANEL_PCB_ACTION_PLUGINS ), _( "Plugins" ) ); if( GetFrameType() == FRAME_PCB_DISPLAY3D ) diff --git a/eeschema/eeschema.cpp b/eeschema/eeschema.cpp index f5154d9e08..fc6992e012 100644 --- a/eeschema/eeschema.cpp +++ b/eeschema/eeschema.cpp @@ -306,7 +306,15 @@ static struct IFACE : public KIFACE_BASE, public UNITS_PROVIDER return new PANEL_EESCHEMA_ANNOTATION_OPTIONS( aParent, schSettingsProvider ); } +/* + case PANEL_SCH_TOOLBARS: + { + SETTINGS_MANAGER& mgr = Pgm().GetSettingsManager(); + EESCHEMA_SETTINGS* cfg = mgr.GetAppSettings<EESCHEMA_SETTINGS>( "eeschema" ); + return new PANEL_TOOLBAR_CUSTOMIZATION( aParent, cfg ); + } +*/ case PANEL_SCH_COLORS: return new PANEL_EESCHEMA_COLOR_SETTINGS( aParent ); diff --git a/include/dialogs/panel_toolbar_customization.h b/include/dialogs/panel_toolbar_customization.h new file mode 100644 index 0000000000..775378b1b2 --- /dev/null +++ b/include/dialogs/panel_toolbar_customization.h @@ -0,0 +1,83 @@ +/* + * This program source code file is part of KICAD, a free EDA CAD application. + * + * Copyright The 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 PANEL_TOOLBAR_CUSTOMIZATION_H_ + #define PANEL_TOOLBAR_CUSTOMIZATION_H_ + +#include <dialogs/panel_toolbar_customization_base.h> + +#include <tool/action_toolbar.h> + +#include <wx/bmpbndl.h> + +class wxImageList; + +class APP_SETTINGS_BASE; +class TOOL_ACTION; +class TOOLBAR_SETTINGS; + +class PANEL_TOOLBAR_CUSTOMIZATION : public PANEL_TOOLBAR_CUSTOMIZATION_BASE +{ +public: + PANEL_TOOLBAR_CUSTOMIZATION( wxWindow* aParent, APP_SETTINGS_BASE* aCfg, TOOLBAR_SETTINGS* aTbSettings, + std::vector<TOOL_ACTION*> aTools, + std::vector<ACTION_TOOLBAR_CONTROL*> aControls ); + + ~PANEL_TOOLBAR_CUSTOMIZATION(); + + void ResetPanel() override; + + bool TransferDataFromWindow() override; + bool TransferDataToWindow() override; + +protected: + void populateToolbarTree( const TOOLBAR_CONFIGURATION& aToolbar ); + + void populateActions( const std::map<std::string, TOOL_ACTION*>& aTools, + const std::map<std::string, ACTION_TOOLBAR_CONTROL*>& aControls ); + + void enableCustomControls( bool enable ); + + void onGroupPress( wxCommandEvent& aEvent ); + void onSpacerPress( wxCommandEvent& aEvent ); + void onSeparatorPress( wxCommandEvent& aEvent ); + + // From the base class + void onCustomizeTbCb( wxCommandEvent& event ) override; + void OnToolDelete( wxCommandEvent& event ) override; + void OnToolMoveUp( wxCommandEvent& event ) override; + void OnToolMoveDown( wxCommandEvent& event ) override; + +protected: + wxImageList* m_actionImageList; + wxVector<wxBitmapBundle> m_actionImageBundleVector; + std::map<std::string, int> m_actionImageListMap; + + APP_SETTINGS_BASE* m_appSettings; + TOOLBAR_SETTINGS* m_tbSettings; + + std::map<std::string, TOOL_ACTION*> m_availableTools; + std::map<std::string, ACTION_TOOLBAR_CONTROL*> m_availableControls; +}; + + #endif /* PANEL_TOOLBAR_CUSTOMIZATION_H_ */ diff --git a/include/frame_type.h b/include/frame_type.h index 7ea7042e03..bc360b1929 100644 --- a/include/frame_type.h +++ b/include/frame_type.h @@ -73,12 +73,14 @@ enum FRAME_T PANEL_SYM_EDIT_GRIDS, PANEL_SYM_EDIT_OPTIONS, PANEL_SYM_COLORS, + PANEL_SYM_TOOLBARS, PANEL_SCH_DISP_OPTIONS, PANEL_SCH_GRIDS, PANEL_SCH_EDIT_OPTIONS, PANEL_SCH_ANNO_OPTIONS, PANEL_SCH_COLORS, + PANEL_SCH_TOOLBARS, PANEL_SCH_FIELD_NAME_TEMPLATES, PANEL_SCH_SIMULATOR, @@ -86,6 +88,7 @@ enum FRAME_T PANEL_FP_GRIDS, PANEL_FP_EDIT_OPTIONS, PANEL_FP_COLORS, + PANEL_FP_TOOLBARS, PANEL_FP_DEFAULT_FIELDS, PANEL_FP_DEFAULT_GRAPHICS_VALUES, PANEL_FP_ORIGINS_AXES, @@ -94,22 +97,26 @@ enum FRAME_T PANEL_PCB_GRIDS, PANEL_PCB_EDIT_OPTIONS, PANEL_PCB_COLORS, + PANEL_PCB_TOOLBARS, PANEL_PCB_ACTION_PLUGINS, PANEL_PCB_ORIGINS_AXES, PANEL_3DV_DISPLAY_OPTIONS, PANEL_3DV_OPENGL, PANEL_3DV_RAYTRACING, + PANEL_3DV_TOOLBARS, PANEL_GBR_DISPLAY_OPTIONS, PANEL_GBR_EDIT_OPTIONS, PANEL_GBR_EXCELLON_OPTIONS, PANEL_GBR_GRIDS, PANEL_GBR_COLORS, + PANEL_GBR_TOOLBARS, PANEL_DS_DISPLAY_OPTIONS, PANEL_DS_GRIDS, PANEL_DS_COLORS, + PANEL_DS_TOOLBARS, // Library table dialogs are transient and are never returned DIALOG_CONFIGUREPATHS, diff --git a/include/widgets/split_button.h b/include/widgets/split_button.h index f2d82484b1..e43c0c6142 100644 --- a/include/widgets/split_button.h +++ b/include/widgets/split_button.h @@ -44,6 +44,7 @@ public: void SetMinSize( const wxSize& aSize ) override; void SetWidthPadding( int aPadding ); void SetLabel( const wxString& aLabel ) override; + bool Enable( bool aEnable = true ) override; protected: void OnKillFocus( wxFocusEvent& aEvent ); @@ -54,8 +55,6 @@ protected: void OnPaint( wxPaintEvent& WXUNUSED( aEvent ) ); void onThemeChanged( wxSysColourChangedEvent &aEvent ); - bool Enable( bool aEnable = true ) override; - private: int m_stateButton = 0; int m_stateMenu = 0;