Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 67 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
name: Сборка

on:
push:
branches: [trunk]
tags: ['v*']
pull_request:

jobs:
windows:
runs-on: windows-latest
permissions:
contents: write # для публикации релиза по тегу
steps:
- uses: actions/checkout@v4

- uses: jurplel/install-qt-action@v4
with:
version: '6.10.0'
arch: win64_msvc2022_64
cache: true

- uses: ilammy/msvc-dev-cmd@v1

- name: Сборка
run: |
qmake fuzzy_clock.pro "CONFIG+=release"
nmake release

- name: Развёртывание
run: |
New-Item -ItemType Directory deploy | Out-Null
Copy-Item release\fuzzy_clock.exe, fuzzy.conf, style.css deploy\
windeployqt --release --no-translations deploy\fuzzy_clock.exe

- name: Упаковка в CAB
run: |
# makecab сохраняет поддиректории (platforms\, styles\ и т.д.) только через DDF-файл
$root = (Resolve-Path deploy).Path
$ddf = @(
'.OPTION EXPLICIT'
'.Set CabinetNameTemplate=fuzzy_clock-win64.cab'
'.Set DiskDirectoryTemplate=.'
'.Set CompressionType=LZX'
'.Set MaxDiskSize=0'
'.Set UniqueFiles=OFF'
'.Set Cabinet=ON'
'.Set Compress=ON'
)
Get-ChildItem $root -Recurse -File | ForEach-Object {
$ddf += '"{0}" "{1}"' -f $_.FullName, $_.FullName.Substring($root.Length + 1)
}
$ddf | Set-Content fuzzy_clock.ddf -Encoding ascii
makecab.exe -F fuzzy_clock.ddf
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }

- uses: actions/upload-artifact@v4
with:
name: fuzzy_clock-win64
path: fuzzy_clock-win64.cab

- name: Релиз
if: startsWith(github.ref, 'refs/tags/v')
uses: softprops/action-gh-release@v2
with:
name: fuzzy clock ${{ github.ref_name }}
files: fuzzy_clock-win64.cab
2 changes: 1 addition & 1 deletion fuzzy_clock_window.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,6 @@ void fuzzyClockWindow::createActions()
void fuzzyClockWindow::about()
{
QMessageBox::about(this, tr("О \"Неточных\" часах..."),
tr("\"Неточные\" часы v3.1.3, <br/> (ремейк версии 2.1 "
tr("\"Неточные\" часы v3.1.4, <br/> (ремейк версии 2.1 "
"от 12.01.2004)<br/>rasa"));
}
41 changes: 4 additions & 37 deletions readme.md
Original file line number Diff line number Diff line change
@@ -1,58 +1,25 @@
# Неточные часы (fuzzy clock)

Небольшое окно без рамки поверх остальных окон, показывающее время словами с точностью до пяти минут: «Без четверти два», «Половина третьего», «Ровно час». Точное время выводится во всплывающей подсказке.
Часы с точностью до пяти минут: «Без четверти два», «Половина третьего», «Ровно час». Точное время выводится во всплывающей подсказке.

Ремейк версии 2.1 от 12.01.2004 на Qt 6.

![fuzzy_clock.gif](https://github.com/roosslan/fuzzy_clock/blob/trunk/fuzzy_clock.gif?raw=true)
![fuzzy_clock.gif](fuzzy_clock.gif)

## Управление

- окно перетаскивается левой кнопкой мыши;
- правая кнопка открывает меню: «About», «About Qt», «Exit»;
- положение окна сохраняется в реестре, в ключе `HKEY_CURRENT_USER\SOFTWARE\rasa\FuzzyClock`.

## Сборка

Требуется Windows, Qt 6 (модуль `widgets`) и MSVC.

Сборка из командной строки разработчика Visual Studio:
Сборка либо в в Qt Creator либо из командной строки msvs:

```bat
qmake fuzzy_clock.pro
nmake
```

Также проект можно открыть в Qt Creator.

Для запуска на другой машине необходимо скопировать библиотеки Qt в директорию с exe:

```bat
windeployqt fuzzy_clock.exe
```

## Двоичные файлы

Собранные файлы в репозитории не хранятся, они публикуются в [GitHub Releases](https://github.com/roosslan/fuzzy_clock/releases). В релизе v3.1.3 лежит только архив библиотек Qt прежней версии, без `fuzzy_clock.exe`.

## Файлы рядом с exe

Файлы `fuzzy.conf` и `style.css` ищутся в директории, где находится `fuzzy_clock.exe`.

- `style.css` — оформление окна в синтаксисе Qt Style Sheets: `#fuzzyClockWindow` — окно, `#timeLabel` — текст.
- `fuzzy.conf` — фразы, из которых собирается время.

### Формат fuzzy.conf

INI-файл, секция `[oldstyle]`, списки внутри значения разделяются `\\`:

| Ключ | Содержимое |
|---|---|
| `minutes` | фразы; `%0` заменяется часом в именительном падеже, `%1` — в родительном |
| `minuteRefer` | 60 чисел через пробел: для каждой минуты — номер фразы из `minutes` (с нуля) |
| `nominativeHours` | 12 названий часов в именительном падеже: «час», «два», … «двенадцать» |
| `genitiveHours` | 12 названий часов в родительном падеже: «первого», «второго», … «двенадцатого» |

Для фраз с `%1` («Пять минут %1») подставляется следующий час, для фраз с `%0` («Без пяти %0») — тоже следующий, кроме минут 0–2 («Ровно %0»), где используется текущий.

При ошибке в файле (неверное количество элементов, номер фразы вне списка) вместо времени выводится «Ошибка в fuzzy.conf».
```
8 changes: 4 additions & 4 deletions resource.rc
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
IDI_ICON1 ICON DISCARDABLE "app.ico"

VS_VERSION_INFO VERSIONINFO
FILEVERSION 3,1,3,2004
PRODUCTVERSION 3,1,3,2004
FILEVERSION 3,1,4,2004
PRODUCTVERSION 3,1,4,2004
FILEFLAGS 0x0L
FILEFLAGSMASK 0x3fL
FILEOS 0x00040004L
Expand All @@ -17,12 +17,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "rasa"
VALUE "FileDescription", "Fuzzy Clock"
VALUE "FileVersion", "3.1.3.2004"
VALUE "FileVersion", "3.1.4.2004"
VALUE "LegalCopyright", "Copyright (C) rasa 2004 - 2026"
VALUE "InternalName", "fuzzy_clock"
VALUE "OriginalFilename", "fuzzy_clock.exe"
VALUE "ProductName", "Fuzzy Clock"
VALUE "ProductVersion", "3.1.3.2004"
VALUE "ProductVersion", "3.1.4.2004"
END
END
BLOCK "VarFileInfo"
Expand Down