from PySide6.QtWidgets import (QDialog, QWidget, QVBoxLayout, QHBoxLayout, QFormLayout, QCheckBox, QPushButton, QSpinBox, QComboBox, QColorDialog, QMessageBox, QLineEdit, QLabel, QFileDialog) from PySide6.QtCore import QSettings, Qt import os import json from datetime import datetime class Preferences: def __init__(self): self.settings = QSettings("Codeium", "GestaoDocumentos") self.load_defaults() def load_defaults(self): if not self.settings.contains("default_save_path"): self.settings.setValue("default_save_path", "") if not self.settings.contains("auto_preview"): self.settings.setValue("auto_preview", True) if not self.settings.contains("max_recent_docs"): self.settings.setValue("max_recent_docs", 10) if not self.settings.contains("theme"): self.settings.setValue("theme", "light") if not self.settings.contains("preview_size"): self.settings.setValue("preview_size", "medium") if not self.settings.contains("auto_version"): self.settings.setValue("auto_version", True) if not self.settings.contains("backup_reminder_days"): self.settings.setValue("backup_reminder_days", 7) def get(self, key, type=None): return self.settings.value(key, type=type) def set(self, key, value): self.settings.setValue(key, value) def get_save_path(self): return self.settings.value("default_save_path", type=str) def get_auto_save(self): return bool(self.settings.value("auto_preview", type=bool)) def get_recent_limit(self): return self.settings.value("max_recent_docs", type=int) def get_theme(self): return self.settings.value("theme", type=str) class PreferencesDialog(QDialog): def __init__(self, preferences, parent=None): super().__init__(parent) self.preferences = preferences self.setWindowTitle("Preferências") self.setup_ui() def setup_ui(self): layout = QVBoxLayout(self) # Save path settings save_path_layout = QHBoxLayout() self.save_path_edit = QLineEdit(self.preferences.get_save_path()) save_path_layout.addWidget(self.save_path_edit) browse_btn = QPushButton("Procurar...") browse_btn.clicked.connect(self.browse_save_path) save_path_layout.addWidget(browse_btn) layout.addLayout(save_path_layout) # Auto-save settings auto_save_check = QCheckBox("Salvar automaticamente") auto_save_check.setChecked(self.preferences.get_auto_save()) layout.addWidget(auto_save_check) # Recent documents limit recent_limit_layout = QHBoxLayout() recent_limit_layout.addWidget(QLabel("Número de documentos recentes:")) recent_limit_spin = QSpinBox() recent_limit_spin.setRange(5, 50) recent_limit_spin.setValue(self.preferences.get_recent_limit()) recent_limit_layout.addWidget(recent_limit_spin) layout.addLayout(recent_limit_layout) # Theme selection theme_layout = QHBoxLayout() theme_layout.addWidget(QLabel("Tema:")) theme_combo = QComboBox() theme_combo.addItems(["Claro", "Escuro"]) theme_combo.setCurrentText(self.preferences.get_theme()) theme_layout.addWidget(theme_combo) layout.addLayout(theme_layout) # Buttons button_layout = QHBoxLayout() save_btn = QPushButton("Salvar") save_btn.clicked.connect(self.save_preferences) button_layout.addWidget(save_btn) cancel_btn = QPushButton("Cancelar") cancel_btn.clicked.connect(self.reject) button_layout.addWidget(cancel_btn) layout.addLayout(button_layout) def browse_save_path(self): path = QFileDialog.getExistingDirectory( self, "Selecionar Pasta Padrão", self.save_path_edit.text() ) if path: self.save_path_edit.setText(path) def save_preferences(self): try: self.preferences.set("default_save_path", self.save_path_edit.text()) # self.preferences.set("auto_save", self.auto_save_check.isChecked()) # self.preferences.set("max_recent_docs", self.recent_limit_spin.value()) # self.preferences.set("theme", self.theme_combo.currentText()) QMessageBox.information(self, "Sucesso", "Preferências salvas com sucesso!") self.close() except Exception as e: QMessageBox.critical(self, "Erro", f"Erro ao salvar preferências: {str(e)}") class RecentDocuments: def __init__(self, preferences): self.preferences = preferences self.recent_file = os.path.join( os.path.dirname(os.path.abspath(__file__)), "recent_docs.json" ) self.load_recent_docs() def load_recent_docs(self): try: if os.path.exists(self.recent_file): with open(self.recent_file, 'r') as f: self.recent_docs = json.load(f) else: self.recent_docs = [] except Exception: self.recent_docs = [] def save_recent_docs(self): try: with open(self.recent_file, 'w') as f: json.dump(self.recent_docs, f) except Exception as e: print(f"Error saving recent documents: {str(e)}") def add_document(self, doc_id, doc_name): # Remove if already exists self.recent_docs = [doc for doc in self.recent_docs if doc['id'] != doc_id] # Add to start of list self.recent_docs.insert(0, { 'id': doc_id, 'name': doc_name, 'timestamp': datetime.now().isoformat() }) # Trim list max_recent = int(self.preferences.get("max_recent_docs")) self.recent_docs = self.recent_docs[:max_recent] self.save_recent_docs() def get_recent_docs(self): return self.recent_docs def clear_recent_docs(self): self.recent_docs = [] self.save_recent_docs()