]> git.lyx.org Git - features.git/commitdiff
Fix bug 2474; partial fix for 1777. Added last_reference_ member to QRef class and...
authorRichard Heck <rgheck@comcast.net>
Tue, 24 Apr 2007 22:10:56 +0000 (22:10 +0000)
committerRichard Heck <rgheck@comcast.net>
Tue, 24 Apr 2007 22:10:56 +0000 (22:10 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@17959 a592a061-630c-0410-9148-cb99ea01b6c8

src/frontends/qt4/QRef.C
src/frontends/qt4/QRef.h

index 6cc3933a67ce5ab7fd64f784d42d6ec9e3170c37..5cdb5ca73b1bac2c92f06559a3851f55b322e103 100644 (file)
@@ -110,9 +110,11 @@ void QRef::update_contents()
 void QRef::apply()
 {
        InsetCommandParams & params = controller().params();
+       
+       last_reference_ = dialog_->referenceED->text();
 
        params.setCmdName(InsetRef::getName(dialog_->typeCO->currentIndex()));
-       params["reference"] = qstring_to_ucs4(dialog_->referenceED->text());
+       params["reference"] = qstring_to_ucs4(last_reference_);
        params["name"] = qstring_to_ucs4(dialog_->nameED->text());
 
        restored_buffer_ = dialog_->bufferCO->currentIndex();
@@ -173,15 +175,13 @@ void QRef::redoRefs()
        // we modify their state.
        dialog_->refsLW->blockSignals(true);
        dialog_->referenceED->blockSignals(true);
-
-       int lastref = dialog_->refsLW->currentRow();
-
        dialog_->refsLW->setUpdatesEnabled(false);
+       
        dialog_->refsLW->clear();
 
        // need this because Qt will send a highlight() here for
        // the first item inserted
-       QString const tmp(dialog_->referenceED->text());
+       QString const oldSelection(dialog_->referenceED->text());
 
        for (std::vector<docstring>::const_iterator iter = refs_.begin();
                iter != refs_.end(); ++iter) {
@@ -191,21 +191,28 @@ void QRef::redoRefs()
        if (sort_)
                dialog_->refsLW->sortItems();
 
-       dialog_->referenceED->setText(tmp);
+       dialog_->referenceED->setText(oldSelection);
 
-       // restore the last selection for new insets
-       if (tmp.isEmpty() && lastref != -1
-               && lastref < int(dialog_->refsLW->count())) {
-               dialog_->refsLW->setCurrentRow(lastref);
-               dialog_->refsLW->clearSelection();
-       } else
-               for (int i = 0; i < dialog_->refsLW->count(); ++i) {
+       // restore the last selection or, for new insets, highlight
+       // the previous selection
+       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 < dialog_->refsLW->count(); ++i) {
                        QListWidgetItem * item = dialog_->refsLW->item(i);
-                       if (tmp == item->text()) {
-                               dialog_->refsLW->setItemSelected(item, true);
+                       if (textToFind == item->text()) {
+                               dialog_->refsLW->setCurrentItem(item);
+                               dialog_->refsLW->setItemSelected(item, !newInset);
+                               //Make sure selected item is visible
+                               dialog_->refsLW->scrollToItem(item);
+                               foundItem = true;
                        }
                }
-
+               if (foundItem)
+                       last_reference_ = textToFind;
+               else last_reference_ = "";
+       }
        dialog_->refsLW->setUpdatesEnabled(true);
        dialog_->refsLW->update();
 
index 960ade559811054f91b4794724b7b4f3d16a6e78..4bf7c961dd5c2ea0d58812b1ceac2e114d7afa57 100644 (file)
@@ -66,8 +66,11 @@ private:
        /// sort or not persistent state
        bool sort_;
 
-       /// at a reference ?
+       /// went to a reference ?
        bool at_ref_;
+       
+       /// the last reference entered or examined
+       QString last_reference_;
 
        /// store the buffer settings
        int restored_buffer_;