add sidebar (Qt)

Fri, 08 Aug 2025 21:19:36 +0200

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Fri, 08 Aug 2025 21:19:36 +0200
changeset 688
a3a057c0a0b6
parent 684
3c9b430fb160
child 689
2a739c195296

add sidebar (Qt)

ui/qt/container.cpp file | annotate | diff | comparison | revisions
ui/qt/window.cpp file | annotate | diff | comparison | revisions
--- a/ui/qt/container.cpp	Wed Jul 30 19:51:39 2025 +0200
+++ b/ui/qt/container.cpp	Fri Aug 08 21:19:36 2025 +0200
@@ -35,6 +35,7 @@
 #include <QSpacerItem>
 #include <QStackedWidget>
 #include <QLabel>
+#include <QDockWidget>
 
 static void delete_container(UiContainerPrivate *ct) {
     delete ct;
@@ -228,7 +229,7 @@
     }
 }
 
-UIEXPORT UIWIDGET ui_grid_create(UiObject *obj, UiContainerArgs *args) {
+UIWIDGET ui_grid_create(UiObject *obj, UiContainerArgs *args) {
     UiContainerPrivate *ctn = (UiContainerPrivate*)ui_obj_container(obj);
     UI_APPLY_LAYOUT(ctn->layout, args);
     
@@ -251,6 +252,25 @@
 }
 
 
+/* ---------------------------- UiSidebar ---------------------------- */
+
+UIWIDGET ui_sidebar_create(UiObject *obj, UiSidebarArgs *args) {
+    QVariant v = obj->widget->property("ui_sidebar");
+    QDockWidget *dock = (QDockWidget*)v.value<void*>();
+    if(!dock) {
+        fprintf(stderr, "Error: window is not configured for sidebar\n");
+        return nullptr;
+    }
+    
+    QWidget *widget = new QWidget();
+    QBoxLayout *box = new QBoxLayout(QBoxLayout::TopToBottom);
+    widget->setLayout(box);
+    dock->setWidget(widget);
+    
+    ui_container_add(obj, new UiBoxContainer(box));
+    
+    return dock;
+}
 
 /* -------------------- Container Helper Functions -------------------- */
 
--- a/ui/qt/window.cpp	Wed Jul 30 19:51:39 2025 +0200
+++ b/ui/qt/window.cpp	Fri Aug 08 21:19:36 2025 +0200
@@ -38,8 +38,9 @@
 #include <QVBoxLayout>
 #include <QFileDialog>
 #include <QPushButton>
+#include <QDockWidget>
 
-static UiObject* create_window(const char *title, void *window_data, bool simple) {
+static UiObject* create_window(const char *title, void *window_data, bool simple, bool sidebar = false) {
     UiObject *obj = uic_object_new_toplevel();
     obj->window = window_data;
     obj->next = NULL;
@@ -61,19 +62,28 @@
     boxWidget->setLayout(box);
     window->setCentralWidget(boxWidget);
     ui_container_add(obj, new UiBoxContainer(box));
+    if(sidebar) {
+        QDockWidget *dock = new QDockWidget();
+        window->addDockWidget(Qt::LeftDockWidgetArea, dock);
+        window->setProperty("ui_sidebar", QVariant::fromValue((void*)dock));
+    }
     
     obj->widget = window;
     return obj;
 }
 
 UiObject* ui_window(const char *title, void *window_data) {
-    return create_window(title, window_data, FALSE);
+    return create_window(title, window_data, false);
 }
 
 UiObject* ui_simplewindow(char *title, void *window_data) {
-    return create_window(title, window_data, TRUE);
+    return create_window(title, window_data, true);
 }
 
+ UiObject *ui_sidebar_window(const char *title, void *window_data) {
+     return create_window(title, window_data, false, true);
+ }
+
 
 char* ui_openfiledialog(UiObject *obj) {
     QString fileName = QFileDialog::getOpenFileName(obj->widget);

mercurial