diff --git a/common/widgets/paged_dialog.cpp b/common/widgets/paged_dialog.cpp index 6d3d22d932..7886256315 100644 --- a/common/widgets/paged_dialog.cpp +++ b/common/widgets/paged_dialog.cpp @@ -97,7 +97,6 @@ PAGED_DIALOG::PAGED_DIALOG( wxWindow* aParent, const wxString& aTitle, bool aSho wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 5 ); } - if( !aAuxiliaryAction.IsEmpty() ) { m_auxiliaryButton = new wxButton( this, wxID_ANY, aAuxiliaryAction ); @@ -124,21 +123,13 @@ PAGED_DIALOG::PAGED_DIALOG( wxWindow* aParent, const wxString& aTitle, bool aSho m_hash_key = aTitle; if( m_auxiliaryButton ) - { - m_auxiliaryButton->Bind( wxEVT_COMMAND_BUTTON_CLICKED, &PAGED_DIALOG::onAuxiliaryAction, - this ); - } + m_auxiliaryButton->Bind( wxEVT_COMMAND_BUTTON_CLICKED, &PAGED_DIALOG::onAuxiliaryAction, this ); if( m_resetButton ) - { m_resetButton->Bind( wxEVT_COMMAND_BUTTON_CLICKED, &PAGED_DIALOG::onResetButton, this ); - } if( m_openPrefsDirButton ) - { - m_openPrefsDirButton->Bind( wxEVT_COMMAND_BUTTON_CLICKED, - &PAGED_DIALOG::onOpenPreferencesButton, this ); - } + m_openPrefsDirButton->Bind( wxEVT_COMMAND_BUTTON_CLICKED, &PAGED_DIALOG::onOpenPrefsDir, this ); m_treebook->Bind( wxEVT_CHAR_HOOK, &PAGED_DIALOG::onCharHook, this ); m_treebook->Bind( wxEVT_TREEBOOK_PAGE_CHANGED, &PAGED_DIALOG::onPageChanged, this ); @@ -161,6 +152,12 @@ void PAGED_DIALOG::finishInitialization() m_treebook->Layout(); m_treebook->Fit(); + // Add a bit of width to the treeCtrl for scrollbars + wxSize ctrlSize = m_treebook->GetTreeCtrl()->GetSize(); + ctrlSize.x += 20; + m_treebook->GetTreeCtrl()->SetMinSize( ctrlSize ); + m_treebook->Layout(); + finishDialogSettings(); } @@ -195,21 +192,13 @@ PAGED_DIALOG::~PAGED_DIALOG() g_lastParentPage[ m_title ] = lastParentPage; if( m_auxiliaryButton ) - { - m_auxiliaryButton->Unbind( wxEVT_COMMAND_BUTTON_CLICKED, &PAGED_DIALOG::onAuxiliaryAction, - this ); - } + m_auxiliaryButton->Unbind( wxEVT_COMMAND_BUTTON_CLICKED, &PAGED_DIALOG::onAuxiliaryAction, this ); if( m_resetButton ) - { m_resetButton->Unbind( wxEVT_COMMAND_BUTTON_CLICKED, &PAGED_DIALOG::onResetButton, this ); - } if( m_openPrefsDirButton ) - { - m_openPrefsDirButton->Unbind( wxEVT_COMMAND_BUTTON_CLICKED, - &PAGED_DIALOG::onOpenPreferencesButton, this ); - } + m_openPrefsDirButton->Unbind( wxEVT_COMMAND_BUTTON_CLICKED, &PAGED_DIALOG::onOpenPrefsDir, this ); m_treebook->Unbind( wxEVT_CHAR_HOOK, &PAGED_DIALOG::onCharHook, this ); m_treebook->Unbind( wxEVT_TREEBOOK_PAGE_CHANGED, &PAGED_DIALOG::onPageChanged, this ); @@ -483,7 +472,7 @@ void PAGED_DIALOG::onResetButton( wxCommandEvent& aEvent ) } } -void PAGED_DIALOG::onOpenPreferencesButton( wxCommandEvent& aEvent ) +void PAGED_DIALOG::onOpenPrefsDir( wxCommandEvent& aEvent ) { wxString dir( PATHS::GetUserSettingsPath() ); LaunchExternal( dir ); diff --git a/eeschema/dialogs/panel_template_fieldnames.cpp b/eeschema/dialogs/panel_template_fieldnames.cpp index c308e4ad70..7ab9b35b03 100644 --- a/eeschema/dialogs/panel_template_fieldnames.cpp +++ b/eeschema/dialogs/panel_template_fieldnames.cpp @@ -61,6 +61,8 @@ PANEL_TEMPLATE_FIELDNAMES::PANEL_TEMPLATE_FIELDNAMES( wxWindow* aWindow, m_addFieldButton->SetBitmap( KiBitmapBundle( BITMAPS::small_plus ) ); m_deleteFieldButton->SetBitmap( KiBitmapBundle( BITMAPS::small_trash ) ); + m_bpMoveUp->SetBitmap( KiBitmapBundle( BITMAPS::small_up ) ); + m_bpMoveDown->SetBitmap( KiBitmapBundle( BITMAPS::small_down ) ); m_checkboxColWidth = m_grid->GetColSize( 1 ); @@ -105,6 +107,9 @@ void PANEL_TEMPLATE_FIELDNAMES::OnAddButtonClick( wxCommandEvent& event ) // wx documentation is wrong, SetGridCursor does not make visible. m_grid->MakeCellVisible( row, 0 ); m_grid->SetGridCursor( row, 0 ); + + m_grid->EnableCellEditControl( true ); + m_grid->ShowCellEditControl(); } @@ -122,7 +127,11 @@ void PANEL_TEMPLATE_FIELDNAMES::OnDeleteButtonClick( wxCommandEvent& event ) return; // Reverse sort so deleting a row doesn't change the indexes of the other rows. - selectedRows.Sort( []( int* first, int* second ) { return *second - *first; } ); + selectedRows.Sort( + []( int* first, int* second ) + { + return *second - *first; + } ); for( int row : selectedRows ) { @@ -135,6 +144,59 @@ void PANEL_TEMPLATE_FIELDNAMES::OnDeleteButtonClick( wxCommandEvent& event ) } +void swapRows( WX_GRID* aGrid, int aRowA, int aRowB ) +{ + for( int col = 0; col < aGrid->GetNumberCols(); ++col ) + { + wxString temp = aGrid->GetCellValue( aRowA, col ); + aGrid->SetCellValue( aRowA, col, aGrid->GetCellValue( aRowB, col ) ); + aGrid->SetCellValue( aRowB, col, temp ); + } +} + + +void PANEL_TEMPLATE_FIELDNAMES::OnMoveUp( wxCommandEvent& event ) +{ + if( !m_grid->CommitPendingChanges() ) + return; + + int i = m_grid->GetGridCursorRow(); + + if( i > 0 ) + { + swapRows( m_grid, i, i - 1 ); + + m_grid->SetGridCursor( i - 1, m_grid->GetGridCursorCol() ); + m_grid->MakeCellVisible( m_grid->GetGridCursorRow(), m_grid->GetGridCursorCol() ); + } + else + { + wxBell(); + } +} + + +void PANEL_TEMPLATE_FIELDNAMES::OnMoveDown( wxCommandEvent& event ) +{ + if( !m_grid->CommitPendingChanges() ) + return; + + int i = m_grid->GetGridCursorRow(); + + if( i >= 0 && i + 1 < m_grid->GetNumberRows() ) + { + swapRows( m_grid, i, i + 1 ); + + m_grid->SetGridCursor( i + 1, m_grid->GetGridCursorCol() ); + m_grid->MakeCellVisible( m_grid->GetGridCursorRow(), m_grid->GetGridCursorCol() ); + } + else + { + wxBell(); + } +} + + bool PANEL_TEMPLATE_FIELDNAMES::TransferDataToGrid() { m_grid->Freeze(); @@ -206,11 +268,10 @@ bool PANEL_TEMPLATE_FIELDNAMES::TransferDataFromWindow() { wxString msg; - msg.Printf( _( "The field name \"%s\" contains trailing and/or leading white" - "space." ), field.m_Name ); + msg.Printf( _( "The field name '%s' contains trailing and/or leading white space." ), + field.m_Name ); - wxMessageDialog dlg( this, msg, _( "Warning" ), - wxOK | wxCANCEL | wxCENTER | wxICON_WARNING ); + wxMessageDialog dlg( this, msg, _( "Warning" ), wxOK|wxCANCEL|wxCENTER|wxICON_WARNING ); dlg.SetExtendedMessage( _( "This may result in what appears to be duplicate field " "names but are actually unique names differing only by " @@ -241,7 +302,7 @@ bool PANEL_TEMPLATE_FIELDNAMES::TransferDataFromWindow() m_templateMgr->Format( &sf, true ); wxString record = From_UTF8( sf.GetString().c_str() ); - record.Replace( wxT(" "), wxT(" "), true ); // double space to single + record.Replace( wxT( " " ), wxT( " " ), true ); // double space to single cfg->m_Drawing.field_names = record.ToStdString(); } diff --git a/eeschema/dialogs/panel_template_fieldnames.h b/eeschema/dialogs/panel_template_fieldnames.h index 4dcec62735..724a2221dc 100644 --- a/eeschema/dialogs/panel_template_fieldnames.h +++ b/eeschema/dialogs/panel_template_fieldnames.h @@ -58,6 +58,8 @@ protected: private: void AdjustGridColumns( int aWidth ); + void OnMoveUp( wxCommandEvent& event ) override; + void OnMoveDown( wxCommandEvent& event ) override; void OnSizeGrid( wxSizeEvent& event ) override; bool TransferDataToWindow() override; diff --git a/eeschema/dialogs/panel_template_fieldnames_base.cpp b/eeschema/dialogs/panel_template_fieldnames_base.cpp index 788bdc0721..ce15367c35 100644 --- a/eeschema/dialogs/panel_template_fieldnames_base.cpp +++ b/eeschema/dialogs/panel_template_fieldnames_base.cpp @@ -64,6 +64,16 @@ PANEL_TEMPLATE_FIELDNAMES_BASE::PANEL_TEMPLATE_FIELDNAMES_BASE( wxWindow* parent m_addFieldButton = new STD_BITMAP_BUTTON( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 ); bSizer10->Add( m_addFieldButton, 0, wxTOP|wxBOTTOM|wxLEFT, 5 ); + m_bpMoveUp = new STD_BITMAP_BUTTON( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 ); + m_bpMoveUp->SetToolTip( _("Move up") ); + + bSizer10->Add( m_bpMoveUp, 0, wxTOP|wxBOTTOM|wxLEFT, 5 ); + + m_bpMoveDown = new STD_BITMAP_BUTTON( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 ); + m_bpMoveDown->SetToolTip( _("Move down") ); + + bSizer10->Add( m_bpMoveDown, 0, wxTOP|wxBOTTOM|wxLEFT, 5 ); + bSizer10->Add( 20, 0, 0, wxEXPAND, 5 ); @@ -81,6 +91,8 @@ PANEL_TEMPLATE_FIELDNAMES_BASE::PANEL_TEMPLATE_FIELDNAMES_BASE( wxWindow* parent // Connect Events m_grid->Connect( wxEVT_SIZE, wxSizeEventHandler( PANEL_TEMPLATE_FIELDNAMES_BASE::OnSizeGrid ), NULL, this ); m_addFieldButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_TEMPLATE_FIELDNAMES_BASE::OnAddButtonClick ), NULL, this ); + m_bpMoveUp->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_TEMPLATE_FIELDNAMES_BASE::OnMoveUp ), NULL, this ); + m_bpMoveDown->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_TEMPLATE_FIELDNAMES_BASE::OnMoveDown ), NULL, this ); m_deleteFieldButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_TEMPLATE_FIELDNAMES_BASE::OnDeleteButtonClick ), NULL, this ); } @@ -89,6 +101,8 @@ PANEL_TEMPLATE_FIELDNAMES_BASE::~PANEL_TEMPLATE_FIELDNAMES_BASE() // Disconnect Events m_grid->Disconnect( wxEVT_SIZE, wxSizeEventHandler( PANEL_TEMPLATE_FIELDNAMES_BASE::OnSizeGrid ), NULL, this ); m_addFieldButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_TEMPLATE_FIELDNAMES_BASE::OnAddButtonClick ), NULL, this ); + m_bpMoveUp->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_TEMPLATE_FIELDNAMES_BASE::OnMoveUp ), NULL, this ); + m_bpMoveDown->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_TEMPLATE_FIELDNAMES_BASE::OnMoveDown ), NULL, this ); m_deleteFieldButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_TEMPLATE_FIELDNAMES_BASE::OnDeleteButtonClick ), NULL, this ); } diff --git a/eeschema/dialogs/panel_template_fieldnames_base.fbp b/eeschema/dialogs/panel_template_fieldnames_base.fbp index 2991fa1ddd..8e14fddc13 100644 --- a/eeschema/dialogs/panel_template_fieldnames_base.fbp +++ b/eeschema/dialogs/panel_template_fieldnames_base.fbp @@ -306,6 +306,156 @@ <event name="OnButtonClick">OnAddButtonClick</event> </object> </object> + <object class="sizeritem" expanded="true"> + <property name="border">5</property> + <property name="flag">wxTOP|wxBOTTOM|wxLEFT</property> + <property name="proportion">0</property> + <object class="wxBitmapButton" expanded="true"> + <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">Move Up</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_bpMoveUp</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">Move up</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">OnMoveUp</event> + </object> + </object> + <object class="sizeritem" expanded="true"> + <property name="border">5</property> + <property name="flag">wxTOP|wxBOTTOM|wxLEFT</property> + <property name="proportion">0</property> + <object class="wxBitmapButton" expanded="true"> + <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">Move Down</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_bpMoveDown</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">Move down</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">OnMoveDown</event> + </object> + </object> <object class="sizeritem" expanded="true"> <property name="border">5</property> <property name="flag">wxEXPAND</property> diff --git a/eeschema/dialogs/panel_template_fieldnames_base.h b/eeschema/dialogs/panel_template_fieldnames_base.h index fb86cdd817..034563c3d9 100644 --- a/eeschema/dialogs/panel_template_fieldnames_base.h +++ b/eeschema/dialogs/panel_template_fieldnames_base.h @@ -41,11 +41,15 @@ class PANEL_TEMPLATE_FIELDNAMES_BASE : public wxPanel wxStaticText* m_title; WX_GRID* m_grid; STD_BITMAP_BUTTON* m_addFieldButton; + STD_BITMAP_BUTTON* m_bpMoveUp; + STD_BITMAP_BUTTON* m_bpMoveDown; STD_BITMAP_BUTTON* m_deleteFieldButton; // Virtual event handlers, override them in your derived class virtual void OnSizeGrid( wxSizeEvent& event ) { event.Skip(); } virtual void OnAddButtonClick( wxCommandEvent& event ) { event.Skip(); } + virtual void OnMoveUp( wxCommandEvent& event ) { event.Skip(); } + virtual void OnMoveDown( wxCommandEvent& event ) { event.Skip(); } virtual void OnDeleteButtonClick( wxCommandEvent& event ) { event.Skip(); } diff --git a/include/widgets/paged_dialog.h b/include/widgets/paged_dialog.h index d50ea23f14..4753310d15 100644 --- a/include/widgets/paged_dialog.h +++ b/include/widgets/paged_dialog.h @@ -60,7 +60,7 @@ protected: virtual void onAuxiliaryAction( wxCommandEvent& aEvent ) { aEvent.Skip(); } virtual void onResetButton( wxCommandEvent& aEvent ); - virtual void onOpenPreferencesButton( wxCommandEvent& aEvent ); + virtual void onOpenPrefsDir( wxCommandEvent& aEvent ); virtual void onPageChanged( wxBookCtrlEvent& aEvent ); virtual void onPageChanging( wxBookCtrlEvent& aEvent ); virtual void onCharHook( wxKeyEvent& aEvent );