]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/xforms/FormRef.C
remove defaults stuff, let Qt handle no toolbar
[lyx.git] / src / frontends / xforms / FormRef.C
index 728e9d3cd37e558e17d6a7ad8a43f7835b050273..6cd04355a86e837f3d2fef9f048ba825e1ee9a37 100644 (file)
@@ -1,9 +1,9 @@
 /**
- * \file xforms/FormRef.C
+ * \file FormRef.C
  * This file is part of LyX, the document processor.
  * Licence details can be found in the file COPYING.
  *
- * \author Angus Leeming 
+ * \author Angus Leeming
  *
  * Full author contact details are available in file CREDITS
  */
@@ -11,9 +11,6 @@
 #include <config.h>
 #include <algorithm>
 
-#ifdef __GNUG__
-#pragma implementation
-#endif
 
 #include "xformsBC.h"
 #include "ControlRef.h"
@@ -31,10 +28,10 @@ using std::max;
 using std::sort;
 using std::vector;
 
-typedef FormCB<ControlRef, FormDB<FD_ref> > base_class;
+typedef FormController<ControlRef, FormView<FD_ref> > base_class;
 
-FormRef::FormRef()
-       : base_class(_("Reference")),
+FormRef::FormRef(Dialog & parent)
+       : base_class(parent, _("Reference")),
          at_ref_(false)
 {}
 
@@ -57,14 +54,14 @@ void FormRef::build()
        setPrehandler(dialog_->input_ref);
 
        // Manage the ok and cancel/close buttons
-       bc().setOK(dialog_->button_ok);
-       bc().setApply(dialog_->button_apply);
-       bc().setCancel(dialog_->button_close);
-       bc().setRestore(dialog_->button_restore);
+       bcview().setOK(dialog_->button_ok);
+       bcview().setApply(dialog_->button_apply);
+       bcview().setCancel(dialog_->button_close);
+       bcview().setRestore(dialog_->button_restore);
 
-       bc().addReadOnly(dialog_->button_update);
-       bc().addReadOnly(dialog_->input_name);
-       bc().addReadOnly(dialog_->input_ref);
+       bcview().addReadOnly(dialog_->button_update);
+       bcview().addReadOnly(dialog_->input_name);
+       bcview().addReadOnly(dialog_->input_ref);
 
        // set up the tooltips
        string str = _("Select a document for references.");
@@ -93,16 +90,15 @@ void FormRef::update()
        switch_go_button();
 
        // Name is irrelevant to LaTeX/Literate documents
-       if (controller().docType() == ControlRef::LATEX ||
-           controller().docType() == ControlRef::LITERATE) {
+       Kernel::DocTypes doctype = kernel().docType();
+       if (doctype == Kernel::LATEX || doctype == Kernel::LITERATE) {
                setEnabled(dialog_->input_name, false);
        } else {
                setEnabled(dialog_->input_name, true);
        }
 
        // type is irrelevant to LinuxDoc/DocBook.
-       if (controller().docType() == ControlRef::LINUXDOC ||
-           controller().docType() == ControlRef::DOCBOOK) {
+       if (doctype == Kernel::LINUXDOC || doctype == Kernel::DOCBOOK) {
                fl_set_choice(dialog_->choice_format, 1);
                setEnabled(dialog_->choice_format, false);
        } else {
@@ -119,15 +115,15 @@ void FormRef::update()
                // create a string of entries " entry1 | entry2 | entry3 "
                // with which to initialise the xforms choice object.
                string const choice =
-                       " " + getStringFromVector(buffers, " | ") + " ";
+                       ' ' + getStringFromVector(buffers, " | ") + ' ';
 
                fl_clear_choice(dialog_->choice_document);
                fl_addto_choice(dialog_->choice_document, choice.c_str());
-
-               fl_set_choice(dialog_->choice_document,
-                             controller().getBufferNum() + 1);
        }
 
+       fl_set_choice(dialog_->choice_document,
+                     controller().getBufferNum() + 1);
+
        string const name = controller().
                getBufferName(fl_get_choice(dialog_->choice_document) - 1);
        refs_ = controller().getLabelList(name);
@@ -136,6 +132,28 @@ void FormRef::update()
 }
 
 
+namespace {
+
+void updateHighlight(FL_OBJECT * browser,
+                    vector<string> const & keys,
+                    string const & ref)
+{
+       vector<string>::const_iterator cit = (ref.empty())
+               ? keys.end()
+               : find(keys.begin(), keys.end(), ref);
+
+       if (cit == keys.end()) {
+               fl_deselect_browser(browser);
+       } else {
+               int const i = static_cast<int>(cit - keys.begin());
+               fl_set_browser_topline(browser, max(i-5, 1));
+               fl_select_browser_line(browser, i+1);
+       }
+}
+
+} // namespace anon
+
+
 void FormRef::updateBrowser(vector<string> const & akeys) const
 {
        vector<string> keys(akeys);
@@ -144,8 +162,11 @@ void FormRef::updateBrowser(vector<string> const & akeys) const
 
        vector<string> browser_keys = getVector(dialog_->browser_refs);
 
-       if (browser_keys == keys)
+       if (browser_keys == keys) {
+               updateHighlight(dialog_->browser_refs, keys,
+                               getString(dialog_->input_ref));
                return;
+       }
 
        fl_clear_browser(dialog_->browser_refs);
        for (vector<string>::const_iterator it = keys.begin();
@@ -164,20 +185,8 @@ void FormRef::updateBrowser(vector<string> const & akeys) const
                setEnabled(dialog_->browser_refs, true);
                setEnabled(dialog_->check_sort,   true);
 
-               string ref = fl_get_input(dialog_->input_ref);
-               vector<string>::const_iterator cit = (ref.empty())
-                       ? keys.begin()
-                       : find(keys.begin(), keys.end(), ref);
-               if (cit == keys.end()) {
-                       fl_deselect_browser(dialog_->browser_refs);
-               } else {
-                       if (ref.empty())
-                               fl_set_input(dialog_->input_ref, cit->c_str());
-
-                       int const i = static_cast<int>(cit - keys.begin());
-                       fl_set_browser_topline(dialog_->browser_refs, max(i-5, 1));
-                       fl_select_browser_line(dialog_->browser_refs, i+1);
-               }
+               updateHighlight(dialog_->browser_refs, keys,
+                               getString(dialog_->input_ref));
        }
 }
 
@@ -187,8 +196,8 @@ void FormRef::apply()
        int const type = fl_get_choice(dialog_->choice_format) - 1;
        controller().params().setCmdName(InsetRef::getName(type));
 
-       controller().params().setOptions(fl_get_input(dialog_->input_name));
-       controller().params().setContents(fl_get_input(dialog_->input_ref));
+       controller().params().setOptions(getString(dialog_->input_name));
+       controller().params().setContents(getString(dialog_->input_ref));
 }
 
 
@@ -204,7 +213,7 @@ ButtonPolicy::SMInput FormRef::input(FL_OBJECT * ob, long)
 
                at_ref_ = !at_ref_;
                if (at_ref_) {
-                       controller().gotoRef(fl_get_input(dialog_->input_ref));
+                       controller().gotoRef(getString(dialog_->input_ref));
                } else {
                        controller().gotoBookmark();
                }
@@ -216,7 +225,7 @@ ButtonPolicy::SMInput FormRef::input(FL_OBJECT * ob, long)
                if (sel < 1 || sel > refs_.size())
                        return ButtonPolicy::SMI_NOOP;
 
-               if (!controller().bufferIsReadonly()) {
+               if (!kernel().isBufferReadonly()) {
                        string s = fl_get_browser_line(dialog_->browser_refs, sel);
                        fl_set_input(dialog_->input_ref, s.c_str());
                }
@@ -234,6 +243,9 @@ ButtonPolicy::SMInput FormRef::input(FL_OBJECT * ob, long)
                   ob == dialog_->check_sort ||
                   ob == dialog_->choice_document) {
 
+               // No change to data
+               activate = ButtonPolicy::SMI_NOOP;
+
                if (ob == dialog_->button_update ||
                    ob == dialog_->choice_document) {
                        string const name =