Add action info to Undo/Redo menus.

Note that this only works where a BOARD_COMMIT or SCHEMATIC_COMMIT is used.
(BOARD_COMMIT is used almost universally in PCBNew, but SCHEMATIC_COMMIT
has very little adoption in EEschema so far.)
This commit is contained in:
Jeff Young 2023-06-07 14:35:25 +01:00
parent 30cbfc794f
commit d5b5a3eaf4
7 changed files with 61 additions and 3 deletions

View File

@ -407,6 +407,25 @@ void EDA_BASE_FRAME::HandleUpdateUIEvent( wxUpdateUIEvent& aEvent, EDA_BASE_FRAM
return; return;
} }
if( showRes && aEvent.GetId() == ACTIONS::undo.GetUIId() )
{
wxString msg = _( "Undo" );
if( enableRes )
msg += wxS( " " ) + aFrame->GetUndoActionDescription();
aEvent.SetText( msg );
}
else if( showRes && aEvent.GetId() == ACTIONS::redo.GetUIId() )
{
wxString msg = _( "Redo" );
if( enableRes )
msg += wxS( " " ) + aFrame->GetRedoActionDescription();
aEvent.SetText( msg );
}
if( isCut || isCopy || isPaste ) if( isCut || isCopy || isPaste )
{ {
wxWindow* focus = wxWindow::FindFocus(); wxWindow* focus = wxWindow::FindFocus();
@ -1394,6 +1413,24 @@ PICKED_ITEMS_LIST* EDA_BASE_FRAME::PopCommandFromRedoList( )
} }
wxString EDA_BASE_FRAME::GetUndoActionDescription() const
{
if( GetUndoCommandCount() > 0 )
return m_undoList.m_CommandsList.back()->GetDescription();
return wxEmptyString;
}
wxString EDA_BASE_FRAME::GetRedoActionDescription() const
{
if( GetRedoCommandCount() > 0 )
return m_redoList.m_CommandsList.back()->GetDescription();
return wxEmptyString;
}
void EDA_BASE_FRAME::OnModify() void EDA_BASE_FRAME::OnModify()
{ {
m_autoSaveRequired = true; m_autoSaveRequired = true;

View File

@ -119,6 +119,8 @@ void SCHEMATIC_COMMIT::pushLibEdit( const wxString& aMessage, int aCommitFlags )
if( Empty() ) if( Empty() )
return; return;
undoList.SetDescription( aMessage );
for( COMMIT_LINE& ent : m_changes ) for( COMMIT_LINE& ent : m_changes )
{ {
int changeType = ent.m_type & CHT_TYPE; int changeType = ent.m_type & CHT_TYPE;
@ -249,6 +251,8 @@ void SCHEMATIC_COMMIT::pushSchEdit( const wxString& aMessage, int aCommitFlags )
if( Empty() ) if( Empty() )
return; return;
undoList.SetDescription( aMessage );
SCHEMATIC& schematic = static_cast<SCH_EDIT_FRAME*>( m_toolMgr->GetToolHolder() )->Schematic(); SCHEMATIC& schematic = static_cast<SCH_EDIT_FRAME*>( m_toolMgr->GetToolHolder() )->Schematic();
std::vector<SCH_ITEM*> bulkAddedItems; std::vector<SCH_ITEM*> bulkAddedItems;
std::vector<SCH_ITEM*> bulkRemovedItems; std::vector<SCH_ITEM*> bulkRemovedItems;

View File

@ -193,7 +193,10 @@ void SCH_EDIT_FRAME::SaveCopyInUndoList( const PICKED_ITEMS_LIST& aItemsList,
} }
if( !commandToUndo ) if( !commandToUndo )
{
commandToUndo = new PICKED_ITEMS_LIST(); commandToUndo = new PICKED_ITEMS_LIST();
commandToUndo->SetDescription( aItemsList.GetDescription() );
}
// Copy picker list: // Copy picker list:
if( !commandToUndo->GetCount() ) if( !commandToUndo->GetCount() )

View File

@ -575,6 +575,9 @@ public:
virtual int GetUndoCommandCount() const { return m_undoList.m_CommandsList.size(); } virtual int GetUndoCommandCount() const { return m_undoList.m_CommandsList.size(); }
virtual int GetRedoCommandCount() const { return m_redoList.m_CommandsList.size(); } virtual int GetRedoCommandCount() const { return m_redoList.m_CommandsList.size(); }
virtual wxString GetUndoActionDescription() const;
virtual wxString GetRedoActionDescription() const;
int GetMaxUndoItems() const { return m_undoRedoCountMax; } int GetMaxUndoItems() const { return m_undoRedoCountMax; }
/** /**

View File

@ -30,6 +30,7 @@
#include <eda_item_flags.h> #include <eda_item_flags.h>
#include <functional> #include <functional>
#include <vector> #include <vector>
#include <wx/string.h>
class EDA_ITEM; class EDA_ITEM;
class PICKED_ITEMS_LIST; class PICKED_ITEMS_LIST;
@ -132,9 +133,6 @@ private:
*/ */
class PICKED_ITEMS_LIST class PICKED_ITEMS_LIST
{ {
private:
std::vector <ITEM_PICKER> m_ItemsList;
public: public:
PICKED_ITEMS_LIST(); PICKED_ITEMS_LIST();
~PICKED_ITEMS_LIST(); ~PICKED_ITEMS_LIST();
@ -288,6 +286,13 @@ public:
* @param aSource The list of items to copy to the list. * @param aSource The list of items to copy to the list.
*/ */
void CopyList( const PICKED_ITEMS_LIST& aSource ); void CopyList( const PICKED_ITEMS_LIST& aSource );
wxString GetDescription() const { return m_description; }
void SetDescription( const wxString& aDescription ) { m_description = aDescription; }
private:
wxString m_description;
std::vector<ITEM_PICKER> m_ItemsList;
}; };

View File

@ -245,6 +245,8 @@ void BOARD_COMMIT::Push( const wxString& aMessage, int aCommitFlags )
if( Empty() ) if( Empty() )
return; return;
undoList.SetDescription( aMessage );
std::shared_ptr<CONNECTIVITY_DATA> connectivity = board->GetConnectivity(); std::shared_ptr<CONNECTIVITY_DATA> connectivity = board->GetConnectivity();
// Note: // Note:

View File

@ -293,6 +293,7 @@ void PCB_BASE_EDIT_FRAME::SaveCopyInUndoList( const PICKED_ITEMS_LIST& aItemsLis
UNDO_REDO aCommandType ) UNDO_REDO aCommandType )
{ {
PICKED_ITEMS_LIST* commandToUndo = new PICKED_ITEMS_LIST(); PICKED_ITEMS_LIST* commandToUndo = new PICKED_ITEMS_LIST();
commandToUndo->SetDescription( aItemsList.GetDescription() );
saveCopyInUndoList( commandToUndo, aItemsList, aCommandType ); saveCopyInUndoList( commandToUndo, aItemsList, aCommandType );
} }
@ -304,7 +305,10 @@ void PCB_BASE_EDIT_FRAME::AppendCopyToUndoList( const PICKED_ITEMS_LIST& aItemsL
PICKED_ITEMS_LIST* commandToUndo = PopCommandFromUndoList(); PICKED_ITEMS_LIST* commandToUndo = PopCommandFromUndoList();
if( !commandToUndo ) if( !commandToUndo )
{
commandToUndo = new PICKED_ITEMS_LIST(); commandToUndo = new PICKED_ITEMS_LIST();
commandToUndo->SetDescription( aItemsList.GetDescription() );
}
saveCopyInUndoList( commandToUndo, aItemsList, aCommandType ); saveCopyInUndoList( commandToUndo, aItemsList, aCommandType );
} }