mirror of
https://gitee.com/vnotex/vnote.git
synced 2025-07-05 13:59:52 +08:00
Navigation: fix navigation visible items of list/tree widgets
isHidden() will be false even the item is not visible in current viewport.
This commit is contained in:
parent
b025327c85
commit
803a0b66df
@ -8,6 +8,7 @@
|
||||
|
||||
#include "vnote.h"
|
||||
#include "utils/vutils.h"
|
||||
#include "vtreewidget.h"
|
||||
|
||||
extern VNote *g_vnote;
|
||||
|
||||
@ -68,7 +69,19 @@ void VNavigationMode::showNavigation(QListWidget *p_widget)
|
||||
QList<QListWidgetItem *> VNavigationMode::getVisibleItems(const QListWidget *p_widget) const
|
||||
{
|
||||
QList<QListWidgetItem *> items;
|
||||
for (int i = 0; i < p_widget->count(); ++i) {
|
||||
// The first visible item.
|
||||
QListWidgetItem *firstItem = p_widget->itemAt(0, 0);
|
||||
if (!firstItem) {
|
||||
return items;
|
||||
}
|
||||
|
||||
QListWidgetItem *lastItem = NULL;
|
||||
lastItem = p_widget->itemAt(p_widget->viewport()->rect().bottomLeft());
|
||||
|
||||
int first = p_widget->row(firstItem);
|
||||
int last = lastItem ? p_widget->row(lastItem) : (p_widget->count() - 1);
|
||||
|
||||
for (int i = first; i <= last; ++i) {
|
||||
QListWidgetItem *item = p_widget->item(i);
|
||||
if (!item->isHidden() && item->flags() != Qt::NoItemFlags) {
|
||||
items.append(item);
|
||||
@ -78,35 +91,27 @@ QList<QListWidgetItem *> VNavigationMode::getVisibleItems(const QListWidget *p_w
|
||||
return items;
|
||||
}
|
||||
|
||||
static QList<QTreeWidgetItem *> getVisibleChildItems(const QTreeWidgetItem *p_item)
|
||||
{
|
||||
QList<QTreeWidgetItem *> items;
|
||||
if (p_item && !p_item->isHidden() && p_item->isExpanded()) {
|
||||
for (int i = 0; i < p_item->childCount(); ++i) {
|
||||
QTreeWidgetItem *child = p_item->child(i);
|
||||
if (!child->isHidden()) {
|
||||
items.append(child);
|
||||
if (child->isExpanded()) {
|
||||
items.append(getVisibleChildItems(child));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return items;
|
||||
}
|
||||
|
||||
QList<QTreeWidgetItem *> VNavigationMode::getVisibleItems(const QTreeWidget *p_widget) const
|
||||
{
|
||||
QList<QTreeWidgetItem *> items;
|
||||
for (int i = 0; i < p_widget->topLevelItemCount(); ++i) {
|
||||
QTreeWidgetItem *item = p_widget->topLevelItem(i);
|
||||
if (!item->isHidden()) {
|
||||
items.append(item);
|
||||
if (item->isExpanded()) {
|
||||
items.append(getVisibleChildItems(item));
|
||||
}
|
||||
|
||||
// The first visible item.
|
||||
QTreeWidgetItem *firstItem = p_widget->itemAt(0, 0);
|
||||
if (!firstItem) {
|
||||
return items;
|
||||
}
|
||||
|
||||
QTreeWidgetItem *lastItem = NULL;
|
||||
lastItem = p_widget->itemAt(p_widget->viewport()->rect().bottomLeft());
|
||||
|
||||
QTreeWidgetItem *item = firstItem;
|
||||
while (item) {
|
||||
items.append(item);
|
||||
if (item == lastItem) {
|
||||
break;
|
||||
}
|
||||
|
||||
item = VTreeWidget::nextItem(p_widget, item, true);
|
||||
}
|
||||
|
||||
return items;
|
||||
|
@ -229,7 +229,6 @@ void VTagPanel::showNavigation()
|
||||
|
||||
QString str = QString(m_majorKey) + key;
|
||||
QLabel *label = new QLabel(str, this);
|
||||
qDebug() << g_vnote->getNavigationLabelStyle(str, true);
|
||||
label->setStyleSheet(g_vnote->getNavigationLabelStyle(str, true));
|
||||
label->move(m_btn->geometry().topLeft());
|
||||
label->show();
|
||||
|
@ -252,7 +252,9 @@ static QTreeWidgetItem *lastItemOfTree(QTreeWidgetItem *p_item)
|
||||
}
|
||||
}
|
||||
|
||||
QTreeWidgetItem *VTreeWidget::nextSibling(QTreeWidgetItem *p_item, bool p_forward)
|
||||
QTreeWidgetItem *VTreeWidget::nextSibling(const QTreeWidget *p_tree,
|
||||
QTreeWidgetItem *p_item,
|
||||
bool p_forward)
|
||||
{
|
||||
if (!p_item) {
|
||||
return NULL;
|
||||
@ -276,10 +278,10 @@ QTreeWidgetItem *VTreeWidget::nextSibling(QTreeWidgetItem *p_item, bool p_forwar
|
||||
return pa->child(idx);
|
||||
} else {
|
||||
// Top level item.
|
||||
int idx = indexOfTopLevelItem(p_item);
|
||||
int idx = p_tree->indexOfTopLevelItem(p_item);
|
||||
if (p_forward) {
|
||||
++idx;
|
||||
if (idx >= topLevelItemCount()) {
|
||||
if (idx >= p_tree->topLevelItemCount()) {
|
||||
return NULL;
|
||||
}
|
||||
} else {
|
||||
@ -289,7 +291,7 @@ QTreeWidgetItem *VTreeWidget::nextSibling(QTreeWidgetItem *p_item, bool p_forwar
|
||||
}
|
||||
}
|
||||
|
||||
return topLevelItem(idx);
|
||||
return p_tree->topLevelItem(idx);
|
||||
}
|
||||
}
|
||||
|
||||
@ -305,13 +307,15 @@ void VTreeWidget::selectNextItem(bool p_forward)
|
||||
return;
|
||||
}
|
||||
|
||||
QTreeWidgetItem *nItem = nextItem(item, p_forward);
|
||||
QTreeWidgetItem *nItem = nextItem(this, item, p_forward);
|
||||
if (nItem) {
|
||||
setCurrentItem(nItem, 0, QItemSelectionModel::ClearAndSelect);
|
||||
}
|
||||
}
|
||||
|
||||
QTreeWidgetItem *VTreeWidget::nextItem(QTreeWidgetItem *p_item, bool p_forward)
|
||||
QTreeWidgetItem *VTreeWidget::nextItem(const QTreeWidget *p_tree,
|
||||
QTreeWidgetItem *p_item,
|
||||
bool p_forward)
|
||||
{
|
||||
QTreeWidgetItem *nItem = NULL;
|
||||
if (p_forward) {
|
||||
@ -319,12 +323,12 @@ QTreeWidgetItem *VTreeWidget::nextItem(QTreeWidgetItem *p_item, bool p_forward)
|
||||
nItem = p_item->child(0);
|
||||
} else {
|
||||
while (!nItem && p_item) {
|
||||
nItem = nextSibling(p_item, true);
|
||||
nItem = nextSibling(p_tree, p_item, true);
|
||||
p_item = p_item->parent();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
nItem = nextSibling(p_item, false);
|
||||
nItem = nextSibling(p_tree, p_item, false);
|
||||
if (!nItem) {
|
||||
nItem = p_item->parent();
|
||||
} else {
|
||||
|
@ -45,6 +45,11 @@ public:
|
||||
|
||||
QTreeWidgetItem *getItemFromIndex(const QModelIndex &p_index) const;
|
||||
|
||||
// Next visible item.
|
||||
static QTreeWidgetItem *nextItem(const QTreeWidget* p_tree,
|
||||
QTreeWidgetItem *p_item,
|
||||
bool p_forward);
|
||||
|
||||
protected:
|
||||
void keyPressEvent(QKeyEvent *p_event) Q_DECL_OVERRIDE;
|
||||
|
||||
@ -67,10 +72,9 @@ private:
|
||||
|
||||
QGraphicsOpacityEffect *getSearchInputEffect() const;
|
||||
|
||||
QTreeWidgetItem *nextSibling(QTreeWidgetItem *p_item, bool p_forward);
|
||||
|
||||
// Next visible item.
|
||||
QTreeWidgetItem *nextItem(QTreeWidgetItem *p_item, bool p_forward);
|
||||
static QTreeWidgetItem *nextSibling(const QTreeWidget *p_widget,
|
||||
QTreeWidgetItem *p_item,
|
||||
bool p_forward);
|
||||
|
||||
VSimpleSearchInput *m_searchInput;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user