Warning, /education/kstars/kstars/kstarslite/qml/modules/helpers/TimeSpinBox.qml is written in an unsupported language. File is not indexed.

0001 // SPDX-FileCopyrightText: 2016 Artem Fedoskin <afedoskin3@gmail.com>
0002 // SPDX-License-Identifier: GPL-2.0-or-later
0003 
0004 import QtQuick.Controls 2.0
0005 import QtQuick 2.6
0006 import "../../constants" 1.0
0007 
0008 SpinBox {
0009     id: control
0010     from: -41
0011     to: 41
0012     anchors.verticalCenter: parent.verticalCenter
0013     editable: false
0014 
0015     background: Rectangle {
0016         implicitWidth: 160
0017         color: Num.sysPalette.base
0018     }
0019 
0020     contentItem: Text {
0021         z: 2
0022         text: control.textFromValue(control.value, control.locale)
0023         anchors.verticalCenter: parent.verticalCenter
0024 
0025         font: control.font
0026         color: Num.sysPalette.text
0027         horizontalAlignment: Qt.AlignHCenter
0028         verticalAlignment: Qt.AlignVCenter
0029     }
0030 
0031     property int spacingg: 0
0032 
0033     Connections {
0034         target: up
0035         onPressed: {
0036             console.log(up.pressed)
0037         }
0038     }
0039 
0040     up.indicator: Rectangle {
0041         z: 0
0042         x: control.mirrored ? -spacingg : parent.width - width + spacingg
0043         anchors.verticalCenter: parent.verticalCenter
0044         implicitWidth: 37
0045         implicitHeight: 37
0046         color: up.pressed || !enabled ? Num.sysPalette.light : Num.sysPalette.base
0047         border.color: up.pressed || !enabled ? Num.sysPalette.base : Num.sysPalette.light
0048         radius: 5
0049 
0050         Text {
0051             z: 1
0052             text: "+"
0053             font.pixelSize: control.font.pixelSize * 2
0054             color: up.pressed || !enabled ? Num.sysPalette.dark : Num.sysPalette.text
0055             anchors.fill: parent
0056             fontSizeMode: Text.Fit
0057             horizontalAlignment: Text.AlignHCenter
0058             verticalAlignment: Text.AlignVCenter
0059         }
0060     }
0061 
0062     down.indicator: Rectangle {
0063         z: 0
0064         x: control.mirrored ? parent.width - width + spacingg : -spacingg
0065         anchors.verticalCenter: parent.verticalCenter
0066         implicitWidth: 37
0067         implicitHeight: 37
0068         color: down.pressed || !enabled ? Num.sysPalette.light : Num.sysPalette.base
0069         border.color: down.pressed || !enabled ? Num.sysPalette.base : Num.sysPalette.light
0070         radius: 5
0071 
0072         Text {
0073             text: "-"
0074             font.pixelSize: control.font.pixelSize * 2
0075             color: down.pressed || !enabled ? Num.sysPalette.dark : Num.sysPalette.text
0076             anchors.fill: parent
0077             fontSizeMode: Text.Fit
0078             horizontalAlignment: Text.AlignHCenter
0079             verticalAlignment: Text.AlignVCenter
0080         }
0081     }
0082 
0083     property bool daysOnly: false
0084 
0085     onDaysOnlyChanged: {
0086         setDaysOnly()
0087     }
0088 
0089     Component.onCompleted: {
0090         setDaysOnly()
0091     }
0092 
0093     property double secs_per_day: 86400.0
0094     property double sidereal_year: 31558149.77
0095     property double tropical_year: 31556925.19
0096 
0097     property var timeString: []
0098     property var timeScale: []
0099 
0100     //TimeUnit control
0101     property int unitValue: 1
0102     property int allunits: 8
0103     property int dayunits: 5
0104     property int minUnitValue
0105     property int maxUnitValue
0106     property var unitStep: []
0107 
0108     function setDaysOnly() {
0109         var i = 0; //index for timeScale values
0110 
0111         timeScale[0] = 0.0
0112         if(!daysOnly) {
0113             timeScale[1] = 0.1;          // 0.1 sec
0114             timeScale[2] = 0.25;         // 0.25 sec
0115             timeScale[3] = 0.5;          // 0.5 sec
0116             timeScale[4] = 1.0;          // 1 sec (real-time)
0117             timeScale[5] = 2.0;          // 2 sec
0118             timeScale[6] = 5.0;          // 5 sec
0119             timeScale[7] = 10.0;         // 10 sec
0120             timeScale[8] = 20.0;         // 20 sec
0121             timeScale[9] = 30.0;         // 30 sec
0122             timeScale[10] = 60.0;        // 1 min
0123             timeScale[11] = 120.0;       // 2 min
0124             timeScale[12] = 300.0;       // 5 min
0125             timeScale[13] = 600.0;       // 10 min
0126             timeScale[14] = 900.0;       // 15 min
0127             timeScale[15] = 1800.0;      // 30 min
0128             timeScale[16] = 3600.0;      // 1 hr
0129             timeScale[17] = 7200.0;      // 2 hr
0130             timeScale[18] = 10800.0;     // 3 hr
0131             timeScale[19] = 21600.0;     // 6 hr
0132             timeScale[20] = 43200.0;     // 12 hr
0133             i = 20;
0134         }
0135 
0136         timeScale[i+1] = 86164.1;     // 23 hr 56 min
0137         timeScale[i+2] = secs_per_day;     // 1 day
0138         timeScale[i+3] = 2.*secs_per_day;  // 2 days
0139         timeScale[i+4] = 3.*secs_per_day;  // 3 days
0140         timeScale[i+5] = 5.*secs_per_day;  // 5 days
0141         timeScale[i+6] = 7.*secs_per_day;  // 1 week
0142         timeScale[i+7] = 14.*secs_per_day; //2 weeks
0143         timeScale[i+8] = 21.*secs_per_day; //3 weeks
0144         //Months aren't a simple measurement of time; I'll just use fractions of a year
0145         timeScale[i+9] = sidereal_year/12.0; // 1 month
0146         timeScale[i+10] = sidereal_year/6.0;  // 2 months
0147         timeScale[i+11] = 0.25*sidereal_year; // 3 months
0148         timeScale[i+12] = sidereal_year/3.0;  // 4 months
0149         timeScale[i+13] = 0.5*sidereal_year;  // 6 months
0150         timeScale[i+14] = 0.75*sidereal_year; // 9 months
0151         timeScale[i+15] = sidereal_year;       // 1 year
0152         timeScale[i+16] = 2.0*sidereal_year;   // 2 years
0153         timeScale[i+17] = 3.0*sidereal_year;   // 3 years
0154         timeScale[i+18] = 5.0*sidereal_year;   // 5 years
0155         timeScale[i+19] = 10.0*sidereal_year;  // 10 years
0156         timeScale[i+20] = 25.0*sidereal_year;  // 25 years
0157         timeScale[i+21] = 50.0*sidereal_year;  // 50 years
0158         timeScale[i+22] = 100.0*sidereal_year; // 100 years
0159 
0160         timeString = []
0161         if ( ! daysOnly ) {
0162             timeString.push( i18n( "0 secs" ));
0163             timeString.push( i18n( "0.1 secs" ));
0164             timeString.push( i18n( "0.25 secs" ));
0165             timeString.push( i18n( "0.5 secs" ));
0166             timeString.push( i18n( "1 sec" ));
0167             timeString.push( i18n( "2 secs" ));
0168             timeString.push( i18n( "5 secs" ));
0169             timeString.push( i18n( "10 secs" ));
0170             timeString.push( i18n( "20 secs" ));
0171             timeString.push( i18n( "30 secs" ));
0172             timeString.push( i18n( "1 min" ));
0173             timeString.push( i18n( "2 mins" ));
0174             timeString.push( i18n( "5 mins" ));
0175             timeString.push( i18n( "10 mins" ));
0176             timeString.push( i18n( "15 mins" ));
0177             timeString.push( i18n( "30 mins" ));
0178             timeString.push( i18n( "1 hour" ));
0179             timeString.push( i18n( "2 hrs" ));
0180             timeString.push( i18n( "3 hrs" ));
0181             timeString.push( i18n( "6 hrs" ));
0182             timeString.push( i18n( "12 hrs" ));
0183         } else {
0184             timeString.push( i18n( "0 days" ));
0185         }
0186         timeString.push( i18n( "1 sid day" ));
0187         timeString.push( i18n( "1 day" ));
0188         timeString.push( i18n( "2 days" ));
0189         timeString.push( i18n( "3 days" ));
0190         timeString.push( i18n( "5 days" ));
0191         timeString.push( i18n( "1 week" ));
0192         timeString.push( i18n( "2 wks" ));
0193         timeString.push( i18n( "3 wks" ));
0194         timeString.push( i18n( "1 month" ));
0195         timeString.push( i18n( "2 mths" ));
0196         timeString.push( i18n( "3 mths" ));
0197         timeString.push( i18n( "4 mths" ));
0198         timeString.push( i18n( "6 mths" ));
0199         timeString.push( i18n( "9 mths" ));
0200         timeString.push( i18n( "1 year" ));
0201         timeString.push( i18n( "2 yrs" ));
0202         timeString.push( i18n( "3 yrs" ));
0203         timeString.push( i18n( "5 yrs" ));
0204         timeString.push( i18n( "10 yrs" ));
0205         timeString.push( i18n( "25 yrs" ));
0206         timeString.push( i18n( "50 yrs" ));
0207         timeString.push( i18n( "100 yrs" ));
0208 
0209         if ( !daysOnly ) {
0210             from = -41
0211             to = 41
0212         } else {
0213             from = -21
0214             to = 21
0215         }
0216 
0217         if ( daysOnly ) {
0218             minUnitValue = 1-dayunits
0219             maxUnitValue = dayunits-1
0220             unitValue = 1 // Start out with days units
0221 
0222             unitStep[0] = 0;
0223             unitStep[1] = 1;
0224             unitStep[2] = 5;
0225             unitStep[3] = 8;
0226             unitStep[4] = 14;
0227         } else {
0228             minUnitValue = 1-allunits
0229             maxUnitValue = allunits-1
0230             unitValue = 1 // Start out with seconds units
0231 
0232             unitStep[0] = 0;
0233             unitStep[1] = 4;
0234             unitStep[2] = 10;
0235             unitStep[3] = 16;
0236             unitStep[4] = 21;
0237             unitStep[5] = 25;
0238             unitStep[6] = 28;
0239             unitStep[7] = 34;
0240         }
0241 
0242         value = 4
0243     }
0244 
0245     function increaseTimeUnit() {
0246         if(unitValue < maxUnitValue) {
0247             unitValue = unitValue + 1
0248             value = getUnitValue()
0249         }
0250     }
0251 
0252     function decreaseTimeUnit() {
0253         if(unitValue > minUnitValue) {
0254             unitValue = unitValue - 1
0255             value = getUnitValue()
0256         }
0257     }
0258 
0259     function getUnitValue() {
0260         var uval;
0261         if ( unitValue >= 0 ) uval = unitStep[ unitValue ];
0262         else uval = -1*unitStep[ Math.abs( unitValue ) ];
0263         return uval;
0264     }
0265 
0266     function unitValueFromNum( val ) {
0267         if ( val >= 0 ) return unitStep[ val ];
0268         else return -1*unitStep[ Math.abs( val ) ];
0269     }
0270 
0271     function getTimeScale() {
0272         return value > 0 ? timeScale[ value ] : -1.*timeScale[ Math.abs(value) ];
0273     }
0274 
0275     function reportChange() {
0276         console.log("Reporting new timestep value: " + getTimeScale())
0277         KStarsLite.scaleChanged( getTimeScale() )
0278     }
0279 
0280     textFromValue: function(value) {
0281         var result
0282         var posval = Math.abs( value )
0283         if ( posval > timeString.length - 1 ) posval = 4;
0284 
0285         result = timeString[ posval ];
0286 
0287     if ( value < 0 ) { result = '-' + result; }
0288 
0289         reportChange()
0290         return result;
0291     }
0292 
0293     valueFromText: function(text) {
0294 
0295         for (var i = 0; i < timeString.length; ++i) {
0296             if (text === timeString[i]) return i
0297             if (text.substring(1) === timeString[i]) return -1*i
0298         }
0299 
0300         return 0
0301     }
0302 }