|
Download FOR_SMLFLG.md from smlflg/shared-gui: direct link, hf CLI and curl.
- Browser
- Download file 3.66 kB
-
https://huggingface.co/smlflg/shared-gui/resolve/main/FOR_SMLFLG.md
- Command line
-
hf download hf://smlflg/shared-gui/FOR_SMLFLG.md
-
curl -L -o FOR_SMLFLG.md https://huggingface.co/smlflg/shared-gui/resolve/main/FOR_SMLFLG.md
3.66 kB
shared-gui
Was ist das?
Gemeinsame GTK3-Basisklasse fuer alle Desktop-Apps in diesem Setup. Stellt BaseApp bereit — ein GTK3-Fenster mit Catppuccin-Theme, COSMIC Dark/Light Auto-Detection, HeaderBar, StatusBar und Refresh-Timer-Management. Wird von ClaudeCodePanel und Sidecar genutzt.
Architektur & Tech-Stack
gui_base.py (204 LOC)
|
BaseApp(Gtk.Window)
|-- __init__(title, width, height, icon_name)
| HeaderBar + content_box + StatusBar
|
|-- set_subtitle(text)
|-- add_header_widget(widget, end=True)
|-- set_status(text, css_class) # "status-saved" | "status-error"
|-- start_refresh(interval_s, cb) # GLib.timeout_add_seconds
|-- stop_all_refresh()
|-- add_css(css_string) # Palette-aware extra CSS
|-- run() # show_all() + Gtk.main()
|
|-- _apply_full_css() # intern: Theme-CSS + Base-CSS laden
|-- _base_css(palette) # intern: Card, Badge, Button CSS
Abhaengigkeit: ~/Projekte/ClaudeCodePanel/theme.py
build_css(palette), get_palette(), setup_theme_watcher()
Stack: Python 3, GTK3 (gi.repository), GLib, Catppuccin-Palette aus ClaudeCodePanel/theme.py
CSS-Klassen die BaseApp mitbringt:
.base-card— abgerundete Karte mit Hover.base-toolbar— Toolbar-Hintergrund.base-badge,.base-badge-ok,.base-badge-warn,.base-badge-error.base-accent-btn— Haupt-Akzent-Button
Starten / Nutzen
Nicht direkt ausfuehrbar. Als Library importieren:
# In einer neuen GTK3-App:
import sys
sys.path.insert(0, str(Path.home() / "Projekte" / "shared-gui"))
from gui_base import BaseApp
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
class MeineApp(BaseApp):
def __init__(self):
super().__init__("Meine App", 800, 600)
label = Gtk.Label(label="Hallo")
self.content_box.pack_start(label, True, True, 0)
MeineApp().run()
Was funktioniert
- Fenster-Setup mit HeaderBar (Titel, Untertitel, Close-Button)
- StatusBar unten mit Text + CSS-Klassen (ok/error)
- Catppuccin-Theme wird automatisch geladen (hell/dunkel je nach COSMIC-Setting)
- Theme-Watcher: GUI aktualisiert sich live bei Theme-Wechsel
- Refresh-Timer (GLib.timeout_add_seconds) mit sauberem Cleanup
- Erweiterbare CSS via
add_css()— eigene Klassen hinzufuegen ohne Theme zu ueberschreiben add_header_widget()fuer Buttons/Labels in der HeaderBar (links oder rechts)
Was fehlt
- Kein Packaging/
__init__.py— direkter Import via sys.path Hack - Keine Tests
- Kein Fallback wenn ClaudeCodePanel/theme.py nicht existiert (hard dependency)
- Kein
icon_nameDefault (None = kein App-Icon)
Entscheidungen & Lessons Learned
- Abhaengigkeit zu ClaudeCodePanel/theme.py: ClaudeCodePanel war zuerst da und hat das Theme-System. shared-gui baut darauf auf statt es zu duplizieren. Kopplung ist bewusst — beide liegen lokal.
- GTK3 statt GTK4: COSMIC Desktop nutzt GTK3. GTK4-Migration ist unnoetig und wuerde Kompatiblitaet brechen.
- Kein eigenes Python-Package: Nur eine Datei, kein Overhead durch setup.py/pyproject.toml. Fuer 1-2 Consumer reicht sys.path.insert().
- Refresh via GLib: GLib.timeout_add_seconds laeuft im GTK-Main-Loop — kein Threading noetig, kein Race Condition.
Next Steps
- Fallback implementieren falls ClaudeCodePanel/theme.py fehlt (eigene Mini-Palette)
__init__.pyhinzufuegen damitfrom shared_gui import BaseAppsauber funktioniert- Bei mehr als 2 Consumern: als lokales pip-Package installierbar machen