拖拽释放前的移除操作完成了
This commit is contained in:
parent
1bd5fd9a29
commit
c878240d9e
|
@ -6,8 +6,9 @@
|
||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="55c45e43-6fd9-4244-902d-86f83a348f5b" name="Changes" comment="">
|
<list default="true" id="55c45e43-6fd9-4244-902d-86f83a348f5b" name="Changes" comment="">
|
||||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/DockPanel.py" beforeDir="false" afterPath="$PROJECT_DIR$/DockPanel.py" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/Manager.py" beforeDir="false" afterPath="$PROJECT_DIR$/Manager.py" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/Manager.py" beforeDir="false" afterPath="$PROJECT_DIR$/Manager.py" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/test.py" beforeDir="false" afterPath="$PROJECT_DIR$/test.py" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/SplitPanel.py" beforeDir="false" afterPath="$PROJECT_DIR$/SplitPanel.py" afterDir="false" />
|
||||||
</list>
|
</list>
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
|
|
|
@ -96,6 +96,10 @@ class DockPanel(QWidget):
|
||||||
def reset_parent_res(self, pinst):
|
def reset_parent_res(self, pinst):
|
||||||
self.parent_res = pinst
|
self.parent_res = pinst
|
||||||
|
|
||||||
|
def setParent(self, a0):
|
||||||
|
self.drag_header.setParent(self)
|
||||||
|
super(DockPanel, self).setParent(a0)
|
||||||
|
|
||||||
def __adjust_accept(self, view: QWidget, pt: QPoint):
|
def __adjust_accept(self, view: QWidget, pt: QPoint):
|
||||||
drag_trans = QDrag(self)
|
drag_trans = QDrag(self)
|
||||||
mine_data = QMimeData()
|
mine_data = QMimeData()
|
||||||
|
@ -111,6 +115,9 @@ class DockPanel(QWidget):
|
||||||
def sync_status(self):
|
def sync_status(self):
|
||||||
self.drag_header.setVisible(self.default_header)
|
self.drag_header.setVisible(self.default_header)
|
||||||
|
|
||||||
|
def paintEvent(self, a0):
|
||||||
|
super(DockPanel, self).paintEvent(a0)
|
||||||
|
print(self.windowTitle() + "::" + str(self.isVisible()))
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
app=QApplication([])
|
app=QApplication([])
|
||||||
|
|
24
Manager.py
24
Manager.py
|
@ -1,4 +1,4 @@
|
||||||
from PyQt5.QtWidgets import QWidget, QApplication
|
from PyQt5.QtWidgets import QWidget, QApplication, QMainWindow
|
||||||
from PyQt5.QtCore import QObject, QEvent, QRect, QMargins, Qt, QMimeData
|
from PyQt5.QtCore import QObject, QEvent, QRect, QMargins, Qt, QMimeData
|
||||||
from PyQt5.QtGui import QPainter, QColor, QDragEnterEvent, QDropEvent
|
from PyQt5.QtGui import QPainter, QColor, QDragEnterEvent, QDropEvent
|
||||||
import re
|
import re
|
||||||
|
@ -18,6 +18,7 @@ class AcceptPanel(QWidget):
|
||||||
self.setAcceptDrops(True)
|
self.setAcceptDrops(True)
|
||||||
|
|
||||||
self.mgr_inst = mgr
|
self.mgr_inst = mgr
|
||||||
|
self.target_anchor :QWidget = None
|
||||||
|
|
||||||
def resizeEvent(self, a0):
|
def resizeEvent(self, a0):
|
||||||
total_rect = self.rect()
|
total_rect = self.rect()
|
||||||
|
@ -32,6 +33,7 @@ class AcceptPanel(QWidget):
|
||||||
|
|
||||||
def async_with(self, target_view: QWidget):
|
def async_with(self, target_view: QWidget):
|
||||||
self.resize(target_view.size())
|
self.resize(target_view.size())
|
||||||
|
self.target_anchor = target_view
|
||||||
|
|
||||||
def paintEvent(self, a0):
|
def paintEvent(self, a0):
|
||||||
super(AcceptPanel, self).paintEvent(a0)
|
super(AcceptPanel, self).paintEvent(a0)
|
||||||
|
@ -79,8 +81,26 @@ class AcceptPanel(QWidget):
|
||||||
if result:
|
if result:
|
||||||
view_id = result.group(1)
|
view_id = result.group(1)
|
||||||
adjust_view = self.mgr_inst.get_dockpanel(view_id)
|
adjust_view = self.mgr_inst.get_dockpanel(view_id)
|
||||||
|
target_view = self.target_anchor
|
||||||
|
|
||||||
|
# 移除源视图
|
||||||
|
parent_frame_rm = adjust_view.parent_res
|
||||||
|
self_siblings = parent_frame_rm.child()
|
||||||
|
if parent_frame_rm.parent_res is None:
|
||||||
|
main_window:QMainWindow = parent_frame_rm.parent()
|
||||||
|
views = [self_siblings[0], self_siblings[1]]
|
||||||
|
views.pop(views.index(adjust_view))
|
||||||
|
main_window.setCentralWidget(views[0])
|
||||||
|
else:
|
||||||
|
pparent_frame = parent_frame_rm.parent_res
|
||||||
|
if self_siblings[0] == adjust_view:
|
||||||
|
pparent_frame.replace_view(self_siblings[1], parent_frame_rm)
|
||||||
|
else:
|
||||||
|
pparent_frame.replace_view(self_siblings[0], parent_frame_rm)
|
||||||
|
|
||||||
self.setVisible(False)
|
self.setVisible(False)
|
||||||
print(adjust_view)
|
|
||||||
|
|
||||||
|
|
||||||
class DragManager(QObject):
|
class DragManager(QObject):
|
||||||
__unique_inst: 'DragManager' = None
|
__unique_inst: 'DragManager' = None
|
||||||
|
|
|
@ -35,15 +35,19 @@ class DragSplitter(QFrame):
|
||||||
|
|
||||||
|
|
||||||
class SplitPanel(QWidget):
|
class SplitPanel(QWidget):
|
||||||
def __init__(self, a: DockPanel, b: DockPanel, split: SplitType, parent:QWidget = None):
|
def __init__(self, a: DockPanel, b: DockPanel, split: SplitType, parent:'SplitPanel' = None):
|
||||||
super(SplitPanel, self).__init__(parent)
|
super(SplitPanel, self).__init__(parent)
|
||||||
|
|
||||||
self.splitter_widget = DragSplitter(split, self)
|
self.splitter_widget = DragSplitter(split, self)
|
||||||
self.splitter_widget.adjustSignal[QPoint].connect(self.__splitter_adjust)
|
self.splitter_widget.adjustSignal[QPoint].connect(self.__splitter_adjust)
|
||||||
|
|
||||||
|
self.parent_res = parent
|
||||||
|
|
||||||
self.split_member = (a, b)
|
self.split_member = (a, b)
|
||||||
self.split_member[0].setParent(self)
|
self.split_member[0].setParent(self)
|
||||||
|
self.split_member[0].parent_res = self
|
||||||
self.split_member[1].setParent(self)
|
self.split_member[1].setParent(self)
|
||||||
|
self.split_member[1].parent_res = self
|
||||||
|
|
||||||
self.split_info = (split, 0.5, 7)
|
self.split_info = (split, 0.5, 7)
|
||||||
self.sync_status()
|
self.sync_status()
|
||||||
|
@ -78,8 +82,18 @@ class SplitPanel(QWidget):
|
||||||
|
|
||||||
handle_rect = QRect(0, int(height_a), self.width(), int(self.split_info[2]))
|
handle_rect = QRect(0, int(height_a), self.width(), int(self.split_info[2]))
|
||||||
self.splitter_widget.setGeometry(handle_rect)
|
self.splitter_widget.setGeometry(handle_rect)
|
||||||
|
|
||||||
|
self.split_member[0].setVisible(True)
|
||||||
|
self.split_member[1].setVisible(True)
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def paintEvent(self, a0):
|
||||||
|
super(SplitPanel, self).paintEvent(a0)
|
||||||
|
print(self.split_member[0].windowTitle() + "\\" + self.split_member[1].windowTitle())
|
||||||
|
|
||||||
|
def child(self):
|
||||||
|
return self.split_member[0], self.split_member[1], self.split_info[0]
|
||||||
|
|
||||||
def resizeEvent(self, a0):
|
def resizeEvent(self, a0):
|
||||||
super().resizeEvent(a0)
|
super().resizeEvent(a0)
|
||||||
self.sync_status()
|
self.sync_status()
|
||||||
|
@ -100,11 +114,14 @@ class SplitPanel(QWidget):
|
||||||
def replace_view(self, new: DockPanel, old: DockPanel):
|
def replace_view(self, new: DockPanel, old: DockPanel):
|
||||||
if old in self.__view_list() and new not in self.__view_list():
|
if old in self.__view_list() and new not in self.__view_list():
|
||||||
if self.split_member[0] == old:
|
if self.split_member[0] == old:
|
||||||
self.split_member = (new, self.split_member[1], self.split_member[2])
|
self.split_member = (new, self.split_member[1])
|
||||||
else:
|
else:
|
||||||
self.split_member = (self.split_member[0], new, self.split_member[2])
|
self.split_member = (self.split_member[0], new)
|
||||||
|
new.parent_res = self
|
||||||
|
new.setParent(self)
|
||||||
old.setParent(None)
|
old.setParent(None)
|
||||||
self.sync_status()
|
self.sync_status()
|
||||||
|
self.update()
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@ -115,8 +132,10 @@ if __name__ == "__main__":
|
||||||
|
|
||||||
a = DockPanel("docka", None, None)
|
a = DockPanel("docka", None, None)
|
||||||
b = DockPanel("dockb", None, None)
|
b = DockPanel("dockb", None, None)
|
||||||
|
c = DockPanel("dockc", None, None)
|
||||||
win = SplitPanel(a, b, SplitType.SPLIT_H)
|
win = SplitPanel(a, b, SplitType.SPLIT_H)
|
||||||
ow.setCentralWidget(win)
|
wino = SplitPanel(win, c, SplitType.SPLIT_V)
|
||||||
|
ow.setCentralWidget(wino)
|
||||||
|
|
||||||
ow.show()
|
ow.show()
|
||||||
app.exec()
|
app.exec()
|
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue