/**
- * \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
*/
#include <config.h>
#include <algorithm>
-#ifdef __GNUG__
-#pragma implementation
-#endif
#include "xformsBC.h"
#include "ControlRef.h"
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)
{}
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.");
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 {
// 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);
}
+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);
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();
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));
}
}
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));
}
at_ref_ = !at_ref_;
if (at_ref_) {
- controller().gotoRef(fl_get_input(dialog_->input_ref));
+ controller().gotoRef(getString(dialog_->input_ref));
} else {
controller().gotoBookmark();
}
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());
}
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 =