1
mirror of https://invent.kde.org/network/falkon.git synced 2024-12-24 04:36:34 +01:00

HistoryModel: Fixed deleting top level item (month, day)

- when it was not fetched
This commit is contained in:
nowrep 2012-07-04 00:21:08 +02:00
parent 770a9762a9
commit 2b7b28db37
4 changed files with 36 additions and 7 deletions

View File

@ -16,6 +16,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* ============================================================ */ * ============================================================ */
#include "historyitem.h" #include "historyitem.h"
#include "globalfunctions.h"
HistoryItem::HistoryItem(HistoryItem* parent) HistoryItem::HistoryItem(HistoryItem* parent)
: canFetchMore(false) : canFetchMore(false)
@ -81,23 +82,19 @@ void HistoryItem::insertChild(int row, HistoryItem* child)
void HistoryItem::removeChild(int row) void HistoryItem::removeChild(int row)
{ {
if (m_children.count() > row) { if (qz_listContainsIndex(m_children, row)) {
removeChild(m_children.at(row)); removeChild(m_children.at(row));
} }
} }
void HistoryItem::removeChild(HistoryItem* child) void HistoryItem::removeChild(HistoryItem* child)
{ {
int index = m_children.indexOf(child); m_children.removeOne(child);
if (index != -1) {
m_children.removeOne(child);
}
} }
HistoryItem* HistoryItem::child(int row) const HistoryItem* HistoryItem::child(int row) const
{ {
if (m_children.count() > row) { if (qz_listContainsIndex(m_children, row)) {
return m_children.at(row); return m_children.at(row);
} }

View File

@ -235,6 +235,30 @@ HistoryItem* HistoryModel::itemFromIndex(const QModelIndex &index) const
return m_rootItem; return m_rootItem;
} }
void HistoryModel::removeTopLevelIndexes(const QList<QPersistentModelIndex> &indexes)
{
foreach(const QPersistentModelIndex & index, indexes) {
if (index.parent().isValid()) {
continue;
}
int row = index.row();
HistoryItem* item = m_rootItem->child(row);
if (!item) {
return;
}
beginRemoveRows(QModelIndex(), row, row);
delete item;
endRemoveRows();
if (item == m_todayItem) {
m_todayItem = 0;
}
}
}
void HistoryModel::resetHistory() void HistoryModel::resetHistory()
{ {
beginResetModel(); beginResetModel();

View File

@ -66,6 +66,8 @@ public:
HistoryItem* itemFromIndex(const QModelIndex &index) const; HistoryItem* itemFromIndex(const QModelIndex &index) const;
void removeTopLevelIndexes(const QList<QPersistentModelIndex> &indexes);
signals: signals:
private slots: private slots:

View File

@ -66,6 +66,8 @@ void HistoryView::removeItems()
QList<int> list; QList<int> list;
QApplication::setOverrideCursor(Qt::WaitCursor); QApplication::setOverrideCursor(Qt::WaitCursor);
QList<QPersistentModelIndex> topLevelIndexes;
foreach(const QModelIndex & index, selectedIndexes()) { foreach(const QModelIndex & index, selectedIndexes()) {
if (index.column() > 0) { if (index.column() > 0) {
continue; continue;
@ -76,6 +78,8 @@ void HistoryView::removeItems()
qint64 end = index.data(HistoryModel::TimestampEndRole).toLongLong(); qint64 end = index.data(HistoryModel::TimestampEndRole).toLongLong();
list.append(m_history->indexesFromTimeRange(start, end)); list.append(m_history->indexesFromTimeRange(start, end));
topLevelIndexes.append(index);
} }
else { else {
int id = index.data(HistoryModel::IdRole).toInt(); int id = index.data(HistoryModel::IdRole).toInt();
@ -86,6 +90,8 @@ void HistoryView::removeItems()
} }
m_history->deleteHistoryEntry(list); m_history->deleteHistoryEntry(list);
m_history->model()->removeTopLevelIndexes(topLevelIndexes);
QApplication::restoreOverrideCursor(); QApplication::restoreOverrideCursor();
} }