Skip to content

Commit 7dabde0

Browse files
committed
Add settings for load/save file
1 parent 82f9bdc commit 7dabde0

File tree

5 files changed

+224
-4
lines changed

5 files changed

+224
-4
lines changed

gcodeworkshop/include/gcodeworkshop.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ class QStandardItem;
5656
class QStandardItemModel;
5757
class QToolBar;
5858
class QToolButton;
59-
class QWidget;
6059

6160
#include <documentinfo.h> // for DocumentInfo, DocumentInfo::Ptr
6261

gcodeworkshop/src/gcodeworkshop.cpp

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@
2020
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
2121
***************************************************************************/
2222

23-
#include <memory> // for shared_ptr, shared_ptr<>::element_type
24-
2523
#include <QAbstractItemModel> // for QTypeInfo<>::isLarge, QTypeInfo<>::isStatic
2624
#include <QAbstractPrintDialog> // for QAbstractPrintDialog, QAbstractPrintDialog::PrintSelection
2725
#include <QAction> // for QAction
@@ -121,6 +119,7 @@
121119
#include <serialporttestdialog.h> // SerialPortTestDialog
122120
#include <serialtransmissiondialog.h> // SerialTransmissionDialog
123121
#include <utils/medium.h> // Medium
122+
#include <utils/gcode-converter.h> // for Converter
124123
#include <version.h>
125124

126125
#include "capslockeventfilter.h" // for CapsLockEventFilter
@@ -951,6 +950,7 @@ void GCodeWorkShop::config()
951950
config.defaultReadOnly = m_defaultReadOnly;
952951
config.disableFileChangeMonitor = m_disableFileChangeMonitor;
953952
config.startEmpty = m_startEmpty;
953+
config.gcodeConverterOptions = GCode::Converter::defaultOptions();
954954
SetupDialog* setUpDialog = new SetupDialog(this, &config);
955955

956956
if (setUpDialog->exec() == QDialog::Accepted) {
@@ -980,6 +980,8 @@ void GCodeWorkShop::config()
980980
for (Document* doc : m_documentManager->documentList()) {
981981
doc->setReadOnly(m_defaultReadOnly);
982982
}
983+
984+
GCode::Converter::setDefaultOptions(config.gcodeConverterOptions);
983985
}
984986

985987
delete setUpDialog;
@@ -2036,6 +2038,14 @@ void GCodeWorkShop::readSettings()
20362038
m_documentManager->setDocumentStyle(style);
20372039
}
20382040

2041+
settings.beginGroup("GCode");
2042+
settings.beginGroup("Converter");
2043+
GCode::Converter::Options gcodeOptions = GCode::Converter::defaultOptions();
2044+
gcodeOptions.load(&settings);
2045+
GCode::Converter::setDefaultOptions(gcodeOptions);
2046+
settings.endGroup();
2047+
settings.endGroup();
2048+
20392049
m_sessionManager->load(&settings);
20402050

20412051
if (!m_startEmpty) {
@@ -2117,6 +2127,12 @@ void GCodeWorkShop::writeSettings()
21172127
//cleanup old settings
21182128
settings.remove("LastDoc");
21192129

2130+
settings.beginGroup("GCode");
2131+
settings.beginGroup("Converter");
2132+
GCode::Converter::defaultOptions().save(&settings);
2133+
settings.endGroup();
2134+
settings.endGroup();
2135+
21202136
if (!m_startEmpty) {
21212137
storeFileInfoInSession();
21222138
}
@@ -3434,7 +3450,7 @@ void GCodeWorkShop::loadPrinterSettings(QPrinter* printer)
34343450
void GCodeWorkShop::serialConfig()
34353451
{
34363452
SerialPortConfigDialog* serialConfigDialog = new SerialPortConfigDialog(this,
3437-
configBox->currentText());
3453+
configBox->currentText());
34383454

34393455
if (serialConfigDialog->exec() == QDialog::Accepted) {
34403456
loadSerialConfignames();

gcodeworkshop/src/setupdialog.cpp

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
2121
***************************************************************************/
2222

23+
#include <algorithm> // for sort, unique
24+
2325
#include <QAbstractButton> // for QAbstractButton
2426
#include <QButtonGroup> // for QButtonGroup
2527
#include <QByteArray> // for QByteArray
@@ -34,12 +36,14 @@
3436
#include <QFontDialog> // for QFontDialog
3537
#include <QLabel> // for QLabel
3638
#include <QLineEdit> // for QLineEdit
39+
#include <QList> // for QList
3740
#include <QListWidget> // for QListWidget
3841
#include <QListWidgetItem> // for QListWidgetItem
3942
#include <QPalette> // for QPalette
4043
#include <QPushButton> // for QPushButton
4144
#include <QRegularExpression> // for QRegularExpression
4245
#include <QRegularExpressionValidator> // for QRegularExpressionValidator
46+
#include <QTextCodec>
4347
#include <QVariant> // for QVariant
4448
#include <Qt> // for GlobalColor, WindowFlags
4549
#include <QtAlgorithms> // for qDeleteAll
@@ -260,6 +264,18 @@ SetupDialog::SetupDialog(QWidget* parent, const AppConfig* prop,
260264
connect(defaultButton, SIGNAL(clicked()), SLOT(setDefaultProp()));
261265
connect(okButton, SIGNAL(clicked()), SLOT(accept()));
262266
connect(cancelButton, SIGNAL(clicked()), SLOT(close()));
267+
268+
connect(ui_showAllCodecs, &QCheckBox::stateChanged,
269+
this, &SetupDialog::showAllCodecsClicked);
270+
connect(ui_showAllCodecs, &QCheckBox::stateChanged,
271+
this, &SetupDialog::fillCodecs);
272+
connect(ui_showAliases, &QCheckBox::stateChanged,
273+
this, &SetupDialog::fillCodecs);
274+
ui_dropControl->setChecked(prop->gcodeConverterOptions.dropControll);
275+
ui_dropExtra->setChecked(prop->gcodeConverterOptions.dropExtented);
276+
ui_dropEmptyLine->setChecked(prop->gcodeConverterOptions.dropEmptyLine);
277+
showAllCodecsClicked();
278+
fillCodecs();
263279
}
264280

265281
SetupDialog::~SetupDialog()
@@ -429,6 +445,21 @@ AppConfig SetupDialog::getSettings()
429445

430446
editProp.editorProperties.guessFileNameByProgNum = progNumCheckBox->isChecked();
431447

448+
editProp.gcodeConverterOptions.dropControll = ui_dropControl->isChecked();
449+
editProp.gcodeConverterOptions.dropExtented = ui_dropExtra->isChecked();
450+
editProp.gcodeConverterOptions.dropEmptyLine = ui_dropEmptyLine->isChecked();
451+
editProp.gcodeConverterOptions.codecName.clear();
452+
453+
if (ui_encodingCombo->currentIndex() != 0) {
454+
QTextCodec* codec = QTextCodec::codecForName(ui_encodingCombo->currentText().toLatin1());
455+
456+
if (codec != nullptr) {
457+
editProp.gcodeConverterOptions.codecName = codec->name();
458+
} else {
459+
editProp.gcodeConverterOptions.codecName = ui_encodingCombo->currentText().toLatin1();
460+
}
461+
}
462+
432463
return (editProp);
433464
}
434465

@@ -667,3 +698,65 @@ void SetupDialog::on_btnBrowseDirectory_clicked()
667698
edtSaveDirectory->setText(dir);
668699
}
669700
}
701+
702+
void SetupDialog::showAllCodecsClicked()
703+
{
704+
ui_showAliases->setEnabled(ui_showAllCodecs->isChecked());
705+
}
706+
707+
void SetupDialog::fillCodecs()
708+
{
709+
ui_encodingCombo->clear();
710+
ui_encodingCombo->setEditable(!ui_showAllCodecs->isChecked());
711+
ui_encodingCombo->addItem(tr("System charset (%1)").arg(QString(QTextCodec::codecForLocale()->name())));
712+
ui_encodingCombo->insertSeparator(1);
713+
714+
QList<int> mibList;
715+
716+
if (ui_showAllCodecs->isChecked()) {
717+
mibList = QTextCodec::availableMibs();
718+
} else {
719+
mibList = {
720+
2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2258
721+
};
722+
}
723+
724+
QList<QByteArray> codecList;
725+
726+
for (int i : mibList) {
727+
QTextCodec* tc = QTextCodec::codecForMib(i);
728+
729+
if (tc != nullptr) {
730+
codecList.append(tc->name());
731+
732+
if (ui_showAllCodecs->isChecked() && ui_showAliases->isChecked()) {
733+
codecList.append(tc->aliases());
734+
}
735+
}
736+
}
737+
738+
std::sort(codecList.begin(), codecList.end());
739+
auto last = std::unique(codecList.begin(), codecList.end());
740+
codecList.erase(last, codecList.end());
741+
742+
for (auto i = codecList.cbegin(); i < codecList.cend(); ++i) {
743+
ui_encodingCombo->addItem(*i);
744+
}
745+
746+
QByteArray currentCodec = editProp.gcodeConverterOptions.codecName;
747+
int currentIndex = codecList.indexOf(currentCodec);
748+
749+
if (currentIndex < 0) {
750+
if (! currentCodec.isEmpty()) {
751+
ui_encodingCombo->insertItem(2, currentCodec);
752+
ui_encodingCombo->insertSeparator(3);
753+
currentIndex = 2;
754+
} else {
755+
currentIndex = 0;
756+
}
757+
} else {
758+
currentIndex += 2;
759+
}
760+
761+
ui_encodingCombo->setCurrentIndex(currentIndex);
762+
}

gcodeworkshop/src/setupdialog.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class QWidget;
3535

3636
#include <gcoderstyle.h> // for GCoderStyle
3737
#include <gcoderwidgetproperties.h> // for GCoderWidgetProperties
38+
#include <utils/gcode-converter.h>
3839

3940
#include "ui_setupdialog.h" // for Ui::SetupDialog
4041

@@ -50,6 +51,7 @@ struct AppConfig {
5051
bool defaultReadOnly;
5152
bool startEmpty;
5253
bool disableFileChangeMonitor;
54+
GCode::Converter::Options gcodeConverterOptions;
5355
};
5456

5557

@@ -76,6 +78,8 @@ private slots:
7678
void changeColor(QAbstractButton* button);
7779
void setDefaultProp();
7880
void browseButtonClicked();
81+
void showAllCodecsClicked();
82+
void fillCodecs();
7983

8084
private:
8185
AppConfig editProp;

gcodeworkshop/src/setupdialog.ui

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -420,6 +420,114 @@
420420
</item>
421421
</layout>
422422
</widget>
423+
<widget class="QWidget" name="openSaveTab">
424+
<attribute name="title">
425+
<string>Open/Save</string>
426+
</attribute>
427+
<layout class="QHBoxLayout" name="horizontalLayout_11">
428+
<item>
429+
<widget class="QGroupBox" name="ui_openGroup">
430+
<property name="title">
431+
<string>When open file:</string>
432+
</property>
433+
<layout class="QGridLayout" name="gridLayout_3">
434+
<item row="2" column="0">
435+
<widget class="QCheckBox" name="ui_dropControl">
436+
<property name="toolTip">
437+
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Older CNC systems could add control characters (&lt;code&gt;0x00&lt;/code&gt;-&lt;code&gt;0x1f&lt;/code&gt;) when uploading a file via the serial port, which looks like mojibake. The editor can delete such characters, leaving only carriage and newline characters.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
438+
</property>
439+
<property name="text">
440+
<string>Discard control symbols.</string>
441+
</property>
442+
</widget>
443+
</item>
444+
<item row="0" column="0">
445+
<widget class="QCheckBox" name="ui_dropEmptyLine">
446+
<property name="toolTip">
447+
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;In some cases, the CNC inserts additional blank lines when the file is unloaded. The editor can recognise such lines and delete them.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
448+
</property>
449+
<property name="text">
450+
<string>Discard additional empty lines.</string>
451+
</property>
452+
</widget>
453+
</item>
454+
<item row="1" column="0">
455+
<widget class="QCheckBox" name="ui_dropExtra">
456+
<property name="toolTip">
457+
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Discard the upper 128 code points commonly used for national alphabets.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
458+
</property>
459+
<property name="text">
460+
<string>Discard extra symbols.</string>
461+
</property>
462+
</widget>
463+
</item>
464+
<item row="3" column="0">
465+
<spacer name="verticalSpacer_11">
466+
<property name="orientation">
467+
<enum>Qt::Vertical</enum>
468+
</property>
469+
<property name="sizeHint" stdset="0">
470+
<size>
471+
<width>20</width>
472+
<height>40</height>
473+
</size>
474+
</property>
475+
</spacer>
476+
</item>
477+
</layout>
478+
</widget>
479+
</item>
480+
<item>
481+
<widget class="QGroupBox" name="ui_encodingGroup">
482+
<property name="title">
483+
<string>Use encoding:</string>
484+
</property>
485+
<layout class="QGridLayout" name="gridLayout_5">
486+
<item row="3" column="0">
487+
<spacer name="verticalSpacer_10">
488+
<property name="orientation">
489+
<enum>Qt::Vertical</enum>
490+
</property>
491+
<property name="sizeHint" stdset="0">
492+
<size>
493+
<width>20</width>
494+
<height>40</height>
495+
</size>
496+
</property>
497+
</spacer>
498+
</item>
499+
<item row="2" column="0">
500+
<widget class="QComboBox" name="ui_encodingCombo">
501+
<property name="sizePolicy">
502+
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
503+
<horstretch>0</horstretch>
504+
<verstretch>0</verstretch>
505+
</sizepolicy>
506+
</property>
507+
<property name="editable">
508+
<bool>false</bool>
509+
</property>
510+
</widget>
511+
</item>
512+
<item row="0" column="0">
513+
<widget class="QCheckBox" name="ui_showAllCodecs">
514+
<property name="text">
515+
<string>Show all avalaible codecs</string>
516+
</property>
517+
</widget>
518+
</item>
519+
<item row="1" column="0">
520+
<widget class="QCheckBox" name="ui_showAliases">
521+
<property name="text">
522+
<string>Show aliases</string>
523+
</property>
524+
</widget>
525+
</item>
526+
</layout>
527+
</widget>
528+
</item>
529+
</layout>
530+
</widget>
423531
<widget class="QWidget" name="extensionsTab">
424532
<property name="accessibleName">
425533
<string/>

0 commit comments

Comments
 (0)