void OutputItemContentWidget::refreshOutputItem()
 {
     switch(_viewMode) {
     case Text: showText(); break;
     case Tree: showTree(); break;
     case Table: showTable(); break;
     case Custom: showCustom(); break;
     default: showTree();
     }
 }
    OutputItemHeaderWidget::OutputItemHeaderWidget(
            OutputItemContentWidget *outputItemContentWidget, bool multipleResults, 
            bool tabbedResults, bool firstItem, bool lastItem, QWidget *parent) :
        QFrame(parent),
        _maxButton(nullptr), _dockUndockButton(nullptr), _maximized(false), 
        _multipleResults(multipleResults), 
        _firstItem(firstItem), _lastItem(lastItem), _orientation(Qt::Vertical)
    {
        setContentsMargins(5, 0, 0, 0);

        auto const* outputWidget = qobject_cast<OutputWidget*>(outputItemContentWidget->parentWidget());
        _orientation = outputWidget->getOrientation();

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

        // Create maximize button only if there are multiple results
        if (_multipleResults && !tabbedResults) {
            _maxButton = new QPushButton;
            _maxButton->setIcon(GuiRegistry::instance().maximizeIcon());
            _maxButton->setToolTip("Maximize this output result (double-click on result's header)");
            _maxButton->setFixedSize(18, 18);
            _maxButton->setFlat(true);
            VERIFY(connect(_maxButton, SIGNAL(clicked()), this, SLOT(maximizeMinimizePart())));
        }

        auto dockWidget = qobject_cast<QueryWidget::CustomDockWidget*>(outputItemContentWidget->parentWidget()->parentWidget());
        auto queryWidget = dockWidget->getParentQueryWidget();
        
        _dockUndockButton = new QPushButton;
        _dockUndockButton->setFixedSize(18, 18);
        _dockUndockButton->setFlat(true);
        _dockUndockButton->setHidden(true);
        applyDockUndockSettings(!dockWidget->isFloating());
        VERIFY(connect(_dockUndockButton, SIGNAL(clicked()), queryWidget, SLOT(dockUndock())));

        VERIFY(connect(_textButton, SIGNAL(clicked()), outputItemContentWidget, SLOT(showText())));
        VERIFY(connect(_treeButton, SIGNAL(clicked()), outputItemContentWidget, SLOT(showTree())));
        VERIFY(connect(_tableButton, SIGNAL(clicked()), outputItemContentWidget, SLOT(showTable())));
        VERIFY(connect(_customButton, SIGNAL(clicked()), outputItemContentWidget, 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();
#ifdef __APPLE__
        layout->setContentsMargins(2, 8, 5, 1);
#else  
        layout->setContentsMargins(2, 0, 5, 1);
#endif
        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 (outputItemContentWidget->isCustomModeSupported()) {
            layout->addWidget(_customButton, 0, Qt::AlignRight);
            _customButton->show();
        }

        if (outputItemContentWidget->isTreeModeSupported()) {
            layout->addWidget(_treeButton, 0, Qt::AlignRight);
            _treeButton->show();
        }

        if (outputItemContentWidget->isTableModeSupported()) {
            layout->addWidget(_tableButton, 0, Qt::AlignRight);
            _tableButton->show();
        }

        if (outputItemContentWidget->isTextModeSupported())
            layout->addWidget(_textButton, 0, Qt::AlignRight);

        if (_multipleResults)
            layout->addWidget(_maxButton, 0, Qt::AlignRight);

        layout->addSpacing(3);
        _verticalLine = createVerticalLine();
        _verticalLine->setHidden(true);
        layout->addWidget(_verticalLine);
        layout->addWidget(_dockUndockButton);

        setLayout(layout);

        // Update dock/undock button visibility
        if (_multipleResults)
            updateDockButtonOnToggleOrientation();
        else {
            _verticalLine->setVisible(true);
            _dockUndockButton->setVisible(true);
        }
      
        if(tabbedResults)
            setStyleSheet("background-color: white");
    }
    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);
    }