void ExplorerTreeView::showContextMenu(const QPoint& point) { QPoint menuPoint = mapToGlobal(point); menuPoint.setY(menuPoint.y() + header()->height()); QModelIndex sel = selectedIndex(); if(sel.isValid()){ IExplorerTreeItem *node = common::utils_qt::item<IExplorerTreeItem*>(sel); DCHECK(node); if(!node){ return; } if(node->type() == IExplorerTreeItem::eCluster){ QMenu menu(this); closeClusterAction_->setEnabled(true); menu.addAction(closeClusterAction_); menu.exec(menuPoint); } else if(node->type() == IExplorerTreeItem::eServer){ QMenu menu(this); menu.addAction(connectAction_); menu.addAction(openConsoleAction_); IServerSPtr server = node->server(); bool isCon = server->isConnected(); bool isAuth = server->isAuthenticated(); bool isClusterMember = dynamic_cast<ExplorerClusterItem*>(node->parent()) != NULL; loadDatabaseAction_->setEnabled(isAuth); menu.addAction(loadDatabaseAction_); infoServerAction_->setEnabled(isAuth); menu.addAction(infoServerAction_); propertyServerAction_->setEnabled(isAuth); menu.addAction(propertyServerAction_); setServerPassword_->setEnabled(isAuth); menu.addAction(setServerPassword_); setMaxClientConnection_->setEnabled(isAuth); menu.addAction(setMaxClientConnection_); menu.addAction(historyServerAction_); closeServerAction_->setEnabled(!isClusterMember); menu.addAction(closeServerAction_); bool isLocal = server->isLocalHost(); importAction_->setEnabled(!isCon && isLocal); menu.addAction(importAction_); backupAction_->setEnabled(isCon && isLocal); menu.addAction(backupAction_); shutdownAction_->setEnabled(isAuth); menu.addAction(shutdownAction_); menu.exec(menuPoint); } else if(node->type() == IExplorerTreeItem::eDatabase){ ExplorerDatabaseItem *db = dynamic_cast<ExplorerDatabaseItem*>(node); QMenu menu(this); menu.addAction(loadContentAction_); bool isDefault = db && db->isDefault(); loadContentAction_->setEnabled(isDefault); menu.addAction(createKeyAction_); createKeyAction_->setEnabled(isDefault); if(isDefault){ menu.addAction(viewKeysAction_); } menu.addAction(setDefaultDbAction_); setDefaultDbAction_->setEnabled(!isDefault); menu.exec(menuPoint); } else if(node->type() == IExplorerTreeItem::eKey){ QMenu menu(this); menu.addAction(getValueAction_); menu.addAction(deleteKeyAction_); menu.exec(menuPoint); } } }