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()