235 lines
8.7 KiB
Python
235 lines
8.7 KiB
Python
#!/usr/bin/python3
|
|
|
|
# Imports
|
|
import gi, os, subprocess
|
|
from scripts.time_bar import create_bar_chart
|
|
from scripts.cinnamon_pref_handler import *
|
|
from scripts.suntimes import *
|
|
from enums.PreferenceEnums import PrefenceEnums
|
|
from enums.ImageSourceEnum import ImageSourceEnum
|
|
from enums.PeriodSourceEnum import PeriodSourceEnum
|
|
|
|
gi.require_version("Gtk", "3.0")
|
|
from gi.repository import Gtk, GdkPixbuf
|
|
|
|
|
|
# Global definitions
|
|
GLADE_URI = os.path.dirname(os.path.abspath(__file__)) + "/preferences.glade"
|
|
|
|
|
|
class Preferences:
|
|
""" Preference window class
|
|
"""
|
|
|
|
#################### Lifecycle ####################
|
|
|
|
def __init__(self) -> None:
|
|
self.builder = Gtk.Builder()
|
|
self.builder.add_from_file(GLADE_URI)
|
|
self.builder.connect_signals(self)
|
|
|
|
self.suntimes = Suntimes(48.1663, 11.5683)
|
|
|
|
|
|
########## UI objects ##########
|
|
|
|
## Image Configuration
|
|
self.tbImageSet = self.builder.get_object("tb_image_set")
|
|
self.tbHeicFile = self.builder.get_object("tb_heic_file")
|
|
self.tbSourceFolder = self.builder.get_object("tb_source_folder")
|
|
self.lbrImageSet = self.builder.get_object("lbr_image_set")
|
|
self.lbrHeicFile = self.builder.get_object("lbr_heic_file")
|
|
self.lbrSourceFolder = self.builder.get_object("lbr_source_folder")
|
|
self.imgBar = self.builder.get_object("img_bar")
|
|
self.swExpandOverAllDisplays = self.builder.get_object("sw_expand_over_all_displays")
|
|
self.swShowOnLockScreen = self.builder.get_object("sw_show_on_lock_screen")
|
|
self.etr_periods = [
|
|
self.builder.get_object("etr_period_1"), self.builder.get_object("etr_period_2"),
|
|
self.builder.get_object("etr_period_3"), self.builder.get_object("etr_period_4"),
|
|
self.builder.get_object("etr_period_5"), self.builder.get_object("etr_period_6"),
|
|
self.builder.get_object("etr_period_7"), self.builder.get_object("etr_period_8"),
|
|
self.builder.get_object("etr_period_9"), self.builder.get_object("etr_period_10"),
|
|
]
|
|
|
|
## Location & Times
|
|
self.tbNetworkLocation = self.builder.get_object("tb_network_location")
|
|
self.tbCustomLocation = self.builder.get_object("tb_custom_location")
|
|
self.tbTimePeriods = self.builder.get_object("tb_time_periods")
|
|
self.lbrNetworkLocation = self.builder.get_object("lbr_network_location")
|
|
self.spbNetworkLocationRefreshTime = self.builder.get_object("spb_network_location_refresh_time")
|
|
self.lbrCustomLocationLongitude = self.builder.get_object("lbr_custom_location_longitude")
|
|
self.lbrCustomLocationLatitude = self.builder.get_object("lbr_custom_location_latitude")
|
|
self.lbrTimePeriods = self.builder.get_object("lbr_time_periods")
|
|
self.etrLongitude = self.builder.get_object("etr_longitude")
|
|
self.etrLatitude = self.builder.get_object("etr_latitude")
|
|
|
|
|
|
def show(self):
|
|
""" Display the window to the screen
|
|
"""
|
|
window = self.builder.get_object("window_main")
|
|
window.show_all()
|
|
|
|
|
|
# Load from preferences
|
|
if read_str_from_preferences(PrefenceEnums.IMAGESOURCE) == ImageSourceEnum.IMAGESET:
|
|
self.tbImageSet.set_active(True)
|
|
elif read_str_from_preferences(PrefenceEnums.IMAGESOURCE) == ImageSourceEnum.HEICFILE:
|
|
self.tbHeicFile.set_active(True)
|
|
elif read_str_from_preferences(PrefenceEnums.IMAGESOURCE) == ImageSourceEnum.SOURCEFOLDER:
|
|
self.tbSourceFolder.set_active(True)
|
|
|
|
self.swExpandOverAllDisplays.set_active(read_str_from_preferences(PrefenceEnums.EXPANDOVERALLDISPLAY))
|
|
self.swShowOnLockScreen.set_active(read_str_from_preferences(PrefenceEnums.SHOWONLOCKSCREEN))
|
|
|
|
|
|
if read_str_from_preferences(PrefenceEnums.PERIODSOURCE) == PeriodSourceEnum.NETWORKLOCATION:
|
|
self.tbNetworkLocation.set_active(True)
|
|
elif read_str_from_preferences(PrefenceEnums.PERIODSOURCE) == PeriodSourceEnum.CUSTOMLOCATION:
|
|
self.tbCustomLocation.set_active(True)
|
|
elif read_str_from_preferences(PrefenceEnums.PERIODSOURCE) == PeriodSourceEnum.CUSTOMTIMEPERIODS:
|
|
self.tbTimePeriods.set_active(True)
|
|
|
|
self.spbNetworkLocationRefreshTime.set_value(read_int_from_preferences(PrefenceEnums.LOCATIONREFRESHINTERVALS))
|
|
self.etrLatitude.set_text(read_str_from_preferences(PrefenceEnums.LATITUDE))
|
|
self.etrLongitude.set_text(read_str_from_preferences(PrefenceEnums.LONGITUDE))
|
|
|
|
|
|
########## Time diagram ##########
|
|
|
|
# Stores the start times of the periods in minutes since midnight
|
|
time_periods_min = []
|
|
|
|
# Get all time periods. Store the minutes to the list and print the values to the text views
|
|
for i in range(0, 10):
|
|
time_range = self.suntimes.get_time_period(i)
|
|
self.etr_periods[i].set_text(str(time_range[0].hour).rjust(2, '0') + ":" + str(time_range[0].minute).rjust(2, '0') +\
|
|
" - " + str(time_range[1].hour).rjust(2, '0') + ":" + str(time_range[1].minute).rjust(2, '0'))
|
|
|
|
time_periods_min.append(time_range[0].hour * 60 + time_range[0].minute)
|
|
|
|
# Create time bar
|
|
create_bar_chart(1200, 150, time_periods_min)
|
|
|
|
# Load to the view
|
|
pixbuf = GdkPixbuf.Pixbuf.new_from_file("time_bar.svg")
|
|
self.imgBar.set_from_pixbuf(pixbuf)
|
|
|
|
|
|
# Show the main window
|
|
Gtk.main()
|
|
|
|
|
|
def onDestroy(self, *args):
|
|
""" Lifecycle handler when window will be destroyed
|
|
"""
|
|
Gtk.main_quit()
|
|
|
|
|
|
#################### Callbacks ####################
|
|
|
|
## Image Configuration
|
|
|
|
def onToggleButtonImageSetClicked(self, button):
|
|
if button.get_active():
|
|
self.tbHeicFile.set_active(False)
|
|
self.tbSourceFolder.set_active(False)
|
|
|
|
self.lbrImageSet.set_visible(True)
|
|
self.lbrHeicFile.set_visible(False)
|
|
self.lbrSourceFolder.set_visible(False)
|
|
|
|
def onToggleButtonHeicFileClicked(self, button):
|
|
if button.get_active():
|
|
self.tbImageSet.set_active(False)
|
|
self.tbSourceFolder.set_active(False)
|
|
|
|
self.lbrImageSet.set_visible(False)
|
|
self.lbrHeicFile.set_visible(True)
|
|
self.lbrSourceFolder.set_visible(False)
|
|
|
|
def onToggleButtonSourceFolderClicked(self, button):
|
|
if button.get_active():
|
|
self.tbImageSet.set_active(False)
|
|
self.tbHeicFile.set_active(False)
|
|
|
|
self.lbrImageSet.set_visible(False)
|
|
self.lbrHeicFile.set_visible(False)
|
|
self.lbrSourceFolder.set_visible(True)
|
|
|
|
|
|
## Location & Times
|
|
|
|
def onToggleButtonNetworkLocationClicked(self, button):
|
|
if button.get_active():
|
|
self.tbCustomLocation.set_active(False)
|
|
self.tbTimePeriods.set_active(False)
|
|
|
|
self.lbrNetworkLocation.set_visible(True)
|
|
self.lbrCustomLocationLongitude.set_visible(False)
|
|
self.lbrCustomLocationLatitude.set_visible(False)
|
|
self.lbrTimePeriods.set_visible(False)
|
|
|
|
def onToggleButtonCustomLocationClicked(self, button):
|
|
if button.get_active():
|
|
self.tbNetworkLocation.set_active(False)
|
|
self.tbTimePeriods.set_active(False)
|
|
|
|
self.lbrNetworkLocation.set_visible(False)
|
|
self.lbrCustomLocationLongitude.set_visible(True)
|
|
self.lbrCustomLocationLatitude.set_visible(True)
|
|
self.lbrTimePeriods.set_visible(False)
|
|
|
|
def onToggleButtonTimePeriodsClicked(self, button):
|
|
if button.get_active():
|
|
self.tbNetworkLocation.set_active(False)
|
|
self.tbCustomLocation.set_active(False)
|
|
|
|
self.lbrNetworkLocation.set_visible(False)
|
|
self.lbrCustomLocationLongitude.set_visible(False)
|
|
self.lbrCustomLocationLatitude.set_visible(False)
|
|
self.lbrTimePeriods.set_visible(True)
|
|
|
|
|
|
# About
|
|
|
|
def onCinnamonSpicesWebsiteButtonClicked(self, button):
|
|
subprocess.Popen(["xdg-open", "https://cinnamon-spices.linuxmint.com/extensions/view/97"])
|
|
|
|
def onGithubWebsiteButtonClicked(self, button):
|
|
subprocess.Popen(["xdg-open", "https://github.com/TobiZog/cinnamon-dynamic-wallpaper"])
|
|
|
|
def onCreateIssueButtonClicked(self, button):
|
|
subprocess.Popen(["xdg-open", "https://github.com/TobiZog/cinnamon-dynamic-wallpaper/issues/new"])
|
|
|
|
|
|
def onApply(self, *args):
|
|
# todo: Store all values to settings
|
|
if self.tbImageSet.get_active():
|
|
write_to_preferences(PrefenceEnums.IMAGESOURCE, ImageSourceEnum.IMAGESET)
|
|
elif self.tbHeicFile.get_active():
|
|
write_to_preferences(PrefenceEnums.IMAGESOURCE, ImageSourceEnum.HEICFILE)
|
|
elif self.tbSourceFolder.get_active():
|
|
write_to_preferences(PrefenceEnums.IMAGESOURCE, ImageSourceEnum.SOURCEFOLDER)
|
|
|
|
write_to_preferences(PrefenceEnums.EXPANDOVERALLDISPLAY, self.swExpandOverAllDisplays.get_active())
|
|
write_to_preferences(PrefenceEnums.SHOWONLOCKSCREEN, self.swShowOnLockScreen.get_active())
|
|
|
|
|
|
write_to_preferences(PrefenceEnums.LOCATIONREFRESHINTERVALS, self.spbNetworkLocationRefreshTime.get_value())
|
|
write_to_preferences(PrefenceEnums.LATITUDE, self.etrLatitude.get_text())
|
|
write_to_preferences(PrefenceEnums.LONGITUDE, self.etrLongitude.get_text())
|
|
|
|
if self.tbNetworkLocation.get_active():
|
|
write_to_preferences(PrefenceEnums.PERIODSOURCE, PeriodSourceEnum.NETWORKLOCATION)
|
|
elif self.tbCustomLocation.get_active():
|
|
write_to_preferences(PrefenceEnums.PERIODSOURCE, PeriodSourceEnum.CUSTOMLOCATION)
|
|
elif self.tbTimePeriods.get_active():
|
|
write_to_preferences(PrefenceEnums.PERIODSOURCE, PeriodSourceEnum.CUSTOMTIMEPERIODS)
|
|
|
|
|
|
self.onDestroy()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
Preferences().show() |