summaryrefslogtreecommitdiff
path: root/pcbnew/tools/point_editor.h
diff options
context:
space:
mode:
Diffstat (limited to 'pcbnew/tools/point_editor.h')
-rw-r--r--pcbnew/tools/point_editor.h120
1 files changed, 120 insertions, 0 deletions
diff --git a/pcbnew/tools/point_editor.h b/pcbnew/tools/point_editor.h
new file mode 100644
index 0000000..fc4c6a0
--- /dev/null
+++ b/pcbnew/tools/point_editor.h
@@ -0,0 +1,120 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Maciej Suminski <maciej.suminski@cern.ch>
+ *
+ * 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 __POINT_EDITOR_H
+#define __POINT_EDITOR_H
+
+#include <boost/shared_ptr.hpp>
+
+#include <tool/tool_interactive.h>
+#include "edit_points.h"
+
+class SELECTION_TOOL;
+
+/**
+ * Class POINT_EDITOR
+ *
+ * Tool that displays edit points allowing to modify items by dragging the points.
+ */
+class POINT_EDITOR : public TOOL_INTERACTIVE
+{
+public:
+ POINT_EDITOR();
+
+ /// @copydoc TOOL_INTERACTIVE::Reset()
+ void Reset( RESET_REASON aReason );
+
+ /// @copydoc TOOL_INTERACTIVE::Init()
+ bool Init();
+
+ /**
+ * Function OnSelected()
+ *
+ * Change selection event handler.
+ */
+ int OnSelectionChange( const TOOL_EVENT& aEvent );
+
+ ///> Sets up handlers for various events.
+ void SetTransitions();
+
+private:
+ ///> Selection tool used for obtaining selected items
+ SELECTION_TOOL* m_selectionTool;
+
+ ///> Currently edited point, NULL if there is none.
+ EDIT_POINT* m_editedPoint;
+
+ ///> Original position for the current drag point.
+ EDIT_POINT m_original;
+
+ ///> Currently available edit points.
+ boost::shared_ptr<EDIT_POINTS> m_editPoints;
+
+ // Alternative constraint, enabled while a modifier key is held
+ boost::shared_ptr<EDIT_CONSTRAINT<EDIT_POINT> > m_altConstraint;
+
+ // EDIT_POINT for alternative constraint mode
+ EDIT_POINT m_altConstrainer;
+
+ ///> Updates item's points with edit points.
+ void updateItem() const;
+
+ ///> Applies the last changes to the edited item.
+ void finishItem() const;
+
+ ///> Updates edit points with item's points.
+ void updatePoints();
+
+ ///> Updates which point is being edited.
+ void updateEditedPoint( const TOOL_EVENT& aEvent );
+
+ ///> Sets the current point being edited. NULL means none.
+ void setEditedPoint( EDIT_POINT* aPoint );
+
+ ///> Returns true if aPoint is the currently modified point.
+ inline bool isModified( const EDIT_POINT& aPoint ) const
+ {
+ return m_editedPoint == &aPoint;
+ }
+
+ ///> Sets up an alternative constraint (typically enabled upon a modifier key being pressed).
+ void setAltConstraint( bool aEnabled );
+
+ ///> Returns a point that should be used as a constrainer for 45 degrees mode.
+ EDIT_POINT get45DegConstrainer() const;
+
+ ///> Adds a new edit point on a zone outline/line.
+ void addCorner( const VECTOR2I& aPoint );
+
+ ///> Removes a corner.
+ void removeCorner( EDIT_POINT* aPoint );
+
+ ///> Condition to display "Create corner" context menu entry.
+ static bool addCornerCondition( const SELECTION& aSelection );
+
+ ///> Condition to display "Remove corner" context menu entry.
+ bool removeCornerCondition( const SELECTION& aSelection );
+};
+
+#endif