CoordinateDisplay.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  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/EAction.js");
  20. include("scripts/sprintf.js");
  21. include("scripts/WidgetFactory.js");
  22. include("scripts/Widgets/StatusBar/StatusBar.js");
  23. function CoordinateDisplay() {
  24. }
  25. CoordinateDisplay.getPreferencesCategory = function() {
  26. return [ qsTr("Widgets"), qsTr("Coordinate Display") ];
  27. };
  28. CoordinateDisplay.singleShot = undefined;
  29. CoordinateDisplay.widget = undefined;
  30. CoordinateDisplay.lAbs = undefined;
  31. CoordinateDisplay.lRel = undefined;
  32. CoordinateDisplay.lAbsPol = undefined;
  33. CoordinateDisplay.lRelPol = undefined;
  34. CoordinateDisplay.counter = 0;
  35. CoordinateDisplay.postInit = function(basePath) {
  36. CoordinateDisplay.widget = WidgetFactory.createWidget(basePath, "CoordinateDisplay.ui");
  37. StatusBar.addWidget(CoordinateDisplay.widget, 100, RSettings.getBoolValue("StatusBar/CoordinateDisplay", true));
  38. CoordinateDisplay.forcedUpdateInterval = RSettings.getIntValue("CoordinateDisplay/Interval", 8);
  39. CoordinateDisplay.lAbs = CoordinateDisplay.widget.findChild("Abs");
  40. CoordinateDisplay.lAbs.font = RSettings.getStatusBarFont();
  41. CoordinateDisplay.lRel = CoordinateDisplay.widget.findChild("Rel");
  42. CoordinateDisplay.lRel.font = RSettings.getStatusBarFont();
  43. CoordinateDisplay.lAbsPol = CoordinateDisplay.widget.findChild("AbsPol");
  44. CoordinateDisplay.lAbsPol.font = RSettings.getStatusBarFont();
  45. CoordinateDisplay.lRelPol = CoordinateDisplay.widget.findChild("RelPol");
  46. CoordinateDisplay.lRelPol.font = RSettings.getStatusBarFont();
  47. var cartCoordSep;
  48. var polCoordSep;
  49. var relCoordPre;
  50. var adapter = new RCoordinateListenerAdapter();
  51. var appWin = EAction.getMainWindow();
  52. appWin.addCoordinateListener(adapter);
  53. adapter.coordinateUpdated.connect(CoordinateDisplay.update);
  54. };
  55. CoordinateDisplay.update = function(documentInterface) {
  56. if (!CoordinateDisplay.widget.enabled) {
  57. return;
  58. }
  59. if (isNull(documentInterface)) {
  60. // clear texts (no document open):
  61. CoordinateDisplay.lAbs.setText("");
  62. CoordinateDisplay.lAbsPol.setText("");
  63. CoordinateDisplay.lRel.setText("");
  64. CoordinateDisplay.lRelPol.setText("");
  65. return;
  66. }
  67. if (!isNull(CoordinateDisplay.singleShot)) {
  68. if (CoordinateDisplay.singleShot.active) {
  69. // never mind previous update:
  70. CoordinateDisplay.singleShot.stop();
  71. }
  72. if (!isNull(CoordinateDisplay.singleShot)) {
  73. // catch exception when ran with script debugger:
  74. try {
  75. destr(CoordinateDisplay.singleShot);
  76. CoordinateDisplay.singleShot = undefined;
  77. }
  78. catch(e) {}
  79. }
  80. }
  81. // force immediate update every X mouse moves
  82. CoordinateDisplay.counter++;
  83. if (CoordinateDisplay.counter>=CoordinateDisplay.forcedUpdateInterval) {
  84. //CoordinateDisplay.singleShot.start(0);
  85. CoordinateDisplay.timedUpdate();
  86. CoordinateDisplay.counter = 0;
  87. }
  88. else {
  89. if (RSettings.getQtVersion()>=0x060000) {
  90. CoordinateDisplay.timedUpdate();
  91. }
  92. else {
  93. CoordinateDisplay.singleShot = new QTimer();
  94. CoordinateDisplay.singleShot.singleShot = true;
  95. CoordinateDisplay.singleShot.timeout.connect(CoordinateDisplay.timedUpdate);
  96. CoordinateDisplay.singleShot.start(20);
  97. }
  98. }
  99. };
  100. CoordinateDisplay.timedUpdate = function() {
  101. var di = EAction.getDocumentInterface();
  102. if (isNull(di)) {
  103. return;
  104. }
  105. var doc = di.getDocument();
  106. if (isNull(doc)) {
  107. return;
  108. }
  109. StatusBar.clearMessage();
  110. var absPos = di.getCursorPosition();
  111. var relPos = absPos.operator_subtract(di.getRelativeZero());
  112. if (absPos.isValid()) {
  113. CoordinateDisplay.lAbs.setText(coordinateToString(absPos, 4, false, false, doc));
  114. CoordinateDisplay.lAbsPol.setText(coordinateToString(absPos, 4, false, true, doc));
  115. }
  116. else {
  117. CoordinateDisplay.lAbs.setText("-");
  118. CoordinateDisplay.lAbsPol.setText("-");
  119. }
  120. if (relPos.isValid()) {
  121. CoordinateDisplay.lRel.setText(coordinateToString(relPos, 4, true, false, doc));
  122. CoordinateDisplay.lRelPol.setText(coordinateToString(relPos, 4, true, true, doc));
  123. }
  124. else {
  125. CoordinateDisplay.lRel.setText("-");
  126. CoordinateDisplay.lRelPol.setText("-");
  127. }
  128. };