This commit is contained in:
Yihuo 2023-02-27 15:52:59 +08:00 committed by GitHub
commit 74320b47a3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1199 changed files with 2900 additions and 1599 deletions

178
.clang-format Normal file
View File

@ -0,0 +1,178 @@
---
Language: Cpp
# BasedOnStyle: Chromium
AccessModifierOffset: -2
AlignAfterOpenBracket: Align
AlignConsecutiveMacros: false
AlignConsecutiveAssignments: false
AlignConsecutiveBitFields: false
AlignConsecutiveDeclarations: false
AlignEscapedNewlines: DontAlign
AlignOperands: DontAlign
AlignTrailingComments: false
AllowAllArgumentsOnNextLine: true
AllowAllConstructorInitializersOnNextLine: false
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortEnumsOnASingleLine: false
AllowShortBlocksOnASingleLine: Empty
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: Inline
AllowShortLambdasOnASingleLine: All
AllowShortIfStatementsOnASingleLine: Never
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: true
AlwaysBreakTemplateDeclarations: Yes
BinPackArguments: false
BinPackParameters: false
BraceWrapping:
AfterCaseLabel: false
AfterClass: true
AfterControlStatement: MultiLine
AfterEnum: true
AfterFunction: true
AfterNamespace: true
AfterObjCDeclaration: false
AfterStruct: true
AfterUnion: true
AfterExternBlock: true
BeforeCatch: false
BeforeElse: false
BeforeLambdaBody: true
BeforeWhile: false
IndentBraces: false
SplitEmptyFunction: true
SplitEmptyRecord: true
SplitEmptyNamespace: true
BreakBeforeBinaryOperators: NonAssignment
BreakBeforeBraces: Custom
# BreakBeforeInheritanceComma: true
BreakInheritanceList: BeforeComma
BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: true
BreakConstructorInitializers: BeforeComma
BreakAfterJavaFieldAnnotations: true
BreakStringLiterals: true
ColumnLimit: 80
CommentPragmas: '^ IWYU pragma:'
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: false
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DeriveLineEnding: false
DerivePointerAlignment: false
DisableFormat: false
ExperimentalAutoDetectBinPacking: false
FixNamespaceComments: true
ForEachMacros:
- foreach
- Q_FOREACH
- BOOST_FOREACH
IncludeBlocks: Regroup
IncludeCategories:
# Standard library headers come before anything else
- Regex: '^<[a-z_]+>'
Priority: -1
- Regex: '^<.+\.h(pp)?>'
Priority: 1
- Regex: '^<.*'
Priority: 2
- Regex: '.*'
Priority: 3
IncludeIsMainRegex: ''
IncludeIsMainSourceRegex: ''
IndentCaseLabels: true
IndentCaseBlocks: false
IndentGotoLabels: true
IndentPPDirectives: AfterHash
IndentExternBlock: NoIndent
IndentWidth: 2
IndentWrappedFunctionNames: false
InsertTrailingCommas: Wrapped
JavaScriptQuotes: Double
JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: false
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCBinPackProtocolList: Never
ObjCBlockIndentWidth: 2
ObjCBreakBeforeNestedBlockParam: true
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: true
PenaltyBreakAssignment: 2
PenaltyBreakBeforeFirstCallParameter: 1
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyBreakTemplateDeclaration: 10
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 200
PointerAlignment: Left
RawStringFormats:
- Language: Cpp
Delimiters:
- cc
- CC
- cpp
- Cpp
- CPP
- 'c++'
- 'C++'
CanonicalDelimiter: ''
BasedOnStyle: google
- Language: TextProto
Delimiters:
- pb
- PB
- proto
- PROTO
EnclosingFunctions:
- EqualsProto
- EquivToProto
- PARSE_PARTIAL_TEXT_PROTO
- PARSE_TEST_PROTO
- PARSE_TEXT_PROTO
- ParseTextOrDie
- ParseTextProtoOrDie
- ParseTestProto
- ParsePartialTestProto
CanonicalDelimiter: ''
BasedOnStyle: google
ReflowComments: true
SortIncludes: true
SortUsingDeclarations: true
SpaceAfterCStyleCast: false
SpaceAfterLogicalNot: false
SpaceAfterTemplateKeyword: false
SpaceBeforeAssignmentOperators: true
SpaceBeforeCpp11BracedList: true
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: ControlStatementsExceptForEachMacros
SpaceBeforeRangeBasedForLoopColon: true
SpaceInEmptyBlock: false
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 2
SpacesInAngles: false
SpacesInConditionalStatement: false
SpacesInContainerLiterals: false
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
SpaceBeforeSquareBrackets: false
Standard: Auto
StatementMacros:
- Q_UNUSED
- QT_REQUIRE_VERSION
TabWidth: 8
UseCRLF: false
UseTab: Never
WhitespaceSensitiveMacros:
- STRINGIZE
- PP_STRINGIZE
- BOOST_PP_STRINGIZE
...

155
.clang-tidy Normal file
View File

@ -0,0 +1,155 @@
---
# Enable ALL the things! Except not really
# misc-non-private-member-variables-in-classes: the options don't do anything
# modernize-use-nodiscard: too aggressive, attribute is situationally useful
Checks: "*,\
-google-readability-todo,\
-altera-*,\
-fuchsia-*,\
fuchsia-multiple-inheritance,\
-llvm-header-guard,\
-llvm-include-order,\
-llvmlibc-*,\
-modernize-use-nodiscard,\
-misc-non-private-member-variables-in-classes"
WarningsAsErrors: ''
CheckOptions:
- key: 'bugprone-argument-comment.StrictMode'
value: 'true'
# Prefer using enum classes with 2 values for parameters instead of bools
- key: 'bugprone-argument-comment.CommentBoolLiterals'
value: 'true'
- key: 'bugprone-misplaced-widening-cast.CheckImplicitCasts'
value: 'true'
- key: 'bugprone-sizeof-expression.WarnOnSizeOfIntegerExpression'
value: 'true'
- key: 'bugprone-suspicious-string-compare.WarnOnLogicalNotComparison'
value: 'true'
- key: 'readability-simplify-boolean-expr.ChainedConditionalReturn'
value: 'true'
- key: 'readability-simplify-boolean-expr.ChainedConditionalAssignment'
value: 'true'
- key: 'readability-uniqueptr-delete-release.PreferResetCall'
value: 'true'
- key: 'cppcoreguidelines-init-variables.MathHeader'
value: '<cmath>'
- key: 'cppcoreguidelines-narrowing-conversions.PedanticMode'
value: 'true'
- key: 'readability-else-after-return.WarnOnUnfixable'
value: 'true'
- key: 'readability-else-after-return.WarnOnConditionVariables'
value: 'true'
- key: 'readability-inconsistent-declaration-parameter-name.Strict'
value: 'true'
- key: 'readability-qualified-auto.AddConstToQualified'
value: 'true'
- key: 'readability-redundant-access-specifiers.CheckFirstDeclaration'
value: 'true'
# These seem to be the most common identifier styles
- key: 'readability-identifier-naming.AbstractClassCase'
value: 'lower_case'
- key: 'readability-identifier-naming.ClassCase'
value: 'lower_case'
- key: 'readability-identifier-naming.ClassConstantCase'
value: 'lower_case'
- key: 'readability-identifier-naming.ClassMemberCase'
value: 'lower_case'
- key: 'readability-identifier-naming.ClassMethodCase'
value: 'lower_case'
- key: 'readability-identifier-naming.ConstantCase'
value: 'lower_case'
- key: 'readability-identifier-naming.ConstantMemberCase'
value: 'lower_case'
- key: 'readability-identifier-naming.ConstantParameterCase'
value: 'lower_case'
- key: 'readability-identifier-naming.ConstantPointerParameterCase'
value: 'lower_case'
- key: 'readability-identifier-naming.ConstexprFunctionCase'
value: 'lower_case'
- key: 'readability-identifier-naming.ConstexprMethodCase'
value: 'lower_case'
- key: 'readability-identifier-naming.ConstexprVariableCase'
value: 'lower_case'
- key: 'readability-identifier-naming.EnumCase'
value: 'lower_case'
- key: 'readability-identifier-naming.EnumConstantCase'
value: 'lower_case'
- key: 'readability-identifier-naming.FunctionCase'
value: 'lower_case'
- key: 'readability-identifier-naming.GlobalConstantCase'
value: 'lower_case'
- key: 'readability-identifier-naming.GlobalConstantPointerCase'
value: 'lower_case'
- key: 'readability-identifier-naming.GlobalFunctionCase'
value: 'lower_case'
- key: 'readability-identifier-naming.GlobalPointerCase'
value: 'lower_case'
- key: 'readability-identifier-naming.GlobalVariableCase'
value: 'lower_case'
- key: 'readability-identifier-naming.InlineNamespaceCase'
value: 'lower_case'
- key: 'readability-identifier-naming.LocalConstantCase'
value: 'lower_case'
- key: 'readability-identifier-naming.LocalConstantPointerCase'
value: 'lower_case'
- key: 'readability-identifier-naming.LocalPointerCase'
value: 'lower_case'
- key: 'readability-identifier-naming.LocalVariableCase'
value: 'lower_case'
- key: 'readability-identifier-naming.MacroDefinitionCase'
value: 'UPPER_CASE'
- key: 'readability-identifier-naming.MemberCase'
value: 'lower_case'
- key: 'readability-identifier-naming.MethodCase'
value: 'lower_case'
- key: 'readability-identifier-naming.NamespaceCase'
value: 'lower_case'
- key: 'readability-identifier-naming.ParameterCase'
value: 'lower_case'
- key: 'readability-identifier-naming.ParameterPackCase'
value: 'lower_case'
- key: 'readability-identifier-naming.PointerParameterCase'
value: 'lower_case'
- key: 'readability-identifier-naming.PrivateMemberCase'
value: 'lower_case'
- key: 'readability-identifier-naming.PrivateMemberPrefix'
value: 'm_'
- key: 'readability-identifier-naming.PrivateMethodCase'
value: 'lower_case'
- key: 'readability-identifier-naming.ProtectedMemberCase'
value: 'lower_case'
- key: 'readability-identifier-naming.ProtectedMemberPrefix'
value: 'm_'
- key: 'readability-identifier-naming.ProtectedMethodCase'
value: 'lower_case'
- key: 'readability-identifier-naming.PublicMemberCase'
value: 'lower_case'
- key: 'readability-identifier-naming.PublicMethodCase'
value: 'lower_case'
- key: 'readability-identifier-naming.ScopedEnumConstantCase'
value: 'lower_case'
- key: 'readability-identifier-naming.StaticConstantCase'
value: 'lower_case'
- key: 'readability-identifier-naming.StaticVariableCase'
value: 'lower_case'
- key: 'readability-identifier-naming.StructCase'
value: 'lower_case'
- key: 'readability-identifier-naming.TemplateParameterCase'
value: 'CamelCase'
- key: 'readability-identifier-naming.TemplateTemplateParameterCase'
value: 'CamelCase'
- key: 'readability-identifier-naming.TypeAliasCase'
value: 'lower_case'
- key: 'readability-identifier-naming.TypedefCase'
value: 'lower_case'
- key: 'readability-identifier-naming.TypeTemplateParameterCase'
value: 'CamelCase'
- key: 'readability-identifier-naming.UnionCase'
value: 'lower_case'
- key: 'readability-identifier-naming.ValueTemplateParameterCase'
value: 'CamelCase'
- key: 'readability-identifier-naming.VariableCase'
value: 'lower_case'
- key: 'readability-identifier-naming.VirtualMethodCase'
value: 'lower_case'
...

6
.codespellrc Normal file
View File

@ -0,0 +1,6 @@
[codespell]
builtin = clear,rare,en-GB_to_en-US,names,informal,code
check-filenames =
check-hidden =
skip = */.git,*/build,*/prefix
quiet-level = 2

12
.gitignore vendored
View File

@ -1 +1,11 @@
*.pro.user
.idea/
.vs/
.vscode/
build/
cmake/open-cpp-coverage.cmake
cmake-build-*/
prefix/
CMakeLists.txt.user
CMakeUserPresets.json
.cache
compile_commands.json

185
CMakeLists.txt Normal file
View File

@ -0,0 +1,185 @@
cmake_minimum_required(VERSION 3.14)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
include(prelude)
project(
qt-material-widgets
VERSION 0.1.0
DESCRIPTION "Qt Material Design Desktop Widgets"
LANGUAGES CXX
)
include(project-is-top-level)
include(variables)
include(link_qt)
if(NOT Qt6_FOUND)
qt5_add_resources(
style_res
${CMAKE_CURRENT_SOURCE_DIR}/source/qt_material_widgets.qrc
)
else()
qt_add_resources(
style_res
${CMAKE_CURRENT_SOURCE_DIR}/source/qt_material_widgets.qrc
)
endif()
add_library(
qt-material-widgets
${style_res}
include/qt-material-widgets/component/qtmaterialappbar.h
include/qt-material-widgets/component/qtmaterialautocomplete.h
include/qt-material-widgets/component/qtmaterialavatar.h
include/qt-material-widgets/component/qtmaterialbadge.h
include/qt-material-widgets/component/qtmaterialcheckbox.h
include/qt-material-widgets/component/qtmaterialcircularprogress.h
include/qt-material-widgets/component/qtmaterialdialog.h
include/qt-material-widgets/component/qtmaterialdrawer.h
include/qt-material-widgets/component/qtmaterialfab.h
include/qt-material-widgets/component/qtmaterialflatbutton.h
include/qt-material-widgets/component/qtmaterialiconbutton.h
include/qt-material-widgets/component/qtmateriallist.h
include/qt-material-widgets/component/qtmateriallistitem.h
include/qt-material-widgets/component/qtmaterialmenu.h
include/qt-material-widgets/component/qtmaterialpaper.h
include/qt-material-widgets/component/qtmaterialprogress.h
include/qt-material-widgets/component/qtmaterialradiobutton.h
include/qt-material-widgets/component/qtmaterialraisedbutton.h
include/qt-material-widgets/component/qtmaterialscrollbar.h
include/qt-material-widgets/component/qtmaterialslider.h
include/qt-material-widgets/component/qtmaterialsnackbar.h
include/qt-material-widgets/component/qtmaterialtable.h
include/qt-material-widgets/component/qtmaterialtabs.h
include/qt-material-widgets/component/qtmaterialtextfield.h
include/qt-material-widgets/component/qtmaterialtoggle.h
include/qt-material-widgets/layouts/qtmaterialsnackbarlayout.h
include/qt-material-widgets/lib/qtmaterialcheckable.h
include/qt-material-widgets/lib/qtmaterialoverlaywidget.h
include/qt-material-widgets/lib/qtmaterialripple.h
include/qt-material-widgets/lib/qtmaterialrippleoverlay.h
include/qt-material-widgets/lib/qtmaterialstatetransition.h
include/qt-material-widgets/lib/qtmaterialstatetransitionevent.h
include/qt-material-widgets/lib/qtmaterialstyle.h
include/qt-material-widgets/lib/qtmaterialtheme.h
source/component/qtmaterialappbar.cpp
source/component/qtmaterialautocomplete.cpp
source/component/qtmaterialautocomplete_internal.cpp
source/component/qtmaterialavatar.cpp
source/component/qtmaterialbadge.cpp
source/component/qtmaterialcheckbox.cpp
source/component/qtmaterialcircularprogress.cpp
source/component/qtmaterialcircularprogress_internal.cpp
source/component/qtmaterialdialog.cpp
source/component/qtmaterialdialog_internal.cpp
source/component/qtmaterialdrawer.cpp
source/component/qtmaterialdrawer_internal.cpp
source/component/qtmaterialfab.cpp
source/component/qtmaterialflatbutton.cpp
source/component/qtmaterialflatbutton_internal.cpp
source/component/qtmaterialiconbutton.cpp
source/component/qtmateriallist.cpp
source/component/qtmateriallistitem.cpp
source/component/qtmaterialmenu.cpp
source/component/qtmaterialmenu_internal.cpp
source/component/qtmaterialpaper.cpp
source/component/qtmaterialprogress.cpp
source/component/qtmaterialprogress_internal.cpp
source/component/qtmaterialradiobutton.cpp
source/component/qtmaterialraisedbutton.cpp
source/component/qtmaterialscrollbar.cpp
source/component/qtmaterialscrollbar_internal.cpp
source/component/qtmaterialslider.cpp
source/component/qtmaterialslider_internal.cpp
source/component/qtmaterialsnackbar.cpp
source/component/qtmaterialsnackbar_internal.cpp
source/component/qtmaterialtable.cpp
source/component/qtmaterialtabs.cpp
source/component/qtmaterialtabs_internal.cpp
source/component/qtmaterialtextfield.cpp
source/component/qtmaterialtextfield_internal.cpp
source/component/qtmaterialtoggle.cpp
source/component/qtmaterialtoggle_internal.cpp
source/layouts/qtmaterialsnackbarlayout.cpp
source/lib/qtmaterialcheckable.cpp
source/lib/qtmaterialcheckable_internal.cpp
source/lib/qtmaterialoverlaywidget.cpp
source/lib/qtmaterialripple.cpp
source/lib/qtmaterialrippleoverlay.cpp
source/lib/qtmaterialstatetransition.cpp
source/lib/qtmaterialstyle.cpp
source/lib/qtmaterialtheme.cpp
)
add_library(qt-material-widgets::qt-material-widgets ALIAS qt-material-widgets)
target_link_libraries(qt-material-widgets PUBLIC ${QT_LIBRARIES})
include(GenerateExportHeader)
generate_export_header(
qt-material-widgets
BASE_NAME qt-material-widgets
EXPORT_FILE_NAME export/qt-material-widgets/qt-material-widgets_export.hpp
CUSTOM_CONTENT_FROM_VARIABLE pragma_suppress_c4251
)
if(NOT BUILD_SHARED_LIBS)
target_compile_definitions(qt-material-widgets PUBLIC QT_MATERIAL_WIDGETS_STATIC_DEFINE)
endif()
set_target_properties(
qt-material-widgets PROPERTIES
CXX_VISIBILITY_PRESET hidden
VISIBILITY_INLINES_HIDDEN YES
VERSION "${PROJECT_VERSION}"
SOVERSION "${PROJECT_VERSION_MAJOR}"
EXPORT_NAME qt-material-widgets
OUTPUT_NAME qt-material-widgets
)
target_include_directories(
qt-material-widgets ${warning_guard}
PUBLIC
"$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>"
)
target_include_directories(
qt-material-widgets SYSTEM
PUBLIC
"$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/export>"
)
target_include_directories(
qt-material-widgets ${warning_guard}
PRIVATE
"$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include/qt-material-widgets>"
"$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include/qt-material-widgets/component>"
"$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/source>"
)
target_compile_features(qt-material-widgets PUBLIC cxx_std_11)
# ---- Examples ----
if(PROJECT_IS_TOP_LEVEL)
option(BUILD_EXAMPLES "Build examples tree." "${qt-material-widgets_DEVELOPER_MODE}")
if(BUILD_EXAMPLES)
set(PROJECT_ROOT_DIR ${PROJECT_SOURCE_DIR})
add_subdirectory(example)
endif()
endif()
# ---- Developer mode ----
if(NOT qt-material-widgets_DEVELOPER_MODE)
return()
elseif(NOT PROJECT_IS_TOP_LEVEL)
message(
AUTHOR_WARNING
"Developer mode is intended for developers of qt-material-widgets"
)
endif()
include(dev-mode)

178
CMakePresets.json Normal file
View File

@ -0,0 +1,178 @@
{
"version": 2,
"cmakeMinimumRequired": {
"major": 3,
"minor": 14,
"patch": 0
},
"configurePresets": [
{
"name": "cmake-pedantic",
"hidden": true,
"warnings": {
"dev": true,
"deprecated": true,
"unusedCli": true,
"systemVars": false
},
"errors": {
"dev": true,
"deprecated": true
}
},
{
"name": "dev-mode",
"hidden": true,
"inherits": "cmake-pedantic",
"cacheVariables": {
"qt-material-widgets_DEVELOPER_MODE": "ON"
}
},
{
"name": "cppcheck",
"hidden": true,
"cacheVariables": {
"CMAKE_CXX_CPPCHECK": "cppcheck;--inline-suppr"
}
},
{
"name": "clang-tidy",
"hidden": true,
"cacheVariables": {
"CMAKE_CXX_CLANG_TIDY": "clang-tidy;--header-filter=^${sourceDir}/"
}
},
{
"name": "ci-std",
"description": "This preset makes sure the project actually builds with at least the specified standard",
"hidden": true,
"cacheVariables": {
"CMAKE_CXX_EXTENSIONS": "OFF",
"CMAKE_CXX_STANDARD": "11",
"CMAKE_CXX_STANDARD_REQUIRED": "ON",
"CMAKE_SKIP_INSTALL_RULES": true,
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
}
},
{
"name": "flags-unix",
"hidden": true,
"cacheVariables": {
"CMAKE_CXX_FLAGS": "-Wall -Wextra -Wpedantic -Wconversion -Wsign-conversion -Wcast-qual -Wshadow -Wformat=2 -Wundef -Werror=float-equal "
}
},
{
"name": "flags-windows",
"description": "Note that all the flags after /W4 are required for MSVC to conform to the language standard",
"hidden": true,
"cacheVariables": {
"CMAKE_CXX_FLAGS": " /W4 /permissive- /volatile:iso /Zc:preprocessor /EHsc /Zc:__cplusplus /Zc:externConstexpr /Zc:throwingNew /wd5105"
}
},
{
"name": "ci-unix",
"generator": "Unix Makefiles",
"hidden": true,
"inherits": [
"flags-unix",
"ci-std"
],
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release"
}
},
{
"name": "ci-win64",
"inherits": [
"flags-windows",
"ci-std"
],
"generator": "Visual Studio 17 2022",
"architecture": "x64",
"hidden": true
},
{
"name": "ci-win64-ninja",
"inherits": [
"flags-windows",
"ci-std"
],
"generator": "Ninja",
"hidden": true
},
{
"name": "coverage-unix",
"binaryDir": "${sourceDir}/build/coverage",
"inherits": "ci-unix",
"hidden": true,
"cacheVariables": {
"ENABLE_COVERAGE": "ON",
"CMAKE_BUILD_TYPE": "Coverage",
"CMAKE_CXX_FLAGS_COVERAGE": "-Og -g --coverage -fkeep-inline-functions -fkeep-static-functions",
"CMAKE_EXE_LINKER_FLAGS_COVERAGE": "--coverage",
"CMAKE_SHARED_LINKER_FLAGS_COVERAGE": "--coverage"
}
},
{
"name": "ci-coverage",
"inherits": [
"coverage-unix",
"dev-mode"
],
"cacheVariables": {
"COVERAGE_HTML_COMMAND": ""
}
},
{
"name": "ci-sanitize",
"binaryDir": "${sourceDir}/build/sanitize",
"inherits": [
"ci-unix",
"dev-mode"
],
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Sanitize",
"CMAKE_CXX_FLAGS_SANITIZE": "-O2 -g -fsanitize=address,undefined -fno-omit-frame-pointer -fno-common"
}
},
{
"name": "ci-build",
"binaryDir": "${sourceDir}/build",
"hidden": true
},
{
"name": "ci-macos",
"inherits": [
"ci-build",
"ci-unix",
"dev-mode"
]
},
{
"name": "ci-ubuntu",
"inherits": [
"ci-build",
"ci-unix",
"clang-tidy",
"cppcheck",
"dev-mode"
]
},
{
"name": "ci-windows",
"inherits": [
"ci-build",
"ci-win64",
"dev-mode"
]
},
{
"name": "ci-windows-ninja",
"inherits": [
"ci-build",
"ci-win64-ninja",
"dev-mode"
]
}
]
}

33
cmake/coverage.cmake Normal file
View File

@ -0,0 +1,33 @@
# ---- Variables ----
# We use variables separate from what CTest uses, because those have
# customization issues
set(
COVERAGE_TRACE_COMMAND
lcov -c -q
-o "${PROJECT_BINARY_DIR}/coverage.info"
-d "${PROJECT_BINARY_DIR}"
--include "${PROJECT_SOURCE_DIR}/*"
CACHE STRING
"; separated command to generate a trace for the 'coverage' target"
)
set(
COVERAGE_HTML_COMMAND
genhtml --legend -f -q
"${PROJECT_BINARY_DIR}/coverage.info"
-p "${PROJECT_SOURCE_DIR}"
-o "${PROJECT_BINARY_DIR}/coverage_html"
CACHE STRING
"; separated command to generate an HTML report for the 'coverage' target"
)
# ---- Coverage target ----
add_custom_target(
coverage
COMMAND ${COVERAGE_TRACE_COMMAND}
COMMAND ${COVERAGE_HTML_COMMAND}
COMMENT "Generating coverage report"
VERBATIM
)

21
cmake/dev-mode.cmake Normal file
View File

@ -0,0 +1,21 @@
include(cmake/folders.cmake)
option(BUILD_MCSS_DOCS "Build documentation using Doxygen and m.css" OFF)
if(BUILD_MCSS_DOCS)
include(cmake/docs.cmake)
endif()
option(ENABLE_COVERAGE "Enable coverage support separate from CTest's" OFF)
if(ENABLE_COVERAGE)
include(cmake/coverage.cmake)
endif()
if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
include(cmake/open-cpp-coverage.cmake OPTIONAL)
endif()
include(cmake/lint-targets.cmake)
include(cmake/spell-targets.cmake)
add_folders(Project)

112
cmake/docs-ci.cmake Normal file
View File

@ -0,0 +1,112 @@
cmake_minimum_required(VERSION 3.14)
foreach(var IN ITEMS PROJECT_BINARY_DIR PROJECT_SOURCE_DIR)
if(NOT DEFINED "${var}")
message(FATAL_ERROR "${var} must be defined")
endif()
endforeach()
set(bin "${PROJECT_BINARY_DIR}")
set(src "${PROJECT_SOURCE_DIR}")
# ---- Dependencies ----
set(mcss_SOURCE_DIR "${bin}/docs/.ci")
if(NOT IS_DIRECTORY "${mcss_SOURCE_DIR}")
file(MAKE_DIRECTORY "${mcss_SOURCE_DIR}")
file(
DOWNLOAD
https://github.com/friendlyanon/m.css/releases/download/release-1/mcss.zip
"${mcss_SOURCE_DIR}/mcss.zip"
STATUS status
EXPECTED_MD5 00cd2757ebafb9bcba7f5d399b3bec7f
)
if(NOT status MATCHES "^0;")
message(FATAL_ERROR "Download failed with ${status}")
endif()
execute_process(
COMMAND "${CMAKE_COMMAND}" -E tar xf mcss.zip
WORKING_DIRECTORY "${mcss_SOURCE_DIR}"
RESULT_VARIABLE result
)
if(NOT result EQUAL "0")
message(FATAL_ERROR "Extraction failed with ${result}")
endif()
file(REMOVE "${mcss_SOURCE_DIR}/mcss.zip")
endif()
find_program(Python3_EXECUTABLE NAMES python3 python)
if(NOT Python3_EXECUTABLE)
message(FATAL_ERROR "Python executable was not found")
endif()
# ---- Process project() call in CMakeLists.txt ----
file(READ "${src}/CMakeLists.txt" content)
string(FIND "${content}" "project(" index)
if(index EQUAL "-1")
message(FATAL_ERROR "Could not find \"project(\"")
endif()
string(SUBSTRING "${content}" "${index}" -1 content)
string(FIND "${content}" "\n)\n" index)
if(index EQUAL "-1")
message(FATAL_ERROR "Could not find \"\\n)\\n\"")
endif()
string(SUBSTRING "${content}" 0 "${index}" content)
file(WRITE "${bin}/docs-ci.project.cmake" "docs_${content}\n)\n")
macro(list_pop_front list out)
list(GET "${list}" 0 "${out}")
list(REMOVE_AT "${list}" 0)
endmacro()
function(docs_project name)
cmake_parse_arguments(PARSE_ARGV 1 "" "" "VERSION;DESCRIPTION;HOMEPAGE_URL" LANGUAGES)
set(PROJECT_NAME "${name}" PARENT_SCOPE)
if(DEFINED _VERSION)
set(PROJECT_VERSION "${_VERSION}" PARENT_SCOPE)
string(REGEX MATCH "^[0-9]+(\\.[0-9]+)*" versions "${_VERSION}")
string(REPLACE . ";" versions "${versions}")
set(suffixes MAJOR MINOR PATCH TWEAK)
while(NOT versions STREQUAL "" AND NOT suffixes STREQUAL "")
list_pop_front(versions version)
list_pop_front(suffixes suffix)
set("PROJECT_VERSION_${suffix}" "${version}" PARENT_SCOPE)
endwhile()
endif()
if(DEFINED _DESCRIPTION)
set(PROJECT_DESCRIPTION "${_DESCRIPTION}" PARENT_SCOPE)
endif()
if(DEFINED _HOMEPAGE_URL)
set(PROJECT_HOMEPAGE_URL "${_HOMEPAGE_URL}" PARENT_SCOPE)
endif()
endfunction()
include("${bin}/docs-ci.project.cmake")
# ---- Generate docs ----
if(NOT DEFINED DOXYGEN_OUTPUT_DIRECTORY)
set(DOXYGEN_OUTPUT_DIRECTORY "${bin}/docs")
endif()
set(out "${DOXYGEN_OUTPUT_DIRECTORY}")
foreach(file IN ITEMS Doxyfile conf.py)
configure_file("${src}/docs/${file}.in" "${bin}/docs/${file}" @ONLY)
endforeach()
set(mcss_script "${mcss_SOURCE_DIR}/documentation/doxygen.py")
set(config "${bin}/docs/conf.py")
file(REMOVE_RECURSE "${out}/html" "${out}/xml")
execute_process(
COMMAND "${Python3_EXECUTABLE}" "${mcss_script}" "${config}"
WORKING_DIRECTORY "${bin}/docs"
RESULT_VARIABLE result
)
if(NOT result EQUAL "0")
message(FATAL_ERROR "m.css returned with ${result}")
endif()

46
cmake/docs.cmake Normal file
View File

@ -0,0 +1,46 @@
# ---- Dependencies ----
set(extract_timestamps "")
if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.24")
set(extract_timestamps DOWNLOAD_EXTRACT_TIMESTAMP YES)
endif()
include(FetchContent)
FetchContent_Declare(
mcss URL
https://github.com/friendlyanon/m.css/releases/download/release-1/mcss.zip
URL_MD5 00cd2757ebafb9bcba7f5d399b3bec7f
SOURCE_DIR "${PROJECT_BINARY_DIR}/mcss"
UPDATE_DISCONNECTED YES
${extract_timestamps}
)
FetchContent_MakeAvailable(mcss)
find_package(Python3 3.6 REQUIRED)
# ---- Declare documentation target ----
set(
DOXYGEN_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/docs"
CACHE PATH "Path for the generated Doxygen documentation"
)
set(working_dir "${PROJECT_BINARY_DIR}/docs")
foreach(file IN ITEMS Doxyfile conf.py)
configure_file("docs/${file}.in" "${working_dir}/${file}" @ONLY)
endforeach()
set(mcss_script "${mcss_SOURCE_DIR}/documentation/doxygen.py")
set(config "${working_dir}/conf.py")
add_custom_target(
docs
COMMAND "${CMAKE_COMMAND}" -E remove_directory
"${DOXYGEN_OUTPUT_DIRECTORY}/html"
"${DOXYGEN_OUTPUT_DIRECTORY}/xml"
COMMAND "${Python3_EXECUTABLE}" "${mcss_script}" "${config}"
COMMENT "Building documentation using Doxygen and m.css"
WORKING_DIRECTORY "${working_dir}"
VERBATIM
)

21
cmake/folders.cmake Normal file
View File

@ -0,0 +1,21 @@
set_property(GLOBAL PROPERTY USE_FOLDERS YES)
# Call this function at the end of a directory scope to assign a folder to
# targets created in that directory. Utility targets will be assigned to the
# UtilityTargets folder, otherwise to the ${name}Targets folder. If a target
# already has a folder assigned, then that target will be skipped.
function(add_folders name)
get_property(targets DIRECTORY PROPERTY BUILDSYSTEM_TARGETS)
foreach(target IN LISTS targets)
get_property(folder TARGET "${target}" PROPERTY FOLDER)
if(DEFINED folder)
continue()
endif()
set(folder Utility)
get_property(type TARGET "${target}" PROPERTY TYPE)
if(NOT type STREQUAL "UTILITY")
set(folder "${name}")
endif()
set_property(TARGET "${target}" PROPERTY FOLDER "${folder}Targets")
endforeach()
endfunction()

View File

@ -0,0 +1 @@
include("${CMAKE_CURRENT_LIST_DIR}/qt-material-widgetsTargets.cmake")

70
cmake/install-rules.cmake Normal file
View File

@ -0,0 +1,70 @@
if(PROJECT_IS_TOP_LEVEL)
set(
CMAKE_INSTALL_INCLUDEDIR "include/qt-material-widgets-${PROJECT_VERSION}"
CACHE PATH ""
)
endif()
include(CMakePackageConfigHelpers)
include(GNUInstallDirs)
# find_package(<package>) call for consumers to find this project
set(package qt-material-widgets)
install(
DIRECTORY
include/
"${PROJECT_BINARY_DIR}/export/"
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
COMPONENT qt-material-widgets_Development
)
install(
TARGETS qt-material-widgets
EXPORT qt-material-widgetsTargets
RUNTIME #
COMPONENT qt-material-widgets_Runtime
LIBRARY #
COMPONENT qt-material-widgets_Runtime
NAMELINK_COMPONENT qt-material-widgets_Development
ARCHIVE #
COMPONENT qt-material-widgets_Development
INCLUDES #
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
)
write_basic_package_version_file(
"${package}ConfigVersion.cmake"
COMPATIBILITY SameMajorVersion
)
# Allow package maintainers to freely override the path for the configs
set(
qt-material-widgets_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/${package}"
CACHE PATH "CMake package config location relative to the install prefix"
)
mark_as_advanced(qt-material-widgets_INSTALL_CMAKEDIR)
install(
FILES cmake/install-config.cmake
DESTINATION "${qt-material-widgets_INSTALL_CMAKEDIR}"
RENAME "${package}Config.cmake"
COMPONENT qt-material-widgets_Development
)
install(
FILES "${PROJECT_BINARY_DIR}/${package}ConfigVersion.cmake"
DESTINATION "${qt-material-widgets_INSTALL_CMAKEDIR}"
COMPONENT qt-material-widgets_Development
)
install(
EXPORT qt-material-widgetsTargets
NAMESPACE qt-material-widgets::
DESTINATION "${qt-material-widgets_INSTALL_CMAKEDIR}"
COMPONENT qt-material-widgets_Development
)
if(PROJECT_IS_TOP_LEVEL)
include(CPack)
endif()

22
cmake/link_qt.cmake Normal file
View File

@ -0,0 +1,22 @@
cmake_minimum_required(VERSION 3.14)
# Link Qt
set(QT_LIBRARIES_NAMES
Core
Gui
Widgets
)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS ${QT_LIBRARIES_NAMES})
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS ${QT_LIBRARIES_NAMES})
include_directories(%{Qt:QT_INSTALL_PREFIX})
list(APPEND QT_LIBRARIES
Qt${QT_VERSION_MAJOR}::Core
Qt${QT_VERSION_MAJOR}::Gui
Qt${QT_VERSION_MAJOR}::Widgets
)

34
cmake/lint-targets.cmake Normal file
View File

@ -0,0 +1,34 @@
set(
FORMAT_PATTERNS
source/*.cpp source/*.hpp
include/*.hpp
test/*.cpp test/*.hpp
example/*.cpp example/*.hpp
CACHE STRING
"; separated patterns relative to the project source dir to format"
)
set(FORMAT_COMMAND clang-format CACHE STRING "Formatter to use")
add_custom_target(
format-check
COMMAND "${CMAKE_COMMAND}"
-D "FORMAT_COMMAND=${FORMAT_COMMAND}"
-D "PATTERNS=${FORMAT_PATTERNS}"
-P "${PROJECT_SOURCE_DIR}/cmake/lint.cmake"
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
COMMENT "Linting the code"
VERBATIM
)
add_custom_target(
format-fix
COMMAND "${CMAKE_COMMAND}"
-D "FORMAT_COMMAND=${FORMAT_COMMAND}"
-D "PATTERNS=${FORMAT_PATTERNS}"
-D FIX=YES
-P "${PROJECT_SOURCE_DIR}/cmake/lint.cmake"
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
COMMENT "Fixing the code"
VERBATIM
)

52
cmake/lint.cmake Normal file
View File

@ -0,0 +1,52 @@
cmake_minimum_required(VERSION 3.14)
macro(default name)
if(NOT DEFINED "${name}")
set("${name}" "${ARGN}")
endif()
endmacro()
default(FORMAT_COMMAND clang-format)
default(
PATTERNS
source/*.cpp source/*.hpp
include/*.hpp
test/*.cpp test/*.hpp
example/*.cpp example/*.hpp
)
default(FIX NO)
set(flag --output-replacements-xml)
set(args OUTPUT_VARIABLE output)
if(FIX)
set(flag -i)
set(args "")
endif()
file(GLOB_RECURSE files ${PATTERNS})
set(badly_formatted "")
set(output "")
string(LENGTH "${CMAKE_SOURCE_DIR}/" path_prefix_length)
foreach(file IN LISTS files)
execute_process(
COMMAND "${FORMAT_COMMAND}" --style=file "${flag}" "${file}"
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
RESULT_VARIABLE result
${args}
)
if(NOT result EQUAL "0")
message(FATAL_ERROR "'${file}': formatter returned with ${result}")
endif()
if(NOT FIX AND output MATCHES "\n<replacement offset")
string(SUBSTRING "${file}" "${path_prefix_length}" -1 relative_file)
list(APPEND badly_formatted "${relative_file}")
endif()
set(output "")
endforeach()
if(NOT badly_formatted STREQUAL "")
list(JOIN badly_formatted "\n" bad_list)
message("The following files are badly formatted:\n\n${bad_list}\n")
message(FATAL_ERROR "Run again with FIX=YES to fix these files.")
endif()

View File

@ -0,0 +1,31 @@
# Example file to run OpenCppCoverage on Windows
include(ProcessorCount)
ProcessorCount(N)
file(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/opencppcoverage")
# Convert delimiters to Windows ones
string(REPLACE "/" "\\" binary_dir "${PROJECT_BINARY_DIR}")
string(REPLACE "/" "\\" source_dir "${PROJECT_SOURCE_DIR}")
string(REPLACE "/" "\\" ctest "${CMAKE_CTEST_COMMAND}")
add_custom_target(
win-cov
COMMAND OpenCppCoverage -q
# We want coverage from the child processes of CTest
--cover_children
# Subdirectory where the tests reside in the binary directory
--modules "${binary_dir}\\test"
# This command is for the developer, so export as html instead of cobertura
--export_type "html:${binary_dir}\\opencppcoverage"
# Source (not header) file locations
--sources "${source_dir}\\source"
--sources "${source_dir}\\test\\source"
# Working directory for CTest, which should be the binary directory
--working_dir "${binary_dir}"
# OpenCppCoverage should be run only with the Debug configuration tests
-- "${ctest}" -C Debug --output-on-failure -j "${N}"
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}"
VERBATIM
)

10
cmake/prelude.cmake Normal file
View File

@ -0,0 +1,10 @@
# ---- In-source guard ----
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)
message(
FATAL_ERROR
"In-source builds are not supported. "
"Please read the BUILDING document before trying to build this project. "
"You may need to delete 'CMakeCache.txt' and 'CMakeFiles/' first."
)
endif()

View File

@ -0,0 +1,6 @@
# This variable is set by project() in CMake 3.21+
string(
COMPARE EQUAL
"${CMAKE_SOURCE_DIR}" "${PROJECT_SOURCE_DIR}"
PROJECT_IS_TOP_LEVEL
)

22
cmake/spell-targets.cmake Normal file
View File

@ -0,0 +1,22 @@
set(SPELL_COMMAND codespell CACHE STRING "Spell checker to use")
add_custom_target(
spell-check
COMMAND "${CMAKE_COMMAND}"
-D "SPELL_COMMAND=${SPELL_COMMAND}"
-P "${PROJECT_SOURCE_DIR}/cmake/spell.cmake"
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
COMMENT "Checking spelling"
VERBATIM
)
add_custom_target(
spell-fix
COMMAND "${CMAKE_COMMAND}"
-D "SPELL_COMMAND=${SPELL_COMMAND}"
-D FIX=YES
-P "${PROJECT_SOURCE_DIR}/cmake/spell.cmake"
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
COMMENT "Fixing spelling errors"
VERBATIM
)

29
cmake/spell.cmake Normal file
View File

@ -0,0 +1,29 @@
cmake_minimum_required(VERSION 3.14)
macro(default name)
if(NOT DEFINED "${name}")
set("${name}" "${ARGN}")
endif()
endmacro()
default(SPELL_COMMAND codespell)
default(FIX NO)
set(flag "")
if(FIX)
set(flag -w)
endif()
execute_process(
COMMAND "${SPELL_COMMAND}" ${flag}
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
RESULT_VARIABLE result
)
if(result EQUAL "65")
message(FATAL_ERROR "Run again with FIX=YES to fix these errors.")
elseif(result EQUAL "64")
message(FATAL_ERROR "Spell checker printed the usage info. Bad arguments?")
elseif(NOT result EQUAL "0")
message(FATAL_ERROR "Spell checker returned with ${result}")
endif()

41
cmake/variables.cmake Normal file
View File

@ -0,0 +1,41 @@
# ---- Developer mode ----
# Developer mode enables targets and code paths in the CMake scripts that are
# only relevant for the developer(s) of qt-material-widgets
# Targets necessary to build the project must be provided unconditionally, so
# consumers can trivially build and package the project
if(PROJECT_IS_TOP_LEVEL)
option(qt-material-widgets_DEVELOPER_MODE "Enable developer mode" OFF)
option(BUILD_SHARED_LIBS "Build shared libs." OFF)
endif()
# ---- Suppress C4251 on Windows ----
# Please see include/qt-material-widgets/qt-material-widgets.hpp for more details
set(pragma_suppress_c4251 "
/* This needs to suppress only for MSVC */
#if defined(_MSC_VER) && !defined(__ICL)
# define QT_MATERIAL_WIDGETS_SUPPRESS_C4251 _Pragma(\"warning(suppress:4251)\")
#else
# define QT_MATERIAL_WIDGETS_SUPPRESS_C4251
#endif
")
# ---- Warning guard ----
# target_include_directories with the SYSTEM modifier will request the compiler
# to omit warnings from the provided paths, if the compiler supports that
# This is to provide a user experience similar to find_package when
# add_subdirectory or FetchContent is used to consume this project
set(warning_guard "")
if(NOT PROJECT_IS_TOP_LEVEL)
option(
qt-material-widgets_INCLUDES_WITH_SYSTEM
"Use SYSTEM modifier for qt-material-widgets's includes, disabling warnings"
ON
)
mark_as_advanced(qt-material-widgets_INCLUDES_WITH_SYSTEM)
if(qt-material-widgets_INCLUDES_WITH_SYSTEM)
set(warning_guard SYSTEM)
endif()
endif()

View File

@ -0,0 +1,24 @@
# This function will add shared libraries to the PATH when running the test, so
# they can be found. Windows does not support RPATH or similar. See:
# https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order
# Usage: windows_set_path(<test> <target>...)
function(windows_set_path TEST)
if(NOT CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
return()
endif()
set(path "")
set(glue "")
foreach(target IN LISTS ARGN)
if(TARGET "${target}")
get_target_property(type "${target}" TYPE)
if(type STREQUAL "SHARED_LIBRARY")
set(path "${path}${glue}$<TARGET_FILE_DIR:${target}>")
set(glue "\;") # backslash is important
endif()
endif()
endforeach()
if(NOT path STREQUAL "")
set_property(TEST "${TEST}" PROPERTY ENVIRONMENT "PATH=${path}")
endif()
endfunction()

View File

@ -1,130 +0,0 @@
TEMPLATE = lib
CONFIG += staticlib
SOURCES = \
qtmaterialavatar.cpp \
lib/qtmaterialstyle.cpp \
lib/qtmaterialtheme.cpp \
qtmaterialbadge.cpp \
lib/qtmaterialoverlaywidget.cpp \
qtmaterialcheckbox.cpp \
lib/qtmaterialcheckable_internal.cpp \
lib/qtmaterialcheckable.cpp \
lib/qtmaterialripple.cpp \
lib/qtmaterialrippleoverlay.cpp \
qtmaterialfab.cpp \
qtmaterialraisedbutton.cpp \
qtmaterialflatbutton_internal.cpp \
qtmaterialflatbutton.cpp \
lib/qtmaterialstatetransition.cpp \
qtmaterialiconbutton.cpp \
qtmaterialprogress_internal.cpp \
qtmaterialprogress.cpp \
qtmaterialcircularprogress_internal.cpp \
qtmaterialcircularprogress.cpp \
qtmaterialslider_internal.cpp \
qtmaterialslider.cpp \
qtmaterialsnackbar_internal.cpp \
qtmaterialsnackbar.cpp \
qtmaterialradiobutton.cpp \
qtmaterialtoggle_internal.cpp \
qtmaterialtoggle.cpp \
qtmaterialtextfield_internal.cpp \
qtmaterialtextfield.cpp \
qtmaterialtabs_internal.cpp \
qtmaterialtabs.cpp \
qtmaterialscrollbar_internal.cpp \
qtmaterialscrollbar.cpp \
qtmaterialdialog_internal.cpp \
qtmaterialdialog.cpp \
qtmaterialdrawer_internal.cpp \
qtmaterialdrawer.cpp \
qtmaterialappbar.cpp \
qtmaterialautocomplete.cpp \
qtmaterialpaper.cpp \
qtmaterialtable.cpp \
layouts/qtmaterialsnackbarlayout.cpp \
qtmaterialautocomplete_internal.cpp \
qtmaterialmenu.cpp \
qtmaterialmenu_internal.cpp \
qtmateriallist.cpp \
qtmateriallistitem.cpp
HEADERS = \
qtmaterialavatar_p.h \
qtmaterialavatar.h \
lib/qtmaterialstyle_p.h \
lib/qtmaterialstyle.h \
lib/qtmaterialtheme_p.h \
lib/qtmaterialtheme.h \
qtmaterialbadge_p.h \
qtmaterialbadge.h \
lib/qtmaterialoverlaywidget.h \
qtmaterialcheckbox_p.h \
qtmaterialcheckbox.h \
lib/qtmaterialcheckable_internal.h \
lib/qtmaterialcheckable_p.h \
lib/qtmaterialripple.h \
lib/qtmaterialrippleoverlay.h \
lib/qtmaterialcheckable.h \
qtmaterialfab_p.h \
qtmaterialfab.h \
qtmaterialraisedbutton_p.h \
qtmaterialraisedbutton.h \
qtmaterialflatbutton_internal.h \
qtmaterialflatbutton_p.h \
qtmaterialflatbutton.h \
lib/qtmaterialstatetransition.h \
lib/qtmaterialstatetransitionevent.h \
qtmaterialiconbutton_p.h \
qtmaterialiconbutton.h \
qtmaterialprogress_internal.h \
qtmaterialprogress_p.h \
qtmaterialprogress.h \
qtmaterialcircularprogress_internal.h \
qtmaterialcircularprogress_p.h \
qtmaterialcircularprogress.h \
qtmaterialslider_internal.h \
qtmaterialslider_p.h \
qtmaterialslider.h \
qtmaterialsnackbar_internal.h \
qtmaterialsnackbar_p.h \
qtmaterialsnackbar.h \
qtmaterialradiobutton_p.h \
qtmaterialradiobutton.h \
qtmaterialtoggle_internal.h \
qtmaterialtoggle_p.h \
qtmaterialtoggle.h \
qtmaterialtextfield_internal.h \
qtmaterialtextfield_p.h \
qtmaterialtextfield.h \
qtmaterialtabs_internal.h \
qtmaterialtabs_p.h \
qtmaterialtabs.h \
qtmaterialscrollbar_internal.h \
qtmaterialscrollbar_p.h \
qtmaterialscrollbar.h \
qtmaterialdialog_internal.h \
qtmaterialdialog_p.h \
qtmaterialdialog.h \
qtmaterialdrawer_internal.h \
qtmaterialdrawer_p.h \
qtmaterialdrawer.h \
qtmaterialappbar.h \
qtmaterialappbar_p.h \
qtmaterialautocomplete.h \
qtmaterialautocomplete_p.h \
qtmaterialpaper.h \
qtmaterialpaper_p.h \
qtmaterialtable.h \
qtmaterialtable_p.h \
layouts/qtmaterialsnackbarlayout.h \
layouts/qtmaterialsnackbarlayout_p.h \
qtmaterialautocomplete_internal.h \
qtmaterialmenu.h \
qtmaterialmenu_p.h \
qtmaterialmenu_internal.h \
qtmateriallist.h \
qtmateriallist_p.h \
qtmateriallistitem.h \
qtmateriallistitem_p.h
RESOURCES += \
resources.qrc

View File

@ -1,24 +0,0 @@
#ifndef QTMATERIALOVERLAYWIDGET_H
#define QTMATERIALOVERLAYWIDGET_H
#include <QtWidgets/QWidget>
class QtMaterialOverlayWidget : public QWidget
{
Q_OBJECT
public:
explicit QtMaterialOverlayWidget(QWidget *parent = 0);
~QtMaterialOverlayWidget();
protected:
bool event(QEvent *event) Q_DECL_OVERRIDE;
bool eventFilter(QObject *obj, QEvent *event) Q_DECL_OVERRIDE;
virtual QRect overlayGeometry() const;
private:
Q_DISABLE_COPY(QtMaterialOverlayWidget)
};
#endif // QTMATERIALOVERLAYWIDGET_H

View File

@ -1,119 +0,0 @@
#include "qtmaterialripple.h"
#include "lib/qtmaterialrippleoverlay.h"
/*!
* \class QtMaterialRipple
* \internal
*/
QtMaterialRipple::QtMaterialRipple(const QPoint &center, QObject *parent)
: QParallelAnimationGroup(parent),
m_overlay(0),
m_radiusAnimation(animate("radius")),
m_opacityAnimation(animate("opacity")),
m_radius(0),
m_opacity(0),
m_center(center)
{
init();
}
QtMaterialRipple::QtMaterialRipple(const QPoint &center,
QtMaterialRippleOverlay *overlay,
QObject *parent)
: QParallelAnimationGroup(parent),
m_overlay(overlay),
m_radiusAnimation(animate("radius")),
m_opacityAnimation(animate("opacity")),
m_radius(0),
m_opacity(0),
m_center(center)
{
init();
}
QtMaterialRipple::~QtMaterialRipple()
{
}
void QtMaterialRipple::setRadius(qreal radius)
{
Q_ASSERT(m_overlay);
if (m_radius == radius) {
return;
}
m_radius = radius;
m_overlay->update();
}
void QtMaterialRipple::setOpacity(qreal opacity)
{
Q_ASSERT(m_overlay);
if (m_opacity == opacity) {
return;
}
m_opacity = opacity;
m_overlay->update();
}
void QtMaterialRipple::setColor(const QColor &color)
{
if (m_brush.color() == color) {
return;
}
m_brush.setColor(color);
if (m_overlay) {
m_overlay->update();
}
}
void QtMaterialRipple::setBrush(const QBrush &brush)
{
m_brush = brush;
if (m_overlay) {
m_overlay->update();
}
}
void QtMaterialRipple::destroy()
{
Q_ASSERT(m_overlay);
m_overlay->removeRipple(this);
}
/*!
* \internal
*/
QPropertyAnimation *QtMaterialRipple::animate(const QByteArray &property,
const QEasingCurve &easing,
int duration)
{
QPropertyAnimation *animation = new QPropertyAnimation;
animation->setTargetObject(this);
animation->setPropertyName(property);
animation->setEasingCurve(easing);
animation->setDuration(duration);
addAnimation(animation);
return animation;
}
/*!
* \internal
*/
void QtMaterialRipple::init()
{
setOpacityStartValue(0.5);
setOpacityEndValue(0);
setRadiusStartValue(0);
setRadiusEndValue(300);
m_brush.setColor(Qt::black);
m_brush.setStyle(Qt::SolidPattern);
connect(this, SIGNAL(finished()), this, SLOT(destroy()));
}

View File

@ -1,136 +0,0 @@
#ifndef QTMATERIALRIPPLE_H
#define QTMATERIALRIPPLE_H
#include <QParallelAnimationGroup>
#include <QEasingCurve>
#include <QPropertyAnimation>
#include <QPoint>
#include <QBrush>
class QtMaterialRippleOverlay;
class QtMaterialRipple : public QParallelAnimationGroup
{
Q_OBJECT
Q_PROPERTY(qreal radius WRITE setRadius READ radius)
Q_PROPERTY(qreal opacity WRITE setOpacity READ opacity)
public:
explicit QtMaterialRipple(const QPoint &center, QObject *parent = 0);
QtMaterialRipple(const QPoint &center, QtMaterialRippleOverlay *overlay, QObject *parent = 0);
~QtMaterialRipple();
inline void setOverlay(QtMaterialRippleOverlay *overlay);
void setRadius(qreal radius);
inline qreal radius() const;
void setOpacity(qreal opacity);
inline qreal opacity() const;
void setColor(const QColor &color);
inline QColor color() const;
void setBrush(const QBrush &brush);
inline QBrush brush() const;
inline QPoint center() const;
inline QPropertyAnimation *radiusAnimation() const;
inline QPropertyAnimation *opacityAnimation() const;
inline void setOpacityStartValue(qreal value);
inline void setOpacityEndValue(qreal value);
inline void setRadiusStartValue(qreal value);
inline void setRadiusEndValue(qreal value);
inline void setDuration(int msecs);
protected slots:
void destroy();
private:
Q_DISABLE_COPY(QtMaterialRipple)
QPropertyAnimation *animate(const QByteArray &property,
const QEasingCurve &easing = QEasingCurve::OutQuad,
int duration = 800);
void init();
QtMaterialRippleOverlay *m_overlay;
QPropertyAnimation *const m_radiusAnimation;
QPropertyAnimation *const m_opacityAnimation;
qreal m_radius;
qreal m_opacity;
QPoint m_center;
QBrush m_brush;
};
inline void QtMaterialRipple::setOverlay(QtMaterialRippleOverlay *overlay)
{
m_overlay = overlay;
}
inline qreal QtMaterialRipple::radius() const
{
return m_radius;
}
inline qreal QtMaterialRipple::opacity() const
{
return m_opacity;
}
inline QColor QtMaterialRipple::color() const
{
return m_brush.color();
}
inline QBrush QtMaterialRipple::brush() const
{
return m_brush;
}
inline QPoint QtMaterialRipple::center() const
{
return m_center;
}
inline QPropertyAnimation *QtMaterialRipple::radiusAnimation() const
{
return m_radiusAnimation;
}
inline QPropertyAnimation *QtMaterialRipple::opacityAnimation() const
{
return m_opacityAnimation;
}
inline void QtMaterialRipple::setOpacityStartValue(qreal value)
{
m_opacityAnimation->setStartValue(value);
}
inline void QtMaterialRipple::setOpacityEndValue(qreal value)
{
m_opacityAnimation->setEndValue(value);
}
inline void QtMaterialRipple::setRadiusStartValue(qreal value)
{
m_radiusAnimation->setStartValue(value);
}
inline void QtMaterialRipple::setRadiusEndValue(qreal value)
{
m_radiusAnimation->setEndValue(value);
}
inline void QtMaterialRipple::setDuration(int msecs)
{
m_radiusAnimation->setDuration(msecs);
m_opacityAnimation->setDuration(msecs);
}
#endif // QTMATERIALRIPPLE_H

View File

@ -1,64 +0,0 @@
#ifndef QTMATERIALRIPPLEOVERLAY_H
#define QTMATERIALRIPPLEOVERLAY_H
#include <QPainterPath>
#include "lib/qtmaterialoverlaywidget.h"
class QtMaterialRipple;
class QtMaterialRippleOverlay : public QtMaterialOverlayWidget
{
Q_OBJECT
public:
explicit QtMaterialRippleOverlay(QWidget *parent = 0);
~QtMaterialRippleOverlay();
void addRipple(QtMaterialRipple *ripple);
void addRipple(const QPoint &position, qreal radius = 300);
void removeRipple(QtMaterialRipple *ripple);
inline void setClipping(bool enable);
inline bool hasClipping() const;
inline void setClipPath(const QPainterPath &path);
protected:
void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
inline QList<QtMaterialRipple *> ripples() const;
private:
Q_DISABLE_COPY(QtMaterialRippleOverlay)
void paintRipple(QPainter *painter, QtMaterialRipple *ripple);
QList<QtMaterialRipple *> m_ripples;
QPainterPath m_clipPath;
bool m_useClip;
};
inline void QtMaterialRippleOverlay::setClipping(bool enable)
{
m_useClip = enable;
update();
}
inline bool QtMaterialRippleOverlay::hasClipping() const
{
return m_useClip;
}
inline void QtMaterialRippleOverlay::setClipPath(const QPainterPath &path)
{
m_clipPath = path;
update();
}
inline QList<QtMaterialRipple *> QtMaterialRippleOverlay::ripples() const
{
return m_ripples;
}
#endif // QTMATERIALRIPPLEOVERLAY_H

View File

@ -1,22 +0,0 @@
#ifndef QTMATERIALSTATETRANSITION_H
#define QTMATERIALSTATETRANSITION_H
#include <QAbstractTransition>
#include "lib/qtmaterialstatetransitionevent.h"
class QtMaterialStateTransition : public QAbstractTransition
{
Q_OBJECT
public:
QtMaterialStateTransition(QtMaterialStateTransitionType type);
protected:
virtual bool eventTest(QEvent *event);
virtual void onTransition(QEvent *);
private:
QtMaterialStateTransitionType m_type;
};
#endif // QTMATERIALSTATETRANSITION_H

View File

@ -1,42 +0,0 @@
#ifndef QTMATERIALSTATETRANSITIONEVENT_H
#define QTMATERIALSTATETRANSITIONEVENT_H
#include <QEvent>
enum QtMaterialStateTransitionType {
// Snackbar
SnackbarShowTransition = 1,
SnackbarHideTransition,
SnackbarWaitTransition,
SnackbarNextTransition,
// FlatButton
FlatButtonPressedTransition,
FlatButtonCheckedTransition,
FlatButtonUncheckedTransition,
// CollapsibleMenu
CollapsibleMenuExpand,
CollapsibleMenuCollapse,
// Slider
SliderChangedToMinimum,
SliderChangedFromMinimum,
SliderNoFocusMouseEnter,
SliderNoFocusMouseLeave,
// Dialog
DialogShowTransition,
DialogHideTransition,
//
MaxTransitionType = 65535
};
struct QtMaterialStateTransitionEvent : public QEvent
{
QtMaterialStateTransitionEvent(QtMaterialStateTransitionType type)
: QEvent(QEvent::Type(QEvent::User + 1)),
type(type)
{
}
QtMaterialStateTransitionType type;
};
#endif // QTMATERIALSTATETRANSITIONEVENT_H

View File

@ -1,40 +0,0 @@
#ifndef QTMATERIALSTYLE_H
#define QTMATERIALSTYLE_H
#include <QtWidgets/QCommonStyle>
#include "lib/qtmaterialstyle_p.h"
#define MATERIAL_DISABLE_THEME_COLORS \
if (d->useThemeColors == true) { d->useThemeColors = false; }
class QtMaterialTheme;
class QtMaterialStyle : public QCommonStyle
{
Q_OBJECT
public:
inline static QtMaterialStyle &instance();
void setTheme(QtMaterialTheme *theme);
QColor themeColor(const QString &key) const;
protected:
const QScopedPointer<QtMaterialStylePrivate> d_ptr;
private:
Q_DECLARE_PRIVATE(QtMaterialStyle)
QtMaterialStyle();
QtMaterialStyle(QtMaterialStyle const &);
void operator=(QtMaterialStyle const &);
};
inline QtMaterialStyle &QtMaterialStyle::instance()
{
static QtMaterialStyle instance;
return instance;
}
#endif // QTMATERIALSTYLE_H

View File

@ -1,344 +0,0 @@
#ifndef QTMATERIALTHEME_H
#define QTMATERIALTHEME_H
#include <QObject>
#include <QScopedPointer>
#include <QColor>
#include <QIcon>
namespace Material
{
enum ButtonPreset {
FlatPreset,
CheckablePreset
};
enum RippleStyle {
CenteredRipple,
PositionedRipple,
NoRipple
};
enum OverlayStyle {
NoOverlay,
TintedOverlay,
GrayOverlay
};
enum Role {
Default,
Primary,
Secondary
};
enum ButtonIconPlacement {
LeftIcon,
RightIcon
};
enum ProgressType {
DeterminateProgress,
IndeterminateProgress
};
enum AvatarType {
ImageAvatar,
IconAvatar,
LetterAvatar
};
enum Color {
red50,
red100,
red200,
red300,
red400,
red500,
red600,
red700,
red800,
red900,
redA100,
redA200,
redA400,
redA700,
pink50,
pink100,
pink200,
pink300,
pink400,
pink500,
pink600,
pink700,
pink800,
pink900,
pinkA100,
pinkA200,
pinkA400,
pinkA700,
purple50,
purple100,
purple200,
purple300,
purple400,
purple500,
purple600,
purple700,
purple800,
purple900,
purpleA100,
purpleA200,
purpleA400,
purpleA700,
deepPurple50,
deepPurple100,
deepPurple200,
deepPurple300,
deepPurple400,
deepPurple500,
deepPurple600,
deepPurple700,
deepPurple800,
deepPurple900,
deepPurpleA100,
deepPurpleA200,
deepPurpleA400,
deepPurpleA700,
indigo50,
indigo100,
indigo200,
indigo300,
indigo400,
indigo500,
indigo600,
indigo700,
indigo800,
indigo900,
indigoA100,
indigoA200,
indigoA400,
indigoA700,
blue50,
blue100,
blue200,
blue300,
blue400,
blue500,
blue600,
blue700,
blue800,
blue900,
blueA100,
blueA200,
blueA400,
blueA700,
lightBlue50,
lightBlue100,
lightBlue200,
lightBlue300,
lightBlue400,
lightBlue500,
lightBlue600,
lightBlue700,
lightBlue800,
lightBlue900,
lightBlueA100,
lightBlueA200,
lightBlueA400,
lightBlueA700,
cyan50,
cyan100,
cyan200,
cyan300,
cyan400,
cyan500,
cyan600,
cyan700,
cyan800,
cyan900,
cyanA100,
cyanA200,
cyanA400,
cyanA700,
teal50,
teal100,
teal200,
teal300,
teal400,
teal500,
teal600,
teal700,
teal800,
teal900,
tealA100,
tealA200,
tealA400,
tealA700,
green50,
green100,
green200,
green300,
green400,
green500,
green600,
green700,
green800,
green900,
greenA100,
greenA200,
greenA400,
greenA700,
lightGreen50,
lightGreen100,
lightGreen200,
lightGreen300,
lightGreen400,
lightGreen500,
lightGreen600,
lightGreen700,
lightGreen800,
lightGreen900,
lightGreenA100,
lightGreenA200,
lightGreenA400,
lightGreenA700,
lime50,
lime100,
lime200,
lime300,
lime400,
lime500,
lime600,
lime700,
lime800,
lime900,
limeA100,
limeA200,
limeA400,
limeA700,
yellow50,
yellow100,
yellow200,
yellow300,
yellow400,
yellow500,
yellow600,
yellow700,
yellow800,
yellow900,
yellowA100,
yellowA200,
yellowA400,
yellowA700,
amber50,
amber100,
amber200,
amber300,
amber400,
amber500,
amber600,
amber700,
amber800,
amber900,
amberA100,
amberA200,
amberA400,
amberA700,
orange50,
orange100,
orange200,
orange300,
orange400,
orange500,
orange600,
orange700,
orange800,
orange900,
orangeA100,
orangeA200,
orangeA400,
orangeA700,
deepOrange50,
deepOrange100,
deepOrange200,
deepOrange300,
deepOrange400,
deepOrange500,
deepOrange600,
deepOrange700,
deepOrange800,
deepOrange900,
deepOrangeA100,
deepOrangeA200,
deepOrangeA400,
deepOrangeA700,
brown50,
brown100,
brown200,
brown300,
brown400,
brown500,
brown600,
brown700,
brown800,
brown900,
blueGrey50,
blueGrey100,
blueGrey200,
blueGrey300,
blueGrey400,
blueGrey500,
blueGrey600,
blueGrey700,
blueGrey800,
blueGrey900,
grey50,
grey100,
grey200,
grey300,
grey400,
grey500,
grey600,
grey700,
grey800,
grey900,
black,
white,
transparent,
fullBlack,
darkBlack,
lightBlack,
minBlack,
faintBlack,
fullWhite,
darkWhite,
lightWhite
};
}
class QtMaterialThemePrivate;
class QtMaterialTheme : public QObject
{
Q_OBJECT
public:
explicit QtMaterialTheme(QObject *parent = 0);
~QtMaterialTheme();
QColor getColor(const QString &key) const;
void setColor(const QString &key, const QColor &color);
void setColor(const QString &key, Material::Color color);
static QIcon icon(QString category, QString icon);
protected:
const QScopedPointer<QtMaterialThemePrivate> d_ptr;
private:
Q_DISABLE_COPY(QtMaterialTheme)
Q_DECLARE_PRIVATE(QtMaterialTheme)
};
#endif // QTMATERIALTHEME_H

View File

@ -1,48 +0,0 @@
#ifndef QTMATERIALAPPBAR_H
#define QTMATERIALAPPBAR_H
#include <QtWidgets/QWidget>
#include <QtWidgets/QHBoxLayout>
class QtMaterialAppBarPrivate;
class QtMaterialAppBar : public QWidget
{
Q_OBJECT
Q_PROPERTY(QColor foregroundColor WRITE setForegroundColor READ foregroundColor)
Q_PROPERTY(QColor backgroundColor WRITE setBackgroundColor READ backgroundColor)
public:
explicit QtMaterialAppBar(QWidget *parent = 0);
~QtMaterialAppBar();
QSize sizeHint() const Q_DECL_OVERRIDE;
void setUseThemeColors(bool value);
bool useThemeColors() const;
void setForegroundColor(const QColor &color);
QColor foregroundColor() const;
void setBackgroundColor(const QColor &color);
QColor backgroundColor() const;
inline QHBoxLayout *appBarLayout() const;
protected:
void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
const QScopedPointer<QtMaterialAppBarPrivate> d_ptr;
private:
Q_DISABLE_COPY(QtMaterialAppBar)
Q_DECLARE_PRIVATE(QtMaterialAppBar)
};
inline QHBoxLayout *QtMaterialAppBar::appBarLayout() const
{
return static_cast<QHBoxLayout *>(layout());
}
#endif // QTMATERIALAPPBAR_H

View File

@ -1,33 +0,0 @@
#ifndef QTMATERIALAUTOCOMPLETE_H
#define QTMATERIALAUTOCOMPLETE_H
#include "qtmaterialtextfield.h"
class QtMaterialAutoCompletePrivate;
class QtMaterialAutoComplete : public QtMaterialTextField
{
Q_OBJECT
public:
explicit QtMaterialAutoComplete(QWidget *parent = 0);
~QtMaterialAutoComplete();
void setDataSource(const QStringList &data);
signals:
void itemSelected(QString);
protected slots:
void updateResults(QString text);
protected:
bool event(QEvent *event) Q_DECL_OVERRIDE;
bool eventFilter(QObject *watched, QEvent *event) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QtMaterialAutoComplete)
Q_DECLARE_PRIVATE(QtMaterialAutoComplete)
};
#endif // QTMATERIALAUTOCOMPLETE_H

View File

@ -1,69 +0,0 @@
#include "qtmaterialautocomplete_internal.h"
#include <QSignalTransition>
#include <QPropertyAnimation>
#include <QtWidgets/QGraphicsOpacityEffect>
#include <QDebug>
/*!
* \class QtMaterialAutoCompleteStateMachine
* \internal
*/
/*!
* \internal
*/
QtMaterialAutoCompleteStateMachine::QtMaterialAutoCompleteStateMachine(QWidget *menu)
: QStateMachine(menu),
m_menu(menu),
m_closedState(new QState),
m_openState(new QState),
m_closingState(new QState)
{
Q_ASSERT(menu);
addState(m_closedState);
addState(m_openState);
addState(m_closingState);
setInitialState(m_closedState);
QSignalTransition *transition;
transition = new QSignalTransition(this, SIGNAL(shouldOpen()));
transition->setTargetState(m_openState);
m_closedState->addTransition(transition);
transition = new QSignalTransition(this, SIGNAL(shouldClose()));
transition->setTargetState(m_closedState);
m_openState->addTransition(transition);
transition = new QSignalTransition(this, SIGNAL(shouldFade()));
transition->setTargetState(m_closingState);
m_openState->addTransition(transition);
m_closedState->assignProperty(menu, "visible", false);
m_openState->assignProperty(menu, "visible", true);
QGraphicsOpacityEffect *effect = new QGraphicsOpacityEffect;
menu->setGraphicsEffect(effect);
m_openState->assignProperty(effect, "opacity", 1);
m_closingState->assignProperty(effect, "opacity", 0);
m_closedState->assignProperty(effect, "opacity", 0);
QPropertyAnimation *animation;
animation = new QPropertyAnimation(effect, "opacity", this);
animation->setDuration(240);
addDefaultAnimation(animation);
transition = new QSignalTransition(animation, SIGNAL(finished()));
transition->setTargetState(m_closedState);
m_closingState->addTransition(transition);
}
/*!
* \internal
*/
QtMaterialAutoCompleteStateMachine::~QtMaterialAutoCompleteStateMachine()
{
}

View File

@ -1,30 +0,0 @@
#ifndef QTMATERIALAUTOCOMPLETE_P_H
#define QTMATERIALAUTOCOMPLETE_P_H
#include "qtmaterialtextfield_p.h"
class QWidget;
class QVBoxLayout;
class QtMaterialAutoCompleteOverlay;
class QtMaterialAutoCompleteStateMachine;
class QtMaterialAutoCompletePrivate : public QtMaterialTextFieldPrivate
{
Q_DISABLE_COPY(QtMaterialAutoCompletePrivate)
Q_DECLARE_PUBLIC(QtMaterialAutoComplete)
public:
QtMaterialAutoCompletePrivate(QtMaterialAutoComplete *q);
virtual ~QtMaterialAutoCompletePrivate();
void init();
QWidget *menu;
QWidget *frame;
QtMaterialAutoCompleteStateMachine *stateMachine;
QVBoxLayout *menuLayout;
QStringList dataSource;
int maxWidth;
};
#endif // QTMATERIALAUTOCOMPLETE_P_H

View File

@ -1,50 +0,0 @@
#ifndef QTMATERIALAVATAR_H
#define QTMATERIALAVATAR_H
#include <QtWidgets/QWidget>
#include "lib/qtmaterialtheme.h"
class QtMaterialAvatarPrivate;
class QtMaterialAvatar : public QWidget
{
Q_OBJECT
public:
explicit QtMaterialAvatar(QWidget *parent = 0);
explicit QtMaterialAvatar(const QIcon &icon, QWidget *parent = 0);
explicit QtMaterialAvatar(const QChar &letter, QWidget *parent = 0);
explicit QtMaterialAvatar(const QImage &image, QWidget *parent = 0);
~QtMaterialAvatar();
void setUseThemeColors(bool value);
bool useThemeColors() const;
void setTextColor(const QColor &color);
QColor textColor() const;
void setBackgroundColor(const QColor &color);
QColor backgroundColor() const;
QSize sizeHint() const Q_DECL_OVERRIDE;
void setSize(int size);
int size() const;
void setLetter(const QChar &letter);
void setImage(const QImage &image);
void setIcon(const QIcon &icon);
Material::AvatarType type() const;
protected:
void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
const QScopedPointer<QtMaterialAvatarPrivate> d_ptr;
private:
Q_DISABLE_COPY(QtMaterialAvatar)
Q_DECLARE_PRIVATE(QtMaterialAvatar)
};
#endif // QTMATERIALAVATAR_H

View File

@ -1,61 +0,0 @@
#ifndef QTMATERIALBADGE_H
#define QTMATERIALBADGE_H
#include "lib/qtmaterialoverlaywidget.h"
class QtMaterialBadgePrivate;
class QtMaterialBadge : public QtMaterialOverlayWidget
{
Q_OBJECT
Q_PROPERTY(QColor textColor WRITE setTextColor READ textColor)
Q_PROPERTY(QColor backgroundColor WRITE setBackgroundColor READ backgroundColor)
Q_PROPERTY(QPointF relativePosition WRITE setRelativePosition READ relativePosition)
public:
explicit QtMaterialBadge(QWidget *parent = 0);
explicit QtMaterialBadge(const QIcon &icon, QWidget *parent = 0);
explicit QtMaterialBadge(const QString &text, QWidget *parent = 0);
~QtMaterialBadge();
void setUseThemeColors(bool value);
bool useThemeColors() const;
void setTextColor(const QColor &color);
QColor textColor() const;
void setBackgroundColor(const QColor &color);
QColor backgroundColor() const;
void setRelativePosition(const QPointF &pos);
void setRelativePosition(qreal x, qreal y);
QPointF relativePosition() const;
void setRelativeXPosition(qreal x);
qreal relativeXPosition() const;
void setRelativeYPosition(qreal y);
qreal relativeYPosition() const;
QSize sizeHint() const Q_DECL_OVERRIDE;
void setIcon(const QIcon &icon);
QIcon icon() const;
void setText(const QString &text);
QString text() const;
protected:
void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
int getDiameter() const;
const QScopedPointer<QtMaterialBadgePrivate> d_ptr;
private:
Q_DISABLE_COPY(QtMaterialBadge)
Q_DECLARE_PRIVATE(QtMaterialBadge)
};
#endif // QTMATERIALBADGE_H

View File

@ -1,167 +0,0 @@
#include "qtmaterialdialog.h"
#include "qtmaterialdialog_p.h"
#include <QtWidgets/QStackedLayout>
#include <QtWidgets/QGraphicsDropShadowEffect>
#include <QStateMachine>
#include <QState>
#include <QtWidgets/QApplication>
#include <QPropertyAnimation>
#include <QPainter>
#include "qtmaterialdialog_internal.h"
#include "lib/qtmaterialstatetransition.h"
/*!
* \class QtMaterialDialogPrivate
* \internal
*/
QtMaterialDialogPrivate::QtMaterialDialogPrivate(QtMaterialDialog *q)
: q_ptr(q)
{
}
QtMaterialDialogPrivate::~QtMaterialDialogPrivate()
{
}
void QtMaterialDialogPrivate::init()
{
Q_Q(QtMaterialDialog);
dialogWindow = new QtMaterialDialogWindow(q);
proxyStack = new QStackedLayout;
stateMachine = new QStateMachine(q);
proxy = new QtMaterialDialogProxy(dialogWindow, proxyStack, q);
QVBoxLayout *layout = new QVBoxLayout;
q->setLayout(layout);
QWidget *widget = new QWidget;
widget->setLayout(proxyStack);
widget->setMinimumWidth(400);
QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect;
effect->setColor(QColor(0, 0, 0, 200));
effect->setBlurRadius(64);
effect->setOffset(0, 13);
widget->setGraphicsEffect(effect);
layout->addWidget(widget);
layout->setAlignment(widget, Qt::AlignCenter);
proxyStack->addWidget(dialogWindow);
proxyStack->addWidget(proxy);
proxyStack->setCurrentIndex(1);
q->setAttribute(Qt::WA_TransparentForMouseEvents);
QState *hiddenState = new QState;
QState *visibleState = new QState;
stateMachine->addState(hiddenState);
stateMachine->addState(visibleState);
stateMachine->setInitialState(hiddenState);
QtMaterialStateTransition *transition;
transition = new QtMaterialStateTransition(DialogShowTransition);
transition->setTargetState(visibleState);
hiddenState->addTransition(transition);
transition = new QtMaterialStateTransition(DialogHideTransition);
transition->setTargetState(hiddenState);
visibleState->addTransition(transition);
visibleState->assignProperty(proxy, "opacity", 1);
visibleState->assignProperty(effect, "color", QColor(0, 0, 0, 200));
visibleState->assignProperty(dialogWindow, "offset", 0);
hiddenState->assignProperty(proxy, "opacity", 0);
hiddenState->assignProperty(effect, "color", QColor(0, 0, 0, 0));
hiddenState->assignProperty(dialogWindow, "offset", 200);
QPropertyAnimation *animation;
animation = new QPropertyAnimation(proxy, "opacity", q);
animation->setDuration(280);
stateMachine->addDefaultAnimation(animation);
animation = new QPropertyAnimation(effect, "color", q);
animation->setDuration(280);
stateMachine->addDefaultAnimation(animation);
animation = new QPropertyAnimation(dialogWindow, "offset", q);
animation->setDuration(280);
animation->setEasingCurve(QEasingCurve::OutCirc);
stateMachine->addDefaultAnimation(animation);
QObject::connect(visibleState, SIGNAL(propertiesAssigned()),
proxy, SLOT(makeOpaque()));
QObject::connect(hiddenState, SIGNAL(propertiesAssigned()),
proxy, SLOT(makeTransparent()));
stateMachine->start();
QCoreApplication::processEvents();
}
/*!
* \class QtMaterialDialog
*/
QtMaterialDialog::QtMaterialDialog(QWidget *parent)
: QtMaterialOverlayWidget(parent),
d_ptr(new QtMaterialDialogPrivate(this))
{
d_func()->init();
}
QtMaterialDialog::~QtMaterialDialog()
{
}
QLayout *QtMaterialDialog::windowLayout() const
{
Q_D(const QtMaterialDialog);
return d->dialogWindow->layout();
}
void QtMaterialDialog::setWindowLayout(QLayout *layout)
{
Q_D(QtMaterialDialog);
d->dialogWindow->setLayout(layout);
}
void QtMaterialDialog::showDialog()
{
Q_D(QtMaterialDialog);
d->stateMachine->postEvent(new QtMaterialStateTransitionEvent(DialogShowTransition));
raise();
}
void QtMaterialDialog::hideDialog()
{
Q_D(QtMaterialDialog);
d->stateMachine->postEvent(new QtMaterialStateTransitionEvent(DialogHideTransition));
setAttribute(Qt::WA_TransparentForMouseEvents);
d->proxyStack->setCurrentIndex(1);
}
void QtMaterialDialog::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event)
Q_D(QtMaterialDialog);
QPainter painter(this);
QBrush brush;
brush.setStyle(Qt::SolidPattern);
brush.setColor(Qt::black);
painter.setBrush(brush);
painter.setPen(Qt::NoPen);
painter.setOpacity(d->proxy->opacity()/2.4);
painter.drawRect(rect());
}

View File

@ -1,27 +0,0 @@
#ifndef QTMATERIALRAISEDBUTTON_H
#define QTMATERIALRAISEDBUTTON_H
#include "qtmaterialflatbutton.h"
class QtMaterialRaisedButtonPrivate;
class QtMaterialRaisedButton : public QtMaterialFlatButton
{
Q_OBJECT
public:
explicit QtMaterialRaisedButton(QWidget *parent = 0);
explicit QtMaterialRaisedButton(const QString &text, QWidget *parent = 0);
~QtMaterialRaisedButton();
protected:
QtMaterialRaisedButton(QtMaterialRaisedButtonPrivate &d, QWidget *parent = 0);
bool event(QEvent *event) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QtMaterialRaisedButton)
Q_DECLARE_PRIVATE(QtMaterialRaisedButton)
};
#endif // QTMATERIALRAISEDBUTTON_H

View File

@ -1,58 +0,0 @@
#ifndef QTMATERIALTABS_H
#define QTMATERIALTABS_H
#include <QtWidgets/QWidget>
#include <QIcon>
#include "lib/qtmaterialtheme.h"
class QtMaterialTabsPrivate;
class QtMaterialTab;
class QtMaterialTabs : public QWidget
{
Q_OBJECT
public:
explicit QtMaterialTabs(QWidget *parent = 0);
~QtMaterialTabs();
void setUseThemeColors(bool value);
bool useThemeColors() const;
void setHaloVisible(bool value);
bool isHaloVisible() const;
void setRippleStyle(Material::RippleStyle style);
Material::RippleStyle rippleStyle() const;
void setInkColor(const QColor &color);
QColor inkColor() const;
void setBackgroundColor(const QColor &color);
QColor backgroundColor() const;
void setTextColor(const QColor &color);
QColor textColor() const;
void addTab(const QString &text, const QIcon &icon = QIcon());
void setCurrentTab(QtMaterialTab *tab);
void setCurrentTab(int index);
int currentIndex() const;
signals:
void currentChanged(int);
protected:
void setTabActive(int index, bool active = true);
void updateTabs();
const QScopedPointer<QtMaterialTabsPrivate> d_ptr;
private:
Q_DISABLE_COPY(QtMaterialTabs)
Q_DECLARE_PRIVATE(QtMaterialTabs)
};
#endif // QTMATERIALTABS_H

72
example/CMakeLists.txt Normal file
View File

@ -0,0 +1,72 @@
cmake_minimum_required(VERSION 3.14)
project(qt-material-widgetsExamples CXX)
include(project-is-top-level)
include(folders)
if(PROJECT_IS_TOP_LEVEL)
find_package(qt-material-widgets REQUIRED)
endif()
if(NOT Qt6_FOUND)
qt5_add_resources(
example_style_res
${CMAKE_CURRENT_SOURCE_DIR}/examples.qrc
)
else()
qt_add_resources(
example_style_res
${CMAKE_CURRENT_SOURCE_DIR}/source/examples.qrc
)
endif()
add_custom_target(run-examples)
function(add_example NAME)
add_executable("${NAME}"
${example_style_res}
appbarsettingseditor.cpp
autocompletesettingseditor.cpp
avatarsettingseditor.cpp
badgesettingseditor.cpp
checkboxsettingseditor.cpp
circularprogresssettingseditor.cpp
dialogsettingseditor.cpp
drawersettingseditor.cpp
fabsettingseditor.cpp
flatbuttonsettingseditor.cpp
iconbuttonsettingseditor.cpp
main.cpp
mainwindow.cpp
menusettingseditor.cpp
progresssettingseditor.cpp
radiobuttonsettingseditor.cpp
raisedbuttonsettingseditor.cpp
scrollbarsettingseditor.cpp
slidersettingseditor.cpp
snackbarsettingseditor.cpp
tabssettingseditor.cpp
textfieldsettingseditor.cpp
togglesettingseditor.cpp
)
target_link_libraries(
"${NAME}"
PRIVATE
qt-material-widgets::qt-material-widgets
)
target_compile_features("${NAME}" PRIVATE cxx_std_11)
add_custom_target("run_${NAME}" COMMAND "${NAME}" VERBATIM)
add_dependencies("run_${NAME}" "${NAME}")
add_dependencies(run-examples "run_${NAME}")
endfunction()
add_example(qt-material-widgets-example)
target_include_directories(qt-material-widgets-example PRIVATE
"$<BUILD_INTERFACE:${PROJECT_ROOT_DIR}/include/qt-material-widgets>"
"$<BUILD_INTERFACE:${PROJECT_ROOT_DIR}/include/qt-material-widgets/component>"
"$<BUILD_INTERFACE:${PROJECT_ROOT_DIR}/include/qt-material-widgets/lib>"
)
add_folders(Example)

View File

Before

Width:  |  Height:  |  Size: 219 B

After

Width:  |  Height:  |  Size: 219 B

View File

Before

Width:  |  Height:  |  Size: 125 KiB

After

Width:  |  Height:  |  Size: 125 KiB

View File

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

17
example/main.cpp Normal file
View File

@ -0,0 +1,17 @@
#include <QDebug>
#include <QtWidgets/QApplication>
#include "mainwindow.h"
int main(int argc, char* argv[])
{
QApplication a(argc, argv);
Q_INIT_RESOURCE(qt_material_widgets);
MainWindow window;
window.show();
return a.exec();
}

Some files were not shown because too many files have changed in this diff Show More