183 lines
5.5 KiB
Python
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()
|