diff options
| author | Mikko Syrjä <mikko@3d-system.fi> | 2019-02-26 22:33:42 +0200 |
|---|---|---|
| committer | Mikko Syrjä <mikko@3d-system.fi> | 2019-02-26 22:33:42 +0200 |
| commit | e1b36719796209bfe47320c493b708d27dab3f25 (patch) | |
| tree | f4eacb22a521126c4faa6e6d5940e4aa94591e14 | |
| parent | de0acfd2b1e83c58659f9293e1b23f196a14ef9e (diff) | |
| download | symedit-e1b36719796209bfe47320c493b708d27dab3f25.tar.gz symedit-e1b36719796209bfe47320c493b708d27dab3f25.zip | |
Implemented raise and lower.
| -rw-r--r-- | image/down_icon&48.png (renamed from image/br_down_icon&48.png) | bin | 4097 -> 4097 bytes | |||
| -rw-r--r-- | image/up_icon&48.png (renamed from image/br_up_icon&48.png) | bin | 4043 -> 4043 bytes | |||
| -rw-r--r-- | main.qml | 42 | ||||
| -rw-r--r-- | qml.qrc | 2 | ||||
| -rw-r--r-- | symbol.cpp | 26 | ||||
| -rw-r--r-- | symbol.h | 1 | ||||
| -rw-r--r-- | symedit.cpp | 81 | ||||
| -rw-r--r-- | symedit.h | 23 |
8 files changed, 109 insertions, 66 deletions
diff --git a/image/br_down_icon&48.png b/image/down_icon&48.png Binary files differindex cda9e0c..cda9e0c 100644 --- a/image/br_down_icon&48.png +++ b/image/down_icon&48.png diff --git a/image/br_up_icon&48.png b/image/up_icon&48.png Binary files differindex 31fecf0..31fecf0 100644 --- a/image/br_up_icon&48.png +++ b/image/up_icon&48.png @@ -49,6 +49,9 @@ ApplicationWindow MenuItem { text: qsTr("Rotate Right"); shortcut: "Alt+Right"; onTriggered: rotate(1) } //%% MenuItem { text: qsTr("Rotate Left"); shortcut: "Alt+Left"; onTriggered: rotate(-1) } //%% MenuSeparator { } + MenuItem { text: qsTr("Raise Item"); shortcut: "Alt+Up"; onTriggered: raise(1) } //%% + MenuItem { text: qsTr("Lower Item"); shortcut: "Alt+Down"; onTriggered: raise(-1) } //%% + MenuSeparator { } MenuItem { text: qsTr("Delete"); shortcut: "Delete"; onTriggered: remove() } //%% } Menu @@ -101,9 +104,9 @@ ApplicationWindow { height: 32 z: 10 - BarTool { image: "image/open_icon&48.png"; tooltip: "Open File"; onClicked: open() } //%% - BarTool { image: "image/save_icon&48.png"; tooltip: "Save File"; onClicked: save() } //%% - BarSeparator { } +// BarTool { image: "image/open_icon&48.png"; tooltip: "Open File"; onClicked: open() } //%% +// BarTool { image: "image/save_icon&48.png"; tooltip: "Save File"; onClicked: save() } //%% +// BarSeparator { } BarTool { image: "image/undo_icon&48.png"; tooltip: "Undo Edit"; onClicked: undo(true) } //%% BarTool { image: "image/redo_icon&48.png"; tooltip: "Redo Edit"; onClicked: undo(false) } //%% BarTool { image: "image/cut_icon&48.png"; tooltip: "Cut Symbol"; onClicked: cut() } //%% @@ -112,6 +115,8 @@ ApplicationWindow BarSeparator { } BarTool { image: "image/rotate_right.png"; tooltip: "Rotate right"; onClicked: rotate(1) } //%% BarTool { image: "image/rotate_left.png"; tooltip: "Rotate left"; onClicked: rotate(-1) } //%% + BarTool { image: "image/up_icon&48.png"; tooltip: "Raise item"; onClicked: raise(1) } //%% + BarTool { image: "image/down_icon&48.png"; tooltip: "Lower item"; onClicked: raise(-1) } //%% BarTool { image: "image/delete.png"; tooltip: "Delete item"; onClicked: remove() } //%% BarSeparator { } BarTool { image: "image/cursor_icon&48.png"; tooltip: "Select item"; tool: Editor.Tool.Select } //%% @@ -222,12 +227,12 @@ ApplicationWindow onWidthChanged: { manager.setGeometry(Qt.point(x, y), Qt.size(width, height)) } onHeightChanged: { manager.setGeometry(Qt.point(x, y), Qt.size(width, height)) } - onFillitemChanged: { manager.setFillItem(fillitem); } - onAlignmentChanged: { manager.setAlignment(alignment); } - onLinewidthChanged: { manager.setLineWidth(linewidth); } - onTextsizeChanged: { manager.setTextSize(textsize); } - onSnapgridChanged: { manager.setSnapGrid(snapgrid); } - onToolChanged: { manager.setTool(tool); } + onFillitemChanged: { manager.setIntSetting("FillItem", fillitem); } + onAlignmentChanged: { manager.setIntSetting("Alignment", alignment); } + onLinewidthChanged: { manager.setIntSetting("LineWidth", linewidth); } + onTextsizeChanged: { manager.setIntSetting("TextSize", textsize); } + onSnapgridChanged: { manager.setIntSetting("SnapGrid", snapgrid); } + onToolChanged: { manager.setIntSetting("Tool", tool); } Component.onCompleted: { @@ -236,12 +241,12 @@ ApplicationWindow width = manager.getWindowSize().width height = manager.getWindowSize().height - fillitem = manager.getFillItem() - alignment = manager.getAlignment() - linewidth = manager.getLineWidth() - textsize = manager.getTextSize() - snapgrid = manager.getSnapGrid() - tool = manager.getTool() + fillitem = manager.getIntSetting("FillItem") + alignment = manager.getIntSetting("Alignment") + linewidth = manager.getIntSetting("LineWidth") + textsize = manager.getIntSetting("TextSize") + snapgrid = manager.getIntSetting("SnapGrid") + tool = manager.getIntSetting("Tool") filllist.setFill() snaplist.setSnap() @@ -323,6 +328,13 @@ ApplicationWindow editor.update() } + function raise(dir) + { + manager.raiseItem(dir) + symbol = manager.getSymbol() + editor.update() + } + function remove() { manager.removeItem() @@ -25,5 +25,7 @@ <file>image/cut_icon&48.png</file> <file>image/paste_icon&48.png</file> <file>image/open_icon&48.png</file> + <file>image/down_icon&48.png</file> + <file>image/up_icon&48.png</file> </qresource> </RCC> @@ -291,3 +291,29 @@ void SymEditSymbol::RotateSymbol(int dir) rotate(item.Value, dir); } } + +//! Raise or lower item. +/*! + \param dir Positive value raises, negative lowers. + \return True for success. +*/ +bool SymEditSymbol::RaiseItem(int dir) +{ + if ( !Items.empty() ) + { + size_t index = static_cast<size_t>(ActiveIndex); + if ( dir > 0 && index < Items.size() - 1 ) // raise + { + std::swap(Items[index], Items[index + 1]); + ++ActiveIndex; + return true; + } + if ( dir < 0 && index > 0 ) // lower + { + std::swap(Items[index - 1], Items[index]); + --ActiveIndex; + return true; + } + } + return false; +} @@ -44,6 +44,7 @@ public: const Item& GetItem(int index) const; void RotateSymbol(int dir); + bool RaiseItem(int dir); private: std::vector<Item> Items; //!< Symbol items. diff --git a/symedit.cpp b/symedit.cpp index 0c9d831..56bcb39 100644 --- a/symedit.cpp +++ b/symedit.cpp @@ -8,9 +8,14 @@ // settings functions // //! Constructor. -SymEditSettings::SymEditSettings() : FillItem(0), Alignment(9), LineWidth(1), TextSize(1), SnapGrid(5), Tool(1) +SymEditSettings::SymEditSettings() { - + Values.emplace("FillItem", 0); + Values.emplace("Alignment", 9); + Values.emplace("LineWidth", 1); + Values.emplace("TextSize", 1); + Values.emplace("SnapGrid", 5); + Values.emplace("Tool", 1); } //! Load settings. @@ -23,12 +28,12 @@ void SymEditSettings::Load() Size.setWidth(settings.value("window/width", 500).toInt()); Size.setHeight(settings.value("window/height", 500).toInt()); - FillItem = settings.value("editor/fill", 0).toInt(); - Alignment = settings.value("editor/align", 9).toInt(); - LineWidth = settings.value("editor/width", 1).toInt(); - TextSize = settings.value("editor/size", 1).toInt(); - SnapGrid = settings.value("editor/snap", 5).toInt(); - Tool = settings.value("editor/tool", 1).toInt(); + Values.at("FillItem") = settings.value("editor/fill", 0).toInt(); + Values.at("Alignment") = settings.value("editor/align", 9).toInt(); + Values.at("LineWidth") = settings.value("editor/width", 1).toInt(); + Values.at("TextSize") = settings.value("editor/size", 1).toInt(); + Values.at("SnapGrid") = settings.value("editor/snap", 5).toInt(); + Values.at("Tool") = settings.value("editor/tool", 1).toInt(); } //! Save settings. @@ -41,12 +46,12 @@ void SymEditSettings::Save() const settings.setValue("window/width", Size.width()); settings.setValue("window/height", Size.height()); - settings.setValue("editor/fill", FillItem); - settings.setValue("editor/align", Alignment); - settings.setValue("editor/width", LineWidth); - settings.setValue("editor/size", TextSize); - settings.setValue("editor/snap", SnapGrid); - settings.setValue("editor/tool", Tool); + settings.setValue("editor/fill", Values.at("FillItem")); + settings.setValue("editor/align", Values.at("Alignment")); + settings.setValue("editor/width", Values.at("LineWidth")); + settings.setValue("editor/size", Values.at("TextSize")); + settings.setValue("editor/snap", Values.at("SnapGrid")); + settings.setValue("editor/tool", Values.at("Tool")); } // @@ -101,31 +106,28 @@ QSize SymEditManager::getWindowSize() const return Settings.Size; } -//@{ //! Set setting value. /*! + \param name Setting name. \param value Setting value. */ -void SymEditManager::setFillItem(int value) { Settings.FillItem = value; } -void SymEditManager::setAlignment(int value) { Settings.Alignment = value; } -void SymEditManager::setLineWidth(int value) { Settings.LineWidth = value; } -void SymEditManager::setTextSize(int value) { Settings.TextSize = value; } -void SymEditManager::setSnapGrid(int value) { Settings.SnapGrid = value; } -void SymEditManager::setTool(int value) { Settings.Tool = value; } -//@} - -//@{ +void SymEditManager::setIntSetting(QString name, int value) +{ + if ( Settings.Values.find(name) != Settings.Values.end() ) + Settings.Values.at(name) = value; +} + //! Get setting value. /*! + \param name Setting name. \return Setting value. */ -int SymEditManager::getFillItem() const { return Settings.FillItem; } -int SymEditManager::getAlignment() const { return Settings.Alignment; } -int SymEditManager::getLineWidth() const { return Settings.LineWidth; } -int SymEditManager::getTextSize() const { return Settings.TextSize; } -int SymEditManager::getSnapGrid() const { return Settings.SnapGrid; } -int SymEditManager::getTool() const { return Settings.Tool; } -//@} +int SymEditManager::getIntSetting(QString name) const +{ + if ( Settings.Values.find(name) != Settings.Values.end() ) + return Settings.Values.at(name); + return 0; +} //! Get symbol as string. /*! @@ -350,7 +352,7 @@ void SymEditManager::pasteClipboard() //! Rotate symbol. /*! - \param dir Positive value rotates right, negative left + \param dir Positive value rotates right, negative left. */ void SymEditManager::rotateSymbol(int dir) { @@ -358,6 +360,21 @@ void SymEditManager::rotateSymbol(int dir) Symbol.RotateSymbol(dir); } +//! Raise or lower item. +/*! + \param dir Positive value raises, negative lowers. + \return True for success. +*/ +bool SymEditManager::raiseItem(int dir) +{ + if ( Symbol.GetItemCount() ) + { + undosave(); + return Symbol.RaiseItem(dir); + } + return false; +} + //! Undo edit operation. /*! \param undo True undoes, false redoes. @@ -25,12 +25,7 @@ private: QPoint Position; //!< Window position. QSize Size; //!< Window size. - int FillItem; //!< Fill object. - int Alignment; //!< Text alignment. - int LineWidth; //!< Line width. - int TextSize; //!< Text size. - int SnapGrid; //!< Snap granularity. - int Tool; //!< Current tool. + std::map<QString, int> Values; //!< Setting values. }; //! Manager class. @@ -50,19 +45,8 @@ public: Q_INVOKABLE QPoint getWindowPos() const; Q_INVOKABLE QSize getWindowSize() const; - Q_INVOKABLE void setFillItem(int fill); - Q_INVOKABLE void setAlignment(int align); - Q_INVOKABLE void setLineWidth(int align); - Q_INVOKABLE void setTextSize(int size); - Q_INVOKABLE void setSnapGrid(int snap); - Q_INVOKABLE void setTool(int tool); - - Q_INVOKABLE int getFillItem() const; - Q_INVOKABLE int getAlignment() const; - Q_INVOKABLE int getLineWidth() const; - Q_INVOKABLE int getTextSize() const; - Q_INVOKABLE int getSnapGrid() const; - Q_INVOKABLE int getTool() const; + Q_INVOKABLE void setIntSetting(QString name, int value); + Q_INVOKABLE int getIntSetting(QString name) const; Q_INVOKABLE QString getSymbol() const; @@ -88,6 +72,7 @@ public: Q_INVOKABLE void pasteClipboard(); Q_INVOKABLE void rotateSymbol(int dir); + Q_INVOKABLE bool raiseItem(int dir); Q_INVOKABLE bool undo(bool undo); |
