2000-06-12 11:55:12 +00:00
|
|
|
/* FormPreferences.C
|
|
|
|
* FormPreferences Interface Class Implementation
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <config.h>
|
2000-07-27 10:26:38 +00:00
|
|
|
|
2000-06-12 11:55:12 +00:00
|
|
|
#include FORMS_H_LOCATION
|
|
|
|
|
2000-07-27 10:26:38 +00:00
|
|
|
#ifdef __GNUG_
|
|
|
|
#pragma implementation
|
|
|
|
#endif
|
|
|
|
|
2000-06-12 11:55:12 +00:00
|
|
|
#include "FormPreferences.h"
|
2000-07-19 15:54:35 +00:00
|
|
|
#include "form_preferences.h"
|
2000-06-12 11:55:12 +00:00
|
|
|
#include "xform_macros.h"
|
|
|
|
#include "input_validators.h"
|
|
|
|
#include "LyXView.h"
|
|
|
|
#include "lyxfunc.h"
|
|
|
|
#include "Dialogs.h"
|
|
|
|
#include "lyxrc.h"
|
|
|
|
#include "debug.h"
|
2000-07-28 04:59:45 +00:00
|
|
|
#include "support/FileInfo.h"
|
|
|
|
#include "support/filetools.h"
|
2000-07-27 10:26:38 +00:00
|
|
|
#include "lyx_gui_misc.h"
|
|
|
|
#include "gettext.h"
|
2000-08-14 05:24:35 +00:00
|
|
|
#include "ButtonController.h"
|
2000-06-12 11:55:12 +00:00
|
|
|
|
|
|
|
#ifdef SIGC_CXX_NAMESPACES
|
|
|
|
using SigC::slot;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
C_RETURNCB(FormPreferences, WMHideCB)
|
|
|
|
C_GENERICCB(FormPreferences, OKCB)
|
|
|
|
C_GENERICCB(FormPreferences, ApplyCB)
|
|
|
|
C_GENERICCB(FormPreferences, CancelCB)
|
|
|
|
C_GENERICCB(FormPreferences, InputCB)
|
2000-08-14 05:24:35 +00:00
|
|
|
C_GENERICCB(FormPreferences, RestoreCB)
|
2000-06-12 11:55:12 +00:00
|
|
|
|
|
|
|
|
|
|
|
FormPreferences::FormPreferences(LyXView * lv, Dialogs * d)
|
2000-08-14 05:24:35 +00:00
|
|
|
: dialog_(0), bind_(0), misc_(0), screen_fonts_(0), interface_fonts_(0),
|
|
|
|
printer_(0), paths_(0), lv_(lv), d_(d), u_(0), h_(0),
|
|
|
|
minw_(0), minh_(0),
|
|
|
|
bc_(new ButtonController<PreferencesPolicy>(_("Cancel"), _("Close")))
|
2000-06-12 11:55:12 +00:00
|
|
|
{
|
|
|
|
// let the dialog be shown
|
|
|
|
// This is a permanent connection so we won't bother
|
|
|
|
// storing a copy because we won't be disconnecting.
|
2000-08-14 05:24:35 +00:00
|
|
|
d->showPreferences.connect(slot(this, &FormPreferences::show));
|
2000-06-12 11:55:12 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
FormPreferences::~FormPreferences()
|
|
|
|
{
|
2000-08-14 05:24:35 +00:00
|
|
|
delete dialog_;
|
|
|
|
delete bc_;
|
2000-06-12 11:55:12 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void FormPreferences::build()
|
|
|
|
{
|
|
|
|
dialog_ = build_preferences();
|
2000-08-14 05:24:35 +00:00
|
|
|
|
|
|
|
// manage the restore, save, apply and cancel/close buttons
|
2000-08-18 00:58:58 +00:00
|
|
|
bc_->setOk(dialog_->button_ok);
|
2000-08-14 05:24:35 +00:00
|
|
|
bc_->setApply(dialog_->button_apply);
|
|
|
|
bc_->setCancel(dialog_->button_cancel);
|
|
|
|
bc_->setUndoAll(dialog_->button_restore);
|
|
|
|
bc_->refresh();
|
|
|
|
|
|
|
|
// Workaround dumb xforms sizing bug
|
|
|
|
minw_ = dialog_->form->w;
|
|
|
|
minh_ = dialog_->form->h;
|
|
|
|
|
2000-06-12 11:55:12 +00:00
|
|
|
bind_ = build_bind();
|
|
|
|
screen_fonts_ = build_screen_fonts();
|
|
|
|
interface_fonts_ = build_interface_fonts();
|
|
|
|
misc_ = build_misc();
|
|
|
|
printer_ = build_printer();
|
|
|
|
paths_ = build_paths();
|
|
|
|
|
2000-07-28 04:59:45 +00:00
|
|
|
// setup the input returns
|
|
|
|
// Bind tab
|
|
|
|
fl_set_input_return(bind_->input_bind, FL_RETURN_CHANGED);
|
|
|
|
// Misc tab
|
|
|
|
fl_set_counter_return(misc_->counter_autosave, FL_RETURN_CHANGED);
|
|
|
|
fl_set_counter_return(misc_->counter_line_len, FL_RETURN_CHANGED);
|
|
|
|
// Screen fonts
|
|
|
|
fl_set_input_return(screen_fonts_->input_roman, FL_RETURN_CHANGED);
|
|
|
|
fl_set_input_return(screen_fonts_->input_sans, FL_RETURN_CHANGED);
|
|
|
|
fl_set_input_return(screen_fonts_->input_typewriter,
|
|
|
|
FL_RETURN_CHANGED);
|
2000-08-14 05:24:35 +00:00
|
|
|
fl_set_input_return(screen_fonts_->input_screen_encoding,
|
|
|
|
FL_RETURN_CHANGED);
|
2000-07-28 04:59:45 +00:00
|
|
|
fl_set_counter_return(screen_fonts_->counter_zoom, FL_RETURN_CHANGED);
|
|
|
|
fl_set_input_return(screen_fonts_->input_tiny, FL_RETURN_CHANGED);
|
|
|
|
fl_set_input_return(screen_fonts_->input_script, FL_RETURN_CHANGED);
|
|
|
|
fl_set_input_return(screen_fonts_->input_footnote, FL_RETURN_CHANGED);
|
|
|
|
fl_set_input_return(screen_fonts_->input_small, FL_RETURN_CHANGED);
|
|
|
|
fl_set_input_return(screen_fonts_->input_normal, FL_RETURN_CHANGED);
|
|
|
|
fl_set_input_return(screen_fonts_->input_large, FL_RETURN_CHANGED);
|
|
|
|
fl_set_input_return(screen_fonts_->input_larger, FL_RETURN_CHANGED);
|
|
|
|
fl_set_input_return(screen_fonts_->input_largest, FL_RETURN_CHANGED);
|
|
|
|
fl_set_input_return(screen_fonts_->input_huge, FL_RETURN_CHANGED);
|
|
|
|
fl_set_input_return(screen_fonts_->input_huger, FL_RETURN_CHANGED);
|
|
|
|
// interface fonts
|
|
|
|
fl_set_input_return(interface_fonts_->input_popup_font,
|
|
|
|
FL_RETURN_CHANGED);
|
|
|
|
fl_set_input_return(interface_fonts_->input_menu_font,
|
|
|
|
FL_RETURN_CHANGED);
|
2000-08-14 05:24:35 +00:00
|
|
|
fl_set_input_return(interface_fonts_->input_popup_encoding,
|
2000-07-28 04:59:45 +00:00
|
|
|
FL_RETURN_CHANGED);
|
|
|
|
// printer
|
|
|
|
fl_set_input_return(printer_->input_command, FL_RETURN_CHANGED);
|
|
|
|
fl_set_input_return(printer_->input_page_range, FL_RETURN_CHANGED);
|
|
|
|
fl_set_input_return(printer_->input_copies, FL_RETURN_CHANGED);
|
|
|
|
fl_set_input_return(printer_->input_reverse, FL_RETURN_CHANGED);
|
|
|
|
fl_set_input_return(printer_->input_to_printer, FL_RETURN_CHANGED);
|
|
|
|
fl_set_input_return(printer_->input_file_extension, FL_RETURN_CHANGED);
|
|
|
|
fl_set_input_return(printer_->input_spool_command, FL_RETURN_CHANGED);
|
|
|
|
fl_set_input_return(printer_->input_paper_type, FL_RETURN_CHANGED);
|
|
|
|
fl_set_input_return(printer_->input_even_pages, FL_RETURN_CHANGED);
|
|
|
|
fl_set_input_return(printer_->input_odd_pages, FL_RETURN_CHANGED);
|
|
|
|
fl_set_input_return(printer_->input_collated, FL_RETURN_CHANGED);
|
|
|
|
fl_set_input_return(printer_->input_landscape, FL_RETURN_CHANGED);
|
|
|
|
fl_set_input_return(printer_->input_to_file, FL_RETURN_CHANGED);
|
|
|
|
fl_set_input_return(printer_->input_extra_options, FL_RETURN_CHANGED);
|
|
|
|
fl_set_input_return(printer_->input_spool_prefix, FL_RETURN_CHANGED);
|
|
|
|
fl_set_input_return(printer_->input_paper_size, FL_RETURN_CHANGED);
|
|
|
|
fl_set_input_return(printer_->input_name, FL_RETURN_CHANGED);
|
|
|
|
// paths
|
|
|
|
fl_set_input_return(paths_->input_default_path, FL_RETURN_CHANGED);
|
|
|
|
fl_set_input_return(paths_->input_template_path, FL_RETURN_CHANGED);
|
|
|
|
fl_set_input_return(paths_->input_temp_dir, FL_RETURN_CHANGED);
|
|
|
|
fl_set_input_return(paths_->input_lastfiles, FL_RETURN_CHANGED);
|
|
|
|
fl_set_input_return(paths_->input_backup_path, FL_RETURN_CHANGED);
|
|
|
|
fl_set_counter_return(paths_->counter_lastfiles, FL_RETURN_CHANGED);
|
|
|
|
|
|
|
|
// Now add them to the tabfolder
|
2000-06-12 11:55:12 +00:00
|
|
|
fl_addto_tabfolder(dialog_->tabfolder_prefs,
|
|
|
|
_("Bindings"),
|
2000-08-14 05:24:35 +00:00
|
|
|
bind_->form);
|
2000-06-12 11:55:12 +00:00
|
|
|
fl_addto_tabfolder(dialog_->tabfolder_prefs,
|
|
|
|
_("Screen Fonts"),
|
2000-08-14 05:24:35 +00:00
|
|
|
screen_fonts_->form);
|
2000-06-12 11:55:12 +00:00
|
|
|
fl_addto_tabfolder(dialog_->tabfolder_prefs,
|
|
|
|
_("Interface Fonts"),
|
2000-08-14 05:24:35 +00:00
|
|
|
interface_fonts_->form);
|
2000-06-12 11:55:12 +00:00
|
|
|
fl_addto_tabfolder(dialog_->tabfolder_prefs,
|
|
|
|
_("Miscellaneous"),
|
2000-08-14 05:24:35 +00:00
|
|
|
misc_->form);
|
2000-06-12 11:55:12 +00:00
|
|
|
fl_addto_tabfolder(dialog_->tabfolder_prefs,
|
|
|
|
_("Printer"),
|
2000-08-14 05:24:35 +00:00
|
|
|
printer_->form);
|
2000-06-12 11:55:12 +00:00
|
|
|
fl_addto_tabfolder(dialog_->tabfolder_prefs,
|
|
|
|
_("Paths"),
|
2000-08-14 05:24:35 +00:00
|
|
|
paths_->form);
|
2000-06-12 11:55:12 +00:00
|
|
|
|
2000-08-14 05:24:35 +00:00
|
|
|
fl_set_form_atclose(dialog_->form,
|
2000-06-12 11:55:12 +00:00
|
|
|
C_FormPreferencesWMHideCB, 0);
|
2000-07-28 04:59:45 +00:00
|
|
|
|
|
|
|
// deactivate the various browse buttons because they
|
|
|
|
// currently aren't implemented
|
|
|
|
fl_deactivate_object(bind_->button_bind_file_browse);
|
|
|
|
fl_deactivate_object(paths_->button_document_browse);
|
|
|
|
fl_deactivate_object(paths_->button_template_browse);
|
|
|
|
fl_deactivate_object(paths_->button_temp_dir_browse);
|
|
|
|
fl_deactivate_object(paths_->button_lastfiles_browse);
|
|
|
|
fl_deactivate_object(paths_->button_backup_path_browse);
|
|
|
|
fl_set_object_lcol(bind_->button_bind_file_browse, FL_INACTIVE);
|
|
|
|
fl_set_object_lcol(paths_->button_document_browse, FL_INACTIVE);
|
|
|
|
fl_set_object_lcol(paths_->button_template_browse, FL_INACTIVE);
|
|
|
|
fl_set_object_lcol(paths_->button_temp_dir_browse, FL_INACTIVE);
|
|
|
|
fl_set_object_lcol(paths_->button_lastfiles_browse, FL_INACTIVE);
|
|
|
|
fl_set_object_lcol(paths_->button_backup_path_browse, FL_INACTIVE);
|
2000-06-12 11:55:12 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void FormPreferences::show()
|
|
|
|
{
|
|
|
|
if (!dialog_) {
|
|
|
|
build();
|
|
|
|
}
|
|
|
|
update(); // make sure its up-to-date
|
|
|
|
|
2000-08-14 05:24:35 +00:00
|
|
|
if (dialog_->form->visible) {
|
|
|
|
fl_raise_form(dialog_->form);
|
2000-06-12 11:55:12 +00:00
|
|
|
} else {
|
2000-08-14 05:24:35 +00:00
|
|
|
fl_set_form_minsize(dialog_->form,
|
|
|
|
minw_,
|
|
|
|
minh_);
|
|
|
|
fl_show_form(dialog_->form,
|
2000-06-12 11:55:12 +00:00
|
|
|
FL_PLACE_MOUSE | FL_FREE_SIZE,
|
2000-08-14 05:24:35 +00:00
|
|
|
FL_TRANSIENT,
|
2000-06-12 11:55:12 +00:00
|
|
|
_("Preferences"));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void FormPreferences::hide()
|
|
|
|
{
|
|
|
|
if (dialog_
|
2000-08-14 05:24:35 +00:00
|
|
|
&& dialog_->form
|
|
|
|
&& dialog_->form->visible) {
|
|
|
|
fl_hide_form(dialog_->form);
|
2000-06-12 11:55:12 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void FormPreferences::apply()
|
|
|
|
{
|
|
|
|
// set the new lyxrc entries
|
|
|
|
// many of these need to trigger other functions when the assignment
|
|
|
|
// is made. For example, screen zoom and font types. These could be
|
|
|
|
// handled either by signals/slots in lyxrc or just directly call the
|
|
|
|
// associated functions here.
|
2000-08-14 05:24:35 +00:00
|
|
|
// There are other problems with this scheme. We really should check
|
|
|
|
// what we copy to make sure that it really is necessary to do things
|
|
|
|
// like update the screen fonts because that flushes the textcache
|
|
|
|
// and other stuff which may cost us a lot on slower/high-load machines.
|
|
|
|
|
2000-06-12 11:55:12 +00:00
|
|
|
// Bind tab
|
|
|
|
lyxrc.bind_file = fl_get_input(bind_->input_bind);
|
|
|
|
// Misc tab
|
|
|
|
lyxrc.show_banner = fl_get_button(misc_->check_banner);
|
|
|
|
lyxrc.auto_region_delete = fl_get_button(misc_->
|
|
|
|
check_auto_region_delete);
|
|
|
|
lyxrc.exit_confirmation = fl_get_button(misc_->check_exit_confirm);
|
2000-07-28 04:59:45 +00:00
|
|
|
lyxrc.display_shortcuts =
|
|
|
|
fl_get_button(misc_->check_display_shortcuts);
|
2000-06-12 11:55:12 +00:00
|
|
|
lyxrc.autosave = static_cast<unsigned int>
|
|
|
|
(fl_get_counter_value(misc_->counter_autosave));
|
|
|
|
lyxrc.ascii_linelen = static_cast<unsigned int>
|
|
|
|
(fl_get_counter_value(misc_->counter_line_len));
|
2000-08-14 05:24:35 +00:00
|
|
|
// Interface fonts
|
2000-06-12 11:55:12 +00:00
|
|
|
lyxrc.popup_font_name =
|
|
|
|
fl_get_input(interface_fonts_->input_popup_font);
|
|
|
|
lyxrc.menu_font_name = fl_get_input(interface_fonts_->input_menu_font);
|
2000-08-14 05:24:35 +00:00
|
|
|
lyxrc.font_norm_menu =
|
|
|
|
fl_get_input(interface_fonts_->input_popup_encoding);
|
|
|
|
// Screen fonts
|
|
|
|
if (lyxrc.roman_font_name !=
|
|
|
|
fl_get_input(screen_fonts_->input_roman) ||
|
|
|
|
lyxrc.sans_font_name !=
|
|
|
|
fl_get_input(screen_fonts_->input_sans) ||
|
|
|
|
lyxrc.typewriter_font_name !=
|
|
|
|
fl_get_input(screen_fonts_->input_typewriter) ||
|
|
|
|
lyxrc.font_norm !=
|
|
|
|
fl_get_input(screen_fonts_->input_screen_encoding) ||
|
|
|
|
lyxrc.use_scalable_fonts !=
|
|
|
|
fl_get_button(screen_fonts_->check_scalable) ||
|
|
|
|
lyxrc.zoom != static_cast<unsigned int>
|
|
|
|
(fl_get_counter_value(screen_fonts_->counter_zoom)) ||
|
|
|
|
lyxrc.font_sizes[LyXFont::SIZE_TINY] !=
|
|
|
|
strToDbl(fl_get_input(screen_fonts_->input_tiny)) ||
|
|
|
|
lyxrc.font_sizes[LyXFont::SIZE_SCRIPT] !=
|
|
|
|
strToDbl(fl_get_input(screen_fonts_->input_script)) ||
|
|
|
|
lyxrc.font_sizes[LyXFont::SIZE_FOOTNOTE] !=
|
|
|
|
strToDbl(fl_get_input(screen_fonts_->input_footnote)) ||
|
|
|
|
lyxrc.font_sizes[LyXFont::SIZE_SMALL] !=
|
|
|
|
strToDbl(fl_get_input(screen_fonts_->input_small)) ||
|
|
|
|
lyxrc.font_sizes[LyXFont::SIZE_NORMAL] !=
|
|
|
|
strToDbl(fl_get_input(screen_fonts_->input_normal)) ||
|
|
|
|
lyxrc.font_sizes[LyXFont::SIZE_LARGE] !=
|
|
|
|
strToDbl(fl_get_input(screen_fonts_->input_large)) ||
|
|
|
|
lyxrc.font_sizes[LyXFont::SIZE_LARGER] !=
|
|
|
|
strToDbl(fl_get_input(screen_fonts_->input_larger)) ||
|
|
|
|
lyxrc.font_sizes[LyXFont::SIZE_LARGEST] !=
|
|
|
|
strToDbl(fl_get_input(screen_fonts_->input_largest)) ||
|
|
|
|
lyxrc.font_sizes[LyXFont::SIZE_HUGE] !=
|
|
|
|
strToDbl(fl_get_input(screen_fonts_->input_huge)) ||
|
|
|
|
lyxrc.font_sizes[LyXFont::SIZE_HUGER] !=
|
|
|
|
strToDbl(fl_get_input(screen_fonts_->input_huger))) {
|
|
|
|
// Something has changed so copy all of them and then force
|
|
|
|
// an update of the screen fonts (ie. redraw every buffer)
|
|
|
|
lyxrc.roman_font_name = fl_get_input(screen_fonts_->input_roman);
|
|
|
|
lyxrc.sans_font_name = fl_get_input(screen_fonts_->input_sans);
|
|
|
|
lyxrc.typewriter_font_name = fl_get_input(screen_fonts_->
|
|
|
|
input_typewriter);
|
|
|
|
lyxrc.font_norm = fl_get_input(screen_fonts_->
|
|
|
|
input_screen_encoding);
|
|
|
|
lyxrc.use_scalable_fonts =
|
|
|
|
fl_get_button(screen_fonts_->check_scalable);
|
|
|
|
lyxrc.zoom = static_cast<unsigned int>
|
|
|
|
(fl_get_counter_value(screen_fonts_->counter_zoom));
|
|
|
|
lyxrc.font_sizes[LyXFont::SIZE_TINY] =
|
|
|
|
strToDbl(fl_get_input(screen_fonts_->input_tiny));
|
|
|
|
lyxrc.font_sizes[LyXFont::SIZE_SCRIPT] =
|
|
|
|
strToDbl(fl_get_input(screen_fonts_->input_script));
|
|
|
|
lyxrc.font_sizes[LyXFont::SIZE_FOOTNOTE] =
|
|
|
|
strToDbl(fl_get_input(screen_fonts_->input_footnote));
|
|
|
|
lyxrc.font_sizes[LyXFont::SIZE_SMALL] =
|
|
|
|
strToDbl(fl_get_input(screen_fonts_->input_small));
|
|
|
|
lyxrc.font_sizes[LyXFont::SIZE_NORMAL] =
|
|
|
|
strToDbl(fl_get_input(screen_fonts_->input_normal));
|
|
|
|
lyxrc.font_sizes[LyXFont::SIZE_LARGE] =
|
|
|
|
strToDbl(fl_get_input(screen_fonts_->input_large));
|
|
|
|
lyxrc.font_sizes[LyXFont::SIZE_LARGER] =
|
|
|
|
strToDbl(fl_get_input(screen_fonts_->input_larger));
|
|
|
|
lyxrc.font_sizes[LyXFont::SIZE_LARGEST] =
|
|
|
|
strToDbl(fl_get_input(screen_fonts_->input_largest));
|
|
|
|
lyxrc.font_sizes[LyXFont::SIZE_HUGE] =
|
|
|
|
strToDbl(fl_get_input(screen_fonts_->input_huge));
|
|
|
|
lyxrc.font_sizes[LyXFont::SIZE_HUGER] =
|
|
|
|
strToDbl(fl_get_input(screen_fonts_->input_huger));
|
|
|
|
// Now update the buffers
|
|
|
|
// Can anything below here affect the redraw process?
|
|
|
|
lv_->getLyXFunc()->Dispatch(LFUN_SCREEN_FONT_UPDATE);
|
|
|
|
}
|
2000-06-12 11:55:12 +00:00
|
|
|
// printer
|
|
|
|
lyxrc.print_adapt_output = fl_get_button(printer_->check_adapt_output);
|
|
|
|
lyxrc.print_command = fl_get_input(printer_->input_command);
|
|
|
|
lyxrc.print_pagerange_flag = fl_get_input(printer_->input_page_range);
|
|
|
|
lyxrc.print_copies_flag = fl_get_input(printer_->input_copies);
|
|
|
|
lyxrc.print_reverse_flag = fl_get_input(printer_->input_reverse);
|
|
|
|
lyxrc.print_to_printer = fl_get_input(printer_->input_to_printer);
|
|
|
|
lyxrc.print_file_extension =
|
|
|
|
fl_get_input(printer_->input_file_extension);
|
|
|
|
lyxrc.print_spool_command =
|
|
|
|
fl_get_input(printer_->input_spool_command);
|
|
|
|
lyxrc.print_paper_flag = fl_get_input(printer_->input_paper_type);
|
|
|
|
lyxrc.print_evenpage_flag = fl_get_input(printer_->input_even_pages);
|
|
|
|
lyxrc.print_oddpage_flag = fl_get_input(printer_->input_odd_pages);
|
|
|
|
lyxrc.print_collcopies_flag = fl_get_input(printer_->input_collated);
|
|
|
|
lyxrc.print_landscape_flag = fl_get_input(printer_->input_landscape);
|
|
|
|
lyxrc.print_to_file = fl_get_input(printer_->input_to_file);
|
|
|
|
lyxrc.print_extra_options =
|
|
|
|
fl_get_input(printer_->input_extra_options);
|
|
|
|
lyxrc.print_spool_printerprefix =
|
|
|
|
fl_get_input(printer_->input_spool_prefix);
|
|
|
|
lyxrc.print_paper_dimension_flag =
|
|
|
|
fl_get_input(printer_->input_paper_size);
|
|
|
|
lyxrc.printer = fl_get_input(printer_->input_name);
|
|
|
|
// paths
|
|
|
|
lyxrc.document_path = fl_get_input(paths_->input_default_path);
|
|
|
|
lyxrc.template_path = fl_get_input(paths_->input_template_path);
|
|
|
|
lyxrc.tempdir_path = fl_get_input(paths_->input_temp_dir);
|
|
|
|
lyxrc.lastfiles = fl_get_input(paths_->input_lastfiles);
|
|
|
|
lyxrc.backupdir_path = fl_get_input(paths_->input_backup_path);
|
|
|
|
lyxrc.use_tempdir = fl_get_button(paths_->check_use_temp_dir);
|
|
|
|
lyxrc.check_lastfiles = fl_get_button(paths_->check_last_files);
|
|
|
|
lyxrc.make_backup = fl_get_button(paths_->check_make_backups);
|
|
|
|
lyxrc.num_lastfiles = static_cast<unsigned int>
|
|
|
|
(fl_get_counter_value(paths_->counter_lastfiles));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void FormPreferences::update()
|
|
|
|
{
|
|
|
|
if (dialog_) {
|
|
|
|
// read lyxrc entries
|
|
|
|
// Bind tab
|
|
|
|
fl_set_input(bind_->input_bind, lyxrc.bind_file.c_str());
|
|
|
|
// Misc tab
|
|
|
|
fl_set_button(misc_->check_banner,
|
|
|
|
lyxrc.show_banner);
|
|
|
|
fl_set_button(misc_->check_auto_region_delete,
|
|
|
|
lyxrc.auto_region_delete);
|
|
|
|
fl_set_button(misc_->check_exit_confirm,
|
|
|
|
lyxrc.exit_confirmation);
|
|
|
|
fl_set_button(misc_->check_display_shortcuts,
|
|
|
|
lyxrc.display_shortcuts);
|
|
|
|
fl_set_counter_value(misc_->counter_autosave,
|
|
|
|
lyxrc.autosave);
|
|
|
|
fl_set_counter_value(misc_->counter_line_len,
|
|
|
|
lyxrc.ascii_linelen);
|
|
|
|
// Screen fonts
|
|
|
|
fl_set_input(screen_fonts_->input_roman,
|
|
|
|
lyxrc.roman_font_name.c_str());
|
|
|
|
fl_set_input(screen_fonts_->input_sans,
|
|
|
|
lyxrc.sans_font_name.c_str());
|
|
|
|
fl_set_input(screen_fonts_->input_typewriter,
|
|
|
|
lyxrc.typewriter_font_name.c_str());
|
2000-08-14 05:24:35 +00:00
|
|
|
fl_set_input(screen_fonts_->input_screen_encoding,
|
2000-06-12 11:55:12 +00:00
|
|
|
lyxrc.font_norm.c_str());
|
|
|
|
fl_set_button(screen_fonts_->check_scalable,
|
|
|
|
lyxrc.use_scalable_fonts);
|
|
|
|
fl_set_counter_value(screen_fonts_->counter_zoom,
|
|
|
|
lyxrc.zoom);
|
|
|
|
fl_set_input(screen_fonts_->input_tiny,
|
|
|
|
tostr(lyxrc.font_sizes[LyXFont::SIZE_TINY]).c_str());
|
|
|
|
fl_set_input(screen_fonts_->input_script,
|
|
|
|
tostr(lyxrc.font_sizes[LyXFont::SIZE_SCRIPT]).c_str());
|
|
|
|
fl_set_input(screen_fonts_->input_footnote,
|
|
|
|
tostr(lyxrc.font_sizes[LyXFont::SIZE_FOOTNOTE]).c_str());
|
|
|
|
fl_set_input(screen_fonts_->input_small,
|
|
|
|
tostr(lyxrc.font_sizes[LyXFont::SIZE_SMALL]).c_str());
|
|
|
|
fl_set_input(screen_fonts_->input_normal,
|
|
|
|
tostr(lyxrc.font_sizes[LyXFont::SIZE_NORMAL]).c_str());
|
|
|
|
fl_set_input(screen_fonts_->input_large,
|
|
|
|
tostr(lyxrc.font_sizes[LyXFont::SIZE_LARGE]).c_str());
|
|
|
|
fl_set_input(screen_fonts_->input_larger,
|
|
|
|
tostr(lyxrc.font_sizes[LyXFont::SIZE_LARGER]).c_str());
|
|
|
|
fl_set_input(screen_fonts_->input_largest,
|
|
|
|
tostr(lyxrc.font_sizes[LyXFont::SIZE_LARGEST]).c_str());
|
|
|
|
fl_set_input(screen_fonts_->input_huge,
|
|
|
|
tostr(lyxrc.font_sizes[LyXFont::SIZE_HUGE]).c_str());
|
|
|
|
fl_set_input(screen_fonts_->input_huger,
|
|
|
|
tostr(lyxrc.font_sizes[LyXFont::SIZE_HUGER]).c_str());
|
|
|
|
// interface fonts
|
|
|
|
fl_set_input(interface_fonts_->input_popup_font,
|
|
|
|
lyxrc.popup_font_name.c_str());
|
|
|
|
fl_set_input(interface_fonts_->input_menu_font,
|
|
|
|
lyxrc.menu_font_name.c_str());
|
2000-08-14 05:24:35 +00:00
|
|
|
fl_set_input(interface_fonts_->input_popup_encoding,
|
2000-06-12 11:55:12 +00:00
|
|
|
lyxrc.font_norm_menu.c_str());
|
|
|
|
// printer
|
|
|
|
fl_set_button(printer_->check_adapt_output,
|
|
|
|
lyxrc.print_adapt_output);
|
|
|
|
fl_set_input(printer_->input_command,
|
|
|
|
lyxrc.print_command.c_str());
|
|
|
|
fl_set_input(printer_->input_page_range,
|
|
|
|
lyxrc.print_pagerange_flag.c_str());
|
|
|
|
fl_set_input(printer_->input_copies,
|
|
|
|
lyxrc.print_copies_flag.c_str());
|
|
|
|
fl_set_input(printer_->input_reverse,
|
|
|
|
lyxrc.print_reverse_flag.c_str());
|
|
|
|
fl_set_input(printer_->input_to_printer,
|
|
|
|
lyxrc.print_to_printer.c_str());
|
|
|
|
fl_set_input(printer_->input_file_extension,
|
|
|
|
lyxrc.print_file_extension.c_str());
|
|
|
|
fl_set_input(printer_->input_spool_command,
|
|
|
|
lyxrc.print_spool_command.c_str());
|
|
|
|
fl_set_input(printer_->input_paper_type,
|
|
|
|
lyxrc.print_paper_flag.c_str());
|
|
|
|
fl_set_input(printer_->input_even_pages,
|
|
|
|
lyxrc.print_evenpage_flag.c_str());
|
|
|
|
fl_set_input(printer_->input_odd_pages,
|
|
|
|
lyxrc.print_oddpage_flag.c_str());
|
|
|
|
fl_set_input(printer_->input_collated,
|
|
|
|
lyxrc.print_collcopies_flag.c_str());
|
|
|
|
fl_set_input(printer_->input_landscape,
|
|
|
|
lyxrc.print_landscape_flag.c_str());
|
|
|
|
fl_set_input(printer_->input_to_file,
|
|
|
|
lyxrc.print_to_file.c_str());
|
|
|
|
fl_set_input(printer_->input_extra_options,
|
|
|
|
lyxrc.print_extra_options.c_str());
|
|
|
|
fl_set_input(printer_->input_spool_prefix,
|
|
|
|
lyxrc.print_spool_printerprefix.c_str());
|
|
|
|
fl_set_input(printer_->input_paper_size,
|
|
|
|
lyxrc.print_paper_dimension_flag.c_str());
|
|
|
|
fl_set_input(printer_->input_name,
|
|
|
|
lyxrc.printer.c_str());
|
|
|
|
// paths
|
|
|
|
fl_set_input(paths_->input_default_path,
|
|
|
|
lyxrc.document_path.c_str());
|
|
|
|
fl_set_input(paths_->input_template_path,
|
|
|
|
lyxrc.template_path.c_str());
|
|
|
|
fl_set_input(paths_->input_temp_dir,
|
|
|
|
lyxrc.tempdir_path.c_str());
|
|
|
|
fl_set_input(paths_->input_lastfiles,
|
|
|
|
lyxrc.lastfiles.c_str());
|
|
|
|
fl_set_input(paths_->input_backup_path,
|
|
|
|
lyxrc.backupdir_path.c_str());
|
|
|
|
fl_set_button(paths_->check_use_temp_dir,
|
|
|
|
lyxrc.use_tempdir);
|
|
|
|
fl_set_button(paths_->check_last_files,
|
|
|
|
lyxrc.check_lastfiles);
|
|
|
|
fl_set_button(paths_->check_make_backups,
|
|
|
|
lyxrc.make_backup);
|
|
|
|
fl_set_counter_value(paths_->counter_lastfiles,
|
|
|
|
lyxrc.num_lastfiles);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2000-08-14 05:24:35 +00:00
|
|
|
bool FormPreferences::input()
|
2000-06-12 11:55:12 +00:00
|
|
|
{
|
|
|
|
bool activate = true;
|
|
|
|
//
|
2000-07-28 04:59:45 +00:00
|
|
|
// whatever checks you need to ensure the user hasn't entered
|
|
|
|
// some totally ridiculous value somewhere. Change activate to suit.
|
|
|
|
//
|
|
|
|
// Examples:
|
|
|
|
// paths -- all dirs in the path should exist, be writable & absolute
|
|
|
|
if (!AbsolutePath(fl_get_input(paths_->input_default_path))
|
|
|
|
|| 1 != IsDirWriteable(fl_get_input(paths_->input_default_path))
|
|
|
|
|| !AbsolutePath(fl_get_input(paths_->input_template_path))
|
|
|
|
|| 1 != IsDirWriteable(fl_get_input(paths_->input_template_path))
|
|
|
|
// lastfiles: exists && writeable || non-existent && isn't a dir
|
|
|
|
// NOTE: assumes IsFileWriteable == -1 means non-existent hence
|
|
|
|
// the extra check to see if its a directory
|
|
|
|
|| !AbsolutePath(fl_get_input(paths_->input_lastfiles))
|
|
|
|
|| 1 != IsDirWriteable(OnlyPath(fl_get_input(paths_->
|
|
|
|
input_lastfiles)))
|
|
|
|
|| 0 == IsFileWriteable(OnlyPath(fl_get_input(paths_->
|
|
|
|
input_lastfiles)))
|
|
|
|
|| FileInfo(fl_get_input(paths_->input_lastfiles)).isDir()
|
|
|
|
// tmpdir: only check if we are using it
|
|
|
|
|| (fl_get_button(paths_->check_use_temp_dir)
|
|
|
|
&& (1 != IsDirWriteable(fl_get_input(paths_->input_temp_dir))
|
|
|
|
|| !AbsolutePath(fl_get_input(paths_->input_temp_dir))))
|
|
|
|
// backupdir: can safely be left empty
|
|
|
|
|| (fl_get_button(paths_->check_make_backups)
|
|
|
|
&& (!string(fl_get_input(paths_->input_backup_path)).empty()
|
|
|
|
&& (1 != IsDirWriteable(fl_get_input(paths_->
|
|
|
|
input_backup_path))
|
|
|
|
|| !AbsolutePath(fl_get_input(paths_->
|
|
|
|
input_backup_path)))))) {
|
|
|
|
activate = false;
|
2000-08-14 05:24:35 +00:00
|
|
|
lyxerr[Debug::GUI] << "Preferences: Path is wrong\n";
|
2000-07-28 04:59:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// fontsizes -- tiny < script < footnote etc.
|
|
|
|
if (0.0 >= strToDbl(fl_get_input(screen_fonts_->input_tiny))
|
|
|
|
|| 0.0 >= strToDbl(fl_get_input(screen_fonts_->input_script))
|
|
|
|
|| 0.0 >= strToDbl(fl_get_input(screen_fonts_->input_footnote))
|
|
|
|
|| 0.0 >= strToDbl(fl_get_input(screen_fonts_->input_small))
|
|
|
|
|| 0.0 >= strToDbl(fl_get_input(screen_fonts_->input_normal))
|
|
|
|
|| 0.0 >= strToDbl(fl_get_input(screen_fonts_->input_large))
|
|
|
|
|| 0.0 >= strToDbl(fl_get_input(screen_fonts_->input_larger))
|
|
|
|
|| 0.0 >= strToDbl(fl_get_input(screen_fonts_->input_largest))
|
|
|
|
|| 0.0 >= strToDbl(fl_get_input(screen_fonts_->input_huge))
|
|
|
|
|| 0.0 >= strToDbl(fl_get_input(screen_fonts_->input_huger))) {
|
|
|
|
// make sure they all have positive entries
|
|
|
|
// Also note that an empty entry is returned as 0.0 by strToDbl
|
|
|
|
activate = false;
|
2000-08-14 05:24:35 +00:00
|
|
|
lyxerr[Debug::GUI] << "Preferences: Sizes are wrong\n";
|
2000-07-28 04:59:45 +00:00
|
|
|
} else if (strToDbl(fl_get_input(screen_fonts_->input_tiny)) >
|
|
|
|
strToDbl(fl_get_input(screen_fonts_->input_script)) ||
|
|
|
|
strToDbl(fl_get_input(screen_fonts_->input_script)) >
|
|
|
|
strToDbl(fl_get_input(screen_fonts_->input_footnote)) ||
|
|
|
|
strToDbl(fl_get_input(screen_fonts_->input_footnote)) >
|
|
|
|
strToDbl(fl_get_input(screen_fonts_->input_small)) ||
|
|
|
|
strToDbl(fl_get_input(screen_fonts_->input_small)) >
|
|
|
|
strToDbl(fl_get_input(screen_fonts_->input_normal)) ||
|
|
|
|
strToDbl(fl_get_input(screen_fonts_->input_normal)) >
|
|
|
|
strToDbl(fl_get_input(screen_fonts_->input_large)) ||
|
|
|
|
strToDbl(fl_get_input(screen_fonts_->input_large)) >
|
|
|
|
strToDbl(fl_get_input(screen_fonts_->input_larger)) ||
|
|
|
|
strToDbl(fl_get_input(screen_fonts_->input_larger)) >
|
|
|
|
strToDbl(fl_get_input(screen_fonts_->input_largest)) ||
|
|
|
|
strToDbl(fl_get_input(screen_fonts_->input_largest)) >
|
|
|
|
strToDbl(fl_get_input(screen_fonts_->input_huge)) ||
|
|
|
|
strToDbl(fl_get_input(screen_fonts_->input_huge)) >
|
|
|
|
strToDbl(fl_get_input(screen_fonts_->input_huger))) {
|
|
|
|
activate = false;
|
2000-08-14 05:24:35 +00:00
|
|
|
lyxerr[Debug::GUI] << "Preferences: Sizes are wrong\n";
|
2000-07-28 04:59:45 +00:00
|
|
|
}
|
|
|
|
|
2000-08-14 05:24:35 +00:00
|
|
|
return activate;
|
2000-06-12 11:55:12 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int FormPreferences::WMHideCB(FL_FORM * form, void *)
|
|
|
|
{
|
|
|
|
// Ensure that the signals (u and h) are disconnected even if the
|
|
|
|
// window manager is used to close the dialog.
|
|
|
|
FormPreferences * pre = static_cast<FormPreferences*>(form->u_vdata);
|
|
|
|
pre->hide();
|
2000-08-18 00:58:58 +00:00
|
|
|
pre->bc_->hide();
|
2000-06-12 11:55:12 +00:00
|
|
|
return FL_CANCEL;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void FormPreferences::OKCB(FL_OBJECT * ob, long)
|
|
|
|
{
|
|
|
|
FormPreferences * pre = static_cast<FormPreferences*>(ob->form->u_vdata);
|
|
|
|
pre->apply();
|
|
|
|
pre->hide();
|
2000-08-18 00:58:58 +00:00
|
|
|
pre->bc_->ok();
|
2000-06-12 11:55:12 +00:00
|
|
|
pre->lv_->getLyXFunc()->Dispatch(LFUN_SAVEPREFERENCES);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void FormPreferences::ApplyCB(FL_OBJECT * ob, long)
|
|
|
|
{
|
|
|
|
FormPreferences * pre = static_cast<FormPreferences*>(ob->form->u_vdata);
|
|
|
|
pre->apply();
|
2000-08-18 00:58:58 +00:00
|
|
|
pre->bc_->apply();
|
2000-06-12 11:55:12 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void FormPreferences::CancelCB(FL_OBJECT * ob, long)
|
|
|
|
{
|
|
|
|
FormPreferences * pre = static_cast<FormPreferences*>(ob->form->u_vdata);
|
|
|
|
pre->hide();
|
2000-08-18 00:58:58 +00:00
|
|
|
pre->bc_->cancel();
|
2000-06-12 11:55:12 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void FormPreferences::InputCB(FL_OBJECT * ob, long)
|
|
|
|
{
|
|
|
|
FormPreferences * pre = static_cast<FormPreferences*>(ob->form->u_vdata);
|
2000-08-14 05:24:35 +00:00
|
|
|
pre->bc_->valid(pre->input());
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void FormPreferences::RestoreCB(FL_OBJECT * ob, long)
|
|
|
|
{
|
|
|
|
FormPreferences * pre = static_cast<FormPreferences*>(ob->form->u_vdata);
|
|
|
|
pre->update();
|
2000-06-12 11:55:12 +00:00
|
|
|
pre->input();
|
2000-08-14 05:24:35 +00:00
|
|
|
pre->bc_->undoAll();
|
2000-06-12 11:55:12 +00:00
|
|
|
}
|