X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fxforms%2FFormExternal.C;h=5324c1cebd70f30fdf2d17f2441847232b729c58;hb=2c3af1475e2a408f725b5eea93583ee13e3d09cc;hp=81b513f785becbc2aaf5dbaa2541bca01b8917f5;hpb=5e188707552835c6de411a7f76566b14c78238e3;p=lyx.git diff --git a/src/frontends/xforms/FormExternal.C b/src/frontends/xforms/FormExternal.C index 81b513f785..5324c1cebd 100644 --- a/src/frontends/xforms/FormExternal.C +++ b/src/frontends/xforms/FormExternal.C @@ -1,210 +1,115 @@ -/** - * \file FormExternal.C - * Copyright 2001 the LyX Team - * Read the file COPYING +/* This file is part of + * ====================================================== + * + * LyX, The Document Processor + * + * Copyright 2000-2001 The LyX Team. + * + * ====================================================== * - * \author unknown + * \file FormExternal.C + * \author Asger Alstrup * \author John Levon + * \author Angus Leeming, a.leeming@ic.ac.uk */ #include -#include - -#include FORMS_H_LOCATION #ifdef __GNUG__ #pragma implementation #endif -#include "debug.h" -#include "gettext.h" -#include "support/LAssert.h" -#include "lyx_gui_misc.h" -#include "Dialogs.h" -#include "LyXView.h" -#include "buffer.h" +#include "xformsBC.h" +#include "ControlExternal.h" #include "FormExternal.h" -#include "frontends/FileDialog.h" -#include "LString.h" -#include "support/filetools.h" - -using std::pair; -using std::make_pair; -using std::endl; - -FormExternal::FormExternal(LyXView * lv, Dialogs * d) - : FormBaseBD(lv, d, _("Edit external file"), new OkCancelReadOnlyPolicy), - inset_(0), ih_(0), dialog_(0) -{ - d->showExternal.connect(slot(this, &FormExternal::showInset)); -} - - -FormExternal::~FormExternal() -{ - delete dialog_; -} - - -extern "C" void ExternalTemplateCB(FL_OBJECT * ob, long data) -{ - FormExternal::templateCB(ob, data); -} - - -extern "C" void ExternalBrowseCB(FL_OBJECT * ob, long data) -{ - FormExternal::browseCB(ob, data); -} +#include "form_external.h" +#include "gettext.h" +#include "xforms_helpers.h" +#include "helper_funcs.h" +typedef FormCB > base_class; -extern "C" void ExternalEditCB(FL_OBJECT * ob, long data) -{ - FormExternal::editCB(ob, data); -} +FormExternal::FormExternal(ControlExternal & c) + : base_class(c, _("Edit external file")) +{} -extern "C" void ExternalViewCB(FL_OBJECT * ob, long data) -{ - FormExternal::viewCB(ob, data); -} - - -extern "C" void ExternalUpdateCB(FL_OBJECT * ob, long data) +void FormExternal::apply() { - FormExternal::updateCB(ob, data); -} + controller().params().filename = + fl_get_input(dialog_->input_filename); + controller().params().parameters = + fl_get_input(dialog_->input_parameters); - -FL_FORM * FormExternal::form() const -{ - if (dialog_) - return dialog_->form; - return 0; + int const choice = fl_get_choice(dialog_->choice_template); + controller().params().templ = controller().getTemplate(choice); } -void FormExternal::connect() +void FormExternal::build() { - u_ = d_->updateBufferDependent. - connect(slot(this, &FormExternal::updateSlot)); - h_ = d_->hideBufferDependent. - connect(slot(this, &FormExternal::hide)); - FormBase::connect(); -} - + dialog_.reset(build_external()); -void FormExternal::disconnect() -{ - inset_ = 0; - ih_.disconnect(); - FormBaseBD::disconnect(); -} + string const choice = + " " + getStringFromVector(controller().getTemplates(), " | ") + " "; + fl_addto_choice(dialog_->choice_template, choice.c_str()); + fl_set_input_return (dialog_->input_filename, FL_RETURN_CHANGED); + bc().setOK(dialog_->button_ok); + bc().setApply(dialog_->button_apply); + bc().setCancel(dialog_->button_cancel); -void FormExternal::updateSlot(bool switched) -{ - if (switched) - hide(); - else - update(); + bc().addReadOnly(dialog_->input_filename); + bc().addReadOnly(dialog_->button_filenamebrowse); + bc().addReadOnly(dialog_->input_parameters); } -void FormExternal::showInset(InsetExternal * inset) +void FormExternal::update() { - Assert(inset); + InsetExternal::Params const & params = controller().params(); - // If connected to another inset, disconnect from it. - if (inset_) - ih_.disconnect(); + fl_set_input(dialog_->input_filename, params.filename.c_str()); + fl_set_input(dialog_->input_parameters, params.parameters.c_str()); - inset_ = inset; - params_ = inset_->params(); + int const ID = controller().getTemplateNumber(params.templ.lyxName); + if (ID >= 0) { + setEnabled(dialog_->choice_template, true); + fl_set_choice(dialog_->choice_template, ID+1); + } else + setEnabled(dialog_->choice_template, false); - ih_ = inset->hideDialog.connect(slot(this, &FormExternal::hide)); - show(); + updateComboChange(); } -void FormExternal::build() +ButtonPolicy::SMInput FormExternal::input(FL_OBJECT * ob, long) { - dialog_ = build_external(); + if (ob == dialog_->choice_template) { - fl_addto_choice(dialog_->choice_template, - getTemplatesComboString().c_str()); + // set to the chosen template + int const choice = fl_get_choice(dialog_->choice_template); + controller().params().templ = controller().getTemplate(choice); - // Workaround dumb xforms sizing bug - minw_ = form()->w; - minh_ = form()->h; + updateComboChange(); - bc_.setOK(dialog_->button_ok); - bc_.setCancel(dialog_->button_cancel); - bc_.refresh(); + } else if (ob == dialog_->button_filenamebrowse) { - bc_.addReadOnly(dialog_->input_filename); - bc_.addReadOnly(dialog_->button_filenamebrowse); - bc_.addReadOnly(dialog_->input_parameters); -} + string const in_name = fl_get_input(dialog_->input_filename); + string const out_name = controller().Browse(in_name); + fl_set_input(dialog_->input_filename, out_name.c_str()); + } else if (ob == dialog_->button_edit) { + controller().editExternal(); -string const FormExternal::getTemplatesComboString() const -{ - string result; - bool first = true; - ExternalTemplateManager::Templates::const_iterator i1, i2; - i1 = ExternalTemplateManager::get().getTemplates().begin(); - i2 = ExternalTemplateManager::get().getTemplates().end(); - for (; i1 != i2; ++i1) { - if (!first) - result += "|"; - else - first = false; + } else if (ob == dialog_->button_view) { + controller().viewExternal(); - result += (*i1).second.lyxName; + } else if (ob == dialog_->button_update) { + controller().updateExternal(); } - return result; -} - - -int FormExternal::getTemplateComboNumber(string const & name) const -{ - int i = 1; - ExternalTemplateManager::Templates::const_iterator i1, i2; - i1 = ExternalTemplateManager::get().getTemplates().begin(); - i2 = ExternalTemplateManager::get().getTemplates().end(); - for (; i1 != i2; ++i1) { - if (i1->second.lyxName == name) - return i; - ++i; - } - // we can get here if a LyX document has a template not installed - // on this machine. - return 0; -} - - -ExternalTemplate FormExternal::getTemplate(int i) const -{ - ExternalTemplateManager::Templates::const_iterator i1; - i1 = ExternalTemplateManager::get().getTemplates().begin(); - for (int n = 1; n < i; ++n) - ++i1; - - return (*i1).second; -} - - -void FormExternal::update() -{ - fl_set_input(dialog_->input_filename, params_.filename.c_str()); - fl_set_input(dialog_->input_parameters, params_.parameters.c_str()); - - fl_set_choice(dialog_->choice_template, getTemplateComboNumber(params_.templ.lyxName)); - - updateComboChange(); - bc_.valid(); + return ButtonPolicy::SMI_VALID; } @@ -212,134 +117,10 @@ void FormExternal::updateComboChange() { // Update the help text fl_clear_browser(dialog_->browser_helptext); - fl_addto_browser(dialog_->browser_helptext, params_.templ.helpText.c_str()); + fl_addto_browser(dialog_->browser_helptext, + controller().params().templ.helpText.c_str()); fl_set_browser_topline(dialog_->browser_helptext, 0); - if (params_.templ.automaticProduction) { - fl_deactivate_object(dialog_->button_update); - fl_set_object_lcol(dialog_->button_update, FL_INACTIVE); - } else { - fl_activate_object(dialog_->button_update); - fl_set_object_lcol(dialog_->button_update, FL_BLACK); - } -} - - -bool FormExternal::input(FL_OBJECT *, long) -{ - // FIXME: anything to do here ? - return true; -} - - -void FormExternal::apply() -{ - Assert(inset_); - - if (lv_->buffer()->isReadonly()) - return; - - params_.filename = fl_get_input(dialog_->input_filename); - params_.parameters = fl_get_input(dialog_->input_parameters); - params_.templ = getTemplate(fl_get_choice(dialog_->choice_template)); - - inset_->setFromParams(params_); - lv_->view()->updateInset(inset_, true); -} - - -void FormExternal::templateCB(FL_OBJECT * ob, long) -{ - FormExternal * form = static_cast(ob->form->u_vdata); - - // set to the chosen template - form->params_.templ = form->getTemplate(fl_get_choice(form->dialog_->choice_template)); - - form->updateComboChange(); -} - - -void FormExternal::browseCB(FL_OBJECT * ob, long) -{ - FormExternal * form = static_cast(ob->form->u_vdata); - - static string current_path; - static int once = 0; - - string p = fl_get_input(form->dialog_->input_filename); - string buf = MakeAbsPath(form->lv_->buffer()->fileName()); - string buf2 = OnlyPath(buf); - - if (!p.empty()) { - buf = MakeAbsPath(p, buf2); - buf = OnlyPath(buf); - } else { - buf = OnlyPath(form->lv_->buffer()->fileName()); - } - - FileDialog fileDlg(form->lv_, _("Select external file"), - LFUN_SELECT_FILE_SYNC, - make_pair(string(_("Document")), string(buf))); - - /// Determine the template file extension - ExternalTemplate const & et = form->params_.templ; - - string regexp = et.fileRegExp; - if (regexp.empty()) - regexp = "*"; - - // FIXME: a temporary hack until the FileDialog interface is updated - regexp += "|"; - - while (1) { - string const path = (once) ? current_path : buf; - FileDialog::Result result = fileDlg.Select(path, regexp, fl_get_input(form->dialog_->input_filename)); - - if (result.second.empty()) - return; - - string p = result.second; - - buf = MakeRelPath(p, buf2); - current_path = OnlyPath(p); - once = 1; - - if (contains(p, "#") || contains(p, "~") || contains(p, "$") - || contains(p, "%")) { - WriteAlert(_("Filename can't contain any " - "of these characters:"), - // xgettext:no-c-format - _("'#', '~', '$' or '%'.")); - } else - break; - } - - fl_set_input(form->dialog_->input_filename, buf.c_str()); -} - - -void FormExternal::editCB(FL_OBJECT * ob, long) -{ - FormExternal * form = static_cast(ob->form->u_vdata); - - form->apply(); - form->inset_->editExternal(); -} - - -void FormExternal::viewCB(FL_OBJECT * ob, long) -{ - FormExternal * form = static_cast(ob->form->u_vdata); - - form->apply(); - form->inset_->viewExternal(); -} - - -void FormExternal::updateCB(FL_OBJECT * ob, long) -{ - FormExternal * form = static_cast(ob->form->u_vdata); - - form->apply(); - form->inset_->updateExternal(); + bool const enabled = (!controller().params().templ.automaticProduction); + setEnabled(dialog_->button_update, enabled); }