1 /* AbiSource
2 *
3 * Copyright (C) 2011 Volodymyr Rudyj <vladimir.rudoy@gmail.com>
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * as published by the Free Software Foundation; either version 2
8 * of the License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 * 02110-1301 USA.
19 */
20
21 #include "ap_UnixDialog_EpubExportOptions.h"
22
23 pt2Constructor ap_Dialog_EpubExportOptions_Constructor =
24 AP_UnixDialog_EpubExportOptions::static_constructor;
25
static_constructor(XAP_DialogFactory * pDF,XAP_Dialog_Id id)26 XAP_Dialog * AP_UnixDialog_EpubExportOptions::static_constructor(
27 XAP_DialogFactory* pDF, XAP_Dialog_Id id)
28 {
29 return new AP_UnixDialog_EpubExportOptions(pDF,id);
30 }
31
32
AP_UnixDialog_EpubExportOptions(XAP_DialogFactory * pDlgFactory,XAP_Dialog_Id id)33 AP_UnixDialog_EpubExportOptions::AP_UnixDialog_EpubExportOptions(
34 XAP_DialogFactory* pDlgFactory, XAP_Dialog_Id id)
35 : AP_Dialog_EpubExportOptions(pDlgFactory,id),
36 m_windowMain(NULL),
37 m_wEpub2(NULL),
38 m_wSplitDocument(NULL),
39 m_wRenderMathMlToPng(NULL)
40 {
41
42 }
43
44
~AP_UnixDialog_EpubExportOptions()45 AP_UnixDialog_EpubExportOptions::~AP_UnixDialog_EpubExportOptions()
46 {
47
48 }
49
50 typedef enum
51 {
52 BUTTON_OK,
53 BUTTON_SAVE_SETTINGS,
54 BUTTON_RESTORE_SETTINGS,
55 BUTTON_CANCEL
56 } ResponseId;
57
runModal(XAP_Frame * pFrame)58 void AP_UnixDialog_EpubExportOptions::runModal (XAP_Frame * pFrame)
59 {
60 if (pFrame == NULL) return;
61
62 /* Build the window's widgets and arrange them
63 */
64 GtkWidget * mainWindow = _constructWindow ();
65
66 if (mainWindow == NULL) return;
67
68 bool stop = false;
69 while (!stop)
70 switch (abiRunModalDialog (GTK_DIALOG (mainWindow), pFrame, this, BUTTON_OK, false))
71 {
72 case BUTTON_OK:
73 event_OK ();
74 stop = true;
75 break;
76 case BUTTON_SAVE_SETTINGS:
77 event_SaveSettings ();
78 break;
79 case BUTTON_RESTORE_SETTINGS:
80 event_RestoreSettings ();
81 break;
82 case BUTTON_CANCEL:
83 default:
84 event_Cancel ();
85 stop = true;
86 break;
87 }
88 abiDestroyWidget (mainWindow);
89 }
90
toggle_Epub2()91 void AP_UnixDialog_EpubExportOptions::toggle_Epub2()
92 {
93 bool on = (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (m_wEpub2)) == TRUE);
94 set_Epub2 (on);
95 refreshStates ();
96 }
97
toggle_SplitDocument()98 void AP_UnixDialog_EpubExportOptions::toggle_SplitDocument()
99 {
100 bool on = (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (m_wSplitDocument)) == TRUE);
101 set_SplitDocument (on);
102 refreshStates ();
103 }
104
toggle_RenderMathMlToPng()105 void AP_UnixDialog_EpubExportOptions::toggle_RenderMathMlToPng()
106 {
107 bool on = (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (m_wRenderMathMlToPng)) == TRUE);
108 set_RenderMathMlToPng (on);
109 refreshStates ();
110 }
111
refreshStates()112 void AP_UnixDialog_EpubExportOptions::refreshStates()
113 {
114 gboolean on;
115
116 on = get_Epub2 () ? TRUE : FALSE;
117 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (m_wEpub2), on);
118
119 on = can_set_Epub2 () ? TRUE : FALSE;
120 gtk_widget_set_sensitive (m_wEpub2, on);
121
122 on = get_SplitDocument () ? TRUE : FALSE;
123 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (m_wSplitDocument), on);
124
125 on = can_set_SplitDocument () ? TRUE : FALSE;
126 gtk_widget_set_sensitive (m_wSplitDocument, on);
127
128 on = get_RenderMathMlToPng () ? TRUE : FALSE;
129 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (m_wRenderMathMlToPng), on);
130
131 on = can_set_RenderMathMlToPng () ? TRUE : FALSE;
132 gtk_widget_set_sensitive (m_wRenderMathMlToPng, on);
133
134 }
135
event_OK()136 void AP_UnixDialog_EpubExportOptions::event_OK ()
137 {
138 m_bShouldSave = true;
139 }
140
event_SaveSettings()141 void AP_UnixDialog_EpubExportOptions::event_SaveSettings ()
142 {
143 saveDefaults ();
144 refreshStates ();
145 }
146
event_RestoreSettings()147 void AP_UnixDialog_EpubExportOptions::event_RestoreSettings ()
148 {
149 restoreDefaults ();
150 refreshStates ();
151 }
152
event_Cancel()153 void AP_UnixDialog_EpubExportOptions::event_Cancel ()
154 {
155 m_bShouldSave = false;
156 }
157
s_Epub2(GtkWidget *,AP_UnixDialog_EpubExportOptions * dlg)158 static void s_Epub2 (GtkWidget * /* w */, AP_UnixDialog_EpubExportOptions * dlg)
159 {
160 dlg->toggle_Epub2();
161 }
162
s_SplitDocument(GtkWidget *,AP_UnixDialog_EpubExportOptions * dlg)163 static void s_SplitDocument(GtkWidget * /* w */, AP_UnixDialog_EpubExportOptions * dlg)
164 {
165 dlg->toggle_SplitDocument();
166 }
167
s_RenderMathMlToPng(GtkWidget *,AP_UnixDialog_EpubExportOptions * dlg)168 static void s_RenderMathMlToPng (GtkWidget * /* w */, AP_UnixDialog_EpubExportOptions * dlg)
169 {
170 dlg->toggle_RenderMathMlToPng ();
171 }
172
_constructWindow()173 GtkWidget * AP_UnixDialog_EpubExportOptions::_constructWindow ()
174 {
175 const XAP_StringSet * pSS = m_pApp->getStringSet ();
176
177 const char * title = "EPUB Export Options";
178 const char * label = "Select EPUB export options:";
179 const char * save = static_cast<const char *>(pSS->getValue (XAP_STRING_ID_DLG_HTMLOPT_ExpSave));
180 const char * restore = static_cast<const char *>(pSS->getValue (XAP_STRING_ID_DLG_HTMLOPT_ExpRestore));
181
182 const char * Epub2 = "EPUB 2.0.1";
183 const char * SplitDocument = "Split document";
184 const char * RenderMathMlToPng = "Use PNG instead of MathML";
185
186
187 /* This is the top level GTK widget, the window.
188 * It's created with a "dialog" style.
189 */
190 m_windowMain = abiDialogNew ("EPUB export options dialog", true, title);
191
192 if (m_windowMain == NULL) return NULL;
193
194 /* This is the top level organization widget, which packs things vertically
195 */
196 GtkWidget * vboxMain = gtk_dialog_get_content_area(GTK_DIALOG(m_windowMain));
197
198 /* The top item in the vbox is a simple label
199 */
200 GtkWidget * labelActivate = gtk_label_new (label);
201 if (labelActivate)
202 {
203 gtk_widget_show (labelActivate);
204 gtk_box_pack_start (GTK_BOX (vboxMain), labelActivate, FALSE, TRUE, 0);
205 gtk_label_set_justify (GTK_LABEL (labelActivate), GTK_JUSTIFY_LEFT);
206 gtk_misc_set_alignment (GTK_MISC (labelActivate), 0, 0);
207 gtk_misc_set_padding (GTK_MISC (labelActivate), 10, 5);
208 }
209
210 m_wEpub2 = gtk_check_button_new_with_label (Epub2);
211 if (m_wEpub2)
212 {
213 gtk_container_set_border_width(GTK_CONTAINER(m_wEpub2), 5);
214 gtk_widget_show(m_wEpub2);
215 gtk_box_pack_start(GTK_BOX(vboxMain), m_wEpub2, TRUE, TRUE, 0);
216 g_signal_connect(G_OBJECT(m_wEpub2), "toggled",
217 G_CALLBACK(s_Epub2), static_cast<gpointer> (this));
218 }
219
220 m_wSplitDocument = gtk_check_button_new_with_label (SplitDocument);
221 if (m_wSplitDocument)
222 {
223 gtk_container_set_border_width(GTK_CONTAINER(m_wSplitDocument), 5);
224 gtk_widget_show(m_wSplitDocument);
225 gtk_box_pack_start(GTK_BOX(vboxMain), m_wSplitDocument, TRUE, TRUE, 0);
226 g_signal_connect(G_OBJECT(m_wSplitDocument), "toggled",
227 G_CALLBACK(s_SplitDocument), static_cast<gpointer> (this));
228 }
229
230 m_wRenderMathMlToPng = gtk_check_button_new_with_label (RenderMathMlToPng);
231 if (m_wRenderMathMlToPng)
232 {
233 gtk_container_set_border_width(GTK_CONTAINER(m_wRenderMathMlToPng), 5);
234 gtk_widget_show(m_wRenderMathMlToPng);
235 gtk_box_pack_start(GTK_BOX(vboxMain), m_wRenderMathMlToPng, TRUE, TRUE, 0);
236 g_signal_connect(G_OBJECT(m_wRenderMathMlToPng), "toggled",
237 G_CALLBACK(s_RenderMathMlToPng), static_cast<gpointer> (this));
238 }
239
240 refreshStates ();
241
242 abiAddStockButton (GTK_DIALOG(m_windowMain), save, BUTTON_SAVE_SETTINGS);
243 abiAddStockButton (GTK_DIALOG(m_windowMain), restore, BUTTON_RESTORE_SETTINGS);
244
245 abiAddStockButton (GTK_DIALOG(m_windowMain), GTK_STOCK_CANCEL, BUTTON_CANCEL);
246 abiAddStockButton (GTK_DIALOG(m_windowMain), GTK_STOCK_OK, BUTTON_OK);
247
248 return m_windowMain;
249 }
250