diff options
| author | Mikko Syrjä <mikko@3d-system.fi> | 2019-02-09 22:12:17 +0200 |
|---|---|---|
| committer | Mikko Syrjä <mikko@3d-system.fi> | 2019-02-09 22:12:17 +0200 |
| commit | da3b3bf7a2e764712b54d0c1d448c9a6fc1c21cd (patch) | |
| tree | e239f2d03213927f97f375ff581a098f7076ec40 | |
| parent | 07fb2096878f9da573d663abeb3b62fb08cb3ccb (diff) | |
| download | symedit-da3b3bf7a2e764712b54d0c1d448c9a6fc1c21cd.tar.gz symedit-da3b3bf7a2e764712b54d0c1d448c9a6fc1c21cd.zip | |
Initial symbol parsing and drawing.
| -rw-r--r-- | Editor.qml | 55 | ||||
| -rw-r--r-- | main.qml | 79 | ||||
| -rw-r--r-- | symbol.cpp | 100 | ||||
| -rw-r--r-- | symbol.h | 21 | ||||
| -rw-r--r-- | symedit.cpp | 64 | ||||
| -rw-r--r-- | symedit.h | 5 |
6 files changed, 275 insertions, 49 deletions
@@ -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 @@ -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 { @@ -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)); +} + @@ -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; //## +} + @@ -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(); |
