#include "qt/element/QtCodeFileTitleBar.h" #include #include #include #include "utility/ResourcePaths.h" #include "utility/messaging/type/MessageShowErrorsForFile.h" QtCodeFileTitleBar::QtCodeFileTitleBar(QWidget* parent, bool isHovering, bool isSingle) : QtHoverButton(parent) { setObjectName("title_bar"); setProperty("hovering", isHovering); setAttribute(Qt::WA_LayoutUsesWidgetRect); // fixes layouting on Mac if (!isSingle) { connect(this, &QPushButton::clicked, this, &QtCodeFileTitleBar::clickedTitleBar); connect(this, &QtHoverButton::hoveredIn, this, &QtCodeFileTitleBar::enteredTitleBar); connect(this, &QtHoverButton::hoveredOut, this, &QtCodeFileTitleBar::leftTitleBar); } QHBoxLayout* titleLayout = new QHBoxLayout(); titleLayout->setMargin(0); titleLayout->setSpacing(0); titleLayout->setAlignment(Qt::AlignLeft); setLayout(titleLayout); m_titleButton = new QtCodeFileTitleButton(this); QSizePolicy policy = m_titleButton->sizePolicy(); policy.setRetainSizeWhenHidden(true); m_titleButton->setSizePolicy(policy); titleLayout->addWidget(m_titleButton); setMinimumHeight(m_titleButton->height() + 4); m_referenceCount = new QLabel(this); m_referenceCount->setObjectName("references_label"); m_referenceCount->hide(); titleLayout->addWidget(m_referenceCount); titleLayout->addStretch(3); m_showErrorsButton = new QPushButton("show errors"); m_showErrorsButton->setObjectName("screen_button"); m_showErrorsButton->setToolTip("Show all errors related to this file"); m_showErrorsButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); // fixes layouting on Mac m_showErrorsButton->hide(); titleLayout->addWidget(m_showErrorsButton); connect(m_showErrorsButton, &QPushButton::clicked, [this]() { MessageShowErrorsForFile(m_titleButton->getFilePath()).dispatch(); } ); FilePath imageDir = ResourcePaths::getGuiPath().concatenate(L"code_view/images/"); QColor inactiveColor(0x5E, 0x5D, 0x5D); m_minimizeButton = new QtIconStateButton(this); m_minimizeButton->addState(QtIconStateButton::STATE_DEFAULT, (QString::fromStdWString(imageDir.getConcatenated(L"minimize_active.png").wstr()))); m_minimizeButton->addState(QtIconStateButton::STATE_HOVERED, (QString::fromStdWString(imageDir.getConcatenated(L"minimize_inactive.png").wstr())), inactiveColor); m_minimizeButton->addState(QtIconStateButton::STATE_DISABLED, (QString::fromStdWString(imageDir.getConcatenated(L"minimize_inactive.png").wstr()))); m_minimizeButton->setToolTip("minimize"); m_snippetButton = new QtIconStateButton(this); m_snippetButton->addState(QtIconStateButton::STATE_DEFAULT, (QString::fromStdWString(imageDir.getConcatenated(L"snippet_active.png").wstr()))); m_snippetButton->addState(QtIconStateButton::STATE_HOVERED, (QString::fromStdWString(imageDir.getConcatenated(L"snippet_inactive.png").wstr())), inactiveColor); m_snippetButton->addState(QtIconStateButton::STATE_DISABLED, (QString::fromStdWString(imageDir.getConcatenated(L"snippet_inactive.png").wstr()))); m_snippetButton->setToolTip("show snippets"); m_maximizeButton = new QtIconStateButton(this); m_maximizeButton->addState(QtIconStateButton::STATE_DEFAULT, (QString::fromStdWString(imageDir.getConcatenated(L"maximize_active.png").wstr()))); m_maximizeButton->addState(QtIconStateButton::STATE_HOVERED, (QString::fromStdWString(imageDir.getConcatenated(L"maximize_inactive.png").wstr())), inactiveColor); m_maximizeButton->addState(QtIconStateButton::STATE_DISABLED, (QString::fromStdWString(imageDir.getConcatenated(L"maximize_inactive.png").wstr()))); m_maximizeButton->setToolTip("maximize"); for (QtIconStateButton* button : { m_minimizeButton, m_snippetButton, m_maximizeButton }) { button->setIconSize(QSize(16, 16)); button->setObjectName("file_button"); button->setEnabled(false); titleLayout->addWidget(button); if (!isSingle) { connect(button, &QtIconStateButton::hoveredIn, this, &QtCodeFileTitleBar::leftTitleBar); connect(button, &QtIconStateButton::hoveredOut, this, &QtCodeFileTitleBar::enteredTitleBar); } } connect(m_minimizeButton, &QtIconStateButton::clicked, this, &QtCodeFileTitleBar::clickedMinimizeButton); connect(m_snippetButton, &QtIconStateButton::clicked, this, &QtCodeFileTitleBar::clickedSnippetButton); connect(m_maximizeButton, &QtIconStateButton::clicked, this, &QtCodeFileTitleBar::clickedMaximizeButton); if (isSingle) { m_minimizeButton->hide(); m_maximizeButton->hide(); } titleLayout->addSpacing(3); } QtCodeFileTitleButton* QtCodeFileTitleBar::getTitleButton() const { return m_titleButton; } void QtCodeFileTitleBar::setIsComplete(bool isComplete) { m_titleButton->setIsComplete(isComplete); m_showErrorsButton->setVisible(!isComplete); } void QtCodeFileTitleBar::updateRefCount(int refCount, bool hasErrors, size_t fatalErrorCount) { if (refCount > 0) { QString label = hasErrors ? "error" : "reference"; if (refCount > 1) { label += "s"; } if (fatalErrorCount > 0) { label += " (" + QString::number(fatalErrorCount) + " fatal)"; } QString text = QString::number(refCount) + " " + label; if (text != m_referenceCount->text()) { m_referenceCount->setText(text); } m_referenceCount->show(); } else { m_referenceCount->hide(); } } void QtCodeFileTitleBar::setMinimized() { m_minimizeButton->setEnabled(false); m_snippetButton->setEnabled(true); m_maximizeButton->setEnabled(true); m_minimizeButton->hoverOut(); m_snippetButton->hoverOut(); m_maximizeButton->hoverOut(); } void QtCodeFileTitleBar::setSnippets() { m_minimizeButton->setEnabled(true); m_snippetButton->setEnabled(false); m_maximizeButton->setEnabled(true); m_minimizeButton->hoverOut(); m_snippetButton->hoverOut(); m_maximizeButton->hoverOut(); } void QtCodeFileTitleBar::setMaximized() { m_minimizeButton->setEnabled(false); m_snippetButton->setEnabled(true); m_maximizeButton->setEnabled(false); m_minimizeButton->hoverOut(); m_snippetButton->hoverOut(); m_maximizeButton->hoverOut(); } void QtCodeFileTitleBar::updateFromOther(const QtCodeFileTitleBar* other) { m_titleButton->updateFromOther(other->getTitleButton()); setIsComplete(m_titleButton->isComplete()); QString refString = other->m_referenceCount->text(); if (refString.size()) { m_referenceCount->setText(refString); m_referenceCount->show(); } else { m_referenceCount->hide(); } m_minimizeButton->setEnabled(other->m_minimizeButton->isEnabled()); m_snippetButton->setEnabled(other->m_snippetButton->isEnabled()); m_maximizeButton->setEnabled(other->m_maximizeButton->isEnabled()); m_minimizeButton->hoverOut(); m_snippetButton->hoverOut(); m_maximizeButton->hoverOut(); disconnect(); connect(this, &QPushButton::clicked, this, &QtCodeFileTitleBar::clickedTitleBar); connect(this, &QtHoverButton::hoveredIn, this, &QtCodeFileTitleBar::enteredTitleBar); connect(this, &QtHoverButton::hoveredOut, this, &QtCodeFileTitleBar::leftTitleBar); } void QtCodeFileTitleBar::clickedTitleBar() { if (m_minimizeButton->isEnabled()) { emit minimize(); } else if (m_snippetButton->isEnabled()) { emit snippet(); } else { emit maximize(); } } void QtCodeFileTitleBar::enteredTitleBar(QPushButton* button) { if (m_minimizeButton->isEnabled()) { m_minimizeButton->hoverIn(); } else if (m_snippetButton->isEnabled()) { m_snippetButton->hoverIn(); } else if (m_maximizeButton->isEnabled()) { m_maximizeButton->hoverIn(); } } void QtCodeFileTitleBar::leftTitleBar(QPushButton* button) { if (m_minimizeButton->isEnabled()) { if (m_minimizeButton != button) { m_minimizeButton->hoverOut(); } } else if (m_snippetButton->isEnabled()) { if (m_snippetButton != button) { m_snippetButton->hoverOut(); } } else if (m_maximizeButton->isEnabled()) { if (m_maximizeButton != button) { m_maximizeButton->hoverOut(); } } } void QtCodeFileTitleBar::clickedMinimizeButton() { emit minimize(); } void QtCodeFileTitleBar::clickedSnippetButton() { emit snippet(); } void QtCodeFileTitleBar::clickedMaximizeButton() { emit maximize(); }