Browse Source
Handle pasting of image data from the clipboard
Handle pasting of image data from the clipboard
Also move some clipboard functions out of TOOL_MANAGER, as they had no dependency on that class, and are just free functions around wxTheClipboard.pcb_db
15 changed files with 303 additions and 137 deletions
-
1common/CMakeLists.txt
-
45common/bitmap_base.cpp
-
109common/clipboard.cpp
-
12common/reference_image.cpp
-
46common/tool/tool_manager.cpp
-
3eeschema/symbol_editor/symbol_editor.cpp
-
67eeschema/tools/sch_editor_control.cpp
-
7eeschema/tools/symbol_editor_edit_tool.cpp
-
5include/bitmap_base.h
-
55include/clipboard.h
-
6include/reference_image.h
-
19include/tool/tool_manager.h
-
27pagelayout_editor/tools/pl_edit_tool.cpp
-
3pcbnew/tools/edit_tool.cpp
-
35pcbnew/tools/pcb_control.cpp
@ -0,0 +1,109 @@ |
|||
/*
|
|||
* This program source code file is part of KiCad, a free EDA CAD application. |
|||
* |
|||
* Copyright (C) 2024 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 "clipboard.h"
|
|||
|
|||
#include <wx/clipbrd.h>
|
|||
#include <wx/image.h>
|
|||
#include <wx/log.h>
|
|||
|
|||
|
|||
bool SaveClipboard( const std::string& aTextUTF8 ) |
|||
{ |
|||
wxLogNull doNotLog; // disable logging of failed clipboard actions
|
|||
|
|||
if( wxTheClipboard->Open() ) |
|||
{ |
|||
// Store the UTF8 string as Unicode string in clipboard:
|
|||
wxTheClipboard->SetData( |
|||
new wxTextDataObject( wxString( aTextUTF8.c_str(), wxConvUTF8 ) ) ); |
|||
|
|||
wxTheClipboard->Flush(); // Allow data to be available after closing KiCad
|
|||
wxTheClipboard->Close(); |
|||
|
|||
return true; |
|||
} |
|||
|
|||
return false; |
|||
} |
|||
|
|||
|
|||
std::string GetClipboardUTF8() |
|||
{ |
|||
std::string result; |
|||
|
|||
wxLogNull doNotLog; // disable logging of failed clipboard actions
|
|||
|
|||
if( wxTheClipboard->Open() ) |
|||
{ |
|||
if( wxTheClipboard->IsSupported( wxDF_TEXT ) |
|||
|| wxTheClipboard->IsSupported( wxDF_UNICODETEXT ) ) |
|||
{ |
|||
wxTextDataObject data; |
|||
wxTheClipboard->GetData( data ); |
|||
|
|||
// The clipboard is expected containing a Unicode string, so return it
|
|||
// as UTF8 string
|
|||
result = data.GetText().utf8_str(); |
|||
} |
|||
|
|||
wxTheClipboard->Close(); |
|||
} |
|||
|
|||
return result; |
|||
} |
|||
|
|||
|
|||
std::unique_ptr<wxImage> GetImageFromClipboard() |
|||
{ |
|||
std::unique_ptr<wxImage> image; |
|||
wxLogNull doNotLog; // disable logging of failed clipboard actions
|
|||
|
|||
// First try for an image
|
|||
if( wxTheClipboard->Open() ) |
|||
{ |
|||
if( wxTheClipboard->IsSupported( wxDF_BITMAP ) ) |
|||
{ |
|||
wxImageDataObject data; |
|||
if( wxTheClipboard->GetData( data ) ) |
|||
{ |
|||
image = std::make_unique<wxImage>( data.GetImage() ); |
|||
} |
|||
} |
|||
else if( wxTheClipboard->IsSupported( wxDF_FILENAME ) ) |
|||
{ |
|||
wxFileDataObject data; |
|||
if( wxTheClipboard->GetData( data ) && data.GetFilenames().size() == 1 ) |
|||
{ |
|||
image = std::make_unique<wxImage>( data.GetFilenames()[0] ); |
|||
|
|||
if( !image->IsOk() ) |
|||
image.reset(); |
|||
} |
|||
} |
|||
|
|||
wxTheClipboard->Close(); |
|||
} |
|||
|
|||
return image; |
|||
} |
@ -0,0 +1,55 @@ |
|||
/* |
|||
* This program source code file is part of KiCad, a free EDA CAD application. |
|||
* |
|||
* Copyright (C) 2024 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 |
|||
*/ |
|||
|
|||
#pragma once |
|||
|
|||
#include <memory> |
|||
#include <string> |
|||
|
|||
class wxImage; |
|||
|
|||
/** |
|||
* Store information to the system clipboard. |
|||
* |
|||
* @param aText is the information to be stored, expected UTF8 encoding. The text will be |
|||
* stored as Unicode string (not stored as UTF8 string). |
|||
* @return False if error occurred. |
|||
*/ |
|||
bool SaveClipboard( const std::string& aTextUTF8 ); |
|||
|
|||
/** |
|||
* Return the information currently stored in the system clipboard. |
|||
* |
|||
* If data stored in the clipboard is in non-text format, empty string is returned. |
|||
* |
|||
* @note The clipboard is expected containing Unicode chars, not only ASCII7 chars. |
|||
* The returned string is UTF8 encoded |
|||
*/ |
|||
std::string GetClipboardUTF8(); |
|||
|
|||
/** |
|||
* Get image data from the clipboard, if there is any. |
|||
* |
|||
* If there's a filename there, and it can be loaded as an image, do that. |
|||
*/ |
|||
std::unique_ptr<wxImage> GetImageFromClipboard(); |
Write
Preview
Loading…
Cancel
Save
Reference in new issue