]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/xforms/FormInclude.C
get rid of broken_header.h and some unneeded tests
[lyx.git] / src / frontends / xforms / FormInclude.C
index 406a04c8e9e71d70f28151a67b509447f5d053a6..57bbb468e5fab34ad7f0fc43344aae83e535dec6 100644 (file)
 /**
  * \file FormInclude.C
- * Copyright 2001 the LyX Team
- * Read the file COPYING
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
  *
  * \author Alejandro Aguilar Sierra
  * \author John Levon
+ * \author Angus Leeming
+ *
+ * Full author contact details are available in file CREDITS.
  */
-#include <config.h>
-#include <algorithm>
-#include <utility>
 
-#ifdef __GNUG__
-#pragma implementation
-#endif
+#include <config.h>
 
-#include "Dialogs.h"
 #include "FormInclude.h"
-#include "insets/insetinclude.h"
-#include "frontends/FileDialog.h"
-#include "support/filetools.h"
-#include "support/lstrings.h"
-#include "LyXView.h"
-#include "buffer.h"
-#include "lyxrc.h"
-#include "lyxfunc.h"
-#include "xforms_helpers.h"
-
-#include "form_include.h"
-
-using std::make_pair;
-using std::pair;
-using SigC::slot;
-
-FormInclude::FormInclude(LyXView * lv, Dialogs * d)
-       : FormBaseBD(lv, d, _("Include file")),
-         ih_(0), inset_(0)
-{
-       d->showInclude.connect(slot(this, &FormInclude::showInclude));
-}
+#include "ControlInclude.h"
+#include "forms/form_include.h"
 
+#include "Tooltips.h"
+#include "xforms_helpers.h" // setEnabled
+#include "xformsBC.h"
 
-FL_FORM * FormInclude::form() const
-{
-       if (dialog_.get()) 
-               return dialog_->form;
-       return 0;
-}
+#include "support/lstrings.h" // strip
 
+#include "lyx_forms.h"
 
-void FormInclude::connect()
-{
-       u_ = d_->updateBufferDependent.
-                connect(slot(this, &FormInclude::updateSlot));
-       h_ = d_->hideBufferDependent.
-                connect(slot(this, &FormInclude::hide));
-       FormBaseDeprecated::connect();
-}
+using std::string;
 
+namespace lyx {
 
-void FormInclude::disconnect()
-{
-       ih_.disconnect();
-       FormBaseBD::disconnect();
-       inset_ = 0;
-}
+using support::rtrim;
 
+namespace frontend {
 
-void FormInclude::updateSlot(bool switched)
-{
-       if (switched)
-               hide();
-       else
-               update();
-}
+typedef FormController<ControlInclude, FormView<FD_include> > base_class;
+
+FormInclude::FormInclude(Dialog & parent)
+       : base_class(parent, _("Child Document"))
+{}
 
 
 void FormInclude::build()
 {
-       dialog_.reset(build_include());
-
-       // Workaround dumb xforms sizing bug
-       minw_ = form()->w;
-       minh_ = form()->h;
+       dialog_.reset(build_include(this));
 
        // Manage the ok and cancel buttons
-       bc_.setOK(dialog_->button_ok);
-       bc_.setCancel(dialog_->button_cancel);
-       bc_.refresh();
-
-       bc_.addReadOnly(dialog_->button_browse);
-       bc_.addReadOnly(dialog_->check_verbatim);
-       bc_.addReadOnly(dialog_->check_typeset);
-       bc_.addReadOnly(dialog_->check_useinput);
-       bc_.addReadOnly(dialog_->check_useinclude);
+       bcview().setOK(dialog_->button_ok);
+       bcview().setCancel(dialog_->button_close);
+
+       // trigger an input event for cut&paste with middle mouse button.
+       setPrehandler(dialog_->input_filename);
+
+       fl_set_input_return(dialog_->input_filename, FL_RETURN_CHANGED);
+
+       // disable for read-only documents
+       bcview().addReadOnly(dialog_->button_browse);
+       bcview().addReadOnly(dialog_->radio_useinput);
+       bcview().addReadOnly(dialog_->radio_useinclude);
+       bcview().addReadOnly(dialog_->radio_verbatim);
+
+       type_.init(dialog_->radio_useinput,   ControlInclude::INPUT);
+       type_.init(dialog_->radio_useinclude, ControlInclude::INCLUDE);
+       type_.init(dialog_->radio_verbatim,   ControlInclude::VERBATIM);
+
+       // set up the tooltips
+       string str = _("File name to include.");
+       tooltips().init(dialog_->input_filename, str);
+       str = _("Browse directories for file name.");
+       tooltips().init(dialog_->button_browse, str);
+       str = _("Use LaTeX \\input.");
+       tooltips().init(dialog_->radio_useinput, str);
+       str = _("Use LaTeX \\include.");
+       tooltips().init(dialog_->radio_useinclude, str);
+       str = _("Use LaTeX \\verbatiminput.");
+       tooltips().init(dialog_->radio_verbatim, str);
+       str = _("Underline spaces in generated output.");
+       tooltips().init(dialog_->check_visiblespace, str);
+       str = _("Show LaTeX preview.");
+       tooltips().init(dialog_->check_preview, str);
+       str = _("Load the file.");
+       tooltips().init(dialog_->button_load, str);
 }
 
 
-void FormInclude::showInclude(InsetInclude * inset)
+void FormInclude::update()
 {
-       // If connected to another inset, disconnect from it.
-       if (inset_)
-               ih_.disconnect();
-
-       inset_    = inset;
-       params    = inset->params();
-       ih_ = inset->hideDialog.connect(slot(this, &FormInclude::hide));
-       show();
-}
+       string const filename = controller().params().getContents();
+       string const cmdname = controller().params().getCmdName();
+       bool const preview = static_cast<bool>((controller().params().preview()));
 
+       fl_set_input(dialog_->input_filename, filename.c_str());
 
-void FormInclude::update()
-{
-       bc().readOnly(lv_->buffer()->isReadonly());
-
-       if (!inset_) {
-               fl_set_input(dialog_->input_filename, "");
-               fl_set_button(dialog_->check_typeset, 0);
-               fl_set_button(dialog_->check_useinput, 0);
-               fl_set_button(dialog_->check_useinclude, 1);
-               fl_set_button(dialog_->check_verbatim, 0);
-               fl_set_button(dialog_->check_visiblespace, 0);
-               fl_deactivate_object(dialog_->check_visiblespace);
-               fl_set_object_lcol(dialog_->check_visiblespace, FL_INACTIVE);
-               return;
-       }
+       bool const inputCommand = cmdname == "input";
+       bool const includeCommand = cmdname == "include";
+       bool const verbatimStarCommand = cmdname == "verbatiminput*";
+       bool const verbatimCommand = cmdname == "verbatiminput";
 
-       fl_set_input(dialog_->input_filename, params.cparams.getContents().c_str());
+       setEnabled(dialog_->check_preview, inputCommand);
+       fl_set_button(dialog_->check_preview, inputCommand ? preview : 0);
 
-       string const cmdname = params.cparams.getCmdName();
+       if (cmdname.empty())
+               type_.set(ControlInclude::INPUT);
 
-       fl_set_button(dialog_->check_typeset, int(params.noload));
+       if (includeCommand)
+               type_.set(ControlInclude::INCLUDE);
 
-       fl_set_button(dialog_->check_useinput, cmdname == "input");
-       fl_set_button(dialog_->check_useinclude, cmdname == "include");
-       if (cmdname == "verbatiminput" || cmdname == "verbatiminput*") {
-               fl_set_button(dialog_->check_verbatim, 1);
-               fl_set_button(dialog_->check_visiblespace, cmdname == "verbatiminput*");
+       if (verbatimCommand || verbatimStarCommand) {
+               type_.set(ControlInclude::VERBATIM);
+               fl_set_button(dialog_->check_visiblespace, verbatimStarCommand);
                setEnabled(dialog_->check_visiblespace, true);
+               setEnabled(dialog_->button_load, false);
        } else {
                fl_set_button(dialog_->check_visiblespace, 0);
                setEnabled(dialog_->check_visiblespace, false);
+               setEnabled(dialog_->button_load, true);
        }
-       if (cmdname.empty())
-               fl_set_button(dialog_->check_useinclude, 1);
 }
 
 
 void FormInclude::apply()
 {
-       if (lv_->buffer()->isReadonly())
-               return;
+       InsetCommandParams params = controller().params();
 
-       params.noload = fl_get_button(dialog_->check_typeset);
+       params.preview(fl_get_button(dialog_->check_preview));
+       params.setContents(getString(dialog_->input_filename));
 
-       params.cparams.setContents(fl_get_input(dialog_->input_filename));
-
-       if (fl_get_button(dialog_->check_useinput))
-               params.flag = InsetInclude::INPUT;
-       else if (fl_get_button(dialog_->check_useinclude))
-               params.flag = InsetInclude::INCLUDE;
-       else if (fl_get_button(dialog_->check_verbatim)) {
+       ControlInclude::Type const type = ControlInclude::Type(type_.get());
+       if (type == ControlInclude::INPUT)
+               params.setCmdName("input");
+       else if (type == ControlInclude::INCLUDE)
+               params.setCmdName("include");
+       else if (type == ControlInclude::VERBATIM) {
                if (fl_get_button(dialog_->check_visiblespace))
-                       params.flag = InsetInclude::VERBAST;
+                       params.setCmdName("verbatiminput*");
                else
-                       params.flag = InsetInclude::VERB;
+                       params.setCmdName("verbatiminput");
        }
-       
-       inset_->setFromParams(params);
-       lv_->view()->updateInset(inset_, true);
+
+       controller().setParams(params);
 }
 
-#ifdef WITH_WARNINGS
-#warning convert this to use the buttoncontroller
-#endif
-bool FormInclude::input(FL_OBJECT *, long data)
+
+ButtonPolicy::SMInput FormInclude::input(FL_OBJECT * ob, long)
 {
-       State state = static_cast<State>(data);
-
-       switch (state) {
-               case BROWSE: {
-                       // Should browsing too be disabled in RO-mode?
-                       FileDialog fileDlg(lv_, _("Select document to include"),
-                               LFUN_SELECT_FILE_SYNC,
-                               make_pair(string(_("Documents")), string(lyxrc.document_path)));
-
-                       string ext;
-                  
-                       /* input TeX, verbatim, or LyX file ? */
-                       if (fl_get_button(dialog_->check_useinput))
-                               ext = _("*.tex| LaTeX Documents (*.tex)");
-                       else if (fl_get_button(dialog_->check_verbatim))
-                               ext = _("*| All files ");
-                       else
-                               ext = _("*.lyx| LyX Documents (*.lyx)");
-       
-                       string mpath;
-
-                       mpath = OnlyPath(params.buffer->fileName());
-
-                       FileDialog::Result result = fileDlg.Select(mpath, ext, fl_get_input(dialog_->input_filename));
-       
-                       // check selected filename
-                       if (result.second.empty())
-                               break;
-       
-                       string const filename2 = MakeRelPath(result.second, mpath);
-       
-                       if (prefixIs(filename2, ".."))
-                               fl_set_input(dialog_->input_filename, result.second.c_str());
-                       else
-                               fl_set_input(dialog_->input_filename, filename2.c_str());
-
-               }       break;
-
-               case LOAD:
-                       if (compare(fl_get_input(dialog_->input_filename),"")) {
-                               apply();
-                               lv_->getLyXFunc()->Dispatch(LFUN_CHILDOPEN, params.cparams.getContents());
-                       }
-                       break;
-
-               case VERBATIM:
-                       setEnabled(dialog_->check_visiblespace, true);
-                       break;
-       
-               case INPUTINCLUDE:
-                       fl_set_button(dialog_->check_visiblespace, 0);
-                       setEnabled(dialog_->check_visiblespace, false);
-                       break;
+       ButtonPolicy::SMInput action = ButtonPolicy::SMI_VALID;
+
+       if (ob == dialog_->button_browse) {
+               string const in_name = getString(dialog_->input_filename);
+               fl_freeze_form(form());
+               ControlInclude::Type const type = ControlInclude::Type(type_.get());
+               string const out_name = controller().browse(in_name, type);
+               fl_set_input(dialog_->input_filename, out_name.c_str());
+               fl_unfreeze_form(form());
+
+       } else if (ob == dialog_->button_load) {
+               string const in_name = getString(dialog_->input_filename);
+               if (!rtrim(in_name).empty() && controller().fileExists(in_name)) {
+                       dialog().OKButton();
+                       controller().load(rtrim(in_name));
+                       action = ButtonPolicy::SMI_NOOP;
+               }
+
+       } else if (ob == dialog_->radio_verbatim) {
+               setEnabled(dialog_->check_visiblespace, true);
+               setEnabled(dialog_->button_load, false);
+
+       } else if (ob == dialog_->radio_useinclude ||
+                  ob == dialog_->radio_useinput) {
+               fl_set_button(dialog_->check_visiblespace, 0);
+               setEnabled(dialog_->check_visiblespace, false);
+               setEnabled(dialog_->button_load, true);
+
+       } else if (ob == dialog_->input_filename) {
+               string const in_name = getString(dialog_->input_filename);
+               if (rtrim(in_name).empty())
+                       action = ButtonPolicy::SMI_INVALID;
        }
-       return true;
+
+       if (ob == dialog_->radio_useinput) {
+               setEnabled(dialog_->check_preview, true);
+       } else if (ob == dialog_->radio_verbatim ||
+                  ob == dialog_->radio_useinclude) {
+               fl_set_button(dialog_->check_preview, 0);
+               setEnabled(dialog_->check_preview, false);
+       }
+
+       return action;
 }
+
+} // namespace frontend
+} // namespace lyx