freecad-cam/Mod/Tux/NavigationIndicatorGui.py
2026-02-01 01:59:24 +01:00

834 lines
23 KiB
Python

# Navigation indicator for FreeCAD
# Copyright (C) 2016, 2017, 2018 triplus @ FreeCAD
#
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
"""Navigation indicator for FreeCAD."""
import Tux_rc
import FreeCAD as App
import FreeCADGui as Gui
from PySide import QtGui
from PySide import QtCore
mw = Gui.getMainWindow()
statusBar = mw.statusBar()
p = App.ParamGet("User parameter:Tux/NavigationIndicator")
pView = App.ParamGet("User parameter:BaseApp/Preferences/View")
pMWin = App.ParamGet("User parameter:BaseApp/Preferences/MainWindow")
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def translate(context, text):
"convenience function for Qt 4 translator"
return QtGui.QApplication.translate(context, text, None, _encoding)
except AttributeError:
def translate(context, text):
"convenience function for Qt 5 translator"
return QtGui.QApplication.translate(context, text, None)
class IndicatorButton(QtGui.QPushButton):
"""Detect language change events."""
def __init__(self, parent=None):
super(IndicatorButton, self).__init__()
def changeEvent(self, event):
"""Change events."""
if event.type() == QtCore.QEvent.LanguageChange:
retranslateUi()
onTooltip()
self.adjustSize()
return super(IndicatorButton, self).changeEvent(event)
def onChange(self, paramGrp, param):
if param == "NavigationStyle":
setCurrent()
def mousePressEvent(self, event):
RePopulateIcons()
return super(IndicatorButton, self).mousePressEvent(event)
def RePopulateIcons():
curStyleSheet = pMWin.GetString("StyleSheet")
if "dark" in curStyleSheet.lower():
StyleSheetType = "light"
else:
StyleSheetType = "dark"
a1.setIcon(QtGui.QIcon(":/icons/NavigationBlender_" + StyleSheetType + ".svg"))
a2.setIcon(QtGui.QIcon(":/icons/NavigationCAD_" + StyleSheetType + ".svg"))
a3.setIcon(QtGui.QIcon(":/icons/NavigationGesture_" + StyleSheetType + ".svg"))
a4.setIcon(QtGui.QIcon(":/icons/NavigationMayaGesture_" + StyleSheetType + ".svg"))
a5.setIcon(QtGui.QIcon(":/icons/NavigationOpenCascade_" + StyleSheetType + ".svg"))
a6.setIcon(QtGui.QIcon(":/icons/NavigationOpenInventor_" + StyleSheetType + ".svg"))
a7.setIcon(QtGui.QIcon(":/icons/NavigationOpenSCAD_" + StyleSheetType + ".svg"))
a8.setIcon(QtGui.QIcon(":/icons/NavigationRevit_" + StyleSheetType + ".svg"))
a9.setIcon(QtGui.QIcon(":/icons/NavigationTinkerCAD_" + StyleSheetType + ".svg"))
a10.setIcon(QtGui.QIcon(":/icons/NavigationTouchpad_" + StyleSheetType + ".svg"))
def retranslateUi():
"""Retranslate navigation indicator on language change"""
text01 = translate("NavigationIndicator", "Select")
text02 = translate("NavigationIndicator", "Zoom")
text03 = translate("NavigationIndicator", "Rotate")
text04 = translate("NavigationIndicator", "Pan")
text05 = translate("NavigationIndicator", "Tilt")
text06 = translate("NavigationIndicator", "Navigation style")
text07 = translate("NavigationIndicator", "Page Up or Page Down key.")
text08 = translate("NavigationIndicator", "Rotation focus")
text09 = translate("NavigationIndicator", "Middle mouse button or H key.")
text10 = translate("NavigationIndicator", "Middle mouse button.")
global t0
t0 = translate("NavigationIndicator", "Navigation style not recognized.")
global t1
t1 = (
"<p align='center'><b>Blender</b> "
+ text06
+ """</p>
<table>
<tr>
<th><small>"""
+ text01
+ """</small></th>
<th><small>"""
+ text02
+ """</small></th>
<th><small>"""
+ text03
+ """</small></th>
<th><small>"""
+ text04
+ """</small></th>
<th><small>"""
+ text04
+ """</small></th>
</tr>
<tr>
<td align='center'><img src=':/icons/Navigation_Mouse_Left.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_Scroll.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_Middle.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_ShiftMiddle.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_LeftRight.svg'></td>
</tr>
</table>
<b>"""
+ text08
+ ":</b> "
+ text10
+ "</small></p>"
)
global t2
t2 = (
"<p align='center'><b>CAD</b> "
+ text06
+ """</p>
<table>
<tr>
<th><small>"""
+ text01
+ """</small></th>
<th><small>"""
+ text02
+ """</small></th>
<th><small>"""
+ text03
+ """</small></th>
<th><small>"""
+ text03
+ """</small></th>
<th><small>"""
+ text04
+ """</small></th>
</tr>
<tr>
<td align='center'><img src=':/icons/Navigation_Mouse_Left.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_Scroll.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_MiddleLeft.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_MiddleRight.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_Middle.svg'></td>
</tr>
</table>
<b>"""
+ text08
+ ":</b> "
+ text10
+ "</small></p>"
)
global t3
t3 = (
"<p align='center'><b>Gesture</b> "
+ text06
+ """</p>
<table>
<tr>
<th><small>"""
+ text01
+ """</small></th>
<th><small>"""
+ text02
+ """</small></th>
<th><small>"""
+ text03
+ """</small></th>
<th><small>"""
+ text03
+ """</small></th>
<th><small>"""
+ text04
+ """</small></th>
<th><small>"""
+ text05
+ """</small></th>
</tr>
<tr>
<td align='center'><img src=':/icons/Navigation_Mouse_Left.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_Scroll.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_LeftMove.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_AltLeft.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_Right.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_LeftRight.svg'></td>
</tr>
<tr>
<th><small>"""
+ text01
+ """</small></th>
<th><small>"""
+ text02
+ """</small></th>
<th><small>"""
+ text03
+ """</small></th>
<th><small>"""
+ text04
+ """</small></th>
<th><small>"""
+ text04
+ """</small></th>
<th><small>"""
+ text05
+ """</small></th>
</tr>
<tr>
<td align='center'><img src=':/icons/Navigation_Gesture_SelectTouch.svg'></td>
<td align='center'><img src=':/icons/Navigation_Gesture_ZoomTouch.svg'></td>
<td align='center'><img src=':/icons/Navigation_Gesture_RotateTouch.svg'></td>
<td align='center'><img src=':/icons/Navigation_Gesture_PanTouch.svg'></td>
<td align='center'><img src=':/icons/Navigation_Gesture_PanTouchAlt.svg'></td>
<td align='center'><img src=':/icons/Navigation_Gesture_TiltTouch.svg'></td>
</tr>
</table>
<p><small><b>"""
+ text02
+ ":</b> "
+ text07
+ """<br>
<b>"""
+ text08
+ ":</b> "
+ text09
+ "</small></p>"
)
global t4
t4 = (
"<p align='center'><b>MayaGesture</b> "
+ text06
+ """</p>
<table>
<tr>
<th><small>"""
+ text01
+ """</small></th>
<th><small>"""
+ text02
+ """</small></th>
<th><small>"""
+ text02
+ """</small></th>
<th><small>"""
+ text03
+ """</small></th>
<th><small>"""
+ text04
+ """</small></th>
<th><small>"""
+ text05
+ """</small></th>
</tr>
<tr>
<td align='center'><img src=':/icons/Navigation_Mouse_Left.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_Scroll.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_AltRight.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_AltLeft.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_AltMiddle.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_AltLeftRight.svg'></td>
</tr>
<tr>
<th><small>"""
+ text01
+ """</small></th>
<th><small>"""
+ text02
+ """</small></th>
<th><small>"""
+ text03
+ """</small></th>
<th><small>"""
+ text04
+ """</small></th>
<th><small>"""
+ text04
+ """</small></th>
<th><small>"""
+ text05
+ """</small></th>
</tr>
<tr>
<td align='center'><img src=':/icons/Navigation_Gesture_SelectTouch.svg'></td>
<td align='center'><img src=':/icons/Navigation_Gesture_ZoomTouch.svg'></td>
<td align='center'><img src=':/icons/Navigation_Gesture_RotateTouch.svg'></td>
<td align='center'><img src=':/icons/Navigation_Gesture_PanTouch.svg'></td>
<td align='center'><img src=':/icons/Navigation_Gesture_PanTouchAlt.svg'></td>
<td align='center'><img src=':/icons/Navigation_Gesture_TiltTouch.svg'></td>
</tr>
</table>
<p><small><b>"""
+ text02
+ ":</b> "
+ text07
+ """<br>
<b>"""
+ text08
+ ":</b> "
+ text09
+ "</small></p>"
)
global t5
t5 = (
"<p align='center'><b>OpenCascade</b> "
+ text06
+ """</p>
<table>
<tr>
<th><small>"""
+ text01
+ """</small></th>
<th><small>"""
+ text02
+ """</small></th>
<th><small>"""
+ text02
+ """</small></th>
<th><small>"""
+ text03
+ """</small></th>
<th><small>"""
+ text04
+ """</small></th>
<th><small>"""
+ text04
+ """</small></th>
</tr>
<tr>
<td align='center'><img src=':/icons/Navigation_Mouse_Left.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_Scroll.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_CtrlLeft.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_CtrlRight.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_CtrlMiddle.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_Middle.svg'></td>
</tr>
</table>"""
)
global t6
t6 = (
"<p align='center'><b>OpenInventor</b> "
+ text06
+ """</p>
<table>
<tr>
<th><small>"""
+ text01
+ """</small></th>
<th><small>"""
+ text02
+ """</small></th>
<th><small>"""
+ text02
+ """</small></th>
<th><small>"""
+ text03
+ """</small></th>
<th><small>"""
+ text04
+ """</small></th>
</tr>
<tr>
<td align='center'><img src=':/icons/Navigation_Mouse_ShiftLeft.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_Scroll.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_MiddleLeft.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_Left.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_Middle.svg'></td>
</tr>
</table>
<b>"""
+ text08
+ ":</b> "
+ text10
+ "</small></p>"
)
global t7
t7 = (
"<p align='center'><b>OpenSCAD</b> "
+ text06
+ """</p>
<table>
<tr>
<th><small>"""
+ text01
+ """</small></th>
<th><small>"""
+ text02
+ """</small></th>
<th><small>"""
+ text02
+ """</small></th>
<th><small>"""
+ text03
+ """</small></th>
<th><small>"""
+ text03
+ """</small></th>
<th><small>"""
+ text04
+ """</small></th>
</tr>
<tr>
<td align='center'><img src=':/icons/Navigation_Mouse_Left.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_Scroll.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_Middle.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_Left.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_MiddleRight.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_Right.svg'></td>
</tr>
</table>"""
)
global t8
t8 = (
"<p align='center'><b>Revit</b> "
+ text06
+ """</p>
<table>
<tr>
<th><small>"""
+ text01
+ """</small></th>
<th><small>"""
+ text02
+ """</small></th>
<th><small>"""
+ text03
+ """</small></th>
<th><small>"""
+ text04
+ """</small></th>
<th><small>"""
+ text04
+ """</small></th>
</tr>
<tr>
<td align='center'><img src=':/icons/Navigation_Mouse_Left.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_Scroll.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_ShiftMiddle.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_Middle.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_LeftRight.svg'></td>
</tr>
</table>
<b>"""
+ text08
+ ":</b> "
+ text10
+ "</small></p>"
)
global t9
t9 = (
"<p align='center'><b>TinkerCAD</b> "
+ text06
+ """</p>
<table>
<tr>
<th><small>"""
+ text01
+ """</small></th>
<th><small>"""
+ text02
+ """</small></th>
<th><small>"""
+ text03
+ """</small></th>
<th><small>"""
+ text04
+ """</small></th>
</tr>
<tr>
<td align='center'><img src=':/icons/Navigation_Mouse_Left.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_Scroll.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_Right.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_Middle.svg'></td>
</tr>
</table>"""
)
global t10
t10 = (
"<p align='center'><b>Touchpad</b> "
+ text06
+ """</p>
<table>
<tr>
<th><small>"""
+ text01
+ """</small></th>
<th><small>"""
+ text02
+ """</small></th>
<th><small>"""
+ text02
+ """</small></th>
<th><small>"""
+ text03
+ """</small></th>
<th><small>"""
+ text03
+ """</small></th>
<th><small>"""
+ text04
+ """</small></th>
</tr>
<tr>
<td align='center'><img src=':/icons/Navigation_Mouse_Left.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_Scroll.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_ShiftCtrlMove.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_AltMove.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_ShiftLeft.svg'></td>
<td align='center'><img src=':/icons/Navigation_Mouse_ShiftMove.svg'></td>
</tr>
<tr>
<th><small>"""
+ text01
+ """</small></th>
<th><small>"""
+ text02
+ """</small></th>
<th><small>"""
+ text03
+ """</small></th>
<th><small>"""
+ text03
+ """</small></th>
<th><small>"""
+ text04
+ """</small></th>
</tr>
<tr>
<td align='center'><img src=':/icons/Navigation_Touchpad_Left.svg'></td>
<td align='center'><img src=':/icons/Navigation_Touchpad_ShiftCtrlTouch.svg'></td>
<td align='center'><img src=':/icons/Navigation_Touchpad_AltTouch.svg'></td>
<td align='center'><img src=':/icons/Navigation_Touchpad_ShiftLeftTouch.svg'></td>
<td align='center'><img src=':/icons/Navigation_Touchpad_ShiftTouch.svg'></td>
</tr>
</table>
<p><small><b>"""
+ text02
+ ":</b> "
+ text07
+ "</p>"
)
menuSettings.setTitle(translate("NavigationIndicator", "Settings"))
menuOrbit.setTitle(translate("NavigationIndicator", "Orbit style"))
aCompact.setText(translate("NavigationIndicator", "Compact"))
aTooltip.setText(translate("NavigationIndicator", "Tooltip"))
aTurntable.setText(translate("NavigationIndicator", "Turntable"))
aFreeTurntable.setText(translate("NavigationIndicator", "Free Turntable"))
aTrackball.setText(translate("NavigationIndicator", "Trackball"))
a0.setText(translate("NavigationIndicator", "Undefined"))
indicator = IndicatorButton(statusBar)
indicator.setFlat(True)
indicator.adjustSize()
indicator.setObjectName("NavigationIndicator")
menu = QtGui.QMenu(indicator)
indicator.setMenu(menu)
menuSettings = QtGui.QMenu(menu)
menuOrbit = QtGui.QMenu(menu)
aCompact = QtGui.QAction(menuSettings)
aCompact.setCheckable(True)
aTooltip = QtGui.QAction(menuSettings)
aTooltip.setCheckable(True)
gOrbit = QtGui.QActionGroup(menuSettings)
aTurntable = QtGui.QAction(gOrbit)
aTurntable.setObjectName("NavigationIndicator_Turntable")
aTurntable.setCheckable(True)
aTrackball = QtGui.QAction(gOrbit)
aTrackball.setObjectName("NavigationIndicator_Trackball")
aTrackball.setCheckable(True)
aFreeTurntable = QtGui.QAction(gOrbit)
aFreeTurntable.setObjectName("NavigationIndicator_FreeTurntable")
aFreeTurntable.setCheckable(True)
menuOrbit.addAction(aTurntable)
menuOrbit.addAction(aTrackball)
menuOrbit.addAction(aFreeTurntable)
menuSettings.addMenu(menuOrbit)
menuSettings.addSeparator()
menuSettings.addAction(aCompact)
menuSettings.addAction(aTooltip)
gStyle = QtGui.QActionGroup(menu)
a0 = QtGui.QAction(gStyle)
a0.setIcon(QtGui.QIcon(":/icons/NavigationUndefined.svg"))
a0.setData("Undefined ")
a0.setObjectName("Indicator_NavigationUndefined")
a1 = QtGui.QAction(gStyle)
a1.setText("Blender ")
a1.setData("Gui::BlenderNavigationStyle")
a1.setObjectName("Indicator_NavigationBlender")
a2 = QtGui.QAction(gStyle)
a2.setText("CAD ")
a2.setData("Gui::CADNavigationStyle")
a2.setObjectName("Indicator_NavigationCAD")
a3 = QtGui.QAction(gStyle)
a3.setText("Gesture ")
a3.setData("Gui::GestureNavigationStyle")
a3.setObjectName("Indicator_NavigationGesture")
a4 = QtGui.QAction(gStyle)
a4.setText("MayaGesture ")
a4.setData("Gui::MayaGestureNavigationStyle")
a4.setObjectName("Indicator_NavigationMayaGesture")
a5 = QtGui.QAction(gStyle)
a5.setText("OpenCascade ")
a5.setData("Gui::OpenCascadeNavigationStyle")
a5.setObjectName("Indicator_NavigationOpenCascade")
a6 = QtGui.QAction(gStyle)
a6.setText("OpenInventor ")
a6.setData("Gui::InventorNavigationStyle")
a6.setObjectName("Indicator_NavigationOpenInventor")
a7 = QtGui.QAction(gStyle)
a7.setText("OpenSCAD ")
a7.setData("Gui::OpenSCADNavigationStyle")
a7.setObjectName("Indicator_NavigationOpenSCAD")
a8 = QtGui.QAction(gStyle)
a8.setText("Revit ")
a8.setData("Gui::RevitNavigationStyle")
a8.setObjectName("Indicator_NavigationRevit")
a9 = QtGui.QAction(gStyle)
a9.setText("TinkerCAD ")
a9.setData("Gui::TinkerCADNavigationStyle")
a9.setObjectName("Indicator_NavigationTinkerCAD")
a10 = QtGui.QAction(gStyle)
a10.setText("Touchpad ")
a10.setData("Gui::TouchpadNavigationStyle")
a10.setObjectName("Indicator_NavigationTouchpad")
RePopulateIcons()
menu.addMenu(menuSettings)
menu.addSeparator()
menu.addAction(a0)
menu.addAction(a1)
menu.addAction(a2)
menu.addAction(a3)
menu.addAction(a4)
menu.addAction(a5)
menu.addAction(a6)
menu.addAction(a7)
menu.addAction(a8)
menu.addAction(a9)
menu.addAction(a10)
pView.Attach(indicator)
def onCompact():
"""Enable or disable compact mode."""
if aCompact.isChecked():
p.SetBool("Compact", 1)
else:
p.SetBool("Compact", 0)
setCurrent()
def setCompact(action):
"""Set compact mode."""
if p.GetBool("Compact", 0):
indicator.setText("")
else:
indicator.setText(action.text())
indicator.adjustSize()
def onTooltip():
"""Enable or disable verbose tooltips."""
if aTooltip.isChecked():
a0.setToolTip(t0)
a1.setToolTip(t1)
a2.setToolTip(t2)
a3.setToolTip(t3)
a4.setToolTip(t4)
a5.setToolTip(t5)
a6.setToolTip(t6)
a7.setToolTip(t7)
a8.setToolTip(t8)
a9.setToolTip(t9)
a10.setToolTip(t10)
p.SetBool("Tooltip", 1)
else:
for i in gStyle.actions():
i.setToolTip("")
p.SetBool("Tooltip", 0)
setCurrent()
def onOrbit():
"""Use turntable or trackball orbit style."""
if aTurntable.isChecked():
pView.SetInt("OrbitStyle", 0)
elif aTrackball.isChecked():
pView.SetInt("OrbitStyle", 1)
elif aFreeTurntable.isChecked():
pView.SetInt("OrbitStyle", 2)
def onOrbitShow():
"""Set turntable or trackball orbit style."""
OrbitStyle = pView.GetInt("OrbitStyle", 1)
gOrbit.blockSignals(True)
if OrbitStyle == 0:
aTurntable.setChecked(True)
elif OrbitStyle == 1:
aTrackball.setChecked(True)
elif OrbitStyle == 2:
aFreeTurntable.setChecked(True)
gOrbit.blockSignals(False)
def onMenu(action):
"""Set navigation style on selection."""
pView.SetString("NavigationStyle", action.data())
def setCurrent():
"""Set navigation style on start and on interval."""
gStyle.blockSignals(True)
s = False
actions = gStyle.actions()
current = pView.GetString("NavigationStyle")
if current and current != "Undefined":
for i in actions:
if i.data() == current:
s = True
setCompact(i)
menu.setDefaultAction(i)
indicator.setIcon(i.icon())
indicator.setToolTip(i.toolTip())
else:
pass
else:
s = True
pView.SetString("NavigationStyle", a2.data())
if s:
a0.setVisible(False)
else:
a0.setVisible(True)
a0.setEnabled(True)
setCompact(a0)
menu.setDefaultAction(a0)
indicator.setIcon(a0.icon())
indicator.setToolTip(a0.toolTip())
gStyle.blockSignals(False)
if p.GetBool("Compact", 0):
aCompact.setChecked(True)
if p.GetBool("Tooltip", 1):
aTooltip.setChecked(True)
retranslateUi()
onCompact()
onTooltip()
label = statusBar.children()[2]
statusBar.removeWidget(label)
statusBar.addPermanentWidget(indicator)
statusBar.addPermanentWidget(label)
label.show()
setCurrent()
gStyle.triggered.connect(onMenu)
gOrbit.triggered.connect(onOrbit)
aCompact.triggered.connect(onCompact)
aTooltip.triggered.connect(onTooltip)
menuOrbit.aboutToShow.connect(onOrbitShow)
menu.aboutToHide.connect(indicator.clearFocus)