Example #1
0
    def __init__(self,
                 csw_number: lib_csw.Number.Client,
                 reflect_state_widgets=None):
        """
        Implements lib_csw.Number control as SpinBox
        """
        if not isinstance(csw_number, lib_csw.Number.Client):
            raise ValueError('csw_number must be an instance of Number.Client')

        self._csw_number = csw_number
        self._instant_update = False
        self._zero_is_auto = False
        self._read_only = True

        csw_number.call_on_number(self._on_csw_number)
        csw_number.call_on_config(self._on_csw_config)

        spinbox = self._spinbox = qtx.QXDoubleSpinBox(
            font=QXFontDB.Digital7_Mono(11, italic=True),
            min=0,
            max=999999999,
            step=1,
            decimals=0,
            readonly=self._read_only,
            valueChanged=self._on_spinbox_valueChanged,
            editingFinished=self._on_spinbox_editingFinished)
        btn_auto = self._btn_auto = qtx.QXPushButton(
            text=L('@misc.auto'),
            released=self._on_btn_auto_released,
            fixed_height=21,
            hided=True)

        super().__init__(csw_control=csw_number,
                         reflect_state_widgets=reflect_state_widgets,
                         layout=qtx.QXHBoxLayout([spinbox, 1, btn_auto]))
Example #2
0
    def __init__(self,
                 csw_path: lib_csw.Paths.Client,
                 reflect_state_widgets=None):
        """
        Implements lib_csw.Paths control as LineEdit with Button to manage the Path
        """
        if not isinstance(csw_path, lib_csw.Paths.Client):
            raise ValueError('csw_path must be an instance of Paths.Client')

        self._csw_path = csw_path
        self._dlg = None

        csw_path.call_on_config(self.on_csw_config)
        csw_path.call_on_paths(self._on_csw_paths)

        lineedit = self._lineedit = qtx.QXLineEdit(
            font=QXFontDB.get_fixedwidth_font(),
            placeholder_text='...',
            size_policy=('expanding', 'fixed'),
            editingFinished=self.on_lineedit_editingFinished)

        btn_open = self._btn_open = qtx.QXPushButton(
            image=QXImageDB.folder_open_outline(color='light gray'),
            tooltip_text='Open',
            released=self._on_btn_open_released,
            fixed_size=(24, 22))

        btn_reveal = self._btn_reveal = qtx.QXPushButton(
            image=QXImageDB.eye_outline(color='light gray'),
            tooltip_text='Reveal in explorer',
            released=self._on_btn_reveal_released,
            fixed_size=(24, 22))

        btn_erase = self._btn_erase = qtx.QXPushButton(
            image=QXImageDB.close_outline(color='light gray'),
            tooltip_text='Erase',
            released=self._on_btn_erase_released,
            fixed_size=(24, 22))
        super().__init__(csw_control=csw_path,
                         reflect_state_widgets=reflect_state_widgets,
                         layout=qtx.QXHBoxLayout(
                             [lineedit, 2, btn_open, btn_reveal, btn_erase]))
Example #3
0
    def __init__(self, backend : BackendHost, name : str, layout, content_align_top=False):
        super().__init__()
        if not isinstance(backend, BackendHost):
            raise ValueError('backend must be an instance of BackendHost')

        self._backend = backend
        self._name = name

        backend.call_on_state_change(self._on_backend_state_change)
        backend.call_on_profile_timing(self._on_backend_profile_timing)

        btn_on_off = self._btn_on_off = qtx.QXPushButton(tooltip_text=L('@QBackendPanel.start'),
                                                         released=self._on_btn_on_off_released,
                                                         fixed_width=20)

        btn_reset_state = self._btn_reset_state = qtx.QXPushButton(image=QXImageDB.settings_reset_outline('gray'),
                                                                   released=self._on_btn_reset_state_released, tooltip_text=L('@QBackendPanel.reset_settings'),
                                                                   fixed_width=20)

        fps_label = self._fps_label = qtx.QXLabel()

        bar_widget = self._bar_widget = \
            qtx.QXFrameHBox(widgets=[btn_on_off, 1, btn_reset_state, 2,
                                     qtx.QXLabel(name, font=QXFontDB.get_default_font(10)),
                                     (fps_label, qtx.AlignRight), 2],
                            size_policy=('expanding', 'fixed'), fixed_height=24)

        content_widget = self._content_widget = qtx.QXFrameHBox([layout], contents_margins=2, enabled=False)

        l_widgets = [bar_widget, 1]

        if not content_align_top:
            l_widgets += [ qtx.QXFrame(size_policy=('expanding','expanding') ) ]

        l_widgets += [content_widget]
        l_widgets += [ qtx.QXFrame(size_policy=('expanding', 'expanding') ) ]

        self.setLayout(qtx.QXVBoxLayout(l_widgets))

        btn_on_off.set_image( QXImageDB.power_outline('red') )
Example #4
0
    def __init__(self,  csw_signal : lib_csw.Signal.Client, reflect_state_widgets=None,
                        image=None,
                        text=None, button_size=None, **kwargs):
        """
        Implements lib_csw.Signal control as QXPushButton
        """
        if not isinstance(csw_signal, lib_csw.Signal.Client):
            raise ValueError('csw_signal must be an instance of Signal.Client')

        self._csw_signal = csw_signal

        btn = self._btn = qtx.QXPushButton(image=image, text=text, released=self.on_btn_released, fixed_size=button_size)

        super().__init__(csw_control=csw_signal, reflect_state_widgets=reflect_state_widgets,
                         layout=qtx.QXHBoxLayout([btn]), **kwargs)
Example #5
0
    def __init__(self, label: str = None, popup_info_text=None):
        """
        text label with optional popup info on click
        """
        super().__init__()

        self._has_info_text = False

        self._label = qtx.QXLabel(text='', hided=True)

        wnd_text_label = self._popup_wnd_text_label = qtx.QXLabel(
            text='', font=QXFontDB.get_default_font())

        wnd = self._popup_wnd = qtx.QXPopupWindow(
            layout=qtx.QXHBoxLayout([
                qtx
                .QXFrame(bg_color=qtx.Qt.GlobalColor.black,
                         layout=qtx.QXHBoxLayout([
                             qtx.QXFrame(
                                 layout=qtx.QXHBoxLayout([
                                     qtx.QXLabel(image=QXImageDB
                                                 .information_circle_outline(
                                                     'yellow'),
                                                 scaled_contents=True,
                                                 fixed_size=(24, 24
                                                             )), wnd_text_label
                                 ],
                                                         contents_margins=2,
                                                         spacing=2)),
                         ],
                                                 contents_margins=2,
                                                 spacing=2),
                         size_policy=('fixed', 'fixed'))
            ],
                                    contents_margins=0))

        info_btn = self._info_btn = qtx.QXPushButton(
            image=QXImageDB.information_circle_outline('light gray'),
            released=self._on_info_btn_released,
            fixed_size=(24, 22),
            hided=True)

        self.setLayout(qtx.QXHBoxLayout([self._label, info_btn]))

        self.set_label(label)
        self.set_popup_info(popup_info_text)
Example #6
0
    def __init__(self, backend: FaceSwapper, dfm_models_path: Path):
        self._dfm_models_path = dfm_models_path

        cs = backend.get_control_sheet()

        btn_open_folder = self.btn_open_folder = qtx.QXPushButton(
            image=QXImageDB.eye_outline('light gray'),
            tooltip_text='Reveal in Explorer',
            released=self._btn_open_folder_released,
            fixed_size=(24, 22))

        q_device_label = QLabelPopupInfo(
            label=L('@common.device'),
            popup_info_text=L('@common.help.device'))
        q_device = QComboBoxCSWDynamicSingleSwitch(
            cs.device, reflect_state_widgets=[q_device_label])

        q_model_label = QLabelPopupInfo(
            label=L('@QFaceSwapper.model'),
            popup_info_text=L('@QFaceSwapper.help.model'))
        q_model = QComboBoxCSWDynamicSingleSwitch(
            cs.model, reflect_state_widgets=[q_model_label, btn_open_folder])

        q_model_dl_error = self._q_model_dl_error = QErrorCSWError(
            cs.model_dl_error)
        q_model_dl_progress = self._q_model_dl_progress = QProgressBarCSWProgress(
            cs.model_dl_progress)

        q_model_info_label = self._q_model_info_label = QLabelPopupInfoCSWInfoLabel(
            cs.model_info_label)

        q_swap_all_faces_label = QLabelPopupInfo(
            label=L('@QFaceSwapper.swap_all_faces'))
        q_swap_all_faces = QCheckBoxCSWFlag(
            cs.swap_all_faces, reflect_state_widgets=[q_swap_all_faces_label])

        q_face_id_label = QLabelPopupInfo(
            label=L('@QFaceSwapper.face_id'),
            popup_info_text=L('@QFaceSwapper.help.face_id'))
        q_face_id = QSpinBoxCSWNumber(cs.face_id,
                                      reflect_state_widgets=[q_face_id_label])

        q_morph_factor_label = QLabelPopupInfo(
            label=L('@QFaceSwapper.morph_factor'),
            popup_info_text=L('@QFaceSwapper.help.morph_factor'))
        q_morph_factor = QSliderCSWNumber(
            cs.morph_factor, reflect_state_widgets=[q_morph_factor_label])

        q_sharpen_amount_label = QLabelPopupInfo(
            label=L('@QFaceSwapper.presharpen_amount'),
            popup_info_text=L('@QFaceSwapper.help.presharpen_amount'))
        q_sharpen_amount = QSliderCSWNumber(
            cs.presharpen_amount,
            reflect_state_widgets=[q_sharpen_amount_label])

        q_pre_gamma_label = QLabelPopupInfo(
            label=L('@QFaceSwapper.pregamma'),
            popup_info_text=L('@QFaceSwapper.help.pregamma'))

        q_pre_gamma_red = QSpinBoxCSWNumber(
            cs.pre_gamma_red, reflect_state_widgets=[q_pre_gamma_label])
        q_pre_gamma_green = QSpinBoxCSWNumber(cs.pre_gamma_green)
        q_pre_gamma_blue = QSpinBoxCSWNumber(cs.pre_gamma_blue)

        q_post_gamma_label = QLabelPopupInfo(
            label=L('@QFaceSwapper.postgamma'))

        q_post_gamma_red = QSpinBoxCSWNumber(
            cs.post_gamma_red, reflect_state_widgets=[q_post_gamma_label])
        q_post_gamma_green = QSpinBoxCSWNumber(cs.post_gamma_green)
        q_post_gamma_blue = QSpinBoxCSWNumber(cs.post_gamma_blue)

        q_two_pass_label = QLabelPopupInfo(
            label=L('@QFaceSwapper.two_pass'),
            popup_info_text=L('@QFaceSwapper.help.two_pass'))
        q_two_pass = QCheckBoxCSWFlag(cs.two_pass,
                                      reflect_state_widgets=[q_two_pass_label])

        grid_l = qtx.QXGridLayout(spacing=5)
        row = 0
        grid_l.addWidget(q_device_label,
                         row,
                         0,
                         alignment=qtx.AlignRight | qtx.AlignVCenter)
        grid_l.addWidget(q_device, row, 1, alignment=qtx.AlignLeft)
        row += 1
        grid_l.addWidget(q_model_label,
                         row,
                         0,
                         alignment=qtx.AlignRight | qtx.AlignVCenter)
        grid_l.addLayout(
            qtx.QXHBoxLayout(
                [q_model, 2, btn_open_folder, 2, q_model_info_label]), row, 1)
        row += 1
        grid_l.addWidget(q_model_dl_progress, row, 0, 1, 2)
        row += 1
        grid_l.addWidget(q_model_dl_error, row, 0, 1, 2)
        row += 1
        grid_l.addWidget(q_swap_all_faces_label,
                         row,
                         0,
                         alignment=qtx.AlignRight | qtx.AlignVCenter)
        grid_l.addLayout(qtx.QXHBoxLayout(
            [q_swap_all_faces, 4, q_face_id_label, 4, q_face_id]),
                         row,
                         1,
                         alignment=qtx.AlignLeft)
        row += 1
        grid_l.addWidget(q_morph_factor_label,
                         row,
                         0,
                         alignment=qtx.AlignRight | qtx.AlignVCenter)
        grid_l.addWidget(q_morph_factor, row, 1)
        row += 1
        grid_l.addWidget(q_sharpen_amount_label,
                         row,
                         0,
                         alignment=qtx.AlignRight | qtx.AlignVCenter)
        grid_l.addWidget(q_sharpen_amount, row, 1)
        row += 1
        grid_l.addWidget(q_pre_gamma_label,
                         row,
                         0,
                         alignment=qtx.AlignRight | qtx.AlignVCenter)
        grid_l.addLayout(
            qtx.QXHBoxLayout(
                [q_pre_gamma_red, q_pre_gamma_green, q_pre_gamma_blue]), row,
            1)
        row += 1
        grid_l.addWidget(q_post_gamma_label,
                         row,
                         0,
                         alignment=qtx.AlignRight | qtx.AlignVCenter)
        grid_l.addLayout(
            qtx.QXHBoxLayout(
                [q_post_gamma_red, q_post_gamma_green, q_post_gamma_blue]),
            row, 1)
        row += 1
        grid_l.addWidget(q_two_pass_label,
                         row,
                         0,
                         alignment=qtx.AlignRight | qtx.AlignVCenter)
        grid_l.addWidget(q_two_pass, row, 1)
        row += 1

        super().__init__(backend,
                         L('@QFaceSwapper.module_title'),
                         layout=qtx.QXVBoxLayout([grid_l]))
Example #7
0
    def __init__(self, backend: FaceAnimator, animatables_path: Path):
        self._animatables_path = animatables_path

        cs = backend.get_control_sheet()

        btn_open_folder = self.btn_open_folder = qtx.QXPushButton(
            image=QXImageDB.eye_outline('light gray'),
            tooltip_text='Reveal in Explorer',
            released=self._btn_open_folder_released,
            fixed_size=(24, 22))

        q_device_label = QLabelPopupInfo(
            label=L('@common.device'),
            popup_info_text=L('@common.help.device'))
        q_device = QComboBoxCSWDynamicSingleSwitch(
            cs.device, reflect_state_widgets=[q_device_label])

        q_animatable_label = QLabelPopupInfo(
            label=L('@QFaceAnimator.animatable'))
        q_animatable = QComboBoxCSWDynamicSingleSwitch(
            cs.animatable,
            reflect_state_widgets=[q_animatable_label, btn_open_folder])

        q_animator_face_id_label = QLabelPopupInfo(
            label=L('@QFaceAnimator.animator_face_id'))
        q_animator_face_id = QSpinBoxCSWNumber(
            cs.animator_face_id,
            reflect_state_widgets=[q_animator_face_id_label])

        q_relative_mode_label = QLabelPopupInfo(
            label=L('@QFaceAnimator.relative_mode'))
        q_relative_mode = QCheckBoxCSWFlag(
            cs.relative_mode, reflect_state_widgets=[q_relative_mode_label])

        q_relative_power = QSliderCSWNumber(cs.relative_power)

        q_update_animatables = QXPushButtonCSWSignal(
            cs.update_animatables,
            image=QXImageDB.reload_outline('light gray'),
            button_size=(24, 22))

        q_reset_reference_pose = QXPushButtonCSWSignal(
            cs.reset_reference_pose,
            text=L('@QFaceAnimator.reset_reference_pose'))

        grid_l = qtx.QXGridLayout(spacing=5)
        row = 0
        grid_l.addWidget(q_device_label,
                         row,
                         0,
                         alignment=qtx.AlignRight | qtx.AlignVCenter)
        grid_l.addWidget(q_device, row, 1, alignment=qtx.AlignLeft)
        row += 1
        grid_l.addWidget(q_animatable_label,
                         row,
                         0,
                         alignment=qtx.AlignRight | qtx.AlignVCenter)
        grid_l.addLayout(
            qtx.QXHBoxLayout(
                [q_animatable, 2, btn_open_folder, 2, q_update_animatables]),
            row, 1)
        row += 1
        grid_l.addWidget(q_animator_face_id_label,
                         row,
                         0,
                         alignment=qtx.AlignRight | qtx.AlignVCenter)
        grid_l.addWidget(q_animator_face_id, row, 1, alignment=qtx.AlignLeft)
        row += 1
        grid_l.addWidget(q_relative_mode_label,
                         row,
                         0,
                         alignment=qtx.AlignRight | qtx.AlignVCenter)
        grid_l.addLayout(qtx.QXHBoxLayout(
            [q_relative_mode, 2, q_relative_power]),
                         row,
                         1,
                         alignment=qtx.AlignLeft)

        row += 1
        grid_l.addWidget(q_reset_reference_pose, row, 0, 1, 2)
        row += 1

        super().__init__(backend,
                         L('@QFaceAnimator.module_title'),
                         layout=qtx.QXVBoxLayout([grid_l]))