Repository navigation
Expand file tree
/
Copy pathInitGui.py
More file actions
136 lines (105 loc) · 4.64 KB
/
Copy pathInitGui.py
File metadata and controls
136 lines (105 loc) · 4.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
# -*- coding: utf-8 -*-
# FreeCAD führt diese Datei per exec(code, globals, locals) aus.
# __file__ landet in exec-locals und ist in Klassen-Methoden unsichtbar,
# weil Methoden nur exec-globals sehen. Lösung: _MODDIR über globals() in
# den globals-Dict schreiben, damit alle Methoden darauf zugreifen können.
import FreeCADGui as Gui
import FreeCAD
import os
import sys
# __file__ ist im FlatPak-FreeCAD nicht gesetzt → Fallback auf getUserAppDataDir.
# globals() schreibt _MODDIR in exec-globals, damit Klassen-Methoden es sehen.
# Statische Prüfer sehen diese Zuweisung nicht — jede Verwendung von _MODDIR
# trägt deshalb ein "# noqa: F821". Zur Laufzeit ist der Name gesetzt.
try:
globals()['_MODDIR'] = os.path.dirname(os.path.abspath(__file__))
except NameError:
globals()['_MODDIR'] = os.path.join(
FreeCAD.getUserAppDataDir(), "Mod", "FreeCAD_MultiAI_Panel"
)
# ── DESIGN DES NEUEN BUTTONS (KI-ASSISTENT) ───────────────────────────────────
class KiAssistentCommand:
def GetResources(self):
ki_path = os.path.join(os.path.expanduser("~"), "Schreibtisch",
"Macros", "KI Muli source Assistent")
assets = os.path.join(_MODDIR, "assets") # noqa: F821
icon = ""
for kandidat in (os.path.join(ki_path, "ki_icon.svg"),
os.path.join(assets, "Icon.svg")):
if os.path.exists(kandidat):
icon = kandidat
break
res = {
'MenuText': "KI Multi-Source Assistent",
'ToolTip' : "Öffnet den KI Multi-Source Assistenten an der Seite",
}
if icon:
res['Pixmap'] = icon
return res
def IsActive(self):
return True
def Activated(self):
ki_path = os.path.join(os.path.expanduser("~"), "Schreibtisch",
"Macros", "KI Muli source Assistent")
if ki_path not in sys.path:
sys.path.insert(0, ki_path)
sys.modules.pop("main", None)
sys.modules.pop("panel", None)
import main
import theme
try:
from qt_compat import QtWidgets, QtCore, QtGui
except ImportError:
from PySide6 import QtWidgets, QtCore, QtGui
mw = Gui.getMainWindow()
DOCK_TITLE = "KI Multi-Source Assistent"
for w in mw.findChildren(QtWidgets.QDockWidget):
if w.windowTitle() == DOCK_TITLE:
mw.removeDockWidget(w)
w.deleteLater()
dock = QtWidgets.QDockWidget(DOCK_TITLE, mw)
_f = QtGui.QFont("Ubuntu", 10)
try:
_f = main.emoji_font(_f)
except Exception:
pass
dock.setFont(_f)
dock.setStyleSheet(theme.STY_DOCK_FONT_RESET)
from editor.panel import FreeCAD_MultiAI_Panel
panel = FreeCAD_MultiAI_Panel()
dock.setWidget(panel)
mw.addDockWidget(QtCore.Qt.RightDockWidgetArea, dock)
dock.show()
Gui.addCommand('Cmd_KiAssistent', KiAssistentCommand())
# ── Pfade einrichten ───────────────────────────────────────────────────────────
def _pfade_einrichten():
if _MODDIR not in sys.path: # noqa: F821
sys.path.insert(0, _MODDIR) # noqa: F821
def _panel_starten():
try:
_pfade_einrichten()
import main as makro_main
makro_main.erstelle_leiste()
except Exception as e:
FreeCAD.Console.PrintError(f"[MultiAI] Panel-Start fehlgeschlagen: {e}\n")
# Klassen-Methoden sehen nur exec-globals → Funktionen dort eintragen
globals()['_pfade_einrichten'] = _pfade_einrichten
globals()['_panel_starten'] = _panel_starten
# ── DIE HAUPT-WORKBENCH ────────────────────────────────────────────────────────
class MeineMakroWorkbench(Gui.Workbench):
MenuText = "FreeCAD MultiAI Panel"
ToolTip = "FreeCAD MultiAI Panel – KI-gestützter Makro-Editor mit 19 KI-Anbietern"
def __init__(self):
super().__init__()
self.Icon = os.path.join(_MODDIR, "Icon.svg") # noqa: F821
def Initialize(self):
# Immer aufgerufen wenn Workbench zum ersten Mal aktiviert wird
_panel_starten()
self.appendToolbar("Eigene Werkzeuge", ["Cmd_KiAssistent"])
def Activated(self):
pass
def Deactivated(self):
pass
def GetClassName(self):
return "Gui::PythonWorkbench"
Gui.addWorkbench(MeineMakroWorkbench())