Files
Modus/modules/launcher/launcher.py
T
2025-02-17 21:27:48 +05:45

170 lines
4.9 KiB
Python

from fabric.widgets.centerbox import CenterBox
from fabric.widgets.stack import Stack
from fabric.widgets.box import Box
from fabric.widgets.wayland import WaylandWindow as Window
from gi.repository import Gtk
from modules.launcher.components import (
AppLauncher,
BluetoothConnections,
Cliphist,
Emoji,
PowerMenu,
Sh,
TodoManager,
WallpaperSelector,
WifiManager,
)
class Launcher(Window):
def __init__(self, **kwargs):
super().__init__(
layer="top",
anchor="center",
visible=False,
all_visible=False,
**kwargs,
)
self.launcher = AppLauncher(launcher=self)
self.wallpapers = WallpaperSelector(launcher=self)
self.power = PowerMenu(launcher=self)
self.emoji = Emoji(launcher=self)
self.cliphist = Cliphist(launcher=self)
self.todo = TodoManager()
self.bluetooth = BluetoothConnections()
self.sh = Sh(launcher=self)
self.wifi = WifiManager()
self.stack = Stack(
name="launcher-content",
v_expand=True,
h_expand=True,
transition_type="crossfade",
transition_duration=100,
children=[
self.launcher,
self.wallpapers,
self.power,
self.emoji,
self.cliphist,
self.todo,
self.bluetooth,
self.sh,
self.wifi,
],
)
self.launcher_box = CenterBox(
name="launcher",
orientation="v",
start_children=self.stack,
)
self.add(self.launcher_box)
self.show_all()
self.hide()
self.wallpapers.viewport.hide()
self.add_keybinding("Escape", lambda *_: self.close())
def close(self):
self.set_keyboard_mode("none")
self.hide()
for widget in [
self.launcher,
self.wallpapers,
self.power,
self.emoji,
self.cliphist,
self.todo,
self.bluetooth,
self.sh,
self.wifi,
]:
if widget == self.wallpapers:
self.wallpapers.viewport.hide()
self.wallpapers.viewport.set_property("name", None)
if hasattr(widget, "viewport") and widget.viewport:
widget.viewport.hide()
for style in [
"launcher",
"wallpapers",
"power",
"emoji",
"cliphist",
"todo",
"bluetooth",
"sh",
"wifi",
]:
self.stack.remove_style_class(style)
return True
def open(self, widget):
self.set_keyboard_mode("exclusive")
self.show()
widgets = {
"launcher": self.launcher,
"wallpapers": self.wallpapers,
"power": self.power,
"emoji": self.emoji,
"cliphist": self.cliphist,
"todo": self.todo,
"bluetooth": self.bluetooth,
"sh": self.sh,
"wifi": self.wifi,
}
for w in widgets.values():
w.hide()
for style in widgets.keys():
self.stack.remove_style_class(style)
if widget in widgets:
self.stack.get_style_context().add_class(widget)
self.stack.set_visible_child(widgets[widget])
widgets[widget].show()
# if widget != "launcher":
# self.launcher.hide()
if widget != "wallpapers":
self.wallpapers.viewport.hide()
self.wallpapers.viewport.set_property("name", None)
if widget == "launcher":
self.launcher.open_launcher()
self.launcher.search_entry.set_text("")
self.launcher.search_entry.grab_focus()
elif widget == "wallpapers":
self.wallpapers.search_entry.set_text("")
self.wallpapers.search_entry.grab_focus()
self.wallpapers.viewport.show()
self.wallpapers.viewport.set_property("name", "wallpaper-icons")
elif widget == "emoji":
self.emoji.open_launcher()
self.emoji.search_entry.set_text("")
self.emoji.search_entry.grab_focus()
elif widget == "cliphist":
self.cliphist.open_launcher()
self.cliphist.search_entry.set_text("")
self.cliphist.search_entry.grab_focus()
elif widget == "todo":
self.todo.open_launcher()
self.todo.todo_entry.set_text("")
self.todo.todo_entry.grab_focus()
elif widget == "sh":
self.sh.open_launcher()
self.sh.search_entry.set_text("")
self.sh.search_entry.grab_focus()