diff --git a/telldus-gui/Plugins/SchedulerGUISimple/ActionPoint.qml b/telldus-gui/Plugins/SchedulerGUISimple/ActionPoint.qml index 4bf71841..57b29081 100644 --- a/telldus-gui/Plugins/SchedulerGUISimple/ActionPoint.qml +++ b/telldus-gui/Plugins/SchedulerGUISimple/ActionPoint.qml @@ -18,10 +18,9 @@ Rectangle{ property int absoluteHour: parseInt(dialog.absoluteHour, 10) property int absoluteMinute: parseInt(dialog.absoluteMinute, 10) property alias triggerstate: trigger.state - property variant parentPoint + property variant parentPoint: undefined property variant pointId property variant lastRun: 0; - //property int parentPointAbsoluteHour //TEST changed from int, want "undefined" property alias deviceRow: pointRect.parent property variant selectedDate: (deviceRow == null || deviceRow == undefined) ? new Date() : deviceRow.selectedDate @@ -32,7 +31,6 @@ Rectangle{ var dynamicBar = actionBar.createObject(pointRect) dynamicBar.hangOnToPoint = pointRect dynamicBar.state = "pointLoaded" - //pointRect.hangOnToBar = dynamicBar } //use item instead of rectangle (no border then though) to make it invisible (opacity: 0) @@ -418,6 +416,7 @@ Rectangle{ function remove(keepDialogOpen, ignoreParent){ if(keepDialogOpen == undefined && ignoreParent == undefined && pointRect.parentPoint != undefined){ //remove from parent instead + print(pointRect.parentPoint); pointRect.parentPoint.remove(); return; } diff --git a/telldus-gui/Plugins/SchedulerGUISimple/actionpointscripts.js b/telldus-gui/Plugins/SchedulerGUISimple/actionpointscripts.js index f144b528..e5b3f44e 100644 --- a/telldus-gui/Plugins/SchedulerGUISimple/actionpointscripts.js +++ b/telldus-gui/Plugins/SchedulerGUISimple/actionpointscripts.js @@ -95,24 +95,25 @@ function updateParentsInChildList(newParentPoint){ function updateChildPoints(){ var children; + var localParentPoint; if(pointRect.parentPoint != undefined){ children = pointRect.parentPoint.getChildPoints(); - parentPoint = pointRect.parentPoint; + localParentPoint = pointRect.parentPoint; } else{ children = getChildPoints(); - parentPoint = pointRect; + localParentPoint = pointRect; } for(var point in children){ - children[point].absoluteHour = parentPoint.absoluteHour; - children[point].absoluteMinute = parentPoint.absoluteMinute; - children[point].fuzzyBefore = parentPoint.fuzzyBefore; - children[point].fuzzyAfter = parentPoint.fuzzyAfter; - children[point].offset = parentPoint.offset; - children[point].triggerstate = parentPoint.triggerstate; - children[point].dimvalue = parentPoint.dimvalue; - children[point].state = parentPoint.state; + children[point].absoluteHour = localParentPoint.absoluteHour; + children[point].absoluteMinute = localParentPoint.absoluteMinute; + children[point].fuzzyBefore = localParentPoint.fuzzyBefore; + children[point].fuzzyAfter = localParentPoint.fuzzyAfter; + children[point].offset = localParentPoint.offset; + children[point].triggerstate = localParentPoint.triggerstate; + children[point].dimvalue = localParentPoint.dimvalue; + children[point].state = localParentPoint.state; if(children[point].triggerstate == "absolute"){ children[point].x = children[point].getAbsoluteXValue(); } diff --git a/telldus-gui/Plugins/SchedulerGUISimple/main.qml b/telldus-gui/Plugins/SchedulerGUISimple/main.qml index 1b0168bd..e1299875 100644 --- a/telldus-gui/Plugins/SchedulerGUISimple/main.qml +++ b/telldus-gui/Plugins/SchedulerGUISimple/main.qml @@ -8,7 +8,7 @@ import "mainscripts.js" as MainScripts width: mainWidth height: mainHeight property int dayListHeaderHeight: 15 - property variant selectedDate: Scripts.getCurrentDate(); //Maybe just today + property variant selectedDate: MainScripts.getCurrentDate(); //Maybe just today property variant sunData: MainScripts.getSunData(); Component.onCompleted: { @@ -22,17 +22,17 @@ import "mainscripts.js" as MainScripts var currentDay = new Date(startday); currentDay.setDate(startday.getDate() + i); dynamicDay.daydate = currentDay; - Scripts.addDay(dynamicDay); + MainScripts.addDay(dynamicDay); } dynamicDay.state = "visible" //set last day (today) as visible - weekDayText.text = Scripts.getCurrentDayName() - Scripts.updateDeviceIndex(); - Scripts.setLoading(); + weekDayText.text = MainScripts.getCurrentDayName() + MainScripts.updateDeviceIndex(); + MainScripts.setLoading(); var updateLastRunFunc = updateLastRun; restoreJobs.callWith(updateLastRunFunc); - Scripts.initiateStoredPointsInGUI(); - Scripts.endLoading(); - Scripts.updateEndsWith(); + MainScripts.initiateStoredPointsInGUI(); + MainScripts.endLoading(); + MainScripts.updateEndsWith(); } Rectangle{ @@ -47,7 +47,7 @@ import "mainscripts.js" as MainScripts anchors.verticalCenter: weekDayText.verticalCenter arrowText: "<-" onClicked: { - Scripts.decrementCurrentDay(); + MainScripts.decrementCurrentDay(); } } Text{ @@ -60,7 +60,7 @@ import "mainscripts.js" as MainScripts anchors.verticalCenter: weekDayText.verticalCenter arrowText: "->" onClicked: { - Scripts.incrementCurrentDay(); + MainScripts.incrementCurrentDay(); } } } @@ -194,7 +194,7 @@ import "mainscripts.js" as MainScripts property int deviceId: modelData.id; property alias continuingBar: continuingBar property variant selectedDate: main.selectedDate - property int currentDayIndex: Scripts.getCurrentDayIndex(main.selectedDate) + property int currentDayIndex: MainScripts.getCurrentDayIndex(main.selectedDate) state: "enabled" @@ -230,9 +230,9 @@ import "mainscripts.js" as MainScripts dynamicPoint.addActiveState("bell"); dynamicPoint.setFirstState(); dynamicPoint.pointId = new Date().getTime(); //just needed for storage update - deviceRow.updateContinuingBars(); dialog.show(dynamicPoint) + } } @@ -251,11 +251,11 @@ import "mainscripts.js" as MainScripts //device functions: function createChildPoint(index, pointRect, deviceId){ - return Scripts.createChildPoint(index, pointRect, deviceId); + return MainScripts.createChildPoint(index, pointRect, deviceId); } function getDeviceRow(dayIndex, deviceId){ - return Scripts.getDeviceRow(dayIndex, deviceId); + return MainScripts.getDeviceRow(dayIndex, deviceId); } function hasPoints(){ @@ -263,7 +263,7 @@ import "mainscripts.js" as MainScripts } function isLoading(){ - return Scripts.isLoading(); + return MainScripts.isLoading(); } function setChanged(){ @@ -271,7 +271,7 @@ import "mainscripts.js" as MainScripts } function updateContinuingBars(){ - Scripts.updateEndsWith(); + MainScripts.updateEndsWith(); } } } @@ -367,7 +367,7 @@ import "mainscripts.js" as MainScripts } function saveAll(){ - var days = Scripts.getDays(); + var days = MainScripts.getDays(); if(dialog.dialogOpacity == 1){ MainScripts.setChanged(dialog.actionPoint.deviceRow.deviceId, true); //set the devicerow that the currently visible dialog is connected to as dirty } @@ -380,9 +380,9 @@ import "mainscripts.js" as MainScripts } MainScripts.setChanged(deviceId, false); //reset hasChanged-status - if(Scripts.deviceIsEnabled(deviceId)){ //if device is disabled, don't add any points to schedule (but remove current) + if(MainScripts.deviceIsEnabled(deviceId)){ //if device is disabled, don't add any points to schedule (but remove current) for(var j=0;j prevPoint.x) && pointList[i].state != "bell"){ //TODO when more than "bell", make dynamic + prevPoint = pointList[i]; + } + } + } + + if(prevPoint == null){ + dayIndex = dayIndex - 1; + if(dayIndex == -1){ //too far, begin from end again + dayIndex = days.length - 1; + } + + var prevDayDevice = getDeviceRow(dayIndex, deviceId); + if(prevDayDevice == undefined){ + return null; + } + return prevDayDevice.endPoint; + } + if(prevPoint.state == "off"){ + return null; + } + return prevPoint; //only on or dim +} + +function updateDeviceIndex(){ //TODO, better way, please... + deviceIndex = []; //empty list + var startIndex = 0; + for(var i=0;i days.length-1){ + dayIndex = dayIndex - days.length; + } + + var deviceRow = days[dayIndex].children[0].children[parseInt(deviceIndex[device])]; + + previousEndPoint = assignContinuingBarProperties(deviceRow, previousEndPoint, dayIndex, i==0); + + if(i == days.length-1){ + //last one, bind the first one too then + deviceRow = days[startIndex].children[0].children[parseInt(deviceIndex[device])]; + assignContinuingBarProperties(deviceRow, previousEndPoint, dayIndex, false); + } + } + } +} + + +//DAYS: + +var weekday_name_array = new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"); +var currentDayIndex = 6; //Today... +var days = new Array(); + +function addDay(day){ + days.push(day); +} + +function decrementCurrentDay(){ + days[currentDayIndex].state = "hiddenRight"; + var workDate = days[currentDayIndex].daydate; + workDate.setDate(workDate.getDate() - 7); + days[currentDayIndex].daydate = workDate; + if(currentDayIndex == 0){ + currentDayIndex = days.length - 1; + } + else{ + currentDayIndex--; + } + days[currentDayIndex].state = "hiddenLeft"; //place on right side of center, for correct slid + days[currentDayIndex].state = "visible"; +} + +function getCurrentDay(){ + return days[currentDayIndex]; +} + +function getCurrentDayIndex(dummyvalue){ + //by sending in this dummyvalue, this function will be evaluated when that value is changed... + return currentDayIndex; +} + +function getCurrentDate(){ + if(days.length < 7){ + //not initiated yet + return new Date(); //now + } + var date = new Date(days[currentDayIndex].daydate); + return date; +} + +function getCurrentDayName(){ + var day = getCurrentDay().daydate; + return weekday_name_array[day.getDay()] + " " + day.getDate(); +} + +function getDayIndexForDayOfWeek(dayOfWeek){ + var offset = days[0].daydate.getDay(); + dayOfWeek = days.length - offset + parseInt(dayOfWeek); + if(dayOfWeek == -1){ + dayOfWeek = days.length - 1; + } + if(dayOfWeek > days.length-1){ + dayOfWeek = dayOfWeek - days.length; + } + return dayOfWeek; +} + +function getDays(){ + return days; +} + +function incrementCurrentDay(){ + days[currentDayIndex].state = "hiddenLeft"; + var workDate = days[currentDayIndex].daydate; + workDate.setDate(workDate.getDate() + 1); + if(currentDayIndex == (days.length - 1)){ + currentDayIndex = 0; + } + else{ + currentDayIndex++; + } + days[currentDayIndex].daydate = workDate; + days[currentDayIndex].state = "hiddenRight"; //place on right side of center, for correct slide + days[currentDayIndex].state = "visible"; +} + +function updateLastRun(deviceId, day, pointId, lastRun){ + day = getDayIndexForDayOfWeek(day); + var row = getDeviceRow(day,deviceId); + for(var k=0;k days.length-1){ - dayIndex = dayIndex - days.length; - } - - var deviceRow = days[dayIndex].children[0].children[parseInt(deviceIndex[device])]; - - previousEndPoint = assignContinuingBarProperties(deviceRow, previousEndPoint, dayIndex, i==0); - - if(i == days.length-1){ - //last one, bind the first one too then - deviceRow = days[startIndex].children[0].children[parseInt(deviceIndex[device])]; - assignContinuingBarProperties(deviceRow, previousEndPoint, dayIndex, false); - } - } - } -} - -function assignContinuingBarProperties(deviceRow, previousEndPoint, dayIndex, firstRow){ - - if(previousEndPoint == undefined){ //the first has no point to bind to - deviceRow.continuingBar.prevDayColor = "white"; - deviceRow.continuingBar.prevDayOpacity = 0; - deviceRow.continuingBar.prevDayWidth = 0; - } - else{ - deviceRow.continuingBar.prevDayColor = previousEndPoint.actionTypeColor; - if(previousEndPoint.state == "dim"){ - deviceRow.continuingBar.prevDayOpacity = previousEndPoint.dimvalue/100; - } - else{ - deviceRow.continuingBar.prevDayOpacity = previousEndPoint.actionTypeOpacity; - } - - } - - if(deviceRow.hasPoints()){ - deviceRow.endPoint = getEndsWith(deviceRow.children, days[dayIndex].daydate.getDay(), deviceRow.deviceId); - previousEndPoint = deviceRow.endPoint; - deviceRow.continuingBar.prevDayWidth = 0; - deviceRow.continuingBar.state = "continuingWithLimitedWidth"; - } - else{ - deviceRow.continuingBar.state = "continuing"; - deviceRow.endPoint = previousEndPoint; - deviceRow.continuingBar.prevDayWidth = deviceRow.width; - } - - return previousEndPoint; -} - -//Init: -function initiateStoredPointsInGUI(){ - for(var devicekey in storedPoints){ - for(var i=0;i days.length-1){ - dayOfWeek = dayOfWeek - days.length; - } - return dayOfWeek; -} - -function updateLastRun(deviceId, day, pointId, lastRun){ - day = getDayIndexForDayOfWeek(day); - var row = getDeviceRow(day,deviceId); - for(var k=0;k prevPoint.x) && pointList[i].state != "bell"){ //TODO when more than "bell", make dynamic - prevPoint = pointList[i]; - } - } - } - - if(prevPoint == null){ - dayIndex = dayIndex - 1; - if(dayIndex == -1){ //too far, begin from end again - dayIndex = days.length - 1; - } - - var prevDayDevice = getDeviceRow(dayIndex, deviceId); - if(prevDayDevice == undefined){ - return null; - } - return prevDayDevice.endPoint; - } - if(prevPoint.state == "off"){ - return null; - } - return prevPoint; //only on or dim -} - -function getTimeFromSeconds(seconds){ - var totalMinutes = seconds/60; - var minutes = totalMinutes%60; - var hours = Math.floor(totalMinutes/60); - return [hours, minutes]; -} - function getFirstPointWidth(deviceRow){ var pointList = deviceRow.children; //TODO should really try to avoid using "children"... make own list instead? var firstX = deviceRow.width; @@ -392,21 +30,6 @@ function getFirstPointWidth(deviceRow){ return firstX + pointWidth/2; } -function pad(number, length) { - - var str = '' + number; - while (str.length < length) { - str = '0' + str; - } - - return str; -} - -function getOffsetWeekdayName(index){ - index = getOffsetWeekday(index); - return weekday_name_array[index]; -} - function getOffsetWeekday(index){ //TODO this can be modified based on locale, not adding 1 if week should start with sunday index = parseInt(index); @@ -417,7 +40,28 @@ function getOffsetWeekday(index){ return index; } -function deviceIsEnabled(deviceId){ - return days[0].children[0].children[deviceIndex[deviceId]].state == "enabled"; +function getOffsetWeekdayName(index){ + index = getOffsetWeekday(index); + return weekday_name_array[index]; +} + +function hasBarChangingPoints(pointList){ + + for(var i=0;i