177 lines
6.3 KiB
Python
177 lines
6.3 KiB
Python
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()
|