Skip to content

Commit 81afe2d

Browse files
authored
Update Python Bindings again (#262)
* Update Python bindings * Add X11Extras to setup.py for Linux builds * Update Python Bindings
1 parent 5fad433 commit 81afe2d

File tree

4 files changed

+70
-9
lines changed

4 files changed

+70
-9
lines changed

demo/demo.py

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ def append_feature_string_to_window_title(dock_widget: QtAds.CDockWidget):
6565
def svg_icon(filename: str):
6666
'''Helper function to create an SVG icon'''
6767
# This is a workaround, because because in item views SVG icons are not
68-
# properly scaled an look blurry or pixelate
68+
# properly scaled and look blurry or pixelate
6969
icon = QIcon(filename)
7070
icon.addPixmap(icon.pixmap(92))
7171
return icon
@@ -104,6 +104,8 @@ def __init__(self, parent=None):
104104
self.perspective_list_action = None
105105
self.perspective_combo_box = None
106106
self.dock_manager = None
107+
self.window_title_test_dock_widget = None
108+
self.last_docked_editor = None
107109

108110
self.setupUi(self)
109111
self.create_actions()
@@ -184,6 +186,7 @@ def create_content(self):
184186
# special_dock_area.setAllowedAreas(QtAds.LeftDockWidgetArea | QtAds.RightDockWidgetArea) # just for testing
185187

186188
dock_widget = self.create_long_text_label_dock_widget()
189+
self.window_title_test_dock_widget = dock_widget
187190
dock_widget.setFeature(QtAds.CDockWidget.DockWidgetFocusable, False)
188191
self.dock_manager.addDockWidget(QtAds.LeftDockWidgetArea, dock_widget)
189192
file_system_widget = self.create_file_system_tree_dock_widget()
@@ -354,7 +357,6 @@ def on_view_visibility_changed(self, visible: bool):
354357
def create_editor(self):
355358
sender = self.sender()
356359
floating = sender.property("Floating")
357-
print("Floating:", floating)
358360
dock_widget = self.create_editor_widget()
359361
dock_widget.setFeature(QtAds.CDockWidget.DockWidgetDeleteOnClose, True)
360362
dock_widget.closeRequested.connect(self.on_editor_close_requested)
@@ -363,7 +365,13 @@ def create_editor(self):
363365
floating_widget = self.dock_manager.addDockWidgetFloating(dock_widget)
364366
floating_widget.move(QPoint(20, 20))
365367
else:
366-
self.dock_manager.addDockWidget(QtAds.TopDockWidgetArea, dock_widget)
368+
editor_area = self.last_docked_editor.dockAreaWidget() if self.last_docked_editor is not None else None
369+
if editor_area is not None:
370+
self.dock_manager.setConfigFlag(QtAds.CDockManager.EqualSplitOnInsertion, True)
371+
self.dock_manager.addDockWidget(QtAds.RightDockWidgetArea, dock_widget, editor_area)
372+
else:
373+
self.dock_manager.addDockWidget(QtAds.TopDockWidgetArea, dock_widget)
374+
self.last_docked_editor = dock_widget
367375

368376
def on_editor_close_requested(self):
369377
dock_widget = self.sender()
@@ -382,6 +390,16 @@ def show_status_dialog(self):
382390
dialog = CStatusDialog(self.dock_manager)
383391
dialog.exec_()
384392

393+
394+
def toggle_dock_widget_window_title(self):
395+
title = self.window_title_test_dock_widget.windowTitle()
396+
i = title.find(" (Test) ")
397+
if i == -1:
398+
title += " (Test) "
399+
else:
400+
title = title[i]
401+
self.window_title_test_dock_widget.setWindowTitle(title)
402+
385403
def save_state(self):
386404
'''
387405
Saves the dock manager state and the main window geometry

examples/centralwidget/centralWidget.py

Lines changed: 46 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,28 @@
22
import sys
33

44
from PyQt5 import uic
5-
from PyQt5.QtCore import Qt, QTimer, QDir
6-
from PyQt5.QtGui import QCloseEvent
5+
from PyQt5.QtCore import Qt, QTimer, QDir, QSignalBlocker
6+
from PyQt5.QtGui import QCloseEvent, QIcon
77
from PyQt5.QtWidgets import (QApplication, QLabel, QCalendarWidget, QFrame, QTreeView,
8-
QTableWidget, QFileSystemModel)
8+
QTableWidget, QFileSystemModel, QPlainTextEdit, QToolBar,
9+
QWidgetAction, QComboBox, QAction, QSizePolicy, QInputDialog)
910

1011
from PyQtAds import QtAds
1112

1213
UI_FILE = os.path.join(os.path.dirname(__file__), 'mainwindow.ui')
1314
MainWindowUI, MainWindowBase = uic.loadUiType(UI_FILE)
1415

16+
import demo_rc # pyrcc5 demo\demo.qrc -o examples\centralWidget\demo_rc.py
17+
18+
19+
def svg_icon(filename: str):
20+
'''Helper function to create an SVG icon'''
21+
# This is a workaround, because because in item views SVG icons are not
22+
# properly scaled and look blurry or pixelate
23+
icon = QIcon(filename)
24+
icon.addPixmap(icon.pixmap(92))
25+
return icon
26+
1527

1628
class MainWindow(MainWindowUI, MainWindowBase):
1729

@@ -22,12 +34,14 @@ def __init__(self, parent=None):
2234

2335
QtAds.CDockManager.setConfigFlag(QtAds.CDockManager.OpaqueSplitterResize, True)
2436
QtAds.CDockManager.setConfigFlag(QtAds.CDockManager.XmlCompressionEnabled, False)
37+
QtAds.CDockManager.setConfigFlag(QtAds.CDockManager.FocusHighlighting, True)
2538
self.dock_manager = QtAds.CDockManager(self)
2639

2740
# Set central widget
28-
calendar = QCalendarWidget()
41+
text_edit = QPlainTextEdit()
42+
text_edit.setPlaceholderText("This is the central editor. Enter your text here.")
2943
central_dock_widget = QtAds.CDockWidget("CentralWidget")
30-
central_dock_widget.setWidget(calendar)
44+
central_dock_widget.setWidget(text_edit)
3145
central_dock_area = self.dock_manager.setCentralWidget(central_dock_widget)
3246
central_dock_area.setAllowedAreas(QtAds.DockWidgetArea.OuterDockAreas)
3347

@@ -65,7 +79,33 @@ def __init__(self, parent=None):
6579
properties_dock_widget.setMinimumSize(200,150)
6680
self.dock_manager.addDockWidget(QtAds.DockWidgetArea.RightDockWidgetArea, properties_dock_widget, central_dock_area)
6781
self.menuView.addAction(properties_dock_widget.toggleViewAction())
68-
82+
83+
self.create_perspective_ui()
84+
85+
def create_perspective_ui(self):
86+
save_perspective_action = QAction("Create Perspective", self)
87+
save_perspective_action.setIcon(svg_icon(":/adsdemo/images/picture_in_picture.svg"))
88+
save_perspective_action.triggered.connect(self.save_perspective)
89+
perspective_list_action = QWidgetAction(self)
90+
self.perspective_combobox = QComboBox(self)
91+
self.perspective_combobox.setSizeAdjustPolicy(QComboBox.AdjustToContents)
92+
self.perspective_combobox.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred)
93+
self.perspective_combobox.activated[str].connect(self.dock_manager.openPerspective)
94+
perspective_list_action.setDefaultWidget(self.perspective_combobox)
95+
self.toolBar.addSeparator()
96+
self.toolBar.addAction(perspective_list_action)
97+
self.toolBar.addAction(save_perspective_action)
98+
99+
def save_perspective(self):
100+
perspective_name, ok = QInputDialog.getText(self, "Save Perspective", "Enter Unique name:")
101+
if not ok or not perspective_name:
102+
return
103+
104+
self.dock_manager.addPerspective(perspective_name)
105+
blocker = QSignalBlocker(self.perspective_combobox)
106+
self.perspective_combobox.clear()
107+
self.perspective_combobox.addItems(self.dock_manager.perspectiveNames())
108+
self.perspective_combobox.setCurrentText(perspective_name)
69109

70110
if __name__ == '__main__':
71111
app = QApplication(sys.argv)

sip/DockFocusController.sip

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public:
2020

2121
void notifyWidgetOrAreaRelocation(QWidget* RelocatedWidget);
2222
void notifyFloatingWidgetDrop(ads::CFloatingDockContainer* FloatingWidget);
23+
ads::CDockWidget* focusedDockWidget() const;
2324

2425
public slots:
2526
void setDockWidgetFocused(ads::CDockWidget* focusedNow);

sip/DockManager.sip

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ protected:
135135
ads::CDockOverlay* dockAreaOverlay() const;
136136
void notifyWidgetOrAreaRelocation(QWidget* RelocatedWidget);
137137
void notifyFloatingWidgetDrop(ads::CFloatingDockContainer* FloatingWidget);
138+
ads::CDockWidget* focusedDockWidget() const;
138139

139140
virtual void showEvent(QShowEvent *event);
140141

@@ -230,6 +231,7 @@ signals:
230231
void perspectiveOpened(const QString& PerspectiveName);
231232
void floatingWidgetCreated(ads::CFloatingDockContainer*);
232233
void dockAreaCreated(ads::CDockAreaWidget*);
234+
void dockWidgetAdded(ads::CDockWidget* DockWidget);
233235
void dockWidgetAboutToBeRemoved(ads::CDockWidget*);
234236
void dockWidgetRemoved(ads::CDockWidget*);
235237
void focusedDockWidgetChanged(ads::CDockWidget*, ads::CDockWidget*);

0 commit comments

Comments
 (0)