53
53
from classes .conversion import zoomToSeconds , secondsToZoom
54
54
from classes .thumbnail import httpThumbnailServerThread
55
55
from images import openshot_rc
56
+ from windows .models .files_model import FilesModel
56
57
from windows .views .files_treeview import FilesTreeView
57
58
from windows .views .files_listview import FilesListView
58
59
from windows .models .transition_model import TransitionsModel
@@ -81,6 +82,7 @@ class MainWindow(QMainWindow, updates.UpdateWatcher):
81
82
82
83
previewFrameSignal = pyqtSignal (int )
83
84
refreshFrameSignal = pyqtSignal ()
85
+ refreshFilesSignal = pyqtSignal ()
84
86
LoadFileSignal = pyqtSignal (str )
85
87
PlaySignal = pyqtSignal (int )
86
88
PauseSignal = pyqtSignal ()
@@ -350,7 +352,8 @@ def actionNew_trigger(self, event):
350
352
# Reset selections
351
353
self .clearSelections ()
352
354
353
- self .filesTreeView .refresh_view ()
355
+ # Refresh files views
356
+ self .refreshFilesSignal .emit ()
354
357
log .info ("New Project created." )
355
358
356
359
# Set Window title
@@ -412,8 +415,8 @@ def actionEditTitle_trigger(self, event):
412
415
# Run the dialog event loop - blocking interaction on this window during that time
413
416
result = win .exec_ ()
414
417
415
- # Force update of files model (which will rebuild missing thumbnails)
416
- get_app (). window . filesTreeView . refresh_view ()
418
+ # Refresh files views
419
+ self . refreshFilesSignal . emit ()
417
420
418
421
# Force update of clips
419
422
clips = Clip .filter (file_id = selected_file_id )
@@ -530,8 +533,8 @@ def open_project(self, file_path, clear_thumbnails=True):
530
533
# Reset selections
531
534
self .clearSelections ()
532
535
533
- # Refresh file tree
534
- QTimer . singleShot ( 0 , self .filesTreeView . refresh_view )
536
+ # Refresh files views
537
+ self .refreshFilesSignal . emit ( )
535
538
536
539
# Load recent projects again
537
540
self .load_recent_menu ()
@@ -701,12 +704,21 @@ def actionImportFiles_trigger(self, event):
701
704
if not recommended_path or not os .path .exists (recommended_path ):
702
705
recommended_path = os .path .join (info .HOME_PATH )
703
706
files = QFileDialog .getOpenFileNames (self , _ ("Import File..." ), recommended_path )[0 ]
707
+
708
+ # Set cursor to waiting
709
+ get_app ().setOverrideCursor (QCursor (Qt .WaitCursor ))
710
+
704
711
for file_path in files :
705
712
self .filesTreeView .add_file (file_path )
706
- self .filesTreeView .refresh_view ()
707
713
app .updates .update_untracked (["import_path" ], os .path .dirname (file_path ))
708
714
log .info ("Imported media file {}" .format (file_path ))
709
715
716
+ # Restore cursor
717
+ get_app ().restoreOverrideCursor ()
718
+
719
+ # Refresh files views
720
+ self .refreshFilesSignal .emit ()
721
+
710
722
def actionAdd_to_Timeline_trigger (self , event ):
711
723
# Loop through selected files
712
724
f = None
@@ -730,17 +742,6 @@ def actionAdd_to_Timeline_trigger(self, event):
730
742
else :
731
743
log .info ('canceled' )
732
744
733
- def actionUploadVideo_trigger (self , event ):
734
- # show window
735
- from windows .upload_video import UploadVideo
736
- win = UploadVideo ()
737
- # Run the dialog event loop - blocking interaction on this window during this time
738
- result = win .exec_ ()
739
- if result == QDialog .Accepted :
740
- log .info ('Upload Video add confirmed' )
741
- else :
742
- log .info ('Upload Video add cancelled' )
743
-
744
745
def actionExportVideo_trigger (self , event ):
745
746
# show window
746
747
from windows .export import Export
@@ -809,16 +810,16 @@ def actionPreferences_trigger(self, event):
809
810
get_app ().restoreOverrideCursor ()
810
811
811
812
def actionFilesShowAll_trigger (self , event ):
812
- self .filesTreeView . refresh_view ()
813
+ self .refreshFilesSignal . emit ()
813
814
814
815
def actionFilesShowVideo_trigger (self , event ):
815
- self .filesTreeView . refresh_view ()
816
+ self .refreshFilesSignal . emit ()
816
817
817
818
def actionFilesShowAudio_trigger (self , event ):
818
- self .filesTreeView . refresh_view ()
819
+ self .refreshFilesSignal . emit ()
819
820
820
821
def actionFilesShowImage_trigger (self , event ):
821
- self .filesTreeView . refresh_view ()
822
+ self .refreshFilesSignal . emit ()
822
823
823
824
def actionTransitionsShowAll_trigger (self , event ):
824
825
self .transitionsTreeView .refresh_view ()
@@ -1823,18 +1824,12 @@ def actionDetailsView_trigger(self, event):
1823
1824
app = get_app ()
1824
1825
s = settings .get_settings ()
1825
1826
1826
- # Prepare treeview for deletion
1827
- if self .filesTreeView :
1828
- self .filesTreeView .prepare_for_delete ()
1829
-
1830
1827
# Files
1831
1828
if app .context_menu_object == "files" :
1832
1829
s .set ("file_view" , "details" )
1833
- self .tabFiles .layout ().removeWidget (self .filesTreeView )
1834
- self .filesTreeView .deleteLater ()
1835
- self .filesTreeView = None
1836
- self .filesTreeView = FilesTreeView (self )
1837
- self .tabFiles .layout ().addWidget (self .filesTreeView )
1830
+ self .filesListView .hide ()
1831
+ self .filesTreeView .show ()
1832
+ self .filesTreeView .clearSelection ()
1838
1833
1839
1834
# Transitions
1840
1835
elif app .context_menu_object == "transitions" :
@@ -1861,18 +1856,12 @@ def actionThumbnailView_trigger(self, event):
1861
1856
app = get_app ()
1862
1857
s = settings .get_settings ()
1863
1858
1864
- # Prepare treeview for deletion
1865
- if self .filesTreeView :
1866
- self .filesTreeView .prepare_for_delete ()
1867
-
1868
1859
# Files
1869
1860
if app .context_menu_object == "files" :
1870
1861
s .set ("file_view" , "thumbnail" )
1871
- self .tabFiles .layout ().removeWidget (self .filesTreeView )
1872
- self .filesTreeView .deleteLater ()
1873
- self .filesTreeView = None
1874
- self .filesTreeView = FilesListView (self )
1875
- self .tabFiles .layout ().addWidget (self .filesTreeView )
1862
+ self .filesListView .show ()
1863
+ self .filesListView .clearSelection ()
1864
+ self .filesTreeView .hide ()
1876
1865
1877
1866
# Transitions
1878
1867
elif app .context_menu_object == "transitions" :
@@ -2205,7 +2194,7 @@ def setup_toolbars(self):
2205
2194
self .filesFilter .setPlaceholderText (_ ("Filter" ))
2206
2195
self .filesFilter .setClearButtonEnabled (True )
2207
2196
self .filesToolbar .addWidget (self .filesFilter )
2208
- self .tabFiles .layout ().addWidget ( self .filesToolbar )
2197
+ self .tabFiles .layout ().insertWidget ( 0 , self .filesToolbar )
2209
2198
2210
2199
# Add transitions toolbar
2211
2200
self .transitionsToolbar = QToolBar ("Transitions Toolbar" )
@@ -2544,13 +2533,20 @@ def __init__(self, mode=None):
2544
2533
self .setCorner (Qt .TopRightCorner , Qt .RightDockWidgetArea )
2545
2534
self .setCorner (Qt .BottomRightCorner , Qt .RightDockWidgetArea )
2546
2535
2547
- # Setup files tree
2536
+ # Setup files tree and list view (both share a model)
2537
+ self .files_model = FilesModel ()
2538
+ self .filesTreeView = FilesTreeView (self .files_model )
2539
+ self .filesListView = FilesListView (self .files_model )
2540
+ self .tabFiles .layout ().insertWidget (- 1 , self .filesTreeView )
2541
+ self .tabFiles .layout ().insertWidget (- 1 , self .filesListView )
2548
2542
if s .get ("file_view" ) == "details" :
2549
- self .filesTreeView = FilesTreeView (self )
2543
+ self .filesTreeView .show ()
2544
+ self .filesListView .hide ()
2545
+ self .filesTreeView .setFocus ()
2550
2546
else :
2551
- self .filesTreeView = FilesListView ( self )
2552
- self .tabFiles . layout (). addWidget ( self . filesTreeView )
2553
- self .filesTreeView .setFocus ()
2547
+ self .filesTreeView . hide ( )
2548
+ self .filesListView . show ( )
2549
+ self .filesListView .setFocus ()
2554
2550
2555
2551
# Setup transitions tree
2556
2552
self .transition_model = TransitionsModel ()
0 commit comments