Skip to content

Commit fd29f04

Browse files
[FIX] corrigindo imports
1 parent 4b749ba commit fd29f04

File tree

7 files changed

+220
-25
lines changed

7 files changed

+220
-25
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,4 +157,4 @@ cython_debug/
157157
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
158158
# and can be added to the global gitignore or merged into this file. For a more nuclear
159159
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
160-
#.idea/
160+
.idea/

MarkViewDesktop/editor/actions/edit_actions.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,10 @@ def onTabRightClick(self, position):
7676
# Exibe o menu de contexto na posição do cursor
7777
menu.exec_(self.ui.tab_widget.tabBar().mapToGlobal(position))
7878
# ... incluir updatePreview, inteliComplete, updateCompleteHtml, getMarkdownText, scroll_to_bottom etc
79-
def eventFilter(self, obj, event):
80-
if obj == self.ui.editArea and event.type() == QtCore.QEvent.KeyRelease and event.key() == QtCore.Qt.Key_Return:
81-
self.inteliComplete()
82-
return super().eventFilter(obj, event)
79+
# def eventFilter(self, obj, event):
80+
# if obj == self.ui.editArea and event.type() == QtCore.QEvent.KeyRelease and event.key() == QtCore.Qt.Key_Return:
81+
# self.inteliComplete()
82+
# return super().eventFilter(obj, event)
8383

8484
def inteliComplete(self):
8585
cursor = self.ui.editArea.textCursor()

MarkViewDesktop/editor/actions/file_actions.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
from PySide6.QtWidgets import QFileDialog, QMessageBox, QInputDialog, QTextEdit, QWidget, QVBoxLayout
1+
from PySide6.QtWidgets import (
2+
QFileDialog, QMessageBox, QInputDialog, QTextEdit, QWidget, QVBoxLayout
3+
)
24
import os
35

46
class FileActionsMixin:

MarkViewDesktop/editor/editor_core.py

Lines changed: 41 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
1+
from PySide6 import QtGui
12
from PySide6.QtWidgets import QMainWindow, QTextEdit
23
from PySide6.QtCore import Qt, QEvent
34
from PySide6.QtGui import QIcon, QTextCursor
45
from ui.ui_docV import Ui_MainWindow
6+
from ui.main_window import MainWindow
57

6-
from editor.actions.edit_actions import EditActionsMixin
7-
from editor.actions.file_actions import FileActionsMixin
8+
from actions.edit_actions import EditActionsMixin
9+
from actions.file_actions import FileActionsMixin
810

9-
class MarkdownEditor(QMainWindow, EditActionsMixin, FileActionsMixin):
11+
# class MarkdownEditor(QMainWindow, EditActionsMixin, FileActionsMixin):
12+
class MarkdownEditor(MainWindow, EditActionsMixin, FileActionsMixin):
1013

1114
def __init__(self, file_to_open=None):
1215
super().__init__()
@@ -27,25 +30,49 @@ def __init__(self, file_to_open=None):
2730
if file_to_open:
2831
self.open_file(file_to_open)
2932
self.setFocus()
33+
self.ui.header_frame.installEventFilter(self)
34+
self.ui.tab_widget.installEventFilter(self)
35+
self.ui.splitter.installEventFilter(self)
3036

3137
def connect_buttons(self):
3238
self.ui.close_btn.clicked.connect(lambda: self.close())
3339
self.ui.minimize_btn.clicked.connect(lambda: self.showMinimized())
34-
self.ui.maxmize_btn.clicked.connect(lambda: self.restore_or_maximize())
40+
self.ui.maxmize_btn.clicked.connect(lambda: self.toggle_maximize_restore())
3541

36-
def restore_or_maximize(self):
37-
self.showNormal() if self.isMaximized() else self.showMaximized()
42+
# def restore_or_maximize(self):
43+
# self.showNormal() if self.isMaximized() else self.showMaximized()
3844

39-
def mousePressEvent(self, event):
40-
if event.button() == Qt.LeftButton:
41-
self._mousePressPos = event.position().toPoint()
45+
# def mousePressEvent(self, event):
46+
# if event.button() == Qt.LeftButton and not self.isMaximized():
47+
# # Verifica se o clique foi na área permitida para arrastar (ex.: barra de título)
48+
# if self.is_draggable_area(event.position().toPoint()):
49+
# self._mousePressPos = event.globalPosition().toPoint()
50+
# self._windowPos = self.pos()
51+
# super().mousePressEvent(event)
4252

43-
def mouseMoveEvent(self, event):
44-
if self._mousePressPos is not None:
45-
self.move(self.geometry().topLeft() + event.position().toPoint() - self._mousePressPos)
53+
# def is_draggable_area(self, pos):
54+
# # Define a área onde a janela pode ser arrastada (ex.: barra de título)
55+
# # Ajuste conforme o layout da sua UI
56+
# title_bar_height = 40 # Altura da barra de título (ajuste conforme necessário)
57+
# return pos.y() < title_bar_height and pos.x() < self.width()
4658

47-
def mouseReleaseEvent(self, event):
48-
self._mousePressPos = None
59+
# # def mouseMoveEvent(self, event):
60+
# # if self._mousePressPos is not None:
61+
# # self.move(self.geometry().topLeft() + event.position().toPoint() - self._mousePressPos)
62+
# def mouseMoveEvent(self, event):
63+
# # Move a janela apenas se o arrastar foi iniciado
64+
# if self._mousePressPos is not None:
65+
# global_pos = event.globalPosition().toPoint()
66+
# delta = global_pos - self._mousePressPos
67+
# self.move(self._windowPos + delta)
68+
# super().mouseMoveEvent(event)
69+
# # def mouseMoveEvent(self, event):
70+
# # # Move a janela com base na posição do mouse
71+
# # if self._mousePressPos is not None:
72+
# # self.move(self.pos() +event.position().toPoint() - self._mousePressPos)
73+
74+
# def mouseReleaseEvent(self, event):
75+
# self._mousePressPos = None
4976

5077
def keyPressEvent(self, event):
5178
if event.type() == QEvent.KeyPress:

MarkViewDesktop/main.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,8 @@
55
def main():
66

77
app = QApplication(sys.argv)
8-
98
editor = MarkdownEditor()
109
editor.show()
11-
12-
1310
sys.exit(app.exec())
1411

1512
if __name__ == "__main__":

MarkViewDesktop/ui/main_window.py

Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
1+
import sys
2+
import logging
3+
from PySide6.QtWidgets import (
4+
QApplication,
5+
QMainWindow,
6+
QPushButton,
7+
QHBoxLayout,
8+
QVBoxLayout,
9+
QWidget,
10+
QLabel, QSizePolicy
11+
)
12+
from PySide6.QtCore import Qt, QPoint, QEvent
13+
14+
# logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
15+
16+
17+
class MainWindow(QMainWindow):
18+
def __init__(self):
19+
super().__init__()
20+
21+
self.setWindowFlags(Qt.FramelessWindowHint)
22+
self.setAttribute(Qt.WA_TranslucentBackground)
23+
self.setStyleSheet("background-color: rgb(150, 150, 150);")
24+
self.setGeometry(100, 100, 600, 450)
25+
self.border_size = 5
26+
27+
# self.main_layout = QVBoxLayout()
28+
# self.main_layout.setContentsMargins(0, 0, 0, 0)
29+
# self.main_layout.setSpacing(0)
30+
# central_widget = QWidget()
31+
# central_widget.setLayout(self.main_layout)
32+
# self.setCentralWidget(central_widget)
33+
#
34+
# self.title_bar = QWidget()
35+
# self.title_bar.setObjectName("BarraDeTitulo")
36+
# self.title_bar.setFixedHeight(40)
37+
# self.title_bar.setStyleSheet("background-color: #333; color: white;")
38+
# self.title_bar.setMouseTracking(True)
39+
# title_bar_layout = QHBoxLayout(self.title_bar)
40+
# title_bar_layout.setContentsMargins(0, 0, 0, 0)
41+
# title_bar_layout.setSpacing(0)
42+
# self.title_label = QLabel("Movimento e Redimensionamento Nativo")
43+
# title_bar_layout.addWidget(self.title_label)
44+
# title_bar_layout.addStretch()
45+
#
46+
# self.minimize_button = QPushButton("−");
47+
# # self.minimize_button.setFixedSize(30, 25);
48+
# self.minimize_button.setStyleSheet("background-color: #555; color: white; border: none; font-size: 16px;");
49+
# self.minimize_button.clicked.connect(self.showMinimized);
50+
# title_bar_layout.addWidget(self.minimize_button)
51+
# self.maximize_button = QPushButton("□");
52+
# self.maximize_button.setSizePolicy(QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding));
53+
# self.maximize_button.setContentsMargins(0, 0, 20, 0);
54+
# # self.maximize_button.setFixedSize(30, 25);
55+
# self.maximize_button.setStyleSheet("background-color: #555; color: white; border: none; font-size: 16px;");
56+
# self.maximize_button.clicked.connect(self.toggle_maximize_restore);
57+
# title_bar_layout.addWidget(self.maximize_button)
58+
# self.close_button = QPushButton("X");
59+
# # self.close_button.setFixedSize(30, 25);
60+
# self.close_button.setStyleSheet("background-color: #f00; color: white; border: none; font-size: 16px;");
61+
# self.close_button.clicked.connect(self.close);
62+
# title_bar_layout.addWidget(self.close_button)
63+
# title_bar_layout.setStretchFactor(self.title_label, 15)
64+
#
65+
# self.content_widget = QWidget()
66+
# self.content_widget.setObjectName("mainContent")
67+
# self.content_layout = None
68+
# # self.content_layout = QVBoxLayout(self.content_widget)
69+
# # self.content_layout.setContentsMargins(0, 0, 0, 0)
70+
# # self.content_layout.setSpacing(0)
71+
#
72+
# self.main_layout.addWidget(self.title_bar)
73+
# self.main_layout.addWidget(self.content_widget)
74+
#
75+
# # # logging.info("Instalando event filter na BarraDeTitulo e AreaDeConteudo")
76+
# self.title_bar.installEventFilter(self)
77+
# self.content_widget.installEventFilter(self)
78+
self.installEventFilter(self)
79+
80+
def update_title(self, new_title: str):
81+
"""
82+
Atualiza o texto do título na barra de título.
83+
84+
@param new_title: Novo texto para o título da janela.
85+
"""
86+
self.title_label.setText(new_title)
87+
88+
def set_content_layout(self, new_layout):
89+
"""
90+
Substitui o layout do content_widget pelo novo_layout.
91+
"""
92+
self.content_layout = new_layout
93+
current_layout = self.content_widget.layout()
94+
if current_layout is not None:
95+
current_layout.deleteLater()
96+
97+
self.content_widget.setLayout(new_layout)
98+
99+
new_layout.setContentsMargins(0, 0, 0, 0)
100+
new_layout.setSpacing(0)
101+
102+
def toggle_maximize_restore(self):
103+
if self.isMaximized():
104+
self.showNormal()
105+
else:
106+
self.showMaximized()
107+
108+
def get_edge(self, pos: QPoint):
109+
rect = self.rect()
110+
left = pos.x() < self.border_size
111+
top = pos.y() < self.border_size
112+
right = pos.x() > rect.width() - self.border_size
113+
bottom = pos.y() > rect.height() - self.border_size
114+
115+
# if top and left: return Qt.TopEdge | Qt.LeftEdge
116+
if top and right: return Qt.TopEdge | Qt.RightEdge
117+
if bottom and left: return Qt.BottomEdge | Qt.LeftEdge
118+
if bottom and right: return Qt.BottomEdge | Qt.RightEdge
119+
if left: return Qt.LeftEdge
120+
# if top: return Qt.TopEdge
121+
if right: return Qt.RightEdge
122+
if bottom: return Qt.BottomEdge
123+
return None
124+
125+
def eventFilter(self, watched_object, event):
126+
obj_name = watched_object.objectName() or "QMainWindow"
127+
128+
if event.type() == QEvent.Type.MouseMove:
129+
global_pos = event.globalPosition().toPoint()
130+
pos_na_janela = self.mapFromGlobal(global_pos)
131+
132+
edge = self.get_edge(pos_na_janela)
133+
if edge:
134+
if edge == (Qt.TopEdge | Qt.LeftEdge) or edge == (Qt.BottomEdge | Qt.RightEdge):
135+
self.setCursor(Qt.SizeFDiagCursor)
136+
elif edge == (Qt.TopEdge | Qt.RightEdge) or edge == (Qt.BottomEdge | Qt.LeftEdge):
137+
self.setCursor(Qt.SizeBDiagCursor)
138+
elif edge == Qt.LeftEdge or edge == Qt.RightEdge:
139+
self.setCursor(Qt.SizeHorCursor)
140+
else:
141+
self.setCursor(Qt.SizeVerCursor)
142+
else:
143+
self.unsetCursor()
144+
145+
elif event.type() == QEvent.Type.Leave:
146+
# logging.info(f"Mouse saiu do widget {obj_name}. Restaurando cursor.")
147+
self.unsetCursor()
148+
149+
elif event.type() == QEvent.Type.MouseButtonPress:
150+
if event.button() == Qt.LeftButton:
151+
global_pos = event.globalPosition().toPoint()
152+
pos_na_janela = self.mapFromGlobal(global_pos)
153+
edge = self.get_edge(pos_na_janela)
154+
155+
if edge:
156+
self.windowHandle().startSystemResize(edge)
157+
elif self.title_bar.rect().contains(self.title_bar.mapFromGlobal(global_pos)):
158+
self.windowHandle().startSystemMove()
159+
160+
return super().eventFilter(watched_object, event)
161+
162+
163+
if __name__ == "__main__":
164+
app = QApplication(sys.argv)
165+
janela = MainWindow()
166+
janela.show()
167+
sys.exit(app.exec())

MarkViewDesktop/ui/ui_docV.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ def setupUi(self, MainWindow):
175175

176176
self.headerVL.addLayout(self.headerLayout)
177177
self.centralVL.addWidget(self.header_frame)
178-
178+
MainWindow.title_bar = self.header_frame
179179
# ================= Fonte style and Size ===================
180180
self.fontSize_sp = QSpinBox(self.buttons_frame)
181181
self.fontSize_sp.setStyleSheet(self.style_utils)
@@ -293,8 +293,10 @@ def setupUi(self, MainWindow):
293293
#self.previewArea.loadFinished.connect(self.scroll_to_bottom)
294294
#========================================= adding previewArea to splitter
295295
self.splitter.addWidget(self.previewArea)
296-
296+
self.centralwidget.installEventFilter(MainWindow)
297+
self.previewArea.installEventFilter(MainWindow)
297298
MainWindow.setCentralWidget(self.centralwidget)
299+
MainWindow.content_widget = self.splitter
298300

299301
self.statusbar = QtWidgets.QStatusBar(MainWindow)
300302
self.statusbar.setObjectName("statusbar")

0 commit comments

Comments
 (0)