UTop/src/core/core_widget.py

183 lines
5.5 KiB
Python

# Python imports
from datetime import datetime
# Gtk imports
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Wnck', '3.0')
from gi.repository import Gtk
from gi.repository import Wnck
from gi.repository import GObject
from xdg.DesktopEntry import DesktopEntry
# Application imports
from .desktop_parsing.app_finder import find_apps
class CoreWidget(Gtk.Box):
def __init__(self):
super(CoreWidget, self).__init__()
self.builder = settings.get_builder()
self.time_label = self.builder.get_object("timeLabel")
self.orientation = 1 # 0 = horizontal, 1 = vertical
self._setup_styling()
self._setup_signals()
self._load_widgets()
self.show_all()
self.menu_objects = {
"Accessories": [],
"Multimedia": [],
"Graphics": [],
"Game": [],
"Office": [],
"Development": [],
"Internet": [],
"Settings": [],
"System": [],
"Wine": [],
"Other": []
}
apps = find_apps()
self.fill_menu_objects(apps)
def fill_menu_objects(self, apps=[]):
for app in apps:
fPath = app.get_filename()
xdgObj = DesktopEntry( fPath )
title = xdgObj.getName()
groups = xdgObj.getCategories()
comment = xdgObj.getComment()
icon = xdgObj.getIcon()
mainExec = xdgObj.getExec()
tryExec = xdgObj.getTryExec()
group = ""
if "Accessories" in groups or "Utility" in groups:
group = "Accessories"
elif "Multimedia" in groups or "Video" in groups or "Audio" in groups:
group = "Multimedia"
elif "Development" in groups:
group = "Development"
elif "Game" in groups:
group = "Game"
elif "Internet" in groups or "Network" in groups:
group = "Internet"
elif "Graphics" in groups:
group = "Graphics"
elif "Office" in groups:
group = "Office"
elif "System" in groups:
group = "System"
elif "Settings" in groups:
group = "Settings"
elif "Wine" in groups:
group = "Wine"
else:
group = "Other"
self.menu_objects[group].append( {"title": title, "groups": groups,
"comment": comment, "exec": mainExec,
"tryExec": tryExec, "fileName": fPath.split("/")[-1],
"filePath": fPath, "icon": icon})
def get_group(self, group):
return self.menu_objects[group]
def _setup_styling(self):
self.set_orientation(1)
self.set_vexpand(True)
self.set_hexpand(True)
def _setup_signals(self):
...
def _load_widgets(self):
widget_grid_container = self.builder.get_object("widget_grid_container")
timeLabelEveBox = self.builder.get_object("timeLabelEveBox")
timeLabelEveBox.connect("button_release_event", self._toggle_cal_popover)
widget_grid_container.set_vexpand(True)
widget_grid_container.set_hexpand(True)
self.add( widget_grid_container )
self.set_pager_widget()
self.set_task_list_widget()
# Must be after pager and task list inits
self.display_clock()
self._start_clock()
def set_pager_widget(self):
pager = Wnck.Pager.new()
if self.orientation == 0:
self.builder.get_object('taskBarWorkspacesHor').add(pager)
else:
self.builder.get_object('taskBarWorkspacesVer').add(pager)
pager.set_hexpand(True)
pager.show()
def set_task_list_widget(self):
tasklist = Wnck.Tasklist.new()
tasklist.set_scroll_enabled(False)
tasklist.set_button_relief(2) # 0 = normal relief, 2 = no relief
tasklist.set_grouping(1) # 0 = mever group, 1 auto group, 2 = always group
if self.orientation == 0:
self.builder.get_object('taskBarButtonsHor').add(tasklist)
else:
self.builder.get_object('taskBarButtonsVer').add(tasklist)
tasklist.set_vexpand(True)
tasklist.set_include_all_workspaces(False)
tasklist.set_orientation(self.orientation)
tasklist.show()
# Displays Timer
def display_clock(self):
now = datetime.now()
hms = now.strftime("%I:%M %p")
mdy = now.strftime("%m/%d/%Y")
timeStr = hms + "\n" + mdy
self.time_label.set_label(timeStr)
return True
def _start_clock(self):
GObject.timeout_add(59000, self.display_clock)
def _close_popup(self, widget, data=None):
widget.hide()
def _toggle_cal_popover(self, widget, eve):
calendarPopup = self.builder.get_object('calendarPopup')
if (calendarPopup.get_visible() == False):
calendarWid = self.builder.get_object('calendarWid')
now = datetime.now()
timeStr = now.strftime("%m/%d/%Y")
parts = timeStr.split("/")
month = int(parts[0]) - 1
day = int(parts[1])
year = int(parts[2])
calendarWid.select_day(day)
calendarWid.select_month(month, year)
calendarPopup.popup()
else:
calendarPopup.popdown()