void SideBarView::slotSidebarContextMenu(){ QItemSelectionModel *s_m = selectionModel(); QModelIndexList selected = s_m->selectedRows(0); if (selected.size() < 1) return; SideBarItem *item = reinterpret_cast<SideBarItem*>(selected.at(0).internalPointer()); QMenu *menu = NULL; if (item && item->childCount() > 0){ menu = new QMenu(this); menu->addAction(WICON(WulforUtil::eiEDITDELETE), tr("Close all")); if (menu->exec(QCursor::pos())){ QList<SideBarItem*> childs = item->childItems; for (const auto &child : childs){ if (child && child->getWidget()) ArenaWidgetManager::getInstance()->rem(child->getWidget()); } } menu->deleteLater(); } else if (item && item->getWidget()){ menu = item->getWidget()->getMenu(); if (!menu && (item->getWidget()->state() & ArenaWidget::Singleton)) return; if(!menu){ menu = new QMenu(this); menu->addAction(WICON(WulforUtil::eiEDITDELETE), tr("Close")); if (menu->exec(QCursor::pos())) ArenaWidgetManager::getInstance()->rem(item->getWidget()); menu->deleteLater(); } else menu->exec(QCursor::pos()); } }
QVariant FavoriteUsersModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); if (index.column() > columnCount(QModelIndex())) return QVariant(); FavoriteUserItem *item = static_cast<FavoriteUserItem*>(index.internalPointer()); switch(role) { case Qt::DecorationRole: // icon { if (index.column() == 0){ FavoriteManager::FavoriteMap ul = FavoriteManager::getInstance()->getFavoriteUsers(); for(FavoriteManager::FavoriteMap::iterator i = ul.begin(); i != ul.end(); ++i) { const dcpp::FavoriteUser &u = i->second; if (_q(u.getUser()->getCID().toBase32()) == item->cid){ if (u.isSet(FavoriteUser::FLAG_GRANTSLOT)) return WICON(WulforUtil::eiBALL_GREEN).scaled(16, 16); } } } break; } case Qt::DisplayRole: return item->data(index.column()); case Qt::TextAlignmentRole: break; case Qt::ForegroundRole: break; case Qt::ToolTipRole: break; case Qt::CheckStateRole: break; } return QVariant(); }
void SideBarDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const{ if (!index.column()){ QStyledItemDelegate::paint(painter, option, index); return; } bool showCloseBtn = false; SideBarItem *item = reinterpret_cast<SideBarItem*>(index.internalPointer()); ArenaWidget *awgt = item->getWidget(); if (awgt){ switch (awgt->role()){ case ArenaWidget::Hub: case ArenaWidget::PrivateMessage: case ArenaWidget::Search: case ArenaWidget::ShareBrowser: case ArenaWidget::CustomWidget: showCloseBtn = true; default: break; } } QStyledItemDelegate::paint(painter, option, index); if ((option.state & (QStyle::State_MouseOver | QStyle::State_Selected)) && showCloseBtn){ QPixmap px = WICON(WulforUtil::eiEDITDELETE).scaled(16, 16, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); painter->drawPixmap(option.rect.x() + (option.rect.width() - 16)/2, option.rect.y() + (option.rect.height() - 16)/2, 16, 16, px); return; } }
const QPixmap &DeclarativeWidget::getPixmap(){ return WICON(WulforUtil::eiFILETYPE_APPLICATION); }