#include "buffer.h"
#include "form_ref.h"
#include "lyxfunc.h"
+#include "insets/insetref.h"
#include <algorithm>
{
dialog_ = build_ref();
- fl_addto_choice(dialog_->type,
- _(" Ref | Page | TextRef | TextPage | PrettyRef "));
+ for (int i = 0; !InsetRef::types[i].latex_name.empty(); ++i)
+ fl_addto_choice(dialog_->type,
+ _(InsetRef::types[i].gui_name.c_str()));
// Workaround dumb xforms sizing bug
minw_ = form()->w;
bc_.setUndoAll(dialog_->button_restore);
bc_.refresh();
- bc_.addReadOnly(dialog_->type);
- bc_.addReadOnly(dialog_->name);
+#warning I had to uncomment this so the buttons could be disabled in update() (dekel)
+ //bc_.addReadOnly(dialog_->type);
+ //bc_.addReadOnly(dialog_->name);
}
void FormRef::update()
{
- fl_set_input(dialog_->ref, params.getContents().c_str());
- fl_set_input(dialog_->name, params.getOptions().c_str());
+ if (inset_) {
+ fl_set_input(dialog_->ref, params.getContents().c_str());
+ fl_set_input(dialog_->name, params.getOptions().c_str());
+ fl_set_choice(dialog_->type,
+ InsetRef::getType(params.getCmdName()) + 1);
+ }
- if (inset_)
- fl_set_choice(dialog_->type, getType()+1);
+ lv_->getLyXFunc()->Dispatch(LFUN_BOOKMARK_SAVE, "0");
toggle = GOBACK;
fl_set_object_label(dialog_->button_go, _("Goto reference"));
- // Name is irrelevant to LaTeX documents
- if (lv_->buffer()->isLatex()) {
+ // Name is irrelevant to LaTeX/Literate documents, while
+ // type is irrelevant to LinuxDoc/DocBook.
+ if (lv_->buffer()->isLatex() || lv_->buffer()->isLatex()) {
fl_deactivate_object(dialog_->name);
fl_set_object_lcol(dialog_->name, FL_INACTIVE);
+ fl_activate_object(dialog_->type);
+ fl_set_object_lcol(dialog_->type, FL_BLACK);
+ } else {
+ fl_set_choice(dialog_->type, 1);
+
+ fl_activate_object(dialog_->name);
+ fl_set_object_lcol(dialog_->name, FL_BLACK);
+ fl_deactivate_object(dialog_->type);
+ fl_set_object_lcol(dialog_->type, FL_INACTIVE);
}
refs = lv_->buffer()->getLabelList();
_("*** No labels found in document ***"));
fl_deactivate_object(dialog_->browser);
- fl_deactivate_object(dialog_->button_update);
fl_deactivate_object(dialog_->sort);
fl_set_object_lcol(dialog_->browser, FL_INACTIVE);
- fl_set_object_lcol(dialog_->button_update, FL_INACTIVE);
fl_set_object_lcol(dialog_->sort, FL_INACTIVE);
+ fl_set_input(dialog_->ref, "");
} else {
- fl_set_browser_topline(dialog_->browser, 1);
fl_activate_object(dialog_->browser);
fl_set_object_lcol(dialog_->browser, FL_BLACK);
- fl_activate_object(dialog_->button_update);
- fl_set_object_lcol(dialog_->button_update, FL_BLACK);
fl_activate_object(dialog_->sort);
fl_set_object_lcol(dialog_->sort, FL_BLACK);
string ref = fl_get_input(dialog_->ref);
vector<string>::const_iterator cit =
find(keys.begin(), keys.end(), ref);
-
- if (cit != keys.end()) {
- int const i = static_cast<int>(cit - keys.begin());
- fl_set_browser_topline(dialog_->browser, max(i-5, 1));
- fl_select_browser_line(dialog_->browser, i+1);
- }
+ if (cit == keys.end()) {
+ cit = keys.begin();
+ fl_set_input(dialog_->ref, (*cit).c_str());
+ } else if (ref.empty())
+ fl_set_input(dialog_->ref, (*cit).c_str());
+
+ int const i = static_cast<int>(cit - keys.begin());
+ fl_set_browser_topline(dialog_->browser, max(i-5, 1));
+ fl_select_browser_line(dialog_->browser, i+1);
}
}
if (!lv_->view()->available())
return;
- Type const type = static_cast<Type>(fl_get_choice(dialog_->type) - 1);
- params.setCmdName(getName(type));
+ int const type = fl_get_choice(dialog_->type) - 1;
+ params.setCmdName(InsetRef::getName(type));
params.setOptions(fl_get_input(dialog_->name));
params.setContents(fl_get_input(dialog_->ref));
case GOBACK:
{
- lv_->getLyXFunc()->Dispatch(LFUN_REF_BACK);
+ lv_->getLyXFunc()->Dispatch(LFUN_BOOKMARK_GOTO, "0");
fl_set_object_label(dialog_->button_go,
_("Goto reference"));
}
}
toggle = GOBACK;
- lv_->getLyXFunc()->Dispatch(LFUN_REF_BACK);
+ lv_->getLyXFunc()->Dispatch(LFUN_BOOKMARK_GOTO, "0");
fl_set_object_label(dialog_->button_go, _("Goto reference"));
fl_activate_object(dialog_->type);
// changed reference type
case 5:
{
- Type type = static_cast<Type>(
- fl_get_choice(dialog_->type) - 1);
- if (params.getCmdName() == getName(type)
- && inset_) {
+ int const type = fl_get_choice(dialog_->type) - 1;
+ if (params.getCmdName() == InsetRef::getName(type) && inset_) {
activate = false;
}
}
}
-FormRef::Type FormRef::getType() const
-{
- Type type;
-
- if (params.getCmdName() == "ref" )
- type = REF;
-
- else if (params.getCmdName() == "pageref" )
- type = PAGEREF;
-
- else if (params.getCmdName() == "vref" )
- type = VREF;
-
- else if (params.getCmdName() == "vpageref" )
- type = VPAGEREF;
-
- else
- type = PRETTYREF;
-
- return type;
-}
-
-
-string const FormRef::getName(Type type) const
-{
- string name;
-
- switch (type) {
- case REF:
- name = "ref";
- break;
- case PAGEREF:
- name = "pageref";
- break;
- case VREF:
- name = "vref";
- break;
- case VPAGEREF:
- name = "vpageref";
- break;
- case PRETTYREF:
- name = "prettyref";
- break;
- }
-
- return name;
-}