FirstStart.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305
  1. /**
  2. * Copyright (c) 2011-2018 by Andrew Mustun. All rights reserved.
  3. *
  4. * This file is part of the QCAD project.
  5. *
  6. * QCAD is free software: you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License as published by
  8. * the Free Software Foundation, either version 3 of the License, or
  9. * (at your option) any later version.
  10. *
  11. * QCAD is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. * GNU General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with QCAD.
  18. */
  19. include("scripts/library.js");
  20. include("scripts/EAction.js");
  21. include("scripts/Edit/AppPreferences/LanguagePreferences/LanguagePreferences.js");
  22. include("scripts/Edit/AppPreferences/InputPreferences/InputPreferences.js");
  23. include("scripts/Edit/DrawingPreferences/UnitSettings/UnitSettings.js");
  24. include("scripts/Edit/DrawingPreferences/PageSettings/PageSettings.js");
  25. include("scripts/sprintf.js");
  26. function FirstStart() {
  27. }
  28. FirstStart.prototype.showDialog = function() {
  29. var code;
  30. this.path = autoPath("scripts/Widgets/FirstStart");
  31. this.dialog = WidgetFactory.createWidget(this.path, "FirstStartDialog.ui", null);
  32. var pathFi = new QFileInfo(this.path);
  33. this.dialog.setWindowTitle(qsTr("%1 First Start").arg(qApp.applicationName));
  34. if (qApp.applicationName.contains("QCAD")) {
  35. if (RSettings.hasDarkGuiBackground()) {
  36. this.dialog.setStyleSheet("QDialog { border-image: url(" + pathFi.absoluteFilePath() + "/firststart-inverse.jpg) 0 0 0 0 stretch stretch; border-width: 0px; }");
  37. }
  38. else {
  39. this.dialog.setStyleSheet("QDialog { border-image: url(" + pathFi.absoluteFilePath() + "/firststart.jpg) 0 0 0 0 stretch stretch; border-width: 0px; }");
  40. //"QDialog{ background-image: url(" + pathFi.absoluteFilePath() + "/firststart.png) }";
  41. }
  42. }
  43. else {
  44. this.dialog.findChild("LanguageBackground").setStyleSheet("");
  45. this.dialog.findChild("Background").setStyleSheet("");
  46. if (!isNull(this.dialog.findChild("Left"))) {
  47. this.dialog.findChild("Left").setMinimumSize(0);
  48. }
  49. }
  50. this.widgets = getWidgets(this.dialog);
  51. // language combo
  52. var langCombo = this.widgets["Language"];
  53. langCombo.blockSignals(true);
  54. // langCombo.addItem("English", "en");
  55. var codes = LanguagePreferences.getLanguages();
  56. for ( var i = 0; i < codes.length; ++i) {
  57. code = codes[i];
  58. langCombo.addItem(LanguagePreferences.codeToString(code), code);
  59. }
  60. langCombo.blockSignals(false);
  61. // try to set the locale from system
  62. var sysLocale = QLocale.system();
  63. var systemLocale = sysLocale.name();
  64. var flags = makeQtMatchFlags(Qt.MatchExactly);
  65. var index = langCombo.findData(systemLocale, Qt.UserRole, flags);
  66. if (index===-1) {
  67. var re = new RegExp("(.+)_(.+)", "i");
  68. var found = systemLocale.match(re);
  69. var lang;
  70. if (isNull(found) || found.length < 2) {
  71. lang = "en";
  72. } else {
  73. lang = found[1];
  74. }
  75. flags = makeQtMatchFlags(Qt.MatchContains);
  76. index = langCombo.findData(lang, Qt.UserRole, flags);
  77. }
  78. if (index!==-1) {
  79. langCombo.setCurrentIndex(index);
  80. }
  81. code = langCombo.itemData(langCombo.currentIndex);
  82. langCombo.model().sort(0);
  83. var self = this;
  84. langCombo["currentIndexChanged(int)"].connect(function(index) {
  85. var code = langCombo.itemData(index);
  86. self.changeLanguage(code);
  87. });
  88. this.translators = [];
  89. this.changeLanguage(code);
  90. if (RSettings.getOriginalArguments().contains("-no-initial-dialog") || this.dialog.exec()) {
  91. // save settings
  92. // language:
  93. RSettings.setValue("Language/UiLanguage", langCombo.itemData(langCombo.currentIndex));
  94. // drawing unit and related settings:
  95. var drawingUnit = this.widgets["Unit"].currentIndex;
  96. RSettings.setValue("UnitSettings/Unit", drawingUnit);
  97. // adjust default dimension settings:
  98. var dimtxt = 2.5;
  99. if (drawingUnit===RS.Inch) {
  100. dimtxt = 1/8;
  101. RSettings.setValue("DimensionSettings/LinearFormat", RS.Engineering);
  102. }
  103. if (drawingUnit===RS.Foot) {
  104. dimtxt = 1/12;
  105. }
  106. RSettings.setValue("DimensionSettings/DIMTXT", dimtxt);
  107. RSettings.setValue("DimensionSettings/DIMEXE", dimtxt/2);
  108. RSettings.setValue("DimensionSettings/DIMEXO", dimtxt/4);
  109. RSettings.setValue("DimensionSettings/DIMGAP", dimtxt/4);
  110. RSettings.setValue("DimensionSettings/DIMASZ", dimtxt);
  111. RSettings.setValue("DimensionSettings/DIMDLI", dimtxt*2);
  112. var paperUnit;
  113. if (!RUnit.isMetric(drawingUnit)) {
  114. paperUnit = RS.Inch;
  115. RSettings.setValue("UnitSettings/Measurement", RS.Imperial);
  116. }
  117. else {
  118. paperUnit = RS.Millimeter;
  119. RSettings.setValue("UnitSettings/Measurement", RS.Metric);
  120. }
  121. RSettings.setValue("UnitSettings/PaperUnit", paperUnit);
  122. var dps = this.widgets["DefaultPaperSize"];
  123. var paperSizeName = dps.currentText;
  124. if (isNull(paperSizeName)) {
  125. paperSizeName = "";
  126. }
  127. RSettings.setValue("PageSettings/PaperSizeName", paperSizeName);
  128. //var paperSizeEnum = dps.itemData(dps.currentIndex, Qt.UserRole);
  129. //RSettings.setValue("PageSettings/PaperSizeEnum", paperSizeEnum);
  130. var paperSize = dps.itemData(dps.currentIndex, Qt.UserRole + 1);
  131. if (!isNull(paperSize)) {
  132. RSettings.setValue("PageSettings/PaperWidth", RUnit.convert(paperSize.width(), RS.Millimeter, paperUnit));
  133. RSettings.setValue("PageSettings/PaperHeight", RUnit.convert(paperSize.height(), RS.Millimeter, paperUnit));
  134. }
  135. // adjust page margins to paper unit:
  136. var margin = RUnit.convert(10.0, RS.Millimeter, paperUnit);
  137. if (paperUnit == RS.Inch) {
  138. margin = 0.5;
  139. }
  140. RSettings.setValue("MultiPageSettings/GlueMarginsLeft", margin);
  141. RSettings.setValue("MultiPageSettings/GlueMarginsTop", margin);
  142. RSettings.setValue("MultiPageSettings/GlueMarginsBottom", margin);
  143. RSettings.setValue("MultiPageSettings/GlueMarginsRight", margin);
  144. var dpCombo = this.widgets["DecimalPoint"];
  145. var dp = dpCombo.itemData(dpCombo.currentIndex);
  146. RSettings.setValue("Input/DecimalPoint", dp);
  147. if (dp===",") {
  148. RSettings.setValue("Input/CartesianCoordinateSeparator", ";");
  149. }
  150. var bgClrCombo = this.widgets["BackgroundColor"];
  151. var bgClr = bgClrCombo.itemData(bgClrCombo.currentIndex);
  152. RSettings.setValue("GraphicsViewColors/BackgroundColor", bgClr);
  153. if (bgClrCombo.currentIndex===1) {
  154. RSettings.setValue("GraphicsViewColors/CrosshairColor", new RColor(178,129,0,192));
  155. RSettings.setValue("GraphicsViewColors/TextLabelColor", new RColor(178,129,0));
  156. }
  157. var settings = RSettings.getQSettings();
  158. settings.sync();
  159. }
  160. destr(this.dialog);
  161. EAction.activateMainWindow();
  162. };
  163. FirstStart.prototype.changeLanguage = function(code) {
  164. var i;
  165. for (i=0; i<this.translators.length; ++i) {
  166. QCoreApplication.removeTranslator(this.translators[i]);
  167. }
  168. if (code !== "en") {
  169. var translators = [
  170. [ "scripts", "ts" ],
  171. [ "scripts", ":/ts" ]
  172. ];
  173. for (i=0; i<translators.length; i++) {
  174. var translator = new QTranslator(qApp);
  175. if (translator.load(translators[i][0] + "_" + code, translators[i][1])) {
  176. QCoreApplication.installTranslator(translator);
  177. this.translators.push(translator);
  178. }
  179. else {
  180. qDebug("FirstStart.js: cannot load translation for module: " + translators[i][0] + " / language " + code);
  181. }
  182. }
  183. }
  184. var locale = new QLocale(code);
  185. QLocale.setDefault(locale);
  186. this.retranslateStrings();
  187. // unit combo
  188. UnitSettings.initUnitCombo(this.widgets["Unit"]);
  189. var systemLocale = QLocale.system();
  190. var msys = systemLocale.measurementSystem();
  191. if (msys.valueOf() != QLocale.MetricSystem.valueOf()) {
  192. // imperial system:
  193. this.widgets["Unit"].setCurrentIndex(1);
  194. } else {
  195. // metrics system (fall back):
  196. this.widgets["Unit"].setCurrentIndex(4);
  197. }
  198. // paper size combo
  199. var paperSizeCombo = this.widgets["DefaultPaperSize"];
  200. PageSettings.initPaperSizeNameCombo(paperSizeCombo);
  201. // default paper size
  202. var paperSizeOverride = qApp.property("FirstStartPaperSizeOverride");
  203. if (isNull(paperSizeOverride)) {
  204. paperSizeOverride = "";
  205. }
  206. var index = paperSizeCombo.findText(paperSizeOverride);
  207. if (index===-1) {
  208. var defaultPrinter = new QPrinter();
  209. var paperSize;
  210. if (isFunction(defaultPrinter.paperSize)) {
  211. /// Qt 4, 5:
  212. paperSize = defaultPrinter.paperSize(QPrinter.Millimeter);
  213. }
  214. else {
  215. // Qt 6:
  216. var pageLayout = defaultPrinter.pageLayout();
  217. var pageSize = pageLayout.pageSize();
  218. paperSize = pageSize.id();
  219. }
  220. destr(defaultPrinter);
  221. index = paperSizeCombo.findData(paperSize, Qt.UserRole + 1);
  222. if (index===-1) {
  223. index = paperSizeCombo.findText("ISO A4");
  224. }
  225. }
  226. if (index===-1) {
  227. index = 0;
  228. }
  229. paperSizeCombo.setCurrentIndex(index);
  230. // decimal point combo
  231. var dpCombo = this.widgets["DecimalPoint"];
  232. InputPreferences.updateDecimalPointCombo(dpCombo);
  233. var dp = sprintf("%c", systemLocale.decimalPoint());
  234. for (i = 0; i < dpCombo.count; ++i) {
  235. var data = dpCombo.itemData(i);
  236. if (dp == data) {
  237. dpCombo.setCurrentIndex(i);
  238. }
  239. }
  240. // background color combo
  241. var bgClrCombo = this.widgets["BackgroundColor"];
  242. bgClrCombo.clear();
  243. bgClrCombo.addItem(qsTr("Black"), new RColor("black"));
  244. bgClrCombo.addItem(qsTr("White"), new RColor("white"));
  245. };
  246. FirstStart.prototype.retranslateStrings = function() {
  247. this.dialog.setWindowTitle(qsTr("%1 First Start").arg(qApp.applicationName));
  248. this.widgets["LanguageLabel"].setText(qsTr("Language:"));
  249. var title = qsTr("Welcome to %1").arg(qApp.applicationName);
  250. var text = qsTr("Please choose the settings used for new drawings. "
  251. + "All these settings can be changed later in the Preference Dialog.");
  252. this.widgets["Text"].setHtml("<html><head><meta name=\"qrichtext\" content=\"1\" />"
  253. + "<style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>"
  254. + "<body style=\" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;\">"
  255. + "\n<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"
  256. + "<span style=\" font-weight:600;\">"
  257. + title
  258. + "</span></p>"
  259. + "<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>"
  260. + "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"
  261. + text
  262. + "</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>"
  263. + "</body></html>");
  264. this.widgets["UnitLabel"].setText(qsTr("Unit:"));
  265. this.widgets["DefaultPaperSizeLabel"].setText(qsTr("Default Paper Size:"));
  266. this.widgets["DecimalPointLabel"].setText(qsTr("Decimal Point:"));
  267. this.widgets["BackgroundColorLabel"].setText(qsTr("Background Color:"));
  268. };