DOMYWO/src/ui.py
2025-09-18 13:25:40 +02:00

134 lines
5.0 KiB
Python
Executable File

import sys
from PyQt6.QtWidgets import (
QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QPushButton,
QLabel, QLineEdit, QTextEdit, QMenuBar, QMenu, QStatusBar
)
from PyQt6.QtCore import Qt, QTimer
from PyQt6.QtGui import QColor, QPalette
from src.settings import SettingsWindow
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("DOMYWO - The Lazy Social Media Creator")
self.setGeometry(100, 100, 800, 600)
# Create central widget and layout
central_widget = QWidget()
self.setCentralWidget(central_widget)
main_layout = QVBoxLayout(central_widget)
# Status bar for logging
self.status_bar = QStatusBar()
self.setStatusBar(self.status_bar)
# Create menu bar
menubar = self.menuBar()
program_menu = menubar.addMenu("&DOMYWO")
settings_menu = menubar.addMenu("&Settings")
about_menu = menubar.addMenu("&About")
# Connect menu actions
settings_action = settings_menu.addAction("Settings")
settings_action.triggered.connect(self.open_settings)
# Start button and status
start_layout = QHBoxLayout()
self.start_button = QPushButton("Start")
self.start_button.clicked.connect(self.toggle_start)
self.start_status = QLabel("Ready")
self.start_status.setFixedHeight(25)
self.update_status_color(self.start_status, "Ready")
start_layout.addWidget(self.start_button)
start_layout.addWidget(self.start_status)
start_layout.addStretch()
main_layout.addLayout(start_layout)
# LLM Prompt Generation section
main_layout.addWidget(QLabel("LLM Prompt Generation"))
self.llm_prompt_status = self.create_status_field("Ready")
main_layout.addWidget(self.llm_prompt_status)
# Frame Generation section
main_layout.addWidget(QLabel("Start Frame Generation"))
self.frame_generation_status = self.create_status_field("Ready")
main_layout.addWidget(self.frame_generation_status)
# End Frame Generation section
main_layout.addWidget(QLabel("End Frame Generation"))
self.end_frame_status = self.create_status_field("Ready")
main_layout.addWidget(self.end_frame_status)
# Analyze Images section
main_layout.addWidget(QLabel("Analyze Images and prompt Video"))
self.analyze_status = self.create_status_field("Ready")
main_layout.addWidget(self.analyze_status)
# Image/video display area
self.image_display = QLabel("Generated content will appear here")
self.image_display.setFixedHeight(200)
self.image_display.setStyleSheet("border: 1px solid gray;")
main_layout.addWidget(self.image_display)
# Log window
main_layout.addWidget(QLabel("Log"))
self.log_window = QTextEdit()
self.log_window.setReadOnly(True)
self.log_window.setMaximumHeight(150)
main_layout.addWidget(self.log_window)
# Timer for status simulation
self.timer = QTimer()
self.timer.timeout.connect(self.simulate_progress)
self.timer.start(2000) # Update every 2 seconds
def create_status_field(self, initial_status):
layout = QHBoxLayout()
run_button = QPushButton("Run this Step only")
status_field = QLineEdit()
status_field.setReadOnly(True)
status_field.setText(initial_status)
status_field.setFixedHeight(25)
self.update_status_color(status_field, initial_status)
layout.addWidget(run_button)
layout.addWidget(status_field)
layout.addStretch()
container = QWidget()
container.setLayout(layout)
return container
def update_status_color(self, field, status):
palette = field.palette()
if "Running" in status:
palette.setColor(QPalette.ColorRole.Text, QColor("yellow"))
elif "Error" in status:
palette.setColor(QPalette.ColorRole.Text, QColor("red"))
else:
palette.setColor(QPalette.ColorRole.Text, QColor("green"))
field.setPalette(palette)
def toggle_start(self):
if self.start_button.text() == "Start":
self.start_button.setText("Stop")
self.start_status.setText("Running")
self.update_status_color(self.start_status, "Running")
self.log_window.append("Process started")
else:
self.start_button.setText("Start")
self.start_status.setText("Ready")
self.update_status_color(self.start_status, "Ready")
self.log_window.append("Process stopped")
def simulate_progress(self):
# This is just a simulation - in real app you'd update from actual processes
pass
def open_settings(self):
self.settings_window = SettingsWindow()
self.settings_window.show()