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