aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikko Syrjä <mikko@3d-system.fi>2019-02-09 22:12:17 +0200
committerMikko Syrjä <mikko@3d-system.fi>2019-02-09 22:12:17 +0200
commitda3b3bf7a2e764712b54d0c1d448c9a6fc1c21cd (patch)
treee239f2d03213927f97f375ff581a098f7076ec40
parent07fb2096878f9da573d663abeb3b62fb08cb3ccb (diff)
downloadsymedit-da3b3bf7a2e764712b54d0c1d448c9a6fc1c21cd.tar.gz
symedit-da3b3bf7a2e764712b54d0c1d448c9a6fc1c21cd.zip
Initial symbol parsing and drawing.
-rw-r--r--Editor.qml55
-rw-r--r--main.qml79
-rw-r--r--symbol.cpp100
-rw-r--r--symbol.h21
-rw-r--r--symedit.cpp64
-rw-r--r--symedit.h5
6 files changed, 275 insertions, 49 deletions
diff --git a/Editor.qml b/Editor.qml
index 1bfb60c..ab91c22 100644
--- a/Editor.qml
+++ b/Editor.qml
@@ -66,7 +66,11 @@ Rectangle
onPressed:
{
- if ( tool === Editor.Tool.Polyline )
+ if ( tool === Editor.Tool.Select )
+ {
+
+ }
+ else if ( tool === Editor.Tool.Polyline )
{
startx = endx
starty = endy
@@ -81,9 +85,16 @@ Rectangle
onReleased:
{
- endx = mousex
- endy = mousey
- down = false
+ if ( tool === Editor.Tool.Select )
+ {
+ var index = manager.selectItem(Qt.point(mousex, mousey))
+ }
+ else
+ {
+ endx = mousex
+ endy = mousey
+ down = false
+ }
}
}
@@ -131,6 +142,16 @@ Rectangle
context.strokeRect(0, 0, units * scalexy, units * scalexy)
}
+ function paintcircle(context, center, radius, fill)
+ {
+ context.ellipse((center.x + max - radius) * scalexy, (max - center.y - radius) * scalexy,
+ radius * 2 * scalexy, radius * 2 * scalexy)
+ if ( fill )
+ context.fill()
+ else
+ context.stroke()
+ }
+
function paintsymbol(context)
{
var previous = Qt.point(0, 0)
@@ -138,27 +159,21 @@ Rectangle
for ( index = 0; index < count; index++ )
{
var operation = manager.getItemOperation(index)
- var itempoint = manager.getItemPoint(index)
- var itemfill = manager.getItemFill(index)
+ var position = manager.getItemPoint(index)
+ var fill = manager.getItemFill(index)
if ( operation === Editor.Operation.Move )
{
- previous = itempoint
+ previous = position
}
else if ( operation === Editor.Operation.Line )
{
//##
- previous = itempoint
+ previous = position
}
else if ( operation === Editor.Operation.Radius )
{
- var radius = itempoint.x
- context.ellipse((previous.x + max - radius) * scalexy,
- (max - previous.y - radius) * scalexy,
- radius * 2 * scalexy, radius * 2 * scalexy)
- if ( itemfill )
- context.fill()
- else
- context.stroke()
+ var radius = position.x
+ paintcircle(context, previous, radius, fill)
}
}
}
@@ -242,12 +257,8 @@ Rectangle
}
if ( radius )
{
- context.ellipse((centerx + max - radius) * scalexy, (max - centery - radius) * scalexy,
- radius * 2 * scalexy, radius * 2 * scalexy)
- if ( fill )
- context.fill()
- else
- context.stroke()
+ var center = Qt.point(centerx, centery)
+ paintcircle(context, center, radius, fill)
}
}
else if ( tool > 40 && tool < 50 ) // text
diff --git a/main.qml b/main.qml
index 8d79815..ea8dc88 100644
--- a/main.qml
+++ b/main.qml
@@ -42,6 +42,25 @@ ApplicationWindow
MenuSeparator { }
MenuItem
{
+ text: qsTr("From Clipboard") //%%
+// shortcut: "Ctrl+O"
+ onTriggered:
+ {
+ //##
+ }
+ }
+ MenuItem
+ {
+ text: qsTr("To Clipboard") //%%
+// shortcut: "Ctrl+S"
+ onTriggered:
+ {
+ //##
+ }
+ }
+ MenuSeparator { }
+ MenuItem
+ {
text: qsTr("Exit") //%%
shortcut: "F4"
onTriggered: { Qt.quit() }
@@ -49,6 +68,66 @@ ApplicationWindow
}
Menu
{
+ title: qsTr("Edit") //%%
+ MenuItem
+ {
+ text: qsTr("Cut") //%%
+ shortcut: "Ctrl+X"
+ onTriggered:
+ {
+ //##
+ }
+ }
+ MenuItem
+ {
+ text: qsTr("Copy") //%%
+ shortcut: "Ctrl+C"
+ onTriggered:
+ {
+ //##
+ }
+ }
+ MenuItem
+ {
+ text: qsTr("Paste") //%%
+ shortcut: "Ctrl+V"
+ onTriggered:
+ {
+ //##
+ }
+ }
+ MenuSeparator { }
+ MenuItem
+ {
+ text: qsTr("Up") //%%
+// shortcut: "Ctrl+V"
+ onTriggered:
+ {
+ //##
+ }
+ }
+ MenuItem
+ {
+ text: qsTr("Down") //%%
+// shortcut: "Ctrl+V"
+ onTriggered:
+ {
+ //##
+ }
+ }
+ MenuSeparator { }
+ MenuItem
+ {
+ text: qsTr("Delete") //%%
+ shortcut: "Delete"
+ onTriggered:
+ {
+ //##
+ }
+ }
+ }
+ Menu
+ {
title: qsTr("Tool") //%%
MenuItem
{
diff --git a/symbol.cpp b/symbol.cpp
index a415b11..367f0c8 100644
--- a/symbol.cpp
+++ b/symbol.cpp
@@ -1,10 +1,17 @@
+#include <QStringList>
+
#include "symbol.h"
//
// symbol item functions
//
//! Constructor.
-SymEditSymbol::Item::Item()
+/*!
+ \param operation Item operation.
+ \param point Item position.
+*/
+SymEditSymbol::Item::Item(int operation, QPoint point)
+ : Operation(operation), Point(point), Fill(false)
{
}
@@ -13,25 +20,106 @@ SymEditSymbol::Item::Item()
// symbol functions
//
//! Constructor.
-SymEditSymbol::SymEditSymbol()
+SymEditSymbol::SymEditSymbol() : ActiveIndex(-1)
{
}
//! Load symbol from string.
/*!
- \param string String buffer.
+ \param buffer String buffer.
*/
-void SymEditSymbol::Load(const QString& string)
+void SymEditSymbol::Load(const QString& buffer)
{
+ QStringList list = buffer.split(';', QString::SkipEmptyParts);
+ for ( const auto& string : list )
+ {
+ int operation = string.at(0).toLatin1();
+ int x = string.mid(1).toInt();
+ int y = x;
+ int comma = string.indexOf(',');
+ if ( comma >= 0 )
+ y = string.mid(comma + 1).toInt();
+ Item item(operation, QPoint(x, y));
+ Items.push_back(item);
+ }
}
//! Save symbol to string.
/*!
- \param string String buffer.
+ \param buffer String buffer.
+*/
+void SymEditSymbol::Save(QString& buffer) const
+{
+ buffer.clear();
+ for ( const auto& item : Items )
+ {
+ //##
+ }
+}
+
+//! Add symbol item.
+/*!
+ \param operation Item operation.
+ \param point Item position.
+ \param fill Item area fill.
+ \return Reference to item.
*/
-void SymEditSymbol::Save(QString& string) const
+SymEditSymbol::Item& SymEditSymbol::AddItem(int operation, QPoint point, bool fill)
{
+ Item item(operation, point);
+ item.Fill = fill;
+ Items.push_back(item);
+ return Items.back();
+}
+//! Add symbol item.
+/*!
+ \param operation Item operation.
+ \param point Item position.
+ \param text Item text string.
+ \param align Item text alignment.
+ \return Reference to item.
+*/
+SymEditSymbol::Item& SymEditSymbol::AddItem(int operation, QPoint point, QString text, int align)
+{
+ Item item(operation, point);
+ item.Text = text;
+ item.Align = align;
+ Items.push_back(item);
+ return Items.back();
}
+
+//! Remove item.
+/*!
+ \param index Item index.
+*/
+void SymEditSymbol::RemoveItem(int index)
+{
+ if ( static_cast<size_t>(index) < Items.size() )
+ Items.erase(Items.begin() + index);
+}
+
+//
+int SymEditSymbol::SelectItem(QPoint point) const
+{
+ ActiveIndex = -1; //##
+ return ActiveIndex;
+}
+
+//! Get item count.
+/*!
+ \return Item count.
+*/
+int SymEditSymbol::GetItemCount() const
+{
+ return static_cast<int>(Items.size());
+}
+
+//
+const SymEditSymbol::Item& SymEditSymbol::GetItem(int index) const
+{
+ return Items.at(static_cast<size_t>(index));
+}
+
diff --git a/symbol.h b/symbol.h
index e9b2510..c7d92d2 100644
--- a/symbol.h
+++ b/symbol.h
@@ -2,7 +2,9 @@
#define SYMBOL_H
#include <vector>
+
#include <QPoint>
+#include <QString>
class SymEditSymbol
{
@@ -11,18 +13,31 @@ public:
class Item //!< Symbol item.
{
- Item();
+ public:
+ Item(int operation, QPoint point);
int Operation; //!< Item operation.
QPoint Point; //!< Item coordinates.
bool Fill; //!< Fill area.
+ int Align; //!< Text alignment.
+ QString Text; //!< Text string.
};
- void Load(const QString& string);
- void Save(QString& string) const;
+ void Load(const QString& buffer);
+ void Save(QString& buffer) const;
+
+ Item& AddItem(int operation, QPoint point, bool fill);
+ Item& AddItem(int operation, QPoint point, QString text, int align);
+ void RemoveItem(int index);
+ int SelectItem(QPoint point) const;
+
+ int GetItemCount() const;
+ const Item& GetItem(int index) const;
private:
std::vector<Item> Items; //!< Symbol items.
+
+ mutable int ActiveIndex; //!< Active item index.
};
#endif
diff --git a/symedit.cpp b/symedit.cpp
index f31a556..902cd3c 100644
--- a/symedit.cpp
+++ b/symedit.cpp
@@ -22,6 +22,8 @@ SymEditSettings::SymEditSettings() : Fill(false), Align(9), Snap(5), Tool(1)
SymEditManager::SymEditManager(QObject* parent) : QObject(parent)
{
LoadSettings();
+
+ Symbol.Load("U00,00;R50;U-35,-35;D35,35;U-35,35;D35,-35;");
}
//! Set window geometry.
@@ -107,51 +109,79 @@ void SymEditManager::SaveSettings()
settings.setValue("editor/tool", Settings.Tool);
}
-//
-void SymEditManager::addItem(int operation, QPoint point)
+//! Add symbol item.
+/*!
+ \param operation Item operation.
+ \param point Item position.
+ \param fill Item area fill.
+ \return Reference to item.
+*/
+void SymEditManager::addItem(int operation, QPoint point, bool fill)
{
+ Symbol.AddItem(operation, point, fill);
+}
+//! Add symbol item.
+/*!
+ \param operation Item operation.
+ \param point Item position.
+ \param text Item text string.
+ \param align Item text alignment.
+ \return Reference to item.
+*/
+void SymEditManager::addText(int operation, QPoint point, QString text, int align)
+{
+ Symbol.AddItem(operation, point, text, align);
}
-//
+//! Remove item.
+/*!
+ \param index Item index.
+*/
void SymEditManager::removeItem(int index)
{
-
+ Symbol.RemoveItem(index);
}
-
-//
+//! Get item count.
+/*!
+ \return Item count.
+*/
int SymEditManager::getItemCount() const
{
- return 2;
+ return Symbol.GetItemCount();
}
//
int SymEditManager::getItemOperation(int index) const
{
- if ( index == 0 )
- return 'U';
- else
- return 'R';
+ const auto& item = Symbol.GetItem(index);
+ return item.Operation;
}
//
QPoint SymEditManager::getItemPoint(int index) const
{
- if ( index == 0 )
- return QPoint(0, 0);
- else
- return QPoint(30, 30);
+ const auto& item = Symbol.GetItem(index);
+ return item.Point;
}
//
QString SymEditManager::getItemString(int index) const
{
- return "T3";
+ const auto& item = Symbol.GetItem(index);
+ return item.Text;
}
//
bool SymEditManager::getItemFill(int index) const
{
- return false;
+ const auto& item = Symbol.GetItem(index);
+ return item.Fill;
}
+
+int SymEditManager::selectItem(QPoint point) const
+{
+ return -1; //##
+}
+
diff --git a/symedit.h b/symedit.h
index d9978f9..306a38a 100644
--- a/symedit.h
+++ b/symedit.h
@@ -45,7 +45,8 @@ public:
Q_INVOKABLE int getTool() const;
Q_INVOKABLE int getSnap() const;
- Q_INVOKABLE void addItem(int operation, QPoint point);
+ Q_INVOKABLE void addItem(int operation, QPoint point, bool fill);
+ Q_INVOKABLE void addText(int operation, QPoint point, QString text, int align);
Q_INVOKABLE void removeItem(int index);
Q_INVOKABLE int getItemCount() const;
@@ -54,6 +55,8 @@ public:
Q_INVOKABLE QString getItemString(int index ) const;
Q_INVOKABLE bool getItemFill(int index) const;
+ Q_INVOKABLE int selectItem(QPoint point) const;
+
void LoadSettings();
void SaveSettings();