Ejemplo n.º 1
0
    void BsonTableView::showContextMenu( const QPoint &point )
    {
        QModelIndex selectedInd = selectedIndex();
        if (selectedInd.isValid()){
            BsonTableItem *documentItem = QtUtils::item<BsonTableItem*>(selectedInd);

            bool isEditable = _queryInfo.isNull ? false : true;
            bool onItem = documentItem ? true : false;
            bool isSimple = false;
            if(documentItem){
                mongo::BSONElement el = documentItem->row(selectedInd.column()).second;
                isSimple = BsonUtils::isSimpleType(el) || BsonUtils::isUuidType(el);
            }

            QMenu menu(this);
            if (onItem && isEditable) menu.addAction(_editDocumentAction);
            if (onItem)               menu.addAction(_viewDocumentAction);
            if (isEditable)           menu.addAction(_insertDocumentAction);
            if (onItem && isSimple)   menu.addSeparator();
            if (onItem && isSimple)   menu.addAction(_copyValueAction);
            if (onItem && isEditable) menu.addSeparator();
            if (onItem && isEditable) menu.addAction(_deleteDocumentAction);

            QPoint menuPoint = mapToGlobal(point);
            menuPoint.setY(menuPoint.y() + horizontalHeader()->height());
            menuPoint.setX(menuPoint.x() + verticalHeader()->width());
            menu.exec(menuPoint);
        }
    }
Ejemplo n.º 2
0
    void BsonTableView::onEditDocument()
    {
        if (_queryInfo.isNull)
            return;

        QModelIndex selectedInd = selectedIndex();
        if (!selectedInd.isValid())
            return;

        BsonTableItem *documentItem = QtUtils::item<BsonTableItem*>(selectedInd);
        if(!documentItem)
            return;

        mongo::BSONObj obj = documentItem->root();

        std::string str = BsonUtils::jsonString(obj, mongo::TenGen, 1, AppRegistry::instance().settingsManager()->uuidEncoding(), AppRegistry::instance().settingsManager()->timeZone() );
        const QString &json = QtUtils::toQString(str);

        DocumentTextEditor editor(QtUtils::toQString(_queryInfo.serverAddress),
            QtUtils::toQString(_queryInfo.databaseName),
            QtUtils::toQString(_queryInfo.collectionName),
            json);

        editor.setWindowTitle("Edit Document");
        int result = editor.exec();
        activateWindow();

        if (result == QDialog::Accepted) {
            mongo::BSONObj obj = editor.bsonObj();
            AppRegistry::instance().bus()->subscribe(this, InsertDocumentResponse::Type);
            _shell->server()->saveDocument(obj, _queryInfo.databaseName, _queryInfo.collectionName);
        }
    }
Ejemplo n.º 3
0
    QVariant BsonTableModel::data(const QModelIndex &index, int role) const
    {
        QVariant result;

        if (!index.isValid())
            return result;

        BsonTableItem *node = _root->child(index.row());
        if (!node)
            return result;

        int col = index.column();
        mongo::BSONElement element = node->row(col).second;
        if (element.eoo())
            return result;

        if (role == Qt::DisplayRole) {
            result = node->row(col).first;
        }
        else if (role == Qt::DecorationRole) {
            switch(element.type()) {
            case mongo::NumberDouble: result = GuiRegistry::instance().bsonIntegerIcon(); break;
            case mongo::String: result = GuiRegistry::instance().bsonStringIcon(); break;
            case mongo::Object: result = GuiRegistry::instance().bsonObjectIcon(); break;
            case mongo::Array: result = GuiRegistry::instance().bsonArrayIcon(); break;
            case mongo::BinData: result = GuiRegistry::instance().bsonBinaryIcon(); break;
            case mongo::Undefined: result = GuiRegistry::instance().circleIcon(); break;
            case mongo::jstOID: result = GuiRegistry::instance().circleIcon(); break;
            case mongo::Bool: result = GuiRegistry::instance().bsonBooleanIcon(); break;
            case mongo::Date: result = GuiRegistry::instance().bsonDateTimeIcon(); break;
            case mongo::jstNULL: result = GuiRegistry::instance().bsonNullIcon(); break;
            case mongo::RegEx: result = GuiRegistry::instance().circleIcon(); break;
            case mongo::DBRef: result = GuiRegistry::instance().circleIcon(); break;
            case mongo::Code: case mongo::CodeWScope: result = GuiRegistry::instance().circleIcon(); break;
            case mongo::NumberInt: result = GuiRegistry::instance().bsonIntegerIcon(); break;
            case mongo::Timestamp: result = GuiRegistry::instance().bsonDateTimeIcon(); break;
            case mongo::NumberLong: result = GuiRegistry::instance().bsonIntegerIcon(); break;
            default: result = GuiRegistry::instance().circleIcon(); break;
            }
        }

        return result;
    }
Ejemplo n.º 4
0
    void BsonTableView::onCopyDocument()
    {
        QModelIndex selectedInd = selectedIndex();
        if (!selectedInd.isValid())
            return;

        BsonTableItem *documentItem = QtUtils::item<BsonTableItem*>(selectedInd);
        if(!documentItem)
            return;

        mongo::BSONElement element = documentItem->row(selectedInd.column()).second;

        if (!BsonUtils::isSimpleType(element) && BsonUtils::isUuidType(element))
            return;

        QClipboard *clipboard = QApplication::clipboard();
        std::string res;
        BsonUtils::buildJsonString(element,res,AppRegistry::instance().settingsManager()->uuidEncoding(),AppRegistry::instance().settingsManager()->timeZone());
        clipboard->setText(QtUtils::toQString(res));
    }
Ejemplo n.º 5
0
    void BsonTableView::onViewDocument()
    {
        QModelIndex selectedInd = selectedIndex();
        if (!selectedInd.isValid())
            return;

        BsonTableItem *documentItem = QtUtils::item<BsonTableItem*>(selectedInd);
        if(!documentItem)
            return;

        mongo::BSONObj obj = documentItem->root();

        std::string str = BsonUtils::jsonString(obj, mongo::TenGen, 1, AppRegistry::instance().settingsManager()->uuidEncoding(), AppRegistry::instance().settingsManager()->timeZone());
        const QString &json = QtUtils::toQString(str);

        std::string server = _queryInfo.isNull ? "" : _queryInfo.serverAddress;
        std::string database = _queryInfo.isNull ? "" : _queryInfo.databaseName;
        std::string collection = _queryInfo.isNull ? "" : _queryInfo.collectionName;

        DocumentTextEditor *editor = new DocumentTextEditor(QtUtils::toQString(server),QtUtils::toQString(database), QtUtils::toQString(collection), json, true, this);

        editor->setWindowTitle("View Document");
        editor->show();
    }
Ejemplo n.º 6
0
    void BsonTableView::onDeleteDocument()
    {
        if (_queryInfo.isNull)
            return;

        QModelIndex selectedInd = selectedIndex();
        if (!selectedInd.isValid())
            return;

        BsonTableItem *documentItem = QtUtils::item<BsonTableItem*>(selectedInd);
        if(!documentItem)
            return;

        mongo::BSONObj obj = documentItem->root();
        mongo::BSONElement id = obj.getField("_id");

        if (id.eoo()) {
            QMessageBox::warning(this, "Cannot delete", "Selected document doesn't have _id field. \n"
                "Maybe this is a system document that should be managed in a special way?");
            return;
        }

        mongo::BSONObjBuilder builder;
        builder.append(id);
        mongo::BSONObj bsonQuery = builder.obj();
        mongo::Query query(bsonQuery);

        // Ask user
        int answer = utils::questionDialog(this,"Delete","Document","%1 %2 with id:<br><b>%3</b>?",QtUtils::toQString(id.toString(false)));

        if (answer != QMessageBox::Yes)
            return ;

        _shell->server()->removeDocuments(query, _queryInfo.databaseName, _queryInfo.collectionName);
        _shell->query(0, _queryInfo);
    }