Commit 84f5585b authored by Thorben Kroeger's avatar Thorben Kroeger Committed by hjk

Implement theming for QtCreator

Adds a 'Theme' tab to the environment settings and a '-theme' command
line option.
A theme is a combination of colors, gradients, flags and style
information.

There are two themes:
- 'default': preserves the current default look
- 'dark': uses a more flat for many widgets, dark color theme
  for everything

This does not use a stylesheet (too limited), but rather sets
the palette via C++ and modifies drawing behavior.
Overall, the look is more flat (removed some gradients and bevels).

Tested on Ubuntu 14.04 using Qt 5.4 and running on a KDE
Desktop (Oxygen base style).

For a screenshot, see
https://gist.github.com/thorbenk/5ab06bea726de0aa7473

Changes:
- Introduce class Theme, defining the interface how to access theme
  specific settings. The class reads a .creatortheme file (INI file, via
  QSettings)

  - Define named colors in the [Palette] section
    (see dark.creatortheme for example usage)

  - Use either named colors of AARRGGBB (hex) in the [Colors]
    section

  - A file ending with .creatortheme may be supplied
    to the '-theme' command line option

- A global Theme instance can be accessed via creatorTheme()

- Query colors, gradients, icons and flags from the theme
  were possible (TODO: use this in more places...)

- There are very many color roles. It seems better to me
  to describe the role clearly, and then to consolidate later
  in the actual theme by assigning the same color.
  For example, one can set the text color of the output pane button
  individualy.

- Many elements are also drawn differently.
  For the dark theme, I wanted to have a flatter look.
  - Introduce Theme::WidgetStyle enum, for now {Original, Flat}.
  - The theme specifies which kind of widget style it wants.
  - The drawing code queries the theme's style flag and
    switches between the original, gradient based look and
    the new, flat look.

- Create some custom icons which look better on dark background
  (wip, currently folder/file icons)

- Let ManhattanStyle draw some elements for non-panelwidgets, too
  (open/close arrows in QTreeView, custom folder/file icons)

- For the welcomescreen, pass the WelcomeTheme class.
  WelcomeTheme exposes theme colors as Q_PROPERTY accessible from
  .qml

- Themes can be modified via the 'Themes' tab in the environment
  settings.

TODO:
* Unify image handling
* Avoid style name references
* Fix gradients

Change-Id: I92c2050ab0fb327649ea1eff4adec973d2073944
Reviewed-by: default avatarThomas Hartmann <Thomas.Hartmann@digia.com>
Reviewed-by: default avatarhjk <hjk121@nokiamail.com>
parent fd8fcd29
......@@ -28,6 +28,7 @@ DATA_DIRS = \
examplebrowser \
snippets \
templates \
themes \
designer \
schemes \
styles \
......
[General]
ThemeName=dark
[Palette]
shadowBackground=ff232323
text=ffe7e7e7
textDisabled=ffa0a0a4
hoverBackground=ff515151
selectedBackground=ff151515
normalBackground=ff333333
alternateBackground=ff515151
error=ffff0000
[Colors]
BackgroundColorAlternate=alternateBackground
BackgroundColorDark=shadowBackground
BackgroundColorHover=hoverBackground
BackgroundColorNormal=normalBackground
BackgroundColorSelected=selectedBackground
BadgeLabelBackgroundColorChecked=normalBackground
BadgeLabelBackgroundColorUnchecked=selectedBackground
BadgeLabelTextColorChecked=text
BadgeLabelTextColorUnchecked=text
CanceledSearchTextColor=ff0000
ComboBoxArrowColor=text
ComboBoxArrowColorDisabled=text
ComboBoxTextColor=text
DetailsButtonBackgroundColorHover=hoverBackground
DetailsWidgetBackgroundColor=ff4a4a4a
DockWidgetResizeHandleColor=shadowBackground
DoubleTabWidget1stEmptyAreaBackgroundColor=normalBackground
DoubleTabWidget1stSeparatorColor=hoverBackground
DoubleTabWidget1stTabActiveTextColor=text
DoubleTabWidget1stTabBackgroundColor=ff4a4a4a
DoubleTabWidget1stTabInactiveTextColor=textDisabled
DoubleTabWidget2ndSeparatorColor=hoverBackground
DoubleTabWidget2ndTabActiveTextColor=text
DoubleTabWidget2ndTabBackgroundColor=ff434343
DoubleTabWidget2ndTabInactiveTextColor=textDisabled
EditorPlaceholderColor=normalBackground
FancyTabBarBackgroundColor=shadowBackground
FancyTabWidgetDisabledSelectedTextColor=textDisabled
FancyTabWidgetDisabledUnselectedTextColor=textDisabled
FancyTabWidgetEnabledSelectedTextColor=text
FancyTabWidgetEnabledUnselectedTextColor=text
FancyToolButtonHoverColor=hoverBackground
FancyToolButtonSelectedColor=selectedBackground
FutureProgressBackgroundColor=shadowBackground
MenuBarEmptyAreaBackgroundColor=shadowBackground
MenuBarItemBackgroundColor=shadowBackground
MenuBarItemTextColorDisabled=textDisabled
MenuBarItemTextColorNormal=text
MiniProjectTargetSelectorBackgroundColor=shadowBackground
MiniProjectTargetSelectorBorderColor=shadowBackground
MiniProjectTargetSelectorSummaryBackgroundColor=shadowBackground
MiniProjectTargetSelectorTextColor=text
OutputFormatter_DebugTextColor=text
OutputFormatter_ErrorMessageTextColor=error
OutputFormatter_NormalMessageTextColor=text
OutputFormatter_StdErrTextColor=error
OutputFormatter_StdOutTextColor=text
OutputPaneButtonFlashColor=error
OutputPaneToggleButtonTextColorChecked=text
OutputPaneToggleButtonTextColorUnchecked=text
PanelButtonToolBackgroundColorHover=hoverBackground
PanelStatusBarBackgroundColor=shadowBackground
PanelTextColor=text
PanelsWidgetSeparatorLineColor=0
ProgressBarColorError=error
ProgressBarColorFinished=ff5aaa3c
ProgressBarColorNormal=hoverBackground
ProgressBarTitleColor=text
QtOutputFormatter_LinkTextColor=ff0000ff
SearchResultWidgetBackgroundColor=shadowBackground
SearchResultWidgetTextColor=text
TextColorDisabled=textDisabled
TextColorHighlight=ffff0000
TextColorNormal=text
TodoItemTextColor=ff000000
ToggleButtonBackgroundColor=shadowBackground
ToolBarBackgroundColor=shadowBackground
TreeViewArrowColorNormal=hoverBackground
TreeViewArrowColorSelected=text
Welcome_BackgroundColorNormal=normalBackground
Welcome_Button_BorderColor=0
Welcome_Button_TextColorNormal=ffe7e7e7
Welcome_Button_TextColorPressed=ffffffff
Welcome_Caption_TextColorNormal=ff4acb47
Welcome_DividerColor=ff232323
Welcome_Link_BackgroundColor=ff333333
Welcome_Link_TextColorActive=fff0f0f0
Welcome_Link_TextColorNormal=text
Welcome_ProjectItem_BackgroundColorHover=0
Welcome_ProjectItem_TextColorFilepath=textDisabled
Welcome_SessionItemExpanded_BackgroundColor=selectedBackground
Welcome_SessionItem_BackgroundColorHover=hoverBackground
Welcome_SessionItem_BackgroundColorNormal=0
Welcome_SideBar_BackgroundColor=ff434343
Welcome_TextColorHeading=text
Welcome_TextColorNormal=text
[Flags]
ComboBoxDrawTextShadow=false
DerivePaletteFromTheme=true
DrawIndicatorBranch=true
DrawProgressBarSunken=false
DrawSearchResultWidgetFrame=false
DrawTargetSelectorBottom=false
[Gradients]
DetailsWidgetHeaderGradient\1\color=0
DetailsWidgetHeaderGradient\1\pos=1
DetailsWidgetHeaderGradient\size=1
[IconOverlay]
CSourceMimetype=:/cppeditor/images/dark_qt_c.png
CppHeaderMimetype=:/cppeditor/images/dark_qt_h.png
CppSourceMimetype=:/cppeditor/images/dark_qt_cpp.png
PrfMimetype=:/qtsupport/images/dark_qt_project.png
PriMimetype=:/qtsupport/images/dark_qt_project.png
ProMimetype=:/qtsupport/images/dark_qt_project.png
#TODO: needs to be ported to new ini format!
[StandardIcons]
SP_FileIcon=:/core/images/dark_fileicon.png
SP_DirIcon=:/core/images/dark_foldericon.png
[Style]
WidgetStyle=StyleFlat
[General]
ThemeName=default
[Palette]
brightText = ffffffff
darkText = ff000000
[Colors]
BackgroundColorAlternate=ff3d3d3d
BackgroundColorDark=ff232323
BackgroundColorHover=ff515151
BackgroundColorNormal=ffffffff
BackgroundColorSelected=ff151515
BadgeLabelBackgroundColorChecked=ffe0e0e0
BadgeLabelBackgroundColorUnchecked=ff808080
BadgeLabelTextColorChecked=ff606060
BadgeLabelTextColorUnchecked=ffffffff
CanceledSearchTextColor=ffff0000
ComboBoxArrowColor=ffb8b5b2
ComboBoxArrowColorDisabled=ffdcdcdc
ComboBoxTextColor=ffffffff
DetailsButtonBackgroundColorHover=b4ffffff
DetailsWidgetBackgroundColor=28ffffff
DockWidgetResizeHandleColor=ff000000
DoubleTabWidget1stEmptyAreaBackgroundColor=ffff0000
DoubleTabWidget1stSeparatorColor=ffff0000
DoubleTabWidget1stTabActiveTextColor=ff000000
DoubleTabWidget1stTabBackgroundColor=ffff0000
DoubleTabWidget1stTabInactiveTextColor=ff000000
DoubleTabWidget2ndSeparatorColor=ffff0000
DoubleTabWidget2ndTabActiveTextColor=ffffffff
DoubleTabWidget2ndTabBackgroundColor=ffff0000
DoubleTabWidget2ndTabInactiveTextColor=ff000000
EditorPlaceholderColor=ffe0dcd8
FancyTabBarBackgroundColor=ffff0000
FancyTabWidgetDisabledSelectedTextColor=ffffffff
FancyTabWidgetDisabledUnselectedTextColor=78ffffff
FancyTabWidgetEnabledSelectedTextColor=ff3c3c3c
FancyTabWidgetEnabledUnselectedTextColor=ffffffff
FancyToolButtonHoverColor=28ffffff
FancyToolButtonSelectedColor=32000000
FutureProgressBackgroundColor=ffff0000
MenuBarEmptyAreaBackgroundColor=ffff0000
MenuBarItemBackgroundColor=ffff0000
MenuBarItemTextColorDisabled=ffa0a0a4
MenuBarItemTextColorNormal=ff000000
MiniProjectTargetSelectorBackgroundColor=ffa0a0a0
MiniProjectTargetSelectorBorderColor=ff000000
MiniProjectTargetSelectorSummaryBackgroundColor=ff464646
MiniProjectTargetSelectorTextColor=a0ffffff
OutputFormatter_DebugTextColor=ffaa00aa
OutputFormatter_ErrorMessageTextColor=ffaa0000
OutputFormatter_NormalMessageTextColor=ff0000aa
OutputFormatter_StdErrTextColor=ffaa0000
OutputFormatter_StdOutTextColor=ff000000
OutputPaneButtonFlashColor=ffff0000
OutputPaneToggleButtonTextColorChecked=ffffffff
OutputPaneToggleButtonTextColorUnchecked=ff000000
PanelTextColor=brightText
PanelButtonToolBackgroundColorHover=25ffffff
PanelStatusBarBackgroundColor=ffff0000
PanelsWidgetSeparatorLineColor=ffbfbcb8
ProgressBarColorError=d2ff3c00
ProgressBarColorFinished=ff5aaa3c
ProgressBarColorNormal=b4ffffff
ProgressBarTitleColor=ffffffff
QtOutputFormatter_LinkTextColor=ff0000aa
SearchResultWidgetBackgroundColor=ffffffff
SearchResultWidgetTextColor=ff000000
TextColorDisabled=ff000000
TextColorHighlight=ffa0a0a4
TextColorNormal=ff000000
TodoItemTextColor=ff000000
ToggleButtonBackgroundColor=ffff0000
ToolBarBackgroundColor=ffff0000
TreeViewArrowColorNormal=ffff0000
TreeViewArrowColorSelected=ffff0000
Welcome_BackgroundColorNormal=ffffffff
Welcome_Button_BorderColor=ff737373
Welcome_Button_TextColorNormal=ff000000
Welcome_Button_TextColorPressed=ffc0c0c0
Welcome_Caption_TextColorNormal=ff328930
Welcome_DividerColor=ff737373
Welcome_Link_BackgroundColor=ff909090
Welcome_Link_TextColorActive=fff0f0f0
Welcome_Link_TextColorNormal=ff328930
Welcome_ProjectItem_BackgroundColorHover=fff9f9f9
Welcome_ProjectItem_TextColorFilepath=ff6b6b6b
Welcome_SessionItemExpanded_BackgroundColor=fff1f1f1
Welcome_SessionItem_BackgroundColorHover=fff9f9f9
Welcome_SessionItem_BackgroundColorNormal=19f9f9f9
Welcome_SideBar_BackgroundColor=ffebebeb
Welcome_TextColorHeading=ff535353
Welcome_TextColorNormal=ff000000
[Flags]
ComboBoxDrawTextShadow=true
DerivePaletteFromTheme=false
DrawIndicatorBranch=false
DrawProgressBarSunken=true
DrawSearchResultWidgetFrame=true
DrawTargetSelectorBottom=true
[Gradients]
DetailsWidgetHeaderGradient\1\color=ffffff
DetailsWidgetHeaderGradient\1\pos=1
DetailsWidgetHeaderGradient\size=1
[IconOverlay]
CSourceMimetype=:/cppeditor/images/qt_c.png
CppHeaderMimetype=:/cppeditor/images/qt_h.png
CppSourceMimetype=:/cppeditor/images/qt_cpp.png
PrfMimetype=:/qtsupport/images/qt_project.png
PriMimetype=:/qtsupport/images/qt_project.png
ProMimetype=:/qtsupport/images/qt_project.png
[Style]
WidgetStyle=StyleDefault
......@@ -66,7 +66,7 @@ Controls.ScrollView {
x: 32
y: screenDependHeightDistance + 77
color: "#535353"
color: creatorTheme.textColorHeading
text: qsTr("Sessions")
font.pixelSize: 16
font.family: "Helvetica"
......@@ -78,7 +78,7 @@ Controls.ScrollView {
x: 406
y: screenDependHeightDistance + 77
color: "#535353"
color: creatorTheme.textColorHeading
text: qsTr("Recent Projects")
anchors.left: sessionsTitle.right
anchors.leftMargin: 280
......
......@@ -35,7 +35,6 @@ Item {
id: root
property var fonts: CustomFonts {}
property var colors: CustomColors { }
property int screenDependHeightDistance: Math.min(50, Math.max(16, height / 30))
......@@ -48,7 +47,7 @@ Item {
Rectangle {
id: splitter
color: "#737373"
color: creatorTheme.dividerColor; // divider between left and right pane
width: 1
anchors.top: parent.top
anchors.bottom: parent.bottom
......
......@@ -61,61 +61,60 @@ Button {
Rectangle {
anchors.fill: parent
antialiasing: true
radius: 3
radius: (creatorTheme.widgetStyle === 'flat') ? 0 : 3
visible: !(button.pressed || button.checked)
gradient: Gradient {
GradientStop {
position: 0
color: "#f9f9f9"
color: (theme==='dark') ? "#232323" : "#f9f9f9"
}
GradientStop {
position: 0.49
color: "#f9f9f9"
color: (theme === 'dark') ? "#232323" : "#f9f9f9"
}
GradientStop {
position: 0.5
color: "#eeeeee"
color: (theme === 'dark') ? "#232323" : "#eeeeee"
}
GradientStop {
position: 1
color: "#eeeeee"
color: (theme === 'dark') ? "#232323" : "#eeeeee"
}
}
border.color: "#737373"
border.color: creatorTheme.button_BorderColor
}
Rectangle {
anchors.fill: parent
antialiasing: true
radius: 3
radius: (creatorTheme.widgetStyle === 'flat') ? 0 : 3
visible: button.pressed || button.checked
gradient: Gradient {
GradientStop {
position: 0.00;
color: "#4c4c4c";
color: (theme === "dark") ? "#151515" : "#4c4c4c"
}
GradientStop {
position: 0.49;
color: "#4c4c4c";
color: (theme === "dark") ? "#151515" : "#4c4c4c"
}
GradientStop {
position: 0.50;
color: "#424242";
color: (theme === "dark") ? "#151515" : "#424242"
}
GradientStop {
position: 1.00;
color: "#424242";
color: (theme === "dark") ? "#151515" : "#424242"
}
}
border.color: "#333333"
border.color: creatorTheme.button_BorderColor
}
}
......@@ -124,7 +123,9 @@ Button {
renderType: Text.NativeRendering
verticalAlignment: Text.AlignVCenter
text: button.text
color: button.pressed || button.checked ? "lightGray" : "black"
color: button.pressed || button.checked
? creatorTheme.button_TextColorPressed
: creatorTheme.button_TextColorNormal
font.pixelSize: 15
font.bold: false
smooth: true
......
......@@ -34,6 +34,7 @@ Rectangle {
id: delegate
height: 240
width: 216
color: creatorTheme.backgroundColorNormal
property alias caption: captionItem.text
property alias imageSource: imageItem.source
......@@ -106,7 +107,7 @@ Rectangle {
y: 161
width: 200
height: 69
color: "#ffffff"
color: creatorTheme.backgroundColorNormal
anchors.bottom: parent.bottom
anchors.right: parent.right
anchors.left: parent.left
......@@ -116,7 +117,7 @@ Rectangle {
id: captionItem
x: 16
y: 170
color: colors.strongForegroundColor
color: creatorTheme.caption_TextColorNormal
text: qsTr("2D PAINTING EXAMPLE long description")
elide: Text.ElideRight
anchors.right: parent.right
......@@ -163,6 +164,7 @@ Rectangle {
x: 16
y: 198
text: qsTr("Tags:")
color: creatorTheme.textColorNormal
smooth: true
font.italic: false
font.pixelSize: 11
......
......@@ -44,7 +44,7 @@ Row {
LinkedText {
text: title
font.pixelSize: 11
color: "black"
color: creatorTheme.textColorNormal // 'Qt Account' .. 'User Guide' on lower left
onClicked: {
if (openUrl)
gettingStarted.openUrl(openUrl);
......
......@@ -33,7 +33,8 @@ import QtQuick 2.1
NativeText {
id: root
height: 16
color: active ? "#f0f0f0" : colors.linkColor
color: active ? creatorTheme.link_TextColorActive
: creatorTheme.link_TextColorNormal
verticalAlignment: Text.AlignVCenter
font: fonts.linkFont
......@@ -53,7 +54,7 @@ NativeText {
property bool enlargeMouseArea: true
Rectangle {
color: "#909090"
color: "#909090" // FIXME: theming: Where is this ever visible?
radius: 6
opacity: root.active
z: -1
......@@ -65,7 +66,7 @@ NativeText {
}
Rectangle {
color: "#909090"
color: "#909090" // FIXME: theming: Where is this ever visible?
opacity: root.active
z: -1
anchors.rightMargin: -6
......
......@@ -35,9 +35,9 @@ Item {
width: row.width + 8
height: text.height
Rectangle {
Rectangle { // background shown on hover over project item
anchors.fill: parent
color: "#f9f9f9"
color: creatorTheme.projectItem_BackgroundColorHover
visible: mouseArea.containsMouse
}
......@@ -67,7 +67,7 @@ Item {
NativeText {
id: pathText
height: 20
color: "#6b6b6b"
color: creatorTheme.projectItem_TextColorFilepath
font: fonts.smallPath
}
}
......
......@@ -34,6 +34,7 @@ import QtQuick.Controls 1.0
Rectangle {
id: projectList
height: column.height + 200
color: creatorTheme.backgroundColorNormal
property alias model: repeater.model
// Behavior on verticalScrollBar.opacity {
......
......@@ -37,9 +37,9 @@ Rectangle {
width: 930
height: 27
color: "#ffffff"
color: creatorTheme.backgroundColorNormal
radius: 6
border.color: "#cccccc"
border.color: "#cccccc" // FIXME: make themable
property alias placeholderText: lineEdit.placeholderText
property alias text: lineEdit.text
......@@ -56,6 +56,8 @@ Rectangle {
font.pixelSize: 14
placeholderText: qsTr("Search...")
style: TextFieldStyle {
placeholderTextColor: creatorTheme.textColorNormal
textColor: creatorTheme.textColorNormal
background: Item {
}
}
......
......@@ -67,7 +67,10 @@ Item {
Rectangle {
z: -4
color: "#f9f9f9"
// background of session item
color: (iArea.hovered || text.hovered || area2.hovered)
? creatorTheme.sessionItem_BackgroundColorHover
: creatorTheme.sessionItem_BackgroundColorNormal
anchors.fill: parent
visible: iArea.containsMouse || text.hovered
anchors.topMargin: 1
......@@ -115,6 +118,7 @@ Item {
NativeText {
text: projectsName[index]
font: fonts.boldDescription
color: creatorTheme.textColorNormal
}
NativeText {
x: 4
......@@ -139,7 +143,7 @@ Item {
maximumLineCount: 2
elide: Text.ElideRight
height: lineCount == 2 ? font.pixelSize * 2 + 4 : font.pixelSize + 2
color: "#6b6b6b"
color: creatorTheme.projectItem_TextColorFilepath
width: delegate.ListView.view.width - 48
MouseArea {
anchors.fill: parent
......@@ -222,7 +226,8 @@ Item {
id: collapseButton
visible: text.hovered || iArea.containsMouse || delegate.expanded
property color color: iArea.containsMouse ? "#E9E9E9" : "#f1f1f1"
property color color: iArea.containsMouse ? creatorTheme.sessionItem_BackgroundColorHover
: creatorTheme.sessionItemExpanded_BackgroundColor
anchors.fill: parent
Image {
......@@ -238,7 +243,7 @@ Item {
Rectangle {
color: collapseButton.color
z: -1
radius: 6
radius: creatorTheme.widgetStyle === 'flat' ? 0 : 6
anchors.fill: parent
anchors.topMargin: 1
anchors.bottomMargin: 1
......
......@@ -48,10 +48,24 @@ ColumnLayout {
Layout.preferredWidth: tabs.width + 16 * 2
Layout.preferredHeight: tabs.height + screenDependHeightDistance * 2
Image {
fillMode: Image.Tile
source: "images/background.png"
Component {
id: imageBackground
Image {
fillMode: Image.Tile
source: "images/background.png"
anchors.fill: parent
}
}
Component {
id: flatBackground
Rectangle {
color: creatorTheme.sideBar_BackgroundColor
}
}
Loader {
id: topLeftLoader
anchors.fill: parent
sourceComponent: creatorTheme.widgetStyle === 'flat' ? flatBackground : imageBackground;
}
Tabs {
......@@ -64,7 +78,7 @@ ColumnLayout {
}
Rectangle {
color: "#737373"
color: creatorTheme.widgetStyle === 'flat' ? creatorTheme.sideBar_BackgroundColor : creatorTheme.dividerColor
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
......@@ -73,7 +87,7 @@ ColumnLayout {
}
Rectangle {
color: "#737373"
color: creatorTheme.widgetStyle === 'flat' ? creatorTheme.sideBar_BackgroundColor : creatorTheme.dividerColor
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
......@@ -83,7 +97,7 @@ ColumnLayout {
}
Rectangle {
color: "#737373"
color: creatorTheme.widgetStyle === 'flat' ? creatorTheme.sideBar_BackgroundColor : creatorTheme.dividerColor
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
......@@ -94,7 +108,7 @@ ColumnLayout {
}
Rectangle {
color: "#ebebeb"
color: creatorTheme.sideBar_BackgroundColor
Layout.fillWidth: true
Layout.preferredWidth: innerColumn.width + 20
......@@ -115,6 +129,7 @@ ColumnLayout {
NativeText {
text: qsTr("New to Qt?")
color: creatorTheme.textColorNormal
font.pixelSize: 18
}
......@@ -124,6 +139,7 @@ ColumnLayout {
Layout.preferredWidth: innerColumn.width
text: qsTr("Learn how to develop your own applications and explore Qt Creator.")
color: creatorTheme.textColorNormal
font.pixelSize: 12
wrapMode: Text.WrapAtWordBoundaryOrAnywhere
}
......
......@@ -21,6 +21,7 @@ Product {
"snippets",
"styles",
"templates",
"themes",
"welcomescreen"
]
}
......
......@@ -29,8 +29,8 @@
****************************************************************************/
#include "detailsbutton.h"
#include <utils/hostosinfo.h>
#include "hostosinfo.h"