Pretty-print clipboard data.

This commit is contained in:
Jeff Young 2024-11-26 12:48:36 +00:00
parent f9238f58f4
commit dfbbb5afa1
4 changed files with 26 additions and 9 deletions

View File

@ -52,6 +52,7 @@
#include "symbol_saveas_type.h" #include "symbol_saveas_type.h"
#include <widgets/symbol_filedlg_save_as.h> #include <widgets/symbol_filedlg_save_as.h>
#include <io/kicad/kicad_io_utils.h>
void SYMBOL_EDIT_FRAME::UpdateTitle() void SYMBOL_EDIT_FRAME::UpdateTitle()
@ -1213,6 +1214,9 @@ void SYMBOL_EDIT_FRAME::CopySymbolToClipboard()
SCH_IO_KICAD_SEXPR::FormatLibSymbol( tmp.get(), formatter ); SCH_IO_KICAD_SEXPR::FormatLibSymbol( tmp.get(), formatter );
} }
std::string prettyData = formatter.GetString();
KICAD_FORMAT::Prettify( prettyData );
wxLogNull doNotLog; // disable logging of failed clipboard actions wxLogNull doNotLog; // disable logging of failed clipboard actions
auto clipboard = wxTheClipboard; auto clipboard = wxTheClipboard;
@ -1221,7 +1225,7 @@ void SYMBOL_EDIT_FRAME::CopySymbolToClipboard()
if( !clipboardLock || !clipboard->IsOpened() ) if( !clipboardLock || !clipboard->IsOpened() )
return; return;
auto data = new wxTextDataObject( wxString( formatter.GetString().c_str(), wxConvUTF8 ) ); auto data = new wxTextDataObject( wxString( prettyData.c_str(), wxConvUTF8 ) );
clipboard->SetData( data ); clipboard->SetData( data );
clipboard->Flush(); clipboard->Flush();

View File

@ -77,6 +77,7 @@
#include <wx/log.h> #include <wx/log.h>
#include <wx/treectrl.h> #include <wx/treectrl.h>
#include <wx/msgdlg.h> #include <wx/msgdlg.h>
#include <io/kicad/kicad_io_utils.h>
#include "sch_edit_table_tool.h" #include "sch_edit_table_tool.h"
#ifdef KICAD_IPC_API #ifdef KICAD_IPC_API
@ -1341,16 +1342,19 @@ bool SCH_EDITOR_CONTROL::doCopy( bool aUseDuplicateClipboard )
plugin.Format( &selection, &selPath, schematic, &formatter, true ); plugin.Format( &selection, &selPath, schematic, &formatter, true );
std::string prettyData = formatter.GetString();
KICAD_FORMAT::Prettify( prettyData );
if( selection.IsHover() ) if( selection.IsHover() )
m_toolMgr->RunAction( EE_ACTIONS::clearSelection ); m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
if( aUseDuplicateClipboard ) if( aUseDuplicateClipboard )
{ {
m_duplicateClipboard = formatter.GetString(); m_duplicateClipboard = prettyData;
return true; return true;
} }
return SaveClipboard( formatter.GetString() ); return SaveClipboard( prettyData );
} }

View File

@ -49,6 +49,7 @@
#include <sch_textbox.h> #include <sch_textbox.h>
#include <wx/textdlg.h> // for wxTextEntryDialog #include <wx/textdlg.h> // for wxTextEntryDialog
#include <math/util.h> // for KiROUND #include <math/util.h> // for KiROUND
#include <io/kicad/kicad_io_utils.h>
SYMBOL_EDITOR_EDIT_TOOL::SYMBOL_EDITOR_EDIT_TOOL() : SYMBOL_EDITOR_EDIT_TOOL::SYMBOL_EDITOR_EDIT_TOOL() :
EE_TOOL_BASE( "eeschema.SymbolEditTool" ), EE_TOOL_BASE( "eeschema.SymbolEditTool" ),
@ -919,7 +920,10 @@ int SYMBOL_EDITOR_EDIT_TOOL::Copy( const TOOL_EVENT& aEvent )
for( SCH_ITEM& item : symbol->GetDrawItems() ) for( SCH_ITEM& item : symbol->GetDrawItems() )
item.ClearFlags( STRUCT_DELETED ); item.ClearFlags( STRUCT_DELETED );
if( SaveClipboard( formatter.GetString() ) ) std::string prettyData = formatter.GetString();
KICAD_FORMAT::Prettify( prettyData );
if( SaveClipboard( prettyData ) )
return 0; return 0;
else else
return -1; return -1;

View File

@ -41,6 +41,7 @@
#include <pcb_io/kicad_sexpr/pcb_io_kicad_sexpr_parser.h> #include <pcb_io/kicad_sexpr/pcb_io_kicad_sexpr_parser.h>
#include <kicad_clipboard.h> #include <kicad_clipboard.h>
#include <kidialog.h> #include <kidialog.h>
#include <io/kicad/kicad_io_utils.h>
CLIPBOARD_IO::CLIPBOARD_IO(): CLIPBOARD_IO::CLIPBOARD_IO():
PCB_IO_KICAD_SEXPR(CTL_FOR_CLIPBOARD ), PCB_IO_KICAD_SEXPR(CTL_FOR_CLIPBOARD ),
@ -397,6 +398,9 @@ void CLIPBOARD_IO::SaveSelection( const PCB_SELECTION& aSelected, bool isFootpri
m_formatter.Print( 0, "\n)" ); m_formatter.Print( 0, "\n)" );
} }
std::string prettyData = m_formatter.GetString();
KICAD_FORMAT::Prettify( prettyData );
// These are placed at the end to minimize the open time of the clipboard // These are placed at the end to minimize the open time of the clipboard
wxLogNull doNotLog; // disable logging of failed clipboard actions wxLogNull doNotLog; // disable logging of failed clipboard actions
auto clipboard = wxTheClipboard; auto clipboard = wxTheClipboard;
@ -405,12 +409,11 @@ void CLIPBOARD_IO::SaveSelection( const PCB_SELECTION& aSelected, bool isFootpri
if( !clipboardLock || !clipboard->IsOpened() ) if( !clipboardLock || !clipboard->IsOpened() )
return; return;
clipboard->SetData( new wxTextDataObject( wxString( m_formatter.GetString().c_str(), clipboard->SetData( new wxTextDataObject( wxString( prettyData.c_str(), wxConvUTF8 ) ) );
wxConvUTF8 ) ) );
clipboard->Flush(); clipboard->Flush();
#ifndef __WXOSX__ #ifndef __WXOSX__
// This section exists to return the clipboard data, ensuring it has fully // This section exists to return the clipboard data, ensuring it has fully
// been processed by the system clipboard. This appears to be needed for // been processed by the system clipboard. This appears to be needed for
// extremely large clipboard copies on asynchronous linux clipboard managers // extremely large clipboard copies on asynchronous linux clipboard managers
@ -424,7 +427,7 @@ void CLIPBOARD_IO::SaveSelection( const PCB_SELECTION& aSelected, bool isFootpri
clipboard->GetData( data ); clipboard->GetData( data );
ignore_unused( data.GetText() ); ignore_unused( data.GetText() );
} }
#endif #endif
} }
@ -475,7 +478,9 @@ void CLIPBOARD_IO::SaveBoard( const wxString& aFileName, BOARD* aBoard,
m_out = &formatter; m_out = &formatter;
m_out->Print( 0, "(kicad_pcb (version %d) (generator \"pcbnew\") (generator_version \"%s\")\n", SEXPR_BOARD_FILE_VERSION, GetMajorMinorVersion().c_str().AsChar() ); m_out->Print( 0, "(kicad_pcb (version %d) (generator \"pcbnew\") (generator_version \"%s\")\n",
SEXPR_BOARD_FILE_VERSION,
GetMajorMinorVersion().c_str().AsChar() );
Format( aBoard, 1 ); Format( aBoard, 1 );