Exemplo n.º 1
0
class PreludeTimer(QtGui.QWidget):
    request_length = QtCore.Signal()
    prelude_exit = QtCore.Signal()
    def __init__(self, parent=None):
        super(PreludeTimer, self).__init__(parent)
        self.title = 'SafetyPlay - Prelude Timer'
        self.settings = load()
        self.setupUi()

        self.clock = Clock()

        self.save_timer = SaveCloser()
        self.resizer = Resizer()
        
        self.font_color_picker = ColorChooser()
        self.font_color_picker.setCurrentColor(self.settings['f_color'])
        
        self.bg_color_picker = ColorChooser()
        self.bg_color_picker.setCurrentColor(self.settings['bg_color'])

        self.setupActions()

    def time_changed(self):
        h = self.start_time_editor.time().hour()
        m = self.start_time_editor.time().minute()
        s = self.start_time_editor.time().second()
        save(gotime=[h, m, s])
        self.settings['gotime'] = [h, m, s]
        self.clock.settings['gotime'] = [h, m, s]
        self.clock.advance_timer()
        self.resizer.start()

    def set_to_current_time(self):
        h = int(time.strftime('%H'))
        m = int(time.strftime('%M'))
        s = int(time.strftime('%S'))
        self.start_time_editor.setTime(QtCore.QTime(h, m, s))

    def change_time(self, seconds):
        h = self.start_time_editor.time().hour()
        m = self.start_time_editor.time().minute()
        s = self.start_time_editor.time().second()

        new_s = abs(seconds)
        ha = new_s // 3600
        ma = int((new_s % 3600)/60)
        sa = int((new_s % 3600) % 60)

        if seconds < 0:
            ha = ha * -1
            ma = ma * -1
            sa = sa * -1

        if s + sa < 60 and s + sa > -1:
            s = s + sa
        elif s + sa > 59:
            s = s + sa - 60
            ma += 1
        elif s + sa < 0:
            s = s + sa + 60
            ma -= 1
        if m + ma < 60 and m + ma > -1:
            m = m + ma
        elif m + ma > 59:
            m = m + ma - 60
            ha += 1
        elif m + ma < 0:
            m = m + ma + 60
            ha -= 1
        if h + ha < 24 and h + ha > -1:
            h = h + ha
        elif h + ha == 24:
            h = h + ha - 24
        elif h + ha < 0:
            h = h + ha + 24
        self.start_time_editor.setTime(QtCore.QTime(h, m, s))

    def change_font_style(self):
        save(font=self.font_style_combobox.currentText())
        self.settings['font'] = self.font_style_combobox.currentText()
        self.clock.label.setFont(QtGui.QFont(
            self.settings['font'], int(self.settings['f_size'])))
        self.resizer.start()

    def change_font_size(self):
        save(f_size=self.font_size_combobox.currentText())
        self.settings['f_size'] = self.font_size_combobox.currentText()
        self.clock.label.setFont(QtGui.QFont(
            self.settings['font'], int(self.settings['f_size'])))
        self.resizer.start()

    def preview_font_color(self, color):
        color = color.name()
        self.font_color_button.setStyleSheet("background-color:" + color)
        self.clock.label.setStyleSheet("color:" + color)

    def change_font_color(self, color):
        color = color.name()
        self.font_color_button.setStyleSheet("background-color:" + color)
        self.clock.label.setStyleSheet("color:" + color)
        self.settings['f_color'] = color
        save(f_color=color)

    def check_font_color(self):
        color = self.font_color_picker.currentColor().name()
        if not color == self.settings['f_color']:
            self.font_color_button.setStyleSheet(
                "background-color:" + self.settings['f_color'])
            self.clock.label.setStyleSheet(
                "color:" + self.settings['f_color'])

    def preview_bg_color(self, color):
        color = color.name()
        self.bg_color_button.setStyleSheet("background-color:" + color)
        self.clock.setStyleSheet("background-color:" + color)

    def change_bg_color(self, color):
        color = color.name()
        self.bg_color_button.setStyleSheet("background-color:" + color)
        self.clock.setStyleSheet("background-color:" + color)
        self.settings['bg_color'] = color
        save(bg_color=color)

    def check_bg_color(self):
        color = self.bg_color_picker.currentColor().name()
        if not color == self.settings['bg_color']:
            self.bg_color_button.setStyleSheet(
                "background-color:" + self.settings['bg_color'])
            self.clock.setStyleSheet(
                "background-color:" + self.settings['bg_color'])

    def browse_to_presenter(self):
        userhome = os.path.expanduser('~')
        file, _ = QtGui.QFileDialog.getOpenFileName(
            self, 'Open file', userhome, "*.exe")
        if file != '':
            file = file.replace('/', '\\')
            self.settings['presenter'] = file
            self.presenter_line_edit.setText(file)
            save(presenter=file)

    def browse_to_presentation(self):
        userhome = os.path.expanduser('~')
        file, _ = QtGui.QFileDialog.getOpenFileName(
            self, 'Open file', userhome, "")
        if file != '':
            file = file.replace('/', '\\')
            self.settings['presentation'] = file
            self.presentation_line_edit.setText(file)
            save(presentation=file)

    def moveEvent(self, event):
        self.save_timer.start()

    def save_stuff(self):
        pos = [self.x(), self.y()]
        resto = self.audio_restore_slider.value()
        save(prelude_pos = pos, restore_volume=resto)

    def closeEvent(self, event):
        self.clock.close()
        self.prelude_exit.emit()
        self.save_timer.terminate()
        self.resizer.terminate()

    def setupActions(self):
        self.save_timer.time_up.connect(self.save_stuff)
        self.start_time_editor.timeChanged.connect(self.time_changed)
        self.current_time_button.clicked.connect(self.set_to_current_time)
        self.playlist_end_button.clicked.connect(self.request_length.emit)
        self.plus_minute_button.clicked.connect(lambda: self.change_time(60))
        self.minus_minute_button.clicked.connect(lambda: self.change_time(-60))
        self.font_style_combobox.currentIndexChanged.connect(
            self.change_font_style)
        self.font_color_button.clicked.connect(self.font_color_picker.open)
        self.font_color_picker.currentColorChanged.connect(
            self.preview_font_color)
        self.font_color_picker.colorSelected.connect(self.change_font_color)
        self.font_color_picker.close_signal.connect(self.check_font_color)
        self.font_size_combobox.currentIndexChanged.connect(
            self.change_font_size)
        self.bg_color_button.clicked.connect(self.bg_color_picker.open)
        self.bg_color_picker.currentColorChanged.connect(self.preview_bg_color)
        self.bg_color_picker.colorSelected.connect(self.change_bg_color)
        self.bg_color_picker.close_signal.connect(self.check_bg_color)
        self.fade_audio_checkbox.clicked.connect(
            lambda: save(fade_audio=self.fade_audio_checkbox.isChecked()))
        self.audio_restore_slider.valueChanged.connect(self.save_timer.start)
        self.jump_to_next_checkbox.clicked.connect(
            lambda: save(jump_end=self.jump_to_next_checkbox.isChecked()))
        self.jump_to_next_checkbox.clicked.connect(
            lambda: save(pause_end=self.pause_playback_checkbox.isChecked()))
        self.press_f5_checkbox.clicked.connect(
            lambda: save(press_f5=self.press_f5_checkbox.isChecked()))
        self.kill_video_checkbox.clicked.connect(
            lambda: save(kill_video=self.kill_video_checkbox.isChecked()))
        self.presentation_checkbox.clicked.connect(
            lambda: save(start_presentation=self.presentation_checkbox.isChecked()))
        self.presenter_button.clicked.connect(self.browse_to_presenter)
        self.presentation_button.clicked.connect(self.browse_to_presentation)
        self.start_timer_button.clicked.connect(lambda: self.clock.show())
        self.end_timer_button.clicked.connect(lambda: self.clock.hide())
        self.resizer.time_up.connect(lambda: self.clock.resize(0, 0))
        self.presenter_line_edit.textChanged.connect(
            lambda: save(presenter=self.presenter_line_edit.displayText()))
        self.presentation_line_edit.textChanged.connect(
        lambda: save(presentation=self.presentation_line_edit.displayText()))
        
    def setupUi(self):
        self.setWindowTitle(self.title)
        self.setWindowIcon(SafetyPlayIcon())
        self.setFixedSize(0, 0)
        self.setWindowFlags(QtCore.Qt.WindowMinimizeButtonHint)
        pos = self.settings['prelude_pos']
        self.move(pos[0], pos[1])

        self.VL = QtGui.QVBoxLayout(self)

        self.HL_1 = QtGui.QHBoxLayout()
        
        self.start_time_label = QtGui.QLabel()
        self.start_time_label.setText('Presentation Start Time: ')
        self.start_time_label.setMaximumSize(QtCore.QSize(150, 16777215))
        self.HL_1.addWidget(self.start_time_label)

        self.start_time_editor = QtGui.QTimeEdit()
        g = self.settings['gotime']
        self.start_time_editor.setTime(QtCore.QTime(g[0], g[1], g[2]))
        self.HL_1.addWidget(self.start_time_editor)

        self.VL.addLayout(self.HL_1)

        self.HL_2 = QtGui.QHBoxLayout()

        self.current_time_button = QtGui.QPushButton()
        self.current_time_button.setText('Current Time')
        self.HL_2.addWidget(self.current_time_button)

        self.playlist_end_button = QtGui.QPushButton()
        self.playlist_end_button.setText('Current Media End Time')
        self.HL_2.addWidget(self.playlist_end_button)

        self.VL.addLayout(self.HL_2)

        self.HL_3 = QtGui.QHBoxLayout()

        self.plus_minute_button = QtGui.QPushButton()
        self.plus_minute_button.setText('+1 Minute')
        self.HL_3.addWidget(self.plus_minute_button)

        self.minus_minute_button = QtGui.QPushButton()
        self.minus_minute_button.setText('-1 Minute')
        self.HL_3.addWidget(self.minus_minute_button)

        self.VL.addLayout(self.HL_3)

        self.line_1 = QtGui.QFrame()
        self.line_1.setFrameShape(QtGui.QFrame.HLine)
        self.line_1.setFrameShadow(QtGui.QFrame.Sunken)

        self.VL.addWidget(self.line_1)

        self.HL_4 = QtGui.QHBoxLayout()

        self.font_style_label = QtGui.QLabel()
        self.font_style_label.setText('Clock Font:')
        self.font_style_label.setMaximumSize(QtCore.QSize(70, 16777215))
        self.HL_4.addWidget(self.font_style_label)

        self.font_style_combobox = QtGui.QFontComboBox()
        self.font_style_combobox.setCurrentFont(
            QtGui.QFont(self.settings['font']))
        self.HL_4.addWidget(self.font_style_combobox)

        self.VL.addLayout(self.HL_4)

        self.HL_5 = QtGui.QHBoxLayout()

        self.font_size_label = QtGui.QLabel()
        self.font_size_label.setText('Font Size:')
        self.font_size_label.setMaximumSize(QtCore.QSize(70, 16777215))
        self.HL_5.addWidget(self.font_size_label)

        self.font_size_combobox = QtGui.QComboBox()
        self.font_size_combobox.setMaximumSize(QtCore.QSize(50, 16777215))
        self.font_sizes = ["20", "24", "28", "30", "34", "38", "40", "44", "48", "52",
                 "56", "60", "64", "68", "72"]
        self.font_size_combobox.insertItems(0, self.font_sizes)
        self.font_size_combobox.setCurrentIndex(
            self.font_sizes.index(self.settings['f_size']))
        self.HL_5.addWidget(self.font_size_combobox)

        self.font_size_color_line = QtGui.QFrame()
        self.font_size_color_line.setFrameShape(QtGui.QFrame.VLine)
        self.font_size_color_line.setFrameShadow(QtGui.QFrame.Sunken)
        self.HL_5.addWidget(self.font_size_color_line)

        self.font_color_label = QtGui.QLabel()
        self.font_color_label.setText('Font Color:')
        self.font_color_label.setMaximumSize(QtCore.QSize(70, 16777215))
        self.HL_5.addWidget(self.font_color_label)

        self.font_color_button = QtGui.QToolButton()
        self.font_color_button.setMinimumSize(QtCore.QSize(25, 25))
        self.font_color_button.setMaximumSize(QtCore.QSize(25, 25))
        self.font_color_button.setText("")
        self.font_color_button.setStyleSheet(
            ''.join(["background-color:", self.settings['f_color']]))
        self.HL_5.addWidget(self.font_color_button)

        self.font_color_bg_color_line = QtGui.QFrame()
        self.font_color_bg_color_line.setFrameShape(QtGui.QFrame.VLine)
        self.font_color_bg_color_line.setFrameShadow(QtGui.QFrame.Sunken)
        self.HL_5.addWidget(self.font_color_bg_color_line)
        
        self.bg_color_label = QtGui.QLabel()
        self.bg_color_label.setText('Bg Color:')
        self.bg_color_label.setMaximumSize(QtCore.QSize(60, 16777215))
        self.HL_5.addWidget(self.bg_color_label)

        self.bg_color_button = QtGui.QToolButton()
        self.bg_color_button.setMinimumSize(QtCore.QSize(25, 25))
        self.bg_color_button.setMaximumSize(QtCore.QSize(25, 25))
        self.bg_color_button.setText("")
        self.bg_color_button.setStyleSheet(
            ''.join(["background-color:", self.settings['bg_color']]))
        self.HL_5.addWidget(self.bg_color_button)

        self.VL.addLayout(self.HL_5)

        self.line_2 = QtGui.QFrame()
        self.line_2.setFrameShape(QtGui.QFrame.HLine)
        self.line_2.setFrameShadow(QtGui.QFrame.Sunken)

        self.VL.addWidget(self.line_2)

        self.on_timer_end_label = QtGui.QLabel()
        self.on_timer_end_label.setText('On Timer End:')
        self.VL.addWidget(self.on_timer_end_label)

        self.HL_7 = QtGui.QHBoxLayout()

        self.fade_audio_checkbox = QtGui.QCheckBox()
        self.fade_audio_checkbox.setText('Fade Audio')
        self.fade_audio_checkbox.setChecked(self.settings['fade_audio'])
        self.HL_7.addWidget(self.fade_audio_checkbox)

        self.audio_restore_label = QtGui.QLabel()
        self.audio_restore_label.setText('Restore Audio:')
        self.HL_7.addWidget(self.audio_restore_label)

        self.audio_restore_slider = QtGui.QSlider()
        self.audio_restore_slider.setMaximum(100)
        self.audio_restore_slider.setSliderPosition(
            self.settings['restore_volume'])
        self.audio_restore_slider.setOrientation(QtCore.Qt.Horizontal)
        self.HL_7.addWidget(self.audio_restore_slider)

        self.VL.addLayout(self.HL_7)

        self.pause_playback_checkbox = QtGui.QCheckBox()
        self.pause_playback_checkbox.setText('Pause Playback')
        self.pause_playback_checkbox.setChecked(self.settings['pause_end'])
        self.VL.addWidget(self.pause_playback_checkbox)

        self.jump_to_next_checkbox = QtGui.QCheckBox()
        self.jump_to_next_checkbox.setText('Jump to next item in playlist')
        self.jump_to_next_checkbox.setChecked(self.settings['jump_end'])
        self.VL.addWidget(self.jump_to_next_checkbox)

        self.press_f5_checkbox = QtGui.QCheckBox()
        self.press_f5_checkbox.setText('Press F5')
        self.press_f5_checkbox.setChecked(self.settings['press_f5'])
        self.VL.addWidget(self.press_f5_checkbox)

        self.kill_video_checkbox = QtGui.QCheckBox()
        self.kill_video_checkbox.setText('Close Video Window')
        self.kill_video_checkbox.setChecked(self.settings['kill_video'])
        self.VL.addWidget(self.kill_video_checkbox)

        self.presentation_checkbox = QtGui.QCheckBox()
        self.presentation_checkbox.setText(
            'Open Presentation (5 seconds early)')
        self.presentation_checkbox.setChecked(
            self.settings['start_presentation'])
        self.VL.addWidget(self.presentation_checkbox)

        self.HL_8 = QtGui.QHBoxLayout()

        self.presenter_label = QtGui.QLabel()
        self.presenter_label.setText('Software Path:')
        self.presenter_label.setMaximumSize(QtCore.QSize(85, 16777215))
        self.presenter_label.setAlignment(QtCore.Qt.AlignCenter)
        self.HL_8.addWidget(self.presenter_label)

        self.presenter_button = QtGui.QPushButton()
        self.presenter_button.setText('Browse')
        self.HL_8.addWidget(self.presenter_button)

        self.presenter_line_edit = QtGui.QLineEdit()
        self.presenter_line_edit.setReadOnly(True)
        self.presenter_line_edit.setText(self.settings['presenter'])
        self.HL_8.addWidget(self.presenter_line_edit)

        self.VL.addLayout(self.HL_8)

        self.HL_9 = QtGui.QHBoxLayout()

        self.presentation_label = QtGui.QLabel()
        self.presentation_label.setText('File Path:')
        self.presentation_label.setMinimumSize(QtCore.QSize(85, 16777215))
        self.presentation_label.setAlignment(QtCore.Qt.AlignCenter)
        self.HL_9.addWidget(self.presentation_label)

        self.presentation_button = QtGui.QPushButton()
        self.presentation_button.setText('Browse')
        self.HL_9.addWidget(self.presentation_button)

        self.presentation_line_edit = QtGui.QLineEdit()
        self.presentation_line_edit.setReadOnly(True)
        self.presentation_line_edit.setText(self.settings['presentation'])
        self.HL_9.addWidget(self.presentation_line_edit)

        self.VL.addLayout(self.HL_9)

        self.HL_10 = QtGui.QHBoxLayout()

        self.start_timer_button = QtGui.QPushButton()
        self.start_timer_button.setText('Start Timer')
        self.HL_10.addWidget(self.start_timer_button)

        self.end_timer_button = QtGui.QPushButton()
        self.end_timer_button.setText('End Timer')
        self.HL_10.addWidget(self.end_timer_button)

        self.VL.addLayout(self.HL_10)