diff --git a/.github/workflows/README.md b/.github/workflows/README.md index b385d0d..c6366c8 100644 --- a/.github/workflows/README.md +++ b/.github/workflows/README.md @@ -52,7 +52,7 @@ Every push to main/master branches triggers CI builds to ensure code quality. ### Manual Release 1. Go to Actions tab in GitHub -2. Select "Build and Release Clouck" +2. Select "Build and Release DualFloatingClock" 3. Click "Run workflow" 4. Enter version number (e.g., v1.0.0) 5. Click "Run workflow" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a32d06f..aac6ae3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -50,5 +50,5 @@ jobs: - name: Upload Build Artifact uses: actions/upload-artifact@v7 with: - name: Clouck-${{ runner.os }}-cmake - path: build/Clouck* + name: DualFloatingClock-${{ runner.os }}-cmake + path: build/DualFloatingClock* diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7e71a14..0053317 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,4 +1,4 @@ -name: Build and Release Clouck +name: Build and Release DualFloatingClock on: push: @@ -43,43 +43,43 @@ jobs: ls -la build/ # Look for the .app bundle or executable - if [ -d "build/Clouck.app" ]; then + if [ -d "build/DualFloatingClock.app" ]; then echo "Found .app bundle" - cp -r build/Clouck.app ./ - elif [ -f "build/Clouck" ]; then + cp -r build/DualFloatingClock.app ./ + elif [ -f "build/DualFloatingClock" ]; then echo "Found standalone executable" # Create app bundle - mkdir -p Clouck.app/Contents/MacOS - mkdir -p Clouck.app/Contents/Resources - cp build/Clouck Clouck.app/Contents/MacOS/ + mkdir -p DualFloatingClock.app/Contents/MacOS + mkdir -p DualFloatingClock.app/Contents/Resources + cp build/DualFloatingClock DualFloatingClock.app/Contents/MacOS/ else echo "Looking for executable in build directory..." - find build/ -name "Clouck*" -type f + find build/ -name "DualFloatingClock*" -type f # Try to find and copy the first executable - EXECUTABLE=$(find build/ -name "Clouck*" -type f | head -1) + EXECUTABLE=$(find build/ -name "DualFloatingClock*" -type f | head -1) if [ -n "$EXECUTABLE" ]; then echo "Found executable: $EXECUTABLE" - mkdir -p Clouck.app/Contents/MacOS - mkdir -p Clouck.app/Contents/Resources - cp "$EXECUTABLE" Clouck.app/Contents/MacOS/ + mkdir -p DualFloatingClock.app/Contents/MacOS + mkdir -p DualFloatingClock.app/Contents/Resources + cp "$EXECUTABLE" DualFloatingClock.app/Contents/MacOS/ else - echo "ERROR: No Clouck executable found!" + echo "ERROR: No DualFloatingClock executable found!" exit 1 fi fi # Create Info.plist - cat > Clouck.app/Contents/Info.plist << EOF + cat > DualFloatingClock.app/Contents/Info.plist << EOF CFBundleExecutable - Clouck + DualFloatingClock CFBundleIdentifier com.clouck.app CFBundleName - Clouck + DualFloatingClock CFBundleVersion 1.0.0 CFBundlePackageType @@ -92,18 +92,18 @@ jobs: - name: Deploy Qt Dependencies run: | - if [ -d "Clouck.app" ]; then - macdeployqt Clouck.app -dmg || hdiutil create -volname "Clouck" -srcfolder Clouck.app -ov -format UDZO Clouck.dmg + if [ -d "DualFloatingClock.app" ]; then + macdeployqt DualFloatingClock.app -dmg || hdiutil create -volname "DualFloatingClock" -srcfolder DualFloatingClock.app -ov -format UDZO DualFloatingClock.dmg else - echo "ERROR: Clouck.app not found!" + echo "ERROR: DualFloatingClock.app not found!" exit 1 fi - name: Upload macOS Artifact uses: actions/upload-artifact@v7 with: - name: Clouck-macos - path: Clouck.dmg + name: DualFloatingClock-macos + path: DualFloatingClock.dmg build-windows: runs-on: windows-latest @@ -127,17 +127,17 @@ jobs: # Check what was actually built Get-ChildItem -Path "build" -Recurse -Name - New-Item -ItemType Directory -Path Clouck-win -Force - Copy-Item "build/Release/Clouck.exe" -Destination "Clouck-win/" -ErrorAction SilentlyContinue - Copy-Item "build/Release/*.dll" -Destination "Clouck-win/" -ErrorAction SilentlyContinue - windeployqt --release Clouck-win/Clouck.exe - Compress-Archive -Path Clouck-win -DestinationPath Clouck-win.zip + New-Item -ItemType Directory -Path DualFloatingClock-win -Force + Copy-Item "build/Release/DualFloatingClock.exe" -Destination "DualFloatingClock-win/" -ErrorAction SilentlyContinue + Copy-Item "build/Release/*.dll" -Destination "DualFloatingClock-win/" -ErrorAction SilentlyContinue + windeployqt --release DualFloatingClock-win/DualFloatingClock.exe + Compress-Archive -Path DualFloatingClock-win -DestinationPath DualFloatingClock-win.zip - name: Upload Windows Artifact uses: actions/upload-artifact@v7 with: - name: Clouck-win - path: Clouck-win.zip + name: DualFloatingClock-win + path: DualFloatingClock-win.zip build-linux: runs-on: ubuntu-latest @@ -169,27 +169,27 @@ jobs: ls -la build/ # Look for the executable - EXECUTABLE=$(find build/ -name "Clouck" -type f -executable | head -1) + EXECUTABLE=$(find build/ -name "DualFloatingClock" -type f -executable | head -1) if [ -n "$EXECUTABLE" ]; then echo "Found executable: $EXECUTABLE" - mkdir -p Clouck-linux - cp "$EXECUTABLE" Clouck-linux/ + mkdir -p DualFloatingClock-linux + cp "$EXECUTABLE" DualFloatingClock-linux/ else - echo "ERROR: No Clouck executable found!" + echo "ERROR: No DualFloatingClock executable found!" exit 1 fi # Copy any Qt libraries - find build/ -name "*.so*" -exec cp {} Clouck-linux/ \; 2>/dev/null || true + find build/ -name "*.so*" -exec cp {} DualFloatingClock-linux/ \; 2>/dev/null || true # Create tar.gz for distribution - tar -czf Clouck-linux.tar.gz Clouck-linux/ + tar -czf DualFloatingClock-linux.tar.gz DualFloatingClock-linux/ - name: Upload Linux Artifact uses: actions/upload-artifact@v7 with: - name: Clouck-linux - path: Clouck-linux.tar.gz + name: DualFloatingClock-linux + path: DualFloatingClock-linux.tar.gz generate-changelog: needs: [ build-macos, build-windows, build-linux ] @@ -227,9 +227,9 @@ jobs: echo "$CHANGELOG" >> $GITHUB_OUTPUT echo "" >> $GITHUB_OUTPUT echo "## Downloads" >> $GITHUB_OUTPUT - echo "- **macOS**: Clouck.dmg" >> $GITHUB_OUTPUT - echo "- **Windows**: Clouck-win.zip" >> $GITHUB_OUTPUT - echo "- **Linux**: Clouck-linux.tar.gz" >> $GITHUB_OUTPUT + echo "- **macOS**: DualFloatingClock.dmg" >> $GITHUB_OUTPUT + echo "- **Windows**: DualFloatingClock-win.zip" >> $GITHUB_OUTPUT + echo "- **Linux**: DualFloatingClock-linux.tar.gz" >> $GITHUB_OUTPUT echo "EOF" >> $GITHUB_OUTPUT create-release: @@ -252,16 +252,16 @@ jobs: - name: Create Release uses: softprops/action-gh-release@v3 with: - name: Clouck ${{ needs.generate-changelog.outputs.version }} + name: DualFloatingClock ${{ needs.generate-changelog.outputs.version }} body: | Cross-platform clock widget application ${{ needs.generate-changelog.outputs.changelog }} files: | - artifacts/Clouck-macos/Clouck.dmg - artifacts/Clouck-win/Clouck-win.zip - artifacts/Clouck-linux/Clouck-linux.tar.gz + artifacts/DualFloatingClock-macos/DualFloatingClock.dmg + artifacts/DualFloatingClock-win/DualFloatingClock-win.zip + artifacts/DualFloatingClock-linux/DualFloatingClock-linux.tar.gz draft: false prerelease: false generate_release_notes: true diff --git a/CMakeLists.txt b/CMakeLists.txt index df8b777..fafe109 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.16) -project(Clouck) +project(DualFloatingClock) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) @@ -49,13 +49,13 @@ endif() # macOS app icon if(APPLE) - set(MACOSX_BUNDLE_ICON_FILE clouck.icns) - set(APP_ICON_MACOSX ${CMAKE_CURRENT_SOURCE_DIR}/resources/clouck.icns) + set(MACOSX_BUNDLE_ICON_FILE dualfloatingclock.icns) + set(APP_ICON_MACOSX ${CMAKE_CURRENT_SOURCE_DIR}/resources/dualfloatingclock.icns) set_source_files_properties(${APP_ICON_MACOSX} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") endif() # Create executable -qt6_add_executable(Clouck WIN32 MACOSX_BUNDLE +qt6_add_executable(DualFloatingClock WIN32 MACOSX_BUNDLE ${SOURCES} ${HEADERS} ${APP_ICON_MACOSX} @@ -63,25 +63,25 @@ qt6_add_executable(Clouck WIN32 MACOSX_BUNDLE # Platform-specific sources and libraries if(APPLE) - target_sources(Clouck PRIVATE window_helper_macos.mm) - target_link_libraries(Clouck PRIVATE "-framework AppKit" "-framework CoreGraphics") + target_sources(DualFloatingClock PRIVATE window_helper_macos.mm) + target_link_libraries(DualFloatingClock PRIVATE "-framework AppKit" "-framework CoreGraphics") endif() if(WIN32) - target_sources(Clouck PRIVATE window_helper_windows.cpp) - target_link_libraries(Clouck PRIVATE user32 dwmapi) + target_sources(DualFloatingClock PRIVATE window_helper_windows.cpp) + target_link_libraries(DualFloatingClock PRIVATE user32 dwmapi) endif() if(UNIX AND NOT APPLE) - target_sources(Clouck PRIVATE window_helper_linux.cpp) - target_link_libraries(Clouck PRIVATE ${X11_LIBRARIES} Xfixes) + target_sources(DualFloatingClock PRIVATE window_helper_linux.cpp) + target_link_libraries(DualFloatingClock PRIVATE ${X11_LIBRARIES} Xfixes) endif() # Link Qt libraries -target_link_libraries(Clouck PRIVATE Qt6::Core Qt6::Widgets) +target_link_libraries(DualFloatingClock PRIVATE Qt6::Core Qt6::Widgets) # Set up install -install(TARGETS Clouck +install(TARGETS DualFloatingClock RUNTIME DESTINATION bin BUNDLE DESTINATION bin ) diff --git a/Clouck.pro b/DualFloatingClock.pro similarity index 97% rename from Clouck.pro rename to DualFloatingClock.pro index b826104..70eec9d 100644 --- a/Clouck.pro +++ b/DualFloatingClock.pro @@ -1,7 +1,7 @@ # Created by and for Qt Creator This file was created for editing the project sources only. # You may attempt to use it for building too, by modifying this file here. -TARGET = Clouck +TARGET = DualFloatingClock QT = core gui widgets diff --git a/README-CN.md b/README-CN.md deleted file mode 100644 index 97f09e4..0000000 --- a/README-CN.md +++ /dev/null @@ -1,123 +0,0 @@ -# Clouck 浮动时钟 - -## 功能特性 - -✅ **已实现的功能:** - -- **无边框窗口** - 简洁的浮动时钟界面 -- **拖拽移动** - 鼠标左键拖拽移动窗口位置 -- **右键菜单** - 丰富的自定义选项 -- **总在最前** - 始终显示在其他窗口之上 -- **透明背景** - 支持半透明背景效果 -- **自定义样式** - 可调整字体颜色、背景颜色、字体大小 -- **设置持久化** - 自动保存和恢复用户设置 -- **跨平台支持** - 基于Qt6,支持 macOS/Linux/Windows - -## 使用方法 - -### 基本操作 - -- **移动时钟**:鼠标左键点击并拖拽 -- **显示菜单**:右键点击时钟 -- **退出应用**:右键菜单选择"退出" - -### 自定义设置 - -- **字体颜色**:右键菜单 → 设置字体颜色 -- **背景颜色**:右键菜单 → 设置背景颜色 -- **字体大小**:右键菜单 → 设置字体大小 -- **总在最前**:右键菜单 → 勾选/取消"总在最前" -- **重置设置**:右键菜单 → 重置设置 - -### 构建和运行 - -#### 快速构建(推荐): - -```bash -# 一键构建 -./build.sh - -# 运行应用 -./build/Clouck.app/Contents/MacOS/Clouck # macOS -./build/Clouck # Linux -``` - -#### 手动构建: - -```bash -# 清理旧的构建文件 -./clean.sh - -# 生成Makefile -qmake Clouck.pro - -# 编译 -make - -# 运行 -./build/Clouck.app/Contents/MacOS/Clouck # macOS -./build/Clouck # Linux -``` - -#### 使用CMake构建: - -```bash -mkdir build && cd build -cmake .. -make -./Clouck -``` - -### 项目结构 - -```text -qClouck/ -├── build/ # 构建输出目录 -│ ├── Clouck.app/ # macOS应用包 -│ ├── *.o # 目标文件 -│ ├── moc_*.cpp # Qt元对象编译器输出 -│ └── Makefile # 构建文件 -├── src/ # 源代码(建议) -├── build.sh # 一键构建脚本 -├── clean.sh # 清理脚本 -├── Clouck.pro # qmake项目文件 -├── CMakeLists.txt # CMake项目文件 -└── README.md -``` - -## 技术特点 - -- **Qt6框架**:使用最新的Qt6库 -- **透明窗口**:支持RGBA透明背景 -- **定时器更新**:每秒更新时钟显示 -- **设置管理**:使用QSettings持久化用户偏好 -- **事件处理**:自定义鼠标事件实现拖拽功能 - -## 开发说明 - -### 构建输出管理 - -- 所有编译生成的文件(.o, moc_*.cpp, Makefile等)都会输出到`build/`目录 -- 可执行文件位于`build/Clouck.app/Contents/MacOS/Clouck`(macOS)或`build/Clouck`(Linux) -- 使用`./clean.sh`可以快速清理所有构建文件 -- 使用`./build.sh`可以进行完整的一键构建 - -### 自定义构建配置 - -可以在`Clouck.pro`中修改以下配置: - -- `DESTDIR`:可执行文件输出目录 -- `OBJECTS_DIR`:目标文件输出目录 -- `MOC_DIR`:元对象编译器输出目录 - -## 更新日志 - -### v1.0.0 (2026-04-18) - -- ✨ 初始版本发布 -- ✨ 基础时钟功能 -- ✨ 拖拽移动支持 -- ✨ 右键菜单功能 -- ✨ 样式自定义 -- ✨ 设置持久化 -- ✨ 构建输出目录管理 diff --git a/README.md b/README.md index 8203afe..1bcb857 100644 --- a/README.md +++ b/README.md @@ -1,169 +1,61 @@ -# ☁ Clouck +# DualFloatingClock -![Build Qt](https://github.com/ivaquero/clouck/workflows/Build%20Qt%20Application/badge.svg) -![Release](https://github.com/ivaquero/clouck/workflows/Build%20and%20Release%20Clouck/badge.svg) -![code size](https://img.shields.io/github/languages/code-size/ivaquero/clouck.svg) -![repo size](https://img.shields.io/github/repo-size/ivaquero/clouck.svg) +A menu-bar-first, dual-timezone floating clock for macOS, Windows and Linux — built with Qt6. -This project aims to build a cross-platform floating clock based on Qt6. +> **Fork provenance:** this project is a fork of [clouck](https://github.com/ivaquero/clouck) +> by [ivaquero](https://github.com/ivaquero) — a cross-platform floating clock. +> DualFloatingClock extends it with dual time zones, a flat tray menu, glyph outlines, +> per-element font sizing and a menu-bar-only presence (no Dock icon on macOS). -## Motivation +## What it does -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. +A borderless, always-on-top clock that shows **two configurable time zones** +side by side — each with its own time and city name — plus a menu bar tray icon +for quick access to all settings. Designed for people working across time zones +who want the second (or third) clock glanceable, not hidden in world-clock widgets. -![clock](doc/clock.png) +## Features -## ✨ Features +- **Dual time zones** — pick any IANA zone for each clock (`Europe/Bucharest`, `America/Los_Angeles`, …) +- **Floating clock** — frameless, always-on-top, drag anywhere, resizable from the corner; visible even in fullscreen spaces (macOS) +- **Menu-bar tray** — icon adapts to light/dark mode; flat context menu with every setting (no submenus, no clicking on the clock itself) +- **Text outline** — configurable glyph outline (color) under the text fill, so the clock stays readable on any wallpaper +- **Per-element fonts** — separate font sizes for the time and the city name (up to 200pt) +- **Colors via HTML/hex** — type `#00ff00`, `#80000000` (with alpha) or `transparent`; falls back to the native color picker +- **Start at Login** — toggle in the tray menu (macOS LaunchAgent) +- **Menu-bar-only on macOS** — no Dock icon, no ⌘Tab entry; lives in the menu bar +- **XML config** — persisted in the OS config location (e.g. `~/Library/Preferences/DualFloatingClock/DualFloatingClock/config.xml`) -- [ ] **Cross Platform** - - [x] MacOS - - [x] Windows - - [ ] Linux -- [x] **Main Window** - - [x] Always On Top - - [x] Frameless - - [x] Drag and Move - - [x] Resizable - - [x] Show in Fullscreen Mode -- [x] **Style** - - [x] Right Click Menu - - [x] Set Background Color - - [ ] Transparent Background - - [x] Set Font Color - - [x] Set FontSize -- [x] **Tweakable** (XML) - - [x] Read Settings - - [x] Write Settings - - [x] Reset Settings -- [ ] **Time Zone** - - [ ] Select Time Zone +## Build -## Quick Start - -### Build and Run - -#### Quick Build (Recommended) +Requires Qt6 (Core, Widgets, Test) and CMake ≥ 3.16. ```bash -# One-click build -./build.sh +cmake -S . -B build +cmake --build build -# Run application -./build/Clouck.app/Contents/MacOS/Clouck # macOS -./build/Clouck # Linux +# macOS — run +open build/DualFloatingClock.app +# install to /Applications +cp -R build/DualFloatingClock.app /Applications/ ``` -#### Manual Build +qmake is also supported (legacy): see `build.sh` / `DualFloatingClock.pro`. + +## Tests ```bash -# Clean build files -./clean.sh - -# Generate Makefile -qmake Clouck.pro - -# Build -make - -# Run -./build/Clouck.app/Contents/MacOS/Clouck # macOS -./build/Clouck # Linux +cd build && ctest ``` -#### Using CMake +Qt Test suites: `ConfigManagerTest` (XML round-trip, default path), `AutoStartManagerTest` (LaunchAgent contents, enable/disable round-trip). -```bash -mkdir build && cd build -cmake .. -make -./Clouck -``` +## Usage -## 🚀 GitHub Actions - -This project uses GitHub Actions for automated building and releasing: - -### CI/CD Workflows - -- **CI Build**: Validates builds on all platforms for every push/PR -- **Build Qt**: Comprehensive builds using both qmake and CMake -- **Release**: Creates distributable packages for tagged releases - -### Download Pre-built Binaries - -Visit the [Releases](https://github.com/ivaquero/clouck/releases) page to download pre-built binaries for: - -- **macOS**: DMG installer with native app bundle -- **Windows**: ZIP package with all dependencies -- **Linux**: TAR.GZ package with shared libraries - -### Creating a Release - -1. Tag a new version: - - ```bash - git tag v1.0.0 - git push origin v1.0.0 - ``` - -2. GitHub Actions will automatically build and create a release with binaries for all platforms - -### Configuration - -The application now uses XML configuration files instead of QSettings. Configuration is stored in `config.xml` with the following options: - -- **FontColor**: Font color in hex format -- **BackgroundColor**: Background color with alpha transparency -- **FontSize**: Font size in points (8-72) -- **AlwaysOnTop**: Window always stays on top -- **WindowPosition**: Window position coordinates - -The configuration file is automatically created when you first run the application and make changes to settings. - -### Usage - -- **Move**: Left-click and drag -- **Menu**: Right-click for context menu -- **Customize**: Change colors, font size, always-on-top behavior -- **Configuration**: Settings are saved to `config.xml` and persist between sessions - -### Project Structure - -```text -qClouck/ -├── build/ # Build output directory -│ ├── Clouck.app/ # macOS application bundle -│ ├── *.o # Object files -│ ├── moc_*.cpp # Qt meta-object compiler output -│ └── Makefile # Build file -├── config.xml # XML configuration file -├── build.sh # One-click build script -├── clean.sh # Clean script -├── Clouck.pro # qmake project file -├── CMakeLists.txt # CMake project file -└── README.md -``` - -### Build Output Management - -- All compilation files (.o, moc_*.cpp, Makefile, etc.) are output to `build/` directory -- Executable files are located at `build/Clouck.app/Contents/MacOS/Clouck` (macOS) or `build/Clouck` (Linux) -- Use `./clean.sh` to quickly clean all build files -- Use `./build.sh` for complete one-click build - -### Next Steps - -- Time zone selection -- Alarm functionality -- Enhanced UI/UX - -## Requirements - -- Qt6 (Core, Widgets) -- C++17 compatible compiler -- CMake 3.16+ (optional, for CMake build) +- **Move**: drag the clock · **Resize**: drag the bottom-right corner +- **Settings**: right-click the **tray icon** (the clock itself has no menu — dragging-friendly) +- Colors accept `#RRGGBB`, `#AARRGGBB` or `transparent` ## License -See LICENSE file for details. +Same as upstream clouck — see [LICENSE](LICENSE). diff --git a/autostart_manager.cpp b/autostart_manager.cpp index fbbe8a1..7f96897 100644 --- a/autostart_manager.cpp +++ b/autostart_manager.cpp @@ -9,7 +9,7 @@ namespace { -const QString launchAgentLabel = QStringLiteral("com.clouck.clock"); +const QString launchAgentLabel = QStringLiteral("com.dualfloatingclock.clock"); } bool AutoStartManager::enableForCurrentApplication() diff --git a/build.sh b/build.sh index 4d39816..5e371c5 100755 --- a/build.sh +++ b/build.sh @@ -1,7 +1,7 @@ #!/bin/bash # Build script -echo "Starting Clouck build..." +echo "Starting DualFloatingClock build..." # Create build directory if it doesn't exist mkdir -p build @@ -12,18 +12,18 @@ rm -rf build/* # Generate Makefile using qmake echo "Generating Makefile..." -qmake Clouck.pro +qmake DualFloatingClock.pro # Build project echo "Starting compilation..." make # Check build result -if [ -f "build/Clouck.app/Contents/MacOS/Clouck" ] || [ -f "build/Clouck" ]; then +if [ -f "build/DualFloatingClock.app/Contents/MacOS/DualFloatingClock" ] || [ -f "build/DualFloatingClock" ]; then echo "Build successful!" echo "Executable location:" - [ -f "build/Clouck.app/Contents/MacOS/Clouck" ] && echo " - build/Clouck.app/Contents/MacOS/Clouck (macOS)" - [ -f "build/Clouck" ] && echo " - build/Clouck (Linux)" + [ -f "build/DualFloatingClock.app/Contents/MacOS/DualFloatingClock" ] && echo " - build/DualFloatingClock.app/Contents/MacOS/DualFloatingClock (macOS)" + [ -f "build/DualFloatingClock" ] && echo " - build/DualFloatingClock (Linux)" else echo "Build failed!" exit 1 diff --git a/build_cross_platform.sh b/build_cross_platform.sh index 904e1dd..80a86eb 100755 --- a/build_cross_platform.sh +++ b/build_cross_platform.sh @@ -1,7 +1,7 @@ #!/bin/bash -# Cross-platform build script for Clouck +# Cross-platform build script for DualFloatingClock -echo "Building Clouck - Cross-platform Clock Application" +echo "Building DualFloatingClock - Cross-platform Clock Application" echo "==================================================" # Detect operating system @@ -49,19 +49,19 @@ echo "" echo "Executable location:" if [ "$OS" == "macOS" ]; then - echo " - build/Clouck.app/Contents/MacOS/Clouck (macOS)" + echo " - build/DualFloatingClock.app/Contents/MacOS/DualFloatingClock (macOS)" elif [ "$OS" == "Windows" ]; then - echo " - build/Release/Clouck.exe (Windows)" + echo " - build/Release/DualFloatingClock.exe (Windows)" elif [ "$OS" == "Linux" ]; then - echo " - build/Clouck (Linux)" + echo " - build/DualFloatingClock (Linux)" fi echo "" echo "To run the application:" if [ "$OS" == "macOS" ]; then - echo " ./build/Clouck.app/Contents/MacOS/Clouck" + echo " ./build/DualFloatingClock.app/Contents/MacOS/DualFloatingClock" elif [ "$OS" == "Windows" ]; then - echo " ./build/Release/Clouck.exe" + echo " ./build/Release/DualFloatingClock.exe" elif [ "$OS" == "Linux" ]; then - echo " ./build/Clouck" + echo " ./build/DualFloatingClock" fi diff --git a/clean.sh b/clean.sh index 3dc4e7b..052ccae 100755 --- a/clean.sh +++ b/clean.sh @@ -10,9 +10,9 @@ if [ -d "build" ]; then fi # Delete .app bundle -if [ -d "Clouck.app" ]; then - rm -rf Clouck.app - echo "Clouck.app deleted" +if [ -d "DualFloatingClock.app" ]; then + rm -rf DualFloatingClock.app + echo "DualFloatingClock.app deleted" fi echo "Cleanup complete!" diff --git a/config.xml b/config.xml index b58996c..271daaa 100644 --- a/config.xml +++ b/config.xml @@ -1,5 +1,5 @@ - + #ff00ff00 #00000000 24 @@ -8,4 +8,4 @@ 240,160 Europe/Bucharest America/Los_Angeles - + diff --git a/config_manager.cpp b/config_manager.cpp index ef7d867..f6dee3b 100644 --- a/config_manager.cpp +++ b/config_manager.cpp @@ -48,7 +48,8 @@ bool ConfigManager::loadSettings(const QString &filename) QXmlStreamReader reader(&file); // Check if it's a valid XML file - if (!reader.readNextStartElement() || reader.name() != QString("ClouckConfig")) + if (!reader.readNextStartElement() + || (reader.name() != QString("DualFloatingClockConfig") && reader.name() != QString("ClouckConfig"))) { qDebug() << "Invalid config file format"; file.close(); @@ -159,7 +160,7 @@ bool ConfigManager::saveSettings(const QString &filename) writer.writeStartDocument(); // Root element - writer.writeStartElement("ClouckConfig"); + writer.writeStartElement("DualFloatingClockConfig"); // Colors: store #RRGGBB when fully opaque, #AARRGGBB when translucent — // the XML stays close to what the user typed. diff --git a/main.cpp b/main.cpp index 848177a..49682b5 100644 --- a/main.cpp +++ b/main.cpp @@ -55,16 +55,16 @@ int main(int argc, char *argv[]) clouck_setActivationPolicyAccessory(); #endif - app.setApplicationName("Clouck"); - app.setOrganizationName("Clouck"); - app.setApplicationDisplayName("Clouck"); + app.setApplicationName("DualFloatingClock"); + app.setOrganizationName("DualFloatingClock"); + app.setApplicationDisplayName("DualFloatingClock"); ClockWidget clock; clock.show(); // Start at Login: honor the persisted choice instead of always forcing it. { - QSettings autoStartSettings("Clouck", "Clouck"); + QSettings autoStartSettings("DualFloatingClock", "DualFloatingClock"); const bool startAtLogin = autoStartSettings.value("startAtLogin", true).toBool(); if (startAtLogin) { @@ -79,7 +79,7 @@ int main(int argc, char *argv[]) const QStyleHints *styleHints = app.styleHints(); QSystemTrayIcon trayIcon(createTrayIcon(trayIconColorForScheme(styleHints->colorScheme())), &app); - trayIcon.setToolTip("Clouck"); + trayIcon.setToolTip("DualFloatingClock"); QObject::connect(styleHints, &QStyleHints::colorSchemeChanged, &trayIcon, [&trayIcon](Qt::ColorScheme scheme) { @@ -91,12 +91,12 @@ int main(int argc, char *argv[]) QAction *startAtLoginAction = trayMenu.addAction("Start at Login"); { - QSettings autoStartSettings("Clouck", "Clouck"); + QSettings autoStartSettings("DualFloatingClock", "DualFloatingClock"); startAtLoginAction->setCheckable(true); startAtLoginAction->setChecked(autoStartSettings.value("startAtLogin", true).toBool()); } QObject::connect(startAtLoginAction, &QAction::toggled, &app, [](bool checked) { - QSettings autoStartSettings("Clouck", "Clouck"); + QSettings autoStartSettings("DualFloatingClock", "DualFloatingClock"); autoStartSettings.setValue("startAtLogin", checked); if (checked) { diff --git a/resources/clouck.icns b/resources/dualfloatingclock.icns similarity index 100% rename from resources/clouck.icns rename to resources/dualfloatingclock.icns diff --git a/tests/autostart_manager_test.cpp b/tests/autostart_manager_test.cpp index 2a2ccd3..656847a 100644 --- a/tests/autostart_manager_test.cpp +++ b/tests/autostart_manager_test.cpp @@ -14,7 +14,7 @@ private slots: void AutoStartManagerTest::createsRunAtLoadLaunchAgent() { - const QString executablePath = "/Applications/Clouck.app/Contents/MacOS/Clouck"; + const QString executablePath = "/Applications/DualFloatingClock.app/Contents/MacOS/DualFloatingClock"; const QString contents = AutoStartManager::launchAgentContents(executablePath); QVERIFY(contents.contains("ProgramArguments")); @@ -35,7 +35,7 @@ void AutoStartManagerTest::roundTripsPlistRoundTrip() QVERIFY(!QFile::exists(AutoStartManager::launchAgentPath())); QVERIFY(!AutoStartManager::isEnabled()); - QVERIFY(AutoStartManager::enableForPath("/Applications/Clouck.app/Contents/MacOS/Clouck")); + QVERIFY(AutoStartManager::enableForPath("/Applications/DualFloatingClock.app/Contents/MacOS/DualFloatingClock")); QVERIFY(AutoStartManager::isEnabled()); QVERIFY(QFile::exists(AutoStartManager::launchAgentPath()));