-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGenericDialog.h
156 lines (133 loc) · 3.92 KB
/
GenericDialog.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
/**
* @file GenericDialog.h
* Declares the GenericDialog class.
* @ingroup generic-ui
*/
/*
* Copyright 2012 Joel Baxter
*
* This file is part of MeshTex.
*
* MeshTex is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* MeshTex is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with MeshTex. If not, see <http://www.gnu.org/licenses/>.
*/
#if !defined(INCLUDED_GENERICDIALOG_H)
#define INCLUDED_GENERICDIALOG_H
#include <string>
#include <gdk/gdk.h>
#include <glib.h>
#include "RefCounted.h"
#include "qerplugin.h"
/**
* Macro to get a handle on a widget inside the dialog by name.
*
* @param widgetName Name of the contained widget to find.
*/
#define NamedWidget(widgetName) \
(gtk_object_get_data(GTK_OBJECT(_dialog), widgetName))
/**
* Macro to enable/disable a widget inside the dialog, selected by name.
*
* @param widgetName Name of the contained widget to enable/disable.
*/
#define NamedToggleWidgetActive(widgetName) \
(GTK_TOGGLE_BUTTON(NamedWidget(widgetName))->active)
/**
* Macro to read text from a widget inside the dialog, selected by name.
*
* @param widgetName Name of the contained widget to read from.
*/
#define NamedEntryWidgetText(widgetName) \
(gtk_entry_get_text(GTK_ENTRY(NamedWidget(widgetName))))
/**
* Framework for a basic dialog window with OK/Apply/Cancel actions.
*
* A subclass should handle decorating/customizing the window, populating it
* with contained widgets, customizing the Apply logic, and registering the
* appropriate OK/Apply/Cancel buttons.
*
* @ingroup generic-ui
*/
class GenericDialog : public RefCounted
{
protected: // protected methods
/// @name Lifecycle
//@{
GenericDialog(const std::string& key);
virtual ~GenericDialog();
//@}
private: // private methods
/// @name Unimplemented to prevent copy/assignment
//@{
GenericDialog(const GenericDialog&);
const GenericDialog& operator=(const GenericDialog&);
//@}
public: // public methods
/// @name Interrogation
//@{
const std::string& GetKey() const;
//@}
/// @name Window management
//@{
virtual void SetWindow(GtkWidget *window);
virtual void Raise();
virtual void Show(const std::string& triggerCommand);
virtual void Hide();
//@}
/// @name Callback implementation
//@{
virtual bool Apply();
virtual gint CloseEventCallback(GtkWidget *widget,
GdkEvent* event,
gpointer callbackID);
virtual void FinalizeCallback(GtkWidget *widget,
gpointer callbackID);
//@}
/// @name Callback creation
//@{
void CreateWindowCloseCallback();
void CreateOkButtonCallback(GtkWidget *button);
void CreateApplyButtonCallback(GtkWidget *button);
void CreateCancelButtonCallback(GtkWidget *button);
//@}
protected: // protected member vars
/**
* This dialog widget.
*/
GtkWidget *_dialog;
/**
* Parent window.
*/
GtkWidget *_window;
/**
* Unique key for this dialog.
*/
const std::string _key;
/**
* Command token that most recently summoned this dialog.
*/
std::string _triggerCommand;
/**
* Callback ID associated with an OK button; 0 if none.
*/
gpointer _okCallbackID;
/**
* Callback ID associated with an Apply button; 0 if none.
*/
gpointer _applyCallbackID;
/**
* Callback ID associated with a Cancel button; 0 if none.
*/
gpointer _cancelCallbackID;
};
#endif // #if !defined(INCLUDED_GENERICDIALOG_H)