Carregar ficheiros para "/"

This commit is contained in:
2024-12-19 09:03:36 -08:00
parent 30b1c5b775
commit 39dbb95672
5 changed files with 1102 additions and 0 deletions

164
document_viewer.py Normal file
View File

@ -0,0 +1,164 @@
from PySide6.QtWidgets import (QWidget, QVBoxLayout, QHBoxLayout, QPushButton,
QLabel, QScrollArea, QSplitter, QTabWidget)
from PySide6.QtCore import Qt, Signal
from PySide6.QtGui import QImage, QPixmap
import fitz
from database import get_session
from models import Document
from comments import CommentsList
from preferences import Preferences
class DocumentViewer(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.current_document = None
self.current_page = 0
self.preferences = Preferences()
self.setup_ui()
def setup_ui(self):
layout = QVBoxLayout(self)
# Toolbar
toolbar = QHBoxLayout()
self.prev_btn = QPushButton("Anterior")
self.prev_btn.clicked.connect(self.prev_page)
toolbar.addWidget(self.prev_btn)
self.page_label = QLabel("Página 0 de 0")
toolbar.addWidget(self.page_label)
self.next_btn = QPushButton("Próxima")
self.next_btn.clicked.connect(self.next_page)
toolbar.addWidget(self.next_btn)
toolbar.addStretch()
self.zoom_in_btn = QPushButton("Zoom +")
self.zoom_in_btn.clicked.connect(self.zoom_in)
toolbar.addWidget(self.zoom_in_btn)
self.zoom_out_btn = QPushButton("Zoom -")
self.zoom_out_btn.clicked.connect(self.zoom_out)
toolbar.addWidget(self.zoom_out_btn)
layout.addLayout(toolbar)
# Main content area
splitter = QSplitter(Qt.Horizontal)
# Document view
self.scroll_area = QScrollArea()
self.scroll_area.setWidgetResizable(True)
self.document_label = QLabel()
self.document_label.setAlignment(Qt.AlignCenter)
self.scroll_area.setWidget(self.document_label)
splitter.addWidget(self.scroll_area)
# Side panel with tabs
side_panel = QTabWidget()
# Comments tab
self.comments_list = CommentsList()
side_panel.addTab(self.comments_list, "Comentários")
splitter.addWidget(side_panel)
# Set initial splitter sizes
splitter.setSizes([int(self.width() * 0.7), int(self.width() * 0.3)])
layout.addWidget(splitter)
self.zoom_level = 1.0
self.doc = None
self.update_navigation()
def load_document(self, doc_id):
try:
session = get_session()
document = session.query(Document).get(doc_id)
if document and document.file_path:
self.current_document = doc_id
self.doc = fitz.open(document.file_path)
self.current_page = 0
self.zoom_level = 1.0
self.update_page()
self.update_navigation()
# Load comments
self.comments_list.load_document(doc_id)
# Add to recent documents if auto_preview is enabled
if self.preferences.get("auto_preview"):
from preferences import RecentDocuments
recent = RecentDocuments(self.preferences)
recent.add_document(doc_id, document.file_name)
session.close()
except Exception as e:
print(f"Error loading document: {str(e)}")
def update_page(self):
if not self.doc:
return
try:
page = self.doc[self.current_page]
zoom = self.zoom_level
# Adjust zoom based on preview size preference
preview_size = self.preferences.get("preview_size")
if preview_size == "small":
zoom *= 0.8
elif preview_size == "large":
zoom *= 1.2
mat = fitz.Matrix(zoom, zoom)
pix = page.get_pixmap(matrix=mat)
img = QImage(pix.samples, pix.width, pix.height,
pix.stride, QImage.Format_RGB888)
pixmap = QPixmap.fromImage(img)
self.document_label.setPixmap(pixmap)
self.page_label.setText(f"Página {self.current_page + 1} de {len(self.doc)}")
except Exception as e:
print(f"Error updating page: {str(e)}")
def update_navigation(self):
has_doc = self.doc is not None
has_prev = has_doc and self.current_page > 0
has_next = has_doc and self.current_page < len(self.doc) - 1
self.prev_btn.setEnabled(has_prev)
self.next_btn.setEnabled(has_next)
self.zoom_in_btn.setEnabled(has_doc)
self.zoom_out_btn.setEnabled(has_doc)
def prev_page(self):
if self.doc and self.current_page > 0:
self.current_page -= 1
self.update_page()
self.update_navigation()
def next_page(self):
if self.doc and self.current_page < len(self.doc) - 1:
self.current_page += 1
self.update_page()
self.update_navigation()
def zoom_in(self):
self.zoom_level *= 1.2
self.update_page()
def zoom_out(self):
self.zoom_level /= 1.2
self.update_page()
def closeEvent(self, event):
if self.doc:
self.doc.close()
super().closeEvent(event)