Keep user config out of the install dir; frameless window with working resize
Three related fixes after the notes feature landed: Config location: build_and_deploy.ps1 wipes its target directory before every deploy, and app_dir() had just been pointed at that same directory -- so every rebuild silently deleted the user's config and the app rebuilt it empty from the board, losing all notes. Config now lives in %APPDATA%\VersaPadViewer (roaming), separate from the install dir, and the build script additionally rescues any versapad_config*.json it finds in the target so legacy installs survive an upgrade. Window chrome: hide the title bar (plain Tk overrideredirect, no ctypes window manipulation) and move the mode checkboxes up next to the title, which reclaims two full rows of header height that the taller note cards had eaten. Removing the title bar also removes the resize borders, so add a grip -- anchored with place() to the window corner rather than packed after the content, which would push it out of view exactly when the window is too small and the grip is needed. Default geometry grown to fit the taller cards, and empty encoder note lines are no longer rendered at all. Note truncation: the note area was a fixed 34px and cut longer notes mid-word; it now takes the remaining card height.
This commit is contained in:
parent
4b5da69174
commit
91bac353b4
4 changed files with 165 additions and 56 deletions
|
|
@ -11,17 +11,32 @@ import sys
|
|||
|
||||
NUM_PROFILES = 3
|
||||
|
||||
APP_NAME = "VersaPadViewer"
|
||||
|
||||
|
||||
def app_dir():
|
||||
"""Verzeichnis fuer die eigene Config-Datei (versapad_config_all.json,
|
||||
siehe versapad_combined.DEFAULT_PATH): bei der gebauten .exe (--onedir)
|
||||
das Installationsverzeichnis neben der .exe, sonst der Ordner dieses
|
||||
Moduls (Projektordner beim Start aus dem Quellcode). Kein hartkodierter
|
||||
Pfad mehr -- so laesst sich das Tool auf jede Maschine kopieren/
|
||||
installieren, ohne Pfade von Hand anzupassen."""
|
||||
if getattr(sys, "frozen", False):
|
||||
return os.path.dirname(sys.executable)
|
||||
return os.path.dirname(os.path.abspath(__file__))
|
||||
siehe versapad_combined.DEFAULT_PATH). Programmatisch aus der Umgebung
|
||||
abgeleitet, kein hartkodierter Pfad -- laeuft so auf jeder Maschine und
|
||||
unter jedem Benutzer.
|
||||
|
||||
Bewusst NICHT vom Startweg abhaengig (kein `sys.frozen`-Zweig): die
|
||||
gebaute .exe, der Start aus dem Quellcode und der MCP-Server muessen
|
||||
dieselbe Datei sehen, sonst laufen zwei Configs auseinander und
|
||||
Aenderungen aus dem einen Weg sind im anderen unsichtbar (genau das ist
|
||||
am 2026-08-15 passiert -- .exe zeigte ein anderes Profil 0 als der
|
||||
MCP-Server).
|
||||
|
||||
Bewusst auch NICHT das Installationsverzeichnis (%LOCALAPPDATA%\\
|
||||
VersaPadViewer, wo die .exe liegt): `build_and_deploy.ps1` raeumt das
|
||||
Zielverzeichnis vor jedem Deploy komplett ab (`Remove-Item -Recurse`) --
|
||||
laege die Config dort, wuerde JEDER Rebuild die Nutzerdaten mitloeschen
|
||||
(am 2026-08-15 genau so passiert, alle Notizen weg). Programm- und
|
||||
Datenverzeichnis bleiben deshalb getrennt: Roaming-AppData fuer die
|
||||
Config."""
|
||||
base = (os.environ.get("APPDATA") or os.environ.get("LOCALAPPDATA")
|
||||
or os.path.join(os.path.expanduser("~"), ".local", "share"))
|
||||
return os.path.join(base, APP_NAME)
|
||||
|
||||
|
||||
# CONFIG_PATHS zeigt bewusst weiterhin auf den OneDrive-Desktop -- das sind
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue