]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/xforms/FormRef.C
try this for distinguishing inner and outer tabs
[lyx.git] / src / frontends / xforms / FormRef.C
index c72c46f9d4024303ee1b5cd766163ddfc5b7553e..4cb2bcf60e86867521c3e98f207326d7b351fe0a 100644 (file)
@@ -24,6 +24,7 @@
 #include "buffer.h"
 #include "form_ref.h"
 #include "lyxfunc.h"
+#include "insets/insetref.h"
 
 #include <algorithm>
 
@@ -68,8 +69,9 @@ void FormRef::build()
 {
        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;
@@ -85,26 +87,40 @@ void FormRef::build()
        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);
+       }
 
-       Type type = getType();
-       fl_set_choice(dialog_->type, type+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();
@@ -130,29 +146,28 @@ void FormRef::updateBrowser(vector<string> const & akeys) const
                                    _("*** 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);
        }
 }
 
@@ -162,8 +177,8 @@ void FormRef::apply()
        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));
@@ -206,7 +221,7 @@ bool FormRef::input(FL_OBJECT *, long data)
 
                case GOBACK:
                {
-                       lv_->getLyXFunc()->Dispatch(LFUN_REF_BACK);
+                       lv_->getLyXFunc()->Dispatch(LFUN_BOOKMARK_GOTO, "0");
                        fl_set_object_label(dialog_->button_go,
                                            _("Goto reference"));
                }
@@ -230,7 +245,7 @@ bool FormRef::input(FL_OBJECT *, long data)
                }
 
                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);
@@ -255,10 +270,8 @@ bool FormRef::input(FL_OBJECT *, long data)
        // 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;
                }
        }
@@ -272,50 +285,3 @@ bool FormRef::input(FL_OBJECT *, long data)
 }
 
 
-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;
-}