shared-gui / FOR_SMLFLG.md
smlflg's picture
Initial public upload from Projekte/shared-gui
74f57c5 verified
|
Raw History Blame Contribute Delete
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:
```python
# 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_name` Default (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
1. Fallback implementieren falls ClaudeCodePanel/theme.py fehlt (eigene Mini-Palette)
2. `__init__.py` hinzufuegen damit `from shared_gui import BaseApp` sauber funktioniert
3. Bei mehr als 2 Consumern: als lokales pip-Package installierbar machen