1 /* -*- mode: C++; tab-width: 4; c-basic-offset: 4; -*- */
2
3 /* AbiSource Application Framework
4 * Copyright (C) 2002 AbiSource, Inc.
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 * 02110-1301 USA.
20 */
21
22 #include "xap_Frame.h"
23 #include "xap_UnixApp.h"
24 #include "xap_UnixDlg_HTMLOptions.h"
25
static_constructor(XAP_DialogFactory * pDF,XAP_Dialog_Id id)26 XAP_Dialog * XAP_UnixDialog_HTMLOptions::static_constructor (XAP_DialogFactory * pDF,
27 XAP_Dialog_Id id)
28 {
29 return new XAP_UnixDialog_HTMLOptions(pDF,id);
30 }
31
XAP_UnixDialog_HTMLOptions(XAP_DialogFactory * pDlgFactory,XAP_Dialog_Id id)32 XAP_UnixDialog_HTMLOptions::XAP_UnixDialog_HTMLOptions (XAP_DialogFactory * pDlgFactory,
33 XAP_Dialog_Id id)
34 : XAP_Dialog_HTMLOptions(pDlgFactory,id),
35 m_windowMain(NULL),
36 m_wIs4(NULL),
37 m_wAbiWebDoc(NULL),
38 m_wDeclareXML(NULL),
39 m_wAllowAWML(NULL),
40 m_wEmbedCSS(NULL),
41 m_wEmbedImages(NULL),
42 m_wMathMLRenderPNG(NULL),
43 m_wSplitDocument(NULL)
44 {
45 //
46 }
47
~XAP_UnixDialog_HTMLOptions()48 XAP_UnixDialog_HTMLOptions::~XAP_UnixDialog_HTMLOptions ()
49 {
50 //
51 }
52
53 typedef enum
54 {
55 BUTTON_OK,
56 BUTTON_SAVE_SETTINGS,
57 BUTTON_RESTORE_SETTINGS,
58 BUTTON_CANCEL
59 } ResponseId;
60
runModal(XAP_Frame * pFrame)61 void XAP_UnixDialog_HTMLOptions::runModal (XAP_Frame * pFrame)
62 {
63 if (pFrame == NULL) return;
64
65 /* Build the window's widgets and arrange them
66 */
67 GtkWidget * mainWindow = _constructWindow ();
68
69 if (mainWindow == NULL) return;
70
71 bool stop = false;
72 while (!stop)
73 switch (abiRunModalDialog (GTK_DIALOG (mainWindow), pFrame, this, BUTTON_OK, false))
74 {
75 case BUTTON_OK:
76 event_OK ();
77 stop = true;
78 break;
79 case BUTTON_SAVE_SETTINGS:
80 event_SaveSettings ();
81 break;
82 case BUTTON_RESTORE_SETTINGS:
83 event_RestoreSettings ();
84 break;
85 case BUTTON_CANCEL:
86 default:
87 event_Cancel ();
88 stop = true;
89 break;
90 }
91 abiDestroyWidget (mainWindow);
92 }
93
toggle_Is4()94 void XAP_UnixDialog_HTMLOptions::toggle_Is4 ()
95 {
96 bool on = (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (m_wIs4)) == TRUE);
97 set_HTML4 (on);
98 refreshStates ();
99 }
100
toggle_AbiWebDoc()101 void XAP_UnixDialog_HTMLOptions::toggle_AbiWebDoc ()
102 {
103 bool on = (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (m_wAbiWebDoc)) == TRUE);
104 set_PHTML (on);
105 refreshStates ();
106 }
107
toggle_DeclareXML()108 void XAP_UnixDialog_HTMLOptions::toggle_DeclareXML ()
109 {
110 bool on = (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (m_wDeclareXML)) == TRUE);
111 set_Declare_XML (on);
112 refreshStates ();
113 }
114
toggle_AllowAWML()115 void XAP_UnixDialog_HTMLOptions::toggle_AllowAWML ()
116 {
117 bool on = (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (m_wAllowAWML)) == TRUE);
118 set_Allow_AWML (on);
119 refreshStates ();
120 }
121
toggle_EmbedCSS()122 void XAP_UnixDialog_HTMLOptions::toggle_EmbedCSS ()
123 {
124 bool on = (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (m_wEmbedCSS)) == TRUE);
125 set_Embed_CSS (on);
126 refreshStates ();
127 }
128
toggle_EmbedImages()129 void XAP_UnixDialog_HTMLOptions::toggle_EmbedImages ()
130 {
131 bool on = (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (m_wEmbedImages)) == TRUE);
132 set_Embed_Images (on);
133 refreshStates ();
134 }
135
136
toggle_MathMLRenderPNG()137 void XAP_UnixDialog_HTMLOptions::toggle_MathMLRenderPNG ()
138 {
139 bool on = (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (m_wMathMLRenderPNG)) == TRUE);
140 set_MathML_Render_PNG (on);
141 refreshStates ();
142 }
143
toggle_SplitDocument()144 void XAP_UnixDialog_HTMLOptions::toggle_SplitDocument ()
145 {
146 bool on = (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (m_wSplitDocument)) == TRUE);
147 set_Split_Document (on);
148 refreshStates ();
149 }
refreshStates()150 void XAP_UnixDialog_HTMLOptions::refreshStates ()
151 {
152 gboolean on;
153
154 on = get_HTML4 () ? TRUE : FALSE;
155 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (m_wIs4), on);
156
157 on = get_PHTML () ? TRUE : FALSE;
158 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (m_wAbiWebDoc), on);
159
160 on = get_Declare_XML () ? TRUE : FALSE;
161 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (m_wDeclareXML), on);
162
163 on = can_set_Declare_XML () ? TRUE : FALSE;
164 gtk_widget_set_sensitive (m_wDeclareXML, on);
165
166 on = get_Allow_AWML () ? TRUE : FALSE;
167 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (m_wAllowAWML), on);
168
169 on = can_set_Allow_AWML () ? TRUE : FALSE;
170 gtk_widget_set_sensitive (m_wAllowAWML, on);
171
172 on = get_Embed_CSS () ? TRUE : FALSE;
173 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (m_wEmbedCSS), on);
174
175 on = can_set_Embed_CSS () ? TRUE : FALSE;
176 gtk_widget_set_sensitive (m_wEmbedCSS, on);
177
178 on = get_Embed_Images () ? TRUE : FALSE;
179 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (m_wEmbedImages), on);
180
181 on = can_set_Embed_Images () ? TRUE : FALSE;
182 gtk_widget_set_sensitive (m_wEmbedImages, on);
183
184 on = get_MathML_Render_PNG () ? TRUE : FALSE;
185 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (m_wMathMLRenderPNG), on);
186
187 on = can_set_MathML_Render_PNG () ? TRUE : FALSE;
188 gtk_widget_set_sensitive (m_wMathMLRenderPNG, on);
189
190 on = get_Split_Document () ? TRUE : FALSE;
191 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (m_wSplitDocument), on);
192
193 on = can_set_Split_Document () ? TRUE : FALSE;
194 gtk_widget_set_sensitive (m_wSplitDocument, on);
195
196 }
197
event_OK()198 void XAP_UnixDialog_HTMLOptions::event_OK ()
199 {
200 m_bShouldSave = true;
201 }
202
event_SaveSettings()203 void XAP_UnixDialog_HTMLOptions::event_SaveSettings ()
204 {
205 saveDefaults ();
206 refreshStates ();
207 }
208
event_RestoreSettings()209 void XAP_UnixDialog_HTMLOptions::event_RestoreSettings ()
210 {
211 restoreDefaults ();
212 refreshStates ();
213 }
214
event_Cancel()215 void XAP_UnixDialog_HTMLOptions::event_Cancel ()
216 {
217 m_bShouldSave = false;
218 }
219
s_Is4(GtkWidget *,XAP_UnixDialog_HTMLOptions * dlg)220 static void s_Is4 (GtkWidget * /* w */, XAP_UnixDialog_HTMLOptions * dlg)
221 {
222 dlg->toggle_Is4 ();
223 }
224
s_AbiWebDoc(GtkWidget *,XAP_UnixDialog_HTMLOptions * dlg)225 static void s_AbiWebDoc (GtkWidget * /* w */, XAP_UnixDialog_HTMLOptions * dlg)
226 {
227 dlg->toggle_AbiWebDoc ();
228 }
229
s_DeclareXML(GtkWidget *,XAP_UnixDialog_HTMLOptions * dlg)230 static void s_DeclareXML (GtkWidget * /* w */, XAP_UnixDialog_HTMLOptions * dlg)
231 {
232 dlg->toggle_DeclareXML ();
233 }
234
s_AllowAWML(GtkWidget *,XAP_UnixDialog_HTMLOptions * dlg)235 static void s_AllowAWML (GtkWidget * /* w */, XAP_UnixDialog_HTMLOptions * dlg)
236 {
237 dlg->toggle_AllowAWML ();
238 }
239
s_EmbedCSS(GtkWidget *,XAP_UnixDialog_HTMLOptions * dlg)240 static void s_EmbedCSS (GtkWidget * /* w */, XAP_UnixDialog_HTMLOptions * dlg)
241 {
242 dlg->toggle_EmbedCSS ();
243 }
244
s_EmbedImages(GtkWidget *,XAP_UnixDialog_HTMLOptions * dlg)245 static void s_EmbedImages (GtkWidget * /* w */, XAP_UnixDialog_HTMLOptions * dlg)
246 {
247 dlg->toggle_EmbedImages ();
248 }
249
s_MathMLRenderPNG(GtkWidget *,XAP_UnixDialog_HTMLOptions * dlg)250 static void s_MathMLRenderPNG (GtkWidget * /* w */, XAP_UnixDialog_HTMLOptions * dlg)
251 {
252 dlg->toggle_MathMLRenderPNG();
253 }
254
s_SplitDocument(GtkWidget *,XAP_UnixDialog_HTMLOptions * dlg)255 static void s_SplitDocument (GtkWidget * /* w */, XAP_UnixDialog_HTMLOptions * dlg)
256 {
257 dlg->toggle_SplitDocument();
258 }
259
_constructWindow()260 GtkWidget * XAP_UnixDialog_HTMLOptions::_constructWindow ()
261 {
262 const XAP_StringSet * pSS = m_pApp->getStringSet ();
263
264 const char * title = static_cast<const char *>(pSS->getValue (XAP_STRING_ID_DLG_HTMLOPT_ExpTitle));
265 const char * label = static_cast<const char *>(pSS->getValue (XAP_STRING_ID_DLG_HTMLOPT_ExpLabel));
266 const char * save = static_cast<const char *>(pSS->getValue (XAP_STRING_ID_DLG_HTMLOPT_ExpSave));
267 const char * restore = static_cast<const char *>(pSS->getValue (XAP_STRING_ID_DLG_HTMLOPT_ExpRestore));
268
269 const char * Is4 = static_cast<const char *>(pSS->getValue (XAP_STRING_ID_DLG_HTMLOPT_ExpIs4));
270 const char * AbiWebDoc = static_cast<const char *>(pSS->getValue (XAP_STRING_ID_DLG_HTMLOPT_ExpAbiWebDoc));
271 const char * DeclareXML = static_cast<const char *>(pSS->getValue (XAP_STRING_ID_DLG_HTMLOPT_ExpDeclareXML));
272 const char * AllowAWML = static_cast<const char *>(pSS->getValue (XAP_STRING_ID_DLG_HTMLOPT_ExpAllowAWML));
273 const char * EmbedCSS = static_cast<const char *>(pSS->getValue (XAP_STRING_ID_DLG_HTMLOPT_ExpEmbedCSS));
274 const char * EmbedImages = static_cast<const char *>(pSS->getValue (XAP_STRING_ID_DLG_HTMLOPT_ExpEmbedImages));
275
276 const char * MathMLRenderPNG = static_cast<const char *>(pSS->getValue (XAP_STRING_ID_DLG_HTMLOPT_ExpMathMLRenderPNG));
277 const char * SplitDocument = static_cast<const char *>(pSS->getValue (XAP_STRING_ID_DLG_HTMLOPT_ExpSplitDocument));
278
279
280 /* This is the top level GTK widget, the window.
281 * It's created with a "dialog" style.
282 */
283 m_windowMain = abiDialogNew ("HTML export options dialog", true, title);
284
285 if (m_windowMain == NULL) return NULL;
286
287 /* This is the top level organization widget, which packs things vertically
288 */
289 GtkWidget * vboxMain = gtk_dialog_get_content_area(GTK_DIALOG(m_windowMain));
290
291 /* The top item in the vbox is a simple label
292 */
293 GtkWidget * labelActivate = gtk_label_new (label);
294 if (labelActivate)
295 {
296 gtk_widget_show (labelActivate);
297 gtk_box_pack_start (GTK_BOX (vboxMain), labelActivate, FALSE, TRUE, 0);
298 gtk_label_set_justify (GTK_LABEL (labelActivate), GTK_JUSTIFY_LEFT);
299 gtk_misc_set_alignment (GTK_MISC (labelActivate), 0, 0);
300 gtk_misc_set_padding (GTK_MISC (labelActivate), 10, 5);
301 }
302
303 m_wIs4 = gtk_check_button_new_with_label (Is4);
304 if (m_wIs4)
305 {
306 gtk_container_set_border_width (GTK_CONTAINER (m_wIs4), 5);
307 gtk_widget_show (m_wIs4);
308 gtk_box_pack_start (GTK_BOX (vboxMain), m_wIs4, TRUE, TRUE, 0);
309 g_signal_connect (G_OBJECT (m_wIs4), "toggled",
310 G_CALLBACK (s_Is4), static_cast<gpointer>(this));
311 }
312 m_wAbiWebDoc = gtk_check_button_new_with_label (AbiWebDoc);
313 if (m_wAbiWebDoc)
314 {
315 gtk_container_set_border_width (GTK_CONTAINER (m_wAbiWebDoc), 5);
316 gtk_widget_show (m_wAbiWebDoc);
317 gtk_box_pack_start (GTK_BOX (vboxMain), m_wAbiWebDoc, TRUE, TRUE, 0);
318 g_signal_connect (G_OBJECT (m_wAbiWebDoc), "toggled",
319 G_CALLBACK (s_AbiWebDoc), static_cast<gpointer>(this));
320 }
321 m_wDeclareXML = gtk_check_button_new_with_label (DeclareXML);
322 if (m_wDeclareXML)
323 {
324 gtk_container_set_border_width (GTK_CONTAINER (m_wDeclareXML), 5);
325 gtk_widget_show (m_wDeclareXML);
326 gtk_box_pack_start (GTK_BOX (vboxMain), m_wDeclareXML, TRUE, TRUE, 0);
327 g_signal_connect (G_OBJECT (m_wDeclareXML), "toggled",
328 G_CALLBACK (s_DeclareXML), static_cast<gpointer>(this));
329 }
330 m_wAllowAWML = gtk_check_button_new_with_label (AllowAWML);
331 if (m_wAllowAWML)
332 {
333 gtk_container_set_border_width (GTK_CONTAINER (m_wAllowAWML), 5);
334 gtk_widget_show (m_wAllowAWML);
335 gtk_box_pack_start (GTK_BOX (vboxMain), m_wAllowAWML, TRUE, TRUE, 0);
336 g_signal_connect (G_OBJECT (m_wAllowAWML), "toggled",
337 G_CALLBACK (s_AllowAWML), static_cast<gpointer>(this));
338 }
339 m_wEmbedCSS = gtk_check_button_new_with_label (EmbedCSS);
340 if (m_wEmbedCSS)
341 {
342 gtk_container_set_border_width (GTK_CONTAINER (m_wEmbedCSS), 5);
343 gtk_widget_show (m_wEmbedCSS);
344 gtk_box_pack_start (GTK_BOX (vboxMain), m_wEmbedCSS, TRUE, TRUE, 0);
345 g_signal_connect (G_OBJECT (m_wEmbedCSS), "toggled",
346 G_CALLBACK (s_EmbedCSS), static_cast<gpointer>(this));
347 }
348 m_wEmbedImages = gtk_check_button_new_with_label (EmbedImages);
349 if (m_wEmbedImages)
350 {
351 gtk_container_set_border_width (GTK_CONTAINER (m_wEmbedImages), 5);
352 gtk_widget_show (m_wEmbedImages);
353 gtk_box_pack_start (GTK_BOX (vboxMain), m_wEmbedImages, TRUE, TRUE, 0);
354 g_signal_connect (G_OBJECT (m_wEmbedImages), "toggled",
355 G_CALLBACK (s_EmbedImages), static_cast<gpointer>(this));
356 }
357
358 m_wMathMLRenderPNG = gtk_check_button_new_with_label (MathMLRenderPNG);
359 if (m_wMathMLRenderPNG)
360 {
361 gtk_container_set_border_width (GTK_CONTAINER (m_wMathMLRenderPNG), 5);
362 gtk_widget_show (m_wMathMLRenderPNG);
363 gtk_box_pack_start (GTK_BOX (vboxMain), m_wMathMLRenderPNG, TRUE, TRUE, 0);
364 g_signal_connect (G_OBJECT (m_wMathMLRenderPNG), "toggled",
365 G_CALLBACK (s_MathMLRenderPNG), static_cast<gpointer>(this));
366 }
367
368 m_wSplitDocument = gtk_check_button_new_with_label (SplitDocument);
369 if (m_wSplitDocument)
370 {
371 gtk_container_set_border_width (GTK_CONTAINER (m_wSplitDocument), 5);
372 gtk_widget_show (m_wSplitDocument);
373 gtk_box_pack_start (GTK_BOX (vboxMain), m_wSplitDocument, TRUE, TRUE, 0);
374 g_signal_connect (G_OBJECT (m_wSplitDocument), "toggled",
375 G_CALLBACK (s_SplitDocument), static_cast<gpointer>(this));
376 }
377
378
379 refreshStates ();
380
381 abiAddStockButton (GTK_DIALOG(m_windowMain), save, BUTTON_SAVE_SETTINGS);
382 abiAddStockButton (GTK_DIALOG(m_windowMain), restore, BUTTON_RESTORE_SETTINGS);
383
384 abiAddStockButton (GTK_DIALOG(m_windowMain), GTK_STOCK_CANCEL, BUTTON_CANCEL);
385 abiAddStockButton (GTK_DIALOG(m_windowMain), GTK_STOCK_OK, BUTTON_OK);
386
387 return m_windowMain;
388 }
389