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);
            }
        }
    }