31    , m_bookmarks(
mApp->bookmarks())
 
   32    , m_model(m_bookmarks->model())
 
   34    , m_type(BookmarksManagerViewType)
 
   39    setUniformRowHeights(
true);
 
   40    setDropIndicatorShown(
true);
 
   41    setAllColumnsShowFocus(
true);
 
   43    header()->resizeSections(QHeaderView::ResizeToContents);
 
   45    connect(
this, &QTreeView::expanded, 
this, &BookmarksTreeView::indexExpanded);
 
   46    connect(
this, &QTreeView::collapsed, 
this, &BookmarksTreeView::indexCollapsed);
 
   60        setColumnHidden(1, 
false);
 
   61        setHeaderHidden(
false);
 
   62        setMouseTracking(
false);
 
   63        setSelectionMode(QAbstractItemView::ExtendedSelection);
 
   66        setColumnHidden(1, 
true);
 
   67        setHeaderHidden(
true);
 
   68        setMouseTracking(
true);
 
   69        setSelectionMode(QAbstractItemView::SingleSelection);
 
   75    restoreExpandedState(QModelIndex());
 
   81    return items.count() == 1 ? items.at(0) : 
nullptr;
 
   86    QList<BookmarkItem*> items;
 
   88    const auto indexes = selectionModel()->selectedRows();
 
   89    for (
const QModelIndex &index : indexes) {
 
   99    QModelIndex col0 = m_filter->mapFromSource(m_model->
index(item, 0));
 
  100    QModelIndex col1 = m_filter->mapFromSource(m_model->
index(item, 1));
 
  102    selectionModel()->clearSelection();
 
  103    selectionModel()->select(col0, QItemSelectionModel::Select);
 
  104    selectionModel()->select(col1, QItemSelectionModel::Select);
 
  109    QModelIndex index = m_filter->mapFromSource(m_model->
index(item));
 
  110    QModelIndex parent = m_filter->parent(index);
 
  112    while (parent.isValid()) {
 
  113        setExpanded(parent, 
true);
 
  114        parent = m_filter->parent(parent);
 
  123void BookmarksTreeView::indexExpanded(
const QModelIndex &parent)
 
  139void BookmarksTreeView::indexCollapsed(
const QModelIndex &parent)
 
  155void BookmarksTreeView::restoreExpandedState(
const QModelIndex &parent)
 
  157    for (
int i = 0; 
i < m_filter->rowCount(parent); ++
i) {
 
  158        QModelIndex index = m_filter->index(
i, 0, parent);
 
  161        restoreExpandedState(index);
 
  165void BookmarksTreeView::rowsInserted(
const QModelIndex &parent, 
int start, 
int end)
 
  167    restoreExpandedState(parent);
 
  168    QTreeView::rowsInserted(parent, start, end);
 
  171void BookmarksTreeView::selectionChanged(
const QItemSelection &selected, 
const QItemSelection &deselected)
 
  179void BookmarksTreeView::contextMenuEvent(QContextMenuEvent* event)
 
  184void BookmarksTreeView::mouseMoveEvent(QMouseEvent* event)
 
  186    QTreeView::mouseMoveEvent(event);
 
  189        QCursor cursor = Qt::ArrowCursor;
 
  190        if (event->buttons() == Qt::NoButton) {
 
  191            QModelIndex index = indexAt(event->position().toPoint());
 
  193                cursor = Qt::PointingHandCursor;
 
  196        viewport()->setCursor(cursor);
 
  200void BookmarksTreeView::mousePressEvent(QMouseEvent* event)
 
  202    QTreeView::mousePressEvent(event);
 
  204    if (selectionModel()->selectedRows().count() == 1) {
 
  205        QModelIndex index = indexAt(event->position().toPoint());
 
  206        Qt::MouseButtons buttons = 
event->buttons();
 
  207        Qt::KeyboardModifiers modifiers = 
event->modifiers();
 
  209        if (index.isValid()) {
 
  212            if (buttons == Qt::LeftButton && modifiers == Qt::ShiftModifier) {
 
  215            else if (buttons == Qt::MiddleButton || (buttons == Qt::LeftButton && modifiers == Qt::ControlModifier)) {
 
  222void BookmarksTreeView::mouseReleaseEvent(QMouseEvent* event)
 
  224    QTreeView::mouseReleaseEvent(event);
 
  226    if (selectionModel()->selectedRows().count() == 1) {
 
  227        QModelIndex index = indexAt(event->position().toPoint());
 
  229        if (index.isValid()) {
 
  233            if (m_type == 
BookmarksSidebarViewType && event->button() == Qt::LeftButton && event->modifiers() == Qt::NoModifier) {
 
  240void BookmarksTreeView::mouseDoubleClickEvent(QMouseEvent* event)
 
  242    QTreeView::mouseDoubleClickEvent(event);
 
  244    if (selectionModel()->selectedRows().count() == 1) {
 
  245        QModelIndex index = indexAt(event->position().toPoint());
 
  247        if (index.isValid()) {
 
  249            Qt::MouseButtons buttons = 
event->buttons();
 
  250            Qt::KeyboardModifiers modifiers = QApplication::keyboardModifiers();
 
  252            if (buttons == Qt::LeftButton && modifiers == Qt::NoModifier) {
 
  255            else if (buttons == Qt::LeftButton && modifiers == Qt::ShiftModifier) {
 
  262void BookmarksTreeView::keyPressEvent(QKeyEvent* event)
 
  264    QTreeView::keyPressEvent(event);
 
  266    if (selectionModel()->selectedRows().count() == 1) {
 
  267        QModelIndex index = selectionModel()->selectedRows().at(0);
 
  270        switch (event->key()) {
 
  273            if (item->
isFolder() && (event->modifiers() == Qt::NoModifier || event->modifiers() == Qt::KeypadModifier)) {
 
  274                setExpanded(index, !isExpanded(index));
 
  277                Qt::KeyboardModifiers modifiers = 
event->modifiers();
 
  279                if (modifiers == Qt::NoModifier || modifiers == Qt::KeypadModifier) {
 
  282                else if (modifiers == Qt::ControlModifier) {
 
  285                else if (modifiers == Qt::ShiftModifier) {
 
void setSidebarExpanded(bool expanded)
 
void setExpanded(bool expanded)
 
bool isSidebarExpanded() const
 
void setFilterFixedString(const QString &pattern)
 
BookmarkItem * item(const QModelIndex &index) const
 
QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const override
 
QList< BookmarkItem * > selectedBookmarks() const
 
ViewType viewType() const
 
BookmarksTreeView(QWidget *parent=nullptr)
 
void bookmarkShiftActivated(BookmarkItem *item)
 
void bookmarkCtrlActivated(BookmarkItem *item)
 
void ensureBookmarkVisible(BookmarkItem *item)
 
void setViewType(ViewType type)
 
void bookmarkActivated(BookmarkItem *item)
 
void bookmarksSelected(const QList< BookmarkItem * > &items)
 
BookmarkItem * selectedBookmark() const
 
void search(const QString &string)
 
void contextMenuRequested(const QPoint &point)
 
@ BookmarksSidebarViewType
 
@ BookmarksManagerViewType
 
void selectBookmark(BookmarkItem *item)