summaryrefslogtreecommitdiff
path: root/new/sweet_edit.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'new/sweet_edit.cpp')
-rw-r--r--new/sweet_edit.cpp244
1 files changed, 244 insertions, 0 deletions
diff --git a/new/sweet_edit.cpp b/new/sweet_edit.cpp
new file mode 100644
index 0000000..86c2039
--- /dev/null
+++ b/new/sweet_edit.cpp
@@ -0,0 +1,244 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2011 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
+ * Copyright (C) 2011 KiCad Developers, see change_log.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
+ */
+
+// wxWidgets imports
+#include <wx/wx.h>
+#include <wx/graphics.h>
+#include <wx/timer.h>
+#include <wx/event.h>
+#include <wx/wxprec.h>
+#include <wx/cmdline.h>
+
+// Graphics Abstraction Layer imports
+#include <gal/common/definitions.h>
+#include <gal/common/graphics_abstraction_layer.h>
+#include <gal/opengl/opengl_gal.h>
+#include <gal/common/stroke_font.h>
+#include <gal/common/color4d.h>
+#include <gal/font/newstroke_font.h>
+
+#include <math/vector2d.h>
+#include <math/matrix3x3.h>
+
+#include <sweet_editor_panel.h>
+
+#define screenSizeX 640
+#define screenSizeY 480
+
+
+
+/**
+ * Class SWEET_EDIT
+ * implements an editor for SWEET, including support for inheritance and
+ * LIB_TABLE configuration.
+ */
+class SWEET_FRAME: public wxFrame
+{
+public:
+ // @brief Constructor
+ SWEET_FRAME( wxWindow* parent, wxWindowID id, const wxString& title,
+ const wxPoint& pos, const wxSize& size );
+
+ // @brief Destructor
+ ~SWEET_FRAME();
+
+private:
+ bool m_isReady;
+ bool m_isPanning;
+
+ SCH::CANVAS* m_gal;
+
+ wxSize m_screenSize;
+ VECTOR2D m_worldSize;
+ VECTOR2D m_startMousePoint;
+ VECTOR2D m_startLookAtPoint;
+
+ /*
+ double m_alpha;
+
+ MATRIX3x3D m_startMatrix;
+
+ STROKE_FONT m_font;
+ */
+
+ // Event handlers
+ void OnMotion( wxMouseEvent& event );
+ void OnMouseWheel( wxMouseEvent& event );
+ void OnRightDown( wxMouseEvent& event );
+ void OnRightUp( wxMouseEvent& event );
+// void OnRedraw( wxCommandEvent& event );
+};
+
+
+SWEET_FRAME::SWEET_FRAME( wxWindow* parent, wxWindowID id, const wxString& title,
+ const wxPoint& pos, const wxSize& size ) :
+ wxFrame( parent, id, title, pos, size ),
+ m_screenSize( size.x, size.y )
+{
+ m_isPanning = false;
+
+ SWEET_EDITOR_PANEL* panel =
+ new SWEET_EDITOR_PANEL( this, wxID_ANY, wxPoint( 0, 0 ), wxSize( -1, -1 ), 0 );
+
+ m_gal = (SCH::CANVAS*) panel->FindWindowByName( wxT( "GLCanvas" ), panel );
+
+ wxASSERT( m_gal );
+
+ m_gal->SetMouseListener( this );
+
+ Connect( wxEVT_MOTION, wxMouseEventHandler( SWEET_FRAME::OnMotion ) );
+ Connect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( SWEET_FRAME::OnMouseWheel ) );
+ Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( SWEET_FRAME::OnRightDown ) );
+ Connect( wxEVT_RIGHT_UP, wxMouseEventHandler( SWEET_FRAME::OnRightUp ) );
+}
+
+
+SWEET_FRAME::~SWEET_FRAME()
+{
+ delete m_gal;
+}
+
+
+void SWEET_FRAME::OnMotion( wxMouseEvent& event )
+{
+ VECTOR2D mousePoint( event.GetX(), event.GetY() );
+
+ if( event.Dragging() )
+ {
+ if( m_isPanning )
+ {
+ MATRIX3x3D matrix = m_gal->GetWorldScreenMatrix().Inverse();
+ VECTOR2D delta = matrix.GetScale().x * ( m_startMousePoint - mousePoint );
+
+ m_gal->SetLookAtPoint( m_startLookAtPoint + delta );
+
+ m_gal->PaintScene();
+ }
+ }
+ else
+ {
+ m_gal->DrawCursor( mousePoint );
+ }
+}
+
+
+void SWEET_FRAME::OnMouseWheel( wxMouseEvent& event )
+{
+ double zoomScale = ( event.GetWheelRotation() > 0.0 ) ? 1.1 : 0.9;
+
+ m_gal->SetZoomFactor( m_gal->GetZoomFactor() * zoomScale );
+ m_gal->PaintScene();
+}
+
+
+void SWEET_FRAME::OnRightDown( wxMouseEvent& event )
+{
+ m_isPanning = true;
+ m_startMousePoint = VECTOR2D( event.GetX(), event.GetY() );
+ m_startLookAtPoint = m_gal->GetLookAtPoint();
+}
+
+
+void SWEET_FRAME::OnRightUp( wxMouseEvent& event )
+{
+ m_isPanning = false;
+}
+
+
+static const wxCmdLineEntryDesc g_cmdLineDesc[] = {
+ {
+ wxCMD_LINE_PARAM,
+ NULL,
+ NULL,
+ "filename of libtable",
+ wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_MULTIPLE
+ },
+ { wxCMD_LINE_NONE }
+};
+
+
+class GAL_TEST_APPLICATION: public wxApp
+{
+public:
+ GAL_TEST_APPLICATION();
+
+private:
+ virtual bool OnInit();
+ virtual int OnExit();
+ virtual int OnRun();
+ virtual void OnInitCmdLine( wxCmdLineParser& aParser );
+ virtual bool OnCmdLineParsed( wxCmdLineParser& aParser );
+};
+
+
+GAL_TEST_APPLICATION::GAL_TEST_APPLICATION()
+{
+}
+
+
+bool GAL_TEST_APPLICATION::OnInit()
+{
+ if ( !wxApp::OnInit() )
+ return false;
+
+ SWEET_FRAME* frame = new SWEET_FRAME( (wxFrame *) NULL,
+ -1, wxT( "SWEET Editor" ),
+ wxPoint( screenSizeX + 10, 0 ),
+ wxSize( screenSizeX, screenSizeY ) );
+
+ frame->Show( true );
+
+ return true;
+}
+
+
+int GAL_TEST_APPLICATION::OnExit()
+{
+ return 0;
+}
+
+
+int GAL_TEST_APPLICATION::OnRun()
+{
+ int exitcode = wxApp::OnRun();
+ return exitcode;
+}
+
+
+void GAL_TEST_APPLICATION::OnInitCmdLine( wxCmdLineParser& parser )
+{
+ parser.SetDesc( g_cmdLineDesc );
+ parser.SetSwitchChars( wxT( "-" ) );
+}
+
+
+bool GAL_TEST_APPLICATION::OnCmdLineParsed( wxCmdLineParser& parser )
+{
+ return true;
+}
+
+
+DECLARE_APP( GAL_TEST_APPLICATION )
+
+IMPLEMENT_APP( GAL_TEST_APPLICATION )