Kstars

mountbox.qml
1 import QtQuick 2.5
2 import QtQuick.Controls 1.4
3 import QtQuick.Layouts 1.1
4 import QtQuick.Controls.Styles 1.4
5 
6 Rectangle {
7  id: rectangle
8  objectName: "mountControlObject"
9 
10  color: "#000000"
11 
12  property color buttonColor: "silver"
13  property color coordsColor: "gold"
14 
15  FontMetrics {
16  id: fontMetrics
17  font.family: "Arial"
18  font.bold: false
19  font.italic: false
20  font.underline:false
21  font.pointSize: 12
22  }
23 
24  width: (Qt.platform.os === "osx") ? fontMetrics.height * 13.5 /.75 : fontMetrics.height * 13.5
25  height: (Qt.platform.os === "osx") ? fontMetrics.height * 29.5 /.75 : fontMetrics.height * 29.5
26 
27  MouseArea {
28  anchors.fill: parent
29  onClicked: mountMotionLayout.focus = true
30 
31  ColumnLayout {
32  id: mainVerticalLayout
33  anchors.fill: parent
34  anchors.margins: fontMetrics.height * 0.25
35 
36  GridLayout {
37  id: mountMotionLayout
38  rowSpacing: fontMetrics.height * 0.05
39  columnSpacing: fontMetrics.height * 0.05
40  Layout.minimumHeight: fontMetrics.height * 8
41  Layout.maximumHeight: fontMetrics.height * 8
42  Layout.minimumWidth: fontMetrics.height * 10
43  Layout.maximumWidth: fontMetrics.height * 10
44  Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
45  columns: 3
46 
47  focus: true
48  Keys.onPressed: {
49  event.accepted = true;
50  if (!event.isAutoRepeat)
51  onPressedChanged(event, true);
52  }
53 
54  Keys.onReleased: {
55  event.accepted = true;
56  if (!event.isAutoRepeat)
57  onPressedChanged(event, false);
58  }
59 
60  function setTimeout(delay_ms, cb) {
61  var component = Qt.createComponent("timer.qml");
62  var timer = component.createObject(rectangle, {x: 0, y: 0});
63 
64  if (timer === null) {
65  console.error("Error creating timer object");
66  }
67 
68  timer.callback = function() {
69  cb();
70  this.destroy();
71  };
72  timer.interval = delay_ms;
73  timer.running = true;
74  }
75 
76  property var keyState: ({})
77  // -1 means not moving
78  property var motionState: ({ns: -1, we: -1})
79  // It appears [Qt.Key_Up] is not a valid subsituion in QML like Javascript in older versions?
80  //property var filteredKeyState: ({[Qt.Key_Up]: false, [Qt.Key_Down]: false, [Qt.Key_Left]: false, [Qt.Key_Right]: false})
81  // Replacing it with direct values and confirmed works with older Qt versions:
82  // true means pressed
83  property var filteredKeyState: {0x13: false, 0x15: false, 0x12: false, 0x14: false}
84  function moveMount() {
85  var up = filteredKeyState[Qt.Key_Up];
86  var down = filteredKeyState[Qt.Key_Down];
87  var left = filteredKeyState[Qt.Key_Left];
88  var right = filteredKeyState[Qt.Key_Right];
89 
90  var ns = -1;
91  var we = -1;
92  if (up !== down) {
93  if (up){
94  ns = 0;
95  } else if (down) {
96  ns = 1;
97  }
98  mount.motionCommand(0, ns, -1);
99  motionState.ns = ns;
100  } else if (motionState.ns !== -1) {
101  mount.motionCommand(1, motionState.ns, -1);
102  motionState.ns = -1;
103  }
104  if (left !== right) {
105  if (left){
106  we = 0;
107  } else if (right) {
108  we = 1;
109  }
110  mount.motionCommand(0, -1, we);
111  motionState.we = we;
112  } else if (motionState.we !== -1) {
113  mount.motionCommand(1, -1, motionState.we);
114  motionState.we = -1;
115  }
116 
117  if (ns === 0) {
118  northRect.opacity = 1;
119  } else if (ns === 1) {
120  southRect.opacity = 1;
121  } else {
122  northRect.opacity = 0;
123  southRect.opacity = 0;
124  }
125  if (we === 0) {
126  westRect.opacity = 1;
127  } else if (we === 1) {
128  eastRect.opacity = 1;
129  } else {
130  westRect.opacity = 0;
131  eastRect.opacity = 0;
132  }
133  }
134 
135  function deflicker(key, pressed) {
136  keyState[key] = pressed;
137  setTimeout(5, function() {
138  if (pressed === keyState[key] && pressed !== filteredKeyState[key]) {
139  filteredKeyState[key] = pressed;
140  moveMount();
141  }
142  });
143  }
144 
145  function onPressedChanged(event, pressed) {
146  deflicker(event.key, pressed);
147  }
148 
149  Button
150  {
151  id: northWest
152  Layout.fillHeight: true
153  Layout.fillWidth: true
154 
155  Rectangle
156  {
157  anchors.fill: parent
158  color: northWest.pressed ? "red" : rectangle.buttonColor
159  }
160 
161  onPressedChanged:
162  {
163  northWest.pressed ? mount.motionCommand(0, 0, 0) : mount.motionCommand(1, 0, 0);
164  }
165 
166  onClicked:
167  {
168  mountMotionLayout.focus = true;
169  }
170 
171  Image {
172  anchors.fill: parent
173  source: "go-northwest.png"
174  }
175  }
176 
177  Button {
178  id: north
179  Layout.fillHeight: true
180  Layout.fillWidth: true
181 
182  Rectangle
183  {
184  anchors.fill: parent
185  color: north.pressed ? "red" : rectangle.buttonColor
186  }
187 
188  Rectangle
189  {
190  id: northRect
191  opacity: 0
192  anchors.fill: parent
193  color: "red"
194  }
195 
196  onPressedChanged:
197  {
198  north.pressed ? mount.motionCommand(0, 0, -1) : mount.motionCommand(1, 0, -1);
199  }
200 
201  onClicked:
202  {
203  mountMotionLayout.focus = true;
204  }
205 
206  Image {
207  anchors.fill: parent
208  source: "go-north.png"
209  }
210  }
211 
212  Button {
213  id: northEast
214  Layout.fillHeight: true
215  Layout.fillWidth: true
216 
217  Rectangle
218  {
219  anchors.fill: parent
220  color: northEast.pressed ? "red" : rectangle.buttonColor
221  }
222 
223  onPressedChanged:
224  {
225  northEast.pressed ? mount.motionCommand(0, 0, 1) : mount.motionCommand(1, 0, 1);
226  }
227 
228  onClicked:
229  {
230  mountMotionLayout.focus = true;
231  }
232 
233  Image {
234  anchors.fill: parent
235  source: "go-northeast.png"
236  }
237  }
238 
239  Button {
240  id: west
241  Layout.fillHeight: true
242  Layout.fillWidth: true
243 
244  Rectangle
245  {
246  anchors.fill: parent
247  color: west.pressed ? "red" : rectangle.buttonColor
248  }
249 
250  Rectangle
251  {
252  id: westRect
253  opacity: 0
254  anchors.fill: parent
255  color: "red"
256  }
257 
258  onPressedChanged:
259  {
260  west.pressed ? mount.motionCommand(0, -1, 0) : mount.motionCommand(1, -1, 0);
261  }
262 
263  onClicked:
264  {
265  mountMotionLayout.focus = true;
266  }
267 
268  Image {
269  anchors.fill: parent
270  source: "go-west.png"
271  }
272  }
273 
274  Button {
275  id: stop
276  Layout.fillHeight: true
277  Layout.fillWidth: true
278 
279  Rectangle
280  {
281  anchors.fill: parent
282  color: stop.pressed ? "red" : rectangle.buttonColor
283  }
284 
285  Image {
286  anchors.fill: parent
287  source: "stop.png"
288  }
289 
290  onClicked:
291  {
292  mount.abort();
293  mountMotionLayout.focus = true;
294  }
295 
296 
297  }
298 
299  Button {
300  id: east
301  Layout.fillHeight: true
302  Layout.fillWidth: true
303 
304  Rectangle
305  {
306  anchors.fill: parent
307  color: east.pressed ? "red" : rectangle.buttonColor
308  }
309 
310  Rectangle
311  {
312  id: eastRect
313  opacity: 0
314  anchors.fill: parent
315  color: "red"
316  }
317 
318  onPressedChanged:
319  {
320  east.pressed ? mount.motionCommand(0, -1, 1) : mount.motionCommand(1, -1, 1);
321  }
322 
323  onClicked:
324  {
325  mountMotionLayout.focus = true;
326  }
327 
328  Image {
329  anchors.fill: parent
330  source: "go-east.png"
331  }
332  }
333 
334  Button {
335  id: southWest
336  Layout.fillHeight: true
337  Layout.fillWidth: true
338 
339  Rectangle
340  {
341  anchors.fill: parent
342  color: southWest.pressed ? "red" : rectangle.buttonColor
343  }
344 
345  onPressedChanged:
346  {
347  southWest.pressed ? mount.motionCommand(0, 1, 0) : mount.motionCommand(1, 1, 0);
348  }
349 
350  onClicked:
351  {
352  mountMotionLayout.focus = true;
353  }
354 
355  Image {
356  anchors.fill: parent
357  source: "go-southwest.png"
358  }
359  }
360 
361  Button {
362  id: south
363  Layout.fillHeight: true
364  Layout.fillWidth: true
365 
366  Rectangle
367  {
368  anchors.fill: parent
369  color: south.pressed ? "red" : rectangle.buttonColor
370  }
371 
372  Rectangle
373  {
374  id: southRect
375  opacity: 0
376  anchors.fill: parent
377  color: "red"
378  }
379 
380  onPressedChanged:
381  {
382  south.pressed ? mount.motionCommand(0, 1, -1) : mount.motionCommand(1, 1, -1);
383  mountMotionLayout.focus = true;
384  }
385 
386  Image {
387  anchors.fill: parent
388  source: "go-south.png"
389  }
390  }
391 
392  Button {
393  id: southEast
394  Layout.fillHeight: true
395  Layout.fillWidth: true
396 
397  Rectangle
398  {
399  anchors.fill: parent
400  color: southEast.pressed ? "red" : rectangle.buttonColor
401  }
402 
403  onPressedChanged:
404  {
405  southEast.pressed ? mount.motionCommand(0, 1, 1) : mount.motionCommand(1, 1, 1);
406  }
407 
408  onClicked:
409  {
410  mountMotionLayout.focus = true;
411  }
412 
413  Image {
414  anchors.fill: parent
415  source: "go-southeast.png"
416  }
417  }
418  }
419 
420 
421  RowLayout {
422  id: mountReverseLayout
423  Layout.fillWidth: true
424  Layout.alignment: Qt.AlignHCenter
425 
426  Label
427  {
428  text: xi18n("Reverse")
429  }
430 
431  CheckBox
432  {
433  id: updownReverse
434  text: xi18n("Up/Down")
435  objectName: "upDownCheckObject"
436  onClicked: mount.setUpDownReversed(checked)
437  }
438 
439  CheckBox
440  {
441  id: leftRightReverse
442  text: xi18n("Left/Right")
443  objectName: "leftRightCheckObject"
444  onClicked: mount.setLeftRightReversed(checked)
445  }
446 
447  }
448 
449  RowLayout {
450  id: mountSpeedLayout
451  anchors.horizontalCenter: parent.Center
452  Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
453  Layout.fillHeight: false
454  Layout.fillWidth: true
455 
456  Slider {
457  id: speedSlider
458  x: fontMetrics.height * 0.1
459  y: 0
460  width: fontMetrics.height * 1.5
461  objectName: "speedSliderObject"
462  Layout.fillWidth: true
463  Layout.maximumWidth: fontMetrics.height * 7.5
464  stepSize: 1
465  minimumValue: 0
466  maximumValue: 4
467  value: 0
468 
469  onValueChanged:
470  {
471  mount.setSlewRate(speedSlider.value)
472  }
473  }
474 
475  Label {
476  id: speedLabel
477  width: fontMetrics.height * 3.75
478  objectName: "speedLabelObject"
479  text: xi18n("1x")
480  horizontalAlignment: Text.AlignHCenter
481  Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
482  Layout.maximumWidth: fontMetrics.height * 3.75
483  Layout.minimumWidth: fontMetrics.height * 3.75
484  font.weight: Font.Bold
485  font.bold: true
486  font.pointSize: 12
487  font.family: "Verdana"
488  fontSizeMode: Text.Fit
489  verticalAlignment: Text.AlignVCenter
490  Layout.fillWidth: true
491  color: "white"
492  }
493  }
494 
495  GridLayout {
496  id: mountCoordsLayout
497  anchors.horizontalCenter: parent.Center
498  Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
499  Layout.fillWidth: true
500  columns: 4
501 
502  MouseArea {
503  anchors.fill: parent
504  property bool toggle: false
505  onClicked: {
506  if (toggle) {
507  targetRAText.text = ""
508  targetDEText.text = ""
509  }
510  else {
511  if (coordGroup.lastChecked == 0) {
512  targetRAText.text = raValue.text
513  targetDEText.text = deValue.text
514  }
515  if (coordGroup.lastChecked == 1) {
516  targetRAText.text = azValue.text
517  targetDEText.text = altValue.text
518  }
519  if (coordGroup.lastChecked == 2) {
520  targetRAText.text = haValue.text
521  targetDEText.text = deValue.text
522  }
523  }
524  toggle = !toggle
525  }
526  }
527 
528  Label {
529  id: raLabel
530  text: xi18n("RA:")
531  font.bold: true
532  color: "white"
533  fontSizeMode: Text.Fit
534  }
535 
536  Label {
537  id: raValue
538  objectName: "raValueObject"
539  color: coordsColor
540  text: "00:00:00"
541  Layout.fillWidth: true
542  font.pointSize: 11
543  }
544 
545  Label {
546  id: azLabel
547  color: "#ffffff"
548  text: xi18n("AZ:")
549  Layout.fillWidth: false
550  fontSizeMode: Text.Fit
551  font.bold: true
552  }
553 
554  Label {
555  id: azValue
556  objectName: "azValueObject"
557  color: coordsColor
558  text: "00:00:00"
559  Layout.fillWidth: true
560  font.pointSize: 11
561  }
562 
563  Label {
564  id: deLabel
565  color: "#ffffff"
566  text: xi18n("DE:")
567  fontSizeMode: Text.Fit
568  font.bold: true
569  }
570 
571  Label {
572  id: deValue
573  objectName: "deValueObject"
574  color: coordsColor
575  text: "00:00:00"
576  Layout.fillWidth: true
577  font.pointSize: 11
578  }
579 
580  Label {
581  id: altLabel
582  color: "#ffffff"
583  text: xi18n("AL:")
584  fontSizeMode: Text.Fit
585  font.bold: true
586  }
587 
588  Label {
589  id: altValue
590  objectName: "altValueObject"
591  color: coordsColor
592  text: "00:00:00"
593  Layout.fillWidth: true
594  font.pointSize: 11
595  }
596 
597  Label {
598  id: haLabel
599  color: "#ffffff"
600  text: xi18n("HA:")
601  fontSizeMode: Text.Fit
602  font.bold: true
603  }
604 
605  Label {
606  id: haValue
607  objectName: "haValueObject"
608  color: coordsColor
609  text: "00:00:00"
610  Layout.fillWidth: true
611  font.pointSize: 11
612  }
613 
614  Label {
615  id: zaLabel
616  color: "#ffffff"
617  text: xi18n("ZA:")
618  fontSizeMode: Text.Fit
619  font.bold: true
620  }
621 
622  Label {
623  id: zaValue
624  objectName: "zaValueObject"
625  color: coordsColor
626  text: "00:00:00"
627  Layout.fillWidth: true
628  font.pointSize: 11
629  }
630  }
631 
632  RowLayout
633  {
634  id: targetFindLayout
635  Layout.fillWidth: true
636  Layout.alignment: Qt.AlignHCenter
637 
638  Label {
639  id: targetLabel
640  color: "#ffffff"
641  text: xi18n("Target:")
642  verticalAlignment: Text.AlignVCenter
643  Layout.fillHeight: true
644  Layout.fillWidth: false
645  font.pointSize: 14
646  font.bold: true
647  }
648 
649  TextField {
650  id: targetText
651  objectName: "targetTextObject"
652  placeholderText: "Click Find Icon"
653  readOnly: true
654  Rectangle
655  {
656  color: "black"
657  radius: fontMetrics.height * 0.25
658  anchors.fill: parent
659  clip: true
660  opacity: 0.5
661  border.color: "#D4AF37"
662  border.width: fontMetrics.height * 0.05
663  }
664  verticalAlignment: Text.AlignVCenter
665  horizontalAlignment: Text.AlignHCenter
666  Layout.fillHeight: false
667  Layout.fillWidth: true
668  font.pointSize: 14
669  font.bold: true
670  }
671 
672  Button {
673  id: findButton
674  objectName: "findButtonObject"
675  Layout.fillWidth: false
676  iconName: "view-history"
677  Layout.alignment: Qt.AlignRight
678  Layout.minimumHeight: fontMetrics.height * 1.4
679  Layout.maximumHeight: fontMetrics.height * 1.4
680  Layout.minimumWidth: fontMetrics.height * 1.5
681  Layout.maximumWidth: fontMetrics.height * 1.5
682  onClicked:
683  {
684  mount.findTarget()
685  }
686  }
687 
688  }
689 
690 
691  GridLayout {
692  id: targetCoordsLayout
693  Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
694  Layout.fillWidth: true
695  columns: 2
696 
697  Label {
698  id: targetRALabel
699  objectName: "targetRALabelObject"
700  color: "#ffffff"
701  text: xi18n("RA:")
702  font.pointSize: 14
703  font.bold: true
704  }
705 
706  TextField {
707  id: targetRAText
708  objectName: "targetRATextObject"
709  placeholderText: "HH:MM:SS"
710  font.pointSize: 14
711  horizontalAlignment: Text.AlignHCenter
712  Layout.minimumWidth: fontMetrics.height * 7
713  clip: true
714  font.bold: true
715  Layout.minimumHeight: fontMetrics.height * 1.4
716  Layout.fillWidth: true
717  }
718 
719  Label {
720  id: targetDELabel
721  objectName: "targetDELabelObject"
722  color: "#ffffff"
723  text: xi18n("DE:")
724  font.pointSize: 14
725  font.bold: true
726  }
727 
728  TextField {
729  id: targetDEText
730  objectName: "targetDETextObject"
731  placeholderText: "DD:MM:SS"
732  font.pointSize: 14
733  width: fontMetrics.height * 7.5
734  horizontalAlignment: Text.AlignHCenter
735  Layout.fillHeight: false
736  Layout.minimumWidth: fontMetrics.height * 7
737  clip: true
738  font.bold: true
739  Layout.minimumHeight: fontMetrics.height * 1.4
740  Layout.fillWidth: true
741  }
742 
743  Label {
744  id: coordLabel
745  text: xi18n("Type:")
746  }
747 
748  RowLayout
749  {
750  ExclusiveGroup {
751  id: coordGroup
752  objectName: "coordGroupObject"
753  property int lastChecked: 0
754  property bool valid: false
755  }
756 
757  RadioButton {
758  id: equatorialCheck
759  objectName: "equatorialCheckObject"
760  checked: true
761  text: xi18n("RA/DE")
762  exclusiveGroup: coordGroup
763  onCheckedChanged: {
764  if (checked) {
765  targetRALabel.text = xi18n("RA:")
766  targetDELabel.text = xi18n("DE:")
767  targetRAText.placeholderText = "HH:MM:SS"
768  if (targetRAText.text == "" ||
769  targetDEText.text == "") {
770  targetRAText.text = ""
771  targetDEText.text = ""
772  }
773  else {
774  if (coordGroup.lastChecked == 1)
775  coordGroup.valid = mount.azAltToRaDec(
776  targetRAText.text, targetDEText.text)
777  else
778  coordGroup.valid = mount.haDecToRaDec(
779  targetRAText.text)
780  if (!coordGroup.valid) {
781  targetRAText.text = ""
782  targetDEText.text = ""
783  }
784  }
785  targetRAText.focus = false
786  targetDEText.focus = false
787  coordGroup.lastChecked = 0
788  }
789  }
790  }
791 
792  RadioButton {
793  id: horizontalCheck
794  exclusiveGroup: coordGroup
795  objectName: "horizontalCheckObject"
796  text: xi18n("AZ/AL")
797  checked: false
798  onCheckedChanged: {
799  if (checked) {
800  targetText.text = ""
801  targetRALabel.text = xi18n("AZ:")
802  targetDELabel.text = xi18n("AL:")
803  targetRAText.placeholderText = "DDD:MM:SS"
804  if (targetRAText.text == "" ||
805  targetDEText.text == "") {
806  targetRAText.text = ""
807  targetDEText.text = ""
808  }
809  else {
810  if (coordGroup.lastChecked == 0)
811  coordGroup.valid = mount.raDecToAzAlt(
812  targetRAText.text, targetDEText.text)
813  else
814  coordGroup.valid = mount.haDecToAzAlt(
815  targetRAText.text, targetDEText.text)
816  if (!coordGroup.valid) {
817  targetRAText.text = ""
818  targetDEText.text = ""
819  }
820  }
821  targetRAText.focus = false
822  targetDEText.focus = false
823  coordGroup.lastChecked = 1
824  }
825  }
826  }
827 
828  RadioButton {
829  id: haEquatorialCheck
830  text: xi18n("HA/DE")
831  exclusiveGroup: coordGroup
832  objectName: "haEquatorialCheckObject"
833  checked: false
834  onCheckedChanged: {
835  if (checked) {
836  targetText.text = ""
837  targetRALabel.text = xi18n("HA:")
838  targetDELabel.text = xi18n("DE:")
839  targetRAText.placeholderText = "HH:MM:SS"
840  if (targetRAText.text == "" ||
841  targetDEText.text == "") {
842  targetRAText.text = ""
843  targetDEText.text = ""
844  }
845  else {
846  if (coordGroup.lastChecked == 1)
847  coordGroup.valid = mount.azAltToHaDec(
848  targetRAText.text, targetDEText.text)
849  else
850  coordGroup.valid = mount.raDecToHaDec(
851  targetRAText.text)
852  if (!coordGroup.valid) {
853  targetRAText.text = ""
854  targetDEText.text = ""
855  }
856  }
857  targetRAText.focus = false
858  targetDEText.focus = false
859  coordGroup.lastChecked = 2
860  }
861  }
862  }
863  }
864 
865  Label {
866  id: epochLabel
867  text: xi18n("Epoch:")
868  }
869 
870  RowLayout
871  {
872  ExclusiveGroup { id: epochGroup }
873 
874  RadioButton {
875  id: jnowCheck
876  objectName: "jnowCheckObject"
877  checked: true
878  text: xi18n("JNow")
879  exclusiveGroup: epochGroup
880  }
881 
882  RadioButton {
883  id: j2000Check
884  objectName: "j2000CheckObject"
885  text: xi18n("J2000")
886  exclusiveGroup: epochGroup
887  }
888  }
889  }
890 
891  GridLayout {
892  id: actionLayout
893  Layout.fillHeight: false
894  Layout.fillWidth: true
895  Layout.alignment: Qt.AlignHCenter
896  columns: 2
897 
898  Button {
899  id: gotoButton
900  objectName: "gotoButtonObject"
901  text: xi18n("GOTO")
902  Layout.fillWidth: true
903 
904  onClicked:
905  {
906  mount.slew(targetRAText.text, targetDEText.text);
907  mountMotionLayout.focus = true;
908  }
909  }
910 
911  Button {
912  id: syncButton
913  objectName: "syncButtonObject"
914  text: xi18n("SYNC")
915  Layout.fillWidth: true
916 
917  onClicked:
918  {
919  mount.sync(targetRAText.text, targetDEText.text);
920  mountMotionLayout.focus = true;
921  }
922  }
923 
924  Button {
925  id: parkButton
926  objectName: "parkButtonObject"
927  text: xi18n("PARK")
928  Layout.fillWidth: true
929 
930  onClicked:
931  {
932  mount.park()
933  }
934  }
935 
936  Button {
937  id: unparkButton
938  objectName: "unparkButtonObject"
939  text: xi18n("UNPARK")
940  Layout.fillWidth: true
941 
942  onClicked:
943  {
944  mount.unpark()
945  }
946  }
947  }
948 
949  RowLayout {
950  id: statusLayout
951  Layout.fillHeight: false
952  Layout.fillWidth: true
953  Layout.alignment: Qt.AlignHCenter
954 
955  Label {
956  id: statusLabel
957  color: "#ffffff"
958  text: xi18n("Status:")
959  font.pointSize: 12
960  font.bold: true
961  }
962 
963  Label {
964  id: statusText
965  objectName: "statusTextObject"
966  color: "#ffffff"
967  text: xi18n("Idle")
968  Layout.fillWidth: true
969  Layout.minimumWidth: fontMetrics.height * 5
970  font.pointSize: 12
971  font.bold: true
972  }
973 
974  Button {
975  id: centerMount
976  Layout.minimumWidth: fontMetrics.height * 1.4
977  Layout.minimumHeight: fontMetrics.height * 1.4
978  iconName: "crosshairs"
979 
980  onClicked:
981  {
982  mount.centerMount()
983  }
984  }
985  }
986  }
987  }
988 }
989 
990 /*##^##
991 Designer {
992  D{i:0;autoSize:true;height:480;width:640}
993 }
994 ##^##*/
QTextStream & right(QTextStream &stream)
QTextStream & left(QTextStream &stream)
QString xi18n(const char *text, const TYPE &arg...)
KIOCORE_EXPORT SimpleJob * mount(bool ro, const QByteArray &fstype, const QString &dev, const QString &point, JobFlags flags=DefaultFlags)
KGuiItem stop()
AKONADI_CALENDAR_EXPORT KCalendarCore::Event::Ptr event(const Akonadi::Item &item)
QAction * up(const QObject *recvr, const char *slot, QObject *parent)
This file is part of the KDE documentation.
Documentation copyright © 1996-2022 The KDE developers.
Generated on Fri Aug 12 2022 04:00:56 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.