37 from classes
import info, ui_util, settings, qt_types, updates
38 from classes.app
import get_app
39 from classes.logger
import log
41 from windows.preview_thread
import PreviewParent
42 from windows.video_widget
import VideoWidget
47 import simplejson
as json
55 ui_path = os.path.join(info.PATH,
'windows',
'ui',
'cutting.ui')
58 previewFrameSignal = pyqtSignal(int)
59 refreshFrameSignal = pyqtSignal()
60 LoadFileSignal = pyqtSignal(str)
61 PlaySignal = pyqtSignal(int)
62 PauseSignal = pyqtSignal()
63 SeekSignal = pyqtSignal(int)
64 SpeedSignal = pyqtSignal(float)
65 StopSignal = pyqtSignal()
70 QDialog.__init__(self)
90 self.
fps_num = int(file.data[
'fps'][
'num'])
91 self.
fps_den = int(file.data[
'fps'][
'den'])
101 self.videoPreview.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding)
111 self.sliderVideo.setMinimum(1)
113 self.sliderVideo.setSingleStep(1)
114 self.sliderVideo.setSingleStep(1)
115 self.sliderVideo.setPageStep(24)
119 if 'start' in self.file.data.keys():
120 start_frame = (float(self.file.data[
'start']) * self.
fps) + 1
123 QTimer.singleShot(500, functools.partial(self.sliderVideo.setValue, start_frame + 1))
124 QTimer.singleShot(600, functools.partial(self.sliderVideo.setValue, start_frame))
140 self.sliderVideo.setValue(frame_number)
144 seconds = (frame_number-1) / self.
fps 148 timestamp =
"%s:%s:%s:%s" % (time_text[
"hour"], time_text[
"min"], time_text[
"sec"], time_text[
"frame"])
151 self.lblVideoTime.setText(timestamp)
154 log.info(
"btnPlay_clicked")
157 self.btnPlay.setChecked(
False)
158 elif force ==
"play":
159 self.btnPlay.setChecked(
True)
161 if self.btnPlay.isChecked():
162 log.info(
'play (icon to pause)')
166 log.info(
'pause (icon to play)')
168 self.preview_thread.Pause()
172 log.info(
'sliderVideo_valueChanged')
178 self.preview_thread.previewFrame(new_frame)
189 current_frame = self.sliderVideo.value()
192 if self.btnEnd.isEnabled()
and current_frame >= self.
end_frame:
195 msg.setText(_(
"Please choose valid 'start' and 'end' values for your clip."))
207 self.btnStart.setStyleSheet(
'background-image: url(%s);' % self.start_image.replace(
'\\',
'/'))
210 self.btnEnd.setEnabled(
True)
211 self.btnClear.setEnabled(
True)
213 log.info(
'btnStart_clicked, current frame: %s' % self.
start_frame)
224 current_frame = self.sliderVideo.value()
230 msg.setText(_(
"Please choose valid 'start' and 'end' values for your clip."))
239 self.r.GetFrame(self.
end_frame).Thumbnail(self.
end_image, 160, 90,
'',
'',
'#000000',
True)
242 self.btnEnd.setStyleSheet(
'background-image: url(%s);' % self.end_image.replace(
'\\',
'/'))
245 self.btnAddClip.setEnabled(
True)
247 log.info(
'btnEnd_clicked, current frame: %s' % self.
end_frame)
252 log.info(
'btnClear_clicked')
265 self.btnStart.setStyleSheet(
'background-image: None;')
266 self.btnEnd.setStyleSheet(
'background-image: None;')
269 self.txtName.setText(
'')
272 self.btnEnd.setEnabled(
False)
273 self.btnAddClip.setEnabled(
False)
274 self.btnClear.setEnabled(
False)
279 log.info(
'btnAddClip_clicked')
282 if 'name' in self.file.data.keys():
283 self.file.data.pop(
'name')
288 self.file.type =
'insert' 291 if self.txtName.text():
292 self.file.data[
'name'] = self.txtName.text()
299 format_mask =
'%%0%sd' % pad_length
300 return format_mask % value
304 milliseconds = secs * 1000
305 sec = math.floor(milliseconds/1000)
306 milli = milliseconds % 1000
307 min = math.floor(sec/60)
309 hour = math.floor(min/60)
311 day = math.floor(hour/24)
313 week = math.floor(day/7)
316 frame = round((milli / 1000.0) * (fps_num / fps_den)) + 1
317 return {
"week":self.
padNumber(week,2),
"day":self.
padNumber(day,2),
"hour":self.
padNumber(hour,2),
"min":self.
padNumber(min,2),
"sec":self.
padNumber(sec,2),
"milli":self.
padNumber(milli,2),
"frame":self.
padNumber(frame,2) };
331 log.info(
'closeEvent')
334 self.preview_parent.worker.Pause()
335 self.preview_parent.worker.kill()
338 self.preview_parent.background.wait(250)
def setup_icon(window, elem, name, theme_name=None)
Using the window xml, set the icon on the given element, or if theme_name passed load that icon...
def get_app()
Returns the current QApplication instance of OpenShot.
def sliderVideo_valueChanged(self, new_frame)
def movePlayhead(self, frame_number)
Update the playhead position.
def btnStart_clicked(self)
Start of clip button was clicked.
def btnAddClip_clicked(self)
Add the selected clip to the project.
def btnPlay_clicked(self, force=None)
def padNumber(self, value, pad_length)
def btnEnd_clicked(self)
End of clip button was clicked.
def __init__(self, file=None)
def closeEvent(self, event)
def init_ui(window)
Initialize all child widgets and action of a window or dialog.
def track_metric_screen(screen_name)
Track a GUI screen being shown.
def accept(self)
Ok button clicked.
def secondsToTime(self, secs, fps_num, fps_den)
def close(self)
Actually close window and accept dialog.
def load_ui(window, path)
Load a Qt *.ui file, and also load an XML parsed version.
def btnClear_clicked(self)
Clear the current clip and reset the form.
def clearForm(self)
Clear all form controls.