Skip to content

Commit de7c789

Browse files
committed
Convert transitions to no longer delete widgets, but rather create both with a shared model, and toggle visibility to the user.
1 parent cfc1750 commit de7c789

File tree

5 files changed

+40
-22
lines changed

5 files changed

+40
-22
lines changed

src/windows/main_window.py

+21-17
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ class MainWindow(QMainWindow, updates.UpdateWatcher):
8383
previewFrameSignal = pyqtSignal(int)
8484
refreshFrameSignal = pyqtSignal()
8585
refreshFilesSignal = pyqtSignal()
86+
refreshTransitionsSignal = pyqtSignal()
8687
LoadFileSignal = pyqtSignal(str)
8788
PlaySignal = pyqtSignal(int)
8889
PauseSignal = pyqtSignal()
@@ -822,10 +823,10 @@ def actionFilesShowImage_trigger(self, event):
822823
self.refreshFilesSignal.emit()
823824

824825
def actionTransitionsShowAll_trigger(self, event):
825-
self.transitionsTreeView.refresh_view()
826+
self.refreshTransitionsSignal.emit()
826827

827828
def actionTransitionsShowCommon_trigger(self, event):
828-
self.transitionsTreeView.refresh_view()
829+
self.refreshTransitionsSignal.emit()
829830

830831
def actionHelpContents_trigger(self, event):
831832
try:
@@ -1834,11 +1835,9 @@ def actionDetailsView_trigger(self, event):
18341835
# Transitions
18351836
elif app.context_menu_object == "transitions":
18361837
s.set("transitions_view", "details")
1837-
self.tabTransitions.layout().removeWidget(self.transitionsTreeView)
1838-
self.transitionsTreeView.deleteLater()
1839-
self.transitionsTreeView = None
1840-
self.transitionsTreeView = TransitionsTreeView(self.transition_model)
1841-
self.tabTransitions.layout().addWidget(self.transitionsTreeView)
1838+
self.transitionsListView.hide()
1839+
self.transitionsTreeView.show()
1840+
self.transitionsTreeView.clearSelection()
18421841

18431842
# Effects
18441843
elif app.context_menu_object == "effects":
@@ -1859,18 +1858,16 @@ def actionThumbnailView_trigger(self, event):
18591858
# Files
18601859
if app.context_menu_object == "files":
18611860
s.set("file_view", "thumbnail")
1861+
self.filesTreeView.hide()
18621862
self.filesListView.show()
18631863
self.filesListView.clearSelection()
1864-
self.filesTreeView.hide()
18651864

18661865
# Transitions
18671866
elif app.context_menu_object == "transitions":
18681867
s.set("transitions_view", "thumbnail")
1869-
self.tabTransitions.layout().removeWidget(self.transitionsTreeView)
1870-
self.transitionsTreeView.deleteLater()
1871-
self.transitionsTreeView = None
1872-
self.transitionsTreeView = TransitionsListView(self.transition_model)
1873-
self.tabTransitions.layout().addWidget(self.transitionsTreeView)
1868+
self.transitionsTreeView.hide()
1869+
self.transitionsListView.show()
1870+
self.transitionsListView.clearSelection()
18741871

18751872
# Effects
18761873
elif app.context_menu_object == "effects":
@@ -2540,8 +2537,8 @@ def __init__(self, mode=None):
25402537
self.tabFiles.layout().insertWidget(-1, self.filesTreeView)
25412538
self.tabFiles.layout().insertWidget(-1, self.filesListView)
25422539
if s.get("file_view") == "details":
2543-
self.filesTreeView.show()
25442540
self.filesListView.hide()
2541+
self.filesTreeView.show()
25452542
self.filesTreeView.setFocus()
25462543
else:
25472544
self.filesTreeView.hide()
@@ -2550,11 +2547,18 @@ def __init__(self, mode=None):
25502547

25512548
# Setup transitions tree
25522549
self.transition_model = TransitionsModel()
2550+
self.transitionsTreeView = TransitionsTreeView(self.transition_model)
2551+
self.transitionsListView = TransitionsListView(self.transition_model)
2552+
self.tabTransitions.layout().insertWidget(-1, self.transitionsTreeView)
2553+
self.tabTransitions.layout().insertWidget(-1, self.transitionsListView)
25532554
if s.get("transitions_view") == "details":
2554-
self.transitionsTreeView = TransitionsTreeView(self.transition_model)
2555+
self.transitionsListView.hide()
2556+
self.transitionsTreeView.show()
2557+
self.transitionsTreeView.setFocus()
25552558
else:
2556-
self.transitionsTreeView = TransitionsListView(self.transition_model)
2557-
self.tabTransitions.layout().addWidget(self.transitionsTreeView)
2559+
self.transitionsTreeView.hide()
2560+
self.transitionsListView.show()
2561+
self.transitionsListView.setFocus()
25582562

25592563
# Setup effects tree
25602564
self.effects_model = EffectsModel()

src/windows/models/files_model.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ def update_model(self, clear=True, delete_file_id=None):
246246
# Refresh view and filters (to hide or show this new item)
247247
get_app().window.resize_contents()
248248

249-
# Emit signal
249+
# Emit signal when model is updated
250250
self.model.ModelRefreshed.emit()
251251

252252
def __init__(self, *args):

src/windows/models/transition_model.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828
import os
2929

30-
from PyQt5.QtCore import QMimeData, Qt, QSortFilterProxyModel
30+
from PyQt5.QtCore import QMimeData, Qt, QSortFilterProxyModel, pyqtSignal
3131
from PyQt5.QtGui import *
3232
from PyQt5.QtWidgets import QMessageBox
3333
import openshot # Python module for libopenshot (required video editing module installed separately)
@@ -39,6 +39,8 @@
3939
import json
4040

4141
class TransitionStandardItemModel(QStandardItemModel):
42+
ModelRefreshed = pyqtSignal()
43+
4244
def __init__(self, parent=None):
4345
QStandardItemModel.__init__(self)
4446

@@ -216,6 +218,9 @@ def update_model(self, clear=True):
216218
self.model.appendRow(row)
217219
self.model_paths[path] = path
218220

221+
# Emit signal when model is updated
222+
self.model.ModelRefreshed.emit()
223+
219224
def __init__(self, *args):
220225

221226
# Create standard model

src/windows/views/transitions_listview.py

+1
Original file line numberDiff line numberDiff line change
@@ -114,3 +114,4 @@ def __init__(self, model):
114114
# setup filter events
115115
app = get_app()
116116
app.window.transitionsFilter.textChanged.connect(self.filter_changed)
117+
app.window.refreshTransitionsSignal.connect(self.refresh_view)

src/windows/views/transitions_treeview.py

+11-3
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,13 @@ def refresh_view(self):
7272
self.proxy_model.setFilterCaseSensitivity(Qt.CaseInsensitive)
7373
self.proxy_model.sort(Qt.AscendingOrder)
7474

75+
def refresh_columns(self):
76+
"""Resize and hide certain columns"""
77+
if type(self) == TransitionsTreeView:
78+
# Only execute when the treeview is active
79+
self.hideColumn(2)
80+
self.hideColumn(3)
81+
7582
def __init__(self, model):
7683
# Invoke parent init
7784
QTreeView.__init__(self)
@@ -95,20 +102,21 @@ def __init__(self, model):
95102
self.setDropIndicatorShown(True)
96103

97104
# Setup header columns
98-
self.setModel(self.transition_model.model)
105+
self.setModel(self.proxy_model)
99106
self.setIconSize(QSize(75, 62))
100107
self.setIndentation(0)
101108
self.setSelectionBehavior(QTreeView.SelectRows)
102109
self.setSelectionBehavior(QAbstractItemView.SelectRows)
103110
self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
104111
self.setWordWrap(True)
105112
self.setStyleSheet('QTreeView::item { padding-top: 2px; }')
113+
self.transition_model.model.ModelRefreshed.connect(self.refresh_columns)
106114

107115
# Load initial transition model data
108116
self.transition_model.update_model()
109-
self.hideColumn(2)
110-
self.hideColumn(3)
117+
self.refresh_columns()
111118

112119
# setup filter events
113120
app = get_app()
114121
app.window.transitionsFilter.textChanged.connect(self.filter_changed)
122+
app.window.refreshTransitionsSignal.connect(self.refresh_view)

0 commit comments

Comments
 (0)