diff --git a/src/themes/cosmic/theme.py b/src/themes/cosmic/theme.py index 2834cf8cb..cbc0ecd42 100644 --- a/src/themes/cosmic/theme.py +++ b/src/themes/cosmic/theme.py @@ -274,6 +274,11 @@ def __init__(self, app): color: rgba(145, 195, 255, 0.4); } +QTabWidget#exportTabs QTabBar::tab, +QTabWidget#tabCategories QTabBar::tab { + margin-bottom: 10px; +} + QTabBar::tab:selected { color: rgba(145, 195, 255, 1.0); } @@ -343,6 +348,7 @@ def __init__(self, app): padding: 6px; padding-left: 8px; padding-right: 8px; + combobox-popup: 0; } QComboBox::drop-down { @@ -416,6 +422,7 @@ def __init__(self, app): QToolBox::tab { color: #91C3FF; + border-top: 1px solid rgba(145, 195, 255, .2); } QTabWidget QWidget#pageAdvancedOptions, QWidget#pageProfile, QWidget#pageImageSequenceSettings, QWidget#pageVideoSettings, QWidget#pageAudioSettings { diff --git a/src/themes/humanity/theme.py b/src/themes/humanity/theme.py index 01d656866..b85dc91b5 100644 --- a/src/themes/humanity/theme.py +++ b/src/themes/humanity/theme.py @@ -42,6 +42,10 @@ def __init__(self, app): height: 24px; } +QComboBox { + combobox-popup: 0; +} + .property_value { foreground-color: #217dd4; background-color: #565656; @@ -99,6 +103,10 @@ def __init__(self, app): QWidget#videoPreview { background-color: #dedede; } + +QComboBox { + combobox-popup: 0; +} """ def apply_theme(self): diff --git a/src/windows/export.py b/src/windows/export.py index 982766c42..65287254e 100644 --- a/src/windows/export.py +++ b/src/windows/export.py @@ -238,12 +238,6 @@ def __init__(self, *args, **kwargs): # This exception occurs when there's a problem parsing the Profile file - display a message and continue log.error("Failed to parse file '%s' as a profile: %s" % (profile_path, e)) - # Loop through sorted profiles - for profile_name in sorted(self.profile_names): - # Add to dropdown - self.cboProfile.addItem(self.getProfileName(self.getProfilePath(profile_name)), - self.getProfilePath(profile_name)) - # ********* Simple Project Type ********** # load the simple project type dropdown presets = [] diff --git a/src/windows/ui/export.ui b/src/windows/ui/export.ui index 996116f61..1f4266eeb 100644 --- a/src/windows/ui/export.ui +++ b/src/windows/ui/export.ui @@ -72,7 +72,7 @@ - + 0 @@ -1064,7 +1064,7 @@ txtFileName txtExportFolder btnBrowse - tabWidget + exportTabs cboSimpleProjectType cboSimpleTarget cboSimpleVideoProfile diff --git a/src/windows/views/timeline.py b/src/windows/views/timeline.py index 188a37d1d..008028f59 100644 --- a/src/windows/views/timeline.py +++ b/src/windows/views/timeline.py @@ -2003,6 +2003,7 @@ def Slice_Triggered(self, action, clip_ids, trans_ids, playhead_position=0, ripp # Emit signal to ignore updates (start ignoring updates) get_app().window.IgnoreUpdates.emit(True) + new_starting_frame = -1 try: # Get the nearest starting frame position to the playhead (snap to frame boundaries) @@ -2040,6 +2041,9 @@ def Slice_Triggered(self, action, clip_ids, trans_ids, playhead_position=0, ripp clip.data["position"] = original_position # Move right side back to original position self.ripple_delete_gap(playhead_position, clip.data["layer"], removed_duration) + # Seek to new starting frame + new_starting_frame = original_position * (fps_num / fps_den) + 1 + elif action == MenuSlice.KEEP_BOTH: # Update clip data for the left clip clip.data["end"] = start_of_clip + (playhead_position - original_position) @@ -2093,6 +2097,9 @@ def Slice_Triggered(self, action, clip_ids, trans_ids, playhead_position=0, ripp trans.data["position"] = original_position self.ripple_delete_gap(playhead_position, trans.data["layer"], removed_duration) + # Seek to new starting frame + new_starting_frame = original_position * (fps_num / fps_den) + 1 + elif action == MenuSlice.KEEP_BOTH: # Update data for the left transition trans.data["end"] = start_of_tran + (playhead_position - original_position) @@ -2119,6 +2126,10 @@ def Slice_Triggered(self, action, clip_ids, trans_ids, playhead_position=0, ripp # Emit signal to resume updates (stop ignoring updates) get_app().window.IgnoreUpdates.emit(False) + if new_starting_frame != -1: + # Seek to new position (if needed) + self.window.SeekSignal.emit(round(new_starting_frame)) + def ripple_delete_gap(self, ripple_start, layer, ripple_gap): """Remove the ripple gap and adjust subsequent items""" # Get all clips and transitions right of ripple_start in the given layer @@ -2882,6 +2893,9 @@ def SeekToKeyframe(self, frame_number): # Seek to frame self.window.SeekSignal.emit(frame_number) + # Display properties (if not visible) + self.window.actionProperties.trigger() + @pyqtSlot(int) def PlayheadMoved(self, position_frames): @@ -2933,6 +2947,9 @@ def SetPlayheadFollow(self, enable_follow): def addSelection(self, item_id, item_type, clear_existing=False): """ Add the selected item to the current selection """ self.window.SelectionAdded.emit(item_id, item_type, clear_existing) + if item_id and item_type == "effect": + # Display properties for effect (if not visible) + self.window.actionProperties.trigger() def addRippleSelection(self, item_id, item_type): if item_type == "clip":