}
}
+ // In case if the first item of a group has been removed, the group header
+ // must be applied to the next visible item.
+ if (m_grouped && index < m_model->count()) {
+ updateGroupHeaderForWidget(m_visibleItems.value(index));
+ }
+
if (!hasMultipleRanges) {
// The decrease-layout-size optimization in KItemListView::slotItemsInserted()
// assumes an updated geometry. If items are removed during an active transaction,
KStandardItem* shownItem = this->item(index);
shownItem->setDataValue("isHidden", hide);
if (!m_hiddenItemsShown && hide) {
+ const int newIndex = hiddenIndex(index);
KStandardItem* hiddenItem = new KStandardItem(*shownItem);
removeItem(index);
- index = hiddenIndex(index);
- Q_ASSERT(!m_hiddenItems[index]);
- m_hiddenItems[index] = hiddenItem;
+ m_hiddenItems.insert(newIndex, hiddenItem);
}
+#ifdef PLACESITEMMODEL_DEBUG
+ kDebug() << "Changed hide-state from" << index << "to" << hide;
+ showModelState();
+#endif
}
}
void PlacesItemModel::onItemInserted(int index)
{
- m_hiddenItems.insert(hiddenIndex(index), 0);
+ if (index == count() - 1) {
+ m_hiddenItems.append(0);
+ } else {
+ m_hiddenItems.insert(hiddenIndex(index), 0);
+ }
}
void PlacesItemModel::onItemRemoved(int index)
const int removeIndex = hiddenIndex(index);
Q_ASSERT(!m_hiddenItems[removeIndex]);
m_hiddenItems.removeAt(removeIndex);
+#ifdef PLACESITEMMODEL_DEBUG
+ kDebug() << "Removed item" << index;
+ showModelState();
+#endif
}
void PlacesItemModel::loadBookmarks()
}
}
}
+
+#ifdef PLACESITEMMODEL_DEBUG
+ kDebug() << "Loaded bookmarks";
+ showModelState();
+#endif
}
void PlacesItemModel::createSystemBookmarks()
{
int hiddenIndex = 0;
int visibleItemIndex = 0;
- while (visibleItemIndex < index && hiddenIndex < m_hiddenItems.count()) {
+ while (hiddenIndex < m_hiddenItems.count()) {
if (!m_hiddenItems[hiddenIndex]) {
+ if (visibleItemIndex == index) {
+ break;
+ }
++visibleItemIndex;
}
++hiddenIndex;
}
- return hiddenIndex;
+ return hiddenIndex >= m_hiddenItems.count() ? -1 : hiddenIndex;
}
QString PlacesItemModel::placesGroupName()
}
#endif
+#ifdef PLACESITEMMODEL_DEBUG
+void PlacesItemModel::showModelState()
+{
+ kDebug() << "hidden-index model-index text";
+ int j = 0;
+ for (int i = 0; i < m_hiddenItems.count(); ++i) {
+ if (m_hiddenItems[i]) {
+ kDebug() << i << "(Hidden) " << " " << m_hiddenItems[i]->dataValue("text").toString();
+ } else {
+ kDebug() << i << " " << j << " " << item(j)->dataValue("text").toString();
+ ++j;
+ }
+ }
+}
+#endif
+
#include "placesitemmodel.moc"
}
#endif
+#define PLACESITEMMODEL_DEBUG
+
+/**
+ * @brief Model for maintaining the bookmarks of the places panel.
+ *
+ * It is compatible to the KFilePlacesModel from kdelibs but adds
+ * the ability to have groups for places.
+ */
class PlacesItemModel: public KStandardItemModel
{
Q_OBJECT
private:
void loadBookmarks();
+ /**
+ * Creates system bookmarks that are shown per default and can
+ * only be hidden but not removed. The result will be stored
+ * in m_systemBookmarks.
+ */
void createSystemBookmarks();
+ /**
+ * @param index Item index related to the model.
+ * @return Corresponding item index related to m_hiddenItems.
+ */
int hiddenIndex(int index) const;
static QString placesGroupName();
static KUrl searchUrlForTerm(const Nepomuk::Query::Term& term);
#endif
+#ifdef PLACESITEMMODEL_DEBUG
+ void showModelState();
+#endif
+
private:
bool m_nepomukRunning;
bool m_hiddenItemsShown;