--- a/ui/qt/window.cpp Sun Jul 20 22:04:39 2025 +0200 +++ b/ui/qt/window.cpp Sun Aug 24 15:24:16 2025 +0200 @@ -38,8 +38,10 @@ #include <QVBoxLayout> #include <QFileDialog> #include <QPushButton> +#include <QDockWidget> +#include <QMessageBox> -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 +63,70 @@ 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); } +void ui_dialog_create(UiObject *parent, UiDialogArgs *args) { + if(args->input || args->password) { + // TODO: QInputDialog + } else { + QMessageBox msgBox; + if(args->title) { + msgBox.setWindowTitle(args->title); + } + if(args->content) { + msgBox.setText(args->content); + } + QPushButton *btn1; + QPushButton *btn2; + if(args->button1_label) { + btn1 = msgBox.addButton(args->button1_label, QMessageBox::ActionRole); + } + if(args->button2_label) { + btn2 = msgBox.addButton(args->button2_label, QMessageBox::ActionRole); + } + if(args->closebutton_label) { + msgBox.addButton(args->closebutton_label, QMessageBox::DestructiveRole); + } + + msgBox.exec(); + + UiEvent evt; + evt.obj = parent; + evt.document = evt.obj->ctx->document; + evt.window = evt.obj->window; + evt.eventdata = NULL; + evt.eventdatatype = 0; + evt.intval = 0; + if(msgBox.clickedButton() == btn1) { + evt.intval = 1; + } else if(msgBox.clickedButton() == btn2) { + evt.intval = 2; + } + if(args->result) { + args->result(&evt, args->resultdata); + } + } +} char* ui_openfiledialog(UiObject *obj) { QString fileName = QFileDialog::getOpenFileName(obj->widget);