From 9f3a599b790a9f4746a81b17de89e3fb762f531f Mon Sep 17 00:00:00 2001 From: git_alhan Date: Thu, 21 May 2026 04:13:45 +0300 Subject: [PATCH] Initial commit: Noteki v1.0 - Modern sticky notes app for Windows - PySide6 full-screen transparent canvas - System tray integration, global Alt+N hotkey - Session management, undo/redo, auto-save - Custom color palette with dynamic contrast - Pin notes always-on-top, Tab navigation - Windows Named Mutex single-instance guard --- .gitignore | 164 +++++++++++ LICENSE | 21 ++ README.md | 144 +++++++++ assets/icon.png | Bin 0 -> 339508 bytes main.py | 51 ++++ prd.md | 278 ++++++++++++++++++ pyinstaller_guide.md | 64 ++++ requirements.txt | 2 + src/__init__.py | 1 + src/add_button.py | 77 +++++ src/app.py | 443 ++++++++++++++++++++++++++++ src/canvas_window.py | 417 ++++++++++++++++++++++++++ src/constants.py | 154 ++++++++++ src/data_manager.py | 361 +++++++++++++++++++++++ src/hotkey_manager.py | 168 +++++++++++ src/note_widget.py | 647 +++++++++++++++++++++++++++++++++++++++++ src/settings_dialog.py | 488 +++++++++++++++++++++++++++++++ src/tray_manager.py | 181 ++++++++++++ src/undo_manager.py | 59 ++++ 19 files changed, 3720 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 assets/icon.png create mode 100644 main.py create mode 100644 prd.md create mode 100644 pyinstaller_guide.md create mode 100644 requirements.txt create mode 100644 src/__init__.py create mode 100644 src/add_button.py create mode 100644 src/app.py create mode 100644 src/canvas_window.py create mode 100644 src/constants.py create mode 100644 src/data_manager.py create mode 100644 src/hotkey_manager.py create mode 100644 src/note_widget.py create mode 100644 src/settings_dialog.py create mode 100644 src/tray_manager.py create mode 100644 src/undo_manager.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f6e5da8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,164 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +bin/ +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, you may want to delete them afterwards +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nosenv/ +.pytest_cache/ +.mypy_cache/ +.pyre/ +.pytype/ +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.run/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +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 +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or app, you might want to share this in the repository +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if lock is not desired: +# Pipfile.lock + +# poetry +# Similar to Pipfile.lock, poetry.lock is generally recommended to be committed +# poetry.lock + +# pdm +# Similar to Pipfile.lock, pdm.lock is generally recommended to be committed +# pdm.lock + +# PEP 582; modern alternative to virtualenv, used by pdm and rye +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.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/ + +# OS-specific +.DS_Store +Thumbs.db + +# IDEs +.idea/ +.vscode/ +*.swp +*.swo + +# Local App Data (Personal Sticky Note DBs) +# Do NOT upload your personal notes to GitHub +session.json +deepseek.env +*.env +session.backup.json +settings.json +sticky_canvas.lock +noteki.lock +logs/ +*.log diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..1f08f24 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Noteki Contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..cd545b6 --- /dev/null +++ b/README.md @@ -0,0 +1,144 @@ +# Noteki — Sticky Notes for Windows + +

+ Noteki +

+ +

+ Modern, lightweight, customizable sticky notes that stay out of your way. +

+ +

+ Python + PySide6 + Windows + MIT + Release + EXE +

+ +--- + +**Noteki** is a modern sticky notes app that lives in your system tray. Press a hotkey, jot something down, and move on. It uses a transparent full-screen canvas — notes appear exactly where you left them, and disappear when you click away. + +No accounts, no cloud, no bloat. Your notes stay on your machine. + +--- + +## Features + +| Feature | Description | +|---------|-------------| +| **Always-on-Top** | Pin individual notes to stay above all other windows. | +| **Custom Colors** | Add, remove, or change note colors dynamically. Text contrast is auto-calculated. | +| **Session Management** | Create, clone, and switch between separate workspaces — perfect for different projects. | +| **Global Hotkey** | `Alt+N` (configurable) toggles all notes from anywhere. | +| **Undo/Redo** | Accidentally deleted a note? `Ctrl+Z` brings it right back. | +| **Auto-Save** | Notes save instantly on focus-out. No manual saving needed. | +| **Click-Through** | Click empty canvas space to hide notes and interact with windows behind them. | +| **Keyboard Navigation** | `Tab` / `Shift+Tab` to cycle between notes. `Esc` to hide. | +| **Start with Windows** | Optional — toggle in Settings. No admin rights needed. | +| **Zero Latency** | Single-canvas architecture keeps CPU/RAM usage minimal when idle. | + +--- + +## Quick Start + +### Option 1 — Download EXE (no Python required) + +Grab the latest `Noteki.exe` from [Releases](https://github.com/kullaniciadi/noteki/releases/latest) and run it. That's it. + +### Option 2 — Run from source + +```bash +git clone https://github.com/kullaniciadi/noteki.git +cd noteki +pip install -r requirements.txt +python main.py +``` + +**Requirements:** Python 3.8+, PySide6, Pillow. + +--- + +## Keyboard Shortcuts + +| Shortcut | Action | +|----------|--------| +| `Alt+N` *(configurable)* | Show / hide all notes | +| `Ctrl+Z` | Undo last deletion | +| `Tab` / `Shift+Tab` | Cycle focus between notes | +| `Esc` | Hide notes | +| Right-click (empty area) | Quick menu: new note, bring all to front | +| Right-click (on note) | Color picker, copy, paste, delete | +| Double-click (note header) | Focus text editor | + +--- + +## Data & Privacy + +All data is stored locally under: + +``` +%APPDATA%\Noteki\ + sessions\ One .json file per workspace + settings.json Your preferences + logs\ Rotating logs (7-day retention) +``` + +**Your notes never leave your computer.** No telemetry, no analytics, no network calls. + +If `session.json` gets corrupted, Noteki automatically recovers from `session.backup.json`. + +--- + +## Building the EXE + +Want to build the standalone executable yourself? + +```bash +pip install pyinstaller pillow + +# Convert PNG icon to ICO +python -c "from PIL import Image; Image.open('assets/icon.png').save('assets/icon.ico', format='ICO')" + +# Build single-file EXE +pyinstaller --noconsole --onefile --icon="assets/icon.ico" --add-data "assets;assets" main.py +``` + +The output will be in `dist/main.exe`. Rename it to `Noteki.exe` and you're done. + +--- + +## Project Structure + +``` +noteki/ + main.py Entry point + requirements.txt Dependencies + assets/ + icon.png App & tray icon + src/ + app.py Orchestrator — wires everything together + canvas_window.py Full-screen transparent canvas + note_widget.py Individual sticky note (header, text, resize, drag) + add_button.py Floating "+" button + data_manager.py JSON persistence, auto-save, sessions + hotkey_manager.py Windows global hotkey (ctypes + QThread) + tray_manager.py System tray icon & context menu + settings_dialog.py Settings window (font, color, sessions, hotkey) + undo_manager.py RAM-based undo queue (10-deep) + constants.py App-wide constants & color math +``` + +--- + +## License + +MIT — see [LICENSE](LICENSE) for details. + +--- + +

+ Built with and PySide6 +

diff --git a/assets/icon.png b/assets/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..65e6578eb95546c50d82070080fe932652491e2c GIT binary patch literal 339508 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 z≫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
7V@J@xRtqbPj)rfdFht=NVEm62z@N2#Y&!GPav{ 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 literal 0 HcmV?d00001 diff --git a/main.py b/main.py new file mode 100644 index 0000000..52ad6e1 --- /dev/null +++ b/main.py @@ -0,0 +1,51 @@ +""" +main.py — Sticky Canvas uygulama giriş noktası +""" + +import sys +import os + + +def main() -> None: + # PySide6 yüklü mu? + try: + from PySide6.QtWidgets import QApplication + except ImportError: + print( + "PySide6 bulunamadı. Lütfen şu komutu çalıştırın:\n" + " pip install PySide6", + file=sys.stderr, + ) + sys.exit(1) + + # src paketinin konumunu path'e ekle + src_dir = os.path.dirname(os.path.abspath(__file__)) + if src_dir not in sys.path: + sys.path.insert(0, src_dir) + + try: + from src.app import StickyCanvasApp + app = StickyCanvasApp() + sys.exit(app.run()) + except Exception as exc: + import logging + import traceback + logging.getLogger(__name__).critical("Kritik hata: %s", exc, exc_info=True) + # Kullanıcıya hata göster + try: + from PySide6.QtWidgets import QApplication, QMessageBox + q = QApplication.instance() or QApplication(sys.argv) + QMessageBox.critical( + None, + "Noteki — Kritik Hata", + f"Uygulama beklenmedik bir hatayla karşılaştı:\n\n{exc}\n\n" + "Detaylar için log dosyasını kontrol edin.", + ) + except Exception: + print(f"KRITIK HATA: {exc}", file=sys.stderr) + traceback.print_exc() + sys.exit(1) + + +if __name__ == "__main__": + main() diff --git a/prd.md b/prd.md new file mode 100644 index 0000000..34a82b4 --- /dev/null +++ b/prd.md @@ -0,0 +1,278 @@ +# Product Requirement Document (PRD) - Sticky Canvas + + + +## 1. Proje Özeti + +Windows işletim sistemi üzerinde çalışan, minimum kaynak tüketimi ve yüksek performans odaklı, ekranın tüm yüzeyini aktif bir tuval (canvas) olarak kullanan bir masaüstü yapışkan not (Sticky Notes) uygulamasıdır. + + + +## 2. Teknik Mimari ve Altyapı + +* **Geliştirme Dili ve Kütüphane:** Python 3.x / PySide6 (Qt for Python). + +* **Hedef İşletim Sistemi:** Windows (Master Monitör odaklı). Kod yapısı Linux için derlemeye uygun mimaride kurulacaktır. + +* **Pencere Yönetimi:** Tek bir tam ekran transparan katman (Canvas Window) oluşturulacaktır. `Qt.FramelessWindowHint` ve `Qt.WA_TranslucentBackground` öznitelikleri kullanılacaktır. + +* **Tek Instance Kilidi (Single Instance Lock):** Uygulama aynı anda yalnızca tek bir kopya olarak çalışabilecektir. İkinci bir instance başlatılmaya çalışıldığında, mevcut instance öne getirilecek ve yeni instance sessizce kapanacaktır. Bu mekanizma `QLockFile` veya Named Mutex ile sağlanacaktır. + + + +## 3. Fonksiyonel Gereksinimler + + + +### 3.1. Katman ve Görünürlük Yönetimi (Toggle State) + +* Uygulama, global `Alt + N` kısayolu veya sistem tepsisi (System Tray) ikonu aracılığıyla tetiklendiğinde tüm not katmanıyla birlikte en üste (`Always on Top`) gelecektir. + +* Görünürlük bir "Toggle" mekanizmasıyla çalışacaktır: Kısayola tekrar basıldığında veya kullanıcı not alanları dışında boş bir alana tıkladığında, uygulama odağını (focus) kaybederek kendini arka plana atacak ve tıklama geçirgenliği (`Click-Through`) aktifleşecektir. + +* **Kısayol Çakışması:** `Alt+N` kısayolu başka bir uygulama tarafından kullanılıyorsa veya kayıt başarısız olursa, kullanıcıya System Tray üzerinden bilgi verilecek ve kısayol Ayarlar penceresinden değiştirilebilecektir. + + + +### 3.2. Not Ekleme, Düzenleme ve Silme + +* **Yeni Not Oluşturma:** Ekranın sağ alt köşesinde sabit duran bir "+" butonu veya ekranın boş bir yerine sağ tıklayarak açılan bağlam menüsü (Context Menu) üzerinden yeni not eklenecektir. + +* **Varsayılan Yeni Not Pozisyonu:** Yeni not, ekranın merkezine yakın bir alanda, mevcut notlarla çakışmayacak şekilde kaskad (cascade) düzeninde oluşturulacaktır (her yeni not bir öncekinden ~20px sağa ve aşağı kaydırılır). + +* **Not Silme:** Her not kutusunun sağ üst köşesinde bir "X" butonu yer alacaktır. Undo mekanizması mevcut olduğundan, silme işlemi için onay diyaloğu gösterilmeyecektir. + +* **Boş Not Davranışı:** İçeriği boş olan notlar, kullanıcı notu terk ettiğinde (başka bir nota tıkladığında veya canvas dışına çıktığında) otomatik olarak silinecektir. + +* **Z-Index (Katman Sırası):** Notlar üst üste bindiğinde, kullanıcının son tıkladığı veya sürüklediği not otomatik olarak en üste çıkacaktır (Auto Z-Index). + + + +### 3.3. Not Kutusu Özellikleri + +* **Varsayılan Boyut:** Yeni oluşturulan notlar 220x180 piksel boyutunda olacaktır. + +* **Boyut Sınırları:** Minimum boyut: 150x100 px. Maksimum boyut: 600x500 px. + +* **Yeniden Boyutlandırma (Resize):** Notlar, sağ alt köşelerindeki tutamaç (resize grip) ile yeniden boyutlandırılabilecektir. + +* **Renk Paleti:** Notlar aşağıdaki 6 renk seçeneğinden birine sahip olabilecektir: + - Sarı (varsayılan): `#FFF9C4` + - Yeşil: `#C8E6C9` + - Mavi: `#BBDEFB` + - Pembe: `#F8BBD0` + - Mor: `#E1BEE7` + - Turuncu: `#FFE0B2` + +* **Metin Desteği:** Yalnızca düz metin (plain text) desteklenecektir. Zengin metin biçimlendirme (bold, italic vb.) bu sürümde kapsam dışıdır. + +* **Metin Taşması:** İçerik nota sığmadığında dikey kaydırma çubuğu (vertical scrollbar) otomatik olarak görünür olacaktır. + +* **Karakter Limiti:** Tek bir notta maksimum 2000 karakter girilebilecektir. + +* **Büyük Metin Yapıştırma:** Clipboard'dan 2000 karakterden fazla metin yapıştırılmaya çalışıldığında, metin 2000 karaktere kırpılacak ve kullanıcıya kısa bir tooltip ile bilgi verilecektir. + + + +### 3.4. Not Üzerinde Sağ Tıklama Menüsü (Context Menu) + +Not üzerine sağ tıklandığında aşağıdaki menü gösterilecektir: + +``` +├── Renk Değiştir ──► [Sarı] [Yeşil] [Mavi] [Pembe] [Mor] [Turuncu] +├── Kopyala (Ctrl+C) +├── Yapıştır (Ctrl+V) +├── ───────────── +└── Notu Sil +``` + + + +### 3.5. Yapılandırma ve Ayarlar + +* **Yönetim Merkezi:** Grafiksel bir ana pencere olmayacaktır. Tüm yönetim Sistem Tepsi (System Tray) ikonuna sağ tıklanarak açılan menüden yapılacaktır. + +* **Ayarlar Penceresi:** Tray menüsünden erişilebilir olacak ve aşağıdaki ayarları içerecektir: + - Varsayılan font tipi + - Varsayılan font boyutu (8-32 px arası) + - Varsayılan not rengi + - Global kısayol tuşu değiştirme + - Windows başlangıcında otomatik çalıştır (varsayılan: kapalı) + + + +### 3.6. System Tray Menü Yapısı + +System Tray ikonu üzerine sol tıklandığında Toggle (Göster/Gizle) tetiklenecektir. + +Sağ tıklandığında aşağıdaki menü gösterilecektir: + +``` +├── Notları Göster/Gizle +├── Yeni Not Ekle +├── ───────────── +├── Tüm Notları Sil (onay diyaloğu ile) +├── Geri Al (Ctrl+Z) +├── ───────────── +├── Ayarlar... +├── ───────────── +└── Çıkış +``` + +* **Tray Tooltip:** İkon üzerine gelindiğinde "Sticky Canvas — X Not" şeklinde tooltip gösterilecektir. + + + +## 4. Kullanıcı Etkileşimi ve Akış (UX/UI) + + + +### 4.1. Boş Alan ve Tıklama Geçirgenliği Mekanizması + +[Alt+N / Tray Tıklaması] ──> Canvas Öne Çıkar (Notlar Düzenlenebilir) + +│ + +┌─────────────────────────┴────────────────────────┐ + +▼ ▼ + +[Not Üzerine Tıklama] [Boş Alana Tıklama] + +│ │ + +├─ Sürükle/Bırak └─ Odak Kaybolur (Focus Lost) + +├─ Metin Düzenle Canvas Arka Plana Atılır + +└─ Z-Index Artır (Öne Getir) OS Pencereleri Üste Çıkar + + + +### 4.2. Not Kutusu Davranışları + +* Notlar çerçevesiz, düz renk arka plana sahip kutulardan oluşacaktır. Hafif bir drop-shadow (gölge) uygulanacaktır. + +* Her not kutusu başlık çubuğu olmadan, gövdesinden tutularak ekranın herhangi bir yerine sürüklenebilecektir. + +* **Sürükleme Göstergesi:** Sürükleme sırasında notun opaklığı %85'e düşürülecek, gölge derinliği artırılacaktır. + +* **Aktif Not Göstergesi:** Düzenlenmekte olan not, sol kenarında 3px kalınlığında vurgu rengi (accent border) ile belirginleştirilecektir. + +* **"+" Butonu Stili:** 48x48 px, yarı-saydam koyu arka plan, beyaz "+" ikonu, üzerine gelindiğinde (hover) opaklık artışı. + + + +### 4.3. Sağ Tıklama — Boş Alan + +Canvasın boş bir alanına sağ tıklandığında: + +``` +├── Yeni Not Ekle +├── ───────────── +├── Tüm Notları Göster +└── Geri Al (Ctrl+Z) +``` + + + +## 5. Veri Yönetimi ve Performans + + + +### 5.1. Kalıcılık (Persistence) + +* **Dosya Konumu:** Tüm veriler `%APPDATA%/StickyCanvas/` dizini altında saklanacaktır. + +* **Oturum Dosyası:** Aktif notların tüm bilgileri `session.json` dosyasında tutulacaktır. + +* **Ayarlar Dosyası:** Kullanıcı tercihleri `settings.json` dosyasında ayrı olarak saklanacaktır. + +* **Yedekleme (Backup):** Her başarılı kayıtta mevcut dosya `session.backup.json` olarak yedeklenecektir. Ana dosya bozulursa yedek dosyadan otomatik olarak kurtarma yapılacaktır. + +* **Auto-Save:** Kullanıcı metin alanından çıktığında, bir notu sürükleyip bıraktığında veya yeni not ekleyip sildiğinde JSON dosyası asenkron olarak anında güncellenecektir. + + + +### 5.2. Veri Şeması (Data Schema) + +**session.json:** +```json +{ + "version": "1.0", + "notes": [ + { + "id": "uuid-v4", + "content": "Not içeriği...", + "x": 100, + "y": 200, + "width": 220, + "height": 180, + "color": "#FFF9C4", + "z_index": 1, + "created_at": "2026-05-20T22:00:00Z", + "updated_at": "2026-05-20T22:05:00Z" + } + ] +} +``` + +**settings.json:** +```json +{ + "version": "1.0", + "default_font_family": "Segoe UI", + "default_font_size": 14, + "default_note_color": "#FFF9C4", + "hotkey": "Alt+N", + "auto_start": false +} +``` + + + +### 5.3. Geri Alma (Undo History) + +* Yanlışlıkla silinen notları kurtarmak amacıyla bellek üzerinde (RAM) 10 işlem kapasiteli bir geçmiş kuyruğu (History Queue) tutulacaktır. + +* Uygulama tamamen kapatılmadığı sürece, silinen notlar bu kuyruktan sırayla geri getirilebilecektir (`Ctrl + Z` entegrasyonu ile). Uygulama kapatıldığında bu geçici kuyruk temizlenecektir. + + + +### 5.4. Kaynak Tüketim Sınırları + +* Tek pencere (Canvas) mimarisi sayesinde uygulama boşta çalışırken RAM tüketimi minimum düzeyde tutulacak, CPU kullanımı ise yalnızca çizim (render) ve metin girişi esnasında tetiklenecektir. + +* **Maksimum Not Sayısı:** Performans garantisi açısından maksimum 50 aktif not desteklenecektir. Limite ulaşıldığında "+" butonu devre dışı kalacak ve kullanıcıya bilgi verilecektir. + + + +## 6. Hata Yönetimi ve Sınır Durumları (Edge Cases) + +* **Ekran Dışı Not Kurtarma:** Çözünürlük değiştiğinde veya monitör bağlantısı kesildiğinde, ekran sınırları dışında kalan notlar otomatik olarak görünür alana (ekranın sol üst köşesine kaskad düzeninde) taşınacaktır. Bu kontrol uygulama başlatıldığında yapılacaktır. + +* **Dosya Bozulması Kurtarma:** `session.json` okunamazsa, `session.backup.json` dosyasından kurtarma denenecektir. Her iki dosya da bozuksa uygulama boş bir oturumla başlayacak ve kullanıcıya bilgi verilecektir. + +* **Loglama:** Hata ve kritik olaylar `%APPDATA%/StickyCanvas/logs/` dizininde günlük bazlı log dosyalarında tutulacaktır (rotating file handler, 7 günlük). Standart Python `logging` modülü kullanılacaktır. + + + +## 7. Uygulama Yaşam Döngüsü + +* **İlk Açılış:** Uygulama ilk kez çalıştırıldığında, kullanımı anlatan kısa bir "Hoş Geldin" notu otomatik olarak oluşturulacaktır. + +* **Windows Başlangıcında Otomatik Çalıştırma:** Ayarlar penceresinden etkinleştirilebilir. Windows Registry (`HKCU\Software\Microsoft\Windows\CurrentVersion\Run`) üzerinden yönetilecektir. + +* **Çıkış Davranışı:** Tray menüsünden "Çıkış" seçildiğinde onay diyaloğu gösterilmeden uygulama kapanacaktır. Veriler zaten auto-save ile kayıtlıdır. + +* **Tray'e Küçültme:** "X" veya pencere kapatma eylemi uygulamayı kapatmaz, System Tray'e küçültür. + + + +## 8. Erişilebilirlik (Accessibility) + +* **Klavye Navigasyonu:** Notlar arasında `Tab` tuşu ile geçiş yapılabilecektir. `Shift+Tab` ters yönde geçiş sağlayacaktır. + +* **Ekran Okuyucu Desteği:** Qt Accessibility API kullanılarak, notlar ve butonlar için uygun erişilebilirlik etiketleri (accessible names/descriptions) tanımlanacaktır. + +* **Dil:** Uygulama arayüzü Türkçe olacaktır. İlk sürümde çoklu dil desteği planlanmamaktadır. diff --git a/pyinstaller_guide.md b/pyinstaller_guide.md new file mode 100644 index 0000000..423310e --- /dev/null +++ b/pyinstaller_guide.md @@ -0,0 +1,64 @@ +# Sticky Canvas — EXE Paketleme ve Windows Başlangıç Kılavuzu + +Bu kılavuz, uygulamanızı tek bir `.exe` dosyası haline getirmeyi ve "Windows ile Birlikte Başlat" seçeneğinin arka planda nasıl çalıştığını açıklar. + +--- + +## 1. Uygulamayı Standart EXE Haline Getirme (PyInstaller) + +Uygulamanızı tek bir dosya (`.exe`) haline getirmek için **PyInstaller** kütüphanesini kullanabilirsiniz. + +### Adım 1: Gerekli Kütüphaneleri Yükleyin +PowerShell veya Komut İstemi'ni açıp şu komutları çalıştırın: +```bash +pip install pyinstaller pillow +``` +*(Not: `pillow`, ikon dönüştürme için kullanılacaktır.)* + +### Adım 2: PNG İkonunu ICO Formatına Dönüştürün +Windows, `.exe` dosyalarının masaüstü ve dosya gezgini ikonları için özel `.ico` formatını şart koşar. Aşağıdaki komutla mevcut `icon.png` dosyasını otomatik olarak `icon.ico` formatına dönüştürebilirsiniz: +```bash +python -c "from PIL import Image; Image.open('assets/icon.png').save('assets/icon.ico', format='ICO')" +``` +Bu komut, `assets` klasörü altında `icon.ico` adında uyumlu bir Windows ikon dosyası oluşturacaktır. + +### Adım 3: PyInstaller ile Paketleyin +Şimdi projeyi tek bir `.exe` olarak paketlemek için şu komutu çalıştırın: +```bash +pyinstaller --noconsole --onefile --icon="assets/icon.ico" --add-data "assets;assets" main.py +``` + +**Parametrelerin Anlamları:** +* `--noconsole`: Uygulama açıldığında arkada siyah bir komut satırı (CMD) penceresinin açılmasını engeller. Tamamen pürüzsüz bir arayüz sunar. +* `--onefile`: Tüm kaynakları, ikonları ve kütüphaneleri (PySide6 vb.) tek bir `.exe` dosyasında birleştirir. +* `--icon="assets/icon.ico"`: EXE dosyasının Windows üzerindeki resmi simgesini ayarlar. +* `--add-data "assets;assets"`: Uygulamanın kullandığı resim, ikon ve diğer varlıkları içeren `assets` klasörünü paket içerisine gömer. + +### Adım 4: Sonuç +İşlem tamamlandığında, proje klasörünüzde iki yeni dizin oluşacaktır: +1. `build/` (Geçici derleme dosyaları) +2. `dist/` (Paketlenmiş nihai uygulamayı barındırır) + +`dist/main.exe` dosyasını bulup adını `sticky_canvas.exe` veya istediğiniz gibi değiştirebilir, doğrudan çalıştırıp kullanmaya başlayabilirsiniz! `build` klasörünü ve `.spec` dosyasını güvenle silebilirsiniz. + +--- + +## 2. "Windows ile Birlikte Başlat" Nasıl Çalışıyor? + +Uygulamanın Ayarlar penceresindeki **"Windows ile birlikte başlat"** seçeneği, Windows işletim sisteminin yerleşik otomatik başlatma mekanizmasını kullanır. + +### Arka Plandaki Çalışma Mekanizması: +1. **Windows Kayıt Defteri (Registry) Entegrasyonu:** + Windows, sistem açıldığında otomatik olarak çalıştırılması gereken programların listesini Registry üzerinde şu adreste tutar: + `HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run` + +2. **Kayıt Ekleme (Aktif Edildiğinde):** + Bu ayar açıldığında, uygulamamız Registry'de bu dizinin altına `"Sticky Canvas"` adında yeni bir anahtar (String Value) ekler. + * **Geliştirici Modunda (Script):** Değer olarak Python yorumlayıcısının yolunu ve `main.py` dosyamızın tam yolunu yazar: `"[PYTHON_YOLU]\python.exe" "[PROJE_YOLU]\main.py"` + * **Paketlenmiş Modda (EXE):** Değer olarak doğrudan derlenmiş `.exe` dosyamızın tam yolunu yazar: `"[EXE_YOLU]\sticky_canvas.exe"` + +3. **Kayıt Silme (Devre Dışı Bırakıldığında):** + Bu ayar kapatıldığında, uygulamamız Registry'deki `"Sticky Canvas"` anahtarını siler ve Windows açılışında otomatik başlama durdurulur. + +4. **Kullanıcı Yetkisi:** + `HKEY_CURRENT_USER` (HKCU) kullanıldığı için bu işlem **Yönetici yetkisi (UAC / Administrator) gerektirmez.** Herhangi bir kullanıcı hesabı altında tamamen güvenli ve sorunsuz şekilde çalışır. diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..bad0f75 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +PySide6>=6.6.0 +Pillow>=10.0.0 diff --git a/src/__init__.py b/src/__init__.py new file mode 100644 index 0000000..0bf814f --- /dev/null +++ b/src/__init__.py @@ -0,0 +1 @@ +# src/__init__.py diff --git a/src/add_button.py b/src/add_button.py new file mode 100644 index 0000000..343ed56 --- /dev/null +++ b/src/add_button.py @@ -0,0 +1,77 @@ +""" +add_button.py — Sağ alt köşede sabit duran "+" butonu +""" + +from PySide6.QtCore import Qt, QPropertyAnimation, QEasingCurve +from PySide6.QtGui import QFont +from PySide6.QtWidgets import QPushButton, QWidget +from typing import Optional + +from .constants import ADD_BUTTON_SIZE + + +class AddButton(QPushButton): + """ + Ekranın sağ alt köşesinde sabit duran, yarı-saydam "+" butonu. + Hover'da belirginleşir. + """ + + def __init__(self, parent: Optional[QWidget] = None) -> None: + super().__init__("+", parent) + self.setFixedSize(ADD_BUTTON_SIZE, ADD_BUTTON_SIZE) + self.setCursor(Qt.PointingHandCursor) + self.setToolTip("Yeni not ekle (sağ tıkla veya buraya tıkla)") + self.setAttribute(Qt.WA_TranslucentBackground) + + font = QFont("Segoe UI", 22, QFont.Light) + self.setFont(font) + + self._apply_style(hovered=False) + + def _apply_style(self, hovered: bool) -> None: + if hovered: + self.setStyleSheet(""" + QPushButton { + background-color: rgba(30, 30, 30, 210); + color: white; + border-radius: 24px; + border: 1.5px solid rgba(255,255,255,0.25); + font-size: 22px; + } + """) + else: + self.setStyleSheet(""" + QPushButton { + background-color: rgba(30, 30, 30, 140); + color: rgba(255,255,255,0.85); + border-radius: 24px; + border: 1.5px solid rgba(255,255,255,0.12); + font-size: 22px; + } + """) + + def enterEvent(self, event) -> None: + self._apply_style(hovered=True) + super().enterEvent(event) + + def leaveEvent(self, event) -> None: + self._apply_style(hovered=False) + super().leaveEvent(event) + + def set_enabled_state(self, enabled: bool) -> None: + """50 not limitine ulaşıldığında butonu devre dışı bırakır.""" + self.setEnabled(enabled) + if enabled: + self._apply_style(hovered=False) + self.setToolTip("Yeni not ekle (sağ tıkla veya buraya tıkla)") + else: + self.setStyleSheet(""" + QPushButton { + background-color: rgba(30, 30, 30, 60); + color: rgba(255,255,255,0.3); + border-radius: 24px; + border: 1.5px solid rgba(255,255,255,0.06); + font-size: 22px; + } + """) + self.setToolTip("Maksimum 50 not limitine ulaşıldı.") diff --git a/src/app.py b/src/app.py new file mode 100644 index 0000000..94c833b --- /dev/null +++ b/src/app.py @@ -0,0 +1,443 @@ +""" +app.py — StickyCanvasApp: tüm bileşenleri bir araya getiren orkestratör +""" + +import logging +import logging.handlers +import os +import sys +import winreg +from typing import Any, Dict, Optional + +from PySide6.QtCore import QPoint +from PySide6.QtGui import QIcon +from PySide6.QtWidgets import QApplication, QMessageBox + +from .canvas_window import CanvasWindow +from .constants import ( + APP_DATA_DIR, + APP_NAME, + DEFAULT_FONT_FAMILY, + DEFAULT_FONT_SIZE, + LOGS_DIR, + NOTE_COLORS, + NOTE_DEFAULT_COLOR, + NOTE_DEFAULT_HEIGHT, + NOTE_DEFAULT_WIDTH, + REGISTRY_APP_KEY, + REGISTRY_RUN_KEY, +) +from .data_manager import DataManager +from .hotkey_manager import HotkeyManager +from .settings_dialog import SettingsDialog +from .tray_manager import TrayManager +from .undo_manager import UndoManager + +logger = logging.getLogger(__name__) + + +def _setup_logging() -> None: + os.makedirs(LOGS_DIR, exist_ok=True) + log_file = os.path.join(LOGS_DIR, "sticky_canvas.log") + root = logging.getLogger() + root.setLevel(logging.DEBUG) + fh = logging.handlers.TimedRotatingFileHandler( + log_file, when="midnight", backupCount=7, encoding="utf-8" + ) + fh.setLevel(logging.DEBUG) + fh.setFormatter(logging.Formatter("%(asctime)s [%(levelname)s] %(name)s: %(message)s")) + root.addHandler(fh) + ch = logging.StreamHandler() + ch.setLevel(logging.INFO) + ch.setFormatter(logging.Formatter("[%(levelname)s] %(name)s: %(message)s")) + root.addHandler(ch) + + +class SingleInstanceGuard: + """Windows Named Mutex ile tek instance kontrolu.""" + + _MUTEX_NAME = r"Global\Noteki_SingleInstance_Mutex" + + def __init__(self) -> None: + self._mutex_handle = None + + def acquire(self) -> bool: + """Mutex'i al. Basariliysa True, zaten calisiyorsa False doner.""" + import ctypes + import ctypes.wintypes + + kernel32 = ctypes.windll.kernel32 + mutex_name = ctypes.c_wchar_p(self._MUTEX_NAME) + self._mutex_handle = kernel32.CreateMutexW(None, False, mutex_name) + if self._mutex_handle == 0 or self._mutex_handle is None: + logger.error("Mutex olusturulamadi.") + return True # olabilecek en kotu: calismaya izin ver + + last_error = kernel32.GetLastError() + if last_error == 183: # ERROR_ALREADY_EXISTS + kernel32.CloseHandle(self._mutex_handle) + self._mutex_handle = None + return False + return True + + def release(self) -> None: + """Mutex'i serbest birak.""" + if self._mutex_handle: + import ctypes + ctypes.windll.kernel32.CloseHandle(self._mutex_handle) + self._mutex_handle = None + + +class StickyCanvasApp: + """Ana uygulama orkestratörü.""" + + def __init__(self) -> None: + _setup_logging() + logger.info("=== %s baslatiliyor ===", APP_NAME) + + self._guard = SingleInstanceGuard() + if not self._guard.acquire(): + app = QApplication.instance() or QApplication(sys.argv) + QMessageBox.information(None, APP_NAME, f"{APP_NAME} zaten calisiyor.") + sys.exit(0) + + # Windows Taskbar Grouping & Icon Fix + if sys.platform == "win32": + import ctypes + try: + myappid = f"antigravity.noteki.stickynotes.1.0" + ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid) + except Exception as e: + logger.warning("SetCurrentProcessExplicitAppUserModelID basarisiz: %s", e) + + self._app = QApplication.instance() or QApplication(sys.argv) + self._app.setApplicationName(APP_NAME) + self._app.setQuitOnLastWindowClosed(False) + + icon_path = self._icon_path() + if icon_path: + self._app.setWindowIcon(QIcon(icon_path)) + + self._data = DataManager() + self._undo = UndoManager() + self._canvas = CanvasWindow() + settings = self._data.get_settings() + + # Propagate custom/saved background colors to the canvas + self._canvas.set_colors_dict(settings.get("note_colors", NOTE_COLORS)) + + # Apply taskbar/tray visibility setting + self._canvas.set_only_show_in_tray(settings.get("only_show_in_tray", True)) + + self._tray = TrayManager(icon_path=self._icon_path()) + self._hotkey = HotkeyManager(hotkey_str=settings.get("hotkey", "Alt+N")) + + self._connect_signals() + self._load_all_notes() + self._check_first_run() + self._canvas.clamp_notes_to_screen() + self._tray.update_note_count(self._canvas.note_count) + logger.info("Uygulama hazir. %d not yuklendi.", self._canvas.note_count) + + # ── İkon ──────────────────────────────────────────────────────── + + def _icon_path(self) -> Optional[str]: + base = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + p = os.path.join(base, "assets", "icon.png") + return p if os.path.exists(p) else None + + # ── Sinyal Bağlantıları ───────────────────────────────────────── + + def _connect_signals(self) -> None: + # Tray + self._tray.toggle_requested.connect(self._on_toggle) + self._tray.new_note_requested.connect(self._on_new_note_from_tray) + self._tray.settings_requested.connect(self._on_settings) + self._tray.quit_requested.connect(self._on_quit) + self._tray.undo_requested.connect(self._on_undo) + self._tray.clear_all_requested.connect(self._on_clear_all) + + # Canvas + self._canvas.new_note_requested.connect(self._on_new_note) + self._canvas.note_deleted.connect(self._on_note_deleted) + self._canvas.note_content_changed.connect( + lambda nid, c: self._data.update_note(nid, content=c) + ) + self._canvas.note_position_changed.connect( + lambda nid, x, y: self._data.update_note(nid, x=x, y=y) + ) + self._canvas.note_size_changed.connect( + lambda nid, w, h: self._data.update_note(nid, width=w, height=h) + ) + self._canvas.note_color_changed.connect( + lambda nid, c: self._data.update_note(nid, color=c) + ) + self._canvas.note_font_size_changed.connect(self._on_font_size_changed) + self._canvas.note_save_requested.connect(self._on_save_requested) + self._canvas.note_new_requested.connect(self._on_new_note_near) + self._canvas.note_pin_toggled.connect( + lambda nid, p: self._data.update_note(nid, pinned=p) + ) + self._canvas.undo_requested.connect(self._on_undo) + self._canvas.note_settings_requested.connect(self._on_settings) + + # Hotkey + self._hotkey.hotkey_triggered.connect(self._on_toggle) + self._hotkey.registration_failed.connect(self._on_hotkey_failed) + + # Undo restore callback + self._undo.set_restore_callback(self._restore_note) + + self._data.save_completed.connect( + lambda: logger.debug("Auto-save tamamlandi.") + ) + + # ── Not Yükleme ───────────────────────────────────────────────── + + def _load_all_notes(self) -> None: + for nd in self._data.get_notes(): + self._canvas.add_note(nd) + + def _reload_all_notes(self) -> None: + """Session değiştiğinde tüm notları yeniden yükle.""" + # Mevcut widget'ları temizle (data_manager zaten güncel) + for nid, _ in self._canvas.iter_notes(): + self._canvas.remove_note(nid) + for nd in self._data.get_notes(): + self._canvas.add_note(nd) + self._tray.update_note_count(self._canvas.note_count) + + # ── İlk Açılış ────────────────────────────────────────────────── + + def _check_first_run(self) -> None: + if self._data.get_notes(): + return + s = self._data.get_settings() + wd = self._data.create_note( + x=80, y=80, width=280, height=210, + color=NOTE_DEFAULT_COLOR, + font_family=s.get("default_font_family", DEFAULT_FONT_FAMILY), + font_size=s.get("default_font_size", DEFAULT_FONT_SIZE), + ) + widget = self._canvas.add_note(wd) + txt = ( + "Noteki'ye Hos Geldin!\n\n" + " Alt+N Notlari goster/gizle\n" + " Sag tikla Yeni not ekle\n" + " Header Surukle / tasima\n" + " Ctrl+Z Geri al\n\n" + "Bu notu silebilirsin (X butonu)" + ) + self._data.update_note(wd["id"], content=txt) + widget._text_edit.blockSignals(True) + widget._text_edit.setPlainText(txt) + widget._text_edit.blockSignals(False) + self._canvas.show_canvas() + self._tray.update_toggle_label(True) + + # ── Toggle ────────────────────────────────────────────────────── + + def _on_toggle(self) -> None: + self._canvas.toggle_visibility() + self._tray.update_toggle_label(self._canvas.is_visible) + + # ── Yeni Not ──────────────────────────────────────────────────── + + def _on_new_note(self, x: int, y: int) -> None: + if not self._canvas.is_visible: + self._canvas.show_canvas() + self._tray.update_toggle_label(True) + s = self._data.get_settings() + nd = self._data.create_note( + x=x, y=y, + width=NOTE_DEFAULT_WIDTH, height=NOTE_DEFAULT_HEIGHT, + color=s.get("default_note_color", NOTE_DEFAULT_COLOR), + font_family=s.get("default_font_family", DEFAULT_FONT_FAMILY), + font_size=s.get("default_font_size", DEFAULT_FONT_SIZE), + ) + widget = self._canvas.add_note(nd) + widget.focus_text() + self._tray.update_note_count(self._canvas.note_count) + logger.info("Yeni not olusturuldu: %s", nd["id"]) + + def _on_new_note_from_tray(self) -> None: + if not self._canvas.is_visible: + self._canvas.show_canvas() + self._tray.update_toggle_label(True) + pos = self._canvas.get_next_cascade_position() + self._on_new_note(pos.x(), pos.y()) + + def _on_new_note_near(self, source_note_id: str) -> None: + """Icon bar'dan '+' butonuna basıldığında yeni not ekle.""" + pos = self._canvas.get_next_cascade_position() + self._on_new_note(pos.x(), pos.y()) + + # ── Not Silme ─────────────────────────────────────────────────── + + def _on_note_deleted(self, note_id: str) -> None: + widget = self._canvas.get_note_widget(note_id) + is_empty = widget.is_empty() if widget else False + removed = self._data.delete_note(note_id) + self._canvas.remove_note(note_id) + if removed and not is_empty: + self._undo.push(removed) + self._tray.update_note_count(self._canvas.note_count) + logger.info("Not silindi: %s (bos=%s)", note_id, is_empty) + + # ── Font Boyutu ────────────────────────────────────────────────── + + def _on_font_size_changed(self, note_id: str, size: int) -> None: + self._data.update_note(note_id, font_size=size) + + # ── Kaydet (OK butonu / focus out) ─────────────────────────────── + + def _on_save_requested(self, note_id: str) -> None: + """Hem focus-out hem OK butonu için.""" + widget = self._canvas.get_note_widget(note_id) + if widget and widget.is_empty(): + # Boş not → sil + self._on_note_deleted(note_id) + return + self._data.force_save() + logger.debug("Force save: %s", note_id) + + # ── Undo ──────────────────────────────────────────────────────── + + def _on_undo(self) -> None: + if not self._undo.can_undo(): + self._tray.show_message(APP_NAME, "Geri alinacak islem yok.") + return + self._undo.pop() + + def _restore_note(self, nd: Dict[str, Any]) -> None: + self._data.restore_note(nd) + self._canvas.add_note(nd) + self._tray.update_note_count(self._canvas.note_count) + if not self._canvas.is_visible: + self._canvas.show_canvas() + self._tray.update_toggle_label(True) + + # ── Tümünü Sil ────────────────────────────────────────────────── + + def _on_clear_all(self) -> None: + removed = self._data.clear_all_notes() + for n in removed: + self._canvas.remove_note(n["id"]) + for n in removed[-10:]: + self._undo.push(n) + self._tray.update_note_count(0) + + # ── Ayarlar ───────────────────────────────────────────────────── + + def _on_settings(self) -> None: + dlg = SettingsDialog( + current_settings=self._data.get_settings(), + sessions=self._data.list_sessions(), + current_session=self._data.current_session_name(), + ) + dlg.settings_saved.connect(self._apply_settings) + dlg.session_switch_requested.connect(self._on_session_switch) + dlg.session_create_requested.connect(self._on_session_create) + dlg.session_copy_requested.connect(self._on_session_copy) + dlg.session_delete_requested.connect(self._on_session_delete) + dlg.exec() + + def _apply_settings(self, new: Dict[str, Any]) -> None: + old = self._data.get_settings() + old_font_family = old.get("default_font_family", DEFAULT_FONT_FAMILY) + old_font_size = old.get("default_font_size", DEFAULT_FONT_SIZE) + + new_font_family = new.get("default_font_family", old_font_family) + new_font_size = new.get("default_font_size", old_font_size) + + font_family_changed = (new_font_family != old_font_family) + + self._data.save_settings(new) + # Kısayol + if new.get("hotkey") != self._hotkey._hotkey_str: + self._hotkey.change_hotkey(new["hotkey"]) + # Otomatik başlatma + self._apply_auto_start(new.get("auto_start", False)) + # Görev çubuğu/tepsi gösterimi + self._canvas.set_only_show_in_tray(new.get("only_show_in_tray", True)) + + # Renk paleti + if "note_colors" in new: + self._canvas.set_colors_dict(new["note_colors"]) + + if font_family_changed: + for nid, w in self._canvas.iter_notes(): + w._apply_font(new_font_family, w._font_size) + self._data.update_note(nid, font_family=new_font_family) + + logger.info("Ayarlar uygulandi.") + + def _apply_auto_start(self, enabled: bool) -> None: + try: + if getattr(sys, 'frozen', False): + val = f'"{sys.executable}"' + else: + exe = sys.executable + main = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "main.py")) + val = f'"{exe}" "{main}"' + + with winreg.OpenKey( + winreg.HKEY_CURRENT_USER, REGISTRY_RUN_KEY, 0, winreg.KEY_SET_VALUE + ) as key: + if enabled: + winreg.SetValueEx(key, REGISTRY_APP_KEY, 0, winreg.REG_SZ, val) + else: + try: + winreg.DeleteValue(key, REGISTRY_APP_KEY) + except FileNotFoundError: + pass + except Exception as exc: + logger.error("Registry islemi basarisiz: %s", exc) + + # ── Session Yönetimi ───────────────────────────────────────────── + + def _on_session_switch(self, name: str) -> None: + ok, notes = self._data.switch_session(name) + if ok: + self._reload_all_notes() + self._tray.show_message(APP_NAME, f"Oturum: {name}") + else: + QMessageBox.warning(None, APP_NAME, f"Oturum yuklenemedi: {name}") + + def _on_session_create(self, name: str) -> None: + ok, result = self._data.create_session(name) + if ok: + self._on_session_switch(result) + self._tray.show_message(APP_NAME, f"Yeni oturum olusturuldu: {result}") + else: + QMessageBox.warning(None, APP_NAME, result) + + def _on_session_copy(self, source_name: str, target_name: str) -> None: + ok, result = self._data.copy_session(source_name, target_name) + if ok: + self._on_session_switch(result) + self._tray.show_message(APP_NAME, f"Oturum kopyalandi: {result}") + else: + QMessageBox.warning(None, APP_NAME, result) + + def _on_session_delete(self, name: str) -> None: + if not self._data.delete_session(name): + QMessageBox.warning(None, APP_NAME, "Aktif oturum silinemez.") + + # ── Kısayol Hatası ─────────────────────────────────────────────── + + def _on_hotkey_failed(self, msg: str) -> None: + self._tray.show_message(APP_NAME, f"Kisayol hatasi: {msg}") + + # ── Çıkış ─────────────────────────────────────────────────────── + + def _on_quit(self) -> None: + logger.info("Uygulama kapatiliyor...") + self._data.force_save() + self._hotkey.cleanup() + self._undo.clear() + self._guard.release() + self._app.quit() + + def run(self) -> int: + return self._app.exec() diff --git a/src/canvas_window.py b/src/canvas_window.py new file mode 100644 index 0000000..0720c9d --- /dev/null +++ b/src/canvas_window.py @@ -0,0 +1,417 @@ +""" +canvas_window.py — Tam ekran transparan canvas penceresi +- WindowStaysOnTopHint KALDIRILDI (notlar arkaya geçebilir) +- App focus kaybettiğinde auto-hide +- "+" butonu sadece not yokken görünür +- Pinned not → top-level window yönetimi +""" + +import ctypes +import ctypes.wintypes +import logging +from typing import Any, Dict, Optional + +from PySide6.QtCore import QPoint, Qt, Signal, QTimer +from PySide6.QtGui import QColor, QPainter, QShortcut, QKeySequence +from PySide6.QtWidgets import QApplication, QMenu, QWidget + +from .add_button import AddButton +from .constants import ( + ADD_BUTTON_MARGIN, + ADD_BUTTON_SIZE, + NOTE_CASCADE_OFFSET, + NOTE_COLORS, + NOTE_DEFAULT_HEIGHT, + NOTE_DEFAULT_WIDTH, + NOTE_MAX_COUNT, +) +from .note_widget import NoteWidget + +logger = logging.getLogger(__name__) + +GWL_EXSTYLE = -20 +WS_EX_TRANSPARENT = 0x00000020 +WS_EX_LAYERED = 0x00080000 + + +def _set_click_through(hwnd: int, enabled: bool) -> None: + try: + style = ctypes.windll.user32.GetWindowLongW(hwnd, GWL_EXSTYLE) + if enabled: + style |= WS_EX_TRANSPARENT | WS_EX_LAYERED + else: + style &= ~WS_EX_TRANSPARENT + ctypes.windll.user32.SetWindowLongW(hwnd, GWL_EXSTYLE, style) + except Exception as exc: + logger.warning("Click-through ayarlanamadi: %s", exc) + + +class CanvasWindow(QWidget): + """Tam ekran transparan canvas.""" + + # Sinyaller + new_note_requested = Signal(int, int) + note_deleted = Signal(str) + note_content_changed = Signal(str, str) + note_position_changed = Signal(str, int, int) + note_size_changed = Signal(str, int, int) + note_color_changed = Signal(str, str) + note_font_size_changed = Signal(str, int) + note_save_requested = Signal(str) + note_new_requested = Signal(str) + note_pin_toggled = Signal(str, bool) + undo_requested = Signal() + note_settings_requested = Signal() # Settings gear request signal + + def __init__(self, parent=None) -> None: + super().__init__(parent) + self._notes: Dict[str, NoteWidget] = {} + self._pinned_notes: Dict[str, NoteWidget] = {} # pin edilmiş notlar (top-level) + self._visible: bool = False + self._last_cascade = QPoint(80, 80) + self._only_show_in_tray = True + self._colors_dict = NOTE_COLORS + + self._setup_window() + self._setup_add_button() + self._setup_app_state_watcher() + + # Canvas-level Shortcut for Ctrl+Z to undo deleted notes + self._undo_shortcut = QShortcut(QKeySequence("Ctrl+Z"), self) + self._undo_shortcut.activated.connect(self.undo_requested.emit) + + # ── Pencere Kurulum ───────────────────────────────────────────── + + def _setup_window(self) -> None: + # WindowStaysOnTopHint KALDIRILD — arkaya geçebilsin + flags = Qt.FramelessWindowHint | Qt.Tool + self.setWindowFlags(flags) + self.setAttribute(Qt.WA_TranslucentBackground, True) + self.setAttribute(Qt.WA_NoSystemBackground, True) + screen = QApplication.primaryScreen().geometry() + self.setGeometry(screen) + self.hide() + + def _setup_add_button(self) -> None: + self._add_btn = AddButton(self) + self._reposition_add_button() + self._add_btn.clicked.connect(self._on_add_clicked) + + def _reposition_add_button(self) -> None: + x = self.width() - ADD_BUTTON_SIZE - ADD_BUTTON_MARGIN + y = self.height() - ADD_BUTTON_SIZE - ADD_BUTTON_MARGIN + self._add_btn.move(x, y) + + def _setup_app_state_watcher(self) -> None: + """Uygulama focus kaybettiğinde canvas'ı gizle.""" + QApplication.instance().applicationStateChanged.connect( + self._on_app_state_changed + ) + + def _on_app_state_changed(self, state) -> None: + from PySide6.QtCore import Qt as _Qt + if state == _Qt.ApplicationInactive and self._visible: + # Kısa gecikme — kendi dialog'larımızın açılmasını engelleme + QTimer.singleShot(100, self._check_still_inactive) + + def _check_still_inactive(self) -> None: + if QApplication.applicationState() != Qt.ApplicationActive and self._visible: + self.hide_canvas() + + # ── Toggle ────────────────────────────────────────────────────── + + def toggle_visibility(self) -> None: + if self._visible: + self.hide_canvas() + else: + self.show_canvas() + + def show_canvas(self) -> None: + if self._visible: + return + self._visible = True + self.show() + self.raise_() + self.activateWindow() + _set_click_through(int(self.winId()), False) + self._add_btn.raise_() + logger.debug("Canvas gosterildi.") + + def hide_canvas(self) -> None: + if not self._visible: + return + self._visible = False + self.hide() + logger.debug("Canvas gizlendi.") + + @property + def is_visible(self) -> bool: + return self._visible + + # ── Çizim ─────────────────────────────────────────────────────── + + def paintEvent(self, event) -> None: + painter = QPainter(self) + painter.setCompositionMode(QPainter.CompositionMode_Clear) + painter.fillRect(self.rect(), Qt.transparent) + painter.setCompositionMode(QPainter.CompositionMode_SourceOver) + painter.end() + + # ── Fare Olayları ──────────────────────────────────────────────── + + def mousePressEvent(self, event) -> None: + if event.button() == Qt.LeftButton: + self.hide_canvas() + elif event.button() == Qt.RightButton: + self._show_ctx(event.globalPosition().toPoint()) + event.accept() + + def keyPressEvent(self, event) -> None: + if event.key() == Qt.Key_Z and event.modifiers() & Qt.ControlModifier: + self.undo_requested.emit() + elif event.key() == Qt.Key_Escape: + self.hide_canvas() + else: + super().keyPressEvent(event) + + # ── Context Menü (boş alan) ────────────────────────────────────── + + def _show_ctx(self, global_pos: QPoint) -> None: + menu = QMenu(self) + menu.setStyleSheet(self._menu_style()) + add_a = menu.addAction("✚ Yeni Not Ekle") + menu.addSeparator() + show_all_a = menu.addAction("👁 Tum Notlari One Getir") + undo_a = menu.addAction("↩ Geri Al (Ctrl+Z)") + show_all_a.setEnabled(len(self._notes) > 0) + + action = menu.exec(global_pos) + if action == add_a: + local = self.mapFromGlobal(global_pos) + self.new_note_requested.emit(local.x(), local.y()) + elif action == show_all_a: + for w in self._notes.values(): w.raise_() + elif action == undo_a: + self.undo_requested.emit() + + # ── Not Ekleme / Silme ─────────────────────────────────────────── + + def add_note(self, note_data: Dict[str, Any]) -> NoteWidget: + widget = NoteWidget(note_data, colors_dict=self._colors_dict, parent=self) + nid = widget.note_id + + widget.delete_requested.connect(lambda i: self.note_deleted.emit(i)) + widget.content_changed.connect(self.note_content_changed) + widget.position_changed.connect(self.note_position_changed) + widget.size_changed.connect(self.note_size_changed) + widget.color_changed.connect(self.note_color_changed) + widget.font_size_changed.connect(self.note_font_size_changed) + widget.save_requested.connect(self.note_save_requested) + widget.new_note_requested.connect(self.note_new_requested) + widget.pin_toggled.connect(self._on_pin_toggled) + widget.raise_requested.connect(self._raise_note) + widget.focus_gained.connect(self._on_note_focus) + widget.settings_requested.connect(self.note_settings_requested.emit) + widget.tab_requested.connect(self._on_tab_navigate) + + self._notes[nid] = widget + widget.show() + widget.raise_() + self._add_btn.raise_() + self._update_add_btn() + # Eğer not başlangıçta pinned ise, onu top-level yapalım! + if note_data.get("pinned", False): + self._on_pin_toggled(nid, True) + return widget + + def set_colors_dict(self, colors: Dict[str, str]) -> None: + self._colors_dict = colors + for nid, w in self.iter_notes(): + w.set_colors_dict(colors) + + + def remove_note(self, note_id: str) -> None: + # Hem normal hem pinned dict'ten kontrol et + widget = self._notes.pop(note_id, None) or self._pinned_notes.pop(note_id, None) + if widget: + widget.hide() + widget.deleteLater() + self._update_add_btn() + + # ── Pin (always-on-top per note) ───────────────────────────────── + + def _on_pin_toggled(self, note_id: str, pinned: bool) -> None: + widget = self._notes.get(note_id) or self._pinned_notes.get(note_id) + if not widget: + return + + if pinned: + # Canvas child → top-level WindowStaysOnTopHint + global_pos = widget.mapToGlobal(QPoint(0, 0)) + self._notes.pop(note_id) + widget.setParent(None) + + pflags = Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint + if getattr(self, "_only_show_in_tray", True): + pflags |= Qt.Tool + else: + pflags |= Qt.Window + + widget.setWindowFlags(pflags) + widget.setAttribute(Qt.WA_StyledBackground, True) + widget.move(global_pos) + widget.show() + widget.raise_() + self._pinned_notes[note_id] = widget + logger.debug("Not pinlendi (top-level): %s", note_id) + else: + # Top-level → canvas child + if note_id in self._pinned_notes: + self._pinned_notes.pop(note_id) + global_pos = widget.pos() # zaten global (top-level iken) + widget.setParent(self) + widget.setWindowFlags(Qt.Widget) + widget.setAttribute(Qt.WA_StyledBackground, True) + local_pos = self.mapFromGlobal(global_pos) + widget.move(local_pos) + if self._visible: + widget.show() + self._notes[note_id] = widget + self._add_btn.raise_() + logger.debug("Not unpin edildi (canvas child): %s", note_id) + + self.note_pin_toggled.emit(note_id, pinned) + + # ── Kaskad Pozisyon ───────────────────────────────────────────── + + def get_next_cascade_position(self) -> QPoint: + if not self._notes and not self._pinned_notes: + self._last_cascade = QPoint(80, 80) + return self._last_cascade + pos = QPoint( + self._last_cascade.x() + NOTE_CASCADE_OFFSET, + self._last_cascade.y() + NOTE_CASCADE_OFFSET, + ) + screen = QApplication.primaryScreen().geometry() + if pos.x() + NOTE_DEFAULT_WIDTH > screen.width(): pos.setX(80) + if pos.y() + NOTE_DEFAULT_HEIGHT > screen.height(): pos.setY(80) + self._last_cascade = pos + return pos + + def clamp_notes_to_screen(self) -> None: + screen = QApplication.primaryScreen().geometry() + cx, cy = 20, 20 + for nid, w in list(self._notes.items()) + list(self._pinned_notes.items()): + x, y, ww, hh = w.x(), w.y(), w.width(), w.height() + if x < 0 or x + ww > screen.width() or y < 0 or y + hh > screen.height(): + w.move(cx, cy) + self.note_position_changed.emit(nid, cx, cy) + cx += NOTE_CASCADE_OFFSET; cy += NOTE_CASCADE_OFFSET + + # ── Slot'lar ──────────────────────────────────────────────────── + + def _on_add_clicked(self) -> None: + pos = self.get_next_cascade_position() + self.new_note_requested.emit(pos.x(), pos.y()) + + def _raise_note(self, note_id: str) -> None: + w = self._notes.get(note_id) or self._pinned_notes.get(note_id) + if w: + w.raise_() + if note_id in self._notes: + self._add_btn.raise_() + + def _on_note_focus(self, note_id: str) -> None: + for nid, w in {**self._notes, **self._pinned_notes}.items(): + w.set_active(nid == note_id) + + def _on_tab_navigate(self, note_id: str, shift: bool) -> None: + """Tab/Shift+Tab ile notlar arasi gezinme.""" + # Butun notlari sirali liste haline getir + all_notes = list(self._notes.items()) + list(self._pinned_notes.items()) + if len(all_notes) < 2: + return + # Su anki notun indeksini bul + current_idx = None + for i, (nid, _) in enumerate(all_notes): + if nid == note_id: + current_idx = i + break + if current_idx is None: + return + # Hedef indeks + if shift: + target_idx = (current_idx - 1) % len(all_notes) + else: + target_idx = (current_idx + 1) % len(all_notes) + target_id, target_widget = all_notes[target_idx] + target_widget.focus_text() + + def _update_add_btn(self) -> None: + total = len(self._notes) + len(self._pinned_notes) + # + butonu sadece hiç not yokken görünür + if total == 0: + self._add_btn.setVisible(True) + self._add_btn.set_enabled_state(True) + elif total >= NOTE_MAX_COUNT: + self._add_btn.setVisible(True) + self._add_btn.set_enabled_state(False) + else: + self._add_btn.setVisible(False) + + # ── Public API ─────────────────────────────────────────────────── + + @property + def note_count(self) -> int: + return len(self._notes) + len(self._pinned_notes) + + def get_note_widget(self, note_id: str) -> Optional[NoteWidget]: + return self._notes.get(note_id) or self._pinned_notes.get(note_id) + + def iter_notes(self): + return list({**self._notes, **self._pinned_notes}.items()) + + def focus_note(self, note_id: str) -> None: + w = self.get_note_widget(note_id) + if w: w.focus_text() + + def set_only_show_in_tray(self, enabled: bool) -> None: + """Sadece trayda göster veya görev çubuğunda göster ayarını dinamik uygular.""" + self._only_show_in_tray = enabled + flags = Qt.FramelessWindowHint + if enabled: + flags |= Qt.Tool + else: + flags |= Qt.Window + + self.setWindowFlags(flags) + if self._visible: + self.show() + + # Tüm pinned notların pencerelerini de güncelle + for nid, w in list(self._pinned_notes.items()): + pos = w.pos() + w.setParent(None) + pflags = Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint + if enabled: + pflags |= Qt.Tool + else: + pflags |= Qt.Window + w.setWindowFlags(pflags) + w.setAttribute(Qt.WA_StyledBackground, True) + w.move(pos) + w.show() + w.raise_() + + def _menu_style(self) -> str: + return """ + QMenu { + background:#1E1E2E; color:#CDD6F4; + border:1px solid #45475A; border-radius:10px; padding:6px; + font-family:'Segoe UI'; font-size:13px; + } + QMenu::item { padding:7px 22px; border-radius:6px; } + QMenu::item:selected { background:#313244; } + QMenu::item:disabled { color:#585B70; } + QMenu::separator { height:1px; background:#45475A; margin:4px 0; } + """ diff --git a/src/constants.py b/src/constants.py new file mode 100644 index 0000000..ba8a256 --- /dev/null +++ b/src/constants.py @@ -0,0 +1,154 @@ +""" +constants.py — Sticky Canvas uygulama sabitleri +""" + +import os + +# ─── Uygulama Bilgisi ─────────────────────────────────────────────── +APP_NAME = "Noteki" +APP_VERSION = "1.0" +LOCK_FILE_NAME = "noteki.lock" + +# ─── Dosya Yolları ────────────────────────────────────────────────── +APP_DATA_DIR = os.path.join(os.environ.get("APPDATA", os.path.expanduser("~")), "Noteki") +SESSION_FILE = os.path.join(APP_DATA_DIR, "session.json") +SESSION_BACKUP_FILE = os.path.join(APP_DATA_DIR, "session.backup.json") +SETTINGS_FILE = os.path.join(APP_DATA_DIR, "settings.json") +LOGS_DIR = os.path.join(APP_DATA_DIR, "logs") + +# ─── Not Boyutları ────────────────────────────────────────────────── +NOTE_DEFAULT_WIDTH = 220 +NOTE_DEFAULT_HEIGHT = 180 +NOTE_MIN_WIDTH = 150 +NOTE_MIN_HEIGHT = 100 +NOTE_MAX_WIDTH = 600 +NOTE_MAX_HEIGHT = 500 +NOTE_CASCADE_OFFSET = 20 # Yeni not konumu için kaskad kayma px +NOTE_MAX_COUNT = 50 # Maksimum not sayısı +NOTE_CHAR_LIMIT = 2000 # Maksimum karakter sayısı + +# ─── Renk Paleti ──────────────────────────────────────────────────── +NOTE_COLORS = { + "Sarı": "#FFF9C4", + "Yeşil": "#C8E6C9", + "Mavi": "#BBDEFB", + "Pembe": "#F8BBD0", + "Mor": "#E1BEE7", + "Turuncu": "#FFE0B2", +} +NOTE_COLOR_KEYS = list(NOTE_COLORS.keys()) +NOTE_DEFAULT_COLOR = "#FFF9C4" # Sarı + +# Her renk için metin ve accent rengi dinamik olarak hesaplanir: +# get_contrast_text_color() → okunabilir metin rengi +# get_dynamic_accent_color() → aktif not vurgu rengi + +# ─── Varsayılan Ayarlar ───────────────────────────────────────────── +DEFAULT_FONT_FAMILY = "Segoe UI" +DEFAULT_FONT_SIZE = 14 +DEFAULT_HOTKEY = "Alt+N" +DEFAULT_AUTO_START = False + +# ─── Undo ─────────────────────────────────────────────────────────── +UNDO_CAPACITY = 10 + +# ─── Auto-Save ────────────────────────────────────────────────────── +AUTOSAVE_DELAY_MS = 500 # Debounce süresi (ms) + +# ─── Sürükleme ────────────────────────────────────────────────────── +DRAG_OPACITY = 0.85 # Sürükleme sırasında opaklık + +# ─── "+" Butonu ───────────────────────────────────────────────────── +ADD_BUTTON_SIZE = 48 +ADD_BUTTON_MARGIN = 24 # Sağ alt köşeden uzaklık + +# ─── Windows Registry ─────────────────────────────────────────────── +REGISTRY_RUN_KEY = r"Software\Microsoft\Windows\CurrentVersion\Run" +REGISTRY_APP_KEY = APP_NAME + +def get_contrast_text_color(hex_str: str) -> str: + """Arka plan rengine (hex_str) göre en yüksek kontrastlı metin rengini (#1A1A1A veya #FFFFFF) döner.""" + try: + hex_str = hex_str.lstrip('#') + r, g, b = int(hex_str[0:2], 16), int(hex_str[2:4], 16), int(hex_str[4:6], 16) + # Parlaklık (Luminance) formülü + l = 0.299 * r + 0.587 * g + 0.114 * b + return "#1A1A1A" if l > 130 else "#FFFFFF" + except Exception: + return "#1A1A1A" + +def get_dynamic_accent_color(hex_str: str) -> str: + """ + Arka plan rengine (hex_str) göre dinamik olarak bir accent (border/seçim) rengi hesaplar. + Açık renkler için rengi koyulaştırır/doygunlaştırır, koyu renkler için açar. + """ + try: + hex_str = hex_str.lstrip('#') + r, g, b = int(hex_str[0:2], 16), int(hex_str[2:4], 16), int(hex_str[4:6], 16) + + # RGB to HSV conversion + r_f, g_f, b_f = r / 255.0, g / 255.0, b / 255.0 + cmax = max(r_f, g_f, b_f) + cmin = min(r_f, g_f, b_f) + diff = cmax - cmin + + # Hue + if cmax == cmin: + h = 0 + elif cmax == r_f: + h = (60 * ((g_f - b_f) / diff) + 360) % 360 + elif cmax == g_f: + h = (60 * ((b_f - r_f) / diff) + 120) % 360 + else: + h = (60 * ((r_f - g_f) / diff) + 240) % 360 + + # Saturation + s = 0 if cmax == 0 else (diff / cmax) + + # Value + v = cmax + + # Parlaklık + l = 0.299 * r + 0.587 * g + 0.114 * b + + if l > 130: + # Açık renk: Rengi koyulaştır ve doygunluğu artır + v = max(0.0, v - 0.25) + s = min(1.0, s + 0.3) + else: + # Koyu renk: Rengi aç ve doygunluğu azalt + v = min(1.0, v + 0.25) + s = max(0.0, s - 0.2) + + # HSV to RGB conversion + c = v * s + x = c * (1 - abs((h / 60) % 2 - 1)) + m = v - c + + if 0 <= h < 60: + r_f, g_f, b_f = c, x, 0 + elif 60 <= h < 120: + r_f, g_f, b_f = x, c, 0 + elif 120 <= h < 180: + r_f, g_f, b_f = 0, c, x + elif 180 <= h < 240: + r_f, g_f, b_f = 0, x, c + elif 240 <= h < 300: + r_f, g_f, b_f = x, 0, c + else: + r_f, g_f, b_f = c, 0, x + + r = int((r_f + m) * 255) + g = int((g_f + m) * 255) + b = int((b_f + m) * 255) + + # Sınır kontrolü + r = max(0, min(255, r)) + g = max(0, min(255, g)) + b = max(0, min(255, b)) + + return f"#{r:02X}{g:02X}{b:02X}" + except Exception: + # Hata durumunda güvenli bir gri ton + return "#7F7F7F" + diff --git a/src/data_manager.py b/src/data_manager.py new file mode 100644 index 0000000..36bff39 --- /dev/null +++ b/src/data_manager.py @@ -0,0 +1,361 @@ +""" +data_manager.py — JSON tabanlı veri yönetimi (session + settings) +""" + +import json +import logging +import os +import re +import shutil +import uuid +from datetime import datetime, timezone +from typing import Any, Dict, List, Optional, Tuple + +from PySide6.QtCore import QObject, QTimer, Signal + +from .constants import ( + APP_DATA_DIR, + APP_VERSION, + AUTOSAVE_DELAY_MS, + DEFAULT_AUTO_START, + DEFAULT_FONT_FAMILY, + DEFAULT_FONT_SIZE, + DEFAULT_HOTKEY, + LOGS_DIR, + NOTE_COLORS, + NOTE_DEFAULT_COLOR, + SESSION_BACKUP_FILE, + SESSION_FILE, + SETTINGS_FILE, +) + +DEFAULT_SESSION_NAME = "session" + +logger = logging.getLogger(__name__) + + +class DataManager(QObject): + """ + Tüm JSON okuma/yazma/yedekleme işlemlerini yönetir. + Asenkron auto-save için debounce timer kullanır. + """ + + save_completed = Signal() # Kayıt tamamlandığında yayınlanır + + def __init__(self, parent: Optional[QObject] = None) -> None: + super().__init__(parent) + self._pending_save = False + self._notes: List[Dict[str, Any]] = [] + self._settings: Dict[str, Any] = {} + self._current_session = DEFAULT_SESSION_NAME + self._current_session_file = SESSION_FILE + self._current_backup_file = SESSION_BACKUP_FILE + + # Auto-save debounce timer + self._save_timer = QTimer(self) + self._save_timer.setSingleShot(True) + self._save_timer.setInterval(AUTOSAVE_DELAY_MS) + self._save_timer.timeout.connect(self._flush_save) + + self._ensure_dirs() + self._load_settings() + self._load_session() + + # ─── Dizin Oluşturma ──────────────────────────────────────────── + + def _ensure_dirs(self) -> None: + """Gerekli dizinleri oluşturur.""" + os.makedirs(APP_DATA_DIR, exist_ok=True) + os.makedirs(LOGS_DIR, exist_ok=True) + logger.debug("Uygulama dizinleri hazır: %s", APP_DATA_DIR) + + # ─── Ayarlar ──────────────────────────────────────────────────── + + def _default_settings(self) -> Dict[str, Any]: + return { + "version": APP_VERSION, + "default_font_family": DEFAULT_FONT_FAMILY, + "default_font_size": DEFAULT_FONT_SIZE, + "default_note_color": NOTE_DEFAULT_COLOR, + "hotkey": DEFAULT_HOTKEY, + "auto_start": DEFAULT_AUTO_START, + "current_session": DEFAULT_SESSION_NAME, + "only_show_in_tray": True, + "note_colors": NOTE_COLORS, + } + + def _load_settings(self) -> None: + """settings.json dosyasını yükler; yoksa varsayılanları kullanır.""" + if not os.path.exists(SETTINGS_FILE): + self._settings = self._default_settings() + self._write_json(SETTINGS_FILE, self._settings) + logger.info("Varsayılan ayarlar oluşturuldu.") + return + + data = self._read_json(SETTINGS_FILE) + if data is None: + self._settings = self._default_settings() + logger.warning("settings.json okunamadı, varsayılanlar kullanılıyor.") + else: + # Eksik anahtarları varsayılanlarla doldur + defaults = self._default_settings() + for key, val in defaults.items(): + data.setdefault(key, val) + self._settings = data + + def get_settings(self) -> Dict[str, Any]: + return dict(self._settings) + + def save_settings(self, settings: Dict[str, Any]) -> bool: + """Ayarları kaydeder.""" + self._settings.update(settings) + self._settings["version"] = APP_VERSION + ok = self._write_json(SETTINGS_FILE, self._settings) + if ok: + logger.info("Ayarlar kaydedildi.") + return ok + + # ─── Oturum / Notlar ──────────────────────────────────────────── + + def _default_session(self) -> Dict[str, Any]: + return {"version": APP_VERSION, "notes": []} + + def _load_session(self, session_file: Optional[str] = None, + backup_file: Optional[str] = None) -> None: + """Belirtilen session dosyasini yukler; bozuksa backup'tan kurtar.""" + sf = session_file or self._current_session_file + bf = backup_file or self._current_backup_file + data = self._read_json(sf) + + if data is not None and isinstance(data.get("notes"), list): + self._notes = data["notes"] + logger.info("%d not yuklendi (%s).", len(self._notes), sf) + return + + logger.warning("%s okunamadi, yedekten kurtariliyor...", sf) + backup = self._read_json(bf) + if backup is not None and isinstance(backup.get("notes"), list): + self._notes = backup["notes"] + logger.info("Yedekten %d not kurtarildi.", len(self._notes)) + self._write_json(sf, {"version": APP_VERSION, "notes": self._notes}) + else: + logger.warning("Yedek de okunamadi. Bos oturumla baslaniyor.") + self._notes = [] + + def get_notes(self) -> List[Dict[str, Any]]: + """Tüm notların kopyasını döndürür.""" + return list(self._notes) + + def create_note(self, x: int, y: int, width: int, height: int, + color: str, font_family: str, font_size: int) -> Dict[str, Any]: + """Yeni bir not verisi olusturur ve listeye ekler.""" + now = datetime.now(timezone.utc).isoformat() + note = { + "id": str(uuid.uuid4()), + "content": "", + "x": x, "y": y, + "width": width, "height": height, + "color": color, + "font_family": font_family, + "font_size": font_size, + "pinned": False, + "z_index": self._next_z_index(), + "created_at": now, + "updated_at": now, + } + self._notes.append(note) + self.schedule_save() + return note + + def update_note(self, note_id: str, **kwargs) -> bool: + """Belirtilen alanları günceller.""" + for note in self._notes: + if note["id"] == note_id: + now = datetime.now(timezone.utc).isoformat() + note.update(kwargs) + note["updated_at"] = now + self.schedule_save() + return True + return False + + def delete_note(self, note_id: str) -> Optional[Dict[str, Any]]: + """Notu siler ve silinen not verisini döndürür (undo için).""" + for i, note in enumerate(self._notes): + if note["id"] == note_id: + removed = self._notes.pop(i) + self.schedule_save() + logger.debug("Not silindi: %s", note_id) + return removed + return None + + def restore_note(self, note_data: Dict[str, Any]) -> None: + """Silinen bir notu geri yükler.""" + note_data["z_index"] = self._next_z_index() + self._notes.append(note_data) + self.schedule_save() + logger.debug("Not geri yüklendi: %s", note_data["id"]) + + def clear_all_notes(self) -> List[Dict[str, Any]]: + """Tüm notları siler ve silinen verileri döndürür.""" + removed = list(self._notes) + self._notes.clear() + self.schedule_save() + return removed + + def _next_z_index(self) -> int: + if not self._notes: + return 1 + return max(n.get("z_index", 0) for n in self._notes) + 1 + + # ─── Auto-Save (Debounce) ──────────────────────────────────────── + + def schedule_save(self) -> None: + """Debounce timer'ı başlatır / sıfırlar.""" + self._save_timer.start() + + def _flush_save(self) -> None: + """Asil kayit islemini gerceklestirir.""" + payload = {"version": APP_VERSION, "notes": self._notes} + sf = self._current_session_file + bf = self._current_backup_file + if os.path.exists(sf): + try: + shutil.copy2(sf, bf) + except OSError as exc: + logger.warning("Yedek olusturulamadi: %s", exc) + if self._write_json(sf, payload): + logger.debug("Session kaydedildi (%d not) → %s", len(self._notes), sf) + self.save_completed.emit() + + def force_save(self) -> None: + """Timer'i beklemeden aninda kaydeder.""" + self._save_timer.stop() + self._flush_save() + + # ─── Session Yonetimi ──────────────────────────────────────────── + + def list_sessions(self) -> List[str]: + """APP_DATA_DIR icerisindeki session dosyalarini listeler.""" + sessions = [] + for fname in os.listdir(APP_DATA_DIR): + if (fname.endswith(".json") + and "backup" not in fname + and fname != os.path.basename(SETTINGS_FILE)): + sessions.append(fname[:-5]) # .json uzantisini kaldir + return sorted(sessions) + + def current_session_name(self) -> str: + return self._current_session + + def create_session(self, name: str) -> Tuple[bool, str]: + """ + Yeni bos bir session olusturur. + Returns: (success, error_message) + """ + safe = re.sub(r"[^\w\-]", "_", name.strip()) + if not safe: + return False, "Gecersiz oturum adi." + sf = os.path.join(APP_DATA_DIR, f"{safe}.json") + if os.path.exists(sf): + return False, f"'{safe}' adli oturum zaten var." + self._write_json(sf, {"version": APP_VERSION, "notes": []}) + logger.info("Yeni session olusturuldu: %s", sf) + return True, safe + + def switch_session(self, session_name: str) -> Tuple[bool, List[Dict]]: + """ + Mevcut sessionu kaydedip yeni sessionu yukler. + Returns: (success, notes_list) + """ + sf = os.path.join(APP_DATA_DIR, f"{session_name}.json") + bf = os.path.join(APP_DATA_DIR, f"{session_name}.backup.json") + if not os.path.exists(sf): + return False, [] + # Mevcut sessionu kaydet + self.force_save() + # Yeni session + self._current_session = session_name + self._current_session_file = sf + self._current_backup_file = bf + self._load_session(sf, bf) + # Settings'e kaydet + self._settings["current_session"] = session_name + self.save_settings(self._settings) + logger.info("Session degistirildi: %s (%d not)", session_name, len(self._notes)) + return True, list(self._notes) + + def delete_session(self, session_name: str) -> bool: + """Bir session dosyasini siler (aktif session silinemez).""" + if session_name == self._current_session: + return False + sf = os.path.join(APP_DATA_DIR, f"{session_name}.json") + bf = os.path.join(APP_DATA_DIR, f"{session_name}.backup.json") + try: + if os.path.exists(sf): os.remove(sf) + if os.path.exists(bf): os.remove(bf) + logger.info("Session silindi: %s", session_name) + return True + except OSError as exc: + logger.error("Session silinemedi: %s", exc) + return False + + def copy_session(self, source_name: str, target_name: str) -> Tuple[bool, str]: + """ + Mevcut bir session dosyasini yeni bir adla kopyalar/klonlar. + Returns: (success, error_message/new_session_name) + """ + safe_source = re.sub(r"[^\w\-]", "_", source_name.strip()) + safe_target = re.sub(r"[^\w\-]", "_", target_name.strip()) + if not safe_target: + return False, "Gecersiz yeni oturum adi." + + source_file = os.path.join(APP_DATA_DIR, f"{safe_source}.json") + target_file = os.path.join(APP_DATA_DIR, f"{safe_target}.json") + target_backup = os.path.join(APP_DATA_DIR, f"{safe_target}.backup.json") + + if not os.path.exists(source_file): + return False, f"Kaynak oturum bulunamadi: '{source_name}'" + + if os.path.exists(target_file): + return False, f"'{safe_target}' adli oturum zaten var." + + try: + # Force save current session if it matches the source + if source_name == self._current_session: + self.force_save() + + shutil.copy2(source_file, target_file) + # Create a backup as well + source_backup = os.path.join(APP_DATA_DIR, f"{safe_source}.backup.json") + if os.path.exists(source_backup): + shutil.copy2(source_backup, target_backup) + else: + shutil.copy2(target_file, target_backup) + + logger.info("Oturum kopyalandi: %s -> %s", source_file, target_file) + return True, safe_target + except OSError as exc: + logger.error("Oturum kopyalanamadi: %s", exc) + return False, f"Kopyalama sirasinda hata olustu: {exc}" + + + # ─── Yardımcı Metodlar ────────────────────────────────────────── + + def _read_json(self, path: str) -> Optional[Dict]: + if not os.path.exists(path): + return None + try: + with open(path, "r", encoding="utf-8") as f: + return json.load(f) + except (json.JSONDecodeError, OSError) as exc: + logger.error("JSON okunamadı (%s): %s", path, exc) + return None + + def _write_json(self, path: str, data: Dict) -> bool: + try: + with open(path, "w", encoding="utf-8") as f: + json.dump(data, f, ensure_ascii=False, indent=2) + return True + except OSError as exc: + logger.error("JSON yazılamadı (%s): %s", path, exc) + return False diff --git a/src/hotkey_manager.py b/src/hotkey_manager.py new file mode 100644 index 0000000..86a6063 --- /dev/null +++ b/src/hotkey_manager.py @@ -0,0 +1,168 @@ +""" +hotkey_manager.py — Windows global kısayol tuşu yönetimi (ctypes + QThread) +""" + +import ctypes +import ctypes.wintypes +import logging +from typing import Optional + +from PySide6.QtCore import QObject, QThread, Signal + +logger = logging.getLogger(__name__) + +# Windows API +MOD_ALT = 0x0001 +MOD_CONTROL = 0x0002 +MOD_SHIFT = 0x0004 +MOD_WIN = 0x0008 +HOTKEY_ID = 0x1337 + + +def _parse_hotkey(hotkey_str: str): + """ + "Alt+N" gibi bir string'i (modifiers, vk_code) tuple'ına çevirir. + Desteklenen modifier'lar: Alt, Ctrl, Shift, Win + """ + parts = [p.strip() for p in hotkey_str.split("+")] + modifiers = 0 + key_char = None + + for part in parts: + upper = part.upper() + if upper == "ALT": + modifiers |= MOD_ALT + elif upper in ("CTRL", "CONTROL"): + modifiers |= MOD_CONTROL + elif upper == "SHIFT": + modifiers |= MOD_SHIFT + elif upper in ("WIN", "META"): + modifiers |= MOD_WIN + else: + key_char = part + + if key_char is None: + return modifiers, 0 + + # Tek karakter → VK kodu + if len(key_char) == 1: + vk_code = ctypes.windll.user32.VkKeyScanW(ord(key_char)) & 0xFF + else: + # Özel tuşlar (F1-F12 vb.) — basit destek + special = { + "F1": 0x70, "F2": 0x71, "F3": 0x72, "F4": 0x73, + "F5": 0x74, "F6": 0x75, "F7": 0x76, "F8": 0x77, + "F9": 0x78, "F10": 0x79, "F11": 0x7A, "F12": 0x7B, + "SPACE": 0x20, "RETURN": 0x0D, "ESCAPE": 0x1B, + } + vk_code = special.get(key_char.upper(), 0) + + return modifiers, vk_code + + +class HotkeyListener(QThread): + """ + Ayrı bir thread'de Windows mesaj döngüsünü dinler. + Kısayol tespit edildiğinde sinyal yayınlar. + """ + hotkey_triggered = Signal() + registration_result = Signal(bool) + + def __init__(self, modifiers: int, vk_code: int, parent: Optional[QObject] = None) -> None: + super().__init__(parent) + self._running = False + self._modifiers = modifiers + self._vk_code = vk_code + + def run(self) -> None: + self._running = True + + # Windows API'ye göre, RegisterHotKey çağrılmadan önce thread'in bir mesaj kuyruğuna (message queue) sahip olması gerekir. + # Boş bir PeekMessageW çağrısı yaparak Windows'un bu thread için bir mesaj kuyruğu oluşturmasını zorluyoruz. + msg = ctypes.wintypes.MSG() + ctypes.windll.user32.PeekMessageW(ctypes.byref(msg), None, 0, 0, 0) + + # Kısayol kaydını dinleyici thread'in kendi bağlamında yapıyoruz, + # böylece thread'e gönderilen WM_HOTKEY mesajlarını PeekMessageW ile yakalayabiliriz. + result = ctypes.windll.user32.RegisterHotKey(None, HOTKEY_ID, self._modifiers, self._vk_code) + self.registration_result.emit(bool(result)) + + if not result: + self._running = False + return + + msg = ctypes.wintypes.MSG() + while self._running: + result = ctypes.windll.user32.PeekMessageW( + ctypes.byref(msg), None, 0x0312, 0x0312, 1 # WM_HOTKEY, PM_REMOVE + ) + if result and msg.message == 0x0312: + if msg.wParam == HOTKEY_ID: + self.hotkey_triggered.emit() + self.msleep(30) # CPU'yu yormamak için 30ms bekle + + ctypes.windll.user32.UnregisterHotKey(None, HOTKEY_ID) + + def stop(self) -> None: + self._running = False + self.quit() + self.wait(1000) + + +class HotkeyManager(QObject): + """ + Global kısayol tuşunu kaydeder ve dinler. + Kısayol değiştirilebilir; hata durumunda sinyal yayınlar. + """ + + hotkey_triggered = Signal() + registration_failed = Signal(str) # hata mesajı + + def __init__(self, hotkey_str: str = "Alt+N", parent: Optional[QObject] = None) -> None: + super().__init__(parent) + self._hotkey_str = hotkey_str + self._listener: Optional[HotkeyListener] = None + + self._register(hotkey_str) + + def _register(self, hotkey_str: str) -> bool: + """Kısayolu Windows'a kaydeder.""" + self._unregister() + modifiers, vk_code = _parse_hotkey(hotkey_str) + if vk_code == 0: + msg = f"Geçersiz kısayol tuşu: {hotkey_str}" + logger.error(msg) + self.registration_failed.emit(msg) + return False + + self._hotkey_str = hotkey_str + + # Dinleyici thread'i başlat ve kaydı thread içinde yap + self._listener = HotkeyListener(modifiers, vk_code, self) + self._listener.hotkey_triggered.connect(self.hotkey_triggered) + self._listener.registration_result.connect(self._on_registration_result) + self._listener.start() + return True + + def _on_registration_result(self, success: bool) -> None: + if not success: + msg = f"Kısayol kaydedilemedi: {self._hotkey_str} (başka bir uygulama kullanıyor olabilir)" + logger.warning(msg) + self.registration_failed.emit(msg) + else: + logger.info("Global kısayol kaydedildi: %s", self._hotkey_str) + + def _unregister(self) -> None: + if self._listener: + if self._listener.isRunning(): + self._listener.stop() + self._listener = None + logger.debug("Global kısayol kaydı silindi.") + + def change_hotkey(self, new_hotkey: str) -> bool: + """Kısayolu değiştirir. Başarılı olursa True döner.""" + return self._register(new_hotkey) + + def cleanup(self) -> None: + """Uygulama kapanırken çağrılır.""" + self._unregister() diff --git a/src/note_widget.py b/src/note_widget.py new file mode 100644 index 0000000..dada7fa --- /dev/null +++ b/src/note_widget.py @@ -0,0 +1,647 @@ +""" +note_widget.py — Yapışkan not kutusu +Header drag bar + icon bar + metin alanı + custom resize +""" + +import logging +from typing import Any, Dict, Optional + +from PySide6.QtCore import QEvent, QPoint, QSize, Qt, Signal +from PySide6.QtGui import QColor, QFont, QTextCursor +from PySide6.QtWidgets import ( + QApplication, + QFrame, + QGraphicsDropShadowEffect, + QHBoxLayout, + QLabel, + QMenu, + QPlainTextEdit, + QPushButton, + QToolTip, + QVBoxLayout, + QWidget, +) + +from .constants import ( + NOTE_CHAR_LIMIT, + NOTE_COLORS, + NOTE_MAX_HEIGHT, + NOTE_MAX_WIDTH, + NOTE_MIN_HEIGHT, + NOTE_MIN_WIDTH, + get_contrast_text_color, + get_dynamic_accent_color, +) + +logger = logging.getLogger(__name__) + +HEADER_H = 18 # Header yüksekliği (px) +RESIZE_ZONE = 18 # Sağ alt köşe resize bölgesi (px) +FONT_SIZE_MIN = 8 +FONT_SIZE_MAX = 32 + + +def _darken(hex_color: str, amount: int = 30) -> str: + c = QColor(hex_color) + h, s, v, a = c.getHsv() + c.setHsv(h, s, max(0, v - amount), a) + return c.name() + + +# ──────────────────────────────────────────────────────────────────── +# Color Picker Popup +# ──────────────────────────────────────────────────────────────────── + +class ColorPickerPopup(QFrame): + """Küçük renk seçici popup penceresi.""" + + color_selected = Signal(str) + + def __init__(self, colors: dict, current: str, parent=None) -> None: + super().__init__(parent, Qt.Popup | Qt.FramelessWindowHint) + self.setAttribute(Qt.WA_TranslucentBackground) + + layout = QHBoxLayout(self) + layout.setContentsMargins(10, 10, 10, 10) + layout.setSpacing(8) + + for name, hc in colors.items(): + selected = hc == current + btn = QPushButton(self) + btn.setFixedSize(28, 28) + btn.setToolTip(name) + btn.setCursor(Qt.PointingHandCursor) + btn.setStyleSheet(f""" + QPushButton {{ + background: {hc}; + border: {'3px solid #2196F3' if selected else '2px solid rgba(0,0,0,0.25)'}; + border-radius: 14px; + }} + QPushButton:hover {{ + border: 3px solid #42A5F5; + }} + """) + btn.clicked.connect(lambda _, c=hc: self._pick(c)) + layout.addWidget(btn) + + self.setStyleSheet(""" + ColorPickerPopup { + background: #1E1E2E; + border: 1px solid #45475A; + border-radius: 12px; + } + """) + + def _pick(self, color: str) -> None: + self.color_selected.emit(color) + self.close() + + +# ──────────────────────────────────────────────────────────────────── +# Text Edit +# ──────────────────────────────────────────────────────────────────── + +class NoteTextEdit(QPlainTextEdit): + """Karakter limiti destekli metin alanı.""" + + tab_pressed = Signal(bool) # True = Shift+Tab (geri), False = Tab (ileri) + + def __init__(self, limit: int, parent=None) -> None: + super().__init__(parent) + self._limit = limit + self.setFrameShape(QFrame.NoFrame) + self.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) + self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) + self.textChanged.connect(self._enforce) + + def keyPressEvent(self, event) -> None: + if event.key() == Qt.Key_Tab or ( + event.key() == Qt.Key_Backtab + ): + self.tab_pressed.emit(event.key() == Qt.Key_Backtab) + event.accept() + return + super().keyPressEvent(event) + + def _enforce(self) -> None: + text = self.toPlainText() + if len(text) > self._limit: + cursor = self.textCursor() + pos = cursor.position() + self.blockSignals(True) + self.setPlainText(text[: self._limit]) + cursor.setPosition(min(pos, self._limit)) + self.setTextCursor(cursor) + self.blockSignals(False) + QToolTip.showText( + self.mapToGlobal(QPoint(0, 0)), + f"Maksimum {self._limit} karakter girilebilir.", + self, + ) + + def insertFromMimeData(self, source) -> None: + text = source.text() + current = self.toPlainText() + available = self._limit - len(current) + if available <= 0: + return + if len(text) > available: + text = text[:available] + QToolTip.showText( + self.mapToGlobal(QPoint(0, 0)), + f"Metin {self._limit} karaktere kisaltildi.", + self, + ) + self.textCursor().insertText(text) + + +# ──────────────────────────────────────────────────────────────────── +# Icon Button +# ──────────────────────────────────────────────────────────────────── + +class IconBtn(QPushButton): + """Header/Bottom bar için küçük ikon butonu.""" + + def __init__(self, text: str, tip: str, parent=None) -> None: + super().__init__(text, parent) + self.setFixedSize(28, 28) + self.setCursor(Qt.PointingHandCursor) + self.setToolTip(tip) + self.setObjectName("iconBtn") + + def apply_style(self, text_color: str, accent: str, active: bool = False) -> None: + if active: + self.setStyleSheet(f""" + QPushButton#iconBtn {{ + background: rgba(0, 0, 0, 0.15); + color: #000000; + border: 1.5px solid #000000; + border-radius: 6px; + font-size: 13px; + font-weight: bold; + }} + QPushButton#iconBtn:hover {{ + background: rgba(0, 0, 0, 0.25); + }} + """) + else: + self.setStyleSheet(f""" + QPushButton#iconBtn {{ + background: transparent; + color: #000000; + border: none; + border-radius: 6px; + font-size: 13px; + }} + QPushButton#iconBtn:hover {{ + background: rgba(0, 0, 0, 0.1); + color: #000000; + }} + """) + + +# ──────────────────────────────────────────────────────────────────── +# NoteWidget +# ──────────────────────────────────────────────────────────────────── + +class NoteWidget(QWidget): + """Yapışkan not kutusu — header + icon bar + metin alanı + custom resize.""" + + # Sinyaller + delete_requested = Signal(str) # note_id + content_changed = Signal(str, str) # note_id, content + position_changed = Signal(str, int, int) # note_id, x, y + size_changed = Signal(str, int, int) # note_id, w, h + color_changed = Signal(str, str) # note_id, color + font_size_changed = Signal(str, int) # note_id, new_size + raise_requested = Signal(str) # note_id + focus_gained = Signal(str) # note_id + save_requested = Signal(str) # note_id + new_note_requested = Signal(str) # note_id (create near me) + pin_toggled = Signal(str, bool) # note_id, pinned + settings_requested = Signal() # settings dialog request + tab_requested = Signal(str, bool) # note_id, shift_pressed + + def __init__(self, note_data: Dict[str, Any], colors_dict: Optional[Dict[str, str]] = None, parent=None) -> None: + super().__init__(parent) + self._id = note_data["id"] + self._color = note_data.get("color", "#FFF9C4") + self._font_size = note_data.get("font_size", 14) + self._font_family = note_data.get("font_family", "Segoe UI") + self._pinned = note_data.get("pinned", False) + self._colors_dict = colors_dict or NOTE_COLORS + + # Resize state + self._resizing = False + self._resize_start_pos = QPoint() + self._resize_start_w = 0 + self._resize_start_h = 0 + + # Drag state + self._dragging = False + self._drag_offset = QPoint() + + self.setMinimumSize(NOTE_MIN_WIDTH, NOTE_MIN_HEIGHT) + self.setMaximumSize(NOTE_MAX_WIDTH, NOTE_MAX_HEIGHT) + self.resize(note_data.get("width", 220), note_data.get("height", 180)) + self.move(note_data.get("x", 100), note_data.get("y", 100)) + self.setWindowTitle("Noteki") + + self.setAttribute(Qt.WA_StyledBackground, True) + self.setMouseTracking(True) + + self._build_ui() + self._apply_color(self._color) + self._apply_font(self._font_family, self._font_size) + self._setup_shadow() + + # İçerik yükle + content = note_data.get("content", "") + if content: + self._text_edit.blockSignals(True) + self._text_edit.setPlainText(content) + self._text_edit.blockSignals(False) + + # Pinned state + if self._pinned: + self._pin_btn.apply_style("", "", active=True) + + # ── UI Kurulumu ───────────────────────────────────────────────── + + def _build_ui(self) -> None: + root = QVBoxLayout(self) + root.setContentsMargins(0, 0, 0, 0) + root.setSpacing(0) + + # ── Header (drag only, thinned) ─────────────────────────── + self._header = QWidget() + self._header.setParent(self) + self._header.setFixedHeight(HEADER_H) + self._header.setCursor(Qt.SizeAllCursor) + self._header.setObjectName("noteHeader") + self._header.setMouseTracking(True) + self._header.installEventFilter(self) + + hbox = QHBoxLayout(self._header) + hbox.setContentsMargins(0, 0, 0, 0) + hbox.setSpacing(0) + + hbox.addStretch() + self._drag_lbl = QLabel("✥") # Centered move/drag icon + self._drag_lbl.setObjectName("dragLbl") + self._drag_lbl.setAlignment(Qt.AlignCenter) + hbox.addWidget(self._drag_lbl) + hbox.addStretch() + + # ── Icon butonları (Bottom bar için hazırlanıyor) ─────────── + self._pin_btn = IconBtn("📌", "Her Zaman Üstte (toggle)") + self._new_btn = IconBtn("+", "Yeni Not Ekle") + self._color_btn = IconBtn("🎨", "Renk Degistir") + self._font_dn = IconBtn("A-", "Yazi Boyutunu Kucult") + self._font_up = IconBtn("A+", "Yazi Boyutunu Buyut") + self._settings_btn = IconBtn("⚙️", "Ayarlar") + self._save_btn = IconBtn("✓", "Kaydet") + self._del_btn = IconBtn("✕", "Notu Sil") + + # Bağlantılar + self._pin_btn.clicked.connect(self._on_pin_toggle) + self._new_btn.clicked.connect(lambda: self.new_note_requested.emit(self._id)) + self._color_btn.clicked.connect(self._on_color_btn) + self._font_dn.clicked.connect(lambda: self._change_font_size(-1)) + self._font_up.clicked.connect(lambda: self._change_font_size(+1)) + self._settings_btn.clicked.connect(lambda: self.settings_requested.emit()) + self._save_btn.clicked.connect(lambda: self.save_requested.emit(self._id)) + self._del_btn.clicked.connect(lambda: self.delete_requested.emit(self._id)) + + root.addWidget(self._header) + + # ── Metin alanı ─────────────────────────────────────────── + self._text_edit = NoteTextEdit(NOTE_CHAR_LIMIT, self) + self._text_edit.setObjectName("noteText") + self._text_edit.textChanged.connect( + lambda: self.content_changed.emit(self._id, self._text_edit.toPlainText()) + ) + self._text_edit.tab_pressed.connect( + lambda shift: self.tab_requested.emit(self._id, shift) + ) + self._text_edit.setContextMenuPolicy(Qt.CustomContextMenu) + self._text_edit.customContextMenuRequested.connect( + lambda p: self._show_ctx(self._text_edit.mapToGlobal(p)) + ) + self._text_edit.installEventFilter(self) + root.addWidget(self._text_edit, stretch=1) + + # ── Bottom Bar (left-aligned icons) ─────────────────────── + self._bottom_bar = QWidget() + self._bottom_bar.setObjectName("noteBottomBar") + self._bottom_bar.setFixedHeight(34) + self._bottom_bar.setMouseTracking(True) + + bot_layout = QHBoxLayout(self._bottom_bar) + # Sağ kenar boşluğu 18px yapılarak sağ alttaki 18x18 resize grip ile çakışma önlenir + bot_layout.setContentsMargins(8, 0, 18, 0) + bot_layout.setSpacing(6) + + # Sola yaslı butonlar (Silme en solda) + bot_layout.addWidget(self._del_btn) + bot_layout.addWidget(self._pin_btn) + bot_layout.addWidget(self._color_btn) + bot_layout.addWidget(self._font_dn) + bot_layout.addWidget(self._font_up) + bot_layout.addWidget(self._settings_btn) + bot_layout.addWidget(self._save_btn) + + # Araya esnek boşluk + bot_layout.addStretch() + + # En sağda yeni not (+) butonu + bot_layout.addWidget(self._new_btn) + + root.addWidget(self._bottom_bar) + + # Resize göstergesi (köşe üçgeni — sadece görsel) + self._resize_corner = QLabel("◢", self) + self._resize_corner.setFixedSize(RESIZE_ZONE, RESIZE_ZONE) + self._resize_corner.setAlignment(Qt.AlignRight | Qt.AlignBottom) + self._resize_corner.setCursor(Qt.SizeFDiagCursor) + self._resize_corner.setObjectName("resizeCorner") + self._resize_corner.installEventFilter(self) + + def _setup_shadow(self) -> None: + shadow = QGraphicsDropShadowEffect(self) + shadow.setBlurRadius(20) + shadow.setOffset(0, 4) + shadow.setColor(QColor(0, 0, 0, 110)) + self.setGraphicsEffect(shadow) + + # ── Renk & Font ───────────────────────────────────────────────── + + def _apply_color(self, color: str) -> None: + self._color = color + tc = get_contrast_text_color(color) + accent = get_dynamic_accent_color(color) + dark = _darken(color, 12) + + self.setStyleSheet(f""" + NoteWidget {{ + background-color: {color}; + border-radius: 12px; + border: 1.5px solid {dark}; + }} + """) + + self._header.setStyleSheet(f""" + QWidget#noteHeader {{ + background-color: {dark}33; + border-top-left-radius: 12px; + border-top-right-radius: 12px; + border-bottom: 1px solid rgba(0, 0, 0, 0.05); + }} + QLabel#dragLbl {{ + color: {tc}88; + font-size: 13px; + font-weight: bold; + background: transparent; + }} + """) + + self._text_edit.setStyleSheet(f""" + QPlainTextEdit#noteText {{ + background-color: {color}; + border: none; + color: {tc}; + padding: 6px 8px; + selection-background-color: {accent}50; + }} + QScrollBar:vertical {{ + width: 5px; background: transparent; + }} + QScrollBar::handle:vertical {{ + background: {tc}40; border-radius: 2px; min-height: 14px; + }} + QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical {{ + height: 0; + }} + """) + + self._bottom_bar.setStyleSheet(f""" + QWidget#noteBottomBar {{ + background-color: {dark}22; + border-bottom-left-radius: 12px; + border-bottom-right-radius: 12px; + border-top: 1px solid rgba(0, 0, 0, 0.05); + }} + """) + + self._resize_corner.setStyleSheet(f""" + QLabel#resizeCorner {{ + color: {tc}44; + background: transparent; + font-size: 12px; + padding: 0; + }} + """) + + # Icon buton stillerini güncelle + for btn in (self._pin_btn, self._new_btn, self._color_btn, self._font_dn, + self._font_up, self._settings_btn, self._save_btn, self._del_btn): + btn.apply_style(tc, accent) + + # Pin buton durumuna göre + self._pin_btn.apply_style(tc, accent, active=self._pinned) + + def _apply_font(self, family: str, size: int) -> None: + self._font_family = family + self._font_size = size + self._text_edit.setFont(QFont(family, size)) + + # ── Pozisyon & Boyut ───────────────────────────────────────────── + + def resizeEvent(self, event) -> None: + super().resizeEvent(event) + # Resize köşesini sağ alta yerleştir + self._resize_corner.move(self.width() - RESIZE_ZONE, self.height() - RESIZE_ZONE) + + # ── Event Filter (header drag + text focus + resize corner) ────── + + def eventFilter(self, obj, event) -> bool: + # ── Header mouse events ── + if obj is self._header: + if event.type() == QEvent.MouseButtonPress: + if event.button() == Qt.LeftButton: + self._dragging = True + self._drag_offset = event.globalPosition().toPoint() - self.pos() + self.raise_requested.emit(self._id) + self.setWindowOpacity(0.88) + return True + elif event.button() == Qt.RightButton: + self._show_ctx(event.globalPosition().toPoint()) + return True + elif event.type() == QEvent.MouseMove: + if self._dragging and event.buttons() & Qt.LeftButton: + new_pos = event.globalPosition().toPoint() - self._drag_offset + if self.parent(): + pr = self.parent().rect() + new_pos.setX(max(0, min(new_pos.x(), pr.width() - self.width()))) + new_pos.setY(max(0, min(new_pos.y(), pr.height() - self.height()))) + self.move(new_pos) + return True + elif event.type() == QEvent.MouseButtonRelease: + if self._dragging: + self._dragging = False + self.setWindowOpacity(1.0) + self.position_changed.emit(self._id, self.x(), self.y()) + return True + elif event.type() == QEvent.MouseButtonDblClick: + self._text_edit.setFocus() + self._text_edit.moveCursor(QTextCursor.End) + return True + + # ── Resize corner events ── + elif obj is getattr(self, '_resize_corner', None): + if event.type() == QEvent.MouseButtonPress: + if event.button() == Qt.LeftButton: + self._resizing = True + self._resize_start_pos = event.globalPosition().toPoint() + self._resize_start_w = self.width() + self._resize_start_h = self.height() + self.raise_requested.emit(self._id) + return True + elif event.type() == QEvent.MouseMove: + if self._resizing and event.buttons() & Qt.LeftButton: + delta = event.globalPosition().toPoint() - self._resize_start_pos + new_w = max(NOTE_MIN_WIDTH, min(NOTE_MAX_WIDTH, self._resize_start_w + int(delta.x()))) + new_h = max(NOTE_MIN_HEIGHT, min(NOTE_MAX_HEIGHT, self._resize_start_h + int(delta.y()))) + self.resize(new_w, new_h) + return True + elif event.type() == QEvent.MouseButtonRelease: + if self._resizing: + self._resizing = False + self.size_changed.emit(self._id, self.width(), self.height()) + return True + + # ── Text edit focus events ── + elif obj is getattr(self, '_text_edit', None): + if event.type() == QEvent.FocusIn: + self.raise_requested.emit(self._id) + self.focus_gained.emit(self._id) + elif event.type() == QEvent.FocusOut: + self.save_requested.emit(self._id) + + return super().eventFilter(obj, event) + + # ── NoteWidget mouse events ───────────────────────────────────── + + def mousePressEvent(self, event) -> None: + self.raise_requested.emit(self._id) + event.accept() + + # ── Context Menü ──────────────────────────────────────────────── + + def _show_ctx(self, global_pos: QPoint) -> None: + menu = QMenu(self) + menu.setStyleSheet(""" + QMenu { + background:#1E1E2E; color:#CDD6F4; + border:1px solid #45475A; border-radius:9px; padding:5px; + font-family:'Segoe UI'; font-size:13px; min-width:160px; + } + QMenu::item { padding:6px 18px; border-radius:5px; } + QMenu::item:selected { background:#313244; } + QMenu::separator { height:1px; background:#45475A; margin:3px 0; } + """) + color_menu = menu.addMenu("🎨 Renk Degistir") + for name, hc in self._colors_dict.items(): + a = color_menu.addAction(name) + a.setData(hc) + if hc == self._color: + a.setCheckable(True); a.setChecked(True) + menu.addSeparator() + copy_a = menu.addAction("📋 Kopyala") + paste_a = menu.addAction("📌 Yapistir") + menu.addSeparator() + del_a = menu.addAction("🗑️ Notu Sil") + + chosen = menu.exec(global_pos) + if not chosen: return + if chosen == copy_a: + QApplication.clipboard().setText(self._text_edit.toPlainText()) + elif chosen == paste_a: + self._text_edit.paste() + elif chosen == del_a: + self.delete_requested.emit(self._id) + elif chosen.data() and isinstance(chosen.data(), str): + self._change_color(chosen.data()) + + # ── Icon Bar Slot'ları ─────────────────────────────────────────── + + def _on_pin_toggle(self) -> None: + self._pinned = not self._pinned + tc = get_contrast_text_color(self._color) + accent = get_dynamic_accent_color(self._color) + self._pin_btn.apply_style(tc, accent, active=self._pinned) + self.pin_toggled.emit(self._id, self._pinned) + + def _on_color_btn(self) -> None: + popup = ColorPickerPopup(self._colors_dict, self._color, self) + popup.color_selected.connect(self._change_color) + # Butonun altında aç + btn_pos = self._color_btn.mapToGlobal(QPoint(0, self._color_btn.height() + 4)) + popup.move(btn_pos) + popup.show() + + def _change_color(self, color: str) -> None: + self._apply_color(color) + self.color_changed.emit(self._id, color) + + def _change_font_size(self, delta: int) -> None: + new_size = max(FONT_SIZE_MIN, min(FONT_SIZE_MAX, self._font_size + delta)) + if new_size == self._font_size: + return + self._apply_font(self._font_family, new_size) + self.font_size_changed.emit(self._id, new_size) + + # ── Public API ─────────────────────────────────────────────────── + + @property + def note_id(self) -> str: + return self._id + + def is_empty(self) -> bool: + return self._text_edit.toPlainText().strip() == "" + + def get_content(self) -> str: + return self._text_edit.toPlainText() + + def set_font_settings(self, family: str, size: int) -> None: + self._apply_font(family, size) + + def set_color(self, color: str) -> None: + self._apply_color(color) + + def set_colors_dict(self, colors: Dict[str, str]) -> None: + self._colors_dict = colors + + def set_active(self, active: bool) -> None: + color = self._color + accent = get_dynamic_accent_color(color) + dark = _darken(color, 12) + if active: + border = f"1.5px solid {dark}; border-left: 3px solid {accent};" + else: + border = f"1.5px solid {dark}; border-left: 1.5px solid {dark};" + self.setStyleSheet(f""" + NoteWidget {{ + background-color: {color}; + border-radius: 12px; + border: {border}; + }} + """) + + def focus_text(self) -> None: + self._text_edit.setFocus() + self._text_edit.moveCursor(QTextCursor.End) + + @property + def is_pinned(self) -> bool: + return self._pinned diff --git a/src/settings_dialog.py b/src/settings_dialog.py new file mode 100644 index 0000000..61eaef1 --- /dev/null +++ b/src/settings_dialog.py @@ -0,0 +1,488 @@ +""" +settings_dialog.py — Ayarlar + Oturum yönetimi penceresi +""" + +import logging +from typing import Any, Dict, List, Optional + +from PySide6.QtCore import Qt, Signal +from PySide6.QtGui import QColor, QFont +from PySide6.QtWidgets import ( + QCheckBox, + QColorDialog, + QDialog, + QDialogButtonBox, + QFontComboBox, + QFormLayout, + QGroupBox, + QHBoxLayout, + QInputDialog, + QKeySequenceEdit, + QLabel, + QListWidget, + QListWidgetItem, + QMessageBox, + QPushButton, + QSpinBox, + QTabWidget, + QVBoxLayout, + QWidget, +) + +from .constants import NOTE_COLORS + +logger = logging.getLogger(__name__) + + +# ─── Color picker button ───────────────────────────────────────────── + +class ColorPickerButton(QPushButton): + color_selected = Signal(str) + + def __init__(self, name: str, hc: str, parent=None) -> None: + super().__init__(parent) + self._hex = hc + self.setFixedSize(32, 32) + self.setToolTip(name) + self.setCursor(Qt.PointingHandCursor) + self._selected = False + self._apply() + self.clicked.connect(lambda: self.color_selected.emit(self._hex)) + + def set_selected(self, v: bool) -> None: + self._selected = v + self._apply() + + def _apply(self) -> None: + border = "3px solid #2196F3" if self._selected else "2px solid #888" + self.setStyleSheet(f""" + QPushButton {{ + background:{self._hex}; + border:{border}; + border-radius:16px; + }} + QPushButton:hover {{ border:3px solid #42A5F5; }} + """) + + +# ─── Settings Dialog ───────────────────────────────────────────────── + +class SettingsDialog(QDialog): + """Font, renk, kısayol, sistem ve oturum yönetimi.""" + + settings_saved = Signal(dict) + session_switch_requested = Signal(str) # session_name + session_create_requested = Signal(str) # session_name + session_copy_requested = Signal(str, str) # source_name, target_name + session_delete_requested = Signal(str) # session_name + + def __init__(self, current_settings: Dict[str, Any], + sessions: Optional[List[str]] = None, + current_session: str = "session", + parent=None) -> None: + super().__init__(parent) + self._settings = dict(current_settings) + self._sessions = sessions or [] + self._current_session = current_session + self._note_colors = dict(current_settings.get("note_colors", NOTE_COLORS)) + self._selected_color = current_settings.get("default_note_color", "#FFF9C4") + self._color_buttons: Dict[str, ColorPickerButton] = {} + + self.setWindowTitle("Noteki — Ayarlar") + self.setWindowFlags(Qt.Dialog | Qt.WindowCloseButtonHint) + self.setModal(True) + self.setMinimumWidth(440) + self.setFixedSize(460, 520) + + self._build_ui() + self._load_values() + self._apply_style() + + # ── UI ─────────────────────────────────────────────────────────── + + def _build_ui(self) -> None: + layout = QVBoxLayout(self) + layout.setContentsMargins(16, 16, 16, 12) + layout.setSpacing(12) + + title = QLabel("⚙️ Ayarlar") + title.setStyleSheet("font-size:18px;font-weight:600;color:#1A1A2E;") + layout.addWidget(title) + + tabs = QTabWidget() + tabs.addTab(self._build_font_tab(), " Font & Renk ") + tabs.addTab(self._build_system_tab(), " Sistem ") + tabs.addTab(self._build_session_tab(), " Oturumlar ") + layout.addWidget(tabs) + + btn_box = QDialogButtonBox(QDialogButtonBox.Save | QDialogButtonBox.Cancel) + btn_box.button(QDialogButtonBox.Save).setText("Kaydet") + btn_box.button(QDialogButtonBox.Cancel).setText("Iptal") + btn_box.accepted.connect(self._on_save) + btn_box.rejected.connect(self.reject) + layout.addWidget(btn_box) + + # ── Font & Renk sekmesi ────────────────────────────────────────── + + def _build_font_tab(self) -> QWidget: + w = QWidget() + layout = QVBoxLayout(w) + layout.setContentsMargins(12, 12, 12, 12) + layout.setSpacing(12) + + # Font grubu + font_grp = QGroupBox("Varsayilan Font") + fl = QFormLayout(font_grp) + fl.setLabelAlignment(Qt.AlignRight) + fl.setContentsMargins(12, 14, 12, 12) + fl.setSpacing(10) + + self._font_combo = QFontComboBox() + self._font_combo.setFixedHeight(34) + fl.addRow("Font:", self._font_combo) + + self._font_size = QSpinBox() + self._font_size.setRange(8, 32) + self._font_size.setFixedHeight(34) + self._font_size.setSuffix(" pt") + fl.addRow("Boyut:", self._font_size) + layout.addWidget(font_grp) + + # Renk grubu (Dynamic structure) + color_grp = QGroupBox("Varsayilan Not Rengi") + color_grp_layout = QVBoxLayout(color_grp) + color_grp_layout.setContentsMargins(12, 14, 12, 12) + color_grp_layout.setSpacing(10) + + # Color picker buttons horizontal container + self._color_buttons_layout = QHBoxLayout() + self._color_buttons_layout.setSpacing(8) + color_grp_layout.addLayout(self._color_buttons_layout) + + # Controls row (Add / Delete buttons) + ctrl_layout = QHBoxLayout() + self._add_color_btn = QPushButton("🎨 Yeni Renk Ekle") + self._del_color_btn = QPushButton("🗑 Secili Rengi Sil") + self._add_color_btn.setFixedHeight(30) + self._del_color_btn.setFixedHeight(30) + self._add_color_btn.setCursor(Qt.PointingHandCursor) + self._del_color_btn.setCursor(Qt.PointingHandCursor) + + ctrl_layout.addWidget(self._add_color_btn) + ctrl_layout.addWidget(self._del_color_btn) + ctrl_layout.addStretch() + color_grp_layout.addLayout(ctrl_layout) + + # Connections + self._add_color_btn.clicked.connect(self._on_add_custom_color) + self._del_color_btn.clicked.connect(self._on_del_custom_color) + + layout.addWidget(color_grp) + layout.addStretch() + return w + + # ── Sistem sekmesi ─────────────────────────────────────────────── + + def _build_system_tab(self) -> QWidget: + w = QWidget() + layout = QVBoxLayout(w) + layout.setContentsMargins(12, 12, 12, 12) + layout.setSpacing(12) + + # Kısayol + hk_grp = QGroupBox("Global Kisayol") + hl = QFormLayout(hk_grp) + hl.setLabelAlignment(Qt.AlignRight) + hl.setContentsMargins(12, 14, 12, 12) + hl.setSpacing(10) + self._hotkey_edit = QKeySequenceEdit() + self._hotkey_edit.setFixedHeight(34) + hl.addRow("Kisayol:", self._hotkey_edit) + layout.addWidget(hk_grp) + + # Sistem + sys_grp = QGroupBox("Sistem") + sl = QVBoxLayout(sys_grp) + sl.setContentsMargins(12, 14, 12, 12) + sl.setSpacing(10) + self._auto_start_cb = QCheckBox("Windows baslangicindan otomatik calistir") + sl.addWidget(self._auto_start_cb) + + self._only_show_in_tray_cb = QCheckBox("Sadece sistem tepsisinde goster (Gorev cubugunda gizle)") + sl.addWidget(self._only_show_in_tray_cb) + + layout.addWidget(sys_grp) + layout.addStretch() + return w + + # ── Oturumlar sekmesi ──────────────────────────────────────────── + + def _build_session_tab(self) -> QWidget: + w = QWidget() + layout = QVBoxLayout(w) + layout.setContentsMargins(12, 12, 12, 12) + layout.setSpacing(10) + + info = QLabel(f"Aktif oturum: {self._current_session}") + info.setStyleSheet("color:#333;font-size:13px;") + layout.addWidget(info) + + # Oturum listesi + self._session_list = QListWidget() + self._session_list.setFixedHeight(150) + self._session_list.setStyleSheet(""" + QListWidget { + border:1px solid #CCC;border-radius:6px; + background:#FAFAFA;font-size:13px; + } + QListWidget::item { padding:6px 10px; } + QListWidget::item:selected { background:#BBDEFB; color:#1A1A2E; } + """) + self._populate_sessions() + layout.addWidget(self._session_list) + + # Butonlar + btn_row = QHBoxLayout() + self._switch_btn = QPushButton("▶ Ac / Gec") + self._new_btn = QPushButton("✚ Yeni Oturum") + self._copy_btn = QPushButton("📋 Kopyala") + self._del_btn = QPushButton("🗑 Sil") + + for b in (self._switch_btn, self._new_btn, self._copy_btn, self._del_btn): + b.setCursor(Qt.PointingHandCursor) + b.setFixedHeight(32) + btn_row.addWidget(b) + + self._switch_btn.clicked.connect(self._on_switch) + self._new_btn.clicked.connect(self._on_new_session) + self._copy_btn.clicked.connect(self._on_copy_session) + self._del_btn.clicked.connect(self._on_del_session) + layout.addLayout(btn_row) + layout.addStretch() + return w + + def _populate_sessions(self) -> None: + self._session_list.clear() + for s in self._sessions: + item = QListWidgetItem( + ("▶ " if s == self._current_session else " ") + s + ) + item.setData(Qt.UserRole, s) + self._session_list.addItem(item) + + # ── Değer Yükleme ──────────────────────────────────────────────── + + def _load_values(self) -> None: + self._font_combo.setCurrentFont( + QFont(self._settings.get("default_font_family", "Segoe UI")) + ) + self._font_size.setValue(self._settings.get("default_font_size", 14)) + + self._rebuild_color_buttons() + + from PySide6.QtGui import QKeySequence + self._hotkey_edit.setKeySequence( + QKeySequence(self._settings.get("hotkey", "Alt+N")) + ) + self._auto_start_cb.setChecked(self._settings.get("auto_start", False)) + self._only_show_in_tray_cb.setChecked(self._settings.get("only_show_in_tray", True)) + + # ── Slot'lar ───────────────────────────────────────────────────── + + def _on_color(self, hc: str) -> None: + self._selected_color = hc + for c, btn in self._color_buttons.items(): + btn.set_selected(c == hc) + + def _rebuild_color_buttons(self) -> None: + # Clear existing buttons from layout + while self._color_buttons_layout.count() > 0: + item = self._color_buttons_layout.takeAt(0) + if item.widget(): + item.widget().deleteLater() + + self._color_buttons.clear() + + # Add new buttons from self._note_colors + for name, hc in self._note_colors.items(): + btn = ColorPickerButton(name, hc, self) + btn.color_selected.connect(self._on_color) + self._color_buttons[hc] = btn + self._color_buttons_layout.addWidget(btn) + + # Select the active one + if self._selected_color not in self._note_colors.values(): + if self._note_colors: + self._selected_color = list(self._note_colors.values())[0] + else: + self._selected_color = "#FFF9C4" + + for hc, btn in self._color_buttons.items(): + btn.set_selected(hc == self._selected_color) + + def _on_add_custom_color(self) -> None: + initial = QColor(self._selected_color) + color = QColorDialog.getColor(initial, self, "Yeni Renk Sec") + if not color.isValid(): + return + + hex_str = color.name().upper() + if hex_str in self._note_colors.values(): + QMessageBox.information(self, "Renk Ekle", "Bu renk zaten mevcut.") + return + + name, ok = QInputDialog.getText( + self, "Renk Adi", + "Yeni renk icin bir isim girin (Ornegin: Mint, Lavanta):" + ) + if not ok or not name.strip(): + i = 1 + while f"Renk {i}" in self._note_colors: + i += 1 + name = f"Renk {i}" + else: + name = name.strip() + + self._note_colors[name] = hex_str + self._selected_color = hex_str + self._rebuild_color_buttons() + + def _on_del_custom_color(self) -> None: + if len(self._note_colors) <= 1: + QMessageBox.warning(self, "Hata", "En az bir renk secenegi kalmalidir.") + return + + selected_key = None + for k, v in self._note_colors.items(): + if v == self._selected_color: + selected_key = k + break + + if selected_key: + reply = QMessageBox.question( + self, "Rengi Sil", + f"'{selected_key}' rengini silmek istediginizden emin misiniz?", + QMessageBox.Yes | QMessageBox.No, QMessageBox.No + ) + if reply == QMessageBox.Yes: + self._note_colors.pop(selected_key) + if self._selected_color not in self._note_colors.values(): + self._selected_color = list(self._note_colors.values())[0] + self._rebuild_color_buttons() + + def _on_save(self) -> None: + hk = self._hotkey_edit.keySequence().toString() + family = self._font_combo.currentFont().family() + if not family: + family = "Segoe UI" + new = { + "default_font_family": family, + "default_font_size": self._font_size.value(), + "default_note_color": self._selected_color, + "hotkey": hk or "Alt+N", + "auto_start": self._auto_start_cb.isChecked(), + "only_show_in_tray": self._only_show_in_tray_cb.isChecked(), + "note_colors": self._note_colors, + } + self._settings.update(new) + self.settings_saved.emit(new) + self.accept() + + def _on_switch(self) -> None: + item = self._session_list.currentItem() + if not item: + QMessageBox.information(self, "Oturum", "Lutfen bir oturum secin.") + return + name = item.data(Qt.UserRole) + if name == self._current_session: + QMessageBox.information(self, "Oturum", "Bu oturum zaten aktif.") + return + reply = QMessageBox.question( + self, "Oturum Degistir", + f"'{name}' oturumuna gecmek istiyor musunuz?\n" + "Mevcut oturum kaydedilecek.", + QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes, + ) + if reply == QMessageBox.Yes: + self.session_switch_requested.emit(name) + self.accept() + + def _on_new_session(self) -> None: + name, ok = QInputDialog.getText( + self, "Yeni Oturum", + "Oturum adi (harf, rakam, - ve _ kullanabilirsiniz):" + ) + if ok and name.strip(): + self.session_create_requested.emit(name.strip()) + self.accept() + + def _on_copy_session(self) -> None: + item = self._session_list.currentItem() + if not item: + QMessageBox.information(self, "Oturum", "Lutfen kopyalamak istediginiz oturumu secin.") + return + source_name = item.data(Qt.UserRole) + target_name, ok = QInputDialog.getText( + self, "Oturumu Kopyala", + f"'{source_name}' oturumunun yeni adi (harf, rakam, - ve _ kullanabilirsiniz):" + ) + if ok and target_name.strip(): + self.session_copy_requested.emit(source_name, target_name.strip()) + self.accept() + + def _on_del_session(self) -> None: + item = self._session_list.currentItem() + if not item: + return + name = item.data(Qt.UserRole) + if name == self._current_session: + QMessageBox.warning(self, "Hata", "Aktif oturum silinemez.") + return + reply = QMessageBox.question( + self, "Oturumu Sil", + f"'{name}' oturumunu kalici olarak silmek istiyor musunuz?", + QMessageBox.Yes | QMessageBox.No, QMessageBox.No, + ) + if reply == QMessageBox.Yes: + self.session_delete_requested.emit(name) + self._sessions = [s for s in self._sessions if s != name] + self._populate_sessions() + + # ── Stil ───────────────────────────────────────────────────────── + + def _apply_style(self) -> None: + self.setStyleSheet(""" + QDialog { background:#F5F5F5; font-family:'Segoe UI'; } + QTabWidget::pane { border:1px solid #DDD; border-radius:8px; background:white; } + QTabBar::tab { + background:#EEE; color:#555; padding:7px 16px; + border-radius:6px 6px 0 0; font-size:13px; margin-right:2px; + } + QTabBar::tab:selected { background:white; color:#1A1A2E; font-weight:600; } + QGroupBox { + font-size:13px; font-weight:600; color:#333; + border:1px solid #DDD; border-radius:8px; + margin-top:8px; background:white; + } + QGroupBox::title { + subcontrol-origin:margin; subcontrol-position:top left; + padding:0 6px; left:10px; + } + QFontComboBox, QSpinBox, QKeySequenceEdit { + border:1px solid #CCC; border-radius:6px; + padding:4px 8px; font-size:13px; background:#FAFAFA; + } + QFontComboBox:focus, QSpinBox:focus, QKeySequenceEdit:focus { + border:1.5px solid #2196F3; + } + QCheckBox { font-size:13px; color:#333; spacing:8px; } + QPushButton { + font-size:13px; padding:6px 16px; border-radius:7px; + background:#EEE; color:#333; border:1px solid #CCC; + } + QPushButton:hover { background:#DDD; } + QDialogButtonBox QPushButton[text="Kaydet"] { + background:#2196F3; color:white; border:none; + } + QDialogButtonBox QPushButton[text="Kaydet"]:hover { background:#1976D2; } + """) diff --git a/src/tray_manager.py b/src/tray_manager.py new file mode 100644 index 0000000..f6567c3 --- /dev/null +++ b/src/tray_manager.py @@ -0,0 +1,181 @@ +""" +tray_manager.py — System Tray ikonu ve menü yönetimi +""" + +import logging +import os +from typing import Optional + +from PySide6.QtCore import QObject, Signal +from PySide6.QtGui import QIcon, QPixmap, QColor, QPainter, QBrush, QPen, QFont +from PySide6.QtWidgets import QMenu, QMessageBox, QSystemTrayIcon, QWidget + +from .constants import APP_NAME + +logger = logging.getLogger(__name__) + + +def _make_default_icon(size: int = 32) -> QIcon: + """ + Assets klasöründe ikon yoksa programatik olarak basit bir ikon oluşturur. + """ + pixmap = QPixmap(size, size) + pixmap.fill(QColor(0, 0, 0, 0)) + painter = QPainter(pixmap) + painter.setRenderHint(QPainter.Antialiasing) + + # Arka plan (sarı not rengi) + painter.setBrush(QBrush(QColor("#FFF176"))) + painter.setPen(QPen(QColor("#F9A825"), 1.5)) + painter.drawRoundedRect(3, 3, size - 6, size - 6, 4, 4) + + # "S" harfi + font = QFont("Segoe UI", int(size * 0.45), QFont.Bold) + painter.setFont(font) + painter.setPen(QColor("#E65100")) + painter.drawText(pixmap.rect(), Qt.AlignCenter, "S") + + painter.end() + return QIcon(pixmap) + + +class TrayManager(QObject): + """ + System Tray ikonunu ve menüsünü yönetir. + Sol tıklama → toggle, sağ tıklama → context menü. + """ + + # ─── Sinyaller ────────────────────────────────────────────────── + toggle_requested = Signal() + new_note_requested = Signal() + settings_requested = Signal() + quit_requested = Signal() + undo_requested = Signal() + clear_all_requested = Signal() + + def __init__( + self, + icon_path: Optional[str] = None, + parent: Optional[QObject] = None, + ) -> None: + super().__init__(parent) + self._note_count: int = 0 + self._canvas_visible: bool = False + + # İkon + if icon_path and os.path.exists(icon_path): + icon = QIcon(icon_path) + else: + icon = _make_default_icon() + + self._tray = QSystemTrayIcon(icon, self) + self._tray.setToolTip(f"{APP_NAME} — 0 Not") + + self._build_menu() + + self._tray.activated.connect(self._on_activated) + self._tray.show() + logger.info("System Tray başlatıldı.") + + # ─── Menü ─────────────────────────────────────────────────────── + + def _build_menu(self) -> None: + menu = QMenu() + menu.setStyleSheet(self._menu_style()) + + self._toggle_action = menu.addAction("👁 Notları Göster") + self._toggle_action.triggered.connect(self.toggle_requested) + + self._new_note_action = menu.addAction("✚ Yeni Not Ekle") + self._new_note_action.triggered.connect(self.new_note_requested) + + menu.addSeparator() + + self._clear_action = menu.addAction("🗑️ Tüm Notları Sil") + self._clear_action.triggered.connect(self._on_clear_all) + + self._undo_action = menu.addAction("↩ Geri Al (Ctrl+Z)") + self._undo_action.triggered.connect(self.undo_requested) + + menu.addSeparator() + + settings_action = menu.addAction("⚙️ Ayarlar...") + settings_action.triggered.connect(self.settings_requested) + + menu.addSeparator() + + quit_action = menu.addAction("✕ Çıkış") + quit_action.triggered.connect(self.quit_requested) + + self._tray.setContextMenu(menu) + + # ─── Slot'lar ─────────────────────────────────────────────────── + + def _on_activated(self, reason: QSystemTrayIcon.ActivationReason) -> None: + if reason == QSystemTrayIcon.Trigger: # Sol tıklama + self.toggle_requested.emit() + # Sağ tıklama → Qt otomatik context menüyü gösterir + + def _on_clear_all(self) -> None: + if self._note_count == 0: + return + reply = QMessageBox.question( + None, + "Tüm Notları Sil", + f"Tüm {self._note_count} not kalıcı olarak silinecek.\nEmin misiniz?", + QMessageBox.Yes | QMessageBox.No, + QMessageBox.No, + ) + if reply == QMessageBox.Yes: + self.clear_all_requested.emit() + + # ─── Public API ───────────────────────────────────────────────── + + def update_note_count(self, count: int) -> None: + self._note_count = count + self._tray.setToolTip(f"{APP_NAME} — {count} Not") + self._toggle_action.setText( + "🙈 Notlari Gizle" if self._canvas_visible else "👁 Notlari Goster" + ) + self._clear_action.setEnabled(count > 0) + + def update_toggle_label(self, canvas_visible: bool) -> None: + self._canvas_visible = canvas_visible + if canvas_visible: + self._toggle_action.setText("🙈 Notlari Gizle") + else: + self._toggle_action.setText("👁 Notlari Goster") + + def show_message(self, title: str, message: str) -> None: + self._tray.showMessage(title, message, QSystemTrayIcon.Information, 3000) + + # ─── Stil ─────────────────────────────────────────────────────── + + def _menu_style(self) -> str: + return """ + QMenu { + background-color: #1E1E2E; + color: #CDD6F4; + border: 1px solid #45475A; + border-radius: 10px; + padding: 6px; + font-family: 'Segoe UI'; + font-size: 13px; + min-width: 200px; + } + QMenu::item { + padding: 8px 22px; + border-radius: 6px; + } + QMenu::item:selected { + background-color: #313244; + } + QMenu::item:disabled { + color: #585B70; + } + QMenu::separator { + height: 1px; + background: #45475A; + margin: 4px 2px; + } + """ diff --git a/src/undo_manager.py b/src/undo_manager.py new file mode 100644 index 0000000..74f1829 --- /dev/null +++ b/src/undo_manager.py @@ -0,0 +1,59 @@ +""" +undo_manager.py — Geri alma kuyruğu (RAM tabanlı, 10 işlem kapasiteli) +""" + +import logging +from collections import deque +from typing import Any, Callable, Dict, Optional + +from .constants import UNDO_CAPACITY + +logger = logging.getLogger(__name__) + + +class UndoManager: + """ + Silinen notları 10 işlemlik bir kuyrukta tutar. + Ctrl+Z ile sırayla geri yüklemeyi sağlar. + Uygulama kapatıldığında kuyruk temizlenir (RAM tabanlı). + """ + + def __init__(self) -> None: + self._queue: deque[Dict[str, Any]] = deque(maxlen=UNDO_CAPACITY) + self._on_restore: Optional[Callable[[Dict[str, Any]], None]] = None + + def set_restore_callback(self, callback: Callable[[Dict[str, Any]], None]) -> None: + """Not geri yüklendiğinde çağrılacak fonksiyonu ayarlar.""" + self._on_restore = callback + + def push(self, note_data: Dict[str, Any]) -> None: + """Silinen not verisini kuyruğa ekler.""" + self._queue.append(dict(note_data)) + logger.debug("Undo kuyruğuna eklendi: %s (toplam: %d)", note_data.get("id"), len(self._queue)) + + def pop(self) -> Optional[Dict[str, Any]]: + """ + Kuyruktaki en son silinen notu çıkarır ve geri yükler. + Kuyruk boşsa None döner. + """ + if not self._queue: + logger.debug("Undo kuyruğu boş.") + return None + note_data = self._queue.pop() + logger.debug("Geri alınıyor: %s (kalan: %d)", note_data.get("id"), len(self._queue)) + if self._on_restore: + self._on_restore(note_data) + return note_data + + def can_undo(self) -> bool: + """Geri alınabilir işlem var mı?""" + return len(self._queue) > 0 + + def clear(self) -> None: + """Kuyruğu temizler (uygulama kapatıldığında çağrılır).""" + self._queue.clear() + logger.debug("Undo kuyruğu temizlendi.") + + @property + def count(self) -> int: + return len(self._queue)