diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index 5eb404680e..408be1037c 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -293,6 +293,7 @@ set( COMMON_SRCS config_params.cpp confirm.cpp convert_basic_shapes_to_polygon.cpp + cursor_store.cpp dialog_shim.cpp displlst.cpp dpi_scaling.cpp diff --git a/common/cursor_store.cpp b/common/cursor_store.cpp new file mode 100644 index 0000000000..616c089211 --- /dev/null +++ b/common/cursor_store.cpp @@ -0,0 +1,100 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2019 KiCad Developers, see CHANGELOG.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 + +#include +#include + + +/** + * Construct a cursor for the given definition. + * + * How to do this depends on the platform, see + * http://docs.wxwidgets.org/trunk/classwx_cursor.html + * + * @param aDef the cursor definition + * @return a newly constructed cursor if the platform is supported, + * else wxNullCursor + */ +wxCursor constructCursor( const CURSOR_STORE::CURSOR_DEF& aDef ) +{ +#if defined( __WXMSW__ ) or defined( __WXMAC__ ) + + wxBitmap img_bitmap( + reinterpret_cast( aDef.m_image_data ), aDef.m_size.x, aDef.m_size.y ); + wxBitmap msk_bitmap( + reinterpret_cast( aDef.m_mask_data ), aDef.m_size.x, aDef.m_size.y ); + img_bitmap.SetMask( new wxMask( msk_bitmap ) ); + + wxImage image( img_bitmap.ConvertToImage() ); + +#if defined( __WXMSW__ ) + image.SetMaskColour( 255, 255, 255 ); +#endif + + image.SetOption( wxIMAGE_OPTION_CUR_HOTSPOT_X, aDef.m_hotspot.x ); + image.SetOption( wxIMAGE_OPTION_CUR_HOTSPOT_Y, aDef.m_hotspot.y ); + + return wxCursor{ image }; + +#elif defined( __WXGTK__ ) or defined( __WXMOTIF__ ) + + return wxCursor{ + reinterpret_cast( aDef.m_image_data ), + aDef.m_size.x, + aDef.m_size.y, + aDef.m_hotspot.x, + aDef.m_hotspot.y, + reinterpret_cast( aDef.m_mask_data ), + }; + +#else + wxASSERT_MSG( false, "Unknown platform for cursor construction." ); + return wxNullCursor; +#endif +} + + +CURSOR_STORE::CURSOR_STORE( const std::vector& aDefs ) +{ + for( const auto& def : aDefs ) + { + m_store[def.m_id_key] = constructCursor( def ); + } +} + + +const wxCursor& CURSOR_STORE::Get( int aIdKey ) const +{ + const auto find_iter = m_store.find( aIdKey ); + + if( find_iter != m_store.end() ) + { + return find_iter->second; + } + + wxASSERT_MSG( false, + wxString::Format( "Could not find cursor with ID %d", static_cast( aIdKey ) ) ); + return wxNullCursor; +} \ No newline at end of file diff --git a/eeschema/sch_edit_frame.h b/eeschema/sch_edit_frame.h index 9e0c4a5aa6..9445db3cbb 100644 --- a/eeschema/sch_edit_frame.h +++ b/eeschema/sch_edit_frame.h @@ -1506,12 +1506,6 @@ public: virtual const BOX2I GetDocumentExtents() const override; - ///> Probe cursor, used by circuit simulator - const static wxCursor CURSOR_PROBE; - - ///> Tuner cursor, used by circuit simulator - const static wxCursor CURSOR_TUNE; - DECLARE_EVENT_TABLE() }; diff --git a/eeschema/schedit.cpp b/eeschema/schedit.cpp index c83b110d8a..05d3ca6b1a 100644 --- a/eeschema/schedit.cpp +++ b/eeschema/schedit.cpp @@ -50,6 +50,7 @@ #include #include #include +#include void SCH_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event ) @@ -589,12 +590,12 @@ void SCH_EDIT_FRAME::OnSelectTool( wxCommandEvent& aEvent ) #ifdef KICAD_SPICE case ID_SIM_PROBE: SetToolID( id, -1, _( "Add a simulator probe" ) ); - //GAL TODO: m_canvas->SetCurrentCursor( CURSOR_PROBE ); + //GAL TODO: m_canvas->SetCurrentCursor( SIMULATION_CURSORS::GetCursor( SIMULATION_CURSORS::CURSOR::PROBE ) ); break; case ID_SIM_TUNE: SetToolID( id, -1, _( "Select a value to be tuned" ) ); - //GAL TODO: m_canvas->SetCurrentCursor( CURSOR_TUNE ); + //GAL TODO: m_canvas->SetCurrentCursor( SIMULATION_CURSORS::GetCursor( SIMULATION_CURSORS::CURSOR::TUNE ) ); break; #endif /* KICAD_SPICE */ diff --git a/eeschema/sim/simulate.cpp b/eeschema/sim/simulate.cpp index aca3799474..5dd6dcbf88 100644 --- a/eeschema/sim/simulate.cpp +++ b/eeschema/sim/simulate.cpp @@ -36,111 +36,4 @@ void SCH_EDIT_FRAME::OnSimulate( wxCommandEvent& event ) simFrame->Iconize( false ); simFrame->Raise(); -} - -// I apologize for the following lines, but this is more or less what wxWidgets -// authors suggest (http://docs.wxwidgets.org/trunk/classwx_cursor.html) - -static const unsigned char cursor_probe[] = { - 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x70, - 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x20, 0x04, - 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x84, 0x00, - 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x80, 0x10, 0x00, - 0x00, 0x40, 0x08, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x10, 0x02, 0x00, - 0x00, 0x08, 0x01, 0x00, 0x80, 0x85, 0x00, 0x00, 0x40, 0x42, 0x00, 0x00, - 0x20, 0x21, 0x00, 0x00, 0x20, 0x11, 0x00, 0x00, 0x20, 0x09, 0x00, 0x00, - 0x20, 0x16, 0x00, 0x00, 0x50, 0x10, 0x00, 0x00, 0x88, 0x08, 0x00, 0x00, - 0x44, 0x07, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 }; - -static const unsigned char cursor_probe_mask[] { - 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x70, - 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0xe0, 0x07, - 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0xf8, 0x01, 0x00, 0x00, 0xfc, 0x00, - 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x80, 0x1f, 0x00, - 0x00, 0xc0, 0x0f, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xf0, 0x03, 0x00, - 0x00, 0xf8, 0x01, 0x00, 0x80, 0xfd, 0x00, 0x00, 0xc0, 0x7f, 0x00, 0x00, - 0xe0, 0x3f, 0x00, 0x00, 0xe0, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, - 0xe0, 0x1f, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, - 0x7c, 0x07, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 }; - -static const unsigned char cursor_tune[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0xc0, 0x0f, - 0x00, 0x00, 0xe0, 0x1f, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xf8, 0x0f, - 0x00, 0x00, 0xfc, 0x07, 0x00, 0x00, 0xfe, 0x03, 0x00, 0x00, 0xff, 0x01, - 0x00, 0x80, 0xff, 0x00, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0xe0, 0x3f, 0x00, - 0x00, 0xe0, 0x1f, 0x00, 0x00, 0xfc, 0x0f, 0x00, 0x00, 0xfc, 0x07, 0x00, - 0x00, 0xfc, 0x03, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, - 0x00, 0xea, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, - 0x40, 0x01, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, - 0x2c, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00 }; - -static const unsigned char cursor_tune_mask[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0xc0, 0x0f, - 0x00, 0x00, 0xe0, 0x1f, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xf8, 0x0f, - 0x00, 0x00, 0xfc, 0x07, 0x00, 0x00, 0xfe, 0x03, 0x00, 0x00, 0xff, 0x01, - 0x00, 0x80, 0xff, 0x00, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0xe0, 0x3f, 0x00, - 0x00, 0xe0, 0x1f, 0x00, 0x00, 0xfc, 0x0f, 0x00, 0x00, 0xfc, 0x07, 0x00, - 0x00, 0xfc, 0x03, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, - 0x00, 0xee, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, - 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x3c, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00 }; - -#if defined(__WXMSW__) or defined(__WXMAC__) -struct SIM_CURSORS_INIT -{ -public: - static wxImage& GetProbeImage() - { - static wxImage* probe_image = NULL; - - if( probe_image == NULL ) - { - wxBitmap probe_bitmap( (const char*) cursor_probe, 32, 32 ); - wxBitmap probe_mask_bitmap( (const char*) cursor_probe_mask, 32, 32 ); - probe_bitmap.SetMask( new wxMask( probe_mask_bitmap ) ); - probe_image = new wxImage( probe_bitmap.ConvertToImage() ); -#ifdef __WXMSW__ - probe_image->SetMaskColour( 255, 255, 255 ); -#endif - probe_image->SetOption( wxIMAGE_OPTION_CUR_HOTSPOT_X, 0 ); - probe_image->SetOption( wxIMAGE_OPTION_CUR_HOTSPOT_Y, 31 ); - } - - return *probe_image; - } - - static wxImage& GetTuneImage() - { - static wxImage* tune_image = NULL; - - if( tune_image == NULL ) - { - wxBitmap tune_bitmap( (const char*) cursor_tune, 32, 32 ); - wxBitmap tune_mask_bitmap( (const char*) cursor_tune_mask, 32, 32 ); - tune_bitmap.SetMask( new wxMask( tune_mask_bitmap ) ); - tune_image = new wxImage( tune_bitmap.ConvertToImage() ); -#ifdef __WXMSW__ - tune_image->SetMaskColour( 255, 255, 255 ); -#endif - tune_image->SetOption( wxIMAGE_OPTION_CUR_HOTSPOT_X, 0 ); - tune_image->SetOption( wxIMAGE_OPTION_CUR_HOTSPOT_Y, 31 ); - } - - return *tune_image; - } -}; - -const wxCursor SCH_EDIT_FRAME::CURSOR_PROBE( SIM_CURSORS_INIT::GetProbeImage() ); -const wxCursor SCH_EDIT_FRAME::CURSOR_TUNE( SIM_CURSORS_INIT::GetTuneImage() ); -#elif defined(__WXGTK__) or defined(__WXMOTIF__) -const wxCursor SCH_EDIT_FRAME::CURSOR_PROBE( (const char*) cursor_probe, 32, 32, 0, 31, (const char*) cursor_probe_mask ); -const wxCursor SCH_EDIT_FRAME::CURSOR_TUNE( (const char*) cursor_tune, 32, 32, 1, 30, (const char*) cursor_tune_mask ); -#endif +} \ No newline at end of file diff --git a/eeschema/simulation_cursors.cpp b/eeschema/simulation_cursors.cpp new file mode 100644 index 0000000000..15ff476307 --- /dev/null +++ b/eeschema/simulation_cursors.cpp @@ -0,0 +1,103 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2019 KiCad Developers, see CHANGELOG.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 + +#include + +static const unsigned char cursor_probe[] = { + 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x70, + 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x20, 0x04, + 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x84, 0x00, + 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x80, 0x10, 0x00, + 0x00, 0x40, 0x08, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x10, 0x02, 0x00, + 0x00, 0x08, 0x01, 0x00, 0x80, 0x85, 0x00, 0x00, 0x40, 0x42, 0x00, 0x00, + 0x20, 0x21, 0x00, 0x00, 0x20, 0x11, 0x00, 0x00, 0x20, 0x09, 0x00, 0x00, + 0x20, 0x16, 0x00, 0x00, 0x50, 0x10, 0x00, 0x00, 0x88, 0x08, 0x00, 0x00, + 0x44, 0x07, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 }; + +static const unsigned char cursor_probe_mask[] { + 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x70, + 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0xe0, 0x07, + 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0xf8, 0x01, 0x00, 0x00, 0xfc, 0x00, + 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x80, 0x1f, 0x00, + 0x00, 0xc0, 0x0f, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xf0, 0x03, 0x00, + 0x00, 0xf8, 0x01, 0x00, 0x80, 0xfd, 0x00, 0x00, 0xc0, 0x7f, 0x00, 0x00, + 0xe0, 0x3f, 0x00, 0x00, 0xe0, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, + 0xe0, 0x1f, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, + 0x7c, 0x07, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 }; + +static const unsigned char cursor_tune[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0xc0, 0x0f, + 0x00, 0x00, 0xe0, 0x1f, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xf8, 0x0f, + 0x00, 0x00, 0xfc, 0x07, 0x00, 0x00, 0xfe, 0x03, 0x00, 0x00, 0xff, 0x01, + 0x00, 0x80, 0xff, 0x00, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0xe0, 0x3f, 0x00, + 0x00, 0xe0, 0x1f, 0x00, 0x00, 0xfc, 0x0f, 0x00, 0x00, 0xfc, 0x07, 0x00, + 0x00, 0xfc, 0x03, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, + 0x00, 0xea, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, + 0x40, 0x01, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, + 0x2c, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00 }; + +static const unsigned char cursor_tune_mask[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0xc0, 0x0f, + 0x00, 0x00, 0xe0, 0x1f, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xf8, 0x0f, + 0x00, 0x00, 0xfc, 0x07, 0x00, 0x00, 0xfe, 0x03, 0x00, 0x00, 0xff, 0x01, + 0x00, 0x80, 0xff, 0x00, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0xe0, 0x3f, 0x00, + 0x00, 0xe0, 0x1f, 0x00, 0x00, 0xfc, 0x0f, 0x00, 0x00, 0xfc, 0x07, 0x00, + 0x00, 0xfc, 0x03, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, + 0x00, 0xee, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, + 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00 }; + +#include + +static const std::vector simulation_cursors = { + { + static_cast( SIMULATION_CURSORS::CURSOR::TUNE ), + cursor_tune, + cursor_tune_mask, + { 32, 32 }, + { 1, 30 }, + }, + { + static_cast( SIMULATION_CURSORS::CURSOR::PROBE ), + cursor_probe, + cursor_probe_mask, + { 32, 32 }, + { 0, 31 }, + }, +}; + +const wxCursor& SIMULATION_CURSORS::GetCursor( CURSOR aCursorType ) +{ + static CURSOR_STORE store( simulation_cursors ); + return store.Get( static_cast( aCursorType ) ); +} diff --git a/eeschema/simulation_cursors.h b/eeschema/simulation_cursors.h new file mode 100644 index 0000000000..7f8ca220a0 --- /dev/null +++ b/eeschema/simulation_cursors.h @@ -0,0 +1,48 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2019 KiCad Developers, see CHANGELOG.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 EESCHEMA_SIMULATION_CURSORS__H +#define EESCHEMA_SIMULATION_CURSORS__H + +#include + +/** + * Simple class to provide cursors for simulation functions. + * + * For now, it's using simple static-access, but could be made more advanced + * in future. + */ +class SIMULATION_CURSORS +{ +public: + ///> Probe cursor, used by circuit simulator + enum class CURSOR + { + PROBE, + TUNE, + }; + + static const wxCursor& GetCursor( CURSOR aCursorType ); +}; + +#endif // EESCHEMA_SIMULATION_CURSORS__H \ No newline at end of file diff --git a/include/cursor_store.h b/include/cursor_store.h new file mode 100644 index 0000000000..151fb6968d --- /dev/null +++ b/include/cursor_store.h @@ -0,0 +1,85 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2019 KiCad Developers, see CHANGELOG.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 CURSOR_STORE__H +#define CURSOR_STORE__H + +#include + +#include +#include + + +/** + * Simple class to construct and store cursors against unique ID keys. + * + * This can be used to lazily construct cursors as needed for specific + * applications. + */ +class CURSOR_STORE +{ +public: + /** + * Definition of a cursor + */ + struct CURSOR_DEF + { + ///> The ID key used to uniquely identify a cursor in a given store + int m_id_key; + + ///> The image data bitmap + const unsigned char* m_image_data; + + ///> The mask data bitmap + const unsigned char* m_mask_data; + + ///> The image size in pixels + wxSize m_size; + + ///> The "hotspot" where the cursor "is" in the image + wxPoint m_hotspot; + }; + + /** + * Construct a store with a pre-set list of cursors. + * + * In future, an "Add()" function could be added if stores need to + * dynamically add cursors. + * + * @param aDefs: the list of pre-set cursor definitions + */ + CURSOR_STORE( const std::vector& aDefs ); + + /** + * Get a given cursor by its ID + * @param aIdKey the ID key to look up + * @return the cursor, if found, else wxNullCursor + */ + const wxCursor& Get( int aIdKey ) const; + +private: + ///> Internal store of cursors by ID + std::map m_store; +}; + +#endif // CURSOR_STORE__H \ No newline at end of file