]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiRef.cpp
Complete the removal of the embedding stuff. Maybe. It's hard to be sure we got every...
[lyx.git] / src / frontends / qt4 / GuiRef.cpp
index cdb6e59c9440da780fd3add1b48427648fd03c20..759b668d01fc695115b1b4bd202192e18b1cf831 100644 (file)
 
 #include "GuiRef.h"
 
-#include "ControlRef.h"
+#include "Buffer.h"
+#include "BufferList.h"
+#include "FuncRequest.h"
+
 #include "qt_helpers.h"
 
 #include "insets/InsetRef.h"
 
+#include "support/FileName.h"
+#include "support/filetools.h" // MakeAbsPath, MakeDisplayPath
+
 #include <QLineEdit>
 #include <QCheckBox>
 #include <QListWidget>
 #include <QToolTip>
 #include <QCloseEvent>
 
-
-using std::vector;
-using std::string;
-
+using namespace std;
+using namespace lyx::support;
 
 namespace lyx {
 namespace frontend {
 
-GuiRefDialog::GuiRefDialog(LyXView & lv)
-       : GuiDialog(lv, "ref")
+GuiRef::GuiRef(GuiView & lv)
+       : GuiCommand(lv, "ref", qt_("Cross-reference"))
 {
        setupUi(this);
-       setController(new ControlRef(*this));
-       setViewTitle(_("Cross-reference"));
 
        sort_ = false;
        at_ref_ = false;
@@ -52,9 +54,9 @@ GuiRefDialog::GuiRefDialog(LyXView & lv)
 
        connect(typeCO, SIGNAL(activated(int)),
                this, SLOT(changed_adaptor()));
-       connect(referenceED, SIGNAL(textChanged(const QString &)),
+       connect(referenceED, SIGNAL(textChanged(QString)),
                this, SLOT(changed_adaptor()));
-       connect(nameED, SIGNAL(textChanged(const QString &)),
+       connect(nameED, SIGNAL(textChanged(QString)),
                this, SLOT(changed_adaptor()));
        connect(refsLW, SIGNAL(itemClicked(QListWidgetItem *)),
                this, SLOT(refHighlighted(QListWidgetItem *)));
@@ -88,26 +90,21 @@ GuiRefDialog::GuiRefDialog(LyXView & lv)
 }
 
 
-ControlRef & GuiRefDialog::controller()
-{
-       return static_cast<ControlRef &>(GuiDialog::controller());
-}
-
-
-void GuiRefDialog::changed_adaptor()
+void GuiRef::changed_adaptor()
 {
        changed();
 }
 
 
-void GuiRefDialog::gotoClicked()
+void GuiRef::gotoClicked()
 {
        gotoRef();
 }
 
-void GuiRefDialog::selectionChanged()
+
+void GuiRef::selectionChanged()
 {
-       if (controller().isBufferReadonly())
+       if (isBufferReadonly())
                return;
 
        QList<QListWidgetItem *> selections = refsLW->selectedItems();
@@ -119,9 +116,9 @@ void GuiRefDialog::selectionChanged()
 }
 
 
-void GuiRefDialog::refHighlighted(QListWidgetItem * sel)
+void GuiRef::refHighlighted(QListWidgetItem * sel)
 {
-       if (controller().isBufferReadonly())
+       if (isBufferReadonly())
                return;
 
 /*     int const cur_item = refsLW->currentRow();
@@ -142,9 +139,9 @@ void GuiRefDialog::refHighlighted(QListWidgetItem * sel)
 }
 
 
-void GuiRefDialog::refSelected(QListWidgetItem * sel)
+void GuiRef::refSelected(QListWidgetItem * sel)
 {
-       if (controller().isBufferReadonly())
+       if (isBufferReadonly())
                return;
 
 /*     int const cur_item = refsLW->currentRow();
@@ -159,27 +156,27 @@ void GuiRefDialog::refSelected(QListWidgetItem * sel)
 }
 
 
-void GuiRefDialog::sortToggled(bool on)
+void GuiRef::sortToggled(bool on)
 {
        sort_ = on;
        redoRefs();
 }
 
 
-void GuiRefDialog::updateClicked()
+void GuiRef::updateClicked()
 {
        updateRefs();
 }
 
 
-void GuiRefDialog::reset_dialog()
+void GuiRef::reset_dialog()
 {
        at_ref_ = false;
        setGotoRef();
 }
 
 
-void GuiRefDialog::closeEvent(QCloseEvent * e)
+void GuiRef::closeEvent(QCloseEvent * e)
 {
        slotClose();
        reset_dialog();
@@ -187,23 +184,21 @@ void GuiRefDialog::closeEvent(QCloseEvent * e)
 }
 
 
-void GuiRefDialog::updateContents()
+void GuiRef::updateContents()
 {
-       InsetCommandParams const & params = controller().params();
-
        int orig_type = typeCO->currentIndex();
 
-       referenceED->setText(toqstr(params["reference"]));
+       referenceED->setText(toqstr(params_["reference"]));
 
-       nameED->setText(toqstr(params["name"]));
-       nameED->setReadOnly(!nameAllowed() && !controller().isBufferReadonly());
+       nameED->setText(toqstr(params_["name"]));
+       nameED->setReadOnly(!nameAllowed() && !isBufferReadonly());
 
        // restore type settings for new insets
-       if (params["reference"].empty())
+       if (params_["reference"].empty())
                typeCO->setCurrentIndex(orig_type);
        else
-               typeCO->setCurrentIndex(InsetRef::getType(params.getCmdName()));
-       typeCO->setEnabled(typeAllowed() && !controller().isBufferReadonly());
+               typeCO->setCurrentIndex(InsetRef::getType(params_.getCmdName()));
+       typeCO->setEnabled(typeAllowed() && !isBufferReadonly());
        if (!typeAllowed())
                typeCO->setCurrentIndex(0);
 
@@ -211,51 +206,52 @@ void GuiRefDialog::updateContents()
 
        // insert buffer list
        bufferCO->clear();
-       vector<string> const buffers = controller().getBufferList();
-       for (vector<string>::const_iterator it = buffers.begin();
-               it != buffers.end(); ++it) {
-               bufferCO->addItem(toqstr(*it));
+       vector<string> buffers = theBufferList().getFileNames();
+       for (vector<string>::iterator it = buffers.begin();
+            it != buffers.end(); ++it) {
+               bufferCO->addItem(toqstr(lyx::to_utf8(makeDisplayPath(*it))));
        }
+
        // restore the buffer combo setting for new insets
-       if (params["reference"].empty() && restored_buffer_ != -1
-       && restored_buffer_ < bufferCO->count())
+       if (params_["reference"].empty() && restored_buffer_ != -1
+           && restored_buffer_ < bufferCO->count()) 
                bufferCO->setCurrentIndex(restored_buffer_);
-       else
-               bufferCO->setCurrentIndex(controller().getBufferNum());
+       else {
+               int num = theBufferList().bufferNum(buffer().absFileName());
+               bufferCO->setCurrentIndex(num);
+       }
 
        updateRefs();
        bc().setValid(false);
 }
 
 
-void GuiRefDialog::applyView()
+void GuiRef::applyView()
 {
-       InsetCommandParams & params = controller().params();
-
        last_reference_ = referenceED->text();
 
-       params.setCmdName(InsetRef::getName(typeCO->currentIndex()));
-       params["reference"] = qstring_to_ucs4(last_reference_);
-       params["name"] = qstring_to_ucs4(nameED->text());
+       params_.setCmdName(InsetRef::getName(typeCO->currentIndex()));
+       params_["reference"] = qstring_to_ucs4(last_reference_);
+       params_["name"] = qstring_to_ucs4(nameED->text());
 
        restored_buffer_ = bufferCO->currentIndex();
 }
 
 
-bool GuiRefDialog::nameAllowed()
+bool GuiRef::nameAllowed()
 {
-       KernelDocType const doc_type = controller().docType();
+       KernelDocType const doc_type = docType();
        return doc_type != LATEX && doc_type != LITERATE;
 }
 
 
-bool GuiRefDialog::typeAllowed()
+bool GuiRef::typeAllowed()
 {
-       return controller().docType() != DOCBOOK;
+       return docType() != DOCBOOK;
 }
 
 
-void GuiRefDialog::setGoBack()
+void GuiRef::setGoBack()
 {
        gotoPB->setText(qt_("&Go Back"));
        gotoPB->setToolTip("");
@@ -263,7 +259,7 @@ void GuiRefDialog::setGoBack()
 }
 
 
-void GuiRefDialog::setGotoRef()
+void GuiRef::setGotoRef()
 {
        gotoPB->setText(qt_("&Go to Label"));
        gotoPB->setToolTip("");
@@ -271,24 +267,24 @@ void GuiRefDialog::setGotoRef()
 }
 
 
-void GuiRefDialog::gotoRef()
+void GuiRef::gotoRef()
 {
        string ref = fromqstr(referenceED->text());
 
        if (at_ref_) {
                // go back
                setGotoRef();
-               controller().gotoBookmark();
+               gotoBookmark();
        } else {
                // go to the ref
                setGoBack();
-               controller().gotoRef(ref);
+               gotoRef(ref);
        }
        at_ref_ = !at_ref_;
 }
 
 
-void GuiRefDialog::redoRefs()
+void GuiRef::redoRefs()
 {
        // Prevent these widgets from emitting any signals whilst
        // we modify their state.
@@ -302,7 +298,7 @@ void GuiRefDialog::redoRefs()
        // the first item inserted
        QString const oldSelection(referenceED->text());
 
-       for (std::vector<docstring>::const_iterator iter = refs_.begin();
+       for (vector<docstring>::const_iterator iter = refs_.begin();
                iter != refs_.end(); ++iter) {
                refsLW->addItem(toqstr(*iter));
        }
@@ -317,20 +313,18 @@ void GuiRefDialog::redoRefs()
        if (!oldSelection.isEmpty() || !last_reference_.isEmpty()) {
                bool const newInset = oldSelection.isEmpty();
                QString textToFind = newInset ? last_reference_ : oldSelection;
-               bool foundItem = false;
-               for (int i = 0; !foundItem && i < refsLW->count(); ++i) {
+               last_reference_.clear();
+               for (int i = 0; i != refsLW->count(); ++i) {
                        QListWidgetItem * item = refsLW->item(i);
                        if (textToFind == item->text()) {
                                refsLW->setCurrentItem(item);
                                refsLW->setItemSelected(item, !newInset);
                                //Make sure selected item is visible
                                refsLW->scrollToItem(item);
-                               foundItem = true;
+                               last_reference_ = textToFind;
+                               break;
                        }
                }
-               if (foundItem)
-                       last_reference_ = textToFind;
-               else last_reference_ = "";
        }
        refsLW->setUpdatesEnabled(true);
        refsLW->update();
@@ -341,11 +335,12 @@ void GuiRefDialog::redoRefs()
 }
 
 
-void GuiRefDialog::updateRefs()
+void GuiRef::updateRefs()
 {
        refs_.clear();
-       string const name = controller().getBufferName(bufferCO->currentIndex());
-       refs_ = controller().getLabelList(name);
+       string const name = theBufferList().getFileNames()[bufferCO->currentIndex()];
+       Buffer const * buf = theBufferList().getBuffer(makeAbsPath(name).absFilename());
+       buf->getLabelList(refs_);
        sortCB->setEnabled(!refs_.empty());
        refsLW->setEnabled(!refs_.empty());
        gotoPB->setEnabled(!refs_.empty());
@@ -353,11 +348,28 @@ void GuiRefDialog::updateRefs()
 }
 
 
-bool GuiRefDialog::isValid()
+bool GuiRef::isValid()
 {
        return !referenceED->text().isEmpty();
 }
 
+
+void GuiRef::gotoRef(string const & ref)
+{
+       dispatch(FuncRequest(LFUN_BOOKMARK_SAVE, "0"));
+       dispatch(FuncRequest(LFUN_LABEL_GOTO, ref));
+}
+
+
+void GuiRef::gotoBookmark()
+{
+       dispatch(FuncRequest(LFUN_BOOKMARK_GOTO, "0"));
+}
+
+
+Dialog * createGuiRef(GuiView & lv) { return new GuiRef(lv); }
+
+
 } // namespace frontend
 } // namespace lyx