X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fxforms%2FFormDocument.C;h=0a114121bb0a6d3e7b95cb3bc7396e622b3e34fc;hb=9f29ab3aa5fb11baca9bc28dc3710076cb3a2645;hp=3f84108046976287235498299c54b52ae8ef17c2;hpb=b88c49ebd758791f8805d6602901bc4fe15d43cd;p=lyx.git diff --git a/src/frontends/xforms/FormDocument.C b/src/frontends/xforms/FormDocument.C index 3f84108046..0a114121bb 100644 --- a/src/frontends/xforms/FormDocument.C +++ b/src/frontends/xforms/FormDocument.C @@ -3,7 +3,7 @@ * * LyX, The Document Processor * - * Copyright (C) 2000 The LyX Team. + * Copyright 2000 The LyX Team. * * @author Jürgen Vigna * @@ -11,18 +11,17 @@ #include +#include FORMS_H_LOCATION +#include XPM_H_LOCATION + #ifdef __GNUG_ #pragma implementation #endif #include "lyx_gui_misc.h" -#include "gettext.h" -#include FORMS_H_LOCATION -#include XPM_H_LOCATION #include "FormDocument.h" #include "form_document.h" -#include "xform_macros.h" #include "Dialogs.h" #include "layout.h" #include "combox.h" @@ -39,65 +38,57 @@ #include "Liason.h" #include "CutAndPaste.h" #include "bufferview_funcs.h" -#include "ButtonController.h" +#include "xforms_helpers.h" -#ifdef SIGC_CXX_NAMESPACES -using SigC::slot; -#endif - -#ifdef CXX_WORKING_NAMESPACES using Liason::setMinibuffer; -#endif - -C_RETURNCB(FormDocument, WMHideCB) -C_GENERICCB(FormDocument, InputCB) -C_GENERICCB(FormDocument, OKCB) -C_GENERICCB(FormDocument, ApplyCB) -C_GENERICCB(FormDocument, CancelCB) -C_GENERICCB(FormDocument, RestoreCB) -C_GENERICCB(FormDocument, ChoiceClassCB) -C_GENERICCB(FormDocument, BulletPanelCB) -C_GENERICCB(FormDocument, BulletDepthCB) -C_GENERICCB(FormDocument, InputBulletLaTeXCB) -C_GENERICCB(FormDocument, ChoiceBulletSizeCB) +using SigC::slot; FormDocument::FormDocument(LyXView * lv, Dialogs * d) - : dialog_(0), paper_(0), class_(0), language_(0), options_(0), - bullets_(0), lv_(lv), d_(d), u_(0), h_(0), - status(POPUP_UNMODIFIED) , - bc_(new ButtonController(_("Cancel"), - _("Close"))) + : FormBaseBD(lv, d, _("Document Layout")), fbullet(0) { // let the popup be shown // This is a permanent connection so we won't bother // storing a copy because we won't be disconnecting. d->showLayoutDocument.connect(slot(this, &FormDocument::show)); - current_bullet_depth = 0; - current_bullet_panel = 0; } -FormDocument::~FormDocument() + +void FormDocument::redraw() { - free(); - delete bc_; + if( form() && form()->visible ) + fl_redraw_form( form() ); + else + return; + + FL_FORM * outer_form = fl_get_active_folder(dialog_->tabbed_folder); + if (outer_form && outer_form->visible) + fl_redraw_form( outer_form ); +} + + +FL_FORM * FormDocument::form() const +{ + if (dialog_.get()) return dialog_->form; + return 0; } + void FormDocument::build() { int n; // the tabbed folder - dialog_ = build_tabbed_document(); + dialog_.reset(build_tabbed_document()); - // manage the restore, save, apply and cancel/close buttons - bc_->setOK(dialog_->button_ok); - bc_->setApply(dialog_->button_apply); - bc_->setCancel(dialog_->button_cancel); - bc_->setUndoAll(dialog_->button_restore); - bc_->refresh(); + // Manage the restore, ok, apply, restore and cancel/close buttons + bc().setOK(dialog_->button_ok); + bc().setApply(dialog_->button_apply); + bc().setCancel(dialog_->button_cancel); + bc().setUndoAll(dialog_->button_restore); + bc().refresh(); // the document paper form - paper_ = build_doc_paper(); + paper_.reset(build_doc_paper()); fl_addto_choice(paper_->choice_papersize2, _(" Default | Custom | USletter | USlegal " "| USexecutive | A3 | A4 | A5 | B3 | B4 | B5 ")); @@ -106,63 +97,113 @@ void FormDocument::build() "| A4 small Margins (only portrait) " "| A4 very small Margins (only portrait) " "| A4 very wide margins (only portrait) ")); - fl_set_input_return(paper_->input_custom_width, FL_RETURN_ALWAYS); - fl_set_input_return(paper_->input_custom_height, FL_RETURN_ALWAYS); - fl_set_input_return(paper_->input_top_margin, FL_RETURN_ALWAYS); - fl_set_input_return(paper_->input_bottom_margin, FL_RETURN_ALWAYS); - fl_set_input_return(paper_->input_left_margin, FL_RETURN_ALWAYS); - fl_set_input_return(paper_->input_right_margin, FL_RETURN_ALWAYS); - fl_set_input_return(paper_->input_head_height, FL_RETURN_ALWAYS); - fl_set_input_return(paper_->input_head_sep, FL_RETURN_ALWAYS); - fl_set_input_return(paper_->input_foot_skip, FL_RETURN_ALWAYS); + fl_set_input_return(paper_->input_custom_width, FL_RETURN_CHANGED); + fl_set_input_return(paper_->input_custom_height, FL_RETURN_CHANGED); + fl_set_input_return(paper_->input_top_margin, FL_RETURN_CHANGED); + fl_set_input_return(paper_->input_bottom_margin, FL_RETURN_CHANGED); + fl_set_input_return(paper_->input_left_margin, FL_RETURN_CHANGED); + fl_set_input_return(paper_->input_right_margin, FL_RETURN_CHANGED); + fl_set_input_return(paper_->input_head_height, FL_RETURN_CHANGED); + fl_set_input_return(paper_->input_head_sep, FL_RETURN_CHANGED); + fl_set_input_return(paper_->input_foot_skip, FL_RETURN_CHANGED); + + bc().addReadOnly (paper_->choice_paperpackage); + bc().addReadOnly (paper_->greoup_radio_orientation); + bc().addReadOnly (paper_->radio_portrait); + bc().addReadOnly (paper_->radio_landscape); + bc().addReadOnly (paper_->choice_papersize2); + bc().addReadOnly (paper_->push_use_geometry); + bc().addReadOnly (paper_->input_custom_width); + bc().addReadOnly (paper_->input_custom_height); + bc().addReadOnly (paper_->input_top_margin); + bc().addReadOnly (paper_->input_bottom_margin); + bc().addReadOnly (paper_->input_left_margin); + bc().addReadOnly (paper_->input_right_margin); + bc().addReadOnly (paper_->input_head_height); + bc().addReadOnly (paper_->input_head_sep); + bc().addReadOnly (paper_->input_foot_skip); // the document class form - class_ = build_doc_class(); - fl_clear_choice(class_->choice_doc_class); + class_.reset(build_doc_class()); + + FL_OBJECT * obj; + // The language is a combo-box and has to be inserted manually + obj = class_->choice_doc_class; + fl_deactivate_object(obj); + fl_addto_form(class_->form); + combo_doc_class.reset(new Combox(FL_COMBOX_DROPLIST)); + combo_doc_class->add(obj->x, obj->y, obj->w, obj->h, 400, + dialog_->tabbed_folder); + combo_doc_class->shortcut("#C",1); + combo_doc_class->setcallback(ComboInputCB, this); + fl_end_form(); for (LyXTextClassList::const_iterator cit = textclasslist.begin(); cit != textclasslist.end(); ++cit) { - fl_addto_choice(class_->choice_doc_class,(*cit).description().c_str()); + combo_doc_class->addto((*cit).description()); } + fl_addto_choice(class_->choice_doc_spacing, _(" Single | OneHalf | Double | Other ")); fl_addto_choice(class_->choice_doc_fontsize, "default|10|11|12"); - for (n=0; tex_fonts[n][0]; ++n) { + for (n=0; tex_fonts[n][0]; ++n) { fl_addto_choice(class_->choice_doc_fonts,tex_fonts[n]); } fl_addto_choice(class_->choice_doc_pagestyle, "default|empty|plain|headings|fancy"); fl_addto_choice(class_->choice_doc_skip, _(" Smallskip | Medskip | Bigskip | Length ")); - fl_set_input_return(class_->input_doc_skip, FL_RETURN_ALWAYS); - fl_set_input_return(class_->input_doc_spacing, FL_RETURN_ALWAYS); + fl_set_input_return(class_->input_doc_extra, FL_RETURN_CHANGED); + fl_set_input_return(class_->input_doc_skip, FL_RETURN_CHANGED); + fl_set_input_return(class_->input_doc_spacing, FL_RETURN_CHANGED); + + bc().addReadOnly (class_->radio_doc_indent); + bc().addReadOnly (class_->radio_doc_skip); + + bc().addReadOnly (class_->choice_doc_pagestyle); + bc().addReadOnly (class_->choice_doc_fonts); + bc().addReadOnly (class_->choice_doc_fontsize); + bc().addReadOnly (class_->radio_doc_sides_one); + bc().addReadOnly (class_->radio_doc_sides_two); + bc().addReadOnly (class_->radio_doc_columns_one); + bc().addReadOnly (class_->radio_doc_columns_two); + bc().addReadOnly (class_->input_doc_extra); + bc().addReadOnly (class_->input_doc_skip); + bc().addReadOnly (class_->choice_doc_skip); + bc().addReadOnly (class_->choice_doc_spacing); + bc().addReadOnly (class_->input_doc_spacing); // the document language form - language_ = build_doc_language(); + language_.reset(build_doc_language()); fl_addto_choice(language_->choice_inputenc, "default|auto|latin1|latin2|latin5" "|koi8-r|koi8-u|cp866|cp1251|iso88595"); // The language is a combo-box and has to be inserted manually - FL_OBJECT * obj = language_->choice_language; + obj = language_->choice_language; + fl_deactivate_object(obj); fl_addto_form(language_->form); - combo_language = new Combox(FL_COMBOX_DROPLIST); - combo_language->add(obj->x, obj->y, obj->w, obj->h, 200); + combo_language.reset(new Combox(FL_COMBOX_DROPLIST)); + combo_language->add(obj->x, obj->y, obj->w, obj->h, 400, + dialog_->tabbed_folder); combo_language->shortcut("#L",1); + combo_language->setcallback(ComboInputCB, this); fl_end_form(); - // "default" is not part of the languages array any more. - combo_language->addto("default"); - for(Languages::const_iterator cit = languages.begin(); + + for (Languages::const_iterator cit = languages.begin(); cit != languages.end(); ++cit) { - combo_language->addto((*cit).second.lang().c_str()); + combo_language->addto((*cit).second.lang()); } fl_addto_choice(language_->choice_quotes_language, _(" ``text'' | ''text'' | ,,text`` | ,,text'' |" " «text» | »text« ")); + bc().addReadOnly (language_->choice_inputenc); + // the document options form - options_ = build_doc_options(); + options_.reset(build_doc_options()); + fl_set_input_return(options_->input_float_placement, FL_RETURN_CHANGED); fl_set_counter_bounds(options_->slider_secnumdepth,-2,5); fl_set_counter_bounds(options_->slider_tocdepth,-1,5); fl_set_counter_step(options_->slider_secnumdepth,1,1); @@ -172,9 +213,15 @@ void FormDocument::build() for (n=0; tex_graphics[n][0]; ++n) { fl_addto_choice(options_->choice_postscript_driver, tex_graphics[n]); } - + + bc().addReadOnly (options_->slider_secnumdepth); + bc().addReadOnly (options_->slider_tocdepth); + bc().addReadOnly (options_->check_use_amsmath); + bc().addReadOnly (options_->input_float_placement); + bc().addReadOnly (options_->choice_postscript_driver); + // the document bullets form - bullets_ = build_doc_bullet(); + bullets_.reset(build_doc_bullet()); fl_addto_choice(bullets_->choice_bullet_size, _(" default | tiny | script | footnote | small |" " normal | large | Large | LARGE | huge | Huge")); @@ -182,8 +229,10 @@ void FormDocument::build() fl_set_input_return(bullets_->input_bullet_latex, FL_RETURN_CHANGED); fl_set_input_maxchars(bullets_->input_bullet_latex, 80); - fl_set_form_atclose(dialog_->form, - FormDocument::WMHideCB, 0); + bc().addReadOnly (bullets_->bmtable_bullet_panel); + bc().addReadOnly (bullets_->choice_bullet_size); + bc().addReadOnly (bullets_->input_bullet_latex); + fl_addto_tabfolder(dialog_->tabbed_folder,_("Document"), class_->form); fl_addto_tabfolder(dialog_->tabbed_folder,_("Paper"), @@ -203,43 +252,13 @@ void FormDocument::build() } } -void FormDocument::show() -{ - if (!dialog_) - build(); - - update(); // make sure its up-to-date - if (dialog_->form->visible) { - fl_raise_form(dialog_->form); - } else { - fl_show_form(dialog_->form, - FL_PLACE_MOUSE | FL_FREE_SIZE, - FL_TRANSIENT, _("Document Layout")); - u_ = d_->updateBufferDependent.connect( - slot(this, &FormDocument::update)); - h_ = d_->hideBufferDependent.connect( - slot(this, &FormDocument::hide)); - } -} - -void FormDocument::hide() -{ - if (dialog_->form->visible) { - fl_hide_form(dialog_->form); - u_.disconnect(); - h_.disconnect(); - } -} void FormDocument::apply() { - if (!lv_->view()->available() || !dialog_) + if (!lv_->view()->available() || !dialog_.get()) return; - bool - redo; - - redo = class_apply(); + bool redo = class_apply(); paper_apply(); redo = language_apply() || redo; redo = options_apply() || redo; @@ -253,6 +272,94 @@ void FormDocument::apply() } +void FormDocument::cancel() +{ + // this avoids confusion when reopening + BufferParams & param = lv_->buffer()->params; + param.temp_bullets[0] = param.user_defined_bullets[0]; + param.temp_bullets[1] = param.user_defined_bullets[1]; + param.temp_bullets[2] = param.user_defined_bullets[2]; + param.temp_bullets[3] = param.user_defined_bullets[3]; + hide(); +} + + +void FormDocument::update() +{ + if (!dialog_.get()) + return; + + checkReadOnly(); + + BufferParams const & params = lv_->buffer()->params; + + class_update(params); + paper_update(params); + language_update(params); + options_update(params); + bullets_update(params); +} + + +bool FormDocument::input( FL_OBJECT * ob, long data ) +{ + State cb = static_cast( data ); + + switch (cb) { + case CHECKCHOICECLASS: + CheckChoiceClass(ob, 0); + break; + case CHOICEBULLETSIZE: + ChoiceBulletSize(ob, 0); + break; + case INPUTBULLETLATEX: + InputBulletLaTeX(ob, 0); + break; + case BULLETDEPTH1: + case BULLETDEPTH2: + case BULLETDEPTH3: + case BULLETDEPTH4: + BulletDepth(ob, cb); + break; + case BULLETPANEL1: + case BULLETPANEL2: + case BULLETPANEL3: + case BULLETPANEL4: + case BULLETPANEL5: + case BULLETPANEL6: + BulletPanel(ob, cb); + break; + case BULLETBMTABLE: + BulletBMTable(ob, 0); + break; + default: + break; + } + + switch (data) { + case INPUT: + case CHECKCHOICECLASS: + case CHOICEBULLETSIZE: + case INPUTBULLETLATEX: + case BULLETBMTABLE: + return CheckDocumentInput(ob, 0); + default: + break; + } + + return true; +} + + +void FormDocument::ComboInputCB(int, void * v, Combox * combox) +{ + FormDocument * pre = static_cast(v); + if (combox == pre->combo_doc_class.get()) + pre->CheckChoiceClass(0, 0); + pre->bc().valid(pre->CheckDocumentInput(0,0)); +} + + bool FormDocument::class_apply() { bool redo = false; @@ -267,8 +374,9 @@ bool FormDocument::class_apply() params.fonts = fl_get_choice_text(class_->choice_doc_fonts); params.fontsize = fl_get_choice_text(class_->choice_doc_fontsize); params.pagestyle = fl_get_choice_text(class_->choice_doc_pagestyle); - - unsigned int new_class = fl_get_choice(class_->choice_doc_class) - 1; + + unsigned int const new_class = combo_doc_class->get() - 1; + if (params.textclass != new_class) { // try to load new_class if (textclasslist.Load(new_class)) { @@ -297,11 +405,10 @@ bool FormDocument::class_apply() WriteAlert(_("Conversion Errors!"), _("Errors loading new document class."), _("Reverting to original document class.")); - fl_set_choice(class_->choice_doc_class, - params.textclass + 1); + combo_doc_class->select(int(params.textclass) + 1); } } - char tmpsep = params.paragraph_separation; + BufferParams::PARSEP tmpsep = params.paragraph_separation; if (fl_get_button(class_->radio_doc_indent)) params.paragraph_separation = BufferParams::PARSEP_INDENT; else @@ -342,7 +449,7 @@ bool FormDocument::class_apply() params.sides = LyXTextClass::OneSide; Spacing tmpSpacing = params.spacing; - switch(fl_get_choice(class_->choice_doc_spacing)) { + switch (fl_get_choice(class_->choice_doc_spacing)) { case 1: lyxerr[Debug::INFO] << "Spacing: SINGLE\n"; params.spacing.set(Spacing::Single); @@ -369,13 +476,15 @@ bool FormDocument::class_apply() return redo; } + void FormDocument::paper_apply() { - BufferParams - ¶ms = lv_->buffer()->params; + BufferParams & params = lv_->buffer()->params; - params.papersize2 = fl_get_choice(paper_->choice_papersize2)-1; - params.paperpackage = fl_get_choice(paper_->choice_paperpackage)-1; + params.papersize2 = + static_cast(fl_get_choice(paper_->choice_papersize2)-1); + params.paperpackage = + static_cast(fl_get_choice(paper_->choice_paperpackage)-1); params.use_geometry = fl_get_button(paper_->push_use_geometry); if (fl_get_button(paper_->radio_landscape)) params.orientation = BufferParams::ORIENTATION_LANDSCAPE; @@ -393,15 +502,14 @@ void FormDocument::paper_apply() lv_->buffer()->setPaperStuff(); } + bool FormDocument::language_apply() { - BufferParams - ¶ms = lv_->buffer()->params; - InsetQuotes::quote_language - lga = InsetQuotes::EnglishQ; + BufferParams & params = lv_->buffer()->params; + InsetQuotes::quote_language lga = InsetQuotes::EnglishQ; bool redo = false; - switch(fl_get_choice(language_->choice_quotes_language) - 1) { + switch (fl_get_choice(language_->choice_quotes_language) - 1) { case 0: lga = InsetQuotes::EnglishQ; break; @@ -427,14 +535,10 @@ bool FormDocument::language_apply() else params.quotes_times = InsetQuotes::DoubleQ; - Language const * old_language = params.language_info; - params.language = combo_language->getline(); - Languages::iterator lit = languages.find(params.language); - - Language const * new_language; - if (lit != languages.end()) - new_language = &(*lit).second; - else + Language const * old_language = params.language; + Language const * new_language = + languages.getLanguage(combo_language->getline()); + if (!new_language) new_language = default_language; if (old_language != new_language @@ -444,18 +548,17 @@ bool FormDocument::language_apply() if (old_language != new_language) { redo = true; } - params.language_info = new_language; + params.language = new_language; params.inputenc = fl_get_choice_text(language_->choice_inputenc); return redo; } + bool FormDocument::options_apply() { - BufferParams - ¶ms = lv_->buffer()->params; - bool - redo = false; + BufferParams & params = lv_->buffer()->params; + bool redo = false; params.graphicsDriver = fl_get_choice_text(options_->choice_postscript_driver); @@ -474,6 +577,7 @@ bool FormDocument::options_apply() return redo; } + void FormDocument::bullets_apply() { /* update the bullet settings */ @@ -486,49 +590,16 @@ void FormDocument::bullets_apply() param.user_defined_bullets[3] = param.temp_bullets[3]; } -void FormDocument::cancel() -{ - // this avoids confusion when reopening - BufferParams & param = lv_->buffer()->params; - param.temp_bullets[0] = param.user_defined_bullets[0]; - param.temp_bullets[1] = param.user_defined_bullets[1]; - param.temp_bullets[2] = param.user_defined_bullets[2]; - param.temp_bullets[3] = param.user_defined_bullets[3]; -} -void FormDocument::update() +void FormDocument::class_update(BufferParams const & params) { - if (!dialog_) + if (!class_.get()) return; - fl_hide_object(dialog_->text_warning); - EnableDocumentLayout(); - if (lv_->buffer()->isReadonly()) { - DisableDocumentLayout(); - fl_set_object_label(dialog_->text_warning, - _("Document is read-only." - " No changes to layout permitted.")); - fl_show_object(dialog_->text_warning); - } - BufferParams - const & params = lv_->buffer()->params; - - class_update(params); - paper_update(params); - language_update(params); - options_update(params); - bullets_update(params); -} + LyXTextClass const & tclass = textclasslist.TextClass(params.textclass); -void FormDocument::class_update(BufferParams const & params) -{ - if (!class_) - return; - LyXTextClass - const & tclass = textclasslist.TextClass(params.textclass); - - fl_set_choice_text(class_->choice_doc_class, - textclasslist.DescOfClass(params.textclass).c_str()); + combo_doc_class->select_text( + textclasslist.DescOfClass(params.textclass)); fl_set_choice_text(class_->choice_doc_fonts, params.fonts.c_str()); fl_clear_choice(class_->choice_doc_fontsize); fl_addto_choice(class_->choice_doc_fontsize, "default"); @@ -569,7 +640,7 @@ void FormDocument::class_update(BufferParams const & params) } fl_set_button(class_->radio_doc_sides_one, 0); fl_set_button(class_->radio_doc_sides_two, 0); - if (params.sides == 2) + if (params.sides == LyXTextClass::TwoSides) fl_set_button(class_->radio_doc_sides_two, 1); else fl_set_button(class_->radio_doc_sides_one, 1); @@ -609,12 +680,13 @@ void FormDocument::class_update(BufferParams const & params) fl_set_input(class_->input_doc_extra, ""); } + void FormDocument::language_update(BufferParams const & params) { - if (!language_) + if (!language_.get()) return; - combo_language->select_text(params.language.c_str()); + combo_language->select_text(params.language->lang()); fl_set_choice_text(language_->choice_inputenc, params.inputenc.c_str()); fl_set_choice(language_->choice_quotes_language, params.quotes_language + 1); fl_set_button(language_->radio_single, 0); @@ -625,9 +697,10 @@ void FormDocument::language_update(BufferParams const & params) fl_set_button(language_->radio_double, 1); } + void FormDocument::options_update(BufferParams const & params) { - if (!options_) + if (!options_.get()) return; fl_set_choice_text(options_->choice_postscript_driver, @@ -642,9 +715,10 @@ void FormDocument::options_update(BufferParams const & params) fl_set_input(options_->input_float_placement, ""); } + void FormDocument::paper_update(BufferParams const & params) { - if (!paper_) + if (!paper_.get()) return; fl_set_choice(paper_->choice_papersize2, params.papersize2 + 1); @@ -668,146 +742,63 @@ void FormDocument::paper_update(BufferParams const & params) fl_set_focus_object(paper_->form, paper_->choice_papersize2); } + void FormDocument::bullets_update(BufferParams const & params) { - if (!bullets_ || ((XpmVersion<4) || (XpmVersion==4 && XpmRevision<7))) + if (!bullets_.get() || ((XpmVersion<4) || (XpmVersion==4 && XpmRevision<7))) return; - if (lv_->buffer()->isLinuxDoc()) { - fl_deactivate_object(fbullet); - fl_set_object_lcol(fbullet, FL_INACTIVE); - return; - } else { - fl_activate_object(fbullet); - fl_set_object_lcol(fbullet, FL_BLACK); - } - if (lv_->buffer()->isReadonly()) { - fl_deactivate_object (bullets_->bmtable_bullet_panel); - fl_deactivate_object (bullets_->choice_bullet_size); - fl_deactivate_object (bullets_->input_bullet_latex); - } else { - fl_activate_object (bullets_->bmtable_bullet_panel); - fl_activate_object (bullets_->choice_bullet_size); - fl_activate_object (bullets_->input_bullet_latex); - } + bool const isLinuxDoc = lv_->buffer()->isLinuxDoc(); + setEnabled(fbullet, !isLinuxDoc); + + if (isLinuxDoc) return; fl_set_button(bullets_->radio_bullet_depth_1, 1); fl_set_input(bullets_->input_bullet_latex, - params.user_defined_bullets[0].c_str()); + params.user_defined_bullets[0].getText().c_str()); fl_set_choice(bullets_->choice_bullet_size, params.user_defined_bullets[0].getSize() + 2); } -void FormDocument::free() -{ - if (dialog_) { - hide(); - if (class_) { - fl_free_form(class_->form); - delete class_; - class_ = 0; - } - if (paper_) { - fl_free_form(paper_->form); - delete paper_; - paper_ = 0; - } - if (language_) { - delete combo_language; - fl_free_form(language_->form); - delete language_; - language_ = 0; - } - if (options_) { - fl_free_form(options_->form); - delete options_; - options_ = 0; - } - if (bullets_) { - fl_free_form(bullets_->form); - delete bullets_; - bullets_ = 0; - } - fl_free_form(dialog_->form); - delete dialog_; - dialog_ = 0; - } -} - -int FormDocument::WMHideCB(FL_FORM * form, void *) -{ - // Ensure that the signals (u and h) are disconnected even if the - // window manager is used to close the popup. - FormDocument * pre = (FormDocument*)form->u_vdata; - pre->hide(); - pre->bc_->hide(); - return FL_CANCEL; -} - -void FormDocument::OKCB(FL_OBJECT * ob, long) -{ - FormDocument * pre = (FormDocument*)ob->form->u_vdata; - pre->apply(); - pre->hide(); - pre->bc_->ok(); -} - -void FormDocument::ApplyCB(FL_OBJECT * ob, long) -{ - FormDocument * pre = (FormDocument*)ob->form->u_vdata; - pre->apply(); - pre->bc_->apply(); -} -void FormDocument::CancelCB(FL_OBJECT * ob, long) +void FormDocument::checkReadOnly() { - FormDocument * pre = (FormDocument*)ob->form->u_vdata; - pre->cancel(); - pre->hide(); - pre->bc_->cancel(); -} - -void FormDocument::RestoreCB(FL_OBJECT * ob, long) -{ - FormDocument * pre = static_cast(ob->form->u_vdata); - pre->update(); - pre->bc_->undoAll(); -} - -void FormDocument::InputCB(FL_OBJECT * ob, long) -{ - FormDocument * pre = (FormDocument*)ob->form->u_vdata; - pre->bc_->valid(pre->CheckDocumentInput(ob,0)); + if (bc().readOnly(lv_->buffer()->isReadonly())) { + combo_doc_class->deactivate(); + combo_language->deactivate(); + fl_set_object_label(dialog_->text_warning, + _("Document is read-only." + " No changes to layout permitted.")); + fl_show_object(dialog_->text_warning); + } else { + combo_doc_class->activate(); + combo_language->activate(); + fl_hide_object(dialog_->text_warning); + } } -void FormDocument::ChoiceClassCB(FL_OBJECT * ob, long) -{ - FormDocument * pre = (FormDocument*)ob->form->u_vdata; - pre->CheckChoiceClass(ob,0); - pre->bc_->valid(pre->CheckDocumentInput(ob,0)); -} void FormDocument::checkMarginValues() { - int allEmpty; - - allEmpty = (!strlen(fl_get_input(paper_->input_top_margin)) && - !strlen(fl_get_input(paper_->input_bottom_margin)) && - !strlen(fl_get_input(paper_->input_left_margin)) && - !strlen(fl_get_input(paper_->input_right_margin)) && - !strlen(fl_get_input(paper_->input_head_height)) && - !strlen(fl_get_input(paper_->input_head_sep)) && - !strlen(fl_get_input(paper_->input_foot_skip)) && - !strlen(fl_get_input(paper_->input_custom_width)) && - !strlen(fl_get_input(paper_->input_custom_height))); - if (!allEmpty) - fl_set_button(paper_->push_use_geometry, 1); + bool const not_empty = + strlen(fl_get_input(paper_->input_top_margin)) || + strlen(fl_get_input(paper_->input_bottom_margin)) || + strlen(fl_get_input(paper_->input_left_margin)) || + strlen(fl_get_input(paper_->input_right_margin)) || + strlen(fl_get_input(paper_->input_head_height)) || + strlen(fl_get_input(paper_->input_head_sep)) || + strlen(fl_get_input(paper_->input_foot_skip)) || + strlen(fl_get_input(paper_->input_custom_width)) || + strlen(fl_get_input(paper_->input_custom_height)); + if (not_empty) + fl_set_button(paper_->push_use_geometry, 1); } + bool FormDocument::CheckDocumentInput(FL_OBJECT * ob, long) { string str; - char val; + int val; bool ok = true; char const * input; @@ -893,12 +884,6 @@ bool FormDocument::CheckDocumentInput(FL_OBJECT * ob, long) return ok; } -void FormDocument::ChoiceBulletSizeCB(FL_OBJECT * ob, long) -{ - FormDocument * pre = (FormDocument*)ob->form->u_vdata; - pre->ChoiceBulletSize(ob,0); - pre->bc_->valid(pre->CheckDocumentInput(ob,0)); -} void FormDocument::ChoiceBulletSize(FL_OBJECT * ob, long /*data*/ ) { @@ -907,15 +892,9 @@ void FormDocument::ChoiceBulletSize(FL_OBJECT * ob, long /*data*/ ) // convert from 1-6 range to -1-4 param.temp_bullets[current_bullet_depth].setSize(fl_get_choice(ob) - 2); fl_set_input(bullets_->input_bullet_latex, - param.temp_bullets[current_bullet_depth].c_str()); + param.temp_bullets[current_bullet_depth].getText().c_str()); } -void FormDocument::InputBulletLaTeXCB(FL_OBJECT * ob, long) -{ - FormDocument * pre = (FormDocument*)ob->form->u_vdata; - pre->InputBulletLaTeX(ob,0); - pre->bc_->valid(pre->CheckDocumentInput(ob,0)); -} void FormDocument::InputBulletLaTeX(FL_OBJECT *, long) { @@ -925,13 +904,8 @@ void FormDocument::InputBulletLaTeX(FL_OBJECT *, long) setText(fl_get_input(bullets_->input_bullet_latex)); } -void FormDocument::BulletDepthCB(FL_OBJECT * ob, long) -{ - FormDocument * pre = (FormDocument*)ob->form->u_vdata; - pre->BulletDepth(ob,0); -} -void FormDocument::BulletDepth(FL_OBJECT * ob, long data) +void FormDocument::BulletDepth(FL_OBJECT * ob, State cb) { /* Should I do the following: */ /* 1. change to the panel that the current bullet belongs in */ @@ -943,30 +917,49 @@ void FormDocument::BulletDepth(FL_OBJECT * ob, long data) /* maybe try to support the others later */ BufferParams & param = lv_->buffer()->params; + int data = 0; + if (cb == BULLETDEPTH1 ) + data = 0; + else if (cb == BULLETDEPTH2 ) + data = 1; + else if (cb == BULLETDEPTH3 ) + data = 2; + else if (cb == BULLETDEPTH4 ) + data = 3; + switch (fl_get_button_numb(ob)) { case 3: - // right mouse button resets to default + // right mouse button resets to default param.temp_bullets[data] = ITEMIZE_DEFAULTS[data]; default: current_bullet_depth = data; fl_set_input(bullets_->input_bullet_latex, - param.temp_bullets[data].c_str()); + param.temp_bullets[data].getText().c_str()); fl_set_choice(bullets_->choice_bullet_size, param.temp_bullets[data].getSize() + 2); } } -void FormDocument::BulletPanelCB(FL_OBJECT * ob, long data) -{ - FormDocument * pre = (FormDocument*)ob->form->u_vdata; - pre->BulletPanel(ob,data); -} -void FormDocument::BulletPanel(FL_OBJECT * /*ob*/, long data) +void FormDocument::BulletPanel(FL_OBJECT * /*ob*/, State cb) { /* Here we have to change the background pixmap to that selected */ /* by the user. (eg. standard.xpm, psnfss1.xpm etc...) */ + int data = 0; + if (cb == BULLETPANEL1 ) + data = 0; + else if (cb == BULLETPANEL2 ) + data = 1; + else if (cb == BULLETPANEL3 ) + data = 2; + else if (cb == BULLETPANEL4 ) + data = 3; + else if (cb == BULLETPANEL5 ) + data = 4; + else if (cb == BULLETPANEL6 ) + data = 5; + if (data != current_bullet_panel) { fl_freeze_form(bullets_->form); current_bullet_panel = data; @@ -974,24 +967,24 @@ void FormDocument::BulletPanel(FL_OBJECT * /*ob*/, long data) /* free the current pixmap */ fl_free_bmtable_pixmap(bullets_->bmtable_bullet_panel); string new_panel; - switch (data) { + switch (cb) { /* display the new one */ - case 0 : + case BULLETPANEL1 : new_panel = "standard"; break; - case 1 : + case BULLETPANEL2 : new_panel = "amssymb"; break; - case 2 : + case BULLETPANEL3 : new_panel = "psnfss1"; break; - case 3 : + case BULLETPANEL4 : new_panel = "psnfss2"; break; - case 4 : + case BULLETPANEL5 : new_panel = "psnfss3"; break; - case 5 : + case BULLETPANEL6 : new_panel = "psnfss4"; break; default : @@ -1003,18 +996,12 @@ void FormDocument::BulletPanel(FL_OBJECT * /*ob*/, long data) } new_panel += ".xpm"; fl_set_bmtable_pixmap_file(bullets_->bmtable_bullet_panel, 6, 6, - LibFileSearch("images", new_panel.c_str()).c_str()); + LibFileSearch("images", new_panel).c_str()); fl_redraw_object(bullets_->bmtable_bullet_panel); fl_unfreeze_form(bullets_->form); } } -void FormDocument::BulletBMTableCB(FL_OBJECT * ob, long) -{ - FormDocument * pre = (FormDocument*)ob->form->u_vdata; - pre->BulletBMTable(ob,0); - pre->bc_->valid(pre->CheckDocumentInput(ob,0)); -} void FormDocument::BulletBMTable(FL_OBJECT * ob, long /*data*/ ) { @@ -1030,110 +1017,27 @@ void FormDocument::BulletBMTable(FL_OBJECT * ob, long /*data*/ ) param.temp_bullets[current_bullet_depth].setFont(current_bullet_panel); param.temp_bullets[current_bullet_depth].setCharacter(bmtable_button); fl_set_input(bullets_->input_bullet_latex, - param.temp_bullets[current_bullet_depth].c_str()); -} - -void FormDocument::EnableDocumentLayout() -{ - fl_activate_object (class_->radio_doc_indent); - fl_activate_object (class_->radio_doc_skip); - fl_activate_object (class_->choice_doc_class); - fl_activate_object (class_->choice_doc_pagestyle); - fl_activate_object (class_->choice_doc_fonts); - fl_activate_object (class_->choice_doc_fontsize); - fl_activate_object (class_->radio_doc_sides_one); - fl_activate_object (class_->radio_doc_sides_two); - fl_activate_object (class_->radio_doc_columns_one); - fl_activate_object (class_->radio_doc_columns_two); - fl_activate_object (class_->input_doc_extra); - fl_activate_object (class_->input_doc_skip); - fl_activate_object (class_->choice_doc_skip); - fl_activate_object (class_->choice_doc_spacing); - fl_activate_object (class_->input_doc_spacing); - - fl_activate_object (language_->choice_language); - combo_language->activate(); - fl_activate_object (language_->choice_language); - fl_activate_object (language_->choice_inputenc); - - fl_activate_object (options_->slider_secnumdepth); - fl_activate_object (options_->slider_tocdepth); - fl_activate_object (options_->check_use_amsmath); - fl_activate_object (options_->input_float_placement); - fl_activate_object (options_->choice_postscript_driver); - - fl_activate_object (paper_->choice_paperpackage); - fl_activate_object (paper_->greoup_radio_orientation); - fl_activate_object (paper_->radio_portrait); - fl_activate_object (paper_->radio_landscape); - fl_activate_object (paper_->choice_papersize2); - fl_activate_object (paper_->push_use_geometry); - fl_activate_object (paper_->input_custom_width); - fl_activate_object (paper_->input_custom_height); - fl_activate_object (paper_->input_top_margin); - fl_activate_object (paper_->input_bottom_margin); - fl_activate_object (paper_->input_left_margin); - fl_activate_object (paper_->input_right_margin); - fl_activate_object (paper_->input_head_height); - fl_activate_object (paper_->input_head_sep); - fl_activate_object (paper_->input_foot_skip); + param.temp_bullets[current_bullet_depth].getText().c_str()); } -void FormDocument::DisableDocumentLayout() -{ - fl_deactivate_object (class_->radio_doc_indent); - fl_deactivate_object (class_->radio_doc_skip); - fl_deactivate_object (class_->choice_doc_class); - fl_deactivate_object (class_->choice_doc_pagestyle); - fl_deactivate_object (class_->choice_doc_fonts); - fl_deactivate_object (class_->choice_doc_fontsize); - fl_deactivate_object (class_->radio_doc_sides_one); - fl_deactivate_object (class_->radio_doc_sides_two); - fl_deactivate_object (class_->radio_doc_columns_one); - fl_deactivate_object (class_->radio_doc_columns_two); - fl_deactivate_object (class_->input_doc_extra); - fl_deactivate_object (class_->input_doc_skip); - fl_deactivate_object (class_->choice_doc_skip); - fl_deactivate_object (class_->choice_doc_spacing); - fl_deactivate_object (class_->input_doc_spacing); - - fl_deactivate_object (language_->choice_language); - combo_language->deactivate(); - fl_deactivate_object (language_->choice_inputenc); - - fl_deactivate_object (options_->slider_secnumdepth); - fl_deactivate_object (options_->slider_tocdepth); - fl_deactivate_object (options_->check_use_amsmath); - fl_deactivate_object (options_->input_float_placement); - fl_deactivate_object (options_->choice_postscript_driver); - - fl_deactivate_object (paper_->choice_paperpackage); - fl_deactivate_object (paper_->greoup_radio_orientation); - fl_deactivate_object (paper_->radio_portrait); - fl_deactivate_object (paper_->radio_landscape); - fl_deactivate_object (paper_->choice_papersize2); - fl_deactivate_object (paper_->push_use_geometry); - fl_deactivate_object (paper_->input_custom_width); - fl_deactivate_object (paper_->input_custom_height); - fl_deactivate_object (paper_->input_top_margin); - fl_deactivate_object (paper_->input_bottom_margin); - fl_deactivate_object (paper_->input_left_margin); - fl_deactivate_object (paper_->input_right_margin); - fl_deactivate_object (paper_->input_head_height); - fl_deactivate_object (paper_->input_head_sep); - fl_deactivate_object (paper_->input_foot_skip); -} void FormDocument::CheckChoiceClass(FL_OBJECT * ob, long) { + if (!ob) + ob = class_->choice_doc_class; + ProhibitInput(lv_->view()); - if (textclasslist.Load(fl_get_choice(ob)-1)) { - if (AskQuestion(_("Should I set some parameters to"), - fl_get_choice_text(ob), - _("the defaults of this document class?"))) { - BufferParams & params = lv_->buffer()->params; - params.textclass = fl_get_choice(ob)-1; + unsigned int tc = combo_doc_class->get() - 1; + if (textclasslist.Load(tc)) { + // we use a copy of the bufferparams because we do not + // want to modify them yet. + BufferParams params = lv_->buffer()->params; + + if (params.textclass != tc + && AskQuestion(_("Should I set some parameters to"), + _("the defaults of this document class?"))) { + params.textclass = tc; params.useClassDefaults(); UpdateLayoutDocument(params); } @@ -1142,25 +1046,18 @@ void FormDocument::CheckChoiceClass(FL_OBJECT * ob, long) WriteAlert(_("Conversion Errors!"), _("Unable to switch to new document class."), _("Reverting to original document class.")); - fl_set_choice(class_->choice_doc_class, - lv_->view()->buffer()->params.textclass + 1); + combo_doc_class->select(int(lv_->buffer()->params.textclass) + 1); } AllowInput(lv_->view()); } + void FormDocument::UpdateLayoutDocument(BufferParams const & params) { - if (!dialog_) + if (!dialog_.get()) return; - fl_hide_object(dialog_->text_warning); - EnableDocumentLayout(); - if (lv_->buffer()->isReadonly()) { - DisableDocumentLayout(); - fl_set_object_label(dialog_->text_warning, - _("Document is read-only." - " No changes to layout permitted.")); - fl_show_object(dialog_->text_warning); - } + + checkReadOnly(); class_update(params); paper_update(params); language_update(params);