mirror of
				https://github.com/arcan1s/awesome-widgets.git
				synced 2025-10-31 05:13:40 +00:00 
			
		
		
		
	Compare commits
	
		
			14 Commits
		
	
	
		
			V.3.4.3
			...
			cee37c6a4a
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| cee37c6a4a | |||
| 0fcfb7d7e4 | |||
| 5fd3a4a21a | |||
| eecb128865 | |||
| 0565d3533f | |||
| 88f70c0ea6 | |||
| 338828da88 | |||
| 09a3c32d0c | |||
| e9beea2d7a | |||
| 1e69aa93f5 | |||
| 73f1617cbf | |||
| dea9d488df | |||
| 84de9755b5 | |||
| ff40ac96d8 | 
| @ -1,12 +0,0 @@ | ||||
| FROM archlinux | ||||
|  | ||||
| RUN pacman -Sy | ||||
|  | ||||
| # toolchain | ||||
| RUN echo -e 'y\ny' | pacman -S util-linux-libs | ||||
| RUN pacman -S --noconfirm base-devel cmake extra-cmake-modules python util-linux-libs | ||||
| # kf5 and qt5 libraries | ||||
| RUN pacman -S --noconfirm plasma-framework | ||||
|  | ||||
| # required by tests | ||||
| RUN pacman -S --noconfirm xorg-server-xvfb | ||||
| @ -1,14 +0,0 @@ | ||||
| FROM ubuntu:focal | ||||
|  | ||||
| ENV DEBIAN_FRONTEND=noninteractive | ||||
|  | ||||
| RUN apt-get update | ||||
| # toolchain | ||||
| RUN apt-get install -yq cmake extra-cmake-modules g++ git gettext | ||||
| # kf5 and qt5 libraries | ||||
| RUN apt-get install -yq libkf5i18n-dev libkf5notifications-dev libkf5service-dev \ | ||||
|       libkf5windowsystem-dev libkf5plasma-dev qtbase5-dev qtdeclarative5-dev \ | ||||
|       plasma-framework | ||||
|  | ||||
| # required by tests | ||||
| RUN apt-get install -yq xvfb | ||||
| @ -1,14 +0,0 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| set -e | ||||
|  | ||||
| rm -rf build-arch | ||||
| mkdir build-arch | ||||
|  | ||||
| # build | ||||
| cd build-arch | ||||
| cmake -DKDE_INSTALL_USE_QT_SYS_PATHS=ON -DCMAKE_BUILD_TYPE=Optimization -DCMAKE_INSTALL_PREFIX=/usr -DBUILD_FUTURE=ON -DBUILD_TESTING=ON ../sources | ||||
| make | ||||
|  | ||||
| # tests | ||||
| xvfb-run -a make test | ||||
| @ -1,15 +0,0 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| set -e | ||||
|  | ||||
| rm -rf build-ubuntu | ||||
| mkdir build-ubuntu | ||||
|  | ||||
| # patches | ||||
| git apply patches/qt5.14-splitbehavior-and-qset.patch | ||||
|  | ||||
| # build | ||||
| cd build-ubuntu | ||||
| cmake -DKDE_INSTALL_USE_QT_SYS_PATHS=ON -DCMAKE_BUILD_TYPE=Optimization -DCMAKE_INSTALL_PREFIX=/usr -DBUILD_FUTURE=ON -DBUILD_DEB_PACKAGE=ON ../sources | ||||
| make package | ||||
|  | ||||
| @ -1,17 +0,0 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| set -e | ||||
|  | ||||
| rm -rf build-ubuntu | ||||
| mkdir build-ubuntu | ||||
|  | ||||
| # patches | ||||
| git apply patches/qt5.14-splitbehavior-and-qset.patch | ||||
|  | ||||
| # build | ||||
| cd build-ubuntu | ||||
| cmake -DKDE_INSTALL_USE_QT_SYS_PATHS=ON -DCMAKE_BUILD_TYPE=Optimization -DCMAKE_INSTALL_PREFIX=/usr -DBUILD_FUTURE=ON -DBUILD_TESTING=ON ../sources | ||||
| make | ||||
|  | ||||
| # tests | ||||
| xvfb-run -a make test | ||||
							
								
								
									
										41
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,41 @@ | ||||
| name: build & tests | ||||
|  | ||||
| on: | ||||
|   push: | ||||
|     branches: [ development, master ] | ||||
|   pull_request: | ||||
|     branches: [ development, master ] | ||||
|  | ||||
| env: | ||||
|   BUILD_TYPE: Release | ||||
|  | ||||
| jobs: | ||||
|   run-tests: | ||||
|      | ||||
|     runs-on: ubuntu-latest | ||||
|      | ||||
|     container: | ||||
|       image: archlinux:latest | ||||
|       volumes: | ||||
|         - ${{ github.workspace }}:/repo | ||||
|       options: -w /repo | ||||
|  | ||||
|     steps: | ||||
|     - uses: actions/checkout@v3 | ||||
|  | ||||
|     - name: create build environment | ||||
|       run: pacman -Sy --noconfirm base-devel cmake extra-cmake-modules python util-linux-libs xorg-server-xvfb | ||||
|      | ||||
|     - name: install dependencies | ||||
|       run: pacman -S --noconfirm plasma-workspace ksysguard | ||||
|      | ||||
|     - name: configure cmake | ||||
|       run: cmake -B build -DKDE_INSTALL_USE_QT_SYS_PATHS=ON -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DBUILD_FUTURE=ON -DBUILD_TESTING=ON sources | ||||
|      | ||||
|     - name: build | ||||
|       working-directory: /repo/build | ||||
|       run: make | ||||
|      | ||||
|     - name: test | ||||
|       working-directory: /repo/build | ||||
|       run: xvfb-run -a make test | ||||
							
								
								
									
										51
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,51 @@ | ||||
| name: release | ||||
|  | ||||
| on: | ||||
|   push: | ||||
|     tags: | ||||
|       - '*' | ||||
|  | ||||
| jobs: | ||||
|   make-release: | ||||
|  | ||||
|     runs-on: ubuntu-latest | ||||
|  | ||||
|     steps: | ||||
|       - uses: actions/checkout@v3 | ||||
|  | ||||
|       - name: create changelog | ||||
|         id: changelog | ||||
|         uses: jaywcjlove/changelog-generator@main | ||||
|         with: | ||||
|           token: ${{ secrets.GITHUB_TOKEN }} | ||||
|           filter: 'Release \d+\.\d+\.\d+' | ||||
|  | ||||
|       - name: create archive | ||||
|         run: bash create_archive.sh | ||||
|         env: | ||||
|           VERSION: ${{ steps.version.outputs.VERSION }} | ||||
|  | ||||
|       - name: build debian package | ||||
|         run: | | ||||
|           sudo apt update && \ | ||||
|           sudo apt install -yq cmake extra-cmake-modules g++ git gettext make && \ | ||||
|           sudo apt install -yq libkf5i18n-dev libkf5notifications-dev libkf5service-dev \ | ||||
|             libkf5windowsystem-dev libkf5plasma-dev qtbase5-dev qtdeclarative5-dev \ | ||||
|             plasma-workspace-dev && \ | ||||
|           cmake -B build-deb -DKDE_INSTALL_USE_QT_SYS_PATHS=ON -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Optimization -DBUILD_FUTURE=ON -DBUILD_DEB_PACKAGE=ON sources && \ | ||||
|           cd build-deb && \ | ||||
|           make package && \ | ||||
|           cd .. | ||||
|  | ||||
|       - name: release | ||||
|         uses: softprops/action-gh-release@v1 | ||||
|         with: | ||||
|           body: | | ||||
|             ${{ steps.changelog.outputs.compareurl }} | ||||
|             ${{ steps.changelog.outputs.changelog }} | ||||
|           files: | | ||||
|             awesome-widgets-*-src.tar.xz | ||||
|             build-deb/plasma-widget-awesome-widgets-*.deb | ||||
|           fail_on_unmatched_files: true | ||||
|         env: | ||||
|           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||||
							
								
								
									
										3
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							| @ -1,3 +0,0 @@ | ||||
| [submodule "sources/3rdparty/fontdialog"] | ||||
| 	path = sources/3rdparty/fontdialog | ||||
| 	url = https://github.com/arcan1s/qtadds-fontdialog.git | ||||
							
								
								
									
										14
									
								
								.travis.yml
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								.travis.yml
									
									
									
									
									
								
							| @ -1,14 +0,0 @@ | ||||
| sudo: required | ||||
| language: generic | ||||
|  | ||||
| env: | ||||
|   - DOCKER_TAG_ARCH="arcan1s/awesome-widgets-arch" | ||||
|  | ||||
| services: | ||||
|   - docker | ||||
|  | ||||
| before_install: | ||||
|   - docker build --tag="${DOCKER_TAG_ARCH}" -f ".docker/Dockerfile-arch" ".docker" | ||||
|  | ||||
| script: | ||||
|   - docker run --rm -v "$(pwd):/opt/build" -w /opt/build "${DOCKER_TAG_ARCH}" sh -c ".docker/build-arch.sh" | ||||
| @ -1,3 +1,8 @@ | ||||
| Ver.3.5.0: | ||||
| + wayland support | ||||
| * update code to latest standards | ||||
| - drop support of windows preview | ||||
|  | ||||
| Ver.3.4.2: | ||||
| + Italian translation (#136, thanks to @avivace) | ||||
| + stooq quotes support (default) (#131) | ||||
|  | ||||
| @ -1,7 +1,7 @@ | ||||
| awesome-widgets (ex-pytextmonitor) | ||||
| ================================== | ||||
|  | ||||
| [](https://travis-ci.org/arcan1s/awesome-widgets) | ||||
| [](https://github.com/arcan1s/awesome-widgets/actions/workflows/build.yml) | ||||
| [](https://scan.coverity.com/projects/awesome-widgets) | ||||
|  | ||||
| Information | ||||
| @ -31,6 +31,7 @@ Dependencies | ||||
| ------------ | ||||
|  | ||||
| * plasma-framework | ||||
| * ksysguard (since plasma 5.22) | ||||
|  | ||||
| Optional dependencies | ||||
| --------------------- | ||||
| @ -61,10 +62,6 @@ Installation | ||||
|  | ||||
|   **NOTE** on Plasma 5 it very likely requires `-DKDE_INSTALL_USE_QT_SYS_PATHS=ON` flag | ||||
|  | ||||
|   **NOTE** if you are going to build from git, you need to init submodules first, e.g.: | ||||
|  | ||||
|         git submodule update --init --recursive | ||||
|  | ||||
| Additional information | ||||
| ====================== | ||||
|  | ||||
|  | ||||
| @ -1,32 +1,20 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| SRCDIR="sources" | ||||
| MAJOR=$(grep -m1 PROJECT_VERSION_MAJOR sources/CMakeLists.txt | awk '{print $2}' | sed 's/^.\(.*\)..$/\1/') | ||||
| MINOR=$(grep -m1 PROJECT_VERSION_MINOR sources/CMakeLists.txt | awk '{print $2}' | sed 's/^.\(.*\)..$/\1/') | ||||
| PATCH=$(grep -m1 PROJECT_VERSION_PATCH sources/CMakeLists.txt | awk '{print $2}' | sed 's/^.\(.*\)..$/\1/') | ||||
| VERSION="${MAJOR}.${MINOR}.${PATCH}" | ||||
|  | ||||
| # update submodules | ||||
| git submodule update --init --recursive | ||||
| VERSION="$(git describe --tags --abbrev=0)" | ||||
|  | ||||
| # build widget | ||||
| ARCHIVE="awesome-widgets" | ||||
| FILES="AUTHORS CHANGELOG COPYING packages patches" | ||||
| FILES="AUTHORS CHANGELOG COPYING packages patches sources" | ||||
| IGNORELIST="build usr .kdev4 *.kdev4 .idea packages/*src.tar.xz" | ||||
| # create archive | ||||
| [[ -e ${ARCHIVE}-${VERSION}-src.tar.xz ]] && rm -f "${ARCHIVE}-${VERSION}-src.tar.xz" | ||||
| [[ -d ${ARCHIVE} ]] && rm -rf "${ARCHIVE}" | ||||
|  | ||||
| cp -r "${SRCDIR}" "${ARCHIVE}" | ||||
| for FILE in ${FILES[*]}; do cp -r "$FILE" "${ARCHIVE}"; done | ||||
| for FILE in ${IGNORELIST[*]}; do rm -rf "${ARCHIVE}/${FILE}"; done | ||||
| tar cJf "${ARCHIVE}-${VERSION}-src.tar.xz" "${ARCHIVE}" | ||||
| ln -sf "../${ARCHIVE}-${VERSION}-src.tar.xz" packages | ||||
| rm -rf "${ARCHIVE}" | ||||
|  | ||||
| # update md5sum | ||||
| MD5SUMS=$(md5sum ${ARCHIVE}-${VERSION}-src.tar.xz | awk '{print $1}') | ||||
| sed -i "/md5sums=('[0-9A-Fa-f]*/s/[^'][^)]*/md5sums=('${MD5SUMS}'/" packages/PKGBUILD | ||||
| sed -i "s/pkgver=[0-9.]*/pkgver=${VERSION}/" packages/PKGBUILD | ||||
| # clear | ||||
| find . -type f -name '*src.tar.xz' -not -name "*${VERSION}-src.tar.xz" -exec rm -rf {} \; | ||||
| find packages -type l -xtype l -exec rm -rf {} \; | ||||
| tar cJf "${ARCHIVE}-${VERSION}-src.tar.xz" "${ARCHIVE}" | ||||
|  | ||||
| rm -rf "${ARCHIVE}" | ||||
|  | ||||
| @ -8,7 +8,7 @@ pkgdesc="Collection of minimalistic Plasmoids which look like Awesome WM widgets | ||||
| arch=('i686' 'x86_64') | ||||
| url="https://arcanis.me/projects/awesome-widgets" | ||||
| license=('GPL3') | ||||
| depends=('plasma-framework') | ||||
| depends=('ksysguard' 'plasma-framework') | ||||
| optdepends=("catalyst: for GPU monitor" | ||||
|             "hddtemp: for HDD temperature monitor" | ||||
|             "smartmontools: for HDD temperature monitor" | ||||
|  | ||||
| @ -1,11 +0,0 @@ | ||||
| cmake | ||||
| extra-cmake-modules | ||||
| g++ | ||||
| git | ||||
| libkf5i18n-dev | ||||
| libkf5notifications-dev | ||||
| libkf5service-dev | ||||
| libkf5windowsystem-dev | ||||
| plasma-framework-dev | ||||
| qtbase5-dev | ||||
| qtdeclarative5-dev | ||||
| @ -1,255 +0,0 @@ | ||||
| diff --git a/sources/awdebug.cpp b/sources/awdebug.cpp | ||||
| index 7135db6..a2870ec 100644 | ||||
| --- a/sources/awdebug.cpp | ||||
| +++ b/sources/awdebug.cpp | ||||
| @@ -67,7 +67,7 @@ QString AWDebug::getAboutText(const QString &_type) | ||||
|              translator = QString("<li>%1</li>").arg(translator); | ||||
|          text = i18n("Translators:") + "<ul>" + translatorList.join("") + "</ul>"; | ||||
|      } else if (_type == "3rdparty") { | ||||
| -        QStringList trdPartyList = QString(TRDPARTY_LICENSE).split(';', Qt::SkipEmptyParts); | ||||
| +        QStringList trdPartyList = QString(TRDPARTY_LICENSE).split(';', QString::SkipEmptyParts); | ||||
|          for (int i = 0; i < trdPartyList.count(); i++) | ||||
|              trdPartyList[i] = QString("<li><a href=\"%3\">%1</a> (%2 license)</li>") | ||||
|                                    .arg(trdPartyList.at(i).split(',')[0]) | ||||
| @@ -75,7 +75,7 @@ QString AWDebug::getAboutText(const QString &_type) | ||||
|                                    .arg(trdPartyList.at(i).split(',')[2]); | ||||
|          text = i18n("This software uses:") + "<ul>" + trdPartyList.join("") + "</ul>"; | ||||
|      } else if (_type == "thanks") { | ||||
| -        QStringList thanks = QString(SPECIAL_THANKS).split(';', Qt::SkipEmptyParts); | ||||
| +        QStringList thanks = QString(SPECIAL_THANKS).split(';', QString::SkipEmptyParts); | ||||
|          for (int i = 0; i < thanks.count(); i++) | ||||
|              thanks[i] = QString("<li><a href=\"%2\">%1</a></li>") | ||||
|                              .arg(thanks.at(i).split(',')[0]) | ||||
| diff --git a/sources/awesome-widget/plugin/awabstractpairhelper.cpp b/sources/awesome-widget/plugin/awabstractpairhelper.cpp | ||||
| index 55a4e91..f7c2969 100644 | ||||
| --- a/sources/awesome-widget/plugin/awabstractpairhelper.cpp | ||||
| +++ b/sources/awesome-widget/plugin/awabstractpairhelper.cpp | ||||
| @@ -61,7 +61,7 @@ QStringList AWAbstractPairHelper::values() const | ||||
|  QSet<QString> AWAbstractPairHelper::valuesSet() const | ||||
|  { | ||||
|      auto values = m_pairs.values(); | ||||
| -    return QSet(values.cbegin(), values.cend()); | ||||
| +    return QSet<QString>::fromList(values); | ||||
|  } | ||||
|   | ||||
|   | ||||
| @@ -138,4 +138,4 @@ bool AWAbstractPairHelper::removeUnusedKeys(const QStringList &_keys) const | ||||
|      settings.sync(); | ||||
|   | ||||
|      return (settings.status() == QSettings::NoError); | ||||
| -} | ||||
| \ No newline at end of file | ||||
| +} | ||||
| diff --git a/sources/awesome-widget/plugin/awkeycache.cpp b/sources/awesome-widget/plugin/awkeycache.cpp | ||||
| index 15aab94..54b47b3 100644 | ||||
| --- a/sources/awesome-widget/plugin/awkeycache.cpp | ||||
| +++ b/sources/awesome-widget/plugin/awkeycache.cpp | ||||
| @@ -83,9 +83,9 @@ QStringList AWKeyCache::getRequiredKeys(const QStringList &_keys, const QStringL | ||||
|                      << _tooltip; | ||||
|   | ||||
|      // initial copy | ||||
| -    QSet<QString> used(_keys.cbegin(), _keys.cend()); | ||||
| -    used.unite(QSet(_bars.cbegin(), _bars.cend())); | ||||
| -    used.unite(QSet(_userKeys.cbegin(), _userKeys.cend())); | ||||
| +    auto used = QSet<QString>::fromList(_keys); | ||||
| +    used.unite(QSet<QString>::fromList(_bars)); | ||||
| +    used.unite(QSet<QString>::fromList(_userKeys)); | ||||
|      // insert keys from tooltip | ||||
|      for (auto &key : _tooltip.keys()) { | ||||
|          if ((key.endsWith("Tooltip")) && (_tooltip[key].toBool())) { | ||||
| diff --git a/sources/awesomewidgets/awjsonformatter.cpp b/sources/awesomewidgets/awjsonformatter.cpp | ||||
| index bbdd7ce..8a1c5e0 100644 | ||||
| --- a/sources/awesomewidgets/awjsonformatter.cpp | ||||
| +++ b/sources/awesomewidgets/awjsonformatter.cpp | ||||
| @@ -178,7 +178,7 @@ QVariant AWJsonFormatter::getFromMap(const QVariant &_value, const QString &_key | ||||
|  void AWJsonFormatter::initPath() | ||||
|  { | ||||
|      m_splittedPath.clear(); | ||||
| -    QStringList splittedByDot = m_path.split('.', Qt::SkipEmptyParts); | ||||
| +    QStringList splittedByDot = m_path.split('.', QString::SkipEmptyParts); | ||||
|   | ||||
|      for (auto &element : splittedByDot) { | ||||
|          bool ok; | ||||
| diff --git a/sources/awesomewidgets/extscript.cpp b/sources/awesomewidgets/extscript.cpp | ||||
| index 3017dac..da009f9 100644 | ||||
| --- a/sources/awesomewidgets/extscript.cpp | ||||
| +++ b/sources/awesomewidgets/extscript.cpp | ||||
| @@ -218,7 +218,7 @@ void ExtScript::readConfiguration() | ||||
|      setExecutable(settings.value("Exec", executable()).toString()); | ||||
|      setStrRedirect(settings.value("X-AW-Redirect", strRedirect()).toString()); | ||||
|      // api == 3 | ||||
| -    setFilters(settings.value("X-AW-Filters", filters()).toString().split(',', Qt::SkipEmptyParts)); | ||||
| +    setFilters(settings.value("X-AW-Filters", filters()).toString().split(',', QString::SkipEmptyParts)); | ||||
|      settings.endGroup(); | ||||
|   | ||||
|      bumpApi(AW_EXTSCRIPT_API); | ||||
| diff --git a/sources/awesomewidgets/extupgrade.cpp b/sources/awesomewidgets/extupgrade.cpp | ||||
| index 0195779..0081cc9 100644 | ||||
| --- a/sources/awesomewidgets/extupgrade.cpp | ||||
| +++ b/sources/awesomewidgets/extupgrade.cpp | ||||
| @@ -219,8 +219,8 @@ void ExtUpgrade::updateValue() | ||||
|          = QTextCodec::codecForMib(106)->toUnicode(m_process->readAllStandardOutput()).trimmed(); | ||||
|      m_values[tag("pkgcount")] = [this](const QString &output) { | ||||
|          return filter().isEmpty() | ||||
| -                   ? output.split('\n', Qt::SkipEmptyParts).count() - null() | ||||
| -                   : output.split('\n', Qt::SkipEmptyParts).filter(QRegExp(filter())).count(); | ||||
| +                   ? output.split('\n', QString::SkipEmptyParts).count() - null() | ||||
| +                   : output.split('\n', QString::SkipEmptyParts).filter(QRegExp(filter())).count(); | ||||
|      }(qoutput); | ||||
|   | ||||
|      emit(dataReceived(m_values)); | ||||
| diff --git a/sources/awesomewidgets/qcronscheduler.cpp b/sources/awesomewidgets/qcronscheduler.cpp | ||||
| index 6f67590..c72abc9 100644 | ||||
| --- a/sources/awesomewidgets/qcronscheduler.cpp | ||||
| +++ b/sources/awesomewidgets/qcronscheduler.cpp | ||||
| @@ -87,7 +87,7 @@ QList<int> QCronScheduler::parseField(const QString &_value, const int _min, con | ||||
|          parsedField.fromRange(field.split('/').first(), _min, _max); | ||||
|          if (field.contains('/')) { | ||||
|              bool status; | ||||
| -            parsedField.div = field.split('/', Qt::SkipEmptyParts).at(1).toInt(&status); | ||||
| +            parsedField.div = field.split('/', QString::SkipEmptyParts).at(1).toInt(&status); | ||||
|              if (!status) | ||||
|                  parsedField.div = 1; | ||||
|          } | ||||
| @@ -107,7 +107,7 @@ void QCronScheduler::QCronField::fromRange(const QString &_range, const int _min | ||||
|          minValue = _min; | ||||
|          maxValue = _max; | ||||
|      } else if (_range.contains("-")) { | ||||
| -        auto interval = _range.split('-', Qt::SkipEmptyParts); | ||||
| +        auto interval = _range.split('-', QString::SkipEmptyParts); | ||||
|          if (interval.count() != 2) | ||||
|              return; | ||||
|          bool status; | ||||
| diff --git a/sources/extsysmon/extsysmon.cpp b/sources/extsysmon/extsysmon.cpp | ||||
| index 88b6e39..5bdc7f3 100644 | ||||
| --- a/sources/extsysmon/extsysmon.cpp | ||||
| +++ b/sources/extsysmon/extsysmon.cpp | ||||
| @@ -126,7 +126,7 @@ QHash<QString, QString> ExtendedSysMon::updateConfiguration(QHash<QString, QStri | ||||
|      } else if (_rawConfig["HDDDEV"] == "disable") { | ||||
|          _rawConfig["HDDDEV"] = ""; | ||||
|      } else { | ||||
| -        QStringList deviceList = _rawConfig["HDDDEV"].split(',', Qt::SkipEmptyParts); | ||||
| +        QStringList deviceList = _rawConfig["HDDDEV"].split(',', QString::SkipEmptyParts); | ||||
|          QStringList devices; | ||||
|          QRegExp diskRegexp = QRegExp("^/dev/[hms]d[a-z]$"); | ||||
|          for (auto &device : deviceList) | ||||
| diff --git a/sources/extsysmonsources/gpuloadsource.cpp b/sources/extsysmonsources/gpuloadsource.cpp | ||||
| index 6281637..e81be26 100644 | ||||
| --- a/sources/extsysmonsources/gpuloadsource.cpp | ||||
| +++ b/sources/extsysmonsources/gpuloadsource.cpp | ||||
| @@ -132,7 +132,7 @@ void GPULoadSource::updateValue() | ||||
|      qCInfo(LOG_ESS) << "Output" << qoutput; | ||||
|   | ||||
|      if (m_device == "nvidia") { | ||||
| -        for (auto &str : qoutput.split('\n', Qt::SkipEmptyParts)) { | ||||
| +        for (auto &str : qoutput.split('\n', QString::SkipEmptyParts)) { | ||||
|              if (!str.contains("<gpu_util>")) | ||||
|                  continue; | ||||
|              auto load = str.remove("<gpu_util>").remove("</gpu_util>").remove('%'); | ||||
| @@ -140,10 +140,10 @@ void GPULoadSource::updateValue() | ||||
|              break; | ||||
|          } | ||||
|      } else if (m_device == "ati") { | ||||
| -        for (auto &str : qoutput.split('\n', Qt::SkipEmptyParts)) { | ||||
| +        for (auto &str : qoutput.split('\n', QString::SkipEmptyParts)) { | ||||
|              if (!str.contains("load")) | ||||
|                  continue; | ||||
| -            QString load = str.split(' ', Qt::SkipEmptyParts)[3].remove('%'); | ||||
| +            QString load = str.split(' ', QString::SkipEmptyParts)[3].remove('%'); | ||||
|              m_values["gpu/load"] = load.toFloat(); | ||||
|              break; | ||||
|          } | ||||
| diff --git a/sources/extsysmonsources/gputempsource.cpp b/sources/extsysmonsources/gputempsource.cpp | ||||
| index 55fbadc..dce0c6e 100644 | ||||
| --- a/sources/extsysmonsources/gputempsource.cpp | ||||
| +++ b/sources/extsysmonsources/gputempsource.cpp | ||||
| @@ -112,7 +112,7 @@ void GPUTemperatureSource::updateValue() | ||||
|      qCInfo(LOG_ESS) << "Output" << qoutput; | ||||
|   | ||||
|      if (m_device == "nvidia") { | ||||
| -        for (auto &str : qoutput.split('\n', Qt::SkipEmptyParts)) { | ||||
| +        for (auto &str : qoutput.split('\n', QString::SkipEmptyParts)) { | ||||
|              if (!str.contains("<gpu_temp>")) | ||||
|                  continue; | ||||
|              QString temp = str.remove("<gpu_temp>").remove("C</gpu_temp>"); | ||||
| @@ -120,10 +120,10 @@ void GPUTemperatureSource::updateValue() | ||||
|              break; | ||||
|          } | ||||
|      } else if (m_device == "ati") { | ||||
| -        for (auto &str : qoutput.split('\n', Qt::SkipEmptyParts)) { | ||||
| +        for (auto &str : qoutput.split('\n', QString::SkipEmptyParts)) { | ||||
|              if (!str.contains("Temperature")) | ||||
|                  continue; | ||||
| -            QString temp = str.split(' ', Qt::SkipEmptyParts).at(4); | ||||
| +            QString temp = str.split(' ', QString::SkipEmptyParts).at(4); | ||||
|              m_values["gpu/temperature"] = temp.toFloat(); | ||||
|              break; | ||||
|          } | ||||
| diff --git a/sources/extsysmonsources/hddtempsource.cpp b/sources/extsysmonsources/hddtempsource.cpp | ||||
| index efaae08..dad47a3 100644 | ||||
| --- a/sources/extsysmonsources/hddtempsource.cpp | ||||
| +++ b/sources/extsysmonsources/hddtempsource.cpp | ||||
| @@ -31,7 +31,7 @@ HDDTemperatureSource::HDDTemperatureSource(QObject *_parent, const QStringList & | ||||
|      Q_ASSERT(_args.count() == 2); | ||||
|      qCDebug(LOG_ESS) << __PRETTY_FUNCTION__; | ||||
|   | ||||
| -    m_devices = _args.at(0).split(',', Qt::SkipEmptyParts); | ||||
| +    m_devices = _args.at(0).split(',', QString::SkipEmptyParts); | ||||
|      m_cmd = _args.at(1).split(' '); // lets hope no one put cmd with spaces here lol | ||||
|   | ||||
|      m_smartctl = m_cmd.contains("smartctl"); | ||||
| @@ -131,17 +131,17 @@ void HDDTemperatureSource::updateValue(const QString &_device) | ||||
|   | ||||
|      // parse | ||||
|      if (m_smartctl) { | ||||
| -        QStringList lines = qoutput.split('\n', Qt::SkipEmptyParts); | ||||
| +        QStringList lines = qoutput.split('\n', QString::SkipEmptyParts); | ||||
|          for (auto &str : lines) { | ||||
|              if (!str.startsWith("194")) | ||||
|                  continue; | ||||
| -            if (str.split(' ', Qt::SkipEmptyParts).count() < 9) | ||||
| +            if (str.split(' ', QString::SkipEmptyParts).count() < 9) | ||||
|                  continue; | ||||
| -            m_values[_device] = str.split(' ', Qt::SkipEmptyParts).at(9).toFloat(); | ||||
| +            m_values[_device] = str.split(' ', QString::SkipEmptyParts).at(9).toFloat(); | ||||
|              break; | ||||
|          } | ||||
|      } else { | ||||
| -        QStringList lines = qoutput.split(':', Qt::SkipEmptyParts); | ||||
| +        QStringList lines = qoutput.split(':', QString::SkipEmptyParts); | ||||
|          if (lines.count() >= 3) { | ||||
|              QString temp = lines.at(2); | ||||
|              temp.remove(QChar(0260)).remove('C'); | ||||
| diff --git a/sources/extsysmonsources/playersource.cpp b/sources/extsysmonsources/playersource.cpp | ||||
| index aaca22f..e127a05 100644 | ||||
| --- a/sources/extsysmonsources/playersource.cpp | ||||
| +++ b/sources/extsysmonsources/playersource.cpp | ||||
| @@ -256,11 +256,11 @@ void PlayerSource::mpdSocketReadyRead() | ||||
|      qCInfo(LOG_ESS) << "Output" << qoutput; | ||||
|   | ||||
|      // parse | ||||
| -    for (auto &str : qoutput.split('\n', Qt::SkipEmptyParts)) { | ||||
| -        if (str.split(": ", Qt::SkipEmptyParts).count() == 2) { | ||||
| +    for (auto &str : qoutput.split('\n', QString::SkipEmptyParts)) { | ||||
| +        if (str.split(": ", QString::SkipEmptyParts).count() == 2) { | ||||
|              // "Metadata: data" | ||||
| -            QString metadata = str.split(": ", Qt::SkipEmptyParts).first().toLower(); | ||||
| -            QString data = str.split(": ", Qt::SkipEmptyParts).last().trimmed(); | ||||
| +            QString metadata = str.split(": ", QString::SkipEmptyParts).first().toLower(); | ||||
| +            QString data = str.split(": ", QString::SkipEmptyParts).last().trimmed(); | ||||
|              // there are one more time... | ||||
|              if ((metadata == "time") && (data.contains(':'))) { | ||||
|                  QStringList times = data.split(':'); | ||||
| diff --git a/sources/test/testawtelemetryhandler.cpp b/sources/test/testawtelemetryhandler.cpp | ||||
| index ffb0e79..b4181e0 100644 | ||||
| --- a/sources/test/testawtelemetryhandler.cpp | ||||
| +++ b/sources/test/testawtelemetryhandler.cpp | ||||
| @@ -51,7 +51,7 @@ void TestAWTelemetryHandler::test_get() | ||||
|      QStringList output = plugin->get(telemetryGroup); | ||||
|   | ||||
|      QVERIFY(!output.isEmpty()); | ||||
| -    QCOMPARE(QSet<QString>(output.cbegin(), output.cend()).count(), output.count()); | ||||
| +    QCOMPARE(QSet<QString>::fromList(output).count(), output.count()); | ||||
|      QVERIFY(output.contains(telemetryData)); | ||||
|  } | ||||
|   | ||||
| @ -2,11 +2,11 @@ | ||||
| Language:        Cpp | ||||
| AccessModifierOffset: -4 | ||||
| AlignAfterOpenBracket: Align | ||||
| AlignConsecutiveAssignments: false | ||||
| AlignConsecutiveAssignments: None | ||||
| AlignOperands:   true | ||||
| AlignTrailingComments: true | ||||
| AllowAllParametersOfDeclarationOnNextLine: true | ||||
| AllowShortBlocksOnASingleLine: false | ||||
| AllowShortBlocksOnASingleLine: Never | ||||
| AllowShortCaseLabelsOnASingleLine: false | ||||
| AllowShortFunctionsOnASingleLine: Inline | ||||
| AllowShortIfStatementsOnASingleLine: Never | ||||
| @ -20,7 +20,7 @@ BreakBeforeBinaryOperators: All | ||||
| BreakBeforeBraces: Linux | ||||
| BreakBeforeTernaryOperators: true | ||||
| BreakConstructorInitializersBeforeComma: true | ||||
| ColumnLimit:     100 | ||||
| ColumnLimit:     120 | ||||
| CommentPragmas:  '^ IWYU pragma:' | ||||
| ConstructorInitializerAllOnOneLineOrOnePerLine: false | ||||
| ConstructorInitializerIndentWidth: 4 | ||||
| @ -58,7 +58,7 @@ SpacesInContainerLiterals: true | ||||
| SpacesInCStyleCastParentheses: false | ||||
| SpacesInParentheses: false | ||||
| SpacesInSquareBrackets: false | ||||
| Standard:        Cpp11 | ||||
| Standard:        Latest | ||||
| TabWidth:        8 | ||||
| UseTab:          Never | ||||
| ... | ||||
|  | ||||
							
								
								
									
										1
									
								
								sources/3rdparty/fontdialog
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										1
									
								
								sources/3rdparty/fontdialog
									
									
									
									
										vendored
									
									
								
							 Submodule sources/3rdparty/fontdialog deleted from e7bcf8ee85
									
								
							
							
								
								
									
										165
									
								
								sources/3rdparty/fontdialog/COPYING
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										165
									
								
								sources/3rdparty/fontdialog/COPYING
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,165 @@ | ||||
| GNU LESSER GENERAL PUBLIC LICENSE | ||||
|                        Version 3, 29 June 2007 | ||||
|  | ||||
|  Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> | ||||
|  Everyone is permitted to copy and distribute verbatim copies | ||||
|  of this license document, but changing it is not allowed. | ||||
|  | ||||
|  | ||||
|   This version of the GNU Lesser General Public License incorporates | ||||
| the terms and conditions of version 3 of the GNU General Public | ||||
| License, supplemented by the additional permissions listed below. | ||||
|  | ||||
|   0. Additional Definitions. | ||||
|  | ||||
|   As used herein, "this License" refers to version 3 of the GNU Lesser | ||||
| General Public License, and the "GNU GPL" refers to version 3 of the GNU | ||||
| General Public License. | ||||
|  | ||||
|   "The Library" refers to a covered work governed by this License, | ||||
| other than an Application or a Combined Work as defined below. | ||||
|  | ||||
|   An "Application" is any work that makes use of an interface provided | ||||
| by the Library, but which is not otherwise based on the Library. | ||||
| Defining a subclass of a class defined by the Library is deemed a mode | ||||
| of using an interface provided by the Library. | ||||
|  | ||||
|   A "Combined Work" is a work produced by combining or linking an | ||||
| Application with the Library.  The particular version of the Library | ||||
| with which the Combined Work was made is also called the "Linked | ||||
| Version". | ||||
|  | ||||
|   The "Minimal Corresponding Source" for a Combined Work means the | ||||
| Corresponding Source for the Combined Work, excluding any source code | ||||
| for portions of the Combined Work that, considered in isolation, are | ||||
| based on the Application, and not on the Linked Version. | ||||
|  | ||||
|   The "Corresponding Application Code" for a Combined Work means the | ||||
| object code and/or source code for the Application, including any data | ||||
| and utility programs needed for reproducing the Combined Work from the | ||||
| Application, but excluding the System Libraries of the Combined Work. | ||||
|  | ||||
|   1. Exception to Section 3 of the GNU GPL. | ||||
|  | ||||
|   You may convey a covered work under sections 3 and 4 of this License | ||||
| without being bound by section 3 of the GNU GPL. | ||||
|  | ||||
|   2. Conveying Modified Versions. | ||||
|  | ||||
|   If you modify a copy of the Library, and, in your modifications, a | ||||
| facility refers to a function or data to be supplied by an Application | ||||
| that uses the facility (other than as an argument passed when the | ||||
| facility is invoked), then you may convey a copy of the modified | ||||
| version: | ||||
|  | ||||
|    a) under this License, provided that you make a good faith effort to | ||||
|    ensure that, in the event an Application does not supply the | ||||
|    function or data, the facility still operates, and performs | ||||
|    whatever part of its purpose remains meaningful, or | ||||
|  | ||||
|    b) under the GNU GPL, with none of the additional permissions of | ||||
|    this License applicable to that copy. | ||||
|  | ||||
|   3. Object Code Incorporating Material from Library Header Files. | ||||
|  | ||||
|   The object code form of an Application may incorporate material from | ||||
| a header file that is part of the Library.  You may convey such object | ||||
| code under terms of your choice, provided that, if the incorporated | ||||
| material is not limited to numerical parameters, data structure | ||||
| layouts and accessors, or small macros, inline functions and templates | ||||
| (ten or fewer lines in length), you do both of the following: | ||||
|  | ||||
|    a) Give prominent notice with each copy of the object code that the | ||||
|    Library is used in it and that the Library and its use are | ||||
|    covered by this License. | ||||
|  | ||||
|    b) Accompany the object code with a copy of the GNU GPL and this license | ||||
|    document. | ||||
|  | ||||
|   4. Combined Works. | ||||
|  | ||||
|   You may convey a Combined Work under terms of your choice that, | ||||
| taken together, effectively do not restrict modification of the | ||||
| portions of the Library contained in the Combined Work and reverse | ||||
| engineering for debugging such modifications, if you also do each of | ||||
| the following: | ||||
|  | ||||
|    a) Give prominent notice with each copy of the Combined Work that | ||||
|    the Library is used in it and that the Library and its use are | ||||
|    covered by this License. | ||||
|  | ||||
|    b) Accompany the Combined Work with a copy of the GNU GPL and this license | ||||
|    document. | ||||
|  | ||||
|    c) For a Combined Work that displays copyright notices during | ||||
|    execution, include the copyright notice for the Library among | ||||
|    these notices, as well as a reference directing the user to the | ||||
|    copies of the GNU GPL and this license document. | ||||
|  | ||||
|    d) Do one of the following: | ||||
|  | ||||
|        0) Convey the Minimal Corresponding Source under the terms of this | ||||
|        License, and the Corresponding Application Code in a form | ||||
|        suitable for, and under terms that permit, the user to | ||||
|        recombine or relink the Application with a modified version of | ||||
|        the Linked Version to produce a modified Combined Work, in the | ||||
|        manner specified by section 6 of the GNU GPL for conveying | ||||
|        Corresponding Source. | ||||
|  | ||||
|        1) Use a suitable shared library mechanism for linking with the | ||||
|        Library.  A suitable mechanism is one that (a) uses at run time | ||||
|        a copy of the Library already present on the user's computer | ||||
|        system, and (b) will operate properly with a modified version | ||||
|        of the Library that is interface-compatible with the Linked | ||||
|        Version. | ||||
|  | ||||
|    e) Provide Installation Information, but only if you would otherwise | ||||
|    be required to provide such information under section 6 of the | ||||
|    GNU GPL, and only to the extent that such information is | ||||
|    necessary to install and execute a modified version of the | ||||
|    Combined Work produced by recombining or relinking the | ||||
|    Application with a modified version of the Linked Version. (If | ||||
|    you use option 4d0, the Installation Information must accompany | ||||
|    the Minimal Corresponding Source and Corresponding Application | ||||
|    Code. If you use option 4d1, you must provide the Installation | ||||
|    Information in the manner specified by section 6 of the GNU GPL | ||||
|    for conveying Corresponding Source.) | ||||
|  | ||||
|   5. Combined Libraries. | ||||
|  | ||||
|   You may place library facilities that are a work based on the | ||||
| Library side by side in a single library together with other library | ||||
| facilities that are not Applications and are not covered by this | ||||
| License, and convey such a combined library under terms of your | ||||
| choice, if you do both of the following: | ||||
|  | ||||
|    a) Accompany the combined library with a copy of the same work based | ||||
|    on the Library, uncombined with any other library facilities, | ||||
|    conveyed under the terms of this License. | ||||
|  | ||||
|    b) Give prominent notice with the combined library that part of it | ||||
|    is a work based on the Library, and explaining where to find the | ||||
|    accompanying uncombined form of the same work. | ||||
|  | ||||
|   6. Revised Versions of the GNU Lesser General Public License. | ||||
|  | ||||
|   The Free Software Foundation may publish revised and/or new versions | ||||
| of the GNU Lesser General Public License from time to time. Such new | ||||
| versions will be similar in spirit to the present version, but may | ||||
| differ in detail to address new problems or concerns. | ||||
|  | ||||
|   Each version is given a distinguishing version number. If the | ||||
| Library as you received it specifies that a certain numbered version | ||||
| of the GNU Lesser General Public License "or any later version" | ||||
| applies to it, you have the option of following the terms and | ||||
| conditions either of that published version or of any later version | ||||
| published by the Free Software Foundation. If the Library as you | ||||
| received it does not specify a version number of the GNU Lesser | ||||
| General Public License, you may choose any version of the GNU Lesser | ||||
| General Public License ever published by the Free Software Foundation. | ||||
|  | ||||
|   If the Library as you received it specifies that a proxy can decide | ||||
| whether future versions of the GNU Lesser General Public License shall | ||||
| apply, that proxy's public statement of acceptance of any version is | ||||
| permanent authorization for you to choose that version for the | ||||
| Library. | ||||
							
								
								
									
										4
									
								
								sources/3rdparty/fontdialog/README.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								sources/3rdparty/fontdialog/README.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,4 @@ | ||||
| qtadds-fontdialog | ||||
| ================= | ||||
|  | ||||
| Font dialog which provides a font color settings | ||||
							
								
								
									
										140
									
								
								sources/3rdparty/fontdialog/fontdialog.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										140
									
								
								sources/3rdparty/fontdialog/fontdialog.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,140 @@ | ||||
| /*************************************************************************** | ||||
|  *  Copyright (C) 2014  Evgeniy Alekseev                                      * | ||||
|  *                                                                         * | ||||
|  *  This library is free software; you can redistribute it and/or          * | ||||
|  *  modify it under the terms of the GNU Lesser General Public             * | ||||
|  *  License as published by the Free Software Foundation; either           * | ||||
|  *  version 3.0 of the License, or (at your option) any later version.     * | ||||
|  *                                                                         * | ||||
|  *  This library is distributed in the hope that it will be useful,        * | ||||
|  *  but WITHOUT ANY WARRANTY; without even the implied warranty of         * | ||||
|  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU       * | ||||
|  *  Lesser General Public License for more details.                        * | ||||
|  *                                                                         * | ||||
|  *  You should have received a copy of the GNU Lesser General Public       * | ||||
|  *  License along with this library.                                       * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| #include "fontdialog.h" | ||||
|  | ||||
| #include <QGridLayout> | ||||
|  | ||||
|  | ||||
| CFont::CFont(const QString family, int pointSize, int weight, bool italic, QColor color) | ||||
|     : QFont(family, pointSize, weight, italic) | ||||
| { | ||||
|     setCurrentColor(color); | ||||
| } | ||||
|  | ||||
|  | ||||
| QColor CFont::color() | ||||
| { | ||||
|     return currentColor; | ||||
| } | ||||
|  | ||||
|  | ||||
| void CFont::setCurrentColor(const QColor color) | ||||
| { | ||||
|     currentColor = color; | ||||
| } | ||||
|  | ||||
|  | ||||
| CFont CFont::fromQFont(const QFont font, const QColor color) | ||||
| { | ||||
|     return CFont(font.family(), font.pointSize(), font.weight(), font.italic(), color); | ||||
| } | ||||
|  | ||||
|  | ||||
| QFont CFont::toQFont() | ||||
| { | ||||
|     return QFont(family(), pointSize(), weight(), italic()); | ||||
| } | ||||
|  | ||||
|  | ||||
| CFontDialog::CFontDialog(QWidget *parent, bool needWeight, bool needItalic) | ||||
|     : QDialog(parent) | ||||
| { | ||||
|     QGridLayout *mainGrid = new QGridLayout(this); | ||||
|     setLayout(mainGrid); | ||||
|  | ||||
|     colorBox = new QComboBox(this); | ||||
|     connect(colorBox, SIGNAL(currentIndexChanged(QString)), this, SLOT(updateColor(QString))); | ||||
|     QStringList colorNames = QColor::colorNames(); | ||||
|     int index = 0; | ||||
|     for (int i=0; i<colorNames.count(); i++) { | ||||
|         QColor color(colorNames[i]); | ||||
|         colorBox->addItem(colorNames[i], color); | ||||
|         QModelIndex idx = colorBox->model()->index(index++, 0); | ||||
|         colorBox->model()->setData(idx, color, Qt::BackgroundRole); | ||||
|     } | ||||
|     mainGrid->addWidget(colorBox, 0, 0); | ||||
|     fontBox = new QFontComboBox(this); | ||||
|     mainGrid->addWidget(fontBox, 0, 1); | ||||
|     sizeBox = new QSpinBox(this); | ||||
|     mainGrid->addWidget(sizeBox, 0, 2); | ||||
|     weightBox = new QSpinBox(this); | ||||
|     mainGrid->addWidget(weightBox, 0, 3); | ||||
|     italicBox = new QComboBox(this); | ||||
|     italicBox->addItem(tr("normal")); | ||||
|     italicBox->addItem(tr("italic")); | ||||
|     mainGrid->addWidget(italicBox, 0, 4); | ||||
|  | ||||
|     buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, | ||||
|                                    Qt::Horizontal, this); | ||||
|     QObject::connect(buttons, SIGNAL(accepted()), this, SLOT(accept())); | ||||
|     QObject::connect(buttons, SIGNAL(rejected()), this, SLOT(reject())); | ||||
|     mainGrid->addWidget(buttons, 1, 0, 1, 5); | ||||
|  | ||||
|     italicBox->setHidden(!needItalic); | ||||
|     weightBox->setHidden(!needWeight); | ||||
| } | ||||
|  | ||||
|  | ||||
| CFontDialog::~CFontDialog() | ||||
| { | ||||
|     delete colorBox; | ||||
|     delete buttons; | ||||
|     delete fontBox; | ||||
|     delete italicBox; | ||||
|     delete sizeBox; | ||||
|     delete weightBox; | ||||
| } | ||||
|  | ||||
|  | ||||
| void CFontDialog::updateColor(const QString color) | ||||
| { | ||||
|     colorBox->setStyleSheet(QString("background:%1").arg(QColor(color).name())); | ||||
| } | ||||
|  | ||||
|  | ||||
| CFont CFontDialog::getFont(const QString title, CFont defaultFont, bool needWeight, bool needItalic, int *status) | ||||
| { | ||||
|     CFontDialog dlg(0, needWeight, needItalic); | ||||
|  | ||||
|     dlg.setWindowTitle(title); | ||||
|     QStringList colorNames = QColor::colorNames(); | ||||
|     for (int i=0; i<colorNames.count(); i++) | ||||
|         if (QColor(colorNames[i]) == defaultFont.color()) { | ||||
|             dlg.colorBox->setCurrentIndex(i); | ||||
|             break; | ||||
|         } | ||||
|     dlg.fontBox->setCurrentFont(defaultFont); | ||||
|     dlg.sizeBox->setValue(defaultFont.pointSize()); | ||||
|     dlg.weightBox->setValue(defaultFont.weight()); | ||||
|     if (defaultFont.italic()) | ||||
|         dlg.italicBox->setCurrentIndex(1); | ||||
|     else | ||||
|         dlg.italicBox->setCurrentIndex(0); | ||||
|  | ||||
|     CFont font = CFont(defaultFont); | ||||
|     int ret = dlg.exec(); | ||||
|     if (ret == 1) | ||||
|         font = CFont(dlg.fontBox->currentFont().family(), | ||||
|                      dlg.sizeBox->value(), | ||||
|                      dlg.weightBox->value(), | ||||
|                      dlg.italicBox->currentIndex() == 1, | ||||
|                      QColor(dlg.colorBox->currentText())); | ||||
|     if (status != nullptr) | ||||
|         *status = ret; | ||||
|     return font; | ||||
| } | ||||
							
								
								
									
										77
									
								
								sources/3rdparty/fontdialog/fontdialog.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								sources/3rdparty/fontdialog/fontdialog.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,77 @@ | ||||
| /*************************************************************************** | ||||
|  *  Copyright (C) 2014  Evgeniy Alekseev                                      * | ||||
|  *                                                                         * | ||||
|  *  This library is free software; you can redistribute it and/or          * | ||||
|  *  modify it under the terms of the GNU Lesser General Public             * | ||||
|  *  License as published by the Free Software Foundation; either           * | ||||
|  *  version 3.0 of the License, or (at your option) any later version.     * | ||||
|  *                                                                         * | ||||
|  *  This library is distributed in the hope that it will be useful,        * | ||||
|  *  but WITHOUT ANY WARRANTY; without even the implied warranty of         * | ||||
|  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU       * | ||||
|  *  Lesser General Public License for more details.                        * | ||||
|  *                                                                         * | ||||
|  *  You should have received a copy of the GNU Lesser General Public       * | ||||
|  *  License along with this library.                                       * | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| #ifndef FONTDIALOG_H | ||||
| #define FONTDIALOG_H | ||||
|  | ||||
| #include <QComboBox> | ||||
| #include <QDialog> | ||||
| #include <QDialogButtonBox> | ||||
| #include <QFontComboBox> | ||||
| #include <QSpinBox> | ||||
|  | ||||
|  | ||||
| class CFont : public QFont | ||||
| { | ||||
| public: | ||||
|     explicit CFont(const QString family, int pointSize = -1, | ||||
|                    int weight = -1, bool italic = false, | ||||
|                    QColor color = QColor(QString("#000000"))); | ||||
|     // color properties | ||||
|     QColor color(); | ||||
|     void setCurrentColor(const QColor color); | ||||
|     // conversion to QFont | ||||
|     static CFont fromQFont(const QFont font, | ||||
|                            const QColor color = QColor(QString("#000000"))); | ||||
|     QFont toQFont(); | ||||
|  | ||||
| private: | ||||
|     QColor currentColor; | ||||
| }; | ||||
|  | ||||
|  | ||||
| class CFontDialog : public QDialog | ||||
| { | ||||
|     Q_OBJECT | ||||
|  | ||||
| public: | ||||
|     explicit CFontDialog(QWidget *parent = 0, | ||||
|                          const bool needWeight = true, | ||||
|                          const bool needItalic = true); | ||||
|     ~CFontDialog(); | ||||
|     static CFont getFont(const QString title = tr("Select font"), | ||||
|                          CFont defaultFont = CFont(QString("Arial"), | ||||
|                                                    12, 400, false, | ||||
|                                                    QColor(QString("#000000"))), | ||||
|                          const bool needWeight = true, | ||||
|                          const bool needItalic = true, | ||||
|                          int *status = nullptr); | ||||
|  | ||||
| private slots: | ||||
|     void updateColor(const QString color); | ||||
|  | ||||
| private: | ||||
|     QComboBox *colorBox; | ||||
|     QDialogButtonBox *buttons; | ||||
|     QFontComboBox *fontBox; | ||||
|     QComboBox *italicBox; | ||||
|     QSpinBox *sizeBox; | ||||
|     QSpinBox *weightBox; | ||||
| }; | ||||
|  | ||||
|  | ||||
| #endif /* FONTDIALOG_H */ | ||||
| @ -1,4 +1,4 @@ | ||||
| cmake_minimum_required(VERSION 2.8.12) | ||||
| cmake_minimum_required(VERSION 3.16.0) | ||||
|  | ||||
| # some fucking magic | ||||
| cmake_policy(SET CMP0011 NEW) | ||||
| @ -15,8 +15,8 @@ set(PROJECT_AUTHOR "Evgeniy Alekseev") | ||||
| set(PROJECT_CONTACT "esalexeev@gmail.com") | ||||
| set(PROJECT_LICENSE "GPL3") | ||||
| set(PROJECT_VERSION_MAJOR "3") | ||||
| set(PROJECT_VERSION_MINOR "4") | ||||
| set(PROJECT_VERSION_PATCH "3") | ||||
| set(PROJECT_VERSION_MINOR "5") | ||||
| set(PROJECT_VERSION_PATCH "1") | ||||
| set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}") | ||||
| # append git version if any | ||||
| set(PROJECT_COMMIT_SHA "Commit hash" CACHE INTERNAL "") | ||||
|  | ||||
| @ -41,25 +41,15 @@ QString AWDebug::getAboutText(const QString &_type) | ||||
|     } else if (_type == "description") { | ||||
|         text = i18n("A set of minimalistic plasmoid widgets"); | ||||
|     } else if (_type == "links") { | ||||
|         text = i18n("Links:") + "<ul>" | ||||
|                + QString("<li><a href=\"%1\">%2</a></li>").arg(HOMEPAGE).arg(i18n("Homepage")) | ||||
|         text = i18n("Links:") + "<ul>" + QString("<li><a href=\"%1\">%2</a></li>").arg(HOMEPAGE).arg(i18n("Homepage")) | ||||
|                + QString("<li><a href=\"%1\">%2</a></li>").arg(REPOSITORY).arg(i18n("Repository")) | ||||
|                + QString("<li><a href=\"%1\">%2</a></li>").arg(BUGTRACKER).arg(i18n("Bugtracker")) | ||||
|                + QString("<li><a href=\"%1\">%2</a></li>") | ||||
|                      .arg(TRANSLATION) | ||||
|                      .arg(i18n("Translation issue")) | ||||
|                + QString("<li><a href=\"%1\">%2</a></li>") | ||||
|                      .arg(AUR_PACKAGES) | ||||
|                      .arg(i18n("AUR packages")) | ||||
|                + QString("<li><a href=\"%1\">%2</a></li>") | ||||
|                      .arg(OPENSUSE_PACKAGES) | ||||
|                      .arg(i18n("openSUSE packages")) | ||||
|                + QString("<li><a href=\"%1\">%2</a></li>").arg(TRANSLATION).arg(i18n("Translation issue")) | ||||
|                + QString("<li><a href=\"%1\">%2</a></li>").arg(AUR_PACKAGES).arg(i18n("AUR packages")) | ||||
|                + QString("<li><a href=\"%1\">%2</a></li>").arg(OPENSUSE_PACKAGES).arg(i18n("openSUSE packages")) | ||||
|                + "</ul>"; | ||||
|     } else if (_type == "copy") { | ||||
|         text = QString("<small>© %1 <a href=\"mailto:%2\">%3</a><br>") | ||||
|                    .arg(DATE) | ||||
|                    .arg(EMAIL) | ||||
|                    .arg(AUTHOR) | ||||
|         text = QString("<small>© %1 <a href=\"mailto:%2\">%3</a><br>").arg(DATE).arg(EMAIL).arg(AUTHOR) | ||||
|                + i18nc("This software is licensed under %1", LICENSE) + "</small>"; | ||||
|     } else if (_type == "translators") { | ||||
|         QStringList translatorList = QString(TRANSLATORS).split(','); | ||||
| @ -114,8 +104,7 @@ QStringList AWDebug::getBuildData() | ||||
|     metadata.append(QString("    CMAKE_CXX_FLAGS: %1").arg(CMAKE_CXX_FLAGS)); | ||||
|     metadata.append(QString("    CMAKE_CXX_FLAGS_DEBUG: %1").arg(CMAKE_CXX_FLAGS_DEBUG)); | ||||
|     metadata.append(QString("    CMAKE_CXX_FLAGS_RELEASE: %1").arg(CMAKE_CXX_FLAGS_RELEASE)); | ||||
|     metadata.append( | ||||
|         QString("    CMAKE_CXX_FLAGS_OPTIMIZATION: %1").arg(CMAKE_CXX_FLAGS_OPTIMIZATION)); | ||||
|     metadata.append(QString("    CMAKE_CXX_FLAGS_OPTIMIZATION: %1").arg(CMAKE_CXX_FLAGS_OPTIMIZATION)); | ||||
|     metadata.append(QString("    CMAKE_DEFINITIONS: %1").arg(CMAKE_DEFINITIONS)); | ||||
|     metadata.append(QString("    CMAKE_INSTALL_PREFIX: %1").arg(CMAKE_INSTALL_PREFIX)); | ||||
|     metadata.append(QString("    CMAKE_MODULE_LINKER_FLAGS: %1").arg(CMAKE_MODULE_LINKER_FLAGS)); | ||||
|  | ||||
| @ -22,6 +22,5 @@ X-KDE-PluginInfo-Name=org.kde.plasma.awesomewidget | ||||
| X-KDE-PluginInfo-Version=@PROJECT_VERSION@ | ||||
| X-KDE-PluginInfo-Website=https://arcanis.me/projects/awesome-widgets/ | ||||
| X-KDE-PluginInfo-Category=System Information | ||||
| X-KDE-PluginInfo-Depends= | ||||
| X-KDE-PluginInfo-License=GPLv3 | ||||
| X-KDE-PluginInfo-EnabledByDefault=true | ||||
|  | ||||
							
								
								
									
										29
									
								
								sources/awesome-widget/metadata.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								sources/awesome-widget/metadata.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,29 @@ | ||||
| { | ||||
|     "KPlugin": { | ||||
|         "Authors": [ | ||||
|             { | ||||
|                 "Email": "esalexeev@gmail.com", | ||||
|                 "Name": "Evgeniy Alekseev aka arcanis" | ||||
|             } | ||||
|         ], | ||||
|         "Category": "System Information", | ||||
|         "Description": "A minimalistic Plasmoid", | ||||
|         "Description[en]": "A minimalistic Plasmoid", | ||||
|         "Description[es]": "Un script Plasmoïde minimaliste", | ||||
|         "Description[pt_BR]": "Um script Plasmoid", | ||||
|         "Description[ru]": "Минималистичный плазмоид", | ||||
|         "Description[uk]": "Мінімалістичний плазмоїд", | ||||
|         "EnabledByDefault": true, | ||||
|         "Icon": "utilities-system-monitor", | ||||
|         "Id": "org.kde.plasma.awesomewidget", | ||||
|         "License": "GPLv3", | ||||
|         "Name": "Awesome Widget", | ||||
|         "ServiceTypes": [ | ||||
|             "Plasma/Applet" | ||||
|         ], | ||||
|         "Version": "@PROJECT_VERSION@", | ||||
|         "Website": "https://arcanis.me/projects/awesome-widgets/" | ||||
|     }, | ||||
|     "X-Plasma-API": "declarativeappletscript", | ||||
|     "X-Plasma-MainScript": "ui/main.qml" | ||||
| } | ||||
| @ -3,25 +3,25 @@ | ||||
|  | ||||
|  | ||||
| # common QML constants | ||||
| singleton General 1.0 file:///usr/share/awesomewidgets/qml/General.qml | ||||
| singleton General 1.0 file:///usr//awesomewidgets/qml/General.qml | ||||
|  | ||||
| # custom QML UI classes | ||||
| AboutTab file:///usr/share/awesomewidgets/qml/AboutTab.qml | ||||
| AWExtensions file:///usr/share/awesomewidgets/qml/AWExtensions.qml | ||||
| AWInfoLabel file:///usr/share/awesomewidgets/qml/AWInfoLabel.qml | ||||
| AWTagSelector file:///usr/share/awesomewidgets/qml/AWTagSelector.qml | ||||
| AWTextEditor file:///usr/share/awesomewidgets/qml/AWTextEditor.qml | ||||
| BugReport file:///usr/share/awesomewidgets/qml/BugReport.qml | ||||
| ButtonSelector file:///usr/share/awesomewidgets/qml/ButtonSelector.qml | ||||
| CheckBoxSelector file:///usr/share/awesomewidgets/qml/CheckBoxSelector.qml | ||||
| ColorSelector file:///usr/share/awesomewidgets/qml/ColorSelector.qml | ||||
| ComboBoxSelector file:///usr/share/awesomewidgets/qml/ComboBoxSelector.qml | ||||
| ExportDialog file:///usr/share/awesomewidgets/qml/ExportDialog.qml | ||||
| FontSelector file:///usr/share/awesomewidgets/qml/FontSelector.qml | ||||
| HtmlDefaultFunctionsBar file:///usr/share/awesomewidgets/qml/HtmlDefaultFunctionsBar.qml | ||||
| HtmlEditorButton file:///usr/share/awesomewidgets/qml/HtmlEditorButton.qml | ||||
| HtmlEditorColor file:///usr/share/awesomewidgets/qml/HtmlEditorColor.qml | ||||
| HtmlEditorFont file:///usr/share/awesomewidgets/qml/HtmlEditorFont.qml | ||||
| ImportDialog file:///usr/share/awesomewidgets/qml/ImportDialog.qml | ||||
| IntegerSelector file:///usr/share/awesomewidgets/qml/IntegerSelector.qml | ||||
| LineSelector file:///usr/share/awesomewidgets/qml/LineSelector.qml | ||||
| AboutTab file:///usr//awesomewidgets/qml/AboutTab.qml | ||||
| AWExtensions file:///usr//awesomewidgets/qml/AWExtensions.qml | ||||
| AWInfoLabel file:///usr//awesomewidgets/qml/AWInfoLabel.qml | ||||
| AWTagSelector file:///usr//awesomewidgets/qml/AWTagSelector.qml | ||||
| AWTextEditor file:///usr//awesomewidgets/qml/AWTextEditor.qml | ||||
| BugReport file:///usr//awesomewidgets/qml/BugReport.qml | ||||
| ButtonSelector file:///usr//awesomewidgets/qml/ButtonSelector.qml | ||||
| CheckBoxSelector file:///usr//awesomewidgets/qml/CheckBoxSelector.qml | ||||
| ColorSelector file:///usr//awesomewidgets/qml/ColorSelector.qml | ||||
| ComboBoxSelector file:///usr//awesomewidgets/qml/ComboBoxSelector.qml | ||||
| ExportDialog file:///usr//awesomewidgets/qml/ExportDialog.qml | ||||
| FontSelector file:///usr//awesomewidgets/qml/FontSelector.qml | ||||
| HtmlDefaultFunctionsBar file:///usr//awesomewidgets/qml/HtmlDefaultFunctionsBar.qml | ||||
| HtmlEditorButton file:///usr//awesomewidgets/qml/HtmlEditorButton.qml | ||||
| HtmlEditorColor file:///usr//awesomewidgets/qml/HtmlEditorColor.qml | ||||
| HtmlEditorFont file:///usr//awesomewidgets/qml/HtmlEditorFont.qml | ||||
| ImportDialog file:///usr//awesomewidgets/qml/ImportDialog.qml | ||||
| IntegerSelector file:///usr//awesomewidgets/qml/IntegerSelector.qml | ||||
| LineSelector file:///usr//awesomewidgets/qml/LineSelector.qml | ||||
|  | ||||
| @ -19,9 +19,8 @@ X-Plasma-MainScript=ui/main.qml | ||||
| X-KDE-PluginInfo-Author=Evgeniy Alekseev aka arcanis | ||||
| X-KDE-PluginInfo-Email=esalexeev@gmail.com | ||||
| X-KDE-PluginInfo-Name=org.kde.plasma.awesomewidget | ||||
| X-KDE-PluginInfo-Version=3.4.3 | ||||
| X-KDE-PluginInfo-Version=3.5.1 | ||||
| X-KDE-PluginInfo-Website=https://arcanis.me/projects/awesome-widgets/ | ||||
| X-KDE-PluginInfo-Category=System Information | ||||
| X-KDE-PluginInfo-Depends= | ||||
| X-KDE-PluginInfo-License=GPLv3 | ||||
| X-KDE-PluginInfo-EnabledByDefault=true | ||||
|  | ||||
| @ -7,17 +7,17 @@ include_directories( | ||||
|         ${CMAKE_CURRENT_SOURCE_DIR}/../../${PROJECT_LIBRARY}/ | ||||
|         ${PROJECT_TRDPARTY_DIR} | ||||
|         ${Qt_INCLUDE} | ||||
|         ${Kf5_INCLUDE} | ||||
|         ${Kf6_INCLUDE} | ||||
| ) | ||||
|  | ||||
| file(GLOB SUBPROJECT_SOURCE *.cpp ${PROJECT_TRDPARTY_DIR}/fontdialog/*.cpp ${CMAKE_SOURCE_DIR}/*.cpp) | ||||
| file(GLOB SUBPROJECT_UI *.ui) | ||||
| file(GLOB SUBPROJECT_NOTIFY *.notifyrc) | ||||
|  | ||||
| qt5_wrap_ui(SUBPROJECT_UI_HEADER ${SUBPROJECT_UI}) | ||||
| qt6_wrap_ui(SUBPROJECT_UI_HEADER ${SUBPROJECT_UI}) | ||||
| add_library(${PLUGIN_NAME} SHARED ${SUBPROJECT_SOURCE} ${SUBPROJECT_UI_HEADER}) | ||||
| target_link_libraries(${PLUGIN_NAME} ${PROJECT_LIBRARY} ${Qt_LIBRARIES} ${Kf5_LIBRARIES}) | ||||
| target_link_libraries(${PLUGIN_NAME} ${PROJECT_LIBRARY} ${Qt_LIBRARIES} ${Kf6_LIBRARIES}) | ||||
|  | ||||
| install(TARGETS ${PLUGIN_NAME} DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/awesomewidget) | ||||
| install(FILES qmldir DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/awesomewidget) | ||||
| install(FILES ${SUBPROJECT_NOTIFY} DESTINATION ${KNOTIFYRC_INSTALL_DIR}) | ||||
| install(FILES ${SUBPROJECT_NOTIFY} DESTINATION ${KDE_INSTALL_KNOTIFYRCDIR}) | ||||
|  | ||||
| @ -107,8 +107,7 @@ void AWAbstractPairConfig::updateUi() | ||||
| void AWAbstractPairConfig::addSelector(const QStringList &_keys, const QStringList &_values, | ||||
|                                        const QPair<QString, QString> &_current) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Add selector with keys" << _keys << "values" << _values | ||||
|                     << "and current ones" << _current; | ||||
|     qCDebug(LOG_AW) << "Add selector with keys" << _keys << "values" << _values << "and current ones" << _current; | ||||
|  | ||||
|     auto *selector = new AWAbstractSelector(ui->scrollAreaWidgetContents, m_editable); | ||||
|     selector->init(_keys, _values, _current); | ||||
|  | ||||
| @ -35,8 +35,7 @@ class AWAbstractPairConfig : public QDialog | ||||
|     Q_OBJECT | ||||
|  | ||||
| public: | ||||
|     explicit AWAbstractPairConfig(QWidget *_parent = nullptr, bool _hasEdit = false, | ||||
|                                   QStringList _keys = QStringList()); | ||||
|     explicit AWAbstractPairConfig(QWidget *_parent = nullptr, bool _hasEdit = false, QStringList _keys = QStringList()); | ||||
|     ~AWAbstractPairConfig() override; | ||||
|     template <class T> void initHelper() | ||||
|     { | ||||
| @ -62,8 +61,7 @@ private: | ||||
|     bool m_hasEdit = false; | ||||
|     QStringList m_keys; | ||||
|     // methods | ||||
|     void addSelector(const QStringList &_keys, const QStringList &_values, | ||||
|                      const QPair<QString, QString> &_current); | ||||
|     void addSelector(const QStringList &_keys, const QStringList &_values, const QPair<QString, QString> &_current); | ||||
|     void clearSelectors(); | ||||
|     void execDialog(); | ||||
|     [[nodiscard]] QPair<QStringList, QStringList> initKeys() const; | ||||
|  | ||||
| @ -61,7 +61,7 @@ QStringList AWAbstractPairHelper::values() const | ||||
| QSet<QString> AWAbstractPairHelper::valuesSet() const | ||||
| { | ||||
|     auto values = m_pairs.values(); | ||||
|     return QSet(values.cbegin(), values.cend()); | ||||
|     return {values.cbegin(), values.cend()}; | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -69,8 +69,7 @@ void AWAbstractPairHelper::initItems() | ||||
| { | ||||
|     m_pairs.clear(); | ||||
|  | ||||
|     QStringList configs | ||||
|         = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, m_filePath); | ||||
|     QStringList configs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, m_filePath); | ||||
|  | ||||
|     for (auto &fileName : configs) { | ||||
|         QSettings settings(fileName, QSettings::IniFormat); | ||||
| @ -80,8 +79,7 @@ void AWAbstractPairHelper::initItems() | ||||
|         QStringList keys = settings.childKeys(); | ||||
|         for (auto &key : keys) { | ||||
|             QString value = settings.value(key).toString(); | ||||
|             qCInfo(LOG_AW) << "Found key" << key << "for value" << value << "in" | ||||
|                            << settings.fileName(); | ||||
|             qCInfo(LOG_AW) << "Found key" << key << "for value" << value << "in" << settings.fileName(); | ||||
|             if (value.isEmpty()) { | ||||
|                 qCInfo(LOG_AW) << "Skip empty value for" << key; | ||||
|                 continue; | ||||
| @ -98,9 +96,7 @@ bool AWAbstractPairHelper::writeItems(const QHash<QString, QString> &_configurat | ||||
|     qCDebug(LOG_AW) << "Write configuration" << _configuration; | ||||
|  | ||||
|     QString fileName | ||||
|         = QString("%1/%2") | ||||
|               .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)) | ||||
|               .arg(m_filePath); | ||||
|         = QString("%1/%2").arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)).arg(m_filePath); | ||||
|     QSettings settings(fileName, QSettings::IniFormat); | ||||
|     qCInfo(LOG_AW) << "Configuration file" << fileName; | ||||
|  | ||||
| @ -120,9 +116,7 @@ bool AWAbstractPairHelper::removeUnusedKeys(const QStringList &_keys) const | ||||
|     qCDebug(LOG_AW) << "Remove keys" << _keys; | ||||
|  | ||||
|     QString fileName | ||||
|         = QString("%1/%2") | ||||
|               .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)) | ||||
|               .arg(m_filePath); | ||||
|         = QString("%1/%2").arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)).arg(m_filePath); | ||||
|     QSettings settings(fileName, QSettings::IniFormat); | ||||
|     qCInfo(LOG_AW) << "Configuration file" << fileName; | ||||
|  | ||||
|  | ||||
| @ -60,8 +60,8 @@ void AWAbstractSelector::init(const QStringList &_keys, const QStringList &_valu | ||||
|         qCWarning(LOG_AW) << "Invalid current value" << _current << "not found in default ones"; | ||||
|         return; | ||||
|     } | ||||
|     qCDebug(LOG_AW) << "Init selector with keys" << _keys << "and values" << _values | ||||
|                     << "and current ones are" << _current; | ||||
|     qCDebug(LOG_AW) << "Init selector with keys" << _keys << "and values" << _values << "and current ones are" | ||||
|                     << _current; | ||||
|  | ||||
|     // set data | ||||
|     ui->comboBox_key->clear(); | ||||
|  | ||||
| @ -32,12 +32,10 @@ class AWAbstractSelector : public QWidget | ||||
|     Q_OBJECT | ||||
|  | ||||
| public: | ||||
|     explicit AWAbstractSelector(QWidget *_parent = nullptr, | ||||
|                                 const QPair<bool, bool> &_editable = {false, false}); | ||||
|     explicit AWAbstractSelector(QWidget *_parent = nullptr, const QPair<bool, bool> &_editable = {false, false}); | ||||
|     ~AWAbstractSelector() override; | ||||
|     [[nodiscard]] QPair<QString, QString> current() const; | ||||
|     void init(const QStringList &_keys, const QStringList &_values, | ||||
|               const QPair<QString, QString> &_current); | ||||
|     void init(const QStringList &_keys, const QStringList &_values, const QPair<QString, QString> &_current); | ||||
|  | ||||
| signals: | ||||
|     void selectionChanged(); | ||||
|  | ||||
| @ -124,8 +124,8 @@ QVariantMap AWActions::getFont(const QVariantMap &_defaultFont) | ||||
|  | ||||
|     QVariantMap fontMap; | ||||
|     int ret = 0; | ||||
|     CFont defaultCFont = CFont(_defaultFont["family"].toString(), _defaultFont["size"].toInt(), 400, | ||||
|                                false, _defaultFont["color"].toString()); | ||||
|     CFont defaultCFont = CFont(_defaultFont["family"].toString(), _defaultFont["size"].toInt(), 400, false, | ||||
|                                _defaultFont["color"].toString()); | ||||
|     CFont font = CFontDialog::getFont(i18n("Select font"), defaultCFont, false, false, &ret); | ||||
|  | ||||
|     fontMap["applied"] = ret; | ||||
|  | ||||
| @ -44,13 +44,12 @@ AWBugReporter::~AWBugReporter() | ||||
| void AWBugReporter::doConnect() | ||||
| { | ||||
|     // additional method for testing needs | ||||
|     connect(this, SIGNAL(replyReceived(const int, const QString &)), this, | ||||
|             SLOT(showInformation(int, const QString &))); | ||||
|     connect(this, SIGNAL(replyReceived(const int, const QString &)), this, SLOT(showInformation(int, const QString &))); | ||||
| } | ||||
|  | ||||
|  | ||||
| QString AWBugReporter::generateText(const QString &_description, const QString &_reproduce, | ||||
|                                     const QString &_expected, const QString &_logs) | ||||
| QString AWBugReporter::generateText(const QString &_description, const QString &_reproduce, const QString &_expected, | ||||
|                                     const QString &_logs) | ||||
| { | ||||
|     // do not log _logs here, it may have quite large size | ||||
|     qCDebug(LOG_AW) << "Generate text with description" << _description << "steps" << _reproduce | ||||
| @ -73,8 +72,7 @@ void AWBugReporter::sendBugReport(const QString &_title, const QString &_body) | ||||
|     qCDebug(LOG_AW) << "Send bug report with title" << _title << "and body" << _body; | ||||
|  | ||||
|     auto *manager = new QNetworkAccessManager(nullptr); | ||||
|     connect(manager, SIGNAL(finished(QNetworkReply *)), this, | ||||
|             SLOT(issueReplyRecieved(QNetworkReply *))); | ||||
|     connect(manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(issueReplyRecieved(QNetworkReply *))); | ||||
|  | ||||
|     QNetworkRequest request = QNetworkRequest(QUrl(BUGTRACKER_API)); | ||||
|     request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); | ||||
| @ -95,8 +93,7 @@ void AWBugReporter::sendBugReport(const QString &_title, const QString &_body) | ||||
| void AWBugReporter::issueReplyRecieved(QNetworkReply *_reply) | ||||
| { | ||||
|     if (_reply->error() != QNetworkReply::NoError) { | ||||
|         qCWarning(LOG_AW) << "An error occurs" << _reply->error() << "with message" | ||||
|                           << _reply->errorString(); | ||||
|         qCWarning(LOG_AW) << "An error occurs" << _reply->error() << "with message" << _reply->errorString(); | ||||
|         return emit(replyReceived(0, "")); | ||||
|     } | ||||
|  | ||||
|  | ||||
| @ -38,7 +38,7 @@ public: | ||||
|     Q_INVOKABLE void sendBugReport(const QString &_title, const QString &_body); | ||||
|  | ||||
| signals: | ||||
|     void replyReceived(const int _number, const QString &_url); | ||||
|     void replyReceived(int _number, const QString &_url); | ||||
|  | ||||
| private slots: | ||||
|     void issueReplyRecieved(QNetworkReply *_reply); | ||||
|  | ||||
| @ -21,7 +21,6 @@ | ||||
| #include <QQmlPropertyMap> | ||||
| #include <QSettings> | ||||
| #include <QStandardPaths> | ||||
| #include <QTextCodec> | ||||
|  | ||||
| #include "awdebug.h" | ||||
|  | ||||
| @ -31,8 +30,7 @@ AWConfigHelper::AWConfigHelper(QObject *_parent) | ||||
| { | ||||
|     qCDebug(LOG_AW) << __PRETTY_FUNCTION__; | ||||
|  | ||||
|     m_baseDir = QString("%1/awesomewidgets") | ||||
|                     .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)); | ||||
|     m_baseDir = QString("%1/awesomewidgets").arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -45,9 +43,8 @@ AWConfigHelper::~AWConfigHelper() | ||||
| QString AWConfigHelper::configurationDirectory() | ||||
| { | ||||
|     // get readable directory | ||||
|     QString localDir | ||||
|         = QString("%1/awesomewidgets/configs") | ||||
|               .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)); | ||||
|     QString localDir = QString("%1/awesomewidgets/configs") | ||||
|                            .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)); | ||||
|  | ||||
|     // create directory and copy files from default settings | ||||
|     QDir localDirectory; | ||||
| @ -63,8 +60,7 @@ QString AWConfigHelper::configurationDirectory() | ||||
| bool AWConfigHelper::dropCache() | ||||
| { | ||||
|     QString fileName | ||||
|         = QString("%1/awesomewidgets.ndx") | ||||
|               .arg(QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation)); | ||||
|         = QString("%1/awesomewidgets.ndx").arg(QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation)); | ||||
|  | ||||
|     return QFile(fileName).remove(); | ||||
| } | ||||
| @ -88,8 +84,8 @@ bool AWConfigHelper::exportConfiguration(QObject *_nativeConfig, const QString & | ||||
|  | ||||
|     // extensions | ||||
|     for (auto &item : m_dirs) { | ||||
|         QStringList items = QDir(QString("%1/%2").arg(m_baseDir).arg(item)) | ||||
|                                 .entryList(QStringList() << "*.desktop", QDir::Files); | ||||
|         QStringList items | ||||
|             = QDir(QString("%1/%2").arg(m_baseDir).arg(item)).entryList(QStringList() << "*.desktop", QDir::Files); | ||||
|         settings.beginGroup(item); | ||||
|         for (auto &it : items) | ||||
|             copyExtensions(it, item, settings, false); | ||||
| @ -99,11 +95,9 @@ bool AWConfigHelper::exportConfiguration(QObject *_nativeConfig, const QString & | ||||
|     // additional files | ||||
|     settings.beginGroup("json"); | ||||
|     // script filters | ||||
|     readFile(settings, "filters", | ||||
|              QString("%1/scripts/awesomewidgets-extscripts-filters.json").arg(m_baseDir)); | ||||
|     readFile(settings, "filters", QString("%1/scripts/awesomewidgets-extscripts-filters.json").arg(m_baseDir)); | ||||
|     // weather icon settings | ||||
|     readFile(settings, "weathers", | ||||
|              QString("%1/weather/awesomewidgets-extweather-ids.json").arg(m_baseDir)); | ||||
|     readFile(settings, "weathers", QString("%1/weather/awesomewidgets-extweather-ids.json").arg(m_baseDir)); | ||||
|     settings.endGroup(); | ||||
|  | ||||
|     settings.beginGroup("ini"); | ||||
| @ -120,10 +114,8 @@ bool AWConfigHelper::exportConfiguration(QObject *_nativeConfig, const QString & | ||||
| } | ||||
|  | ||||
|  | ||||
| QVariantMap AWConfigHelper::importConfiguration(const QString &_fileName, | ||||
|                                                 const bool _importPlasmoid, | ||||
|                                                 const bool _importExtensions, | ||||
|                                                 const bool _importAdds) const | ||||
| QVariantMap AWConfigHelper::importConfiguration(const QString &_fileName, const bool _importPlasmoid, | ||||
|                                                 const bool _importExtensions, const bool _importAdds) const | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Selected filename" << _fileName; | ||||
|  | ||||
| @ -144,11 +136,9 @@ QVariantMap AWConfigHelper::importConfiguration(const QString &_fileName, | ||||
|     if (_importAdds) { | ||||
|         settings.beginGroup("json"); | ||||
|         // script filters | ||||
|         writeFile(settings, "filters", | ||||
|                   QString("%1/scripts/awesomewidgets-extscripts-filters.json").arg(m_baseDir)); | ||||
|         writeFile(settings, "filters", QString("%1/scripts/awesomewidgets-extscripts-filters.json").arg(m_baseDir)); | ||||
|         // weather icon settings | ||||
|         writeFile(settings, "weathers", | ||||
|                   QString("%1/weather/awesomewidgets-extweather-ids.json").arg(m_baseDir)); | ||||
|         writeFile(settings, "weathers", QString("%1/weather/awesomewidgets-extweather-ids.json").arg(m_baseDir)); | ||||
|         settings.endGroup(); | ||||
|  | ||||
|         settings.beginGroup("ini"); | ||||
| @ -173,8 +163,7 @@ QVariantMap AWConfigHelper::importConfiguration(const QString &_fileName, | ||||
|  | ||||
| QVariantMap AWConfigHelper::readDataEngineConfiguration() | ||||
| { | ||||
|     QString fileName = QStandardPaths::locate(QStandardPaths::ConfigLocation, | ||||
|                                               "plasma-dataengine-extsysmon.conf"); | ||||
|     QString fileName = QStandardPaths::locate(QStandardPaths::ConfigLocation, "plasma-dataengine-extsysmon.conf"); | ||||
|     qCInfo(LOG_AW) << "Configuration file" << fileName; | ||||
|     QSettings settings(fileName, QSettings::IniFormat); | ||||
|     QVariantMap configuration; | ||||
| @ -228,9 +217,8 @@ void AWConfigHelper::copyConfigs(const QString &_localDir) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Local directory" << _localDir; | ||||
|  | ||||
|     QStringList dirs | ||||
|         = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, "awesomewidgets/configs", | ||||
|                                     QStandardPaths::LocateDirectory); | ||||
|     QStringList dirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, "awesomewidgets/configs", | ||||
|                                                  QStandardPaths::LocateDirectory); | ||||
|     for (auto &dir : dirs) { | ||||
|         if (dir == _localDir) | ||||
|             continue; | ||||
| @ -238,21 +226,19 @@ void AWConfigHelper::copyConfigs(const QString &_localDir) | ||||
|         for (auto &source : files) { | ||||
|             QString destination = QString("%1/%2").arg(_localDir).arg(source); | ||||
|             bool status = QFile::copy(QString("%1/%2").arg(dir).arg(source), destination); | ||||
|             qCInfo(LOG_AW) << "File" << source << "has been copied to" << destination | ||||
|                            << "with status" << status; | ||||
|             qCInfo(LOG_AW) << "File" << source << "has been copied to" << destination << "with status" << status; | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWConfigHelper::copyExtensions(const QString &_item, const QString &_type, | ||||
|                                     QSettings &_settings, const bool _inverse) const | ||||
| void AWConfigHelper::copyExtensions(const QString &_item, const QString &_type, QSettings &_settings, | ||||
|                                     const bool _inverse) const | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Extension" << _item << "has type" << _type << "inverse copying" << _inverse; | ||||
|  | ||||
|     _settings.beginGroup(_item); | ||||
|     QSettings itemSettings(QString("%1/%2/%3").arg(m_baseDir).arg(_type).arg(_item), | ||||
|                            QSettings::IniFormat); | ||||
|     QSettings itemSettings(QString("%1/%2/%3").arg(m_baseDir).arg(_type).arg(_item), QSettings::IniFormat); | ||||
|     itemSettings.beginGroup("Desktop Entry"); | ||||
|     if (_inverse) | ||||
|         copySettings(_settings, itemSettings); | ||||
| @ -298,7 +284,6 @@ void AWConfigHelper::writeFile(QSettings &_settings, const QString &_key, const | ||||
|     QFile file(_fileName); | ||||
|     if (file.open(QIODevice::WriteOnly | QIODevice::Text)) { | ||||
|         QTextStream out(&file); | ||||
|         out.setCodec("UTF-8"); | ||||
|         out << _settings.value(_key).toString().toUtf8(); | ||||
|         out.flush(); | ||||
|         file.close(); | ||||
|  | ||||
| @ -35,10 +35,8 @@ public: | ||||
|     Q_INVOKABLE [[nodiscard]] static QString configurationDirectory(); | ||||
|     Q_INVOKABLE static bool dropCache(); | ||||
|     Q_INVOKABLE bool exportConfiguration(QObject *_nativeConfig, const QString &_fileName) const; | ||||
|     Q_INVOKABLE [[nodiscard]] QVariantMap importConfiguration(const QString &_fileName, | ||||
|                                                               bool _importPlasmoid, | ||||
|                                                               bool _importExtensions, | ||||
|                                                               bool _importAdds) const; | ||||
|     Q_INVOKABLE [[nodiscard]] QVariantMap importConfiguration(const QString &_fileName, bool _importPlasmoid, | ||||
|                                                               bool _importExtensions, bool _importAdds) const; | ||||
|     // dataengine | ||||
|     Q_INVOKABLE static QVariantMap readDataEngineConfiguration(); | ||||
|     Q_INVOKABLE static bool writeDataEngineConfiguration(const QVariantMap &_configuration); | ||||
| @ -46,8 +44,7 @@ public: | ||||
| private: | ||||
|     // methods | ||||
|     static void copyConfigs(const QString &_localDir); | ||||
|     void copyExtensions(const QString &_item, const QString &_type, QSettings &_settings, | ||||
|                         bool _inverse) const; | ||||
|     void copyExtensions(const QString &_item, const QString &_type, QSettings &_settings, bool _inverse) const; | ||||
|     static void copySettings(QSettings &_from, QSettings &_to); | ||||
|     static void readFile(QSettings &_settings, const QString &_key, const QString &_fileName); | ||||
|     static void writeFile(QSettings &_settings, const QString &_key, const QString &_fileName); | ||||
|  | ||||
| @ -27,8 +27,7 @@ class AWCustomKeysConfig : public AWAbstractPairConfig | ||||
|     Q_OBJECT | ||||
|  | ||||
| public: | ||||
|     explicit AWCustomKeysConfig(QWidget *_parent = nullptr, | ||||
|                                 const QStringList &_keys = QStringList()); | ||||
|     explicit AWCustomKeysConfig(QWidget *_parent = nullptr, const QStringList &_keys = QStringList()); | ||||
|     ~AWCustomKeysConfig() override; | ||||
| }; | ||||
|  | ||||
|  | ||||
| @ -74,5 +74,5 @@ QStringList AWCustomKeysHelper::leftKeys() | ||||
|  | ||||
| QStringList AWCustomKeysHelper::rightKeys() | ||||
| { | ||||
|     return QStringList(); | ||||
|     return {}; | ||||
| } | ||||
|  | ||||
| @ -61,8 +61,7 @@ QString AWDataAggregator::htmlImage(const QPixmap &_source) | ||||
|     _source.save(&buffer, "PNG"); | ||||
|  | ||||
|     return byteArray.isEmpty() ? "" | ||||
|                                : QString("<img src=\"data:image/png;base64,%1\"/>") | ||||
|                                      .arg(QString(byteArray.toBase64())); | ||||
|                                : QString("<img src=\"data:image/png;base64,%1\"/>").arg(QString(byteArray.toBase64())); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -102,10 +101,9 @@ void AWDataAggregator::setParameters(const QVariantMap &_settings) | ||||
|         requiredKeys.append("batTooltip"); | ||||
|  | ||||
|     // background | ||||
|     m_toolTipScene->setBackgroundBrush( | ||||
|         m_configuration["useTooltipBackground"].toBool() | ||||
|             ? QBrush(QColor(m_configuration["tooltipBackground"].toString())) | ||||
|             : QBrush(Qt::NoBrush)); | ||||
|     m_toolTipScene->setBackgroundBrush(m_configuration["useTooltipBackground"].toBool() | ||||
|                                            ? QBrush(QColor(m_configuration["tooltipBackground"].toString())) | ||||
|                                            : QBrush(Qt::NoBrush)); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -156,11 +154,10 @@ void AWDataAggregator::dataUpdate(const QVariantHash &_values) | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWDataAggregator::checkValue(const QString &_source, const float _value, | ||||
|                                   const float _extremum) const | ||||
| void AWDataAggregator::checkValue(const QString &_source, const float _value, const float _extremum) const | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Notification source" << _source << "with value" << _value | ||||
|                     << "called with extremum" << _extremum; | ||||
|     qCDebug(LOG_AW) << "Notification source" << _source << "with value" << _value << "called with extremum" | ||||
|                     << _extremum; | ||||
|  | ||||
|     if (_value >= 0.0) { | ||||
|         if ((m_enablePopup) && (_value > _extremum) && (m_values[_source].last() < _extremum)) | ||||
| @ -172,11 +169,10 @@ void AWDataAggregator::checkValue(const QString &_source, const float _value, | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWDataAggregator::checkValue(const QString &_source, const QString &_current, | ||||
|                                   const QString &_received) const | ||||
| void AWDataAggregator::checkValue(const QString &_source, const QString &_current, const QString &_received) const | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Notification source" << _source << "with current value" << _current | ||||
|                     << "and received one" << _received; | ||||
|     qCDebug(LOG_AW) << "Notification source" << _source << "with current value" << _current << "and received one" | ||||
|                     << _received; | ||||
|  | ||||
|     if ((m_enablePopup) && (_current != _received) && (!_received.isEmpty())) | ||||
|         return AWActions::sendNotification("event", notificationText(_source, _received)); | ||||
| @ -231,8 +227,7 @@ void AWDataAggregator::setData(const QVariantHash &_values) | ||||
| { | ||||
|     // do not log these arguments | ||||
|     // battery update requires info is AC online or not | ||||
|     setData(_values["ac"].toString() == m_configuration["acOnline"], "batTooltip", | ||||
|             _values["bat"].toFloat()); | ||||
|     setData(_values["ac"].toString() == m_configuration["acOnline"], "batTooltip", _values["bat"].toFloat()); | ||||
|     // usual case | ||||
|     setData("cpuTooltip", _values["cpu"].toFloat(), 90.0); | ||||
|     setData("cpuclTooltip", _values["cpucl"].toFloat()); | ||||
| @ -269,8 +264,7 @@ void AWDataAggregator::setData(const QString &_source, float _value, const float | ||||
|         QList<float> netValues = m_values["downkbTooltip"] + m_values["upkbTooltip"]; | ||||
|         // to avoid inf value of normY | ||||
|         netValues << 1.0; | ||||
|         m_boundaries["downkbTooltip"] | ||||
|             = 1.2f * *std::max_element(netValues.cbegin(), netValues.cend()); | ||||
|         m_boundaries["downkbTooltip"] = 1.2f * *std::max_element(netValues.cbegin(), netValues.cend()); | ||||
|         m_boundaries["upkbTooltip"] = m_boundaries["downkbTooltip"]; | ||||
|     } | ||||
| } | ||||
| @ -278,8 +272,7 @@ void AWDataAggregator::setData(const QString &_source, float _value, const float | ||||
|  | ||||
| void AWDataAggregator::setData(const bool _dontInvert, const QString &_source, float _value) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Do not invert" << _dontInvert << "value" << _value << "for source" | ||||
|                     << _source; | ||||
|     qCDebug(LOG_AW) << "Do not invert" << _dontInvert << "value" << _value << "for source" << _source; | ||||
|  | ||||
|     // invert values for different battery colours | ||||
|     _value = _dontInvert ? _value : -_value; | ||||
|  | ||||
| @ -50,8 +50,7 @@ private: | ||||
|     QGraphicsScene *m_toolTipScene = nullptr; | ||||
|     QGraphicsView *m_toolTipView = nullptr; | ||||
|     void checkValue(const QString &_source, float _value, float _extremum) const; | ||||
|     void checkValue(const QString &_source, const QString &_current, | ||||
|                     const QString &_received) const; | ||||
|     void checkValue(const QString &_source, const QString &_current, const QString &_received) const; | ||||
|     void initScene(); | ||||
|     static QString notificationText(const QString &_source, float _value); | ||||
|     static QString notificationText(const QString &_source, const QString &_value); | ||||
|  | ||||
| @ -17,10 +17,10 @@ | ||||
|  | ||||
| #include "awdataengineaggregator.h" | ||||
|  | ||||
| #include <Plasma/DataContainer> | ||||
| #include <QDBusConnection> | ||||
| #include <ksysguard/systemstats/DBusInterface.h> | ||||
|  | ||||
| #include "awdebug.h" | ||||
| #include "awkeys.h" | ||||
|  | ||||
|  | ||||
| AWDataEngineAggregator::AWDataEngineAggregator(QObject *_parent) | ||||
| @ -28,21 +28,19 @@ AWDataEngineAggregator::AWDataEngineAggregator(QObject *_parent) | ||||
| { | ||||
|     qCDebug(LOG_AW) << __PRETTY_FUNCTION__; | ||||
|  | ||||
|     m_consumer = new Plasma::DataEngineConsumer(); | ||||
|     m_dataEngines["systemmonitor"] = m_consumer->dataEngine("systemmonitor"); | ||||
|     m_dataEngines["extsysmon"] = m_consumer->dataEngine("extsysmon"); | ||||
|     m_dataEngines["time"] = m_consumer->dataEngine("time"); | ||||
|     qDBusRegisterMetaType<KSysGuard::SensorData>(); | ||||
|     qDBusRegisterMetaType<KSysGuard::SensorInfo>(); | ||||
|     qDBusRegisterMetaType<KSysGuard::SensorDataList>(); | ||||
|     qDBusRegisterMetaType<QHash<QString, KSysGuard::SensorInfo>>(); | ||||
|  | ||||
|     // additional method required by systemmonitor structure | ||||
|     m_newSourceConnection | ||||
|         = connect(m_dataEngines["systemmonitor"], &Plasma::DataEngine::sourceAdded, | ||||
|                   [this](const QString &source) { | ||||
|                       emit(deviceAdded(source)); | ||||
|                       m_dataEngines["systemmonitor"]->connectSource(source, parent(), 1000); | ||||
|                   }); | ||||
|  | ||||
|     // required to define Qt::QueuedConnection for signal-slot connection | ||||
|     qRegisterMetaType<Plasma::DataEngine::Data>("Plasma::DataEngine::Data"); | ||||
|     m_interface = new KSysGuard::SystemStats::DBusInterface( | ||||
|             KSysGuard::SystemStats::ServiceName, KSysGuard::SystemStats::ObjectPath, QDBusConnection::sessionBus(), this); | ||||
|     connect(m_interface, SIGNAL(newSensorData(KSysGuard::SensorDataList)), this, | ||||
|             SLOT(updateData(KSysGuard::SensorDataList))); | ||||
|     connect(m_interface, SIGNAL(sensorAdded(const QString &)), this, SLOT(sensorAdded(const QString &))); | ||||
|     connect(m_interface, SIGNAL(sensorMetaDataChanged(const QHash<QString, KSysGuard::SensorInfo> &)), this, | ||||
|             SLOT(updateSensor(const QHash<QString, KSysGuard::SensorInfo> &))); | ||||
|     connect(m_interface, SIGNAL(sensorRemoved(const QString &)), this, SLOT(sensorRemoved(const QString &))); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -56,65 +54,5 @@ AWDataEngineAggregator::~AWDataEngineAggregator() | ||||
|  | ||||
| void AWDataEngineAggregator::disconnectSources() | ||||
| { | ||||
|     for (auto dataEngine : m_dataEngines.values()) | ||||
|         for (auto &source : dataEngine->sources()) | ||||
|             dataEngine->disconnectSource(source, parent()); | ||||
|     disconnect(m_newSourceConnection); | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWDataEngineAggregator::reconnectSources(const int _interval) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Reconnect sources with interval" << _interval; | ||||
|  | ||||
|     disconnectSources(); | ||||
|  | ||||
|     m_dataEngines["systemmonitor"]->connectAllSources(parent(), (uint)_interval); | ||||
|     m_dataEngines["extsysmon"]->connectAllSources(parent(), (uint)_interval); | ||||
|     m_dataEngines["time"]->connectSource("Local", parent(), 1000); | ||||
|  | ||||
|     m_newSourceConnection = connect( | ||||
|         m_dataEngines["systemmonitor"], &Plasma::DataEngine::sourceAdded, | ||||
|         [this, _interval](const QString &source) { | ||||
|             emit(deviceAdded(source)); | ||||
|             m_dataEngines["systemmonitor"]->connectSource(source, parent(), (uint)_interval); | ||||
|         }); | ||||
|  | ||||
| #ifdef BUILD_FUTURE | ||||
|     createQueuedConnection(); | ||||
| #endif /* BUILD_FUTURE */ | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWDataEngineAggregator::dropSource(const QString &_source) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Source" << _source; | ||||
|  | ||||
|     // HACK there is no possibility to check to which dataengine source | ||||
|     // connected we will try to disconnect it from all engines | ||||
|     for (auto dataEngine : m_dataEngines.values()) | ||||
|         dataEngine->disconnectSource(_source, parent()); | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWDataEngineAggregator::createQueuedConnection() | ||||
| { | ||||
|     // HACK additional method which forces QueuedConnection instead of Auto one | ||||
|     // for more details refer to plasma-framework source code | ||||
|     for (auto &dataEngine : m_dataEngines.keys()) { | ||||
|         // different source set for different engines | ||||
|         QStringList sources = dataEngine == "time" ? QStringList() << "Local" | ||||
|                                                    : m_dataEngines[dataEngine]->sources(); | ||||
|         // reconnect sources | ||||
|         for (auto &source : sources) { | ||||
|             Plasma::DataContainer *container | ||||
|                 = m_dataEngines[dataEngine]->containerForSource(source); | ||||
|             // disconnect old connections first | ||||
|             disconnect(container, SIGNAL(dataUpdated(QString, Plasma::DataEngine::Data)), parent(), | ||||
|                        SLOT(dataUpdated(QString, Plasma::DataEngine::Data))); | ||||
|             // and now reconnect with Qt::QueuedConnection type | ||||
|             connect(container, SIGNAL(dataUpdated(QString, Plasma::DataEngine::Data)), parent(), | ||||
|                     SLOT(dataUpdated(QString, Plasma::DataEngine::Data)), Qt::QueuedConnection); | ||||
|         } | ||||
|     } | ||||
|     m_interface->unsubscribe(m_sensors.values()); | ||||
| } | ||||
|  | ||||
| @ -19,10 +19,16 @@ | ||||
| #ifndef AWDATAENGINEAGGREGATOR_H | ||||
| #define AWDATAENGINEAGGREGATOR_H | ||||
|  | ||||
| #include <Plasma/DataEngine> | ||||
| #include <Plasma/DataEngineConsumer> | ||||
| #include <ksysguard/systemstats/SensorInfo.h> | ||||
|  | ||||
| #include <QObject> | ||||
| #include <QSet> | ||||
|  | ||||
|  | ||||
| namespace KSysGuard::SystemStats | ||||
| { | ||||
|     class DBusInterface; | ||||
| } | ||||
|  | ||||
|  | ||||
| class AWDataEngineAggregator : public QObject | ||||
| @ -33,19 +39,20 @@ public: | ||||
|     explicit AWDataEngineAggregator(QObject *_parent = nullptr); | ||||
|     ~AWDataEngineAggregator() override; | ||||
|     void disconnectSources(); | ||||
|     void reconnectSources(int _interval); | ||||
|  | ||||
| signals: | ||||
|     void deviceAdded(const QString &_source); | ||||
|  | ||||
| public slots: | ||||
|     void dropSource(const QString &_source); | ||||
|     void sensorAdded(const QString &_sensor); | ||||
|     void sensorRemoved(const QString &_sensor); | ||||
|     void updateData(KSysGuard::SensorDataList _data); | ||||
|     void updateSensor(const QHash<QString, KSysGuard::SensorInfo> &_sensor); | ||||
|  | ||||
| private: | ||||
|     void createQueuedConnection(); | ||||
|     Plasma::DataEngineConsumer *m_consumer = nullptr; | ||||
|     QHash<QString, Plasma::DataEngine *> m_dataEngines; | ||||
|     QMetaObject::Connection m_newSourceConnection; | ||||
|     KSysGuard::SystemStats::DBusInterface *m_interface = nullptr; | ||||
|     QSet<QString> m_sensors; | ||||
| }; | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -17,7 +17,7 @@ | ||||
|  | ||||
| #include "awdataenginemapper.h" | ||||
|  | ||||
| #include <QRegExp> | ||||
| #include <QRegularExpression> | ||||
|  | ||||
| #include "awdebug.h" | ||||
| #include "awformatterhelper.h" | ||||
| @ -76,21 +76,20 @@ QStringList AWDataEngineMapper::keysFromSource(const QString &_source) const | ||||
|  | ||||
| // HACK units required to define should the value be calculated as temperature | ||||
| // or fan data | ||||
| QStringList AWDataEngineMapper::registerSource(const QString &_source, const QString &_units, | ||||
|                                                const QStringList &_keys) | ||||
| QStringList AWDataEngineMapper::registerSource(const QString &_source, const QString &_units, const QStringList &_keys) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Source" << _source << "with units" << _units; | ||||
|  | ||||
|     // regular expressions | ||||
|     QRegExp cpuRegExp = QRegExp("cpu/cpu.*/TotalLoad"); | ||||
|     QRegExp cpuclRegExp = QRegExp("cpu/cpu.*/clock"); | ||||
|     QRegExp hddrRegExp = QRegExp("disk/.*/Rate/rblk"); | ||||
|     QRegExp hddwRegExp = QRegExp("disk/.*/Rate/wblk"); | ||||
|     QRegExp mountFillRegExp = QRegExp("partitions/.*/filllevel"); | ||||
|     QRegExp mountFreeRegExp = QRegExp("partitions/.*/freespace"); | ||||
|     QRegExp mountUsedRegExp = QRegExp("partitions/.*/usedspace"); | ||||
|     QRegExp netRegExp = QRegExp("network/interfaces/.*/(receiver|transmitter)/data$"); | ||||
|     QRegExp netTotalRegExp = QRegExp("network/interfaces/.*/(receiver|transmitter)/dataTotal$"); | ||||
|     auto cpuRegExp = QRegularExpression("cpu/cpu.*/TotalLoad"); | ||||
|     auto cpuclRegExp = QRegularExpression("cpu/cpu.*/clock"); | ||||
|     auto hddrRegExp = QRegularExpression("disk/.*/Rate/rblk"); | ||||
|     auto hddwRegExp = QRegularExpression("disk/.*/Rate/wblk"); | ||||
|     auto mountFillRegExp = QRegularExpression("partitions/.*/filllevel"); | ||||
|     auto mountFreeRegExp = QRegularExpression("partitions/.*/freespace"); | ||||
|     auto mountUsedRegExp = QRegularExpression("partitions/.*/usedspace"); | ||||
|     auto netRegExp = QRegularExpression("network/interfaces/.*/(receiver|transmitter)/data$"); | ||||
|     auto netTotalRegExp = QRegularExpression("network/interfaces/.*/(receiver|transmitter)/dataTotal$"); | ||||
|  | ||||
|     if (_source == "battery/ac") { | ||||
|         // AC | ||||
| @ -180,10 +179,8 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt | ||||
|             m_map.insert(_source, key); | ||||
|             m_formatter[key] = AWKeysAggregator::FormatterType::Float; | ||||
|             // additional keys | ||||
|             m_formatter[QString("hddtotmb%1").arg(index)] | ||||
|                 = AWKeysAggregator::FormatterType::MemMBFormat; | ||||
|             m_formatter[QString("hddtotgb%1").arg(index)] | ||||
|                 = AWKeysAggregator::FormatterType::MemGBFormat; | ||||
|             m_formatter[QString("hddtotmb%1").arg(index)] = AWKeysAggregator::FormatterType::MemMBFormat; | ||||
|             m_formatter[QString("hddtotgb%1").arg(index)] = AWKeysAggregator::FormatterType::MemGBFormat; | ||||
|         } | ||||
|     } else if (_source.contains(mountFreeRegExp)) { | ||||
|         // free space | ||||
| @ -427,9 +424,9 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt | ||||
|  | ||||
|     // drop key from dictionary if no one user requested key required it | ||||
|     qCInfo(LOG_AW) << "Looking for keys" << foundKeys << "in" << _keys; | ||||
|     bool required = _keys.isEmpty() | ||||
|                     || std::any_of(foundKeys.cbegin(), foundKeys.cend(), | ||||
|                                    [&_keys](const QString &key) { return _keys.contains(key); }); | ||||
|     bool required = _keys.isEmpty() || std::any_of(foundKeys.cbegin(), foundKeys.cend(), [&_keys](const QString &key) { | ||||
|                         return _keys.contains(key); | ||||
|                     }); | ||||
|     if (!required) { | ||||
|         m_map.remove(_source); | ||||
|         for (auto &key : foundKeys) | ||||
|  | ||||
| @ -38,8 +38,7 @@ public: | ||||
|     [[nodiscard]] AWKeysAggregator::FormatterType formatter(const QString &_key) const; | ||||
|     [[nodiscard]] QStringList keysFromSource(const QString &_source) const; | ||||
|     // set methods | ||||
|     QStringList registerSource(const QString &_source, const QString &_units, | ||||
|                                const QStringList &_keys); | ||||
|     QStringList registerSource(const QString &_source, const QString &_units, const QStringList &_keys); | ||||
|     void setDevices(const QHash<QString, QStringList> &_devices); | ||||
|  | ||||
| private: | ||||
|  | ||||
| @ -38,10 +38,9 @@ AWDBusAdaptor::~AWDBusAdaptor() | ||||
| } | ||||
|  | ||||
|  | ||||
| QStringList AWDBusAdaptor::ActiveServices() const | ||||
| QStringList AWDBusAdaptor::ActiveServices() | ||||
| { | ||||
|     QDBusMessage listServices | ||||
|         = QDBusConnection::sessionBus().interface()->call(QDBus::BlockWithGui, "ListNames"); | ||||
|     QDBusMessage listServices = QDBusConnection::sessionBus().interface()->call(QDBus::BlockWithGui, "ListNames"); | ||||
|     if (listServices.arguments().isEmpty()) { | ||||
|         qCWarning(LOG_DBUS) << "Could not find any DBus service"; | ||||
|         return {}; | ||||
| @ -49,7 +48,7 @@ QStringList AWDBusAdaptor::ActiveServices() const | ||||
|     QStringList arguments = listServices.arguments().first().toStringList(); | ||||
|  | ||||
|     return std::accumulate(arguments.cbegin(), arguments.cend(), QStringList(), | ||||
|                            [](QStringList &source, const QString &service) { | ||||
|                            [](QStringList source, const QString &service) { | ||||
|                                if (service.startsWith(AWDBUS_SERVICE)) | ||||
|                                    source.append(service); | ||||
|                                return source; | ||||
| @ -86,8 +85,7 @@ void AWDBusAdaptor::SetLogLevel(const QString &what, const int level) | ||||
|     qCDebug(LOG_DBUS) << "Set log level" << level << "for" << what; | ||||
|  | ||||
|     if (level >= m_logLevels.count()) { | ||||
|         qCDebug(LOG_DBUS) << "Invalid logging level" << level << "should be less than" | ||||
|                           << m_logLevels.count(); | ||||
|         qCDebug(LOG_DBUS) << "Invalid logging level" << level << "should be less than" << m_logLevels.count(); | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|  | ||||
| @ -37,11 +37,11 @@ public: | ||||
|  | ||||
| public slots: | ||||
|     // get methods | ||||
|     QStringList ActiveServices() const; | ||||
|     QString Info(const QString &key) const; | ||||
|     QStringList Keys(const QString ®exp) const; | ||||
|     QString Value(const QString &key) const; | ||||
|     qlonglong WhoAmI() const; | ||||
|     [[nodiscard]] static QStringList ActiveServices(); | ||||
|     [[nodiscard]] QString Info(const QString &key) const; | ||||
|     [[nodiscard]] QStringList Keys(const QString ®exp) const; | ||||
|     [[nodiscard]] QString Value(const QString &key) const; | ||||
|     [[nodiscard]] qlonglong WhoAmI() const; | ||||
|     // set methods | ||||
|     void SetLogLevel(const QString &what, int level); | ||||
|     void SetLogLevel(const QString &what, const QString &level, bool enabled); | ||||
|  | ||||
| @ -27,8 +27,7 @@ class AWFormatterConfig : public AWAbstractPairConfig | ||||
|     Q_OBJECT | ||||
|  | ||||
| public: | ||||
|     explicit AWFormatterConfig(QWidget *_parent = nullptr, | ||||
|                                const QStringList &_keys = QStringList()); | ||||
|     explicit AWFormatterConfig(QWidget *_parent = nullptr, const QStringList &_keys = QStringList()); | ||||
|     ~AWFormatterConfig() override; | ||||
| }; | ||||
|  | ||||
|  | ||||
| @ -102,7 +102,7 @@ void AWFormatterHelper::editPairs() | ||||
|  | ||||
| QStringList AWFormatterHelper::leftKeys() | ||||
| { | ||||
|     return QStringList(); | ||||
|     return {}; | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -120,8 +120,7 @@ void AWFormatterHelper::editItems() | ||||
| } | ||||
|  | ||||
|  | ||||
| AWAbstractFormatter::FormatterClass | ||||
| AWFormatterHelper::defineFormatterClass(const QString &_stringType) | ||||
| AWAbstractFormatter::FormatterClass AWFormatterHelper::defineFormatterClass(const QString &_stringType) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Define formatter class for" << _stringType; | ||||
|  | ||||
| @ -163,9 +162,7 @@ void AWFormatterHelper::initFormatters() | ||||
|             // check if already exists | ||||
|             auto values = m_formattersClasses.values(); | ||||
|             if (std::any_of(values.cbegin(), values.cend(), | ||||
|                             [&filePath](const AWAbstractFormatter *item) { | ||||
|                                 return (item->fileName() == filePath); | ||||
|                             })) | ||||
|                             [&filePath](const AWAbstractFormatter *item) { return (item->fileName() == filePath); })) | ||||
|                 continue; | ||||
|  | ||||
|             auto metadata = readMetadata(filePath); | ||||
| @ -197,8 +194,7 @@ void AWFormatterHelper::initFormatters() | ||||
| } | ||||
|  | ||||
|  | ||||
| QPair<QString, AWAbstractFormatter::FormatterClass> | ||||
| AWFormatterHelper::readMetadata(const QString &_filePath) | ||||
| QPair<QString, AWAbstractFormatter::FormatterClass> AWFormatterHelper::readMetadata(const QString &_filePath) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Read initial parameters from" << _filePath; | ||||
|  | ||||
| @ -217,8 +213,7 @@ void AWFormatterHelper::doCreateItem() | ||||
| { | ||||
|     QStringList selection = {"NoFormat", "DateTime", "Float", "List", "Script", "String", "Json"}; | ||||
|     bool ok; | ||||
|     QString select | ||||
|         = QInputDialog::getItem(this, i18n("Select type"), i18n("Type:"), selection, 0, false, &ok); | ||||
|     QString select = QInputDialog::getItem(this, i18n("Select type"), i18n("Type:"), selection, 0, false, &ok); | ||||
|     if (!ok) { | ||||
|         qCWarning(LOG_AW) << "No type selected"; | ||||
|         return; | ||||
|  | ||||
| @ -49,8 +49,7 @@ private: | ||||
|     // methods | ||||
|     static AWAbstractFormatter::FormatterClass defineFormatterClass(const QString &_stringType); | ||||
|     void initFormatters(); | ||||
|     [[nodiscard]] static QPair<QString, AWAbstractFormatter::FormatterClass> | ||||
|     readMetadata(const QString &_filePath); | ||||
|     [[nodiscard]] static QPair<QString, AWAbstractFormatter::FormatterClass> readMetadata(const QString &_filePath); | ||||
|     // parent methods | ||||
|     void doCreateItem() override; | ||||
|     // properties | ||||
|  | ||||
| @ -20,6 +20,7 @@ | ||||
|  | ||||
| #include <QDir> | ||||
| #include <QNetworkInterface> | ||||
| #include <QRegularExpression> | ||||
| #include <QSettings> | ||||
| #include <QStandardPaths> | ||||
|  | ||||
| @ -31,8 +32,7 @@ bool AWKeyCache::addKeyToCache(const QString &_type, const QString &_key) | ||||
|     qCDebug(LOG_AW) << "Key" << _key << "with type" << _type; | ||||
|  | ||||
|     QString fileName | ||||
|         = QString("%1/awesomewidgets.ndx") | ||||
|               .arg(QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation)); | ||||
|         = QString("%1/awesomewidgets.ndx").arg(QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation)); | ||||
|     qCInfo(LOG_AW) << "Cache file" << fileName; | ||||
|     QSettings cache(fileName, QSettings::IniFormat); | ||||
|  | ||||
| @ -43,7 +43,7 @@ bool AWKeyCache::addKeyToCache(const QString &_type, const QString &_key) | ||||
|  | ||||
|     if (_type == "hdd") { | ||||
|         QStringList allDevices = QDir("/dev").entryList(QDir::System, QDir::Name); | ||||
|         QStringList devices = allDevices.filter(QRegExp("^[hms]d[a-z]$")); | ||||
|         QStringList devices = allDevices.filter(QRegularExpression("^[hms]d[a-z]$")); | ||||
|         for (auto &dev : devices) { | ||||
|             QString device = QString("/dev/%1").arg(dev); | ||||
|             if (cachedValues.contains(device)) | ||||
| @ -75,12 +75,10 @@ bool AWKeyCache::addKeyToCache(const QString &_type, const QString &_key) | ||||
| } | ||||
|  | ||||
|  | ||||
| QStringList AWKeyCache::getRequiredKeys(const QStringList &_keys, const QStringList &_bars, | ||||
|                                         const QVariantMap &_tooltip, const QStringList &_userKeys, | ||||
|                                         const QStringList &_allKeys) | ||||
| QStringList AWKeyCache::getRequiredKeys(const QStringList &_keys, const QStringList &_bars, const QVariantMap &_tooltip, | ||||
|                                         const QStringList &_userKeys, const QStringList &_allKeys) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Looking for required keys in" << _keys << _bars << "using tooltip settings" | ||||
|                     << _tooltip; | ||||
|     qCDebug(LOG_AW) << "Looking for required keys in" << _keys << _bars << "using tooltip settings" << _tooltip; | ||||
|  | ||||
|     // initial copy | ||||
|     QSet<QString> used(_keys.cbegin(), _keys.cend()); | ||||
| @ -96,7 +94,7 @@ QStringList AWKeyCache::getRequiredKeys(const QStringList &_keys, const QStringL | ||||
|  | ||||
|     // insert depending keys, refer to AWKeys::calculateValues() | ||||
|     // hddtotmb* | ||||
|     for (auto &key : _allKeys.filter(QRegExp("^hddtotmb"))) { | ||||
|     for (auto &key : _allKeys.filter(QRegularExpression("^hddtotmb"))) { | ||||
|         if (!used.contains(key)) | ||||
|             continue; | ||||
|         key.remove("hddtotmb"); | ||||
| @ -104,7 +102,7 @@ QStringList AWKeyCache::getRequiredKeys(const QStringList &_keys, const QStringL | ||||
|         used << QString("hddfreemb%1").arg(index) << QString("hddmb%1").arg(index); | ||||
|     } | ||||
|     // hddtotgb* | ||||
|     for (auto &key : _allKeys.filter(QRegExp("^hddtotgb"))) { | ||||
|     for (auto &key : _allKeys.filter(QRegularExpression("^hddtotgb"))) { | ||||
|         if (!used.contains(key)) | ||||
|             continue; | ||||
|         key.remove("hddtotgb"); | ||||
| @ -136,18 +134,17 @@ QStringList AWKeyCache::getRequiredKeys(const QStringList &_keys, const QStringL | ||||
|         used << "swapgb" | ||||
|              << "swapfreegb"; | ||||
|     // network keys | ||||
|     QStringList netKeys({"up", "upkb", "uptot", "uptotkb", "upunits", "down", "downkb", "downtot", | ||||
|                          "downtotkb", "downunits"}); | ||||
|     QStringList netKeys( | ||||
|         {"up", "upkb", "uptot", "uptotkb", "upunits", "down", "downkb", "downtot", "downtotkb", "downunits"}); | ||||
|     for (auto &key : netKeys) { | ||||
|         if (!used.contains(key)) | ||||
|             continue; | ||||
|         QStringList filt = _allKeys.filter(QRegExp(QString("^%1[0-9]{1,}").arg(key))); | ||||
|         QStringList filt = _allKeys.filter(QRegularExpression(QString("^%1[0-9]{1,}").arg(key))); | ||||
|         for (auto &filtered : filt) | ||||
|             used << filtered; | ||||
|     } | ||||
|     // netdev key | ||||
|     if (std::any_of(netKeys.cbegin(), netKeys.cend(), | ||||
|                     [&used](const QString &key) { return used.contains(key); })) | ||||
|     if (std::any_of(netKeys.cbegin(), netKeys.cend(), [&used](const QString &key) { return used.contains(key); })) | ||||
|         used << "netdev"; | ||||
|  | ||||
|     // HACK append dummy if there are no other keys. This hack is required | ||||
| @ -162,8 +159,7 @@ QStringList AWKeyCache::getRequiredKeys(const QStringList &_keys, const QStringL | ||||
| QHash<QString, QStringList> AWKeyCache::loadKeysFromCache() | ||||
| { | ||||
|     QString fileName | ||||
|         = QString("%1/awesomewidgets.ndx") | ||||
|               .arg(QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation)); | ||||
|         = QString("%1/awesomewidgets.ndx").arg(QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation)); | ||||
|     qCInfo(LOG_AW) << "Cache file" << fileName; | ||||
|     QSettings cache(fileName, QSettings::IniFormat); | ||||
|  | ||||
|  | ||||
| @ -27,9 +27,8 @@ | ||||
| namespace AWKeyCache | ||||
| { | ||||
| bool addKeyToCache(const QString &_type, const QString &_key = ""); | ||||
| QStringList getRequiredKeys(const QStringList &_keys, const QStringList &_bars, | ||||
|                             const QVariantMap &_tooltip, const QStringList &_userKeys, | ||||
|                             const QStringList &_allKeys); | ||||
| QStringList getRequiredKeys(const QStringList &_keys, const QStringList &_bars, const QVariantMap &_tooltip, | ||||
|                             const QStringList &_userKeys, const QStringList &_allKeys); | ||||
| QHash<QString, QStringList> loadKeysFromCache(); | ||||
| } // namespace AWKeyCache | ||||
|  | ||||
|  | ||||
| @ -18,8 +18,7 @@ | ||||
| #include "awkeyoperations.h" | ||||
|  | ||||
| #include <QDir> | ||||
| #include <QJSEngine> | ||||
| #include <QRegExp> | ||||
| #include <QRegularExpression> | ||||
| #include <QThread> | ||||
|  | ||||
| #include "awcustomkeyshelper.h" | ||||
| @ -207,7 +206,7 @@ QString AWKeyOperations::infoByKey(const QString &_key) const | ||||
|     qCDebug(LOG_AW) << "Requested key" << _key; | ||||
|  | ||||
|     QString stripped = _key; | ||||
|     stripped.remove(QRegExp("\\d+")); | ||||
|     stripped.remove(QRegularExpression("\\d+")); | ||||
|     QString output; | ||||
|  | ||||
|     if (_key.startsWith("bar")) { | ||||
| @ -218,31 +217,31 @@ QString AWKeyOperations::infoByKey(const QString &_key) const | ||||
|         AbstractExtItem *item = m_extScripts->itemByTag(_key, stripped); | ||||
|         if (item) | ||||
|             output = item->uniq(); | ||||
|     } else if (_key.contains(QRegExp("^hdd[rw]"))) { | ||||
|     } else if (_key.contains(QRegularExpression("^hdd[rw]"))) { | ||||
|         QString index = _key; | ||||
|         index.remove(QRegExp("hdd[rw]")); | ||||
|         index.remove(QRegularExpression("hdd[rw]")); | ||||
|         output = m_devices["disk"][index.toInt()]; | ||||
|     } else if (_key.contains(QRegExp("^hdd([0-9]|mb|gb|freemb|freegb|totmb|totgb)"))) { | ||||
|     } else if (_key.contains(QRegularExpression("^hdd([0-9]|mb|gb|freemb|freegb|totmb|totgb)"))) { | ||||
|         QString index = _key; | ||||
|         index.remove(QRegExp("^hdd(|mb|gb|freemb|freegb|totmb|totgb)")); | ||||
|         index.remove(QRegularExpression("^hdd(|mb|gb|freemb|freegb|totmb|totgb)")); | ||||
|         output = m_devices["mount"][index.toInt()]; | ||||
|     } else if (_key.startsWith("hddtemp")) { | ||||
|         QString index = _key; | ||||
|         index.remove("hddtemp"); | ||||
|         output = m_devices["hdd"][index.toInt()]; | ||||
|     } else if (_key.contains(QRegExp("^(down|up)[0-9]"))) { | ||||
|     } else if (_key.contains(QRegularExpression("^(down|up)[0-9]"))) { | ||||
|         QString index = _key; | ||||
|         index.remove(QRegExp("^(down|up)")); | ||||
|         index.remove(QRegularExpression("^(down|up)")); | ||||
|         output = m_devices["net"][index.toInt()]; | ||||
|     } else if (_key.startsWith("pkgcount")) { | ||||
|         AbstractExtItem *item = m_extUpgrade->itemByTag(_key, stripped); | ||||
|         if (item) | ||||
|             output = item->uniq(); | ||||
|     } else if (_key.contains(QRegExp("(^|perc)(ask|bid|price)(chg|)"))) { | ||||
|     } else if (_key.contains(QRegularExpression("(^|perc)(ask|bid|price)(chg|)"))) { | ||||
|         AbstractExtItem *item = m_extQuotes->itemByTag(_key, stripped); | ||||
|         if (item) | ||||
|             output = item->uniq(); | ||||
|     } else if (_key.contains(QRegExp("(weather|weatherId|humidity|pressure|temperature)"))) { | ||||
|     } else if (_key.contains(QRegularExpression("(weather|weatherId|humidity|pressure|temperature)"))) { | ||||
|         AbstractExtItem *item = m_extWeather->itemByTag(_key, stripped); | ||||
|         if (item) | ||||
|             output = item->uniq(); | ||||
| @ -281,8 +280,7 @@ void AWKeyOperations::editItem(const QString &_type) | ||||
|     qCDebug(LOG_AW) << "Item type" << _type; | ||||
|  | ||||
|     if (_type == "graphicalitem") { | ||||
|         QStringList keys | ||||
|             = dictKeys().filter(QRegExp("^(cpu(?!cl).*|gpu$|mem$|swap$|hdd[0-9].*|bat.*)")); | ||||
|         QStringList keys = dictKeys().filter(QRegularExpression("^(cpu(?!cl).*|gpu$|mem$|swap$|hdd[0-9].*|bat.*)")); | ||||
|         keys.sort(); | ||||
|         m_graphicalItems->setConfigArgs(keys); | ||||
|         return m_graphicalItems->editItems(); | ||||
| @ -304,8 +302,8 @@ void AWKeyOperations::addDevice(const QString &_source) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Source" << _source; | ||||
|  | ||||
|     QRegExp diskRegexp = QRegExp("disk/(?:md|sd|hd)[a-z|0-9]_.*/Rate/(?:rblk)"); | ||||
|     QRegExp mountRegexp = QRegExp("partitions/.*/filllevel"); | ||||
|     auto diskRegexp = QRegularExpression("disk/(?:md|sd|hd)[a-z|0-9]_.*/Rate/(?:rblk)"); | ||||
|     auto mountRegexp = QRegularExpression("partitions/.*/filllevel"); | ||||
|  | ||||
|     if (_source.contains(diskRegexp)) { | ||||
|         QString device = _source; | ||||
|  | ||||
| @ -56,8 +56,7 @@ AWKeys::AWKeys(QObject *_parent) | ||||
|     createDBusInterface(); | ||||
|  | ||||
|     // update key data if required | ||||
|     connect(m_keyOperator, SIGNAL(updateKeys(const QStringList &)), this, | ||||
|             SLOT(reinitKeys(const QStringList &))); | ||||
|     connect(m_keyOperator, SIGNAL(updateKeys(const QStringList &)), this, SLOT(reinitKeys(const QStringList &))); | ||||
|     connect(m_timer, SIGNAL(timeout()), this, SLOT(updateTextData())); | ||||
|     // transfer signal from AWDataAggregator object to QML ui | ||||
|     connect(m_dataAggregator, SIGNAL(toolTipPainted(const QString &)), this, | ||||
| @ -91,11 +90,10 @@ void AWKeys::initDataAggregator(const QVariantMap &_tooltipParams) | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWKeys::initKeys(const QString &_currentPattern, const int _interval, const int _limit, | ||||
|                       const bool _optimize) | ||||
| void AWKeys::initKeys(const QString &_currentPattern, const int _interval, const int _limit, const bool _optimize) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Pattern" << _currentPattern << "with interval" << _interval | ||||
|                     << "and queue limit" << _limit << "with optimization" << _optimize; | ||||
|     qCDebug(LOG_AW) << "Pattern" << _currentPattern << "with interval" << _interval << "and queue limit" << _limit | ||||
|                     << "with optimization" << _optimize; | ||||
|  | ||||
|     // init | ||||
|     m_optimize = _optimize; | ||||
| @ -150,7 +148,7 @@ QStringList AWKeys::dictKeys(const bool _sorted, const QString &_regexp) const | ||||
|     if (_sorted) | ||||
|         allKeys.sort(); | ||||
|  | ||||
|     return allKeys.filter(QRegExp(_regexp)); | ||||
|     return allKeys.filter(QRegularExpression(_regexp)); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -201,10 +199,11 @@ void AWKeys::editItem(const QString &_type) | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWKeys::dataUpdated(const QString &_sourceName, const Plasma::DataEngine::Data &_data) | ||||
| void AWKeys::dataUpdated(const KSysGuard::SensorDataList &_data) | ||||
| { | ||||
|     // run concurrent data update | ||||
|     QtConcurrent::run(m_threadPool, this, &AWKeys::setDataBySource, _sourceName, _data); | ||||
|     // TODO use QtConcurrent::map or something like that | ||||
|     for (auto &sensor : _data) | ||||
|         QtConcurrent::run(m_threadPool, this, &AWKeys::setDataBySource, sensor); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -227,10 +226,9 @@ void AWKeys::reinitKeys(const QStringList &_currentKeys) | ||||
|         barKeys.append(item->usedKeys()); | ||||
|     } | ||||
|     // get required keys | ||||
|     m_requiredKeys | ||||
|         = m_optimize ? AWKeyCache::getRequiredKeys(m_foundKeys, barKeys, m_tooltipParams, | ||||
|                                                    m_keyOperator->requiredUserKeys(), _currentKeys) | ||||
|                      : QStringList(); | ||||
|     m_requiredKeys = m_optimize ? AWKeyCache::getRequiredKeys(m_foundKeys, barKeys, m_tooltipParams, | ||||
|                                                               m_keyOperator->requiredUserKeys(), _currentKeys) | ||||
|                                 : QStringList(); | ||||
|  | ||||
|     // set key data to m_aggregator | ||||
|     m_aggregator->setDevices(m_keyOperator->devices()); | ||||
| @ -260,11 +258,9 @@ void AWKeys::calculateValues() | ||||
|     for (auto &device : mountDevices) { | ||||
|         int index = mountDevices.indexOf(device); | ||||
|         m_values[QString("hddtotmb%1").arg(index)] | ||||
|             = m_values[QString("hddfreemb%1").arg(index)].toFloat() | ||||
|               + m_values[QString("hddmb%1").arg(index)].toFloat(); | ||||
|             = m_values[QString("hddfreemb%1").arg(index)].toFloat() + m_values[QString("hddmb%1").arg(index)].toFloat(); | ||||
|         m_values[QString("hddtotgb%1").arg(index)] | ||||
|             = m_values[QString("hddfreegb%1").arg(index)].toFloat() | ||||
|               + m_values[QString("hddgb%1").arg(index)].toFloat(); | ||||
|             = m_values[QString("hddfreegb%1").arg(index)].toFloat() + m_values[QString("hddgb%1").arg(index)].toFloat(); | ||||
|     } | ||||
|  | ||||
|     // memtot* | ||||
| @ -312,20 +308,16 @@ void AWKeys::createDBusInterface() | ||||
|     // HACK we are going to use different services because it binds to | ||||
|     // application | ||||
|     if (instanceBus.registerService(QString("%1.i%2").arg(AWDBUS_SERVICE).arg(id))) { | ||||
|         if (!instanceBus.registerObject(AWDBUS_PATH, new AWDBusAdaptor(this), | ||||
|                                         QDBusConnection::ExportAllContents)) | ||||
|             qCWarning(LOG_AW) << "Could not register DBus object, last error" | ||||
|                               << instanceBus.lastError().message(); | ||||
|         if (!instanceBus.registerObject(AWDBUS_PATH, new AWDBusAdaptor(this), QDBusConnection::ExportAllContents)) | ||||
|             qCWarning(LOG_AW) << "Could not register DBus object, last error" << instanceBus.lastError().message(); | ||||
|     } else { | ||||
|         qCWarning(LOG_AW) << "Could not register DBus service, last error" | ||||
|                           << instanceBus.lastError().message(); | ||||
|         qCWarning(LOG_AW) << "Could not register DBus service, last error" << instanceBus.lastError().message(); | ||||
|     } | ||||
|  | ||||
|     // and same instance but for id independent service | ||||
|     QDBusConnection commonBus = QDBusConnection::sessionBus(); | ||||
|     if (commonBus.registerService(AWDBUS_SERVICE)) | ||||
|         commonBus.registerObject(AWDBUS_PATH, new AWDBusAdaptor(this), | ||||
|                                  QDBusConnection::ExportAllContents); | ||||
|         commonBus.registerObject(AWDBUS_PATH, new AWDBusAdaptor(this), QDBusConnection::ExportAllContents); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -340,14 +332,13 @@ QString AWKeys::parsePattern(QString _pattern) const | ||||
|  | ||||
|     // main keys | ||||
|     for (auto &key : m_foundKeys) | ||||
|         _pattern.replace(QString("$%1").arg(key), | ||||
|                          m_aggregator->formatter(m_values[key], key, true)); | ||||
|         _pattern.replace(QString("$%1").arg(key), m_aggregator->formatter(m_values[key], key, true)); | ||||
|  | ||||
|     // bars | ||||
|     for (auto &bar : m_foundBars) { | ||||
|         GraphicalItem *item = m_keyOperator->giByKey(bar); | ||||
|         QString image = item->isCustom() ? item->image(AWPatternFunctions::expandLambdas( | ||||
|                             item->bar(), m_aggregator, m_values, item->usedKeys())) | ||||
|         QString image = item->isCustom() ? item->image( | ||||
|                             AWPatternFunctions::expandLambdas(item->bar(), m_aggregator, m_values, item->usedKeys())) | ||||
|                                          : item->image(m_values[item->bar()]); | ||||
|         _pattern.replace(QString("$%1").arg(bar), image); | ||||
|     } | ||||
| @ -361,9 +352,9 @@ QString AWKeys::parsePattern(QString _pattern) const | ||||
| } | ||||
|  | ||||
|  | ||||
| void AWKeys::setDataBySource(const QString &_sourceName, const QVariantMap &_data) | ||||
| void AWKeys::setDataBySource(const QString &_sourceName, const KSysGuard::SensorData &_data) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Source" << _sourceName << "with data" << _data; | ||||
|     qCDebug(LOG_AW) << "Source" << _sourceName << "with data" << _data.payload; | ||||
|  | ||||
|     // first list init | ||||
|     QStringList tags = m_aggregator->keysFromSource(_sourceName); | ||||
|  | ||||
| @ -19,11 +19,11 @@ | ||||
| #ifndef AWKEYS_H | ||||
| #define AWKEYS_H | ||||
|  | ||||
| #include <Plasma/DataEngine> | ||||
|  | ||||
| #include <QMutex> | ||||
| #include <QObject> | ||||
|  | ||||
| #include <ksysguard/systemstats/SensorInfo.h> | ||||
|  | ||||
|  | ||||
| class AWDataAggregator; | ||||
| class AWDataEngineAggregator; | ||||
| @ -40,16 +40,14 @@ public: | ||||
|     explicit AWKeys(QObject *_parent = nullptr); | ||||
|     ~AWKeys() override; | ||||
|     Q_INVOKABLE void initDataAggregator(const QVariantMap &_tooltipParams); | ||||
|     Q_INVOKABLE void initKeys(const QString &_currentPattern, int _interval, int _limit, | ||||
|                               bool _optimize); | ||||
|     Q_INVOKABLE void initKeys(const QString &_currentPattern, int _interval, int _limit, bool _optimize); | ||||
|     Q_INVOKABLE void setAggregatorProperty(const QString &_key, const QVariant &_value); | ||||
|     Q_INVOKABLE void setWrapNewLines(bool _wrap); | ||||
|     // additional method to force load keys from Qml UI. Used in some | ||||
|     // configuration pages | ||||
|     Q_INVOKABLE void updateCache(); | ||||
|     // keys | ||||
|     Q_INVOKABLE [[nodiscard]] QStringList dictKeys(bool _sorted = false, | ||||
|                                                    const QString &_regexp = "") const; | ||||
|     Q_INVOKABLE [[nodiscard]] QStringList dictKeys(bool _sorted = false, const QString &_regexp = "") const; | ||||
|     Q_INVOKABLE [[nodiscard]] QVariantList getHddDevices() const; | ||||
|     // values | ||||
|     Q_INVOKABLE [[nodiscard]] QString infoByKey(const QString &_key) const; | ||||
| @ -58,9 +56,7 @@ public: | ||||
|     Q_INVOKABLE void editItem(const QString &_type); | ||||
|  | ||||
| public slots: | ||||
|     void dataUpdated(const QString &_sourceName, const Plasma::DataEngine::Data &_data); | ||||
|     // dummy method required by DataEngine connections | ||||
|     static void modelChanged(QString, QAbstractItemModel *){}; | ||||
|     void dataUpdated(const KSysGuard::SensorDataList &_data); | ||||
|  | ||||
| signals: | ||||
|     void dropSourceFromDataengine(const QString &_source); | ||||
| @ -76,7 +72,7 @@ private: | ||||
|     void calculateValues(); | ||||
|     void createDBusInterface(); | ||||
|     [[nodiscard]] QString parsePattern(QString _pattern) const; | ||||
|     void setDataBySource(const QString &_sourceName, const QVariantMap &_data); | ||||
|     void setDataBySource(const KSysGuard::SensorData &_data); | ||||
|     // objects | ||||
|     AWDataAggregator *m_dataAggregator = nullptr; | ||||
|     AWDataEngineAggregator *m_dataEngineAggregator = nullptr; | ||||
|  | ||||
| @ -55,8 +55,7 @@ void AWKeysAggregator::initFormatters() | ||||
| } | ||||
|  | ||||
|  | ||||
| QString AWKeysAggregator::formatter(const QVariant &_data, const QString &_key, | ||||
|                                     bool replaceSpace) const | ||||
| QString AWKeysAggregator::formatter(const QVariant &_data, const QString &_key, bool replaceSpace) const | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Data" << _data << "for key" << _key; | ||||
|  | ||||
| @ -235,8 +234,7 @@ void AWKeysAggregator::setTranslate(const bool _translate) | ||||
| } | ||||
|  | ||||
|  | ||||
| QStringList AWKeysAggregator::registerSource(const QString &_source, const QString &_units, | ||||
|                                              const QStringList &_keys) | ||||
| QStringList AWKeysAggregator::registerSource(const QString &_source, const QString &_units, const QStringList &_keys) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Source" << _source << "with units" << _units; | ||||
|  | ||||
|  | ||||
| @ -69,8 +69,7 @@ public: | ||||
|     ~AWKeysAggregator() override; | ||||
|     void initFormatters(); | ||||
|     // get methods | ||||
|     [[nodiscard]] QString formatter(const QVariant &_data, const QString &_key, | ||||
|                                     bool replaceSpace) const; | ||||
|     [[nodiscard]] QString formatter(const QVariant &_data, const QString &_key, bool replaceSpace) const; | ||||
|     [[nodiscard]] QStringList keysFromSource(const QString &_source) const; | ||||
|     // set methods | ||||
|     void setAcOffline(const QString &_inactive); | ||||
| @ -82,8 +81,7 @@ public: | ||||
|     void setTranslate(bool _translate); | ||||
|  | ||||
| public slots: | ||||
|     QStringList registerSource(const QString &_source, const QString &_units, | ||||
|                                const QStringList &_keys); | ||||
|     QStringList registerSource(const QString &_source, const QString &_units, const QStringList &_keys); | ||||
|  | ||||
| private: | ||||
|     [[nodiscard]] float temperature(float temp) const; | ||||
|  | ||||
| @ -24,8 +24,7 @@ | ||||
| #include "awkeysaggregator.h" | ||||
|  | ||||
|  | ||||
| QString AWPatternFunctions::expandLambdas(QString _code, AWKeysAggregator *_aggregator, | ||||
|                                           const QVariantHash &_metadata, | ||||
| QString AWPatternFunctions::expandLambdas(QString _code, AWKeysAggregator *_aggregator, const QVariantHash &_metadata, | ||||
|                                           const QStringList &_usedKeys) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Expand lambdas in" << _code; | ||||
| @ -35,13 +34,12 @@ QString AWPatternFunctions::expandLambdas(QString _code, AWKeysAggregator *_aggr | ||||
|     _code.replace("$this", _metadata[_code].toString()); | ||||
|     // parsed values | ||||
|     for (auto &lambdaKey : _usedKeys) | ||||
|         _code.replace(QString("$%1").arg(lambdaKey), | ||||
|                       _aggregator->formatter(_metadata[lambdaKey], lambdaKey, false)); | ||||
|         _code.replace(QString("$%1").arg(lambdaKey), _aggregator->formatter(_metadata[lambdaKey], lambdaKey, false)); | ||||
|     qCInfo(LOG_AW) << "Expression" << _code; | ||||
|     QJSValue result = engine.evaluate(_code); | ||||
|     if (result.isError()) { | ||||
|         qCWarning(LOG_AW) << "Uncaught exception at line" << result.property("lineNumber").toInt() | ||||
|                           << ":" << result.toString(); | ||||
|         qCWarning(LOG_AW) << "Uncaught exception at line" << result.property("lineNumber").toInt() << ":" | ||||
|                           << result.toString(); | ||||
|         return ""; | ||||
|     } else { | ||||
|         return result.toString(); | ||||
| @ -67,8 +65,8 @@ QString AWPatternFunctions::expandTemplates(QString _code) | ||||
|         QJSValue result = engine.evaluate(body); | ||||
|         QString templateResult = ""; | ||||
|         if (result.isError()) { | ||||
|             qCWarning(LOG_AW) << "Uncaught exception at line" | ||||
|                               << result.property("lineNumber").toInt() << ":" << result.toString(); | ||||
|             qCWarning(LOG_AW) << "Uncaught exception at line" << result.property("lineNumber").toInt() << ":" | ||||
|                               << result.toString(); | ||||
|         } else { | ||||
|             templateResult = result.toString(); | ||||
|         } | ||||
| @ -81,8 +79,8 @@ QString AWPatternFunctions::expandTemplates(QString _code) | ||||
| } | ||||
|  | ||||
|  | ||||
| QList<AWPatternFunctions::AWFunction> | ||||
| AWPatternFunctions::findFunctionCalls(const QString &_function, const QString &_code) | ||||
| QList<AWPatternFunctions::AWFunction> AWPatternFunctions::findFunctionCalls(const QString &_function, | ||||
|                                                                             const QString &_code) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Looking for function" << _function << "in" << _code; | ||||
|  | ||||
| @ -109,8 +107,7 @@ AWPatternFunctions::findFunctionCalls(const QString &_function, const QString &_ | ||||
|             // replace '$,' to 0x1d | ||||
|             argsString.replace("$,", QString(0x1d)); | ||||
|             QStringList args = argsString.split(','); | ||||
|             std::for_each(args.begin(), args.end(), | ||||
|                           [](QString &arg) { arg.replace(QString(0x1d), ","); }); | ||||
|             std::for_each(args.begin(), args.end(), [](QString &arg) { arg.replace(QString(0x1d), ","); }); | ||||
|             metadata.args = args; | ||||
|         } | ||||
|         // other variables | ||||
| @ -130,13 +127,11 @@ QString AWPatternFunctions::insertAllKeys(QString _code, const QStringList &_key | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Looking for keys in code" << _code << "using list" << _keys; | ||||
|  | ||||
|     QList<AWPatternFunctions::AWFunction> found | ||||
|         = AWPatternFunctions::findFunctionCalls("aw_all", _code); | ||||
|     QList<AWPatternFunctions::AWFunction> found = AWPatternFunctions::findFunctionCalls("aw_all", _code); | ||||
|     for (auto &function : found) { | ||||
|         QString separator = function.args.isEmpty() ? "," : function.args.at(0); | ||||
|         QStringList required = _keys.filter(QRegExp(function.body)); | ||||
|         std::for_each(required.begin(), required.end(), | ||||
|                       [](QString &value) { value = QString("%1: $%1").arg(value); }); | ||||
|         QStringList required = _keys.filter(QRegularExpression(function.body)); | ||||
|         std::for_each(required.begin(), required.end(), [](QString &value) { value = QString("%1: $%1").arg(value); }); | ||||
|  | ||||
|         _code.replace(function.what, required.join(separator)); | ||||
|     } | ||||
| @ -149,10 +144,9 @@ QString AWPatternFunctions::insertKeyCount(QString _code, const QStringList &_ke | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Looking for count in code" << _code << "using list" << _keys; | ||||
|  | ||||
|     QList<AWPatternFunctions::AWFunction> found | ||||
|         = AWPatternFunctions::findFunctionCalls("aw_count", _code); | ||||
|     QList<AWPatternFunctions::AWFunction> found = AWPatternFunctions::findFunctionCalls("aw_count", _code); | ||||
|     for (auto &function : found) { | ||||
|         int count = _keys.filter(QRegExp(function.body)).count(); | ||||
|         int count = _keys.filter(QRegularExpression(function.body)).count(); | ||||
|  | ||||
|         _code.replace(function.what, QString::number(count)); | ||||
|     } | ||||
| @ -165,11 +159,10 @@ QString AWPatternFunctions::insertKeyNames(QString _code, const QStringList &_ke | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Looking for key names in code" << _code << "using list" << _keys; | ||||
|  | ||||
|     QList<AWPatternFunctions::AWFunction> found | ||||
|         = AWPatternFunctions::findFunctionCalls("aw_names", _code); | ||||
|     QList<AWPatternFunctions::AWFunction> found = AWPatternFunctions::findFunctionCalls("aw_names", _code); | ||||
|     for (auto &function : found) { | ||||
|         QString separator = function.args.isEmpty() ? "," : function.args.at(0); | ||||
|         QStringList required = _keys.filter(QRegExp(function.body)); | ||||
|         QStringList required = _keys.filter(QRegularExpression(function.body)); | ||||
|  | ||||
|         _code.replace(function.what, required.join(separator)); | ||||
|     } | ||||
| @ -182,13 +175,11 @@ QString AWPatternFunctions::insertKeys(QString _code, const QStringList &_keys) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Looking for keys in code" << _code << "using list" << _keys; | ||||
|  | ||||
|     QList<AWPatternFunctions::AWFunction> found | ||||
|         = AWPatternFunctions::findFunctionCalls("aw_keys", _code); | ||||
|     QList<AWPatternFunctions::AWFunction> found = AWPatternFunctions::findFunctionCalls("aw_keys", _code); | ||||
|     for (auto &function : found) { | ||||
|         QString separator = function.args.isEmpty() ? "," : function.args.at(0); | ||||
|         QStringList required = _keys.filter(QRegExp(function.body)); | ||||
|         std::for_each(required.begin(), required.end(), | ||||
|                       [](QString &value) { value = QString("$%1").arg(value); }); | ||||
|         QStringList required = _keys.filter(QRegularExpression(function.body)); | ||||
|         std::for_each(required.begin(), required.end(), [](QString &value) { value = QString("$%1").arg(value); }); | ||||
|  | ||||
|         _code.replace(function.what, required.join(separator)); | ||||
|     } | ||||
| @ -201,8 +192,7 @@ QString AWPatternFunctions::insertMacros(QString _code) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Looking for macros in code" << _code; | ||||
|  | ||||
|     QList<AWPatternFunctions::AWFunction> found | ||||
|         = AWPatternFunctions::findFunctionCalls("aw_macro", _code); | ||||
|     QList<AWPatternFunctions::AWFunction> found = AWPatternFunctions::findFunctionCalls("aw_macro", _code); | ||||
|     for (auto ¯o : found) { | ||||
|         // get macro params | ||||
|         if (macro.args.isEmpty()) { | ||||
| @ -215,17 +205,15 @@ QString AWPatternFunctions::insertMacros(QString _code) | ||||
|             = AWPatternFunctions::findFunctionCalls(QString("aw_macro_%1").arg(name), _code); | ||||
|         for (auto &function : macroUsage) { | ||||
|             if (function.args.count() != macro.args.count()) { | ||||
|                 qCWarning(LOG_AW) << "Invalid args count found for call" << function.what | ||||
|                                   << "with macro" << macro.what; | ||||
|                 qCWarning(LOG_AW) << "Invalid args count found for call" << function.what << "with macro" << macro.what; | ||||
|                 continue; | ||||
|             } | ||||
|             // generate body to replace | ||||
|             QString result = macro.body; | ||||
|             std::for_each(macro.args.cbegin(), macro.args.cend(), | ||||
|                           [&result, macro, function](const QString &arg) { | ||||
|                               int index = macro.args.indexOf(arg); | ||||
|                               result.replace(QString("$%1").arg(arg), function.args.at(index)); | ||||
|                           }); | ||||
|             std::for_each(macro.args.cbegin(), macro.args.cend(), [&result, macro, function](const QString &arg) { | ||||
|                 int index = macro.args.indexOf(arg); | ||||
|                 result.replace(QString("$%1").arg(arg), function.args.at(index)); | ||||
|             }); | ||||
|             // do replace | ||||
|             _code.replace(function.what, result); | ||||
|         } | ||||
| @ -238,16 +226,14 @@ QString AWPatternFunctions::insertMacros(QString _code) | ||||
| } | ||||
|  | ||||
|  | ||||
| QStringList AWPatternFunctions::findKeys(const QString &_code, const QStringList &_keys, | ||||
|                                          const bool _isBars) | ||||
| QStringList AWPatternFunctions::findKeys(const QString &_code, const QStringList &_keys, const bool _isBars) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Looking for keys in code" << _code << "using list" << _keys; | ||||
|  | ||||
|     QStringList selectedKeys; | ||||
|     QString replacedCode = _code; | ||||
|     for (auto &key : _keys) | ||||
|         if ((key.startsWith("bar") == _isBars) | ||||
|             && (replacedCode.contains(QString("$%1").arg(key)))) { | ||||
|         if ((key.startsWith("bar") == _isBars) && (replacedCode.contains(QString("$%1").arg(key)))) { | ||||
|             qCInfo(LOG_AW) << "Found key" << key << "with bar enabled" << _isBars; | ||||
|             selectedKeys.append(key); | ||||
|             replacedCode.replace(QString("$%1").arg(key), ""); | ||||
|  | ||||
| @ -73,8 +73,8 @@ QString AWTelemetryHandler::getLast(const QString &_group) const | ||||
|  | ||||
| void AWTelemetryHandler::init(const int _count, const bool _enableRemote, const QString &_clientId) | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Init telemetry with count" << _count << "enable remote" << _enableRemote | ||||
|                     << "client ID" << _clientId; | ||||
|     qCDebug(LOG_AW) << "Init telemetry with count" << _count << "enable remote" << _enableRemote << "client ID" | ||||
|                     << _clientId; | ||||
|  | ||||
|     m_storeCount = _count; | ||||
|     m_uploadEnabled = _enableRemote; | ||||
| @ -127,8 +127,7 @@ void AWTelemetryHandler::uploadTelemetry(const QString &_group, const QString &_ | ||||
|     } | ||||
|  | ||||
|     auto *manager = new QNetworkAccessManager(nullptr); | ||||
|     connect(manager, SIGNAL(finished(QNetworkReply *)), this, | ||||
|             SLOT(telemetryReplyRecieved(QNetworkReply *))); | ||||
|     connect(manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(telemetryReplyRecieved(QNetworkReply *))); | ||||
|  | ||||
|     QUrl url(REMOTE_TELEMETRY_URL); | ||||
|     QNetworkRequest request(url); | ||||
| @ -151,8 +150,7 @@ void AWTelemetryHandler::uploadTelemetry(const QString &_group, const QString &_ | ||||
| void AWTelemetryHandler::telemetryReplyRecieved(QNetworkReply *_reply) | ||||
| { | ||||
|     if (_reply->error() != QNetworkReply::NoError) { | ||||
|         qCWarning(LOG_AW) << "An error occurs" << _reply->error() << "with message" | ||||
|                           << _reply->errorString(); | ||||
|         qCWarning(LOG_AW) << "An error occurs" << _reply->error() << "with message" << _reply->errorString(); | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|  | ||||
| @ -34,9 +34,8 @@ AWUpdateHelper::AWUpdateHelper(QObject *_parent) | ||||
|     qCDebug(LOG_AW) << __PRETTY_FUNCTION__; | ||||
|  | ||||
|     m_foundVersion = QVersionNumber::fromString(VERSION); | ||||
|     m_genericConfig | ||||
|         = QString("%1/awesomewidgets/general.ini") | ||||
|               .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)); | ||||
|     m_genericConfig = QString("%1/awesomewidgets/general.ini") | ||||
|                           .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -53,9 +52,8 @@ void AWUpdateHelper::checkUpdates(const bool _showAnyway) | ||||
|     // showAnyway options requires to show message if no updates found on direct | ||||
|     // request. In case of automatic check no message will be shown | ||||
|     auto *manager = new QNetworkAccessManager(nullptr); | ||||
|     connect(manager, &QNetworkAccessManager::finished, [_showAnyway, this](QNetworkReply *reply) { | ||||
|         return versionReplyRecieved(reply, _showAnyway); | ||||
|     }); | ||||
|     connect(manager, &QNetworkAccessManager::finished, | ||||
|             [_showAnyway, this](QNetworkReply *reply) { return versionReplyRecieved(reply, _showAnyway); }); | ||||
|  | ||||
|     manager->get(QNetworkRequest(QUrl(VERSION_API))); | ||||
| } | ||||
| @ -64,16 +62,14 @@ void AWUpdateHelper::checkUpdates(const bool _showAnyway) | ||||
| bool AWUpdateHelper::checkVersion() | ||||
| { | ||||
|     QSettings settings(m_genericConfig, QSettings::IniFormat); | ||||
|     QVersionNumber version | ||||
|         = QVersionNumber::fromString(settings.value("Version", QString(VERSION)).toString()); | ||||
|     QVersionNumber version = QVersionNumber::fromString(settings.value("Version", QString(VERSION)).toString()); | ||||
|     // update version | ||||
|     settings.setValue("Version", QString(VERSION)); | ||||
|     settings.sync(); | ||||
|     qCInfo(LOG_AW) << "Found version" << version << "actual one is" << m_foundVersion; | ||||
|  | ||||
|     if ((version != m_foundVersion) && (!QString(CHANGELOG).isEmpty())) { | ||||
|         genMessageBox(i18nc("Changelog of %1", VERSION), QString(CHANGELOG).replace('@', '\n'), | ||||
|                       QMessageBox::Ok) | ||||
|         genMessageBox(i18nc("Changelog of %1", VERSION), QString(CHANGELOG).replace('@', '\n'), QMessageBox::Ok) | ||||
|             ->open(); | ||||
|         return true; | ||||
|     } else if (version != m_foundVersion) { | ||||
| @ -133,8 +129,7 @@ void AWUpdateHelper::versionReplyRecieved(QNetworkReply *_reply, const bool _sho | ||||
| { | ||||
|     qCDebug(LOG_AW) << "Show message anyway" << _showAnyway; | ||||
|     if (_reply->error() != QNetworkReply::NoError) { | ||||
|         qCWarning(LOG_AW) << "An error occurs" << _reply->error() << "with message" | ||||
|                           << _reply->errorString(); | ||||
|         qCWarning(LOG_AW) << "An error occurs" << _reply->error() << "with message" << _reply->errorString(); | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|  | ||||
| @ -7,7 +7,7 @@ include_directories( | ||||
|         ${CMAKE_BINARY_DIR} | ||||
|         ${PROJECT_TRDPARTY_DIR} | ||||
|         ${Qt_INCLUDE} | ||||
|         ${Kf5_INCLUDE} | ||||
|         ${Kf6_INCLUDE} | ||||
| ) | ||||
|  | ||||
| file(GLOB SUBPROJECT_SOURCE *.cpp ${PROJECT_TRDPARTY_DIR}/qreplytimeout/*.cpp ${CMAKE_SOURCE_DIR}/*.cpp) | ||||
| @ -28,9 +28,9 @@ file(RELATIVE_PATH SUBPROJECT_WEATHER_JSON ${CMAKE_SOURCE_DIR} ${SUBPROJECT_WEAT | ||||
| # prepare | ||||
| configure_file(${SUBPROJECT_WEATHER_JSON_IN} ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_WEATHER_JSON}) | ||||
|  | ||||
| qt5_wrap_ui(SUBPROJECT_UI_HEADER ${SUBPROJECT_UI}) | ||||
| qt6_wrap_ui(SUBPROJECT_UI_HEADER ${SUBPROJECT_UI}) | ||||
| add_library(${SUBPROJECT} STATIC ${SUBPROJECT_SOURCE} ${SUBPROJECT_HEADER} ${SUBPROJECT_UI_HEADER}) | ||||
| target_link_libraries(${SUBPROJECT} ${Qt_LIBRARIES} ${Kf5_LIBRARIES}) | ||||
| target_link_libraries(${SUBPROJECT} ${Qt_LIBRARIES} ${Kf6_LIBRARIES}) | ||||
|  | ||||
| # install | ||||
| install(DIRECTORY ${SUBPROJECT_CONFIGS} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) | ||||
| @ -41,5 +41,5 @@ install(DIRECTORY ${SUBPROJECT_SCRIPTS} DESTINATION ${DATA_INSTALL_DIR}/${PROJEC | ||||
| install(DIRECTORY ${SUBPROJECT_REQUESTS} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) | ||||
| install(DIRECTORY ${SUBPROJECT_UPGRADE} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) | ||||
| install(DIRECTORY ${SUBPROJECT_WEATHER} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) | ||||
| install(FILES ${SUBPROJECT_INI} DESTINATION ${CONFIG_INSTALL_DIR}) | ||||
| install(FILES ${SUBPROJECT_INI} DESTINATION ${KDE_INSTALL_CONFDIR}) | ||||
| install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_WEATHER_JSON} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}/weather) | ||||
|  | ||||
| @ -99,7 +99,7 @@ QString AbstractExtItem::writtableConfig() const | ||||
| { | ||||
|     QString path = m_fileName; | ||||
|     QString name = QFileInfo(path).fileName(); | ||||
|     path.remove(path.count() - name.count() - 1, name.count() + 1); | ||||
|     path.remove(path.length() - name.length() - 1, name.length() + 1); | ||||
|     QString dir = QFileInfo(path).fileName(); | ||||
|  | ||||
|     return QString("%1/awesomewidgets/%2/%3") | ||||
|  | ||||
| @ -79,7 +79,7 @@ public slots: | ||||
|     virtual void readConfiguration(); | ||||
|     virtual QVariantHash run() = 0; | ||||
|     virtual int showConfiguration(const QVariant &_args) = 0; | ||||
|     virtual bool tryDelete() const; | ||||
|     [[nodiscard]] virtual bool tryDelete() const; | ||||
|     virtual void writeConfiguration() const; | ||||
|  | ||||
| private slots: | ||||
|  | ||||
| @ -34,10 +34,9 @@ AbstractExtItemAggregator::AbstractExtItemAggregator(QWidget *_parent, QString _ | ||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||
|  | ||||
|     // create directory at $HOME | ||||
|     QString localDir | ||||
|         = QString("%1/awesomewidgets/%2") | ||||
|               .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)) | ||||
|               .arg(type()); | ||||
|     QString localDir = QString("%1/awesomewidgets/%2") | ||||
|                            .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)) | ||||
|                            .arg(type()); | ||||
|     QDir localDirectory; | ||||
|     if (localDirectory.mkpath(localDir)) | ||||
|         qCInfo(LOG_LIB) << "Created directory" << localDir; | ||||
| @ -47,11 +46,9 @@ AbstractExtItemAggregator::AbstractExtItemAggregator(QWidget *_parent, QString _ | ||||
|     createButton = ui->buttonBox->addButton(i18n("Create"), QDialogButtonBox::ActionRole); | ||||
|     deleteButton = ui->buttonBox->addButton(i18n("Remove"), QDialogButtonBox::ActionRole); | ||||
|  | ||||
|     connect(ui->buttonBox, SIGNAL(clicked(QAbstractButton *)), this, | ||||
|             SLOT(editItemButtonPressed(QAbstractButton *))); | ||||
|     connect(ui->buttonBox, SIGNAL(clicked(QAbstractButton *)), this, SLOT(editItemButtonPressed(QAbstractButton *))); | ||||
|     connect(ui->buttonBox, SIGNAL(rejected()), this, SLOT(reject())); | ||||
|     connect(ui->listWidget, SIGNAL(itemActivated(QListWidgetItem *)), this, | ||||
|             SLOT(editItemActivated(QListWidgetItem *))); | ||||
|     connect(ui->listWidget, SIGNAL(itemActivated(QListWidgetItem *)), this, SLOT(editItemActivated(QListWidgetItem *))); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -118,8 +115,7 @@ void AbstractExtItemAggregator::editItem() | ||||
| QString AbstractExtItemAggregator::getName() | ||||
| { | ||||
|     bool ok; | ||||
|     QString name = QInputDialog::getText(this, i18n("Enter file name"), i18n("File name"), | ||||
|                                          QLineEdit::Normal, "", &ok); | ||||
|     QString name = QInputDialog::getText(this, i18n("Enter file name"), i18n("File name"), QLineEdit::Normal, "", &ok); | ||||
|     if ((!ok) || (name.isEmpty())) | ||||
|         return ""; | ||||
|     if (!name.endsWith(".desktop")) | ||||
| @ -187,8 +183,7 @@ QVariant AbstractExtItemAggregator::configArgs() const | ||||
|  | ||||
| QStringList AbstractExtItemAggregator::directories() const | ||||
| { | ||||
|     auto dirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, | ||||
|                                           QString("awesomewidgets/%1").arg(type()), | ||||
|     auto dirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QString("awesomewidgets/%1").arg(type()), | ||||
|                                           QStandardPaths::LocateDirectory); | ||||
|  | ||||
|     return dirs; | ||||
|  | ||||
| @ -47,10 +47,9 @@ public: | ||||
|     { | ||||
|         QString fileName = getName(); | ||||
|         int number = uniqNumber(); | ||||
|         QString dir | ||||
|             = QString("%1/awesomewidgets/%2") | ||||
|                   .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)) | ||||
|                   .arg(m_type); | ||||
|         QString dir = QString("%1/awesomewidgets/%2") | ||||
|                           .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)) | ||||
|                           .arg(m_type); | ||||
|         if (fileName.isEmpty()) { | ||||
|             qCWarning(LOG_LIB) << "Nothing to create"; | ||||
|             return; | ||||
| @ -68,7 +67,7 @@ public: | ||||
|     void editItem(); | ||||
|     QString getName(); | ||||
|     virtual void initItems() = 0; | ||||
|     AbstractExtItem *itemFromWidget() const; | ||||
|     [[nodiscard]] AbstractExtItem *itemFromWidget() const; | ||||
|     void repaintList() const; | ||||
|     [[nodiscard]] int uniqNumber() const; | ||||
|     // get methods | ||||
|  | ||||
| @ -33,8 +33,7 @@ public: | ||||
|         : QObject(_parent){}; | ||||
|     ~AbstractQuotesProvider() override = default; | ||||
|     virtual void initUrl(const QString &_asset) = 0; | ||||
|     [[nodiscard]] virtual QVariantHash parse(const QByteArray &_source, | ||||
|                                              const QVariantHash &_oldValues) const = 0; | ||||
|     [[nodiscard]] virtual QVariantHash parse(const QByteArray &_source, const QVariantHash &_oldValues) const = 0; | ||||
|     [[nodiscard]] QString tag(const QString &_type) const | ||||
|     { | ||||
|         return dynamic_cast<AbstractExtItem *>(parent())->tag(_type); | ||||
|  | ||||
| @ -38,7 +38,7 @@ public: | ||||
|     { | ||||
|         return dynamic_cast<AbstractExtItem *>(parent())->tag(_type); | ||||
|     }; | ||||
|     virtual QUrl url() const = 0; | ||||
|     [[nodiscard]] virtual QUrl url() const = 0; | ||||
| }; | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -18,6 +18,8 @@ | ||||
| #ifndef AWABSTRACTFORMATTER_H | ||||
| #define AWABSTRACTFORMATTER_H | ||||
|  | ||||
| #include <QRegularExpression> | ||||
|  | ||||
| #include "abstractextitem.h" | ||||
|  | ||||
|  | ||||
| @ -43,7 +45,7 @@ public: | ||||
|  | ||||
| public slots: | ||||
|     void readConfiguration() override; | ||||
|     QVariantHash run() override { return QVariantHash(); }; | ||||
|     QVariantHash run() override { return {}; }; | ||||
|     void writeConfiguration() const override; | ||||
|  | ||||
| private: | ||||
|  | ||||
| @ -51,8 +51,8 @@ QString AWFloatFormatter::convert(const QVariant &_value) const | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "Convert value" << _value; | ||||
|  | ||||
|     QString output = QString("%1").arg(_value.toDouble() * multiplier() + summand(), count(), | ||||
|                                        format(), precision(), fillChar()); | ||||
|     QString output | ||||
|         = QString("%1").arg(_value.toDouble() * multiplier() + summand(), count(), format(), precision(), fillChar()); | ||||
|     if (forceWidth()) | ||||
|         output = output.left(count()); | ||||
|  | ||||
| @ -149,8 +149,7 @@ void AWFloatFormatter::setFormat(char _format) | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "Set format" << _format; | ||||
|     // http://doc.qt.io/qt-5/qstring.html#argument-formats | ||||
|     if ((_format != 'e') && (_format != 'E') && (_format != 'f') && (_format != 'g') | ||||
|         && (_format != 'G')) { | ||||
|     if ((_format != 'e') && (_format != 'E') && (_format != 'f') && (_format != 'g') && (_format != 'G')) { | ||||
|         qCWarning(LOG_LIB) << "Invalid format" << _format; | ||||
|         _format = 'f'; | ||||
|     } | ||||
|  | ||||
| @ -53,9 +53,8 @@ QString AWJsonFormatter::convert(const QVariant &_value) const | ||||
|     qCDebug(LOG_LIB) << "Convert value" << _value; | ||||
|  | ||||
|     // check if _value is string and parse first if required | ||||
|     QJsonDocument json = _value.type() == QVariant::String | ||||
|                              ? QJsonDocument::fromJson(_value.toString().toUtf8()) | ||||
|                              : QJsonDocument::fromVariant(_value); | ||||
|     QJsonDocument json = _value.userType() == QMetaType::QString ? QJsonDocument::fromJson(_value.toString().toUtf8()) | ||||
|                                                            : QJsonDocument::fromVariant(_value); | ||||
|     QVariant converted = json.toVariant(); | ||||
|     for (auto &element : m_splittedPath) | ||||
|         converted = getFromJson(converted, element); | ||||
| @ -148,9 +147,9 @@ QVariant AWJsonFormatter::getFromJson(const QVariant &_value, const QVariant &_e | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "Looking for element" << _element << "in" << _value; | ||||
|  | ||||
|     if (_element.type() == QVariant::String) { | ||||
|     if (_element.userType() == QMetaType::QString) { | ||||
|         return getFromMap(_value, _element.toString()); | ||||
|     } else if (_element.type() == QVariant::Int) { | ||||
|     } else if (_element.userType() == QMetaType::Int) { | ||||
|         return getFromList(_value, _element.toInt()); | ||||
|     } else { | ||||
|         qCWarning(LOG_LIB) << "Unknown type" << _element.typeName(); | ||||
|  | ||||
| @ -97,7 +97,7 @@ void AWListFormatter::setFilter(const QString &_filter) | ||||
|     qCDebug(LOG_LIB) << "Filter" << _filter; | ||||
|  | ||||
|     m_filter = _filter; | ||||
|     m_regex = QRegExp(m_filter); | ||||
|     m_regex = QRegularExpression(m_filter); | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -58,7 +58,7 @@ private: | ||||
|     QString m_filter = ""; | ||||
|     QString m_separator = ""; | ||||
|     bool m_sorted = false; | ||||
|     QRegExp m_regex; | ||||
|     QRegularExpression m_regex; | ||||
| }; | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -59,8 +59,8 @@ QString AWScriptFormatter::convert(const QVariant &_value) const | ||||
|     QJSValue result = fn.call(args); | ||||
|  | ||||
|     if (result.isError()) { | ||||
|         qCWarning(LOG_LIB) << "Uncaught exception at line" << result.property("lineNumber").toInt() | ||||
|                            << ":" << result.toString(); | ||||
|         qCWarning(LOG_LIB) << "Uncaught exception at line" << result.property("lineNumber").toInt() << ":" | ||||
|                            << result.toString(); | ||||
|         return ""; | ||||
|     } else { | ||||
|         return result.toString(); | ||||
| @ -199,9 +199,7 @@ void AWScriptFormatter::initProgram() | ||||
| { | ||||
|     // init JS code | ||||
|     if (appendCode()) | ||||
|         m_program = QString("(function(value) { %1%2 })") | ||||
|                         .arg(code()) | ||||
|                         .arg(hasReturn() ? "" : "; return output;"); | ||||
|         m_program = QString("(function(value) { %1%2 })").arg(code()).arg(hasReturn() ? "" : "; return output;"); | ||||
|     else | ||||
|         m_program = code(); | ||||
|  | ||||
|  | ||||
| @ -139,9 +139,8 @@ private: | ||||
|                 qCInfo(LOG_LIB) << "Found file" << file << "in" << dir; | ||||
|                 QString filePath = QString("%1/%2").arg(dir).arg(file); | ||||
|                 // check if already exists | ||||
|                 if (std::any_of(items.cbegin(), items.cend(), [&filePath](AbstractExtItem *item) { | ||||
|                         return (item->fileName() == filePath); | ||||
|                     })) | ||||
|                 if (std::any_of(items.cbegin(), items.cend(), | ||||
|                                 [&filePath](AbstractExtItem *item) { return (item->fileName() == filePath); })) | ||||
|                     continue; | ||||
|                 items.append(new T(this, filePath)); | ||||
|             } | ||||
| @ -149,9 +148,7 @@ private: | ||||
|  | ||||
|         // sort items | ||||
|         std::sort(items.begin(), items.end(), | ||||
|                   [](const AbstractExtItem *lhs, const AbstractExtItem *rhs) { | ||||
|                       return lhs->number() < rhs->number(); | ||||
|                   }); | ||||
|                   [](const AbstractExtItem *lhs, const AbstractExtItem *rhs) { return lhs->number() < rhs->number(); }); | ||||
|         return items; | ||||
|     }; | ||||
| }; | ||||
|  | ||||
| @ -20,9 +20,7 @@ | ||||
|  | ||||
| #include <KI18n/KLocalizedString> | ||||
|  | ||||
| #include <QDir> | ||||
| #include <QSettings> | ||||
| #include <QTextCodec> | ||||
|  | ||||
| #include <qreplytimeout/qreplytimeout.h> | ||||
|  | ||||
| @ -45,8 +43,7 @@ ExtNetworkRequest::ExtNetworkRequest(QWidget *_parent, const QString &_filePath) | ||||
|     // HACK declare as child of nullptr to avoid crash with plasmawindowed | ||||
|     // in the destructor | ||||
|     m_manager = new QNetworkAccessManager(nullptr); | ||||
|     connect(m_manager, SIGNAL(finished(QNetworkReply *)), this, | ||||
|             SLOT(networkReplyReceived(QNetworkReply *))); | ||||
|     connect(m_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(networkReplyReceived(QNetworkReply *))); | ||||
|  | ||||
|     connect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); | ||||
| } | ||||
| @ -56,8 +53,7 @@ ExtNetworkRequest::~ExtNetworkRequest() | ||||
| { | ||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||
|  | ||||
|     disconnect(m_manager, SIGNAL(finished(QNetworkReply *)), this, | ||||
|                SLOT(networkReplyReceived(QNetworkReply *))); | ||||
|     disconnect(m_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(networkReplyReceived(QNetworkReply *))); | ||||
|     disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); | ||||
|  | ||||
|     m_manager->deleteLater(); | ||||
| @ -171,14 +167,12 @@ void ExtNetworkRequest::writeConfiguration() const | ||||
| void ExtNetworkRequest::networkReplyReceived(QNetworkReply *_reply) | ||||
| { | ||||
|     if (_reply->error() != QNetworkReply::NoError) { | ||||
|         qCWarning(LOG_AW) << "An error occurs" << _reply->error() << "with message" | ||||
|                           << _reply->errorString(); | ||||
|         qCWarning(LOG_AW) << "An error occurs" << _reply->error() << "with message" << _reply->errorString(); | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|     m_isRunning = false; | ||||
|     m_values[tag("response")] | ||||
|         = QTextCodec::codecForMib(106)->toUnicode(_reply->readAll()).trimmed(); | ||||
|     m_values[tag("response")] = QString::fromUtf8(_reply->readAll()).trimmed(); | ||||
|  | ||||
|     emit(dataReceived(m_values)); | ||||
| } | ||||
|  | ||||
| @ -50,8 +50,7 @@ ExtQuotes::ExtQuotes(QWidget *_parent, const QString &_filePath) | ||||
|     // HACK declare as child of nullptr to avoid crash with plasmawindowed | ||||
|     // in the destructor | ||||
|     m_manager = new QNetworkAccessManager(nullptr); | ||||
|     connect(m_manager, SIGNAL(finished(QNetworkReply *)), this, | ||||
|             SLOT(quotesReplyReceived(QNetworkReply *))); | ||||
|     connect(m_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(quotesReplyReceived(QNetworkReply *))); | ||||
|  | ||||
|     connect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); | ||||
| } | ||||
| @ -61,8 +60,7 @@ ExtQuotes::~ExtQuotes() | ||||
| { | ||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||
|  | ||||
|     disconnect(m_manager, SIGNAL(finished(QNetworkReply *)), this, | ||||
|                SLOT(quotesReplyReceived(QNetworkReply *))); | ||||
|     disconnect(m_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(quotesReplyReceived(QNetworkReply *))); | ||||
|     disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); | ||||
|  | ||||
|     m_manager->deleteLater(); | ||||
| @ -176,8 +174,7 @@ void ExtQuotes::writeConfiguration() const | ||||
| void ExtQuotes::quotesReplyReceived(QNetworkReply *_reply) | ||||
| { | ||||
|     if (_reply->error() != QNetworkReply::NoError) { | ||||
|         qCWarning(LOG_AW) << "An error occurs" << _reply->error() << "with message" | ||||
|                           << _reply->errorString(); | ||||
|         qCWarning(LOG_AW) << "An error occurs" << _reply->error() << "with message" << _reply->errorString(); | ||||
|         return; | ||||
|     } | ||||
|  | ||||
| @ -218,10 +215,9 @@ void ExtQuotes::translate() | ||||
|     ui->label_name->setText(i18n("Name")); | ||||
|     ui->label_comment->setText(i18n("Comment")); | ||||
|     ui->label_number->setText(i18n("Tag")); | ||||
|     ui->label->setText( | ||||
|         i18n("<html><head/><body><p>Use Stooq ticker to get quotes for the instrument. Refer to <a " | ||||
|              "href=\"https://stooq.com/\"><span style=\" text-decoration: underline; " | ||||
|              "color:#0057ae;\">https://stooq.com/</span></a></p></body></html>")); | ||||
|     ui->label->setText(i18n("<html><head/><body><p>Use Stooq ticker to get quotes for the instrument. Refer to <a " | ||||
|                             "href=\"https://stooq.com/\"><span style=\" text-decoration: underline; " | ||||
|                             "color:#0057ae;\">https://stooq.com/</span></a></p></body></html>")); | ||||
|     ui->label_ticker->setText(i18n("Ticker")); | ||||
|     ui->checkBox_active->setText(i18n("Active")); | ||||
|     ui->label_schedule->setText(i18n("Schedule")); | ||||
|  | ||||
| @ -24,7 +24,6 @@ | ||||
| #include <QJsonDocument> | ||||
| #include <QSettings> | ||||
| #include <QStandardPaths> | ||||
| #include <QTextCodec> | ||||
|  | ||||
| #include "awdebug.h" | ||||
|  | ||||
| @ -80,9 +79,8 @@ ExtScript *ExtScript::copy(const QString &_fileName, const int _number) | ||||
|  | ||||
| QString ExtScript::jsonFiltersFile() | ||||
| { | ||||
|     QString fileName | ||||
|         = QStandardPaths::locate(QStandardPaths::GenericDataLocation, | ||||
|                                  "awesomewidgets/scripts/awesomewidgets-extscripts-filters.json"); | ||||
|     QString fileName = QStandardPaths::locate(QStandardPaths::GenericDataLocation, | ||||
|                                               "awesomewidgets/scripts/awesomewidgets-extscripts-filters.json"); | ||||
|     qCInfo(LOG_LIB) << "Filters file" << fileName; | ||||
|  | ||||
|     return fileName; | ||||
| @ -272,12 +270,9 @@ int ExtScript::showConfiguration(const QVariant &_args) | ||||
|     ui->lineEdit_socket->setText(socket()); | ||||
|     ui->spinBox_interval->setValue(interval()); | ||||
|     // filters | ||||
|     ui->checkBox_colorFilter->setCheckState(filters().contains("color") ? Qt::Checked | ||||
|                                                                         : Qt::Unchecked); | ||||
|     ui->checkBox_linesFilter->setCheckState(filters().contains("newline") ? Qt::Checked | ||||
|                                                                           : Qt::Unchecked); | ||||
|     ui->checkBox_spaceFilter->setCheckState(filters().contains("space") ? Qt::Checked | ||||
|                                                                         : Qt::Unchecked); | ||||
|     ui->checkBox_colorFilter->setCheckState(filters().contains("color") ? Qt::Checked : Qt::Unchecked); | ||||
|     ui->checkBox_linesFilter->setCheckState(filters().contains("newline") ? Qt::Checked : Qt::Unchecked); | ||||
|     ui->checkBox_spaceFilter->setCheckState(filters().contains("space") ? Qt::Checked : Qt::Unchecked); | ||||
|  | ||||
|     int ret = exec(); | ||||
|     if (ret != 1) | ||||
| @ -329,11 +324,9 @@ void ExtScript::startProcess() | ||||
| void ExtScript::updateValue() | ||||
| { | ||||
|     qCInfo(LOG_LIB) << "Cmd returns" << m_process->exitCode(); | ||||
|     QString qdebug | ||||
|         = QTextCodec::codecForMib(106)->toUnicode(m_process->readAllStandardError()).trimmed(); | ||||
|     QString qdebug = QString::fromUtf8(m_process->readAllStandardError()).trimmed(); | ||||
|     qCInfo(LOG_LIB) << "Error" << qdebug; | ||||
|     QString qoutput | ||||
|         = QTextCodec::codecForMib(106)->toUnicode(m_process->readAllStandardOutput()).trimmed(); | ||||
|     QString qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed(); | ||||
|     qCInfo(LOG_LIB) << "Output" << qoutput; | ||||
|     QString strValue; | ||||
|  | ||||
|  | ||||
| @ -20,9 +20,7 @@ | ||||
|  | ||||
| #include <KI18n/KLocalizedString> | ||||
|  | ||||
| #include <QDir> | ||||
| #include <QSettings> | ||||
| #include <QTextCodec> | ||||
|  | ||||
| #include "awdebug.h" | ||||
|  | ||||
| @ -215,12 +213,10 @@ void ExtUpgrade::updateValue() | ||||
|     qCInfo(LOG_LIB) << "Cmd returns" << m_process->exitCode(); | ||||
|     qCInfo(LOG_LIB) << "Error" << m_process->readAllStandardError(); | ||||
|  | ||||
|     QString qoutput | ||||
|         = QTextCodec::codecForMib(106)->toUnicode(m_process->readAllStandardOutput()).trimmed(); | ||||
|     QString qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed(); | ||||
|     m_values[tag("pkgcount")] = [this](const QString &output) { | ||||
|         return filter().isEmpty() | ||||
|                    ? output.split('\n', Qt::SkipEmptyParts).count() - null() | ||||
|                    : output.split('\n', Qt::SkipEmptyParts).filter(QRegExp(filter())).count(); | ||||
|         return filter().isEmpty() ? output.split('\n', Qt::SkipEmptyParts).count() - null() | ||||
|                                   : output.split('\n', Qt::SkipEmptyParts).filter(QRegularExpression(filter())).count(); | ||||
|     }(qoutput); | ||||
|  | ||||
|     emit(dataReceived(m_values)); | ||||
|  | ||||
| @ -53,8 +53,7 @@ ExtWeather::ExtWeather(QWidget *_parent, const QString &_filePath) | ||||
|     // HACK declare as child of nullptr to avoid crash with plasmawindowed | ||||
|     // in the destructor | ||||
|     m_manager = new QNetworkAccessManager(nullptr); | ||||
|     connect(m_manager, SIGNAL(finished(QNetworkReply *)), this, | ||||
|             SLOT(weatherReplyReceived(QNetworkReply *))); | ||||
|     connect(m_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(weatherReplyReceived(QNetworkReply *))); | ||||
|  | ||||
|     connect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); | ||||
| } | ||||
| @ -64,8 +63,7 @@ ExtWeather::~ExtWeather() | ||||
| { | ||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||
|  | ||||
|     disconnect(m_manager, SIGNAL(finished(QNetworkReply *)), this, | ||||
|                SLOT(weatherReplyReceived(QNetworkReply *))); | ||||
|     disconnect(m_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(weatherReplyReceived(QNetworkReply *))); | ||||
|     disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); | ||||
|  | ||||
|     m_manager->deleteLater(); | ||||
| @ -92,9 +90,8 @@ ExtWeather *ExtWeather::copy(const QString &_fileName, const int _number) | ||||
|  | ||||
| QString ExtWeather::jsonMapFile() | ||||
| { | ||||
|     QString fileName | ||||
|         = QStandardPaths::locate(QStandardPaths::GenericDataLocation, | ||||
|                                  "awesomewidgets/weather/awesomewidgets-extweather-ids.json"); | ||||
|     QString fileName = QStandardPaths::locate(QStandardPaths::GenericDataLocation, | ||||
|                                               "awesomewidgets/weather/awesomewidgets-extweather-ids.json"); | ||||
|     qCInfo(LOG_LIB) << "Map file" << fileName; | ||||
|  | ||||
|     return fileName; | ||||
| @ -339,8 +336,7 @@ void ExtWeather::sendRequest() | ||||
| void ExtWeather::weatherReplyReceived(QNetworkReply *_reply) | ||||
| { | ||||
|     if (_reply->error() != QNetworkReply::NoError) { | ||||
|         qCWarning(LOG_AW) << "An error occurs" << _reply->error() << "with message" | ||||
|                           << _reply->errorString(); | ||||
|         qCWarning(LOG_AW) << "An error occurs" << _reply->error() << "with message" << _reply->errorString(); | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|  | ||||
| @ -100,7 +100,7 @@ QString GraphicalItem::image(const QVariant &value) | ||||
|  | ||||
|     m_scene->clear(); | ||||
|     int scale[2] = {1, 1}; | ||||
|     float converted = m_helper->getPercents(value.toFloat(), minValue(), maxValue()); | ||||
|     float converted = GraphicalItemHelper::getPercents(value.toFloat(), minValue(), maxValue()); | ||||
|  | ||||
|     // paint | ||||
|     switch (m_type) { | ||||
| @ -136,8 +136,7 @@ QString GraphicalItem::image(const QVariant &value) | ||||
|     QByteArray byteArray; | ||||
|     QBuffer buffer(&byteArray); | ||||
|     pixmap.save(&buffer, "PNG"); | ||||
|     QString url | ||||
|         = QString("<img src=\"data:image/png;base64,%1\"/>").arg(QString(byteArray.toBase64())); | ||||
|     QString url = QString("<img src=\"data:image/png;base64,%1\"/>").arg(QString(byteArray.toBase64())); | ||||
|  | ||||
|     return url; | ||||
| } | ||||
| @ -458,12 +457,12 @@ int GraphicalItem::showConfiguration(const QVariant &_args) | ||||
|     ui->doubleSpinBox_max->setValue(maxValue()); | ||||
|     ui->doubleSpinBox_min->setValue(minValue()); | ||||
|     ui->spinBox_count->setValue(count()); | ||||
|     if (m_helper->isColor(activeColor())) | ||||
|     if (GraphicalItemHelper::isColor(activeColor())) | ||||
|         ui->comboBox_activeImageType->setCurrentIndex(0); | ||||
|     else | ||||
|         ui->comboBox_activeImageType->setCurrentIndex(1); | ||||
|     ui->lineEdit_activeColor->setText(activeColor()); | ||||
|     if (m_helper->isColor(inactiveColor())) | ||||
|     if (GraphicalItemHelper::isColor(inactiveColor())) | ||||
|         ui->comboBox_inactiveImageType->setCurrentIndex(0); | ||||
|     else | ||||
|         ui->comboBox_inactiveImageType->setCurrentIndex(1); | ||||
| @ -540,9 +539,8 @@ void GraphicalItem::changeColor() | ||||
|  | ||||
|     QString outputColor; | ||||
|     if (state == 0) { | ||||
|         QColor color = m_helper->stringToColor(lineEdit->text()); | ||||
|         QColor newColor = QColorDialog::getColor(color, this, i18n("Select color"), | ||||
|                                                  QColorDialog::ShowAlphaChannel); | ||||
|         QColor color = GraphicalItemHelper::stringToColor(lineEdit->text()); | ||||
|         QColor newColor = QColorDialog::getColor(color, this, i18n("Select color"), QColorDialog::ShowAlphaChannel); | ||||
|         if (!newColor.isValid()) | ||||
|             return; | ||||
|         qCInfo(LOG_LIB) << "Selected color" << newColor; | ||||
| @ -557,10 +555,9 @@ void GraphicalItem::changeColor() | ||||
|     } else if (state == 1) { | ||||
|         QString path = lineEdit->text(); | ||||
|         QString directory = QFileInfo(path).absolutePath(); | ||||
|         outputColor | ||||
|             = QFileDialog::getOpenFileUrl(this, i18n("Select path"), directory, | ||||
|                                           i18n("Images (*.png *.bpm *.jpg);;All files (*.*)")) | ||||
|                   .toString(); | ||||
|         outputColor = QFileDialog::getOpenFileUrl(this, i18n("Select path"), directory, | ||||
|                                                   i18n("Images (*.png *.bpm *.jpg);;All files (*.*)")) | ||||
|                           .toString(); | ||||
|  | ||||
|         qCInfo(LOG_LIB) << "Selected path" << outputColor; | ||||
|     } | ||||
|  | ||||
| @ -91,7 +91,7 @@ public: | ||||
|  | ||||
| public slots: | ||||
|     void readConfiguration() override; | ||||
|     QVariantHash run() override { return QVariantHash(); }; | ||||
|     QVariantHash run() override { return {}; }; | ||||
|     int showConfiguration(const QVariant &_args) override; | ||||
|     void writeConfiguration() const override; | ||||
|  | ||||
|  | ||||
| @ -40,11 +40,11 @@ GraphicalItemHelper::~GraphicalItemHelper() | ||||
| } | ||||
|  | ||||
|  | ||||
| void GraphicalItemHelper::setParameters(const QString &_active, const QString &_inactive, | ||||
|                                         const int _width, const int _height, const int _count) | ||||
| void GraphicalItemHelper::setParameters(const QString &_active, const QString &_inactive, const int _width, | ||||
|                                         const int _height, const int _count) | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "Use active color" << _active << ", inactive" << _inactive << ", width" | ||||
|                      << _width << ", height" << _height << ", count" << _count; | ||||
|     qCDebug(LOG_LIB) << "Use active color" << _active << ", inactive" << _inactive << ", width" << _width << ", height" | ||||
|                      << _height << ", count" << _count; | ||||
|  | ||||
|     // put images to pens if any otherwise set pen colors | ||||
|     // Images resize to content here as well | ||||
| @ -155,11 +155,10 @@ void GraphicalItemHelper::paintHorizontal(const float _percent) | ||||
|     m_inactivePen.setWidth(m_height); | ||||
|     // inactive | ||||
|     auto width = static_cast<float>(m_width); | ||||
|     m_scene->addLine(_percent * width + 0.5 * m_height, 0.5 * m_height, m_width + 0.5 * m_height, | ||||
|                      0.5 * m_height, m_inactivePen); | ||||
|     m_scene->addLine(_percent * width + 0.5 * m_height, 0.5 * m_height, m_width + 0.5 * m_height, 0.5 * m_height, | ||||
|                      m_inactivePen); | ||||
|     // active | ||||
|     m_scene->addLine(-0.5 * m_height, 0.5 * m_height, _percent * width - 0.5 * m_height, | ||||
|                      0.5 * m_height, m_activePen); | ||||
|     m_scene->addLine(-0.5 * m_height, 0.5 * m_height, _percent * width - 0.5 * m_height, 0.5 * m_height, m_activePen); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -170,8 +169,8 @@ void GraphicalItemHelper::paintVertical(const float _percent) | ||||
|     m_activePen.setWidth(m_height); | ||||
|     m_inactivePen.setWidth(m_height); | ||||
|     // inactive | ||||
|     m_scene->addLine(0.5 * m_width, -0.5 * m_width, 0.5 * m_width, | ||||
|                      (1.0 - _percent) * m_height - 0.5 * m_width, m_inactivePen); | ||||
|     m_scene->addLine(0.5 * m_width, -0.5 * m_width, 0.5 * m_width, (1.0 - _percent) * m_height - 0.5 * m_width, | ||||
|                      m_inactivePen); | ||||
|     // active | ||||
|     m_scene->addLine(0.5 * m_width, (1.0 - _percent) * m_height + 0.5 * m_width, 0.5 * m_width, | ||||
|                      m_height + 0.5 * m_width, m_activePen); | ||||
|  | ||||
| @ -33,8 +33,7 @@ public: | ||||
|     explicit GraphicalItemHelper(QObject *_parent = nullptr, QGraphicsScene *_scene = nullptr); | ||||
|     ~GraphicalItemHelper() override; | ||||
|     // parameters | ||||
|     void setParameters(const QString &_active, const QString &_inactive, int _width, int _height, | ||||
|                        int _count); | ||||
|     void setParameters(const QString &_active, const QString &_inactive, int _width, int _height, int _count); | ||||
|     // paint methods | ||||
|     void paintBars(float _value); | ||||
|     void paintCircle(float _percent); | ||||
|  | ||||
| @ -66,8 +66,7 @@ QVariantHash OWMWeatherProvider::parse(const QVariantMap &_json) const | ||||
|         return parseSingleJson(_json); | ||||
|     } else { | ||||
|         QVariantList list = _json["list"].toList(); | ||||
|         return parseSingleJson(list.count() <= m_ts ? list.at(m_ts - 1).toMap() | ||||
|                                                     : list.last().toMap()); | ||||
|         return parseSingleJson(list.count() <= m_ts ? list.at(m_ts - 1).toMap() : list.last().toMap()); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -100,7 +99,7 @@ QVariantHash OWMWeatherProvider::parseSingleJson(const QVariantMap &_json) const | ||||
|     } | ||||
|  | ||||
|     // timestamp | ||||
|     output[tag("timestamp")] = QDateTime::fromTime_t(_json["dt"].toUInt()).toUTC(); | ||||
|     output[tag("timestamp")] = QDateTime::fromSecsSinceEpoch(_json["dt"].toUInt()).toUTC(); | ||||
|  | ||||
|     return output; | ||||
| } | ||||
|  | ||||
| @ -67,10 +67,8 @@ void QCronScheduler::expired() | ||||
| { | ||||
|     QDateTime now = QDateTime::currentDateTime(); | ||||
|  | ||||
|     if (m_schedule.minutes.contains(now.time().minute()) | ||||
|         && m_schedule.hours.contains(now.time().hour()) | ||||
|         && m_schedule.days.contains(now.date().day()) | ||||
|         && m_schedule.months.contains(now.date().month()) | ||||
|     if (m_schedule.minutes.contains(now.time().minute()) && m_schedule.hours.contains(now.time().hour()) | ||||
|         && m_schedule.days.contains(now.date().day()) && m_schedule.months.contains(now.date().month()) | ||||
|         && m_schedule.weekdays.contains(now.date().dayOfWeek())) | ||||
|         emit(activated()); | ||||
| } | ||||
| @ -137,7 +135,7 @@ QList<int> QCronScheduler::QCronField::toList() | ||||
| { | ||||
|     // error checking | ||||
|     if ((minValue == -1) || (maxValue == -1)) | ||||
|         return QList<int>(); | ||||
|         return {}; | ||||
|  | ||||
|     QList<int> output; | ||||
|     for (auto &i = minValue; i <= maxValue; ++i) { | ||||
|  | ||||
| @ -28,20 +28,20 @@ class QCronScheduler : public QObject | ||||
|     Q_OBJECT | ||||
|  | ||||
| public: | ||||
|     typedef struct { | ||||
|     struct QCronRunSchedule { | ||||
|         QList<int> minutes; | ||||
|         QList<int> hours; | ||||
|         QList<int> days; | ||||
|         QList<int> months; | ||||
|         QList<int> weekdays; | ||||
|     } QCronRunSchedule; | ||||
|     typedef struct { | ||||
|     }; | ||||
|     struct QCronField { | ||||
|         int minValue = -1; | ||||
|         int maxValue = -1; | ||||
|         int div = 1; | ||||
|         void fromRange(const QString &_range, int _min, int _max); | ||||
|         QList<int> toList(); | ||||
|     } QCronField; | ||||
|     }; | ||||
|  | ||||
|     explicit QCronScheduler(QObject *_parent = nullptr); | ||||
|     ~QCronScheduler() override; | ||||
|  | ||||
| @ -17,7 +17,6 @@ | ||||
|  | ||||
| #include "stooqquotesprovider.h" | ||||
|  | ||||
| #include <QTextCodec> | ||||
| #include <QUrlQuery> | ||||
|  | ||||
| #include "awdebug.h" | ||||
| @ -49,15 +48,13 @@ void StooqQuotesProvider::initUrl(const QString &_asset) | ||||
| } | ||||
|  | ||||
|  | ||||
| QVariantHash StooqQuotesProvider::parse(const QByteArray &_source, | ||||
|                                         const QVariantHash &_oldValues) const | ||||
| QVariantHash StooqQuotesProvider::parse(const QByteArray &_source, const QVariantHash &_oldValues) const | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "Parse csv" << _source; | ||||
|  | ||||
|     QVariantHash values; | ||||
|  | ||||
|     QStringList sourceValues | ||||
|         = QTextCodec::codecForMib(106)->toUnicode(_source).trimmed().split(','); | ||||
|     QStringList sourceValues = QString::fromUtf8(_source).trimmed().split(','); | ||||
|     if (sourceValues.count() != 2) { | ||||
|         qCWarning(LOG_LIB) << "Parse error" << sourceValues; | ||||
|         return values; | ||||
|  | ||||
| @ -31,8 +31,7 @@ public: | ||||
|     explicit StooqQuotesProvider(QObject *_parent); | ||||
|     ~StooqQuotesProvider() override; | ||||
|     void initUrl(const QString &_asset) override; | ||||
|     [[nodiscard]] QVariantHash parse(const QByteArray &_source, | ||||
|                                      const QVariantHash &_oldValues) const override; | ||||
|     [[nodiscard]] QVariantHash parse(const QByteArray &_source, const QVariantHash &_oldValues) const override; | ||||
|     [[nodiscard]] QUrl url() const override; | ||||
|  | ||||
| private: | ||||
|  | ||||
| @ -49,8 +49,7 @@ void YahooQuotesProvider::initUrl(const QString &_asset) | ||||
| } | ||||
|  | ||||
|  | ||||
| QVariantHash YahooQuotesProvider::parse(const QByteArray &_source, | ||||
|                                         const QVariantHash &_oldValues) const | ||||
| QVariantHash YahooQuotesProvider::parse(const QByteArray &_source, const QVariantHash &_oldValues) const | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "Parse json" << _source; | ||||
|  | ||||
|  | ||||
| @ -32,8 +32,7 @@ public: | ||||
|     explicit YahooQuotesProvider(QObject *_parent); | ||||
|     ~YahooQuotesProvider() override; | ||||
|     void initUrl(const QString &_asset) override; | ||||
|     [[nodiscard]] QVariantHash parse(const QByteArray &_source, | ||||
|                                      const QVariantHash &_oldValues) const override; | ||||
|     [[nodiscard]] QVariantHash parse(const QByteArray &_source, const QVariantHash &_oldValues) const override; | ||||
|     [[nodiscard]] QUrl url() const override; | ||||
|  | ||||
| private: | ||||
|  | ||||
| @ -57,7 +57,7 @@ QVariantHash YahooWeatherProvider::parse(const QVariantMap &_json) const | ||||
|     QVariantMap jsonMap = _json["query"].toMap(); | ||||
|     if (jsonMap["count"].toInt() != 1) { | ||||
|         qCWarning(LOG_LIB) << "Found data count" << _json["count"].toInt() << "is not 1"; | ||||
|         return QVariantHash(); | ||||
|         return {}; | ||||
|     } | ||||
|     QVariantMap results = jsonMap["results"].toMap()["channel"].toMap(); | ||||
|     QVariantMap item = results["item"].toMap(); | ||||
| @ -73,8 +73,7 @@ QUrl YahooWeatherProvider::url() const | ||||
| } | ||||
|  | ||||
|  | ||||
| QVariantHash YahooWeatherProvider::parseCurrent(const QVariantMap &_json, | ||||
|                                                 const QVariantMap &_atmosphere) const | ||||
| QVariantHash YahooWeatherProvider::parseCurrent(const QVariantMap &_json, const QVariantMap &_atmosphere) const | ||||
| { | ||||
|     qCDebug(LOG_LIB) << "Parse current weather from" << _json; | ||||
|  | ||||
| @ -99,8 +98,7 @@ QVariantHash YahooWeatherProvider::parseForecast(const QVariantMap &_json) const | ||||
|  | ||||
|     QVariantHash values; | ||||
|     QVariantList weatherList = _json["forecast"].toList(); | ||||
|     QVariantMap weatherMap | ||||
|         = weatherList.count() < m_ts ? weatherList.last().toMap() : weatherList.at(m_ts).toMap(); | ||||
|     QVariantMap weatherMap = weatherList.count() < m_ts ? weatherList.last().toMap() : weatherList.at(m_ts).toMap(); | ||||
|     int id = weatherMap["code"].toInt(); | ||||
|     values[tag("weatherId")] = id; | ||||
|     values[tag("timestamp")] = weatherMap["date"].toString(); | ||||
|  | ||||
| @ -38,8 +38,7 @@ public: | ||||
|     [[nodiscard]] QUrl url() const override; | ||||
|  | ||||
| private: | ||||
|     [[nodiscard]] QVariantHash parseCurrent(const QVariantMap &_json, | ||||
|                                             const QVariantMap &_atmosphere) const; | ||||
|     [[nodiscard]] QVariantHash parseCurrent(const QVariantMap &_json, const QVariantMap &_atmosphere) const; | ||||
|     [[nodiscard]] QVariantHash parseForecast(const QVariantMap &_json) const; | ||||
|     int m_ts = 0; | ||||
|     QUrl m_url; | ||||
|  | ||||
| @ -1,5 +1,6 @@ | ||||
| exec_program( | ||||
|         "sed -n '1,/^Ver/ p' CHANGELOG 2> /dev/null | grep -v '^Ver' | tr '\n' '@'" | ||||
|         ${CMAKE_CURRENT_SOURCE_DIR} | ||||
| execute_process( | ||||
|         COMMAND "sed -n '1,/^Ver/ p' CHANGELOG 2> /dev/null | grep -v '^Ver' | tr '\n' '@'" | ||||
|         WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} | ||||
|         OUTPUT_VARIABLE PROJECT_CHANGELOG | ||||
|         OUTPUT_STRIP_TRAILING_WHITESPACE | ||||
| ) | ||||
|  | ||||
| @ -1,9 +1,9 @@ | ||||
| exec_program( | ||||
|         "git" | ||||
|         ${CMAKE_CURRENT_SOURCE_DIR} | ||||
|         ARGS "log" "-1" "--format=\"%h\"" | ||||
| execute_process( | ||||
|         COMMAND git log -1 --format=%h | ||||
|         WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} | ||||
|         OUTPUT_VARIABLE COMMIT_SHA | ||||
|         RETURN_VALUE GIT_RETURN | ||||
|         RESULT_VARIABLE GIT_RETURN | ||||
|         OUTPUT_STRIP_TRAILING_WHITESPACE | ||||
| ) | ||||
|  | ||||
| if (${GIT_RETURN} EQUAL "0") | ||||
|  | ||||
| @ -17,7 +17,7 @@ else () | ||||
| endif () | ||||
|  | ||||
| # some flags | ||||
| set(CMAKE_CXX_STANDARD 17) | ||||
| set(CMAKE_CXX_STANDARD 20) | ||||
| set(CMAKE_CXX_STANDARD_REQUIRED ON) | ||||
|  | ||||
| # verbose output for debug builds | ||||
|  | ||||
| @ -22,6 +22,5 @@ X-KDE-PluginInfo-Name=org.kde.plasma.desktoppanel | ||||
| X-KDE-PluginInfo-Version=@PROJECT_VERSION@ | ||||
| X-KDE-PluginInfo-Website=https://arcanis.me/projects/awesome-widgets/ | ||||
| X-KDE-PluginInfo-Category=System Information | ||||
| X-KDE-PluginInfo-Depends= | ||||
| X-KDE-PluginInfo-License=GPLv3 | ||||
| X-KDE-PluginInfo-EnabledByDefault=true | ||||
|  | ||||
							
								
								
									
										29
									
								
								sources/desktop-panel/metadata.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								sources/desktop-panel/metadata.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,29 @@ | ||||
| { | ||||
|     "KPlugin": { | ||||
|         "Authors": [ | ||||
|             { | ||||
|                 "Email": "esalexeev@gmail.com", | ||||
|                 "Name": "Evgeniy Alekseev aka arcanis" | ||||
|             } | ||||
|         ], | ||||
|         "Category": "System Information", | ||||
|         "Description": "A minimalistic Plasmoid", | ||||
|         "Description[en]": "A minimalistic Plasmoid", | ||||
|         "Description[es]": "Un script Plasmoïde minimaliste", | ||||
|         "Description[pt_BR]": "Um script Plasmoid", | ||||
|         "Description[ru]": "Минималистичный плазмоид", | ||||
|         "Description[uk]": "Мінімалістичний плазмоїд", | ||||
|         "EnabledByDefault": true, | ||||
|         "Icon": "utilities-system-monitor", | ||||
|         "Id": "org.kde.plasma.desktoppanel", | ||||
|         "License": "GPLv3", | ||||
|         "Name": "Desktop Panel", | ||||
|         "ServiceTypes": [ | ||||
|             "Plasma/Applet" | ||||
|         ], | ||||
|         "Version": "@PROJECT_VERSION@", | ||||
|         "Website": "https://arcanis.me/projects/awesome-widgets/" | ||||
|     }, | ||||
|     "X-Plasma-API": "declarativeappletscript", | ||||
|     "X-Plasma-MainScript": "ui/main.qml" | ||||
| } | ||||
| @ -30,7 +30,7 @@ | ||||
|             <default>¤</default> | ||||
|         </entry> | ||||
|         <entry name="tooltipType" type="string"> | ||||
|             <default>windows</default> | ||||
|             <default>contours</default> | ||||
|         </entry> | ||||
|         <entry name="tooltipWidth" type="int"> | ||||
|             <default>200</default> | ||||
|  | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user