summaryrefslogtreecommitdiff
path: root/src/plugins/bookmarks
diff options
context:
space:
mode:
authordt <qtc-committer@nokia.com>2009-09-28 17:28:29 +0200
committerdt <qtc-committer@nokia.com>2009-09-28 17:28:29 +0200
commit96b495e4407df3bccf5ad50211e2f0069ab8d904 (patch)
tree47661f5a00b010c3189bbad118385264f5b9a018 /src/plugins/bookmarks
parenta2bfa61013d3f0a1ccbb151e4124677936cd89b7 (diff)
downloadqt-creator-96b495e4407df3bccf5ad50211e2f0069ab8d904.tar.gz
On jumping to invalid bookmarks, delete them.
For next/prev try the next/prev one then.
Diffstat (limited to 'src/plugins/bookmarks')
-rw-r--r--src/plugins/bookmarks/bookmarkmanager.cpp61
-rw-r--r--src/plugins/bookmarks/bookmarkmanager.h4
2 files changed, 42 insertions, 23 deletions
diff --git a/src/plugins/bookmarks/bookmarkmanager.cpp b/src/plugins/bookmarks/bookmarkmanager.cpp
index 4396f78646..4fc8c04010 100644
--- a/src/plugins/bookmarks/bookmarkmanager.cpp
+++ b/src/plugins/bookmarks/bookmarkmanager.cpp
@@ -279,7 +279,10 @@ void BookmarkView::setModel(QAbstractItemModel *model)
void BookmarkView::gotoBookmark(const QModelIndex &index)
{
- static_cast<BookmarkManager *>(model())->gotoBookmark(index);
+ BookmarkManager *bm = static_cast<BookmarkManager *>(model());
+ Bookmark *bk = bm->bookmarkForIndex(index);
+ if (!bm->gotoBookmark(bk))
+ bm->removeBookmark(bk);
}
////
@@ -479,15 +482,14 @@ Bookmark *BookmarkManager::bookmarkForIndex(QModelIndex index)
return m_bookmarksList.at(index.row());
}
-void BookmarkManager::gotoBookmark(const QModelIndex &idx)
-{
- gotoBookmark(m_bookmarksList.at(idx.row()));
-}
-void BookmarkManager::gotoBookmark(Bookmark* bookmark)
+bool BookmarkManager::gotoBookmark(Bookmark* bookmark)
{
- TextEditor::BaseTextEditor::openEditorAt(bookmark->filePath(),
- bookmark->lineNumber());
+ if (!TextEditor::BaseTextEditor::openEditorAt(bookmark->filePath(), bookmark->lineNumber())) {
+ // Could not open editor
+ return false;
+ }
+ return true;
}
void BookmarkManager::nextInDocument()
@@ -546,12 +548,22 @@ void BookmarkManager::next()
QModelIndex current = selectionModel()->currentIndex();
if (!current.isValid())
return;
- int row = current.row() + 1;
- if (row == m_bookmarksList.size())
- row = 0;
- QModelIndex newIndex = current.sibling(row, current.column());
- selectionModel()->setCurrentIndex(newIndex, QItemSelectionModel::Select | QItemSelectionModel::Clear);
- gotoBookmark(newIndex);
+ int row = current.row();
+ ++row;
+ while (true) {
+ if (row == m_bookmarksList.size())
+ row = 0;
+
+ Bookmark *bk = m_bookmarksList.at(row);
+ if (gotoBookmark(bk)) {
+ QModelIndex newIndex = current.sibling(row, current.column());
+ selectionModel()->setCurrentIndex(newIndex, QItemSelectionModel::Select | QItemSelectionModel::Clear);
+ return;
+ }
+ removeBookmark(bk);
+ if (m_bookmarksList.isEmpty()) // No bookmarks anymore ...
+ return;
+ }
}
void BookmarkManager::prev()
@@ -559,13 +571,22 @@ void BookmarkManager::prev()
QModelIndex current = selectionModel()->currentIndex();
if (!current.isValid())
return;
+
int row = current.row();
- if (row == 0)
- row = m_bookmarksList.size();
- --row;
- QModelIndex newIndex = current.sibling(row, current.column());
- selectionModel()->setCurrentIndex(newIndex, QItemSelectionModel::Select | QItemSelectionModel::Clear);
- gotoBookmark(newIndex);
+ while (true) {
+ if (row == 0)
+ row = m_bookmarksList.size();
+ --row;
+ Bookmark *bk = m_bookmarksList.at(row);
+ if (gotoBookmark(bk)) {
+ QModelIndex newIndex = current.sibling(row, current.column());
+ selectionModel()->setCurrentIndex(newIndex, QItemSelectionModel::Select | QItemSelectionModel::Clear);
+ return;
+ }
+ removeBookmark(bk);
+ if (m_bookmarksList.isEmpty())
+ return;
+ }
}
TextEditor::ITextEditor *BookmarkManager::currentTextEditor() const
diff --git a/src/plugins/bookmarks/bookmarkmanager.h b/src/plugins/bookmarks/bookmarkmanager.h
index 18562b6e50..7056868f07 100644
--- a/src/plugins/bookmarks/bookmarkmanager.h
+++ b/src/plugins/bookmarks/bookmarkmanager.h
@@ -80,8 +80,6 @@ public:
int columnCount(const QModelIndex &parent = QModelIndex()) const;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
- void gotoBookmark(const QModelIndex &);
-
// this QItemSelectionModel is shared by all views
QItemSelectionModel *selectionModel() const;
@@ -101,6 +99,7 @@ public slots:
void prev();
void moveUp();
void moveDown();
+ bool gotoBookmark(Bookmark *bookmark);
signals:
void updateActions(int state);
@@ -108,7 +107,6 @@ signals:
private slots:
void updateActionStatus();
- void gotoBookmark(Bookmark *bookmark);
void loadBookmarks();
private: