From 7e0c3d136e2189322ffb70db799540ebdfca3db0 Mon Sep 17 00:00:00 2001 From: ivaquero Date: Sun, 30 Jul 2023 12:34:38 +0800 Subject: [PATCH] =?UTF-8?q?build:=20=F0=9F=8E=89=20begin!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1135 +++++++++++++++++++++++++++++++++++++++++ CMakeLists.txt | 25 + README.md | 39 ++ clock.cpp | 169 ++++++ clock.h | 53 ++ clock.png | Bin 0 -> 73800 bytes clock.py | 166 ++++++ compile_commands.json | 161 ++++++ config.ini | 13 + main.cpp | 10 + requirements.txt | 1 + 11 files changed, 1772 insertions(+) create mode 100644 .gitignore create mode 100644 CMakeLists.txt create mode 100644 README.md create mode 100644 clock.cpp create mode 100644 clock.h create mode 100644 clock.png create mode 100644 clock.py create mode 100644 compile_commands.json create mode 100644 config.ini create mode 100644 main.cpp create mode 100644 requirements.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..271ec6d --- /dev/null +++ b/.gitignore @@ -0,0 +1,1135 @@ +* +!*.* +!*/ + +### C ### +# Prerequisites +*.d + +# Object files +*.o +*.ko +*.obj +*.elf + +# Linker output +*.ilk +*.map +*.exp + +# Precompiled Headers +*.gch +*.pch + +# Libraries +*.lib +*.a +*.la +*.lo + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib + +# Executables +*.exe +*.out +*.app +*.i*86 +*.x86_64 +*.hex + +# Debug files +*.dSYM/ +*.su +*.idb +*.pdb + +# Kernel Module Compile Results +*.mod* +*.cmd +.tmp_versions/ +modules.order +Module.symvers +Mkfile.old +dkms.conf + +### C++ ### +# Prerequisites + +# Compiled Object files +*.slo + +# Precompiled Headers + +# Compiled Dynamic libraries + +# Fortran module files +*.mod +*.smod + +# Compiled Static libraries +*.lai + +# Executables + +## Various built-in generators +# cmake_find_package generator https://docs.conan.io/en/latest/reference/generators/cmake_find_package.html +Find*.cmake + +# cmake_paths generator https://docs.conan.io/en/1.4/integrations/cmake/cmake_paths_generator.html +conan_paths.* + +# Environment activation scripts produced by https://docs.conan.io/en/latest/mastering/virtualenv.html#virtualenv-generator +activate_run.ps1 +activate_run.sh +deactivate_run.ps1 +deactivate_run.sh +environment_run.ps1.env +environment_run.sh.env + +### Homebrew ### +Brewfile.lock.json + +### Julia ### +# Files generated by invoking Julia with --code-coverage +*.jl.cov +*.jl.*.cov + +# Files generated by invoking Julia with --track-allocation +*.jl.mem + +# System-specific files and directories generated by the BinaryProvider and BinDeps packages +# They contain absolute paths specific to the host computer, and so should not be committed +deps/deps.jl +deps/build.log +deps/downloads/ +deps/usr/ +deps/src/ + +# Build artifacts for creating documentation generated by the Documenter package +docs/build/ +docs/site/ + +# File generated by Pkg, the package manager, based on a corresponding Project.toml +# It records a fixed state of all packages used by the project. As such, it should not be +# committed for packages, but should be committed for applications that require a static +# environment. +Manifest.toml + +### JupyterNotebooks ### +# gitignore template for Jupyter Notebooks +# website: http://jupyter.org/ + +.ipynb_checkpoints +*/.ipynb_checkpoints/* + +# IPython +profile_default/ +ipython_config.py + +# Remove previous ipynb_checkpoints +# git rm -r .ipynb_checkpoints/ + +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### macOS Patch ### +# iCloud generated files +*.icloud + +### Node ### +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +### Node Patch ### +# Serverless Webpack directories +.webpack/ + +# Optional stylelint cache + +# SvelteKit build / generate output +.svelte-kit + +### NodeChakraTimeTravelDebug ### +# gitignore template for NodeChakra Time Travel Debug +# website: https://marketplace.visualstudio.com/items?itemName=ttd-trace-tools.node-chakracore-time-travel-debugger + +# Ignore time-travel trace files +# https://github.com/mrkmarron/node-chakracore-time-travel-debugger#notes +_ttd_log_ + +### Nuxtjs ### +# Nuxt build + +# Nuxt generate + +### PyCharm ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# SonarLint plugin +.idea/sonarlint/ + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### PyCharm Patch ### +# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 + +# *.iml +# modules.xml +# .idea/misc.xml +# *.ipr + +# Sonarlint plugin +# https://plugins.jetbrains.com/plugin/7973-sonarlint +.idea/**/sonarlint/ + +# SonarQube Plugin +# https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin +.idea/**/sonarIssues.xml + +# Markdown Navigator plugin +# https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced +.idea/**/markdown-navigator.xml +.idea/**/markdown-navigator-enh.xml +.idea/**/markdown-navigator/ + +# Cache file creation bug +# See https://youtrack.jetbrains.com/issue/JBR-2257 +.idea/$CACHE_FILE$ + +# CodeStream plugin +# https://plugins.jetbrains.com/plugin/12206-codestream +.idea/codestream.xml + +# Azure Toolkit for IntelliJ plugin +# https://plugins.jetbrains.com/plugin/8053-azure-toolkit-for-intellij +.idea/**/azureSettings.xml + +### PyCharm+all ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff + +# AWS User-specific + +# Generated files + +# Sensitive or high-churn files + +# Gradle + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake + +# Mongo Explorer plugin + +# File-based project format + +# IntelliJ + +# mpeltonen/sbt-idea plugin + +# JIRA plugin + +# Cursive Clojure plugin + +# SonarLint plugin + +# Crashlytics plugin (for Android Studio and IntelliJ) + +# Editor-based Rest Client + +# Android studio 3.1+ serialized cache file + +### PyCharm+all Patch ### +# Ignore everything but code style settings and run configurations +# that are supposed to be shared within teams. + +.idea/* + +!.idea/codeStyles +!.idea/runConfigurations + +### PyCharm+iml ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff + +# AWS User-specific + +# Generated files + +# Sensitive or high-churn files + +# Gradle + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake + +# Mongo Explorer plugin + +# File-based project format + +# IntelliJ + +# mpeltonen/sbt-idea plugin + +# JIRA plugin + +# Cursive Clojure plugin + +# SonarLint plugin + +# Crashlytics plugin (for Android Studio and IntelliJ) + +# Editor-based Rest Client + +# Android studio 3.1+ serialized cache file + +### PyCharm+iml Patch ### +# Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-249601023 + +*.iml +modules.xml +.idea/misc.xml +*.ipr + +### pydev ### +.pydevproject + +### Python ### +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook + +# IPython + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ + +### Python Patch ### +# Poetry local configuration file - https://python-poetry.org/docs/configuration/#local-configuration +poetry.toml + +### Rust ### +# Generated by Cargo +# will have compiled files and executables +debug/ + +# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries +# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html +Cargo.lock + +# These are backup files generated by rustfmt +**/*.rs.bk + +# MSVC Windows builds of rustc generate these, which store debugging information + +### StorybookJs ### +# gitignore template for the Storybook, UI guide for front apps +# website: https://storybook.js.org/ + +storybook-static/ + +### Vim ### +# Swap +[._]*.s[a-v][a-z] +!*.svg # comment out if you don't need vector files +[._]*.sw[a-p] +[._]s[a-rt-v][a-z] +[._]ss[a-gi-z] +[._]sw[a-p] + +# Session +Session.vim +Sessionx.vim + +# Temporary +.netrwhist +*~ +# Auto-generated tag files +tags +# Persistent undo +[._]*.un~ + +### vs ### +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.meta +*.iobj +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*[.json, .xml, .info] + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +### Vue ### +# gitignore template for Vue.js projects +# +# Recommended template: Node.gitignore + +# TODO: where does this rule come from? +docs/_book + +# TODO: where does this rule come from? +test/ + +### Vuejs ### +# Recommended template: Node.gitignore + +npm-debug.log +yarn-error.log + +### yarn ### +# https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored + +.yarn/* +!.yarn/releases +!.yarn/patches +!.yarn/plugins +!.yarn/sdks +!.yarn/versions + +# if you are NOT using Zero-installs, then: +# comment the following lines +!.yarn/cache + +# and uncomment the following lines +# .pnp.* + +.vscode +*.pdf +*/*.pdf +*/test.* +*/.obsidian/* diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..0b71fc7 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,25 @@ +cmake_minimum_required(VERSION 3.5) +project(clock) + +set(CMAKE_AUTOUIC ON) +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_PREFIX_PATH "/opt/homebrew/opt/qt@5") + +find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED) + +include_directories( + . +) + +set (SRCS + clock.cpp + clock.h + main.cpp +) + +add_executable(${CMAKE_PROJECT_NAME} ${SRCS}) + +target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE Qt5::Core Qt5::Gui Qt5::Widgets) diff --git a/README.md b/README.md new file mode 100644 index 0000000..21140df --- /dev/null +++ b/README.md @@ -0,0 +1,39 @@ +# ⏰ Floating Clock + +![code size](https://img.shields.io/github/languages/code-size/ivaquero/floating-clock.svg) +![repo size](https://img.shields.io/github/repo-size/ivaquero/floating-clock.svg) + +This project aims to build a cross-platform floating clock based on PySide6 & Qt5. + +## Motivation + +When coding in full screen mode, I often forget the time. +When on macOS / Linux, the clock on the menu bar is too small to be noticeable, so is the clock on Windows. + +![clock](clock.png) + +## Roadmap + +- [ ] Main Window + - [x] Frameless + - [x] Drag and Move + - [x] Right Click Menu + - [x] Always On Top + - [ ] Show in Fullscreen Mode +- [x] Font + - [x] Set Color + - [x] Set Background Color + - [x] Change Size +- [x] Configuratin File + - [x] Read Settings + - [x] Write Settings + - [x] Reset Settings +- [ ] Time + - [ ] Select Time Zone + - [ ] Set Alarms + +## For Testing + +```python +python -m pip install -r requirements.txt +``` diff --git a/clock.cpp b/clock.cpp new file mode 100644 index 0000000..e1ae518 --- /dev/null +++ b/clock.cpp @@ -0,0 +1,169 @@ +#include "clock.h" + +Clock::Clock(QWidget *parent) : QWidget{parent}, pressed(false) { + + // geometry of Main Window (x, y, width, height) + setGeometry(1100, 800, 180, 60); + + // hide frame + setWindowFlag(Qt::WindowStaysOnTopHint, true); + setWindowFlag(Qt::FramelessWindowHint, true); + setAttribute(Qt::WA_TranslucentBackground); + + // clock object + QTimer *clock = new QTimer(this); + connect(clock, &QTimer::timeout, this, &Clock::showTime); + clock->start(1000); // update the clock per second + show(); + + settings = new QSettings( + QString("%1/config.ini").arg(QCoreApplication::applicationDirPath()), + QSettings::IniFormat); + + font = QFont(); + font.setFamily(settings->value("USER/FONT_FAMILY").toString()); + font.setPointSize(settings->value("USER/FONT_SIZE").toInt()); + + // load settings + settings = new QSettings( + QString("%1/config.ini").arg(QCoreApplication::applicationDirPath()), + QSettings::IniFormat); + + // font object + font = QFont(); + font.setFamily(settings->value("DEFAULT/FONT_FAMILY").toString()); + font_size_step = settings->value("USER/FONT_SIZE_STEP").toInt(); + + // label object + label = new QLabel(); + label->setAlignment(Qt::AlignCenter); + + // layout + QVBoxLayout *layout = new QVBoxLayout(this); + layout->addWidget(label); + setLayout(layout); + + reloadUI(); +} + +void Clock::showTime() { + QString current_time = QTime::currentTime().toString("hh:mm"); + label->setText(current_time); +} + +void Clock::reloadUI() { + font_size = settings->value("USER/FONT_SIZE").toInt(); + font.setPointSize(font_size); + label->setFont(font); + label->setStyleSheet(QString("color: %1; background-color: %2") + .arg(settings->value("USER/FONT_COLOR").toString(), + settings->value("USER/BG_COLOR").toString())); +} + +void Clock::resetUI() { + QString default_bg_color = settings->value("DEFAULT/BG_COLOR").toString(); + QString default_font_color = settings->value("DEFAULT/FONT_COLOR").toString(); + QString default_font_size = settings->value("DEFAULT/FONT_SIZE").toString(); + + settings->setValue("USER/BG_COLOR", default_bg_color); + settings->setValue("USER/FONT_COLOR", default_font_color); + settings->setValue("USER/FONT_SIZE", default_font_size); + + reloadUI(); +} + +void Clock::increaseFontSize() { + font_size += font_size_step; + changeFontSize(); +} + +void Clock::decreaseFontSize() { + font_size -= font_size_step; + changeFontSize(); +} + +void Clock::changeFontSize() { + font.setPointSize(font_size); + label->setFont(font); +} + +void Clock::setFontColor(const QString &color) { + settings->setValue("USER/FONT_COLOR", color); + reloadUI(); +} + +void Clock::setBackgroundColor(const QString &color) { + settings->setValue("USER/BG_COLOR", color); + reloadUI(); +} + +void Clock::mousePressEvent(QMouseEvent *event) { + pressed = true; + oldPos = event->pos(); + QWidget::mousePressEvent(event); +} + +void Clock::mouseMoveEvent(QMouseEvent *event) { + if (pressed) { + move(pos() + (event->pos() - oldPos)); + } + QWidget::mouseMoveEvent(event); +} + +void Clock::mouseReleaseEvent(QMouseEvent *event) { + pressed = false; + oldPos = event->pos(); + QWidget::mouseReleaseEvent(event); +} + +void Clock::mouseRightMenu(const QPoint &pos) { + QMenu menu(this); + + // font size + QMenu *font_size_menu = menu.addMenu("font size"); + QAction *larger_action = new QAction("larger", this); + QAction *smaller_action = new QAction("smaller", this); + + connect(larger_action, &QAction::triggered, this, &Clock::increaseFontSize); + connect(smaller_action, &QAction::triggered, this, &Clock::decreaseFontSize); + + font_size_menu->addAction(larger_action); + font_size_menu->addAction(smaller_action); + + QStringList ft_colors = {"none", "blue", "orange", "green", + "red", "yellow", "white"}; + QStringList bg_colors = {"none", "blue", "orange", "green", + "red", "yellow", "white"}; + + // font color + QMenu *font_color_menu = menu.addMenu("font color"); + QList font_color_actions; + for (const QString &color : ft_colors) { + QAction *action = new QAction(color, this); + connect(action, &QAction::triggered, [=]() { setFontColor(color); }); + font_color_actions.append(action); + } + font_color_menu->addActions(font_color_actions); + + // background color + QMenu *bg_color_menu = menu.addMenu("bg color"); + QList bg_color_actions; + for (const QString &color : bg_colors) { + QAction *action = new QAction(color, this); + connect(action, &QAction::triggered, [=]() { setBackgroundColor(color); }); + bg_color_actions.append(action); + } + bg_color_menu->addActions(bg_color_actions); + + // reset + QAction *reset_action = new QAction("reset", this); + connect(reset_action, &QAction::triggered, this, &Clock::resetUI); + menu.addAction(reset_action); + + // quit + QAction *quit_action = new QAction("quit", this); + connect(quit_action, &QAction::triggered, this, &Clock::close); + menu.addAction(quit_action); + + menu.exec(mapToGlobal(pos)); +} diff --git a/clock.h b/clock.h new file mode 100644 index 0000000..530e7a9 --- /dev/null +++ b/clock.h @@ -0,0 +1,53 @@ +#ifndef CLOCK_H +#define CLOCK_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class Clock : public QWidget { + Q_OBJECT +public: + explicit Clock(QWidget *parent = nullptr); + void reloadUI(); + void resetUI(); + void increaseFontSize(); + void decreaseFontSize(); + void changeFontSize(); + void setFontColor(const class QString &color); + void setBackgroundColor(const class QString &color); + +protected: + void mousePressEvent(QMouseEvent *event); + // void mousePressEvent(QMouseEvent *event) ; + void mouseMoveEvent(QMouseEvent *event); + // void mouseMoveEvent(QMouseEvent *event); + void mouseReleaseEvent(QMouseEvent *event); + // void mouseReleaseEvent(QMouseEvent *event) ; + void mouseRightMenu(const QPoint &pos); + +signals: + +public slots: + void showTime(); + +private: + bool pressed; + QPoint oldPos; + QSettings *settings; + QFont font; + int font_size_step; + int font_size; + QLabel *label; +}; + +#endif // CLOCK_H diff --git a/clock.png b/clock.png new file mode 100644 index 0000000000000000000000000000000000000000..390e55787a82aefbe6eb93e112d65d5268e70076 GIT binary patch literal 73800 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%0AdP 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 None: + super().__init__(parent) + + # geometry of Mmin window (x, y, width, height) + self.setGeometry(1100, 800, 180, 60) + + # hide frame + self.setWindowFlag(Qt.WindowStaysOnTopHint, True) + self.setWindowFlag(Qt.FramelessWindowHint, True) + self.setAttribute(Qt.WA_TranslucentBackground) + + # mouse & menu + self.pressed = False + self.oldPos = QPoint(0, 0) + self.setContextMenuPolicy(Qt.CustomContextMenu) + self.customContextMenuRequested.connect(self.mouseRightMenu) + + # clock object + clock = QTimer(self) + clock.timeout.connect(self.showTime) + clock.start(1000) # update the clock per second + self.show() + + self.settings = QSettings(f"{sys.argv[0]}/../config.ini", QSettings.IniFormat) + font = QFont() + font.setFamily(self.settings.value("USER/FONT_FAMILY")) + font.setPointSize(int(self.settings.value("USER/FONT_SIZE"))) + + # load settings + self.settings = QSettings(f"{sys.argv[0]}/../config.ini", QSettings.IniFormat) + + # # font object + self.font = QFont() + self.font.setFamily(self.settings.value("DEFAULT/FONT_FAMILY")) + self.font_size_step = int(self.settings.value("USER/FONT_SIZE_STEP")) + + # label object + self.label = QLabel() + self.label.setAlignment(Qt.AlignCenter) + + # layout + layout = QVBoxLayout(self, spacing=0) + layout.addWidget(self.label) + self.setLayout(layout) + + self.reloadUI() + + def reloadUI(self): + self.font_size = int(self.settings.value("USER/FONT_SIZE")) + self.font.setPointSize(self.font_size) + self.label.setFont(self.font) + self.label.setStyleSheet( + f"color: {self.settings.value('USER/FONT_COLOR')}; " + f"background-color: {self.settings.value('USER/BG_COLOR')}" + ) + + def resetUI(self): + default_bg_color = self.settings.value("DEFAULT/BG_COLOR") + default_font_color = self.settings.value("DEFAULT/FONT_COLOR") + default_font_size = self.settings.value("DEFAULT/FONT_SIZE") + + self.settings.setValue("USER/BG_COLOR", default_bg_color) + self.settings.setValue("USER/FONT_COLOR", default_font_color) + self.settings.setValue("USER/FONT_SIZE", default_font_size) + + self.reloadUI() + + def increaseFontSize(self): + self.font_size += self.font_size_step + self.changeFontSize() + + def decreaseFontSize(self): + self.font_size -= self.font_size_step + self.changeFontSize() + + def changeFontSize(self): + font = self.label.font() + font.setPointSize(self.font_size) + self.label.setFont(font) + + def setFontColor(self, color: str) -> None: + self.settings.setValue("USER/FONT_COLOR", color) + self.reloadUI() + + def setBackgroundColor(self, color: str) -> None: + self.settings.setValue("USER/BG_COLOR", color) + self.reloadUI() + + def mousePressEvent(self, event: QMouseEvent) -> None: + self.pressed = True + self.oldPos = event.pos() + super().mousePressEvent(event) + + def mouseMoveEvent(self, event: QMouseEvent) -> None: + if self.pressed: + self.move(self.pos() + (event.pos() - self.oldPos)) + super().mouseMoveEvent(event) + + def mouseReleaseEvent(self, event: QMouseEvent) -> None: + self.pressed = False + self.oldPos = event.pos() + super().mouseReleaseEvent(event) + + def mouseRightMenu(self, pos) -> None: + menu = QMenu(self) + + # font size + font_size_menu = menu.addMenu("font size") + larger_action = QAction("larger", self) + smaller_action = QAction("smaller", self) + + larger_action.triggered.connect(self.increaseFontSize) + smaller_action.triggered.connect(self.decreaseFontSize) + + font_size_menu.addAction(larger_action) + font_size_menu.addAction(smaller_action) + + ft_colors = ["none", "blue", "orange", "green", "red", "yellow", "white"] + bg_colors = ["none", "blue", "orange", "green", "red", "yellow", "white"] + + # font color + font_color_menu = menu.addMenu("font color") + font_color_actions = [ + QAction(color, self, triggered=lambda c=color: self.setFontColor(c)) + for color in ft_colors + ] + font_color_menu.addActions(font_color_actions) + + # background color + bg_color_menu = menu.addMenu("bg color") + bg_color_actions = [ + QAction(color, self, triggered=lambda c=color: self.setBackgroundColor(c)) + for color in bg_colors + ] + bg_color_menu.addActions(bg_color_actions) + + # reset + reset_action = QAction("reset", self) + reset_action.triggered.connect(self.resetUI) + menu.addAction(reset_action) + + # quit + quit_action = QAction("quit", self) + quit_action.triggered.connect(self.close) + menu.addAction(quit_action) + + menu.exec(self.mapToGlobal(pos)) + + def showTime(self): + current_time = QTime.currentTime().toString("hh:mm") + self.label.setText(current_time) + + +if __name__ == "__main__": + app = QApplication(sys.argv) + clock = Clock() + clock.show() # show all the widgets + app.exit(app.exec()) # start the app diff --git a/compile_commands.json b/compile_commands.json new file mode 100644 index 0000000..752ab72 --- /dev/null +++ b/compile_commands.json @@ -0,0 +1,161 @@ +[ + { + "arguments": [ + "clang", + "-Wno-documentation-unknown-command", + "-Wno-unknown-warning-option", + "-Wno-unknown-pragmas", + "-nostdinc", + "-nostdinc++", + "-DQT_QML_DEBUG", + "-g", + "-std=gnu++17", + "-arch", + "arm64", + "-isysroot", + "/Library/Developer/CommandLineTools/SDKs/MacOSX13.3.sdk", + "-fPIC", + "-fsyntax-only", + "--target=arm64-apple-darwin22.5.0", + "-DQT_CORE_LIB", + "-DQT_GUI_LIB", + "-DQT_WIDGETS_LIB", + "-DQ_CREATOR_RUN", + "-I/Applications/Qt Creator.app/Contents/Resources/cplusplus/wrappedQtHeaders", + "-I/Applications/Qt Creator.app/Contents/Resources/cplusplus/wrappedQtHeaders/QtCore", + "-I/Users/integzz/Documents/proj-clock/build-clock-Desktop_arm_darwin_generic_mach_o_64bit-Debug/clock_autogen/include", + "-I/opt/homebrew/opt/qt@5/include", + "-I/opt/homebrew/opt/qt@5/include/QtWidgets", + "-I/opt/homebrew/opt/qt@5/include/QtGui", + "-I/Library/Developer/CommandLineTools/SDKs/MacOSX13.3.sdk/System/Library/Frameworks/OpenGL.framework/Headers", + "-I/opt/homebrew/opt/qt@5/include/QtCore", + "-I/opt/homebrew/opt/qt@5/include/mkspecs/macx-clang", + "-F", + "/Library/Developer/CommandLineTools/SDKs/MacOSX13.3.sdk/System/Library/Frameworks", + "-isystem", + "/Library/Developer/CommandLineTools/SDKs/MacOSX13.3.sdk/usr/include/c++/v1", + "-isystem", + "/Applications/Qt Creator.app/Contents/Resources/libexec/clang/lib/clang/16/include", + "-isystem", + "/Library/Developer/CommandLineTools/SDKs/MacOSX13.3.sdk/usr/include", + "-isystem", + "/Library/Developer/CommandLineTools/usr/include", + "-fmessage-length=0", + "-fdiagnostics-show-note-include-stack", + "-fretain-comments-from-system-headers", + "-fmacro-backtrace-limit=0", + "-ferror-limit=1000", + "-x", + "c++", + "/Users/integzz/Documents/proj-clock/main.cpp" + ], + "directory": "/usr/bin/clangd", + "file": "/Users/integzz/Documents/proj-clock/main.cpp" + }, + { + "arguments": [ + "clang", + "-Wno-documentation-unknown-command", + "-Wno-unknown-warning-option", + "-Wno-unknown-pragmas", + "-nostdinc", + "-nostdinc++", + "-DQT_QML_DEBUG", + "-g", + "-std=gnu++17", + "-arch", + "arm64", + "-isysroot", + "/Library/Developer/CommandLineTools/SDKs/MacOSX13.3.sdk", + "-fPIC", + "-fsyntax-only", + "--target=arm64-apple-darwin22.5.0", + "-DQT_CORE_LIB", + "-DQT_GUI_LIB", + "-DQT_WIDGETS_LIB", + "-DQ_CREATOR_RUN", + "-I/Applications/Qt Creator.app/Contents/Resources/cplusplus/wrappedQtHeaders", + "-I/Applications/Qt Creator.app/Contents/Resources/cplusplus/wrappedQtHeaders/QtCore", + "-I/Users/integzz/Documents/proj-clock/build-clock-Desktop_arm_darwin_generic_mach_o_64bit-Debug/clock_autogen/include", + "-I/opt/homebrew/opt/qt@5/include", + "-I/opt/homebrew/opt/qt@5/include/QtWidgets", + "-I/opt/homebrew/opt/qt@5/include/QtGui", + "-I/Library/Developer/CommandLineTools/SDKs/MacOSX13.3.sdk/System/Library/Frameworks/OpenGL.framework/Headers", + "-I/opt/homebrew/opt/qt@5/include/QtCore", + "-I/opt/homebrew/opt/qt@5/include/mkspecs/macx-clang", + "-F", + "/Library/Developer/CommandLineTools/SDKs/MacOSX13.3.sdk/System/Library/Frameworks", + "-isystem", + "/Library/Developer/CommandLineTools/SDKs/MacOSX13.3.sdk/usr/include/c++/v1", + "-isystem", + "/Applications/Qt Creator.app/Contents/Resources/libexec/clang/lib/clang/16/include", + "-isystem", + "/Library/Developer/CommandLineTools/SDKs/MacOSX13.3.sdk/usr/include", + "-isystem", + "/Library/Developer/CommandLineTools/usr/include", + "-fmessage-length=0", + "-fdiagnostics-show-note-include-stack", + "-fretain-comments-from-system-headers", + "-fmacro-backtrace-limit=0", + "-ferror-limit=1000", + "-x", + "c++", + "/Users/integzz/Documents/proj-clock/clock.cpp" + ], + "directory": "/usr/bin/clangd", + "file": "/Users/integzz/Documents/proj-clock/clock.cpp" + }, + { + "arguments": [ + "clang", + "-Wno-documentation-unknown-command", + "-Wno-unknown-warning-option", + "-Wno-unknown-pragmas", + "-nostdinc", + "-nostdinc++", + "-DQT_QML_DEBUG", + "-g", + "-std=gnu++17", + "-arch", + "arm64", + "-isysroot", + "/Library/Developer/CommandLineTools/SDKs/MacOSX13.3.sdk", + "-fPIC", + "-fsyntax-only", + "--target=arm64-apple-darwin22.5.0", + "-DQT_CORE_LIB", + "-DQT_GUI_LIB", + "-DQT_WIDGETS_LIB", + "-DQ_CREATOR_RUN", + "-I/Applications/Qt Creator.app/Contents/Resources/cplusplus/wrappedQtHeaders", + "-I/Applications/Qt Creator.app/Contents/Resources/cplusplus/wrappedQtHeaders/QtCore", + "-I/Users/integzz/Documents/proj-clock/build-clock-Desktop_arm_darwin_generic_mach_o_64bit-Debug/clock_autogen/include", + "-I/opt/homebrew/opt/qt@5/include", + "-I/opt/homebrew/opt/qt@5/include/QtWidgets", + "-I/opt/homebrew/opt/qt@5/include/QtGui", + "-I/Library/Developer/CommandLineTools/SDKs/MacOSX13.3.sdk/System/Library/Frameworks/OpenGL.framework/Headers", + "-I/opt/homebrew/opt/qt@5/include/QtCore", + "-I/opt/homebrew/opt/qt@5/include/mkspecs/macx-clang", + "-F", + "/Library/Developer/CommandLineTools/SDKs/MacOSX13.3.sdk/System/Library/Frameworks", + "-isystem", + "/Library/Developer/CommandLineTools/SDKs/MacOSX13.3.sdk/usr/include/c++/v1", + "-isystem", + "/Applications/Qt Creator.app/Contents/Resources/libexec/clang/lib/clang/16/include", + "-isystem", + "/Library/Developer/CommandLineTools/SDKs/MacOSX13.3.sdk/usr/include", + "-isystem", + "/Library/Developer/CommandLineTools/usr/include", + "-fmessage-length=0", + "-fdiagnostics-show-note-include-stack", + "-fretain-comments-from-system-headers", + "-fmacro-backtrace-limit=0", + "-ferror-limit=1000", + "-x", + "c++-header", + "/Users/integzz/Documents/proj-clock/clock.h" + ], + "directory": "/usr/bin/clangd", + "file": "/Users/integzz/Documents/proj-clock/clock.h" + } +] diff --git a/config.ini b/config.ini new file mode 100644 index 0000000..2cf1b50 --- /dev/null +++ b/config.ini @@ -0,0 +1,13 @@ +[DEFAULT] +BG_COLOR=NONE +FONT_COLOR=blue +FONT_FAMILY=Arial +FONT_SIZE=50 +FONT_SIZE_STEP=10 + +[USER] +BG_COLOR=NONE +FONT_COLOR=blue +FONT_FAMILY=Arial +FONT_SIZE=50 +FONT_SIZE_STEP=10 diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..0d69e94 --- /dev/null +++ b/main.cpp @@ -0,0 +1,10 @@ +#include + +#include "clock.h" + +int main(int argc, char *argv[]) { + QApplication app(argc, argv); + + Clock clock; + return app.exec(); +} diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..9137a62 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +pyside6