void OutputWidget::present(MongoShell *shell, const std::vector<MongoShellResult> &results) { if (_prevResultsCount > 0) { clearAllParts(); } int const RESULTS_SIZE = _prevResultsCount = results.size(); bool const multipleResults = (RESULTS_SIZE > 1); _outputItemContentWidgets.clear(); for (int i = 0; i < RESULTS_SIZE; ++i) { MongoShellResult shellResult = results[i]; double secs = shellResult.elapsedMs() / 1000.f; ViewMode viewMode = AppRegistry::instance().settingsManager()->viewMode(); if (_prevViewModes.size()) { viewMode = _prevViewModes.back(); _prevViewModes.pop_back(); } bool const firstItem = (0 == i); bool const lastItem = (RESULTS_SIZE-1 == i); OutputItemContentWidget* item = nullptr; if (shellResult.documents().size() > 0) { item = new OutputItemContentWidget(viewMode, shell, QtUtils::toQString(shellResult.type()), shellResult.documents(), shellResult.queryInfo(), secs, multipleResults, firstItem, lastItem, shellResult.aggrInfo(), this); } else { item = new OutputItemContentWidget(viewMode, shell, QtUtils::toQString(shellResult.response()), secs, multipleResults, firstItem, lastItem, shellResult.aggrInfo(), this); } VERIFY(connect(item, SIGNAL(maximizedPart()), this, SLOT(maximizePart()))); VERIFY(connect(item, SIGNAL(restoredSize()), this, SLOT(restoreSize()))); _splitter->addWidget(item); _outputItemContentWidgets.push_back(item); } tryToMakeAllPartsEqualInSize(); }
OutputItemHeaderWidget::OutputItemHeaderWidget(OutputItemContentWidget *output, QWidget *parent) : QFrame(parent), _maximized(false) { setContentsMargins(5,0,0,0); // Maximize button _maxButton = new QPushButton; _maxButton->setIcon(GuiRegistry::instance().maximizeIcon()); _maxButton->setToolTip("Maximize or restore back this output result. You also can double-click on result's header."); _maxButton->setFixedSize(18, 18); _maxButton->setFlat(true); VERIFY(connect(_maxButton, SIGNAL(clicked()), this, SLOT(maximizePart()))); // Text mode button _textButton = new QPushButton(this); _textButton->setIcon(GuiRegistry::instance().textIcon()); _textButton->setToolTip("View results in text mode"); _textButton->setFixedSize(24, 24); _textButton->setFlat(true); _textButton->setCheckable(true); // Tree mode button _treeButton = new QPushButton(this); _treeButton->hide(); _treeButton->setIcon(GuiRegistry::instance().treeIcon()); _treeButton->setToolTip("View results in tree mode"); _treeButton->setFixedSize(24, 24); _treeButton->setFlat(true); _treeButton->setCheckable(true); _treeButton->setChecked(true); // Table mode button _tableButton = new QPushButton(this); _tableButton->hide(); _tableButton->setIcon(GuiRegistry::instance().tableIcon()); _tableButton->setToolTip("View results in table mode"); _tableButton->setFixedSize(24, 24); _tableButton->setFlat(true); _tableButton->setCheckable(true); _tableButton->setChecked(true); // Custom mode button _customButton = new QPushButton(this); _customButton->hide(); _customButton->setIcon(GuiRegistry::instance().customIcon()); _customButton->setToolTip("View results in custom UI"); _customButton->setFixedSize(24, 24); _customButton->setFlat(true); _customButton->setCheckable(true); VERIFY(connect(_textButton, SIGNAL(clicked()), output, SLOT(showText()))); VERIFY(connect(_treeButton, SIGNAL(clicked()), output, SLOT(showTree()))); VERIFY(connect(_tableButton, SIGNAL(clicked()), output, SLOT(showTable()))); VERIFY(connect(_customButton, SIGNAL(clicked()), output, SLOT(showCustom()))); _collectionIndicator = new Indicator(GuiRegistry::instance().collectionIcon()); _timeIndicator = new Indicator(GuiRegistry::instance().timeIcon()); _paging = new PagingWidget(); _collectionIndicator->hide(); _timeIndicator->hide(); _paging->hide(); QHBoxLayout *layout = new QHBoxLayout(); layout->setContentsMargins(2, 0, 5, 1); layout->setSpacing(0); layout->addWidget(_collectionIndicator); layout->addWidget(_timeIndicator); QSpacerItem *hSpacer = new QSpacerItem(2000, 24, QSizePolicy::Preferred, QSizePolicy::Minimum); layout->addSpacerItem(hSpacer); layout->addWidget(_paging); layout->addWidget(createVerticalLine()); layout->addSpacing(2); if (output->isCustomModeSupported()) { layout->addWidget(_customButton, 0, Qt::AlignRight); _customButton->show(); } if (output->isTreeModeSupported()) { layout->addWidget(_treeButton, 0, Qt::AlignRight); _treeButton->show(); } if (output->isTableModeSupported()) { layout->addWidget(_tableButton, 0, Qt::AlignRight); _tableButton->show(); } if (output->isTextModeSupported()) layout->addWidget(_textButton, 0, Qt::AlignRight); layout->addSpacing(3); layout->addWidget(createVerticalLine()); layout->addWidget(_maxButton, 0, Qt::AlignRight); setLayout(layout); }
void OutputItemHeaderWidget::mouseDoubleClickEvent(QMouseEvent *) { maximizePart(); }