Astro-Session-Watcher/ui/dialogs/instructions_dialog.py

152 lines
6.6 KiB
Python
Raw Permalink Normal View History

2026-05-07 17:15:56 +03:00
"""
InstructionsDialog - диалог с инструкцией на английском (tkinter)
2026-05-07 17:15:56 +03:00
"""
import tkinter as tk
from tkinter import ttk
2026-05-07 17:15:56 +03:00
class InstructionsDialog(tk.Toplevel):
"""Диалог с подробной инструкцией пользователя на английском"""
2026-05-07 17:15:56 +03:00
def __init__(self, parent):
super().__init__(parent)
self.parent = parent
2026-05-07 17:15:56 +03:00
self.title("Instructions")
self.geometry("750x600")
self.minsize(700, 500)
self.transient(parent)
self.grab_set()
2026-05-07 17:15:56 +03:00
self._create_ui()
self._center_window()
2026-05-07 17:15:56 +03:00
def _create_ui(self):
# Main frame
main_frame = ttk.Frame(self, padding="15")
main_frame.pack(fill='both', expand=True)
# Title
ttk.Label(main_frame, text="Astro Session Watcher - User Guide", font=('Segoe UI', 16, 'bold')).pack(pady=(0, 10))
2026-05-07 17:15:56 +03:00
# Text with scrollbar
text_frame = ttk.Frame(main_frame)
text_frame.pack(fill='both', expand=True)
2026-05-07 17:15:56 +03:00
scrollbar = ttk.Scrollbar(text_frame)
scrollbar.pack(side='right', fill='y')
self.text_widget = tk.Text(text_frame, yscrollcommand=scrollbar.set, wrap='word',
bg='#1e1e1e', fg='#e0e0e0', font=('Consolas', 10))
self.text_widget.pack(fill='both', expand=True)
scrollbar.config(command=self.text_widget.yview)
# Instructions text
instructions = """======================= ASTRO SESSION WATCHER =======================
The application automatically tracks new photos in the selected folder,
sorts them by observation targets and maintains detailed logs.
📸 WHAT IS IT FOR?
Automatically distribute shots into target folders
Keep a log of each session
Don't miss a single frame when changing targets
Store equipment and celestial bodies history
🚀 HOW IT WORKS?
1. Select the folder where your camera saves photos
2. The app creates a session folder: "AstroSession_YYYY-MM-DD"
3. Each target gets its own subfolder inside the session folder
4. When you change target (press "New Target"), all accumulated files are moved
5. When you end the session, remaining files are moved to the last target
📝 STEP-BY-STEP GUIDE
1. FIRST LAUNCH (SETUP)
Go to "File" "Equipment" and add your cameras and lenses/telescopes
Go to "File" "Celestial Bodies" and add your observation targets
All data is saved automatically in config files
2. STARTING A SESSION
1. Click "Browse" and select the folder where your camera saves photos
2. Select camera and lens/telescope from dropdowns
3. Enter target name (or select from celestial bodies list)
4. Click "▶ Start Tracking"
After launch:
Status changes to "● ON AIR" with blinking
"New Target" button becomes active
Session folder "AstroSession_date" is created
Inside - folder with your first target
3. CHANGING TARGET DURING SESSION
1. Click "New Target" button (or Ctrl+Shift+N)
2. Enter new target name
3. The app automatically moves all accumulated files to the previous target
4. Creates new folder for the next target
5. Resets file counter
6. Continues tracking
💡 IMPORTANT: If there are files in the watch folder before changing target,
they will NOT be lost - all will be moved!
4. ENDING A SESSION
1. Click "■ Stop" (or Ctrl+X)
2. The app moves all remaining files to the last target
3. Writes final session log
4. Shows dialog with option to open session folder
5. Restores interface for new session
HOTKEYS
Ctrl + O Select watch folder
Ctrl + E Equipment management
Ctrl + B Celestial bodies management
Ctrl + S Start session
Ctrl + X Stop session
Ctrl + F Open current session folder
Ctrl + Shift+N Create new target
F1 About
F2 This instruction
🔧 CONFIG FILES
2026-05-07 17:15:56 +03:00
📄 astro_settings.json cameras, lenses, last folder
📄 celestial_bodies.json list of celestial bodies
All files are stored in the program folder. You can edit them manually.
📧 TECHNICAL SUPPORT
Text me: norvicdev@gmail.com
Developer: Vic Sergeev
Version: 0.4.0-alpha
2026-05-07 17:15:56 +03:00
"""
self.text_widget.insert('1.0', instructions)
self.text_widget.config(state='disabled')
2026-05-07 17:15:56 +03:00
# Close button
ttk.Button(main_frame, text="Close", command=self.destroy).pack(pady=10)
2026-05-07 17:15:56 +03:00
def _center_window(self):
self.update_idletasks()
x = self.parent.winfo_x() + (self.parent.winfo_width() // 2) - (self.winfo_width() // 2)
y = self.parent.winfo_y() + (self.parent.winfo_height() // 2) - (self.winfo_height() // 2)
self.geometry(f'+{x}+{y}')