From e07e49873c7269df34589893dca70fae1844853e Mon Sep 17 00:00:00 2001 From: Christian Heimlich Date: Sun, 3 Dec 2023 17:28:24 -0500 Subject: [PATCH 1/5] Pass by const ref in ApplicationLogger record functions --- lib/io/include/qx/io/qx-applicationlogger.h | 6 +++--- lib/io/src/qx-applicationlogger.cpp | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/io/include/qx/io/qx-applicationlogger.h b/lib/io/include/qx/io/qx-applicationlogger.h index 4e7295eb..4075c0d4 100644 --- a/lib/io/include/qx/io/qx-applicationlogger.h +++ b/lib/io/include/qx/io/qx-applicationlogger.h @@ -73,9 +73,9 @@ class QX_IO_EXPORT ApplicationLogger // Operate IoOpReport openLog(); - IoOpReport recordVerbatim(QString text); - IoOpReport recordErrorEvent(QString src, Error error); - IoOpReport recordGeneralEvent(QString src, QString event); + IoOpReport recordVerbatim(const QString& text); + IoOpReport recordErrorEvent(const QString& src, const Error& error); + IoOpReport recordGeneralEvent(const QString& src, const QString& event); IoOpReport finish(int returnCode); // Status diff --git a/lib/io/src/qx-applicationlogger.cpp b/lib/io/src/qx-applicationlogger.cpp index e2c2ecf8..cfcd5685 100644 --- a/lib/io/src/qx-applicationlogger.cpp +++ b/lib/io/src/qx-applicationlogger.cpp @@ -253,7 +253,7 @@ IoOpReport ApplicationLogger::openLog() * * @sa recordGeneralEvent(), and recordErrorEvent(). */ -IoOpReport ApplicationLogger::recordVerbatim(QString text) +IoOpReport ApplicationLogger::recordVerbatim(const QString& text) { if(!mErrorStatus.isFailure()) mErrorStatus = mTextStreamWriter.writeLine(text); @@ -269,7 +269,7 @@ IoOpReport ApplicationLogger::recordVerbatim(QString text) * * @sa recordGeneralEvent(). */ -IoOpReport ApplicationLogger::recordErrorEvent(QString src, Error error) +IoOpReport ApplicationLogger::recordErrorEvent(const QString& src, const Error& error) { if(!mErrorStatus.isFailure()) { @@ -294,7 +294,7 @@ IoOpReport ApplicationLogger::recordErrorEvent(QString src, Error error) * * @sa recordErrorEvent(). */ -IoOpReport ApplicationLogger::recordGeneralEvent(QString src, QString event) +IoOpReport ApplicationLogger::recordGeneralEvent(const QString& src, const QString& event) { if(!mErrorStatus.isFailure()) mErrorStatus = mTextStreamWriter.writeLine(EVENT_TEMPLATE.arg(QTime::currentTime().toString(), src, event)); From e83f18d873039df5af47f567458ae5e42ee8ea23 Mon Sep 17 00:00:00 2001 From: Christian Heimlich Date: Sun, 3 Dec 2023 18:07:18 -0500 Subject: [PATCH 2/5] Fix component documentation section Doxygen modules were renamed to topics to avoid confusion with C++20 modules. --- doc/cmake/file_templates/mainpage.md.in | 2 +- doc/res/DoxygenLayout.xml | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/doc/cmake/file_templates/mainpage.md.in b/doc/cmake/file_templates/mainpage.md.in index b24d41f1..cd3a0cd8 100644 --- a/doc/cmake/file_templates/mainpage.md.in +++ b/doc/cmake/file_templates/mainpage.md.in @@ -18,7 +18,7 @@ Packaging ---------- Qx is provided as a CMake package containing several component libraries that roughly follow the scope and grouping of Qt modules, with Core being the primary component. -See the [Components Index](modules.html) for a list of available components (**NOTE**: Some of these are platform dependent). +See the [Components Index](topics.html) for a list of available components (**NOTE**: Some of these are platform dependent). When importing the library package with CMake it is recommended to only include the components you need for a particular application in order to minimize the size of your build. diff --git a/doc/res/DoxygenLayout.xml b/doc/res/DoxygenLayout.xml index 2b5c99b1..a0602f76 100644 --- a/doc/res/DoxygenLayout.xml +++ b/doc/res/DoxygenLayout.xml @@ -5,7 +5,11 @@ - + + + + + From cee0fb0481b08d2586098aa2da0f70e1d39608ef Mon Sep 17 00:00:00 2001 From: Christian Heimlich Date: Mon, 4 Dec 2023 14:10:42 -0500 Subject: [PATCH 3/5] Update Doxygen theme --- .../doxygen-awesome-darkmode-toggle.js | 2 +- .../doxygen-awesome-fragment-copy-button.js | 2 +- .../doxygen-awesome-paragraph-link.js | 2 +- ...n-awesome-sidebar-only-darkmode-toggle.css | 2 +- .../doxygen-awesome-sidebar-only.css | 3 +- .../theme/doxygen-awesome/doxygen-awesome.css | 386 +++++++++++++++--- 6 files changed, 331 insertions(+), 66 deletions(-) diff --git a/doc/res/theme/doxygen-awesome/doxygen-awesome-darkmode-toggle.js b/doc/res/theme/doxygen-awesome/doxygen-awesome-darkmode-toggle.js index f2c5853f..40fe2d38 100644 --- a/doc/res/theme/doxygen-awesome/doxygen-awesome-darkmode-toggle.js +++ b/doc/res/theme/doxygen-awesome/doxygen-awesome-darkmode-toggle.js @@ -5,7 +5,7 @@ https://github.com/jothepro/doxygen-awesome-css MIT License -Copyright (c) 2021 - 2022 jothepro +Copyright (c) 2021 - 2023 jothepro Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/doc/res/theme/doxygen-awesome/doxygen-awesome-fragment-copy-button.js b/doc/res/theme/doxygen-awesome/doxygen-awesome-fragment-copy-button.js index 7d06b348..86c16fd9 100644 --- a/doc/res/theme/doxygen-awesome/doxygen-awesome-fragment-copy-button.js +++ b/doc/res/theme/doxygen-awesome/doxygen-awesome-fragment-copy-button.js @@ -5,7 +5,7 @@ https://github.com/jothepro/doxygen-awesome-css MIT License -Copyright (c) 2022 jothepro +Copyright (c) 2022 - 2023 jothepro Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/doc/res/theme/doxygen-awesome/doxygen-awesome-paragraph-link.js b/doc/res/theme/doxygen-awesome/doxygen-awesome-paragraph-link.js index 6424dbd4..e53d132c 100644 --- a/doc/res/theme/doxygen-awesome/doxygen-awesome-paragraph-link.js +++ b/doc/res/theme/doxygen-awesome/doxygen-awesome-paragraph-link.js @@ -5,7 +5,7 @@ https://github.com/jothepro/doxygen-awesome-css MIT License -Copyright (c) 2022 jothepro +Copyright (c) 2022 - 2023 jothepro Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/doc/res/theme/doxygen-awesome/doxygen-awesome-sidebar-only-darkmode-toggle.css b/doc/res/theme/doxygen-awesome/doxygen-awesome-sidebar-only-darkmode-toggle.css index b988b6f0..d207446e 100644 --- a/doc/res/theme/doxygen-awesome/doxygen-awesome-sidebar-only-darkmode-toggle.css +++ b/doc/res/theme/doxygen-awesome/doxygen-awesome-sidebar-only-darkmode-toggle.css @@ -6,7 +6,7 @@ https://github.com/jothepro/doxygen-awesome-css MIT License -Copyright (c) 2021 jothepro +Copyright (c) 2021 - 2023 jothepro Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/doc/res/theme/doxygen-awesome/doxygen-awesome-sidebar-only.css b/doc/res/theme/doxygen-awesome/doxygen-awesome-sidebar-only.css index 656ebbf4..853f6d69 100644 --- a/doc/res/theme/doxygen-awesome/doxygen-awesome-sidebar-only.css +++ b/doc/res/theme/doxygen-awesome/doxygen-awesome-sidebar-only.css @@ -5,7 +5,7 @@ https://github.com/jothepro/doxygen-awesome-css MIT License -Copyright (c) 2021 jothepro +Copyright (c) 2021 - 2023 jothepro Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -81,6 +81,7 @@ html { .ui-resizable-handle { cursor: default; width: 1px !important; + background: var(--separator-color); box-shadow: 0 calc(-2 * var(--top-height)) 0 0 var(--separator-color); } diff --git a/doc/res/theme/doxygen-awesome/doxygen-awesome.css b/doc/res/theme/doxygen-awesome/doxygen-awesome.css index abd2893c..ac7f0608 100644 --- a/doc/res/theme/doxygen-awesome/doxygen-awesome.css +++ b/doc/res/theme/doxygen-awesome/doxygen-awesome.css @@ -5,7 +5,7 @@ https://github.com/jothepro/doxygen-awesome-css MIT License -Copyright (c) 2021 - 2022 jothepro +Copyright (c) 2021 - 2023 jothepro Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -80,21 +80,21 @@ html { --toc-max-height: calc(100vh - 2 * var(--spacing-medium) - 85px); /* colors for various content boxes: @warning, @note, @deprecated @bug */ - --warning-color: #f8d1cc; - --warning-color-dark: #b61825; - --warning-color-darker: #75070f; - --note-color: #faf3d8; - --note-color-dark: #f3a600; - --note-color-darker: #5f4204; - --todo-color: #e4f3ff; - --todo-color-dark: #1879C4; - --todo-color-darker: #274a5c; + --warning-color: #faf3d8; + --warning-color-dark: #f3a600; + --warning-color-darker: #5f4204; + --note-color: #e4f3ff; + --note-color-dark: #1879C4; + --note-color-darker: #274a5c; + --todo-color: #e4dafd; + --todo-color-dark: #5b2bdd; + --todo-color-darker: #2a0d72; --deprecated-color: #ecf0f3; --deprecated-color-dark: #5b6269; --deprecated-color-darker: #43454a; - --bug-color: #e4dafd; - --bug-color-dark: #5b2bdd; - --bug-color-darker: #2a0d72; + --bug-color: #f8d1cc; + --bug-color-dark: #b61825; + --bug-color-darker: #75070f; --invariant-color: #d8f1e3; --invariant-color-dark: #44b86f; --invariant-color-darker: #265532; @@ -160,7 +160,7 @@ html { --toc-background: var(--side-nav-background); --toc-foreground: var(--side-nav-foreground); - /* height of an item in any tree / collapsable table */ + /* height of an item in any tree / collapsible table */ --tree-item-height: 30px; --memname-font-size: var(--code-font-size); @@ -169,6 +169,8 @@ html { --webkit-scrollbar-size: 7px; --webkit-scrollbar-padding: 4px; --webkit-scrollbar-color: var(--separator-color); + + --animation-duration: .12s } @media screen and (max-width: 767px) { @@ -208,21 +210,21 @@ html { --blockquote-background: #222325; --blockquote-foreground: #7e8c92; - --warning-color: #2e1917; - --warning-color-dark: #ad2617; - --warning-color-darker: #f5b1aa; - --note-color: #3b2e04; - --note-color-dark: #f1b602; - --note-color-darker: #ceb670; - --todo-color: #163750; - --todo-color-dark: #1982D2; - --todo-color-darker: #dcf0fa; + --warning-color: #3b2e04; + --warning-color-dark: #f1b602; + --warning-color-darker: #ceb670; + --note-color: #163750; + --note-color-dark: #1982D2; + --note-color-darker: #dcf0fa; + --todo-color: #2a2536; + --todo-color-dark: #7661b3; + --todo-color-darker: #ae9ed6; --deprecated-color: #2e323b; --deprecated-color-dark: #738396; --deprecated-color-darker: #abb0bd; - --bug-color: #2a2536; - --bug-color-dark: #7661b3; - --bug-color-darker: #ae9ed6; + --bug-color: #2e1917; + --bug-color-dark: #ad2617; + --bug-color-darker: #f5b1aa; --invariant-color: #303a35; --invariant-color-dark: #76ce96; --invariant-color-darker: #cceed5; @@ -269,21 +271,21 @@ html.dark-mode { --blockquote-background: #222325; --blockquote-foreground: #7e8c92; - --warning-color: #2e1917; - --warning-color-dark: #ad2617; - --warning-color-darker: #f5b1aa; - --note-color: #3b2e04; - --note-color-dark: #f1b602; - --note-color-darker: #ceb670; - --todo-color: #163750; - --todo-color-dark: #1982D2; - --todo-color-darker: #dcf0fa; + --warning-color: #3b2e04; + --warning-color-dark: #f1b602; + --warning-color-darker: #ceb670; + --note-color: #163750; + --note-color-dark: #1982D2; + --note-color-darker: #dcf0fa; + --todo-color: #2a2536; + --todo-color-dark: #7661b3; + --todo-color-darker: #ae9ed6; --deprecated-color: #2e323b; --deprecated-color-dark: #738396; --deprecated-color-darker: #abb0bd; - --bug-color: #2a2536; - --bug-color-dark: #7661b3; - --bug-color-darker: #ae9ed6; + --bug-color: #2e1917; + --bug-color-dark: #ad2617; + --bug-color-darker: #f5b1aa; --invariant-color: #303a35; --invariant-color-dark: #76ce96; --invariant-color-darker: #cceed5; @@ -316,7 +318,7 @@ body, table, div, p, dl, #nav-tree .label, .title, } h1, h2, h3, h4, h5 { - margin-top: .9em; + margin-top: 1em; font-weight: 600; line-height: initial; } @@ -776,6 +778,8 @@ html.dark-mode iframe#MSearchResults { #side-nav { padding: 0 !important; background: var(--side-nav-background); + min-width: 8px; + max-width: 50vw; } @media screen and (max-width: 767px) { @@ -790,6 +794,7 @@ html.dark-mode iframe#MSearchResults { #nav-tree { background: transparent; + margin-right: 1px; } #nav-tree .label { @@ -862,8 +867,9 @@ html.dark-mode iframe#MSearchResults { } .ui-resizable-e { - background: var(--separator-color); - width: 1px; + width: 4px; + background: transparent; + box-shadow: inset -1px 0 0 0 var(--separator-color); } /* @@ -956,8 +962,9 @@ div.contents div.dyncontent { html:not(.light-mode) div.contents > table img, html:not(.light-mode) div.contents div.dyncontent iframe, html:not(.light-mode) div.contents center iframe, - html:not(.light-mode) div.contents table iframe { - filter: hue-rotate(180deg) invert(); + html:not(.light-mode) div.contents table iframe, + html:not(.light-mode) div.contents .dotgraph iframe { + filter: brightness(89%) hue-rotate(180deg) invert(); } } @@ -966,8 +973,10 @@ html.dark-mode div.contents center img, html.dark-mode div.contents > table img, html.dark-mode div.contents div.dyncontent iframe, html.dark-mode div.contents center iframe, -html.dark-mode div.contents table iframe { - filter: hue-rotate(180deg) invert(); +html.dark-mode div.contents table iframe, +html.dark-mode div.contents .dotgraph iframe + { + filter: brightness(89%) hue-rotate(180deg) invert(); } h2.groupheader { @@ -1056,6 +1065,21 @@ h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { color: var(--page-foreground-color); } +.dotgraph { + max-width: 100%; + overflow-x: scroll; +} + +.dotgraph .caption { + position: sticky; + left: 0; +} + +/* Wrap Graphviz graphs with the `interactive_dotgraph` class if `INTERACTIVE_SVG = YES` */ +.interactive_dotgraph .dotgraph iframe { + max-width: 100%; +} + /* Table of Contents */ @@ -1152,7 +1176,7 @@ div.toc li a.aboveActive { margin-right: var(--spacing-small); margin-bottom: calc(var(--navigation-font-size) / 4); transform: rotate(-90deg); - transition: transform 0.25s ease-out; + transition: transform var(--animation-duration) ease-out; } div.contents .toc.interactive.open > h3::before { @@ -1209,9 +1233,13 @@ div.fragment, pre.fragment { .contents > div.fragment, .textblock > div.fragment, .textblock > pre.fragment, + .textblock > .tabbed > ul > li > div.fragment, + .textblock > .tabbed > ul > li > pre.fragment, .contents > .doxygen-awesome-fragment-wrapper > div.fragment, .textblock > .doxygen-awesome-fragment-wrapper > div.fragment, - .textblock > .doxygen-awesome-fragment-wrapper > pre.fragment { + .textblock > .doxygen-awesome-fragment-wrapper > pre.fragment, + .textblock > .tabbed > ul > li > .doxygen-awesome-fragment-wrapper > div.fragment, + .textblock > .tabbed > ul > li > .doxygen-awesome-fragment-wrapper > pre.fragment { margin: var(--spacing-medium) calc(0px - var(--spacing-large)); border-radius: 0; border-left: 0; @@ -1301,8 +1329,9 @@ div.fragment span.lineno a { color: var(--fragment-link) !important; } -div.fragment .line:first-child .lineno { +div.fragment > .line:first-child .lineno { box-shadow: -999999px 0px 0 999999px var(--fragment-linenumber-background), -999998px 0px 0 999999px var(--fragment-linenumber-border); + background-color: var(--fragment-linenumber-background) !important; } div.line { @@ -1322,7 +1351,7 @@ dl.bug dt a, dl.deprecated dt a, dl.todo dt a { font-weight: bold !important; } -dl.warning, dl.attention, dl.note, dl.deprecated, dl.bug, dl.invariant, dl.pre, dl.todo, dl.remark { +dl.warning, dl.attention, dl.note, dl.deprecated, dl.bug, dl.invariant, dl.pre, dl.post, dl.todo, dl.remark { padding: var(--spacing-medium); margin: var(--spacing-medium) 0; color: var(--page-background-color); @@ -1361,8 +1390,8 @@ dl.todo { color: var(--todo-color-darker); } -dl.todo dt { - color: var(--todo-color-dark); +dl.todo dt a { + color: var(--todo-color-dark) !important; } dl.bug dt a { @@ -1393,13 +1422,13 @@ dl.section dd, dl.bug dd, dl.deprecated dd, dl.todo dd { margin-inline-start: 0px; } -dl.invariant, dl.pre { +dl.invariant, dl.pre, dl.post { background: var(--invariant-color); border-left: 8px solid var(--invariant-color-dark); color: var(--invariant-color-darker); } -dl.invariant dt, dl.pre dt { +dl.invariant dt, dl.pre dt, dl.post dt { color: var(--invariant-color-dark); } @@ -1603,6 +1632,10 @@ table.doxtable tbody { border-radius: var(--border-radius-small); } +table.markdownTable, table.doxtable, table.fieldtable { + padding: 1px; +} + table.doxtable caption { display: block; } @@ -1693,6 +1726,15 @@ table.markdownTable tr:last-child, table.doxtable tr:last-child { border-bottom: none; } +.full_width_table table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) { + display: block; +} + +.full_width_table table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody { + display: table; + width: 100%; +} + table.fieldtable th { font-size: var(--page-font-size); font-weight: 600; @@ -1831,7 +1873,7 @@ div.dynheader img[src="closed.png"] { display: block; float: left; margin-left: -10px; - transition: transform 0.25s ease-out; + transition: transform var(--animation-duration) ease-out; } table.memberdecls img { @@ -2195,7 +2237,9 @@ div.memproto::-webkit-scrollbar, .contents center::-webkit-scrollbar, .contents .center::-webkit-scrollbar, .contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar, -div.contents .toc::-webkit-scrollbar { +div.contents .toc::-webkit-scrollbar, +.contents .dotgraph::-webkit-scrollbar, +.contents .tabs-overview-container::-webkit-scrollbar { background: transparent; width: calc(var(--webkit-scrollbar-size) + var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); height: calc(var(--webkit-scrollbar-size) + var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); @@ -2208,7 +2252,9 @@ div.memproto::-webkit-scrollbar-thumb, .contents center::-webkit-scrollbar-thumb, .contents .center::-webkit-scrollbar-thumb, .contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar-thumb, -div.contents .toc::-webkit-scrollbar-thumb { +div.contents .toc::-webkit-scrollbar-thumb, +.contents .dotgraph::-webkit-scrollbar-thumb, +.contents .tabs-overview-container::-webkit-scrollbar-thumb { background-color: transparent; border: var(--webkit-scrollbar-padding) solid transparent; border-radius: calc(var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); @@ -2222,7 +2268,9 @@ div.memproto:hover::-webkit-scrollbar-thumb, .contents center:hover::-webkit-scrollbar-thumb, .contents .center:hover::-webkit-scrollbar-thumb, .contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody:hover::-webkit-scrollbar-thumb, -div.contents .toc:hover::-webkit-scrollbar-thumb { +div.contents .toc:hover::-webkit-scrollbar-thumb, +.contents .dotgraph:hover::-webkit-scrollbar-thumb, +.contents .tabs-overview-container:hover::-webkit-scrollbar-thumb { background-color: var(--webkit-scrollbar-color); } @@ -2233,7 +2281,9 @@ div.memproto::-webkit-scrollbar-track, .contents center::-webkit-scrollbar-track, .contents .center::-webkit-scrollbar-track, .contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar-track, -div.contents .toc::-webkit-scrollbar-track { +div.contents .toc::-webkit-scrollbar-track, +.contents .dotgraph::-webkit-scrollbar-track, +.contents .tabs-overview-container::-webkit-scrollbar-track { background: transparent; } @@ -2270,7 +2320,9 @@ div.memproto, .contents center, .contents .center, .contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody, -div.contents .toc { +div.contents .toc, +.contents .dotgraph, +.contents .tabs-overview-container { scrollbar-width: thin; } @@ -2299,7 +2351,7 @@ doxygen-awesome-dark-mode-toggle { } doxygen-awesome-dark-mode-toggle > svg { - transition: transform .1s ease-in-out; + transition: transform var(--animation-duration) ease-in-out; } doxygen-awesome-dark-mode-toggle:active > svg { @@ -2384,7 +2436,7 @@ a.anchorlink { text-decoration: none; opacity: .15; display: none; - transition: opacity .1s ease-in-out, color .1s ease-in-out; + transition: opacity var(--animation-duration) ease-in-out, color var(--animation-duration) ease-in-out; } a.anchorlink svg { @@ -2403,3 +2455,215 @@ a.anchorlink:hover { h2:hover a.anchorlink, h1:hover a.anchorlink, h3:hover a.anchorlink, h4:hover a.anchorlink { display: inline-block; } + +/* + Optional tab feature +*/ + +.tabbed ul { + padding-inline-start: 0px; + margin: 0; + padding: var(--spacing-small) 0; +} + +.tabbed li { + display: none; +} + +.tabbed li.selected { + display: block; +} + +.tabs-overview-container { + overflow-x: auto; + display: block; + overflow-y: visible; +} + +.tabs-overview { + border-bottom: 1px solid var(--separator-color); + display: flex; + flex-direction: row; +} + +@media screen and (max-width: 767px) { + .tabs-overview-container { + margin: 0 calc(0px - var(--spacing-large)); + } + .tabs-overview { + padding: 0 var(--spacing-large) + } +} + +.tabs-overview button.tab-button { + color: var(--page-foreground-color); + margin: 0; + border: none; + background: transparent; + padding: calc(var(--spacing-large) / 2) 0; + display: inline-block; + font-size: var(--page-font-size); + cursor: pointer; + box-shadow: 0 1px 0 0 var(--separator-color); + position: relative; + + -webkit-tap-highlight-color: transparent; +} + +.tabs-overview button.tab-button .tab-title::before { + display: block; + content: attr(title); + font-weight: 600; + height: 0; + overflow: hidden; + visibility: hidden; +} + +.tabs-overview button.tab-button .tab-title { + float: left; + white-space: nowrap; + font-weight: normal; + padding: calc(var(--spacing-large) / 2) var(--spacing-large); + border-radius: var(--border-radius-medium); + transition: background-color var(--animation-duration) ease-in-out, font-weight var(--animation-duration) ease-in-out; +} + +.tabs-overview button.tab-button:not(:last-child) .tab-title { + box-shadow: 8px 0 0 -7px var(--separator-color); +} + +.tabs-overview button.tab-button:hover .tab-title { + background: var(--separator-color); + box-shadow: none; +} + +.tabs-overview button.tab-button.active .tab-title { + font-weight: 600; +} + +.tabs-overview button.tab-button::after { + content: ''; + display: block; + position: absolute; + left: 0; + bottom: 0; + right: 0; + height: 0; + width: 0%; + margin: 0 auto; + border-radius: var(--border-radius-small) var(--border-radius-small) 0 0; + background-color: var(--primary-color); + transition: width var(--animation-duration) ease-in-out, height var(--animation-duration) ease-in-out; +} + +.tabs-overview button.tab-button.active::after { + width: 100%; + box-sizing: border-box; + height: 3px; +} + + +/* + Navigation Buttons +*/ + +.section_buttons:not(:empty) { + margin-top: calc(var(--spacing-large) * 3); +} + +.section_buttons table.markdownTable { + display: block; + width: 100%; +} + +.section_buttons table.markdownTable tbody { + display: table !important; + width: 100%; + box-shadow: none; + border-spacing: 10px; +} + +.section_buttons table.markdownTable td { + padding: 0; +} + +.section_buttons table.markdownTable th { + display: none; +} + +.section_buttons table.markdownTable tr.markdownTableHead { + border: none; +} + +.section_buttons tr th, .section_buttons tr td { + background: none; + border: none; + padding: var(--spacing-large) 0 var(--spacing-small); +} + +.section_buttons a { + display: inline-block; + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + color: var(--page-secondary-foreground-color) !important; + text-decoration: none; + transition: color var(--animation-duration) ease-in-out, background-color var(--animation-duration) ease-in-out; +} + +.section_buttons a:hover { + color: var(--page-foreground-color) !important; + background-color: var(--odd-color); +} + +.section_buttons tr td.markdownTableBodyLeft a { + padding: var(--spacing-medium) var(--spacing-large) var(--spacing-medium) calc(var(--spacing-large) / 2); +} + +.section_buttons tr td.markdownTableBodyRight a { + padding: var(--spacing-medium) calc(var(--spacing-large) / 2) var(--spacing-medium) var(--spacing-large); +} + +.section_buttons tr td.markdownTableBodyLeft a::before, +.section_buttons tr td.markdownTableBodyRight a::after { + color: var(--page-secondary-foreground-color) !important; + display: inline-block; + transition: color .08s ease-in-out, transform .09s ease-in-out; +} + +.section_buttons tr td.markdownTableBodyLeft a::before { + content: '〈'; + padding-right: var(--spacing-large); +} + + +.section_buttons tr td.markdownTableBodyRight a::after { + content: '〉'; + padding-left: var(--spacing-large); +} + + +.section_buttons tr td.markdownTableBodyLeft a:hover::before { + color: var(--page-foreground-color) !important; + transform: translateX(-3px); +} + +.section_buttons tr td.markdownTableBodyRight a:hover::after { + color: var(--page-foreground-color) !important; + transform: translateX(3px); +} + +@media screen and (max-width: 450px) { + .section_buttons a { + width: 100%; + box-sizing: border-box; + } + + .section_buttons tr td:nth-of-type(1).markdownTableBodyLeft a { + border-radius: var(--border-radius-medium) 0 0 var(--border-radius-medium); + border-right: none; + } + + .section_buttons tr td:nth-of-type(2).markdownTableBodyRight a { + border-radius: 0 var(--border-radius-medium) var(--border-radius-medium) 0; + } +} From f070c18cea69611a7299a9212389e74f5824afae Mon Sep 17 00:00:00 2001 From: Christian Heimlich Date: Mon, 4 Dec 2023 14:11:17 -0500 Subject: [PATCH 4/5] Bump --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 04da8458..b44f63bd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,7 +8,7 @@ cmake_minimum_required(VERSION 3.23.0...3.26.0) # avoided and only used for hotfixes. DON'T USE TRAILING # ZEROS IN VERSIONS project(Qx - VERSION 0.5.6 + VERSION 0.5.6.1 LANGUAGES CXX DESCRIPTION "Qt Extensions Library" ) From 4a59c7b2ed6025bfe3d69ae6b1089f320140c6a8 Mon Sep 17 00:00:00 2001 From: Christian Heimlich Date: Mon, 4 Dec 2023 15:21:07 -0500 Subject: [PATCH 5/5] Improve doc autolinks --- CMakeLists.txt | 2 +- lib/core/include/qx/core/qx-abstracterror.h | 2 ++ lib/core/src/qx-abstracterror.cpp | 8 ++++++++ lib/core/src/qx-error.cpp | 11 +++++++++-- lib/core/src/qx-json.cpp | 6 +++--- 5 files changed, 23 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b44f63bd..67217fe5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,7 +15,7 @@ project(Qx # Get helper scripts include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/FetchOBCMake.cmake) -fetch_ob_cmake("v0.3.4") +fetch_ob_cmake("v0.3.4.1") # Initialize project according to standard rules include(OB/Project) diff --git a/lib/core/include/qx/core/qx-abstracterror.h b/lib/core/include/qx/core/qx-abstracterror.h index 7a586bed..86ac1be0 100644 --- a/lib/core/include/qx/core/qx-abstracterror.h +++ b/lib/core/include/qx/core/qx-abstracterror.h @@ -135,11 +135,13 @@ friend class Error; template const bool AbstractError::REGISTER = registerType(TYPE_CODE, TYPE_NAME); +/*! @cond */ namespace AbstractErrorPrivate { template void aeDerived(Qx::AbstractError&); } +/*! @endcond */ template concept error_type = requires(E type) { diff --git a/lib/core/src/qx-abstracterror.cpp b/lib/core/src/qx-abstracterror.cpp index 7ffc05e1..19e99380 100644 --- a/lib/core/src/qx-abstracterror.cpp +++ b/lib/core/src/qx-abstracterror.cpp @@ -1,6 +1,14 @@ // Unit Include #include "qx/core/qx-abstracterror.h" +/*! + * @file qx-abstracterror.h + * @ingroup qx-core + * + * @brief The qx-abstracterror.h header file provides access to the base class from + * which custom error types should be extended for the Error interface. + */ + namespace Qx { diff --git a/lib/core/src/qx-error.cpp b/lib/core/src/qx-error.cpp index b935d72d..86edd222 100644 --- a/lib/core/src/qx-error.cpp +++ b/lib/core/src/qx-error.cpp @@ -4,6 +4,13 @@ // Qt Includes #include +/*! + * @file qx-error.h + * @ingroup qx-core + * + * @brief The qx-error.h header file provides access to the Error interface. + */ + namespace Qx { @@ -68,8 +75,8 @@ namespace Qx * not derived from AbstractError can be adapted to the Error interface via an Error Adapter. * * An error adapter is a specific derivation of AbstractError, in which the class is not move/copy - * constructable and is constructable from the type it's designed to adapt (see error_adapter). Each - * pair of adapter and adapted type is considered an Error Adaptation (see error_adaptation). and an + * constructable and is constructable from the type it's designed to adapt (see Qx::error_adapter). Each + * pair of adapter and adapted type is considered an Error Adaptation (see Qx::error_adaptation). and an * instance of Error can be constructed from any valid Error Adaptation. Adaptations must be explicitly * registered via the QX_DECLARE_ERROR_ADAPTATION() macro. * diff --git a/lib/core/src/qx-json.cpp b/lib/core/src/qx-json.cpp index f837a7f3..20a34aae 100644 --- a/lib/core/src/qx-json.cpp +++ b/lib/core/src/qx-json.cpp @@ -254,7 +254,7 @@ QString QJsonParseErrorAdapter::deriveSecondary() const { return OFFSET_STR.arg( * @fn JsonError parseJson(T& parsed, const QString& filePath) * * Parses the entire JSON document file at path @a filePath and stores the result in @a parsed. - * @a T must satisfy the json_root concept. + * @a T must satisfy the Qx::json_root concept. * * If parsing fails, a valid JsonError is returned that describes the cause; otherwise, an invalid * error is returned. @@ -264,7 +264,7 @@ QString QJsonParseErrorAdapter::deriveSecondary() const { return OFFSET_STR.arg( * @fn JsonError parseJson(T& parsed, QFile& file) * * Parses the entire JSON document file @a file and stores the result in @a parsed. - * @a T must satisfy the json_root concept. + * @a T must satisfy the Qx::json_root concept. * * If parsing fails, a valid JsonError is returned that describes the cause; otherwise, an invalid * error is returned. @@ -274,7 +274,7 @@ QString QJsonParseErrorAdapter::deriveSecondary() const { return OFFSET_STR.arg( * @fn JsonError parseJson(T& parsed, const QJsonDocument& doc) * * Parses the entire JSON document @a doc and stores the result in @a parsed. - * @a T must satisfy the json_root concept. + * @a T must satisfy the Qx::json_root concept. * * If parsing fails, a valid JsonError is returned that describes the cause; otherwise, an invalid * error is returned.