| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305 |
- /**
- * Copyright (c) 2011-2018 by Andrew Mustun. All rights reserved.
- *
- * This file is part of the QCAD project.
- *
- * QCAD is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * QCAD is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with QCAD.
- */
- include("scripts/library.js");
- include("scripts/EAction.js");
- include("scripts/Edit/AppPreferences/LanguagePreferences/LanguagePreferences.js");
- include("scripts/Edit/AppPreferences/InputPreferences/InputPreferences.js");
- include("scripts/Edit/DrawingPreferences/UnitSettings/UnitSettings.js");
- include("scripts/Edit/DrawingPreferences/PageSettings/PageSettings.js");
- include("scripts/sprintf.js");
- function FirstStart() {
- }
- FirstStart.prototype.showDialog = function() {
- var code;
-
- this.path = autoPath("scripts/Widgets/FirstStart");
- this.dialog = WidgetFactory.createWidget(this.path, "FirstStartDialog.ui", null);
- var pathFi = new QFileInfo(this.path);
- this.dialog.setWindowTitle(qsTr("%1 First Start").arg(qApp.applicationName));
- if (qApp.applicationName.contains("QCAD")) {
- if (RSettings.hasDarkGuiBackground()) {
- this.dialog.setStyleSheet("QDialog { border-image: url(" + pathFi.absoluteFilePath() + "/firststart-inverse.jpg) 0 0 0 0 stretch stretch; border-width: 0px; }");
- }
- else {
- this.dialog.setStyleSheet("QDialog { border-image: url(" + pathFi.absoluteFilePath() + "/firststart.jpg) 0 0 0 0 stretch stretch; border-width: 0px; }");
- //"QDialog{ background-image: url(" + pathFi.absoluteFilePath() + "/firststart.png) }";
- }
- }
- else {
- this.dialog.findChild("LanguageBackground").setStyleSheet("");
- this.dialog.findChild("Background").setStyleSheet("");
- if (!isNull(this.dialog.findChild("Left"))) {
- this.dialog.findChild("Left").setMinimumSize(0);
- }
- }
- this.widgets = getWidgets(this.dialog);
- // language combo
- var langCombo = this.widgets["Language"];
- langCombo.blockSignals(true);
- // langCombo.addItem("English", "en");
- var codes = LanguagePreferences.getLanguages();
- for ( var i = 0; i < codes.length; ++i) {
- code = codes[i];
- langCombo.addItem(LanguagePreferences.codeToString(code), code);
- }
- langCombo.blockSignals(false);
- // try to set the locale from system
- var sysLocale = QLocale.system();
- var systemLocale = sysLocale.name();
- var flags = makeQtMatchFlags(Qt.MatchExactly);
- var index = langCombo.findData(systemLocale, Qt.UserRole, flags);
- if (index===-1) {
- var re = new RegExp("(.+)_(.+)", "i");
- var found = systemLocale.match(re);
- var lang;
- if (isNull(found) || found.length < 2) {
- lang = "en";
- } else {
- lang = found[1];
- }
- flags = makeQtMatchFlags(Qt.MatchContains);
- index = langCombo.findData(lang, Qt.UserRole, flags);
- }
- if (index!==-1) {
- langCombo.setCurrentIndex(index);
- }
- code = langCombo.itemData(langCombo.currentIndex);
- langCombo.model().sort(0);
- var self = this;
- langCombo["currentIndexChanged(int)"].connect(function(index) {
- var code = langCombo.itemData(index);
- self.changeLanguage(code);
- });
- this.translators = [];
- this.changeLanguage(code);
- if (RSettings.getOriginalArguments().contains("-no-initial-dialog") || this.dialog.exec()) {
- // save settings
- // language:
- RSettings.setValue("Language/UiLanguage", langCombo.itemData(langCombo.currentIndex));
- // drawing unit and related settings:
- var drawingUnit = this.widgets["Unit"].currentIndex;
- RSettings.setValue("UnitSettings/Unit", drawingUnit);
- // adjust default dimension settings:
- var dimtxt = 2.5;
- if (drawingUnit===RS.Inch) {
- dimtxt = 1/8;
- RSettings.setValue("DimensionSettings/LinearFormat", RS.Engineering);
- }
- if (drawingUnit===RS.Foot) {
- dimtxt = 1/12;
- }
- RSettings.setValue("DimensionSettings/DIMTXT", dimtxt);
- RSettings.setValue("DimensionSettings/DIMEXE", dimtxt/2);
- RSettings.setValue("DimensionSettings/DIMEXO", dimtxt/4);
- RSettings.setValue("DimensionSettings/DIMGAP", dimtxt/4);
- RSettings.setValue("DimensionSettings/DIMASZ", dimtxt);
- RSettings.setValue("DimensionSettings/DIMDLI", dimtxt*2);
- var paperUnit;
- if (!RUnit.isMetric(drawingUnit)) {
- paperUnit = RS.Inch;
- RSettings.setValue("UnitSettings/Measurement", RS.Imperial);
- }
- else {
- paperUnit = RS.Millimeter;
- RSettings.setValue("UnitSettings/Measurement", RS.Metric);
- }
- RSettings.setValue("UnitSettings/PaperUnit", paperUnit);
- var dps = this.widgets["DefaultPaperSize"];
- var paperSizeName = dps.currentText;
- if (isNull(paperSizeName)) {
- paperSizeName = "";
- }
- RSettings.setValue("PageSettings/PaperSizeName", paperSizeName);
- //var paperSizeEnum = dps.itemData(dps.currentIndex, Qt.UserRole);
- //RSettings.setValue("PageSettings/PaperSizeEnum", paperSizeEnum);
- var paperSize = dps.itemData(dps.currentIndex, Qt.UserRole + 1);
- if (!isNull(paperSize)) {
- RSettings.setValue("PageSettings/PaperWidth", RUnit.convert(paperSize.width(), RS.Millimeter, paperUnit));
- RSettings.setValue("PageSettings/PaperHeight", RUnit.convert(paperSize.height(), RS.Millimeter, paperUnit));
- }
- // adjust page margins to paper unit:
- var margin = RUnit.convert(10.0, RS.Millimeter, paperUnit);
- if (paperUnit == RS.Inch) {
- margin = 0.5;
- }
- RSettings.setValue("MultiPageSettings/GlueMarginsLeft", margin);
- RSettings.setValue("MultiPageSettings/GlueMarginsTop", margin);
- RSettings.setValue("MultiPageSettings/GlueMarginsBottom", margin);
- RSettings.setValue("MultiPageSettings/GlueMarginsRight", margin);
- var dpCombo = this.widgets["DecimalPoint"];
- var dp = dpCombo.itemData(dpCombo.currentIndex);
- RSettings.setValue("Input/DecimalPoint", dp);
- if (dp===",") {
- RSettings.setValue("Input/CartesianCoordinateSeparator", ";");
- }
- var bgClrCombo = this.widgets["BackgroundColor"];
- var bgClr = bgClrCombo.itemData(bgClrCombo.currentIndex);
- RSettings.setValue("GraphicsViewColors/BackgroundColor", bgClr);
- if (bgClrCombo.currentIndex===1) {
- RSettings.setValue("GraphicsViewColors/CrosshairColor", new RColor(178,129,0,192));
- RSettings.setValue("GraphicsViewColors/TextLabelColor", new RColor(178,129,0));
- }
- var settings = RSettings.getQSettings();
- settings.sync();
- }
- destr(this.dialog);
- EAction.activateMainWindow();
- };
- FirstStart.prototype.changeLanguage = function(code) {
- var i;
- for (i=0; i<this.translators.length; ++i) {
- QCoreApplication.removeTranslator(this.translators[i]);
- }
-
- if (code !== "en") {
- var translators = [
- [ "scripts", "ts" ],
- [ "scripts", ":/ts" ]
- ];
- for (i=0; i<translators.length; i++) {
- var translator = new QTranslator(qApp);
- if (translator.load(translators[i][0] + "_" + code, translators[i][1])) {
- QCoreApplication.installTranslator(translator);
- this.translators.push(translator);
- }
- else {
- qDebug("FirstStart.js: cannot load translation for module: " + translators[i][0] + " / language " + code);
- }
- }
- }
- var locale = new QLocale(code);
- QLocale.setDefault(locale);
- this.retranslateStrings();
- // unit combo
- UnitSettings.initUnitCombo(this.widgets["Unit"]);
- var systemLocale = QLocale.system();
- var msys = systemLocale.measurementSystem();
- if (msys.valueOf() != QLocale.MetricSystem.valueOf()) {
- // imperial system:
- this.widgets["Unit"].setCurrentIndex(1);
- } else {
- // metrics system (fall back):
- this.widgets["Unit"].setCurrentIndex(4);
- }
- // paper size combo
- var paperSizeCombo = this.widgets["DefaultPaperSize"];
- PageSettings.initPaperSizeNameCombo(paperSizeCombo);
- // default paper size
- var paperSizeOverride = qApp.property("FirstStartPaperSizeOverride");
- if (isNull(paperSizeOverride)) {
- paperSizeOverride = "";
- }
- var index = paperSizeCombo.findText(paperSizeOverride);
- if (index===-1) {
- var defaultPrinter = new QPrinter();
- var paperSize;
- if (isFunction(defaultPrinter.paperSize)) {
- /// Qt 4, 5:
- paperSize = defaultPrinter.paperSize(QPrinter.Millimeter);
- }
- else {
- // Qt 6:
- var pageLayout = defaultPrinter.pageLayout();
- var pageSize = pageLayout.pageSize();
- paperSize = pageSize.id();
- }
- destr(defaultPrinter);
- index = paperSizeCombo.findData(paperSize, Qt.UserRole + 1);
- if (index===-1) {
- index = paperSizeCombo.findText("ISO A4");
- }
- }
- if (index===-1) {
- index = 0;
- }
- paperSizeCombo.setCurrentIndex(index);
- // decimal point combo
- var dpCombo = this.widgets["DecimalPoint"];
- InputPreferences.updateDecimalPointCombo(dpCombo);
- var dp = sprintf("%c", systemLocale.decimalPoint());
- for (i = 0; i < dpCombo.count; ++i) {
- var data = dpCombo.itemData(i);
- if (dp == data) {
- dpCombo.setCurrentIndex(i);
- }
- }
- // background color combo
- var bgClrCombo = this.widgets["BackgroundColor"];
- bgClrCombo.clear();
- bgClrCombo.addItem(qsTr("Black"), new RColor("black"));
- bgClrCombo.addItem(qsTr("White"), new RColor("white"));
- };
- FirstStart.prototype.retranslateStrings = function() {
- this.dialog.setWindowTitle(qsTr("%1 First Start").arg(qApp.applicationName));
- this.widgets["LanguageLabel"].setText(qsTr("Language:"));
- var title = qsTr("Welcome to %1").arg(qApp.applicationName);
- var text = qsTr("Please choose the settings used for new drawings. "
- + "All these settings can be changed later in the Preference Dialog.");
- this.widgets["Text"].setHtml("<html><head><meta name=\"qrichtext\" content=\"1\" />"
- + "<style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>"
- + "<body style=\" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;\">"
- + "\n<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"
- + "<span style=\" font-weight:600;\">"
- + title
- + "</span></p>"
- + "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"></p>"
- + "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"
- + text
- + "</p><p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"></p>"
- + "</body></html>");
- this.widgets["UnitLabel"].setText(qsTr("Unit:"));
- this.widgets["DefaultPaperSizeLabel"].setText(qsTr("Default Paper Size:"));
- this.widgets["DecimalPointLabel"].setText(qsTr("Decimal Point:"));
- this.widgets["BackgroundColorLabel"].setText(qsTr("Background Color:"));
- };
|