Sun, 19 Oct 2025 21:20:08 +0200
update toolkit
/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2014 Olaf Wintermann. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #include <cx/mempool.h> #include "../common/context.h" #include "../common/object.h" #include "window.h" #include "menu.h" #include "toolbar.h" #include "container.h" #include <QVBoxLayout> #include <QFileDialog> #include <QPushButton> #include <QDockWidget> #include <QMessageBox> 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; QMainWindow *window = new QMainWindow(); window->setWindowTitle(title); obj->widget = window; if(!simple) { ui_add_menus(obj, window); QToolBar *toolbar = ui_create_toolbar(obj); if(toolbar) { window->addToolBar(Qt::TopToolBarArea, toolbar); } } QBoxLayout *box = new QVBoxLayout(); QWidget *boxWidget = new QWidget(); boxWidget->setLayout(box); window->setCentralWidget(boxWidget); ui_obj_add_container(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); } UiObject* ui_simplewindow(char *title, void *window_data) { 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); if(fileName.size() > 0) { QByteArray array = fileName.toLocal8Bit(); const char *cstr = array.constData(); return strdup(cstr); } else { return NULL; } } char* ui_savefiledialog(UiObject *obj) { QString fileName = QFileDialog::getSaveFileName(obj->widget); if(fileName.size() > 0) { QByteArray array = fileName.toLocal8Bit(); const char *cstr = array.constData(); return strdup(cstr); } else { return NULL; } }