Files
Inf_Tec_Auto/preferences.py
2024-12-19 09:04:00 -08:00

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