ui/qt/toolkit.h

Mon, 29 Sep 2025 21:14:46 +0200

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Mon, 29 Sep 2025 21:14:46 +0200
changeset 779
b84cbe57e0bd
parent 536
4a1c2eae4bcd
permissions
-rw-r--r--

change UiCellValue from struct to union and pass it as pointer to the onsave function, for better compatibility with other languages

54
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1 /*
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
3 *
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
4 * Copyright 2014 Olaf Wintermann. All rights reserved.
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
5 *
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
8 *
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
11 *
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
15 *
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
27 */
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
28
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
29 #ifndef TOOLKIT_H
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
30 #define TOOLKIT_H
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
31
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
32 #include "../ui/toolkit.h"
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
33 #include "../common/context.h"
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
34 #include "../common/object.h"
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
35
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
36 #include <QApplication>
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
37
526
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 66
diff changeset
38 class UiEventWrapper;
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 66
diff changeset
39
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 66
diff changeset
40 typedef void (*ui_prepare_event_func)(UiEvent *event, UiEventWrapper *wrapper);
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 66
diff changeset
41
54
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
42 class UiEventWrapper : public QObject {
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
43 Q_OBJECT
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
44
66
8d490d97aab8 added button and box container (Qt)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 54
diff changeset
45 UiObject *obj;
54
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
46 ui_callback callback;
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
47 void *userdata;
526
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 66
diff changeset
48
54
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
49 public:
526
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 66
diff changeset
50 UiVar *var;
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 66
diff changeset
51
536
4a1c2eae4bcd implement menu toggleitem (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 535
diff changeset
52 void *customdata1 = nullptr;
4a1c2eae4bcd implement menu toggleitem (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 535
diff changeset
53 void *customdata2 = nullptr;
526
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 66
diff changeset
54 int customvalue1 = 0;
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 66
diff changeset
55 int customvalue2 = 0;
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 66
diff changeset
56
536
4a1c2eae4bcd implement menu toggleitem (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 535
diff changeset
57 ui_prepare_event_func prepare_event = nullptr;
526
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 66
diff changeset
58
66
8d490d97aab8 added button and box container (Qt)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 54
diff changeset
59 UiEventWrapper(UiObject *obj, ui_callback f, void *userdata);
54
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
60
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
61 public slots:
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
62 void slot();
526
f6a6b0b08641 add togglebutton and checkbox (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 66
diff changeset
63 void destroy();
54
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
64 };
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
65
536
4a1c2eae4bcd implement menu toggleitem (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 535
diff changeset
66 class UiAction;
4a1c2eae4bcd implement menu toggleitem (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 535
diff changeset
67
4a1c2eae4bcd implement menu toggleitem (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 535
diff changeset
68 typedef void (*ui_prepare_action_event_func)(UiEvent *event, UiAction *action);
4a1c2eae4bcd implement menu toggleitem (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 535
diff changeset
69
535
ede57f5b6178 add QT implementation for menubars, sub-menus and simple menu items
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
70 class UiAction : public QAction {
ede57f5b6178 add QT implementation for menubars, sub-menus and simple menu items
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
71 Q_OBJECT
ede57f5b6178 add QT implementation for menubars, sub-menus and simple menu items
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
72
ede57f5b6178 add QT implementation for menubars, sub-menus and simple menu items
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
73 UiObject *obj;
ede57f5b6178 add QT implementation for menubars, sub-menus and simple menu items
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
74 ui_callback callback;
ede57f5b6178 add QT implementation for menubars, sub-menus and simple menu items
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
75 void *userdata;
ede57f5b6178 add QT implementation for menubars, sub-menus and simple menu items
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
76
ede57f5b6178 add QT implementation for menubars, sub-menus and simple menu items
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
77 public:
ede57f5b6178 add QT implementation for menubars, sub-menus and simple menu items
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
78 UiVar *var;
ede57f5b6178 add QT implementation for menubars, sub-menus and simple menu items
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
79
536
4a1c2eae4bcd implement menu toggleitem (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 535
diff changeset
80 ui_prepare_action_event_func prepare_event = nullptr;
4a1c2eae4bcd implement menu toggleitem (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 535
diff changeset
81 void *customdata1 = nullptr;
4a1c2eae4bcd implement menu toggleitem (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 535
diff changeset
82 void *customdata2 = nullptr;
4a1c2eae4bcd implement menu toggleitem (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 535
diff changeset
83 int customvalue1 = 0;
4a1c2eae4bcd implement menu toggleitem (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 535
diff changeset
84 int customvalue2 = 0;
4a1c2eae4bcd implement menu toggleitem (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 535
diff changeset
85
535
ede57f5b6178 add QT implementation for menubars, sub-menus and simple menu items
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
86 UiAction(UiObject *obj, QString &label, ui_callback f, void *userdata);
ede57f5b6178 add QT implementation for menubars, sub-menus and simple menu items
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
87 ~UiAction();
ede57f5b6178 add QT implementation for menubars, sub-menus and simple menu items
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
88
ede57f5b6178 add QT implementation for menubars, sub-menus and simple menu items
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
89 private slots:
ede57f5b6178 add QT implementation for menubars, sub-menus and simple menu items
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
90 void trigger();
ede57f5b6178 add QT implementation for menubars, sub-menus and simple menu items
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
91 };
ede57f5b6178 add QT implementation for menubars, sub-menus and simple menu items
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 526
diff changeset
92
536
4a1c2eae4bcd implement menu toggleitem (QT)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 535
diff changeset
93 void ui_action_enable(UiAction *action, int enable);
54
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
94
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
95 #endif /* TOOLKIT_H */
97bafeca1c7c added Qt window and menu implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
96

mercurial