Reduced usage to init/start related code
This commit is contained in:
parent
c7984ce5c1
commit
42e7084bae
516
InitGui.py
516
InitGui.py
|
@ -19,514 +19,14 @@
|
|||
|
||||
"""Selector toolbar for FreeCAD."""
|
||||
|
||||
# Create toolbar.
|
||||
pathTB = "User parameter:BaseApp/Workbench/Global/Toolbar/Selector"
|
||||
pTB = FreeCAD.ParamGet(pathTB)
|
||||
pTB.SetString("Name", "Selector")
|
||||
pTB.SetBool("Active", 1)
|
||||
p = FreeCAD.ParamGet("User parameter:BaseApp/SelectorToolbar")
|
||||
|
||||
|
||||
def selectorToolbar():
|
||||
"""Selector toolbar for FreeCAD."""
|
||||
if p.GetBool("Enabled", 1):
|
||||
# Create toolbar.
|
||||
pathTB = "User parameter:BaseApp/Workbench/Global/Toolbar/Selector"
|
||||
pTB = FreeCAD.ParamGet(pathTB)
|
||||
pTB.SetString("Name", "Selector")
|
||||
pTB.SetBool("Active", 1)
|
||||
|
||||
import FreeCAD as App
|
||||
import FreeCADGui as Gui
|
||||
from PySide import QtCore
|
||||
from PySide import QtGui
|
||||
|
||||
actions = {}
|
||||
mw = Gui.getMainWindow()
|
||||
group = QtGui.QActionGroup(mw)
|
||||
dList = "ArchWorkbench,PartDesignWorkbench"
|
||||
p = App.ParamGet("User parameter:BaseApp/SelectorToolbar")
|
||||
|
||||
aMenu = QtGui.QAction(mw)
|
||||
sMenu = QtGui.QMenu()
|
||||
aMenu.setMenu(sMenu)
|
||||
|
||||
def onSelector(a):
|
||||
"""Activate workbench on selection."""
|
||||
|
||||
Gui.doCommand('Gui.activateWorkbench("' + a.data() + '")')
|
||||
|
||||
def wbIcon(i):
|
||||
"""Create workbench icon."""
|
||||
|
||||
if str(i.find("XPM")) != "-1":
|
||||
|
||||
icon = []
|
||||
|
||||
for a in ((((i
|
||||
.split('{', 1)[1])
|
||||
.rsplit('}', 1)[0])
|
||||
.strip())
|
||||
.split("\n")):
|
||||
icon.append((a
|
||||
.split('"', 1)[1])
|
||||
.rsplit('"', 1)[0])
|
||||
|
||||
icon = QtGui.QIcon(QtGui.QPixmap(icon))
|
||||
else:
|
||||
icon = QtGui.QIcon(QtGui.QPixmap(i))
|
||||
|
||||
if icon.isNull():
|
||||
icon = QtGui.QIcon.fromTheme("freecad")
|
||||
else:
|
||||
pass
|
||||
|
||||
return icon
|
||||
|
||||
def wbActions():
|
||||
"""Create workbench actions."""
|
||||
|
||||
wbList = Gui.listWorkbenches()
|
||||
|
||||
for i in wbList:
|
||||
if i and i not in actions:
|
||||
action = QtGui.QAction(group)
|
||||
action.setCheckable(True)
|
||||
action.setText(wbList[i].MenuText)
|
||||
action.setData(i)
|
||||
|
||||
try:
|
||||
action.setIcon(wbIcon(wbList[i].Icon))
|
||||
except:
|
||||
action.setIcon(QtGui.QIcon.fromTheme("freecad"))
|
||||
|
||||
actions[i] = action
|
||||
else:
|
||||
pass
|
||||
|
||||
def onOrientationChanged():
|
||||
"""Style buttons based on the toolbar orientation."""
|
||||
|
||||
tb = mw.findChild(QtGui.QToolBar, "Selector")
|
||||
|
||||
if tb:
|
||||
if tb.orientation() == QtCore.Qt.Orientation.Horizontal:
|
||||
for b in tb.findChildren(QtGui.QToolButton):
|
||||
b.setProperty("toolbar_orientation", "horizontal")
|
||||
b.style().polish(b)
|
||||
else:
|
||||
for b in tb.findChildren(QtGui.QToolButton):
|
||||
b.setProperty("toolbar_orientation", "vertical")
|
||||
b.style().polish(b)
|
||||
else:
|
||||
pass
|
||||
|
||||
def onStyle():
|
||||
"""Manage the toolbutton style."""
|
||||
|
||||
tb = mw.findChild(QtGui.QToolBar, "Selector")
|
||||
|
||||
if tb:
|
||||
if p.GetString("Style") == "IconText":
|
||||
tb.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
|
||||
elif p.GetString("Style") == "Text":
|
||||
tb.setToolButtonStyle(QtCore.Qt.ToolButtonTextOnly)
|
||||
else:
|
||||
tb.setToolButtonStyle(QtCore.Qt.ToolButtonIconOnly)
|
||||
else:
|
||||
pass
|
||||
|
||||
def selectorMenu():
|
||||
"""Selector button with menu."""
|
||||
|
||||
sMenu.clear()
|
||||
active = Gui.activeWorkbench().__class__.__name__
|
||||
|
||||
keys = list(actions)
|
||||
keys.sort()
|
||||
|
||||
for key in keys:
|
||||
sMenu.addAction(actions[key])
|
||||
if key == active:
|
||||
sMenu.setDefaultAction(actions[key])
|
||||
aMenu.setText(actions[key].text())
|
||||
aMenu.setIcon(actions[key].icon())
|
||||
else:
|
||||
pass
|
||||
|
||||
def onWorkbenchActivated():
|
||||
"""Populate the selector toolbar."""
|
||||
|
||||
wbActions()
|
||||
selectorMenu()
|
||||
|
||||
menu = p.GetString("Menu")
|
||||
enabled = p.GetString("Enabled", dList)
|
||||
enabled = enabled.split(",")
|
||||
active = Gui.activeWorkbench().__class__.__name__
|
||||
|
||||
if active not in enabled:
|
||||
enabled.append(active)
|
||||
else:
|
||||
pass
|
||||
|
||||
tb = mw.findChild(QtGui.QToolBar, "Selector")
|
||||
|
||||
if tb:
|
||||
tb.clear()
|
||||
|
||||
if menu == "Front" or menu == "End" and active in enabled:
|
||||
enabled.remove(active)
|
||||
else:
|
||||
pass
|
||||
|
||||
if menu == "Front":
|
||||
tb.addAction(aMenu)
|
||||
w = tb.widgetForAction(aMenu)
|
||||
w.setPopupMode(QtGui.QToolButton
|
||||
.ToolButtonPopupMode
|
||||
.InstantPopup)
|
||||
else:
|
||||
pass
|
||||
|
||||
for i in enabled:
|
||||
for key in actions:
|
||||
if i == actions[key].data():
|
||||
a = actions[key]
|
||||
tb.addAction(a)
|
||||
if active == a.data():
|
||||
group.blockSignals(True)
|
||||
a.setChecked(True)
|
||||
group.blockSignals(False)
|
||||
else:
|
||||
pass
|
||||
else:
|
||||
pass
|
||||
|
||||
if menu == "End":
|
||||
tb.addAction(aMenu)
|
||||
w = tb.widgetForAction(aMenu)
|
||||
w.setPopupMode(QtGui.QToolButton
|
||||
.ToolButtonPopupMode
|
||||
.InstantPopup)
|
||||
else:
|
||||
pass
|
||||
else:
|
||||
pass
|
||||
|
||||
def prefDialog():
|
||||
"""Preferences dialog."""
|
||||
|
||||
dialog = QtGui.QDialog(mw)
|
||||
dialog.resize(800, 450)
|
||||
dialog.setWindowTitle("Selector toolbar")
|
||||
|
||||
layout = QtGui.QVBoxLayout()
|
||||
dialog.setLayout(layout)
|
||||
|
||||
selector = QtGui.QListWidget(dialog)
|
||||
selector.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
|
||||
|
||||
btnClose = QtGui.QPushButton("Close", dialog)
|
||||
btnClose.setToolTip("Close the preferences dialog")
|
||||
btnClose.setDefault(True)
|
||||
|
||||
btnUp = QtGui.QToolButton(dialog)
|
||||
btnUp.setToolTip("Move selected item up")
|
||||
btnUp.setArrowType(QtCore.Qt.UpArrow)
|
||||
|
||||
btnDown = QtGui.QToolButton(dialog)
|
||||
btnDown.setToolTip("Move selected item down")
|
||||
btnDown.setArrowType(QtCore.Qt.DownArrow)
|
||||
|
||||
l0 = QtGui.QVBoxLayout()
|
||||
g0 = QtGui.QGroupBox("Style:")
|
||||
g0.setLayout(l0)
|
||||
|
||||
r0 = QtGui.QRadioButton("Icon", g0)
|
||||
r0.setObjectName("Icon")
|
||||
r0.setToolTip("Toolbar button icon style")
|
||||
r1 = QtGui.QRadioButton("Text", g0)
|
||||
r1.setObjectName("Text")
|
||||
r1.setToolTip("Toolbar button text style")
|
||||
r2 = QtGui.QRadioButton("Icon and text", g0)
|
||||
r2.setObjectName("IconText")
|
||||
r2.setToolTip("Toolbar button icon and text style")
|
||||
|
||||
l0.addWidget(r0)
|
||||
l0.addWidget(r1)
|
||||
l0.addWidget(r2)
|
||||
|
||||
l1 = QtGui.QVBoxLayout()
|
||||
g1 = QtGui.QGroupBox("Menu:")
|
||||
g1.setLayout(l1)
|
||||
|
||||
r3 = QtGui.QRadioButton("Disabled", g1)
|
||||
r3.setObjectName("Off")
|
||||
r3.setToolTip("Disable selector menu")
|
||||
r4 = QtGui.QRadioButton("Front", g1)
|
||||
r4.setObjectName("Front")
|
||||
r4.setToolTip("Selector menu at front")
|
||||
r5 = QtGui.QRadioButton("End", g1)
|
||||
r5.setObjectName("End")
|
||||
r5.setToolTip("Selector menu at end")
|
||||
|
||||
l1.addWidget(r3)
|
||||
l1.addWidget(r4)
|
||||
l1.addWidget(r5)
|
||||
|
||||
l2 = QtGui.QHBoxLayout()
|
||||
l2.addWidget(btnUp)
|
||||
l2.addWidget(btnDown)
|
||||
l2.addStretch(1)
|
||||
l2.addWidget(btnClose)
|
||||
|
||||
l3 = QtGui.QHBoxLayout()
|
||||
l3.addStretch()
|
||||
|
||||
l4 = QtGui.QVBoxLayout()
|
||||
l4.addWidget(g0)
|
||||
l4.addWidget(g1)
|
||||
l4.addStretch()
|
||||
l4.insertLayout(0, l3)
|
||||
|
||||
l5 = QtGui.QHBoxLayout()
|
||||
l5.addWidget(selector)
|
||||
l5.insertLayout(1, l4)
|
||||
|
||||
layout.insertLayout(0, l5)
|
||||
layout.insertLayout(1, l2)
|
||||
|
||||
def onAccepted():
|
||||
"""Close dialog on button close."""
|
||||
|
||||
dialog.done(1)
|
||||
|
||||
def onFinished():
|
||||
"""Delete dialog on close."""
|
||||
|
||||
dialog.deleteLater()
|
||||
|
||||
def onItemChanged():
|
||||
"""Save enabled workbenches list."""
|
||||
|
||||
item = []
|
||||
|
||||
for index in range(selector.count()):
|
||||
if selector.item(index).checkState() == QtCore.Qt.Checked:
|
||||
item.append(selector.item(index).data(32))
|
||||
else:
|
||||
pass
|
||||
|
||||
p.SetString("Enabled", ",".join(item))
|
||||
|
||||
onWorkbenchActivated()
|
||||
|
||||
def onUp():
|
||||
"""Save workbench position list."""
|
||||
|
||||
currentIndex = selector.currentRow()
|
||||
|
||||
print currentIndex
|
||||
|
||||
if currentIndex != 0:
|
||||
currentItem = selector.takeItem(currentIndex)
|
||||
selector.insertItem(currentIndex - 1, currentItem)
|
||||
selector.setCurrentRow(currentIndex - 1)
|
||||
|
||||
position = []
|
||||
|
||||
for index in range(selector.count()):
|
||||
position.append(selector.item(index).data(32))
|
||||
|
||||
p.SetString("Position", ",".join(position))
|
||||
else:
|
||||
pass
|
||||
|
||||
onItemChanged()
|
||||
|
||||
def onDown():
|
||||
"""Save workbench position list."""
|
||||
|
||||
currentIndex = selector.currentRow()
|
||||
|
||||
if currentIndex != selector.count() - 1 and currentIndex != -1:
|
||||
currentItem = selector.takeItem(currentIndex)
|
||||
selector.insertItem(currentIndex + 1, currentItem)
|
||||
selector.setCurrentRow(currentIndex + 1)
|
||||
|
||||
position = []
|
||||
|
||||
for index in range(selector.count()):
|
||||
position.append(selector.item(index).data(32))
|
||||
|
||||
p.SetString("Position", ",".join(position))
|
||||
else:
|
||||
pass
|
||||
|
||||
onItemChanged()
|
||||
|
||||
def onG0(r):
|
||||
"""Set toolbar button style."""
|
||||
|
||||
if r:
|
||||
for i in g0.findChildren(QtGui.QRadioButton):
|
||||
if i.isChecked():
|
||||
p.SetString("Style", i.objectName())
|
||||
else:
|
||||
pass
|
||||
else:
|
||||
pass
|
||||
|
||||
onStyle()
|
||||
onWorkbenchActivated()
|
||||
|
||||
def onG1(r):
|
||||
"""Manage the selector menu."""
|
||||
|
||||
if r:
|
||||
for i in g1.findChildren(QtGui.QRadioButton):
|
||||
if i.isChecked():
|
||||
p.SetString("Menu", i.objectName())
|
||||
else:
|
||||
pass
|
||||
else:
|
||||
pass
|
||||
|
||||
onWorkbenchActivated()
|
||||
|
||||
enabled = p.GetString("Enabled", dList)
|
||||
enabled = enabled.split(",")
|
||||
|
||||
position = p.GetString("Position")
|
||||
|
||||
if not position:
|
||||
selector.setSortingEnabled(True)
|
||||
selector.sortItems(QtCore.Qt.AscendingOrder)
|
||||
else:
|
||||
pass
|
||||
|
||||
position = position.split(",")
|
||||
|
||||
for i in actions:
|
||||
if actions[i].data() not in position:
|
||||
position.append(actions[i].data())
|
||||
else:
|
||||
pass
|
||||
|
||||
for i in position:
|
||||
if i in actions:
|
||||
item = QtGui.QListWidgetItem(selector)
|
||||
item.setText(actions[i].text())
|
||||
item.setIcon(actions[i].icon())
|
||||
item.setData(32, actions[i].data())
|
||||
|
||||
if actions[i].data() in enabled:
|
||||
item.setCheckState(QtCore.Qt.CheckState(2))
|
||||
else:
|
||||
item.setCheckState(QtCore.Qt.CheckState(0))
|
||||
else:
|
||||
pass
|
||||
|
||||
selector.setSortingEnabled(False)
|
||||
|
||||
style = p.GetString("Style")
|
||||
|
||||
if style == "Text":
|
||||
r1.setChecked(True)
|
||||
elif style == "IconText":
|
||||
r2.setChecked(True)
|
||||
else:
|
||||
r0.setChecked(True)
|
||||
|
||||
menu = p.GetString("Menu")
|
||||
|
||||
if menu == "Front":
|
||||
r4.setChecked(True)
|
||||
elif menu == "End":
|
||||
r5.setChecked(True)
|
||||
else:
|
||||
r3.setChecked(True)
|
||||
|
||||
r0.toggled.connect(onG0)
|
||||
r1.toggled.connect(onG0)
|
||||
r2.toggled.connect(onG0)
|
||||
r3.toggled.connect(onG1)
|
||||
r4.toggled.connect(onG1)
|
||||
r5.toggled.connect(onG1)
|
||||
btnUp.clicked.connect(onUp)
|
||||
btnDown.clicked.connect(onDown)
|
||||
selector.itemChanged.connect(onItemChanged)
|
||||
dialog.finished.connect(onFinished)
|
||||
btnClose.clicked.connect(onAccepted)
|
||||
|
||||
return dialog
|
||||
|
||||
def onPreferences():
|
||||
"""Open the preferences dialog."""
|
||||
|
||||
dialog = prefDialog()
|
||||
dialog.show()
|
||||
|
||||
def onClose():
|
||||
"""Remove the toolbar on FreeCAD close."""
|
||||
|
||||
path = "User parameter:BaseApp/Workbench/Global/Toolbar"
|
||||
p = App.ParamGet(path)
|
||||
p.RemGroup("Selector")
|
||||
|
||||
def accessoriesMenu():
|
||||
"""Add selector toolbar preferences to accessories menu."""
|
||||
|
||||
mw = Gui.getMainWindow()
|
||||
pref = QtGui.QAction(mw)
|
||||
pref.setText("Selector toolbar")
|
||||
pref.setObjectName("SelectorToolbar")
|
||||
pref.triggered.connect(onPreferences)
|
||||
|
||||
try:
|
||||
import AccessoriesMenu
|
||||
AccessoriesMenu.addItem("SelectorToolbar")
|
||||
except ImportError:
|
||||
a = mw.findChild(QtGui.QAction, "AccessoriesMenu")
|
||||
|
||||
if a:
|
||||
a.menu().addAction(pref)
|
||||
else:
|
||||
actionAccessories = QtGui.QAction(mw)
|
||||
actionAccessories.setObjectName("AccessoriesMenu")
|
||||
actionAccessories.setIconText("Accessories")
|
||||
menu = QtGui.QMenu(mw)
|
||||
actionAccessories.setMenu(menu)
|
||||
menu.addAction(pref)
|
||||
|
||||
def addMenu():
|
||||
"""Add accessories menu to the menubar."""
|
||||
|
||||
mb = mw.menuBar()
|
||||
|
||||
toolsMenu = mb.findChild(QtGui.QMenu, "&Tools")
|
||||
|
||||
if toolsMenu:
|
||||
toolsMenu.addAction(actionAccessories)
|
||||
else:
|
||||
pass
|
||||
|
||||
addMenu()
|
||||
mw.workbenchActivated.connect(addMenu)
|
||||
|
||||
onStyle()
|
||||
accessoriesMenu()
|
||||
onWorkbenchActivated()
|
||||
|
||||
tb = mw.findChild(QtGui.QToolBar, "Selector")
|
||||
|
||||
if tb:
|
||||
tb.orientationChanged.connect(onOrientationChanged)
|
||||
else:
|
||||
pass
|
||||
|
||||
group.triggered.connect(onSelector)
|
||||
mw.mainWindowClosed.connect(onClose)
|
||||
mw.workbenchActivated.connect(onWorkbenchActivated)
|
||||
|
||||
# Selector toolbar start
|
||||
import SelectorToolbarPath
|
||||
|
||||
t = SelectorToolbarPath.timer()
|
||||
t.setSingleShot(True)
|
||||
t.timeout.connect(selectorToolbar)
|
||||
t.start()
|
||||
import SelectorToolbar_Gui
|
||||
|
|
Loading…
Reference in New Issue
Block a user