2 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 2002-2006 Match Grun and the Sylpheed-Claws team
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
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.
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 02110-1301, USA.
21 * Export address book to HTML file.
31 #include <glib/gi18n.h>
32 #include <gdk/gdkkeysyms.h>
33 #include <gtk/gtkwindow.h>
34 #include <gtk/gtksignal.h>
35 #include <gtk/gtklabel.h>
36 #include <gtk/gtkentry.h>
37 #include <gtk/gtktable.h>
38 #include <gtk/gtkbutton.h>
41 #include "prefs_common.h"
42 #include "alertpanel.h"
44 #include "addrcache.h"
45 #include "addressitem.h"
46 #include "exporthtml.h"
48 #include "manage_window.h"
52 #define PAGE_FILE_INFO 0
56 #define EXPORTHTML_WIDTH 480
57 #define EXPORTHTML_HEIGHT -1
62 static struct _ExpHtml_Dlg {
67 GtkWidget *optmenuCSS;
68 GtkWidget *optmenuName;
69 GtkWidget *checkBanding;
70 GtkWidget *checkLinkEMail;
71 GtkWidget *checkAttributes;
72 GtkWidget *labelOutBook;
73 GtkWidget *labelOutFile;
82 static struct _AddressFileSelection _exp_html_file_selector_;
84 static ExportHtmlCtl *_exportCtl_ = NULL;
85 static AddressCache *_addressCache_ = NULL;
88 * Display message in status field.
89 * \param msg Message to display.
91 static void export_html_status_show( gchar *msg ) {
92 if( exphtml_dlg.statusbar != NULL ) {
94 GTK_STATUSBAR(exphtml_dlg.statusbar),
95 exphtml_dlg.status_cid );
98 GTK_STATUSBAR(exphtml_dlg.statusbar),
99 exphtml_dlg.status_cid, msg );
105 * Select and display status message appropriate for the page being displayed.
107 static void export_html_message( void ) {
111 pageNum = gtk_notebook_get_current_page( GTK_NOTEBOOK(exphtml_dlg.notebook) );
112 if( pageNum == PAGE_FILE_INFO ) {
113 sMsg = _( "Please specify output directory and file to create." );
115 else if( pageNum == PAGE_FORMAT ) {
116 sMsg = _( "Select stylesheet and formatting." );
118 else if( pageNum == PAGE_FINISH ) {
119 sMsg = _( "File exported successfully." );
121 export_html_status_show( sMsg );
125 * Callback function to cancel HTML file selection dialog.
126 * \param widget Widget (button).
127 * \param data User data.
129 static void export_html_cancel( GtkWidget *widget, gpointer data ) {
132 pageNum = gtk_notebook_get_current_page( GTK_NOTEBOOK(exphtml_dlg.notebook) );
133 if( pageNum != PAGE_FINISH ) {
134 exphtml_dlg.cancelled = TRUE;
140 * Callback function to handle dialog close event.
141 * \param widget Widget (dialog).
142 * \param event Event object.
143 * \param data User data.
145 static gint export_html_delete_event( GtkWidget *widget, GdkEventAny *event, gpointer data ) {
146 export_html_cancel( widget, data );
151 * Callback function to respond to dialog key press events.
152 * \param widget Widget.
153 * \param event Event object.
154 * \param data User data.
156 static gboolean export_html_key_pressed( GtkWidget *widget, GdkEventKey *event, gpointer data ) {
157 if (event && event->keyval == GDK_Escape) {
158 export_html_cancel( widget, data );
164 * Test whether we can move off file page.
165 * \return <i>TRUE</i> if OK to move off page.
167 static gboolean exp_html_move_file( void ) {
168 gchar *sFile, *msg, *reason;
171 sFile = gtk_editable_get_chars( GTK_EDITABLE(exphtml_dlg.entryHtml), 0, -1 );
172 g_strchug( sFile ); g_strchomp( sFile );
173 gtk_entry_set_text( GTK_ENTRY(exphtml_dlg.entryHtml), sFile );
174 exporthtml_parse_filespec( _exportCtl_, sFile );
177 /* Test for directory */
178 if( exporthtml_test_dir( _exportCtl_ ) ) {
182 /* Prompt to create */
183 msg = g_strdup_printf( _(
184 "HTML Output Directory '%s'\n" \
185 "does not exist. OK to create new directory?" ),
186 _exportCtl_->dirOutput );
187 aval = alertpanel( _("Create Directory" ),
188 msg, GTK_STOCK_NO, GTK_STOCK_YES, NULL );
190 if( aval != G_ALERTALTERNATE ) return FALSE;
192 /* Create directory */
193 if( ! exporthtml_create_dir( _exportCtl_ ) ) {
194 reason = exporthtml_get_create_msg( _exportCtl_ );
195 msg = g_strdup_printf( _(
196 "Could not create output directory for HTML file:\n%s" ),
198 aval = alertpanel_full(_("Failed to Create Directory"), msg,
199 GTK_STOCK_CLOSE, NULL, NULL, FALSE,
200 NULL, ALERT_ERROR, G_ALERTDEFAULT);
209 * Test whether we can move off format page.
210 * \return <i>TRUE</i> if OK to move off page.
212 static gboolean exp_html_move_format( void ) {
213 gboolean retVal = FALSE;
217 id = combobox_get_active_data(GTK_COMBO_BOX(exphtml_dlg.optmenuCSS));
218 exporthtml_set_stylesheet( _exportCtl_, id );
220 /* Set name format */
221 id = combobox_get_active_data(GTK_COMBO_BOX(exphtml_dlg.optmenuName));
222 exporthtml_set_name_format( _exportCtl_, id );
224 exporthtml_set_banding( _exportCtl_,
225 gtk_toggle_button_get_active(
226 GTK_TOGGLE_BUTTON( exphtml_dlg.checkBanding ) ) );
227 exporthtml_set_link_email( _exportCtl_,
228 gtk_toggle_button_get_active(
229 GTK_TOGGLE_BUTTON( exphtml_dlg.checkLinkEMail ) ) );
230 exporthtml_set_attributes( _exportCtl_,
231 gtk_toggle_button_get_active(
232 GTK_TOGGLE_BUTTON( exphtml_dlg.checkAttributes ) ) );
235 exporthtml_process( _exportCtl_, _addressCache_ );
236 if( _exportCtl_->retVal == MGU_SUCCESS ) {
240 export_html_status_show( _( "Error creating HTML file" ) );
246 * Display finish page.
248 static void exp_html_finish_show( void ) {
249 gtk_label_set_text( GTK_LABEL(exphtml_dlg.labelOutFile), _exportCtl_->path );
250 gtk_widget_set_sensitive( exphtml_dlg.btnNext, FALSE );
251 gtk_widget_grab_focus( exphtml_dlg.btnCancel );
255 * Callback function to select previous page.
256 * \param widget Widget (button).
258 static void export_html_prev( GtkWidget *widget ) {
261 pageNum = gtk_notebook_get_current_page( GTK_NOTEBOOK(exphtml_dlg.notebook) );
262 if( pageNum == PAGE_FORMAT ) {
263 /* Goto file page stuff */
264 gtk_notebook_set_current_page(
265 GTK_NOTEBOOK(exphtml_dlg.notebook), PAGE_FILE_INFO );
266 gtk_widget_set_sensitive( exphtml_dlg.btnPrev, FALSE );
268 else if( pageNum == PAGE_FINISH ) {
269 /* Goto format page */
270 gtk_notebook_set_current_page(
271 GTK_NOTEBOOK(exphtml_dlg.notebook), PAGE_FORMAT );
272 gtk_widget_set_sensitive( exphtml_dlg.btnNext, TRUE );
274 export_html_message();
278 * Callback function to select previous page.
279 * \param widget Widget (button).
281 static void export_html_next( GtkWidget *widget ) {
284 pageNum = gtk_notebook_get_current_page( GTK_NOTEBOOK(exphtml_dlg.notebook) );
285 if( pageNum == PAGE_FILE_INFO ) {
286 /* Goto format page */
287 if( exp_html_move_file() ) {
288 gtk_notebook_set_current_page(
289 GTK_NOTEBOOK(exphtml_dlg.notebook), PAGE_FORMAT );
290 gtk_widget_set_sensitive( exphtml_dlg.btnPrev, TRUE );
292 export_html_message();
294 else if( pageNum == PAGE_FORMAT ) {
295 /* Goto finish page */
296 if( exp_html_move_format() ) {
297 gtk_notebook_set_current_page(
298 GTK_NOTEBOOK(exphtml_dlg.notebook), PAGE_FINISH );
299 gtk_button_set_label(GTK_BUTTON(exphtml_dlg.btnCancel),
301 exp_html_finish_show();
302 exporthtml_save_settings( _exportCtl_ );
303 export_html_message();
309 * Open file with web browser.
310 * \param widget Widget (button).
311 * \param data User data.
313 static void export_html_browse( GtkWidget *widget, gpointer data ) {
316 uri = g_strconcat( "file://", _exportCtl_->path, NULL );
317 open_uri( uri, prefs_common.uri_cmd );
322 * Create HTML file selection dialog.
323 * \param afs Address file selection data.
325 static void exp_html_file_select_create( AddressFileSelection *afs ) {
326 gchar *file = filesel_select_file_save(_("Select HTML output file"), NULL);
329 afs->cancelled = TRUE;
331 afs->cancelled = FALSE;
332 gtk_entry_set_text( GTK_ENTRY(exphtml_dlg.entryHtml), file );
338 * Callback function to display HTML file selection dialog.
340 static void exp_html_file_select( void ) {
341 exp_html_file_select_create( & _exp_html_file_selector_ );
345 * Format notebook file specification page.
346 * \param pageNum Page (tab) number.
347 * \param pageLbl Page (tab) label.
349 static void export_html_page_file( gint pageNum, gchar *pageLbl ) {
353 GtkWidget *labelBook;
354 GtkWidget *entryHtml;
358 vbox = gtk_vbox_new(FALSE, 8);
359 gtk_container_add( GTK_CONTAINER( exphtml_dlg.notebook ), vbox );
360 gtk_container_set_border_width( GTK_CONTAINER (vbox), BORDER_WIDTH );
362 label = gtk_label_new( pageLbl );
363 gtk_widget_show( label );
364 gtk_notebook_set_tab_label(
365 GTK_NOTEBOOK( exphtml_dlg.notebook ),
366 gtk_notebook_get_nth_page(
367 GTK_NOTEBOOK( exphtml_dlg.notebook ), pageNum ),
370 table = gtk_table_new( 3, 3, FALSE );
371 gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
372 gtk_container_set_border_width( GTK_CONTAINER(table), 8 );
373 gtk_table_set_row_spacings(GTK_TABLE(table), 8);
374 gtk_table_set_col_spacings(GTK_TABLE(table), 8 );
378 label = gtk_label_new( _( "Address Book" ) );
379 gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1),
381 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
383 labelBook = gtk_label_new( "Address book name goes here" );
384 gtk_table_attach(GTK_TABLE(table), labelBook, 1, 2, top, (top + 1),
385 GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
386 gtk_misc_set_alignment(GTK_MISC(labelBook), 0, 0.5);
390 label = gtk_label_new( _( "HTML Output File" ) );
391 gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1),
393 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
395 entryHtml = gtk_entry_new();
396 gtk_table_attach(GTK_TABLE(table), entryHtml, 1, 2, top, (top + 1),
397 GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
399 btnFile = gtkut_get_browse_file_btn(_("B_rowse"));
400 gtk_table_attach(GTK_TABLE(table), btnFile, 2, 3, top, (top + 1),
403 gtk_widget_show_all(vbox);
406 g_signal_connect(G_OBJECT(btnFile), "clicked",
407 G_CALLBACK(exp_html_file_select), NULL);
409 exphtml_dlg.labelBook = labelBook;
410 exphtml_dlg.entryHtml = entryHtml;
414 * Format notebook format page.
415 * \param pageNum Page (tab) number.
416 * \param pageLbl Page (tab) label.
418 static void export_html_page_format( gint pageNum, gchar *pageLbl ) {
422 GtkWidget *optmenuCSS;
423 GtkWidget *optmenuName;
426 GtkWidget *checkBanding;
427 GtkWidget *checkLinkEMail;
428 GtkWidget *checkAttributes;
432 vbox = gtk_vbox_new(FALSE, 8);
433 gtk_container_add( GTK_CONTAINER( exphtml_dlg.notebook ), vbox );
434 gtk_container_set_border_width( GTK_CONTAINER (vbox), BORDER_WIDTH );
436 label = gtk_label_new( pageLbl );
437 gtk_widget_show( label );
438 gtk_notebook_set_tab_label(
439 GTK_NOTEBOOK( exphtml_dlg.notebook ),
440 gtk_notebook_get_nth_page(
441 GTK_NOTEBOOK( exphtml_dlg.notebook ), pageNum ),
444 table = gtk_table_new( 5, 3, FALSE );
445 gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
446 gtk_container_set_border_width( GTK_CONTAINER(table), 8 );
447 gtk_table_set_row_spacings(GTK_TABLE(table), 8);
448 gtk_table_set_col_spacings(GTK_TABLE(table), 8 );
452 label = gtk_label_new( _( "Stylesheet" ) );
453 gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1),
455 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
457 optmenuCSS = gtkut_sc_combobox_create(NULL, TRUE);
458 menu = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(optmenuCSS)));
460 COMBOBOX_ADD(menu, _("None"), EXPORT_HTML_ID_NONE);
461 COMBOBOX_ADD(menu, _("Default"), EXPORT_HTML_ID_DEFAULT);
462 COMBOBOX_ADD(menu, _("Full"), EXPORT_HTML_ID_FULL);
463 COMBOBOX_ADD(menu, _("Custom"), EXPORT_HTML_ID_CUSTOM);
464 COMBOBOX_ADD(menu, _("Custom-2"), EXPORT_HTML_ID_CUSTOM2);
465 COMBOBOX_ADD(menu, _("Custom-3"), EXPORT_HTML_ID_CUSTOM3);
466 COMBOBOX_ADD(menu, _("Custom-4"), EXPORT_HTML_ID_CUSTOM4);
468 gtk_table_attach(GTK_TABLE(table), optmenuCSS, 1, 2, top, (top + 1),
473 label = gtk_label_new( _( "Full Name Format" ) );
474 gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1),
476 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
478 optmenuName = gtkut_sc_combobox_create(NULL, TRUE);
479 menu = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(optmenuName)));
481 COMBOBOX_ADD(menu, _("First Name, Last Name"), EXPORT_HTML_FIRST_LAST);
482 COMBOBOX_ADD(menu, _("Last Name, First Name"), EXPORT_HTML_LAST_FIRST);
484 gtk_table_attach(GTK_TABLE(table), optmenuName, 1, 2, top, (top + 1),
489 checkBanding = gtk_check_button_new_with_label( _( "Color Banding" ) );
490 gtk_table_attach(GTK_TABLE(table), checkBanding, 1, 2, top, (top + 1),
495 checkLinkEMail = gtk_check_button_new_with_label( _( "Format Email Links" ) );
496 gtk_table_attach(GTK_TABLE(table), checkLinkEMail, 1, 2, top, (top + 1),
501 checkAttributes = gtk_check_button_new_with_label( _( "Format User Attributes" ) );
502 gtk_table_attach(GTK_TABLE(table), checkAttributes, 1, 2, top, (top + 1),
505 gtk_widget_show_all(vbox);
507 exphtml_dlg.optmenuCSS = optmenuCSS;
508 exphtml_dlg.optmenuName = optmenuName;
509 exphtml_dlg.checkBanding = checkBanding;
510 exphtml_dlg.checkLinkEMail = checkLinkEMail;
511 exphtml_dlg.checkAttributes = checkAttributes;
515 * Format notebook finish page.
516 * \param pageNum Page (tab) number.
517 * \param pageLbl Page (tab) label.
519 static void export_html_page_finish( gint pageNum, gchar *pageLbl ) {
523 GtkWidget *labelBook;
524 GtkWidget *labelFile;
525 GtkWidget *btnBrowse;
528 vbox = gtk_vbox_new(FALSE, 8);
529 gtk_container_add( GTK_CONTAINER( exphtml_dlg.notebook ), vbox );
530 gtk_container_set_border_width( GTK_CONTAINER (vbox), BORDER_WIDTH );
532 label = gtk_label_new( pageLbl );
533 gtk_widget_show( label );
534 gtk_notebook_set_tab_label(
535 GTK_NOTEBOOK( exphtml_dlg.notebook ),
536 gtk_notebook_get_nth_page( GTK_NOTEBOOK( exphtml_dlg.notebook ), pageNum ), label );
538 table = gtk_table_new( 3, 3, FALSE );
539 gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
540 gtk_container_set_border_width( GTK_CONTAINER(table), 8 );
541 gtk_table_set_row_spacings(GTK_TABLE(table), 8);
542 gtk_table_set_col_spacings(GTK_TABLE(table), 8 );
546 label = gtk_label_new( _( "Address Book :" ) );
547 gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
548 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
550 labelBook = gtk_label_new("Full name of address book goes here");
551 gtk_table_attach(GTK_TABLE(table), labelBook, 1, 2, top, (top + 1), GTK_FILL, 0, 0, 0);
552 gtk_misc_set_alignment(GTK_MISC(labelBook), 0, 0.5);
556 label = gtk_label_new( _( "File Name :" ) );
557 gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
558 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
560 labelFile = gtk_label_new("File name goes here");
561 gtk_table_attach(GTK_TABLE(table), labelFile, 1, 2, top, (top + 1), GTK_FILL, 0, 0, 0);
562 gtk_misc_set_alignment(GTK_MISC(labelFile), 0, 0.5);
566 btnBrowse = gtk_button_new_with_label( _( "Open with Web Browser" ) );
567 gtk_table_attach(GTK_TABLE(table), btnBrowse, 1, 2, top, (top + 1), GTK_FILL, 0, 0, 0);
569 gtk_widget_show_all(vbox);
571 /* Button handlers */
572 g_signal_connect(G_OBJECT(btnBrowse), "clicked",
573 G_CALLBACK(export_html_browse), NULL);
575 exphtml_dlg.labelOutBook = labelBook;
576 exphtml_dlg.labelOutFile = labelFile;
580 * Create main dialog decorations (excluding notebook pages).
582 static void export_html_dialog_create( void ) {
590 GtkWidget *btnCancel;
592 GtkWidget *statusbar;
594 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
595 gtk_widget_set_size_request(window, EXPORTHTML_WIDTH, EXPORTHTML_HEIGHT );
596 gtk_container_set_border_width( GTK_CONTAINER(window), 0 );
597 gtk_window_set_title( GTK_WINDOW(window),
598 _("Export Address Book to HTML File") );
599 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
600 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
601 g_signal_connect(G_OBJECT(window), "delete_event",
602 G_CALLBACK(export_html_delete_event),
604 g_signal_connect(G_OBJECT(window), "key_press_event",
605 G_CALLBACK(export_html_key_pressed),
608 vbox = gtk_vbox_new(FALSE, 4);
609 gtk_widget_show(vbox);
610 gtk_container_add(GTK_CONTAINER(window), vbox);
612 vnbox = gtk_vbox_new(FALSE, 4);
613 gtk_container_set_border_width(GTK_CONTAINER(vnbox), 4);
614 gtk_widget_show(vnbox);
615 gtk_box_pack_start(GTK_BOX(vbox), vnbox, TRUE, TRUE, 0);
618 notebook = gtk_notebook_new();
619 gtk_notebook_set_show_tabs( GTK_NOTEBOOK(notebook), FALSE ); /* Hide */
620 /* gtk_notebook_set_show_tabs( GTK_NOTEBOOK(notebook), TRUE ); */
621 gtk_widget_show(notebook);
622 gtk_box_pack_start(GTK_BOX(vnbox), notebook, TRUE, TRUE, 0);
623 gtk_container_set_border_width(GTK_CONTAINER(notebook), 6);
626 hsbox = gtk_hbox_new(FALSE, 0);
627 gtk_box_pack_end(GTK_BOX(vbox), hsbox, FALSE, FALSE, BORDER_WIDTH);
628 statusbar = gtk_statusbar_new();
629 gtk_box_pack_start(GTK_BOX(hsbox), statusbar, TRUE, TRUE, BORDER_WIDTH);
632 gtkut_stock_button_set_create(&hbbox, &btnPrev, GTK_STOCK_GO_BACK,
633 &btnNext, GTK_STOCK_GO_FORWARD,
634 &btnCancel, GTK_STOCK_CANCEL);
635 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
636 gtk_container_set_border_width(GTK_CONTAINER(hbbox), 2);
637 gtk_widget_grab_default(btnNext);
639 /* Button handlers */
640 g_signal_connect(G_OBJECT(btnPrev), "clicked",
641 G_CALLBACK(export_html_prev), NULL);
642 g_signal_connect(G_OBJECT(btnNext), "clicked",
643 G_CALLBACK(export_html_next), NULL);
644 g_signal_connect(G_OBJECT(btnCancel), "clicked",
645 G_CALLBACK(export_html_cancel), NULL);
647 gtk_widget_show_all(vbox);
649 exphtml_dlg.window = window;
650 exphtml_dlg.notebook = notebook;
651 exphtml_dlg.btnPrev = btnPrev;
652 exphtml_dlg.btnNext = btnNext;
653 exphtml_dlg.btnCancel = btnCancel;
654 exphtml_dlg.statusbar = statusbar;
655 exphtml_dlg.status_cid = gtk_statusbar_get_context_id(
656 GTK_STATUSBAR(statusbar), "Export HTML Dialog" );
660 * Create export HTML dialog.
662 static void export_html_create( void ) {
663 export_html_dialog_create();
664 export_html_page_file( PAGE_FILE_INFO, _( "File Info" ) );
665 export_html_page_format( PAGE_FORMAT, _( "Format" ) );
666 export_html_page_finish( PAGE_FINISH, _( "Finish" ) );
667 gtk_widget_show_all( exphtml_dlg.window );
671 * Populate fields from control data.
672 * \param ctl Export control data.
674 static void export_html_fill_fields( ExportHtmlCtl *ctl ) {
675 gtk_entry_set_text( GTK_ENTRY(exphtml_dlg.entryHtml), "" );
677 gtk_entry_set_text( GTK_ENTRY(exphtml_dlg.entryHtml),
681 combobox_select_by_data(
682 GTK_COMBO_BOX(exphtml_dlg.optmenuCSS), ctl->stylesheet );
683 combobox_select_by_data(
684 GTK_COMBO_BOX(exphtml_dlg.optmenuName), ctl->nameFormat );
685 gtk_toggle_button_set_active(
686 GTK_TOGGLE_BUTTON( exphtml_dlg.checkBanding ), ctl->banding );
687 gtk_toggle_button_set_active(
688 GTK_TOGGLE_BUTTON( exphtml_dlg.checkLinkEMail ), ctl->linkEMail );
689 gtk_toggle_button_set_active(
690 GTK_TOGGLE_BUTTON( exphtml_dlg.checkAttributes ), ctl->showAttribs );
694 * Process export address dialog.
695 * \param cache Address book/data source cache.
697 void addressbook_exp_html( AddressCache *cache ) {
698 /* Set references to control data */
699 _addressCache_ = cache;
701 _exportCtl_ = exporthtml_create();
702 exporthtml_load_settings( _exportCtl_ );
705 if( ! exphtml_dlg.window )
706 export_html_create();
708 gtk_button_set_label(GTK_BUTTON(exphtml_dlg.btnCancel),
710 exphtml_dlg.cancelled = FALSE;
711 gtk_widget_show(exphtml_dlg.window);
712 manage_window_set_transient(GTK_WINDOW(exphtml_dlg.window));
714 gtk_label_set_text( GTK_LABEL(exphtml_dlg.labelBook), cache->name );
715 gtk_label_set_text( GTK_LABEL(exphtml_dlg.labelOutBook), cache->name );
716 export_html_fill_fields( _exportCtl_ );
718 gtk_widget_grab_default(exphtml_dlg.btnNext);
719 gtk_notebook_set_current_page( GTK_NOTEBOOK(exphtml_dlg.notebook), PAGE_FILE_INFO );
720 gtk_widget_set_sensitive( exphtml_dlg.btnPrev, FALSE );
721 gtk_widget_set_sensitive( exphtml_dlg.btnNext, TRUE );
723 export_html_message();
724 gtk_widget_grab_focus(exphtml_dlg.entryHtml);
727 gtk_widget_hide(exphtml_dlg.window);
728 exporthtml_free( _exportCtl_ );
731 _addressCache_ = NULL;
735 * ============================================================================
737 * ============================================================================