aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikko Syrjä <mikko@3d-system.fi>2019-03-27 01:45:35 +0200
committerMikko Syrjä <mikko@3d-system.fi>2019-03-27 01:45:35 +0200
commit051e1af212c4b36fea1143028b7117a590287047 (patch)
tree4793120c8be195d2ddf990d7440bf87e11ce6918
parentb4a39f7c233c1f26eb9874fc1221ea1408a3fa97 (diff)
downloadsymedit-051e1af212c4b36fea1143028b7117a590287047.tar.gz
symedit-051e1af212c4b36fea1143028b7117a590287047.zip
Language selection interface and status bar bold item.
-rw-r--r--Editor.qml9
-rw-r--r--help/eng/usage.rst36
-rw-r--r--help/fin/usage.rst36
-rw-r--r--locale/symedit.en_GB.ts110
-rw-r--r--locale/symedit.fi_FI.ts110
-rw-r--r--locale/symedit.ts110
-rw-r--r--main.cpp18
-rw-r--r--main.qml44
-rw-r--r--symbol.cpp113
-rw-r--r--symbol.h2
-rw-r--r--symedit.cpp35
-rw-r--r--symedit.h5
12 files changed, 371 insertions, 257 deletions
diff --git a/Editor.qml b/Editor.qml
index ae0fde1..04ce48d 100644
--- a/Editor.qml
+++ b/Editor.qml
@@ -89,6 +89,7 @@ Rectangle
if ( tool === Editor.Tool.Select )
{
manager.selectItem(Qt.point(endx, endy))
+ symbol = manager.getSymbol(true)
canvas.requestPaint()
}
else if ( !preview )
@@ -98,7 +99,7 @@ Rectangle
if ( tool === Editor.Tool.Line )
{
manager.addPointItem(Operation.Line, Qt.point(startx, starty), Qt.point(endx, endy), colorindex, 0)
- symbol = manager.getSymbol()
+ symbol = manager.getSymbol(true)
}
else if ( tool === Editor.Tool.RectCenter || tool === Editor.Tool.RectCorner )
{
@@ -108,7 +109,7 @@ Rectangle
starty -= (endy - starty)
}
if ( manager.addPointItem(Operation.Rectangle, Qt.point(startx, starty), Qt.point(endx, endy), colorindex, fillitem) )
- symbol = manager.getSymbol()
+ symbol = manager.getSymbol(true)
}
else if ( tool > 30 && tool < 40 ) // circle
{
@@ -134,7 +135,7 @@ Rectangle
centery = starty
}
if ( manager.addValueItem(Operation.Circle, Qt.point(centerx, centery), radius, colorindex, fillitem) )
- symbol = manager.getSymbol()
+ symbol = manager.getSymbol(true)
}
else if ( tool > 40 && tool < 50 ) // arc
{
@@ -143,7 +144,7 @@ Rectangle
else if ( tool > 50 && tool < 60 ) // text
{
if ( manager.addTextItem(Operation.Text, Qt.point(endx, endy), textvalue, colorindex, alignment) )
- symbol = manager.getSymbol()
+ symbol = manager.getSymbol(true)
}
}
else // activate last
diff --git a/help/eng/usage.rst b/help/eng/usage.rst
index c2322db..9ef5a4c 100644
--- a/help/eng/usage.rst
+++ b/help/eng/usage.rst
@@ -11,18 +11,32 @@ xxx
Command line
------------
-Command line parameters::
+Usage: ``symedit [options] file``
- Usage: symedit [options] file
+-t, --transfer
+^^^^^^^^^^^^^^
- Options:
- -t, --transfer Symbol file is transfer file.
- -s, --symbol <symbol> Read symbol from parameter <symbol>.
- -l, --language <lang> Application language abbreviation <lang>.
- -h, --help Displays this help.
+Given argument file name is a transfer file. When application exits, current symbol is automatically saved to this file.
- Arguments:
- file Symbol file name.
+-s, --symbol <symbol>
+^^^^^^^^^^^^^^^^^^^^^
+
+Reads symbol definition. For example: ``symedit -s R50;U0,50;D0,-50;U-50,0;D50,0``
+
+-l, --language <lang>
+^^^^^^^^^^^^^^^^^^^^^
+
+Selects application language. Supported languages are english (eng) and finnish (fin). For example: ``symedit -l fin``
+
+-h, --help
+^^^^^^^^^^
+
+Displays command line help.
+
+file
+^^^^
+
+Symbol file name. Symbol file is simple text file containing symbol definition.
Usage
-----
@@ -38,7 +52,7 @@ See :doc:`menu`.
Toolbar
^^^^^^^
-Toolbar upper line contains buttons for menu functions. Other lines contain drawing setting items.
+Toolbar upper line contains buttons for menu functions. Second line contains application drawing and user interface settings. Third line contains settings stored with edited symbol.
See :doc:`tools`.
@@ -50,4 +64,4 @@ xxx
Statusbar
^^^^^^^^^
-Bottom status bar shows mouse coordinates at left and symbol textual representation at right. Representation is same as format used for saving symbol to text file.
+Bottom status bar shows mouse coordinates at left and symbol textual representation at right. Representation is same as format used for saving symbol to text file, but the active item definition is highlighted.
diff --git a/help/fin/usage.rst b/help/fin/usage.rst
index 627e345..114766b 100644
--- a/help/fin/usage.rst
+++ b/help/fin/usage.rst
@@ -11,18 +11,32 @@ xxx
Komentorivi
-----------
-Komentoriviparametrit::
+Käyttö: ``symedit [options] file``
- Usage: symedit [options] file
+-t, --transfer
+^^^^^^^^^^^^^^
- Options:
- -t, --transfer Symbolitiedosto on siirtotiedosto.
- -s, --symbol <symboli> Lue symboli parametrista <symboli>.
- -l, --language <kieli> Sovelluksen kielen lyhenne <kieli>.
- -h, --help Displays this help.
+Parametrina annettu tiedosto on siirtotiedosto. Kun ohjelma lopetetaan, editoitava symboli tallennetaan tähän tiedostoon automaattisesti.
- Arguments:
- file Symbolitiedoston nimi.
+-s, --symbol <symbol>
+^^^^^^^^^^^^^^^^^^^^^
+
+Lukee symbolin määrittelyn. Esimerkiksi: ``symedit -s R50;U0,50;D0,-50;U-50,0;D50,0``
+
+-l, --language <lang>
+^^^^^^^^^^^^^^^^^^^^^
+
+Valitsee sovelluksen kielen. Tuettuja kieliä ovat englanti (eng) ja suomi (fin). Esimerkiksi: ``symedit -l fin``
+
+-h, --help
+^^^^^^^^^^
+
+Näyttää komentorivin ohjeen.
+
+file
+^^^^
+
+Symbolitiedoston nimi. Symbolitiedosto on tekstitiedosto, joka sisältää symbolin määrittelyn.
Käyttö
------
@@ -38,7 +52,7 @@ Katso :doc:`menu`.
Työkalupalkki
^^^^^^^^^^^^^
-Työkalupalkin ylemmällä rivillä ovat painikkeet valikon toiminnoille. Muilla riveillä ovat piirron asetukset.
+Työkalupalkin ylimmällä rivillä ovat painikkeet valikon toiminnoille. Toisella rivillä on ohjelman piirron ja käyttöliittymän asetuksia. Kolmannella rivillä on symbolin mukana tallentuvia asetuksia.
Katso :doc:`tools`.
@@ -50,5 +64,5 @@ xxx
Tilarivi
^^^^^^^^
-Alareunan tilarivi näyttää vasemmalla hiiren koordinaatit ja oikealla symbolin tekstimuotoisen esityksen. Muoto on sama, jossa symboli tallentuu tekstitiedostoon.
+Alareunan tilarivi näyttää vasemmalla hiiren koordinaatit ja oikealla symbolin tekstimuotoisen esityksen. Muoto on sama, jossa symboli tallentuu tekstitiedostoon, mutta lisäksi aktiivisen kohteen määritys on korostettu.
diff --git a/locale/symedit.en_GB.ts b/locale/symedit.en_GB.ts
index 726be0e..fcadb1a 100644
--- a/locale/symedit.en_GB.ts
+++ b/locale/symedit.en_GB.ts
@@ -253,63 +253,75 @@
<source></source>
<translation>Draw text</translation>
</message>
+ <message id="id_toolbar_application_settings">
+ <source></source>
+ <translation>Application:</translation>
+ </message>
<message id="id_toolbar_snap_grid">
<source></source>
<translation>Grid Snap</translation>
</message>
- <message id="id_toolbar_line_width">
- <source></source>
- <translation>Line Width</translation>
- </message>
- <message id="id_toolbar_text_size">
- <source></source>
- <translation>Text Size</translation>
- </message>
+ <message id="id_toolbar_line_width">
+ <source></source>
+ <translation>Line Width</translation>
+ </message>
+ <message id="id_toolbar_text_size">
+ <source></source>
+ <translation>Text Size</translation>
+ </message>
+ <message id="id_toolbar_language">
+ <source></source>
+ <translation>Language</translation>
+ </message>
+ <message id="id_toolbar_symbol_settings">
+ <source></source>
+ <translation>Symbol:</translation>
+ </message>
<message id="id_toolbar_color_index">
<source></source>
<translation>Color Index</translation>
</message>
- <message id="id_toolbar_color_white">
- <source></source>
- <translation>0 White</translation>
- </message>
- <message id="id_toolbar_color_black">
- <source></source>
- <translation>1 Black</translation>
- </message>
- <message id="id_toolbar_color_blue">
- <source></source>
- <translation>2 Blue</translation>
- </message>
- <message id="id_toolbar_color_red">
- <source></source>
- <translation>3 Red</translation>
- </message>
- <message id="id_toolbar_color_green">
- <source></source>
- <translation>4 Green</translation>
- </message>
- <message id="id_toolbar_color_yellow">
- <source></source>
- <translation>5 Yellow</translation>
- </message>
- <message id="id_toolbar_fill_item">
- <source></source>
- <translation>Item Fill</translation>
- </message>
- <message id="id_toolbar_fill_none">
- <source></source>
- <translation>0 No fill</translation>
- </message>
- <message id="id_toolbar_fill_back">
- <source></source>
- <translation>1 Background</translation>
- </message>
- <message id="id_toolbar_fill_area">
- <source></source>
- <translation>2 Fill area</translation>
- </message>
- <message id="id_toolbar_alignment">
+ <message id="id_toolbar_color_white">
+ <source></source>
+ <translation>0 White (background)</translation>
+ </message>
+ <message id="id_toolbar_color_black">
+ <source></source>
+ <translation>1 Black (default)</translation>
+ </message>
+ <message id="id_toolbar_color_blue">
+ <source></source>
+ <translation>2 Blue</translation>
+ </message>
+ <message id="id_toolbar_color_red">
+ <source></source>
+ <translation>3 Red</translation>
+ </message>
+ <message id="id_toolbar_color_green">
+ <source></source>
+ <translation>4 Green</translation>
+ </message>
+ <message id="id_toolbar_color_yellow">
+ <source></source>
+ <translation>5 Yellow</translation>
+ </message>
+ <message id="id_toolbar_fill_item">
+ <source></source>
+ <translation>Item Fill</translation>
+ </message>
+ <message id="id_toolbar_fill_none">
+ <source></source>
+ <translation>0 No fill</translation>
+ </message>
+ <message id="id_toolbar_fill_back">
+ <source></source>
+ <translation>1 Background</translation>
+ </message>
+ <message id="id_toolbar_fill_area">
+ <source></source>
+ <translation>2 Fill area</translation>
+ </message>
+ <message id="id_toolbar_alignment">
<source></source>
<translation>Alignment</translation>
</message>
diff --git a/locale/symedit.fi_FI.ts b/locale/symedit.fi_FI.ts
index 50c4050..e1cdd72 100644
--- a/locale/symedit.fi_FI.ts
+++ b/locale/symedit.fi_FI.ts
@@ -253,63 +253,75 @@
<source></source>
<translation>Piirrä teksti</translation>
</message>
+ <message id="id_toolbar_application_settings">
+ <source></source>
+ <translation>Sovellus:</translation>
+ </message>
<message id="id_toolbar_snap_grid">
<source></source>
<translation>Ruudukon tartunta</translation>
</message>
- <message id="id_toolbar_line_width">
- <source></source>
- <translation>Viivan leveys</translation>
- </message>
- <message id="id_toolbar_text_size">
- <source></source>
- <translation>Tekstin koko</translation>
- </message>
+ <message id="id_toolbar_line_width">
+ <source></source>
+ <translation>Viivan leveys</translation>
+ </message>
+ <message id="id_toolbar_text_size">
+ <source></source>
+ <translation>Tekstin koko</translation>
+ </message>
+ <message id="id_toolbar_language">
+ <source></source>
+ <translation>Kieli</translation>
+ </message>
+ <message id="id_toolbar_symbol_settings">
+ <source></source>
+ <translation>Symboli:</translation>
+ </message>
<message id="id_toolbar_color_index">
<source></source>
<translation>Värin indeksi</translation>
</message>
- <message id="id_toolbar_color_white">
- <source></source>
- <translation>0 Valkoinen</translation>
- </message>
- <message id="id_toolbar_color_black">
- <source></source>
- <translation>1 Musta</translation>
- </message>
- <message id="id_toolbar_color_blue">
- <source></source>
- <translation>2 Sininen</translation>
- </message>
- <message id="id_toolbar_color_red">
- <source></source>
- <translation>3 Punainen</translation>
- </message>
- <message id="id_toolbar_color_green">
- <source></source>
- <translation>4 Vihreä</translation>
- </message>
- <message id="id_toolbar_color_yellow">
- <source></source>
- <translation>5 Keltainen</translation>
- </message>
- <message id="id_toolbar_fill_item">
- <source></source>
- <translation>Kohteen täyttö</translation>
- </message>
- <message id="id_toolbar_fill_none">
- <source></source>
- <translation>0 Ei täyttöä</translation>
- </message>
- <message id="id_toolbar_fill_back">
- <source></source>
- <translation>1 Taustaväri</translation>
- </message>
- <message id="id_toolbar_fill_area">
- <source></source>
- <translation>2 Alueen täyttö</translation>
- </message>
- <message id="id_toolbar_alignment">
+ <message id="id_toolbar_color_white">
+ <source></source>
+ <translation>0 Valkoinen (tausta)</translation>
+ </message>
+ <message id="id_toolbar_color_black">
+ <source></source>
+ <translation>1 Musta (oletus)</translation>
+ </message>
+ <message id="id_toolbar_color_blue">
+ <source></source>
+ <translation>2 Sininen</translation>
+ </message>
+ <message id="id_toolbar_color_red">
+ <source></source>
+ <translation>3 Punainen</translation>
+ </message>
+ <message id="id_toolbar_color_green">
+ <source></source>
+ <translation>4 Vihreä</translation>
+ </message>
+ <message id="id_toolbar_color_yellow">
+ <source></source>
+ <translation>5 Keltainen</translation>
+ </message>
+ <message id="id_toolbar_fill_item">
+ <source></source>
+ <translation>Kohteen täyttö</translation>
+ </message>
+ <message id="id_toolbar_fill_none">
+ <source></source>
+ <translation>0 Ei täyttöä</translation>
+ </message>
+ <message id="id_toolbar_fill_back">
+ <source></source>
+ <translation>1 Taustaväri</translation>
+ </message>
+ <message id="id_toolbar_fill_area">
+ <source></source>
+ <translation>2 Alueen täyttö</translation>
+ </message>
+ <message id="id_toolbar_alignment">
<source></source>
<translation>Tekstin asemointi</translation>
</message>
diff --git a/locale/symedit.ts b/locale/symedit.ts
index 08ae7f2..5ef7b66 100644
--- a/locale/symedit.ts
+++ b/locale/symedit.ts
@@ -229,63 +229,75 @@
<source></source>
<translation type="unfinished"></translation>
</message>
+ <message id="id_toolbar_application_settings">
+ <source></source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="id_toolbar_snap_grid">
<source></source>
<translation type="unfinished"></translation>
</message>
- <message id="id_toolbar_line_width">
- <source></source>
- <translation type="unfinished"></translation>
- </message>
- <message id="id_toolbar_text_size">
- <source></source>
- <translation type="unfinished"></translation>
- </message>
+ <message id="id_toolbar_line_width">
+ <source></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="id_toolbar_text_size">
+ <source></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="id_toolbar_language">
+ <source></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="id_toolbar_symbol_settings">
+ <source></source>
+ <translation type="unfinished"></translation>
+ </message>
<message id="id_toolbar_color_index">
<source></source>
<translation type="unfinished"></translation>
</message>
- <message id="id_toolbar_color_white">
- <source></source>
- <translation type="unfinished"></translation>
- </message>
- <message id="id_toolbar_color_black">
- <source></source>
- <translation type="unfinished"></translation>
- </message>
- <message id="id_toolbar_color_blue">
- <source></source>
- <translation type="unfinished"></translation>
- </message>
- <message id="id_toolbar_color_red">
- <source></source>
- <translation type="unfinished"></translation>
- </message>
- <message id="id_toolbar_color_green">
- <source></source>
- <translation type="unfinished"></translation>
- </message>
- <message id="id_toolbar_color_yellow">
- <source></source>
- <translation type="unfinished"></translation>
- </message>
- <message id="id_toolbar_fill_item">
- <source></source>
- <translation type="unfinished"></translation>
- </message>
- <message id="id_toolbar_fill_none">
- <source></source>
- <translation type="unfinished"></translation>
- </message>
- <message id="id_toolbar_fill_back">
- <source></source>
- <translation type="unfinished"></translation>
- </message>
- <message id="id_toolbar_fill_area">
- <source></source>
- <translation type="unfinished"></translation>
- </message>
- <message id="id_toolbar_alignment">
+ <message id="id_toolbar_color_white">
+ <source></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="id_toolbar_color_black">
+ <source></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="id_toolbar_color_blue">
+ <source></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="id_toolbar_color_red">
+ <source></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="id_toolbar_color_green">
+ <source></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="id_toolbar_color_yellow">
+ <source></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="id_toolbar_fill_item">
+ <source></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="id_toolbar_fill_none">
+ <source></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="id_toolbar_fill_back">
+ <source></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="id_toolbar_fill_area">
+ <source></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message id="id_toolbar_alignment">
<source></source>
<translation type="unfinished"></translation>
</message>
diff --git a/main.cpp b/main.cpp
index 27204c8..1cd4b49 100644
--- a/main.cpp
+++ b/main.cpp
@@ -51,13 +51,6 @@ int main(int argc, char *argv[])
}
bool transfer = parser.isSet(transferoption);
QString symbol = parser.value(symboloption);
- QString language = parser.value(languageoption);
- if ( language.isEmpty() )
- language = "eng"; //## use fi_FI and en_GB?
-
- // set current translator
- if ( currenttranslator.load(language == "fin" ? ":/locale/symedit.fi_FI.qm" : "") )
- QCoreApplication::installTranslator(&currenttranslator);
// register enumerations
qmlRegisterUncreatableMetaObject(Operation::staticMetaObject,
@@ -65,9 +58,18 @@ int main(int argc, char *argv[])
// register manager
QQmlApplicationEngine engine;
- SymEditManager manager(filename, symbol, language);
+ SymEditManager manager(filename, symbol);
engine.rootContext()->setContextProperty("manager", &manager);
+ // set current translator
+ QString language = manager.getTextSetting("Language");
+ QString lang = parser.value(languageoption);
+ if ( lang == "eng" || lang == "fin" ) //## use fi_FI and en_GB?
+ language = lang;
+ if ( currenttranslator.load(language == "fin" ? ":/locale/symedit.fi_FI.qm" : "") )
+ QCoreApplication::installTranslator(&currenttranslator);
+ manager.setLanguage(language);
+
// start application
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if ( engine.rootObjects().isEmpty() )
diff --git a/main.qml b/main.qml
index 66a3b20..edad4e7 100644
--- a/main.qml
+++ b/main.qml
@@ -18,6 +18,8 @@ ApplicationWindow
property int snapgrid: 1
property real linewidth: 1
property int textsize: 1
+ property string language: "eng"
+
property int colorindex: 1
property int fillitem: 0
property int alignment: 1
@@ -171,6 +173,8 @@ ApplicationWindow
RowLayout
{
height: 32
+ Label { text: qsTrId("id_toolbar_application_settings") }
+ BarSeparator { }
Label { text: qsTrId("id_toolbar_snap_grid") }
ComboBox
{
@@ -212,10 +216,22 @@ ApplicationWindow
onCurrentIndexChanged: { textsize = currentIndex + 1; editor.update() }
function setSize() { currentIndex = textsize - 1 }
}
+ BarSeparator { }
+ Label { text: qsTrId("id_toolbar_language") }
+ ComboBox
+ {
+ id: langlist
+ implicitWidth: 60
+ model: [ "eng", "fin" ]
+ onCurrentIndexChanged: { language = (currentIndex ? "fin" : "eng") }
+ function setLang() { currentIndex = (language === "eng" ? 0 : 1) }
+ }
}
RowLayout
{
height: 32
+ Label { text: qsTrId("id_toolbar_symbol_settings") }
+ BarSeparator { }
Label { text: qsTrId("id_toolbar_color_index") }
ComboBox
{
@@ -303,7 +319,7 @@ ApplicationWindow
if ( selectExisting )
{
manager.open(fileUrl)
- symbol = manager.getSymbol()
+ symbol = manager.getSymbol(true)
}
else // save
manager.save(fileUrl)
@@ -332,6 +348,8 @@ ApplicationWindow
onSnapgridChanged: { manager.setIntSetting("SnapGrid", snapgrid); editor.update() }
onLinewidthChanged: { manager.setIntSetting("LineWidth", linewidth) }
onTextsizeChanged: { manager.setIntSetting("TextSize", textsize) }
+ onLanguageChanged: { manager.setTextSetting("Language", language) }
+
onColorindexChanged: { manager.setIntSetting("ColorIndex", colorindex) }
onFillitemChanged: { manager.setIntSetting("FillItem", fillitem) }
onAlignmentChanged: { manager.setIntSetting("Alignment", alignment) }
@@ -349,6 +367,8 @@ ApplicationWindow
snapgrid = manager.getIntSetting("SnapGrid")
linewidth = manager.getIntSetting("LineWidth")
textsize = manager.getIntSetting("TextSize")
+ language = manager.getTextSetting("Language")
+
colorindex = manager.getIntSetting("ColorIndex")
fillitem = manager.getIntSetting("FillItem")
alignment = manager.getIntSetting("Alignment")
@@ -356,14 +376,16 @@ ApplicationWindow
textfield.text = manager.getTextSetting("TextValue")
tool = manager.getIntSetting("Tool")
- filllist.setFill()
snaplist.setSnap()
- sizelist.setSize()
widthlist.setWidth()
- alignlist.setAlign()
+ sizelist.setSize()
+ langlist.setLang()
+
colorlist.setColor()
+ filllist.setFill()
+ alignlist.setAlign()
- symbol = manager.getSymbol()
+ symbol = manager.getSymbol(true)
visible = true
manager.setInitialized()
@@ -424,7 +446,7 @@ ApplicationWindow
{
if ( manager.undo(undo) )
{
- symbol = manager.getSymbol()
+ symbol = manager.getSymbol(true)
editor.update()
}
}
@@ -432,7 +454,7 @@ ApplicationWindow
function cutsymbol()
{
manager.cutClipboard();
- symbol = manager.getSymbol()
+ symbol = manager.getSymbol(true)
editor.update()
}
@@ -444,28 +466,28 @@ ApplicationWindow
function pastesymbol()
{
manager.pasteClipboard();
- symbol = manager.getSymbol()
+ symbol = manager.getSymbol(true)
editor.update()
}
function rotatesymbol(dir)
{
manager.rotateSymbol(dir)
- symbol = manager.getSymbol()
+ symbol = manager.getSymbol(true)
editor.update()
}
function raiseitem(dir)
{
manager.raiseItem(dir)
- symbol = manager.getSymbol()
+ symbol = manager.getSymbol(true)
editor.update()
}
function removeitem()
{
manager.removeItem()
- symbol = manager.getSymbol()
+ symbol = manager.getSymbol(true)
editor.update()
}
diff --git a/symbol.cpp b/symbol.cpp
index 1f2a95d..3133e3d 100644
--- a/symbol.cpp
+++ b/symbol.cpp
@@ -106,9 +106,10 @@ void SymEditSymbol::Load(const QString& buffer)
//! Save symbol to string.
/*!
\param buffer String buffer.
+ \param rich Rich text with layout.
\return Reference to buffer.
*/
-QString& SymEditSymbol::Save(QString& buffer) const
+QString& SymEditSymbol::Save(QString& buffer, bool rich) const
{
auto appendvalue = [](QString& buffer, const QPoint& point, int count)
{
@@ -127,60 +128,68 @@ QString& SymEditSymbol::Save(QString& buffer) const
buffer.clear();
QPoint position(0, 0);
- int color = 1, fill = 0, align = 9;
- for ( const auto& item : Items ) switch ( item.Operation )
+ int index = 0, color = 1, fill = 0, align = 9;
+ for ( const auto& item : Items )
{
- case Operation::Line:
- case Operation::Rectangle:
- {
- if ( item.Color != color )
- color = appendoption('C', buffer, item.Color);
- if ( item.Fill != fill )
- fill = appendoption('F', buffer, item.Fill);
- if ( item.Point != position )
- appendvalue(buffer.append('U'), item.Point, 2);
- appendvalue(buffer.append(item.Operation == Operation::Line ? 'D' : 'B'), item.Value, 2);
- position = item.Value;
- break;
- }
- case Operation::Circle:
- {
- if ( item.Color != color )
- color = appendoption('C', buffer, item.Color);
- if ( item.Fill != fill )
- fill = appendoption('F', buffer, item.Fill);
- if ( item.Point != position )
- appendvalue(buffer.append('U'), item.Point, 2);
- appendvalue(buffer.append('R'), item.Value, 1);
- position = item.Point;
- break;
- }
- case Operation::Text:
- {
- if ( item.Color != color )
- color = appendoption('C', buffer, item.Color);
- if ( item.Align != align )
- align = appendoption('J', buffer, item.Align);
- if ( item.Point != position )
- appendvalue(buffer.append('U'), item.Point, 2);
- if ( item.Text.front() != '$' && item.Text.front() != '#' )
- buffer.append('!'); // constant text
- buffer.append(item.Text).append(';');
- break;
- }
- case Operation::Arc:
+ if ( rich && index == ActiveIndex )
+ buffer.append("<b>");
+ switch ( item.Operation )
{
- if ( item.Color != color )
- color = appendoption('C', buffer, item.Color);
- if ( item.Fill != fill )
- fill = appendoption('F', buffer, item.Fill);
- if ( item.Point != position )
- appendvalue(buffer.append('U'), item.Point, 2);
- appendvalue(buffer.append('H'), item.Value, 1);
- position = item.Point;
- break;
+ case Operation::Line:
+ case Operation::Rectangle:
+ {
+ if ( item.Color != color )
+ color = appendoption('C', buffer, item.Color);
+ if ( item.Fill != fill )
+ fill = appendoption('F', buffer, item.Fill);
+ if ( item.Point != position )
+ appendvalue(buffer.append('U'), item.Point, 2);
+ appendvalue(buffer.append(item.Operation == Operation::Line ? 'D' : 'B'), item.Value, 2);
+ position = item.Value;
+ break;
+ }
+ case Operation::Circle:
+ {
+ if ( item.Color != color )
+ color = appendoption('C', buffer, item.Color);
+ if ( item.Fill != fill )
+ fill = appendoption('F', buffer, item.Fill);
+ if ( item.Point != position )
+ appendvalue(buffer.append('U'), item.Point, 2);
+ appendvalue(buffer.append('R'), item.Value, 1);
+ position = item.Point;
+ break;
+ }
+ case Operation::Text:
+ {
+ if ( item.Color != color )
+ color = appendoption('C', buffer, item.Color);
+ if ( item.Align != align )
+ align = appendoption('J', buffer, item.Align);
+ if ( item.Point != position )
+ appendvalue(buffer.append('U'), item.Point, 2);
+ if ( item.Text.front() != '$' && item.Text.front() != '#' )
+ buffer.append('!'); // constant text
+ buffer.append(item.Text).append(';');
+ break;
+ }
+ case Operation::Arc:
+ {
+ if ( item.Color != color )
+ color = appendoption('C', buffer, item.Color);
+ if ( item.Fill != fill )
+ fill = appendoption('F', buffer, item.Fill);
+ if ( item.Point != position )
+ appendvalue(buffer.append('U'), item.Point, 2);
+ appendvalue(buffer.append('H'), item.Value, 1);
+ position = item.Point;
+ break;
+ }
+ default: assert(0);
}
- default: assert(0);
+ if ( rich && index == ActiveIndex )
+ buffer.append("</b>");
+ ++index;
}
if ( !buffer.isEmpty() && buffer.back() == ';' )
buffer.chop(1);
diff --git a/symbol.h b/symbol.h
index fcd3624..bdde5e1 100644
--- a/symbol.h
+++ b/symbol.h
@@ -46,7 +46,7 @@ public:
};
void Load(const QString& buffer);
- QString& Save(QString& buffer) const;
+ QString& Save(QString& buffer, bool rich = false) const;
void Clear();
Item& AddItem(Operation::Type operation, QPoint point, int value, int color, int fill);
diff --git a/symedit.cpp b/symedit.cpp
index 00ca56f..2cf2ad9 100644
--- a/symedit.cpp
+++ b/symedit.cpp
@@ -13,14 +13,15 @@
//! Constructor.
SymEditSettings::SymEditSettings()
{
- IntValues.emplace("FillItem", 0);
- IntValues.emplace("Alignment", 9);
+ IntValues.emplace("SnapGrid", 5);
IntValues.emplace("LineWidth", 1);
IntValues.emplace("TextSize", 1);
- IntValues.emplace("SnapGrid", 5);
IntValues.emplace("ColorIndex", 1);
+ IntValues.emplace("FillItem", 0);
+ IntValues.emplace("Alignment", 9);
IntValues.emplace("Tool", 1);
+ TextValues.emplace("Language", "");
TextValues.emplace("TextValue", "");
TextValues.emplace("Directory", "");
}
@@ -40,6 +41,8 @@ void SymEditSettings::Load()
IntValues.at("SnapGrid") = settings.value("editor/snap", 5).toInt();
IntValues.at("LineWidth") = settings.value("editor/width", 1).toInt();
IntValues.at("TextSize") = settings.value("editor/size", 1).toInt();
+ TextValues.at("Language") = settings.value("editor/lang").toString();
+
// IntValues.at("ColorIndex") = settings.value("editor/color", 1).toInt();
// IntValues.at("FillItem") = settings.value("editor/fill", 0).toInt();
IntValues.at("Alignment") = settings.value("editor/align", 9).toInt();
@@ -62,6 +65,8 @@ void SymEditSettings::Save() const
settings.setValue("editor/snap", IntValues.at("SnapGrid"));
settings.setValue("editor/width", IntValues.at("LineWidth"));
settings.setValue("editor/size", IntValues.at("TextSize"));
+ settings.setValue("editor/lang", TextValues.at("Language"));
+
settings.setValue("editor/color", IntValues.at("ColorIndex"));
settings.setValue("editor/fill", IntValues.at("FillItem"));
settings.setValue("editor/align", IntValues.at("Alignment"));
@@ -86,8 +91,8 @@ SymEditManager::SymEditManager(QObject* parent) : QObject(parent)
\param filename Symbol file name from command line.
\param symbol Symbol string from command line.
*/
-SymEditManager::SymEditManager(const QString& filename, const QString& symbol, const QString& language)
- : QObject(nullptr), FileName(filename), Language(language)
+SymEditManager::SymEditManager(const QString& filename, const QString& symbol)
+ : QObject(nullptr), FileName(filename)
{
Settings.Load();
@@ -176,12 +181,13 @@ QString SymEditManager::getTextSetting(QString name) const
//! Get symbol as string.
/*!
+ \param rich Rich text with layout.
\return Symbol as string.
*/
-QString SymEditManager::getSymbol() const
+QString SymEditManager::getSymbol(bool rich) const
{
QString buffer;
- return Symbol.Save(buffer);
+ return Symbol.Save(buffer, rich);
}
//@{
@@ -400,7 +406,7 @@ void SymEditManager::cutClipboard()
if ( QClipboard* clipboard = QGuiApplication::clipboard() )
{
undosave();
- clipboard->setText(getSymbol());
+ clipboard->setText(getSymbol(false));
Symbol.Clear();
}
}
@@ -409,7 +415,7 @@ void SymEditManager::cutClipboard()
void SymEditManager::copyClipboard() const
{
if ( QClipboard* clipboard = QGuiApplication::clipboard() )
- clipboard->setText(getSymbol());
+ clipboard->setText(getSymbol(false));
}
//! Paste symbol from clipboard.
@@ -562,9 +568,18 @@ bool SymEditManager::save(const QString& filename)
if ( file.open(QIODevice::WriteOnly | QIODevice::Text) )
{
QTextStream output(&file);
- output << getSymbol();
+ output << getSymbol(false);
FileName = filename;
return true;
}
return false;
}
+
+//! Set language.
+/*!
+ \param lang Language abbreviation.
+*/
+void SymEditManager::setLanguage(QString lang)
+{
+ Language = lang;
+}
diff --git a/symedit.h b/symedit.h
index e8f83cc..f57fd8f 100644
--- a/symedit.h
+++ b/symedit.h
@@ -38,7 +38,7 @@ class SymEditManager : public QObject
public:
explicit SymEditManager(QObject* parent = nullptr);
- explicit SymEditManager(const QString& filename, const QString& symbol, const QString& language);
+ explicit SymEditManager(const QString& filename, const QString& symbol);
//! Save settings.
void SaveSettings() const { Settings.Save(); }
@@ -54,7 +54,7 @@ public:
Q_INVOKABLE void setTextSetting(QString name, QString value);
Q_INVOKABLE QString getTextSetting(QString name) const;
- Q_INVOKABLE QString getSymbol() const;
+ Q_INVOKABLE QString getSymbol(bool rich) const;
Q_INVOKABLE bool addValueItem(int operation, QPoint point, int value, int color, int fill);
Q_INVOKABLE bool addPointItem(int operation, QPoint point, QPoint value, int color, int fill);
@@ -90,6 +90,7 @@ public:
bool open(const QString& filename);
bool save(const QString& filename);
+ void setLanguage(QString lang);
private:
void undosave();