diff options
| author | Mikko Syrjä <mikko@3d-system.fi> | 2019-03-27 01:45:35 +0200 |
|---|---|---|
| committer | Mikko Syrjä <mikko@3d-system.fi> | 2019-03-27 01:45:35 +0200 |
| commit | 051e1af212c4b36fea1143028b7117a590287047 (patch) | |
| tree | 4793120c8be195d2ddf990d7440bf87e11ce6918 | |
| parent | b4a39f7c233c1f26eb9874fc1221ea1408a3fa97 (diff) | |
| download | symedit-051e1af212c4b36fea1143028b7117a590287047.tar.gz symedit-051e1af212c4b36fea1143028b7117a590287047.zip | |
Language selection interface and status bar bold item.
| -rw-r--r-- | Editor.qml | 9 | ||||
| -rw-r--r-- | help/eng/usage.rst | 36 | ||||
| -rw-r--r-- | help/fin/usage.rst | 36 | ||||
| -rw-r--r-- | locale/symedit.en_GB.ts | 110 | ||||
| -rw-r--r-- | locale/symedit.fi_FI.ts | 110 | ||||
| -rw-r--r-- | locale/symedit.ts | 110 | ||||
| -rw-r--r-- | main.cpp | 18 | ||||
| -rw-r--r-- | main.qml | 44 | ||||
| -rw-r--r-- | symbol.cpp | 113 | ||||
| -rw-r--r-- | symbol.h | 2 | ||||
| -rw-r--r-- | symedit.cpp | 35 | ||||
| -rw-r--r-- | symedit.h | 5 |
12 files changed, 371 insertions, 257 deletions
@@ -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> @@ -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(¤ttranslator); // 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(¤ttranslator); + manager.setLanguage(language); + // start application engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); if ( engine.rootObjects().isEmpty() ) @@ -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() } @@ -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); @@ -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; +} @@ -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(); |
