bool RepoTreeView::viewportEvent(QEvent *event) { if (event->type() != QEvent::ToolTip && event->type() != QEvent::WhatsThis) { return QTreeView::viewportEvent(event); } QPoint global_pos = QCursor::pos(); QPoint viewport_pos = viewport()->mapFromGlobal(global_pos); QModelIndex index = indexAt(viewport_pos); if (!index.isValid()) { return true; } QStandardItem *item = getRepoItem(index); if (!item) { return true; } QRect item_rect = visualRect(index); if (item->type() == REPO_ITEM_TYPE) { showRepoItemToolTip((RepoItem *)item, global_pos, item_rect); } else { showRepoCategoryItemToolTip((RepoCategoryItem *)item, global_pos, item_rect); } return true; }
void RepoTreeView::onItemDoubleClicked(const QModelIndex& index) { QStandardItem *item = getRepoItem(index); if (!item) { return; } if (item->type() == REPO_ITEM_TYPE) { RepoItem *it = (RepoItem *)item; const LocalRepo& local_repo = it->localRepo(); if (local_repo.isValid()) { // open local folder for downloaded repo QDesktopServices::openUrl(QUrl::fromLocalFile(local_repo.worktree)); } else { // open seahub repo page for not downloaded repo // if (seafApplet->isPro()) { FileBrowserDialog* dialog = new FileBrowserDialog(it->repo(), this); const QRect screen = QApplication::desktop()->screenGeometry(); dialog->setAttribute(Qt::WA_DeleteOnClose, true); dialog->show(); dialog->move(screen.center() - dialog->rect().center()); dialog->raise(); // } else { // const Account& account = seafApplet->accountManager()->accounts()[0]; // if (account.isValid()) { // QUrl url = account.getAbsoluteUrl("repo/" + it->repo().id); // QDesktopServices::openUrl(url); // } // } } } }
void RepoTreeView::collapse(const QModelIndex& index, bool remember) { QTreeView::collapse(index); if (remember) { QStandardItem *item = getRepoItem(index); if (item->type() == REPO_CATEGORY_TYPE) { expanded_categroies_.remove(item->data(Qt::DisplayRole).toString()); } } }
void RepoTreeView::onItemDoubleClicked(const QModelIndex& index) { QStandardItem *item = getRepoItem(index); if (!item) { return; } if (item->type() == REPO_ITEM_TYPE) { RepoItem *it = (RepoItem *)item; const LocalRepo& local_repo = it->localRepo(); if (local_repo.isValid()) { QDesktopServices::openUrl(QUrl::fromLocalFile(local_repo.worktree)); } } }
void RepoTreeView::onItemClicked(const QModelIndex& index) { QStandardItem *item = getRepoItem(index); if (!item) { return; } if (item->type() == REPO_ITEM_TYPE) { return; } else { // A repo category item if (isExpanded(index)) { collapse(index); } else { expand(index); } } }
void RepoTreeView::contextMenuEvent(QContextMenuEvent *event) { QPoint pos = event->pos(); QModelIndex index = indexAt(pos); if (!index.isValid()) { // Not clicked at a repo item return; } QStandardItem *item = getRepoItem(index); if (!item || item->type() != REPO_ITEM_TYPE) { return; } QMenu *menu = prepareContextMenu((RepoItem *)item); pos = viewport()->mapToGlobal(pos); menu->exec(pos); }