CppEditorFactory() { setId(Constants::CPPEDITOR_ID); setDisplayName(qApp->translate("OpenWith::Editors", Constants::CPPEDITOR_DISPLAY_NAME)); addMimeType(Constants::C_SOURCE_MIMETYPE); addMimeType(Constants::C_HEADER_MIMETYPE); addMimeType(Constants::CPP_SOURCE_MIMETYPE); addMimeType(Constants::CPP_HEADER_MIMETYPE); setDocumentCreator([]() { return new CppEditorDocument; }); setEditorWidgetCreator([]() { return new CppEditorWidget; }); setEditorCreator([]() { return new CppEditor; }); setAutoCompleterCreator([]() { return new CppAutoCompleter; }); setCommentStyle(Utils::CommentDefinition::CppStyle); setCodeFoldingSupported(true); setMarksVisible(true); setParenthesesMatchingEnabled(true); setEditorActionHandlers(TextEditorActionHandler::Format | TextEditorActionHandler::UnCommentSelection | TextEditorActionHandler::UnCollapseAll | TextEditorActionHandler::FollowSymbolUnderCursor); addHoverHandler(new CppHoverHandler); if (!Utils::HostOsInfo::isMacHost() && !Utils::HostOsInfo::isWindowsHost()) { FileIconProvider::registerIconOverlayForMimeType(creatorTheme()->iconOverlay(Theme::CppSourceMimetype).toLatin1().data(), Constants::CPP_SOURCE_MIMETYPE); FileIconProvider::registerIconOverlayForMimeType(creatorTheme()->iconOverlay(Theme::CSourceMimetype).toLatin1().data(), Constants::C_SOURCE_MIMETYPE); FileIconProvider::registerIconOverlayForMimeType(creatorTheme()->iconOverlay(Theme::CppHeaderMimetype).toLatin1().data(), Constants::CPP_HEADER_MIMETYPE); } }
ProFileEditorFactory::ProFileEditorFactory() { setId(Constants::PROFILE_EDITOR_ID); setDisplayName(qApp->translate("OpenWith::Editors", Constants::PROFILE_EDITOR_DISPLAY_NAME)); addMimeType(Constants::PROFILE_MIMETYPE); addMimeType(Constants::PROINCLUDEFILE_MIMETYPE); addMimeType(Constants::PROFEATUREFILE_MIMETYPE); addMimeType(Constants::PROCONFIGURATIONFILE_MIMETYPE); addMimeType(Constants::PROCACHEFILE_MIMETYPE); addMimeType(Constants::PROSTASHFILE_MIMETYPE); setDocumentCreator([]() { return new ProFileDocument; }); setEditorWidgetCreator([]() { return new ProFileEditorWidget; }); ProFileCompletionAssistProvider *pcap = new ProFileCompletionAssistProvider; setCompletionAssistProvider(pcap); setCommentStyle(Utils::CommentDefinition::HashStyle); setEditorActionHandlers(TextEditorActionHandler::UnCommentSelection | TextEditorActionHandler::JumpToFileUnderCursor); Keywords keywords(pcap->variables(), pcap->functions(), QMap<QString, QStringList>()); addHoverHandler(new ProFileHoverHandler(keywords)); setSyntaxHighlighterCreator([keywords]() { return new ProFileHighlighter(keywords); }); const QString defaultOverlay = QLatin1String(QtSupport::Constants::ICON_QT_PROJECT); Core::FileIconProvider::registerIconOverlayForSuffix( creatorTheme()->imageFile(Theme::IconOverlayPro, defaultOverlay).toLatin1().data(), "pro"); Core::FileIconProvider::registerIconOverlayForSuffix( creatorTheme()->imageFile(Theme::IconOverlayPri, defaultOverlay).toLatin1().data(), "pri"); Core::FileIconProvider::registerIconOverlayForSuffix( creatorTheme()->imageFile(Theme::IconOverlayPrf, defaultOverlay).toLatin1().data(), "prf"); }
QPixmap DetailsWidget::createBackground(const QSize &size, int topHeight, QWidget *widget) { QPixmap pixmap(size); pixmap.fill(Qt::transparent); QPainter p(&pixmap); QRect topRect(0, 0, size.width(), topHeight); QRect fullRect(0, 0, size.width(), size.height()); if (HostOsInfo::isMacHost()) p.fillRect(fullRect, qApp->palette().window().color()); else p.fillRect(fullRect, creatorTheme()->color(Theme::DetailsWidgetBackgroundColor)); if (creatorTheme()->widgetStyle () == Theme::StyleDefault) { QLinearGradient lg(topRect.topLeft(), topRect.bottomLeft()); lg.setStops(creatorTheme()->gradient(Theme::DetailsWidgetHeaderGradient)); p.fillRect(topRect, lg); p.setRenderHint(QPainter::Antialiasing, true); p.translate(0.5, 0.5); p.setPen(QColor(0, 0, 0, 40)); p.setBrush(Qt::NoBrush); p.drawRoundedRect(fullRect.adjusted(0, 0, -1, -1), 2, 2); p.setBrush(Qt::NoBrush); p.setPen(QColor(255,255,255,140)); p.drawRoundedRect(fullRect.adjusted(1, 1, -2, -2), 2, 2); p.setPen(QPen(widget->palette().color(QPalette::Mid))); } return pixmap; }
ProFileEditorFactory::ProFileEditorFactory() { setId(Constants::PROFILE_EDITOR_ID); setDisplayName(QCoreApplication::translate("OpenWith::Editors", Constants::PROFILE_EDITOR_DISPLAY_NAME)); addMimeType(Constants::PROFILE_MIMETYPE); addMimeType(Constants::PROINCLUDEFILE_MIMETYPE); addMimeType(Constants::PROFEATUREFILE_MIMETYPE); addMimeType(Constants::PROCONFIGURATIONFILE_MIMETYPE); addMimeType(Constants::PROCACHEFILE_MIMETYPE); addMimeType(Constants::PROSTASHFILE_MIMETYPE); setDocumentCreator(createProFileDocument); setEditorWidgetCreator([]() { return new ProFileEditorWidget; }); setCompletionAssistProvider(new KeywordsCompletionAssistProvider(qmakeKeywords())); setCommentDefinition(Utils::CommentDefinition::HashStyle); setEditorActionHandlers(TextEditorActionHandler::UnCommentSelection | TextEditorActionHandler::JumpToFileUnderCursor); addHoverHandler(new ProFileHoverHandler); setSyntaxHighlighterCreator([]() { return new ProFileHighlighter; }); const QString defaultOverlay = QLatin1String(ProjectExplorer::Constants::FILEOVERLAY_QT); Core::FileIconProvider::registerIconOverlayForSuffix( creatorTheme()->imageFile(Theme::IconOverlayPro, defaultOverlay), "pro"); Core::FileIconProvider::registerIconOverlayForSuffix( creatorTheme()->imageFile(Theme::IconOverlayPri, defaultOverlay), "pri"); Core::FileIconProvider::registerIconOverlayForSuffix( creatorTheme()->imageFile(Theme::IconOverlayPrf, defaultOverlay), "prf"); }
static MasksAndColors masksAndColors(const Icon &icon, int dpr) { MasksAndColors result; for (const IconMaskAndColor &i: icon) { const QString &fileName = i.first; const QColor color = creatorTheme()->color(i.second); const QString dprFileName = StyleHelper::availableImageResolutions(i.first).contains(dpr) ? StyleHelper::imageFileWithResolution(fileName, dpr) : fileName; result.append(qMakePair(QPixmap(dprFileName), color)); } return result; }
//! Set commit message in details void ChangeSelectionDialog::setDetails(int exitCode) { Theme *theme = creatorTheme(); QPalette palette; if (exitCode == 0) { m_ui->detailsText->setPlainText(QString::fromUtf8(m_process->readAllStandardOutput())); palette.setColor(QPalette::Text, theme->color(Theme::TextColorNormal)); m_ui->changeNumberEdit->setPalette(palette); enableButtons(true); } else { m_ui->detailsText->setPlainText(tr("Error: Unknown reference")); palette.setColor(QPalette::Text, theme->color(Theme::TextColorError)); m_ui->changeNumberEdit->setPalette(palette); } }
void HighlightScrollBarOverlay::drawHighlights(QPainter *painter, int docStart, int docSize, double docSizeToHandleSizeRatio, int handleOffset, const QRect &viewport) { if (docSize <= 0) return; painter->save(); painter->setClipRect(viewport); const double lineHeight = m_highlightController->lineHeight(); for (const QMap<Utils::Theme::Color, QMap<int, int>> &colors : qAsConst(m_highlightCache)) { const auto itColorEnd = colors.constEnd(); for (auto itColor = colors.constBegin(); itColor != itColorEnd; ++itColor) { const QColor &color = creatorTheme()->color(itColor.key()); const QMap<int, int> &positions = itColor.value(); const auto itPosEnd = positions.constEnd(); const int firstPos = int(docStart / lineHeight); auto itPos = positions.upperBound(firstPos); if (itPos != positions.constBegin()) --itPos; while (itPos != itPosEnd) { const double posStart = itPos.key() * lineHeight; const double posEnd = (itPos.value() + 1) * lineHeight; if (posEnd < docStart) { ++itPos; continue; } if (posStart > docStart + docSize) break; const int height = qMax(qRound((posEnd - posStart) * docSizeToHandleSizeRatio), 1); const int top = qRound(posStart * docSizeToHandleSizeRatio) - handleOffset + viewport.y(); const QRect rect(viewport.left(), top, viewport.width(), height); painter->fillRect(rect, color); ++itPos; } } } painter->restore(); }
QIcon Icon::icon() const { if (isEmpty()) { return QIcon(); } else if (m_style == None) { return QIcon(combinedPlainPixmaps(*this)); } else { QIcon result; const MasksAndColors masks = masksAndColors(*this, qRound(qApp->devicePixelRatio())); const QPixmap combinedMask = Utils::combinedMask(masks, m_style); result.addPixmap(masksToIcon(masks, combinedMask, m_style)); QColor disabledColor = creatorTheme()->palette().mid().color(); disabledColor.setAlphaF(0.6); result.addPixmap(maskToColorAndAlpha(combinedMask, disabledColor), QIcon::Disabled); return result; } }
QIcon Icon::icon() const { if (isEmpty()) { return QIcon(); } else if (m_style == None) { return QIcon(combinedPlainPixmaps(*this)); } else { QIcon result; const int maxDpr = qRound(qApp->devicePixelRatio()); for (int dpr = 1; dpr <= maxDpr; dpr++) { const MasksAndColors masks = masksAndColors(*this, dpr); const QPixmap combinedMask = Utils::combinedMask(masks, m_style); result.addPixmap(masksToIcon(masks, combinedMask, m_style)); const QColor disabledColor = creatorTheme()->color(Theme::IconsDisabledColor); result.addPixmap(maskToColorAndAlpha(combinedMask, disabledColor), QIcon::Disabled); } return result; } }
void ChangeSelectionDialog::recalculateDetails() { terminateProcess(); enableButtons(false); const QString workingDir = workingDirectory(); QPalette palette = m_ui->workingDirectoryEdit->palette(); Theme *theme = creatorTheme(); if (workingDir.isEmpty()) { m_ui->detailsText->setPlainText(tr("Error: Bad working directory.")); palette.setColor(QPalette::Text, theme->color(Theme::TextColorError)); m_ui->workingDirectoryEdit->setPalette(palette); return; } else { palette.setColor(QPalette::Text, theme->color(Theme::TextColorNormal)); m_ui->workingDirectoryEdit->setPalette(palette); } const QString ref = change(); if (ref.isEmpty()) { m_ui->detailsText->clear(); return; } QStringList args; args << QLatin1String("show") << QLatin1String("--stat=80") << ref; m_process = new QProcess(this); m_process->setWorkingDirectory(workingDir); m_process->setProcessEnvironment(m_gitEnvironment); connect(m_process, static_cast<void (QProcess::*)(int)>(&QProcess::finished), this, &ChangeSelectionDialog::setDetails); m_process->start(m_gitExecutable.toString(), args); m_process->closeWriteChannel(); if (!m_process->waitForStarted()) m_ui->detailsText->setPlainText(tr("Error: Could not start Git.")); else m_ui->detailsText->setPlainText(tr("Fetching commit data...")); }
static QPixmap masksToIcon(const MasksAndColors &masks, const QPixmap &combinedMask, Icon::IconStyleOptions style) { QPixmap result(combinedMask.size()); result.setDevicePixelRatio(combinedMask.devicePixelRatio()); result.fill(Qt::transparent); QPainter p(&result); for (MasksAndColors::const_iterator maskImage = masks.constBegin(); maskImage != masks.constEnd(); ++maskImage) { if (style & Icon::PunchEdges && maskImage != masks.constBegin()) { // Punch a transparent outline around an overlay. p.save(); p.setOpacity(PunchEdgeIntensity); p.setCompositionMode(QPainter::CompositionMode_DestinationOut); smearPixmap(&p, maskToColorAndAlpha((*maskImage).first, Qt::white), PunchEdgeWidth); p.restore(); } p.drawPixmap(0, 0, maskToColorAndAlpha((*maskImage).first, (*maskImage).second)); } if (style & Icon::DropShadow && creatorTheme()->flag(Theme::ToolBarIconShadow)) { const QPixmap shadowMask = maskToColorAndAlpha(combinedMask, Qt::black); p.setCompositionMode(QPainter::CompositionMode_DestinationOver); p.setOpacity(0.05); p.drawPixmap(QPointF(0, -0.501), shadowMask); p.drawPixmap(QPointF(-0.501, 0), shadowMask); p.drawPixmap(QPointF(0.5, 0), shadowMask); p.drawPixmap(QPointF(0.5, 0.5), shadowMask); p.drawPixmap(QPointF(-0.501, 0.5), shadowMask); p.setOpacity(0.2); p.drawPixmap(0, 1, shadowMask); } p.end(); return result; }