Ejemplo n.º 1
0
 def __init__( self, parent: QW.QWidget ):
     
     QW.QWidget.__init__( self, parent )
     
     self._current_ratings_numerical_service = None
     
     self._flip_or_set_action = ClientGUICommon.BetterChoice( self )
     
     self._flip_or_set_action.addItem( 'set', HC.CONTENT_UPDATE_SET )
     self._flip_or_set_action.addItem( 'flip on and off', HC.CONTENT_UPDATE_FLIP )
     
     self._flip_or_set_action.SetValue( HC.CONTENT_UPDATE_SET )
     
     self._service_keys = ClientGUICommon.BetterChoice( self )
     self._service_keys.currentIndexChanged.connect( self._UpdateSliderRange )
     self._ratings_numerical_slider = QP.LabelledSlider( self )
     self._ratings_numerical_remove = QW.QCheckBox( 'remove rating', self )
     
     #
     
     services = HG.client_controller.services_manager.GetServices( ( HC.LOCAL_RATING_NUMERICAL, ) )
     
     if len( services ) == 0:
         
         self._service_keys.addItem( 'you have no numerical rating services', None )
         
     else:
         
         for service in services:
             
             service_name = service.GetName()
             service_key = service.GetServiceKey()
             
             self._service_keys.addItem( service_name, service_key )
             
         
     
     self._UpdateSliderRange()
     
     #
     
     vbox = QP.VBoxLayout()
     
     ratings_numerical_hbox = QP.HBoxLayout()
     
     QP.AddToLayout( ratings_numerical_hbox, self._service_keys, CC.FLAGS_CENTER_PERPENDICULAR_EXPAND_DEPTH )
     QP.AddToLayout( ratings_numerical_hbox, self._ratings_numerical_slider, CC.FLAGS_CENTER_PERPENDICULAR )
     QP.AddToLayout( ratings_numerical_hbox, self._ratings_numerical_remove, CC.FLAGS_CENTER_PERPENDICULAR )
     
     QP.AddToLayout( vbox, self._flip_or_set_action, CC.FLAGS_EXPAND_PERPENDICULAR )
     QP.AddToLayout( vbox, ratings_numerical_hbox, CC.FLAGS_EXPAND_PERPENDICULAR )
     
     self.setLayout( vbox )
     
     self._ratings_numerical_remove.toggled.connect( self._UpdateFlipAllowed )
Ejemplo n.º 2
0
    def __init__(self, parent, command, shortcuts_name):

        ClientGUIScrolledPanels.EditPanel.__init__(self, parent)

        self._current_ratings_like_service = None
        self._current_ratings_numerical_service = None

        #

        is_custom_or_media = shortcuts_name not in ClientGUIShortcuts.SHORTCUTS_RESERVED_NAMES or shortcuts_name == 'media'

        self._command_type_choice = ClientGUICommon.BetterChoice(self)

        self._command_type_choice.addItem('simple command',
                                          self.COMMAND_TYPE_PANEL_SIMPLE)

        if is_custom_or_media:

            self._command_type_choice.addItem('tag command',
                                              self.COMMAND_TYPE_PANEL_TAG)
            self._command_type_choice.addItem(
                'like/dislike rating command',
                self.COMMAND_TYPE_PANEL_RATING_LIKE)
            self._command_type_choice.addItem(
                'numerical rating command',
                self.COMMAND_TYPE_PANEL_RATING_NUMERICAL)
            self._command_type_choice.addItem(
                'numerical rating increment/decrement command',
                self.COMMAND_TYPE_PANEL_RATING_NUMERICAL_INCDEC)

        else:

            self._command_type_choice.hide()

        if shortcuts_name in ClientGUIShortcuts.SHORTCUTS_RESERVED_NAMES:

            choices = ClientGUIShortcuts.simple_shortcut_name_to_action_lookup[
                shortcuts_name]

        else:

            choices = ClientGUIShortcuts.simple_shortcut_name_to_action_lookup[
                'custom']

        choices = list(choices)

        choices.sort()

        self._simple_actions = QW.QComboBox(self)
        self._simple_actions.addItems(choices)

        #

        self._flip_or_set_action = ClientGUICommon.BetterChoice(self)

        self._flip_or_set_action.addItem('set', HC.CONTENT_UPDATE_SET)
        self._flip_or_set_action.addItem('flip on and off',
                                         HC.CONTENT_UPDATE_FLIP)

        self._flip_or_set_action.SetValue(HC.CONTENT_UPDATE_SET)

        #

        self._tag_panel = QW.QWidget(self)

        self._tag_service_keys = QW.QComboBox(self._tag_panel)

        self._tag_value = QW.QLineEdit()
        self._tag_value.setReadOnly(True)

        expand_parents = False

        self._tag_input = ClientGUIACDropdown.AutoCompleteDropdownTagsWrite(
            self._tag_panel, self.SetTags, expand_parents,
            CC.LOCAL_FILE_SERVICE_KEY, CC.COMBINED_TAG_SERVICE_KEY)

        #

        self._ratings_like_panel = QW.QWidget(self)

        self._ratings_like_service_keys = QW.QComboBox(
            self._ratings_like_panel)
        self._ratings_like_service_keys.currentIndexChanged.connect(
            self._SetActions)
        self._ratings_like_like = QW.QRadioButton('like',
                                                  self._ratings_like_panel)
        self._ratings_like_dislike = QW.QRadioButton('dislike',
                                                     self._ratings_like_panel)
        self._ratings_like_remove = QW.QRadioButton('remove rating',
                                                    self._ratings_like_panel)

        #

        self._ratings_numerical_panel = QW.QWidget(self)

        self._ratings_numerical_service_keys = QW.QComboBox(
            self._ratings_numerical_panel)
        self._ratings_numerical_service_keys.currentIndexChanged.connect(
            self._SetActions)
        self._ratings_numerical_slider = QP.LabelledSlider(
            self._ratings_numerical_panel)
        self._ratings_numerical_remove = QW.QCheckBox(
            'remove rating', self._ratings_numerical_panel)

        #

        self._ratings_numerical_incdec_panel = QW.QWidget(self)

        self._ratings_numerical_incdec_service_keys = QW.QComboBox(
            self._ratings_numerical_incdec_panel)

        self._ratings_numerical_incdec = ClientGUICommon.BetterChoice(
            self._ratings_numerical_incdec_panel)

        self._ratings_numerical_incdec.addItem(
            HC.content_update_string_lookup[HC.CONTENT_UPDATE_INCREMENT],
            HC.CONTENT_UPDATE_INCREMENT)
        self._ratings_numerical_incdec.addItem(
            HC.content_update_string_lookup[HC.CONTENT_UPDATE_DECREMENT],
            HC.CONTENT_UPDATE_DECREMENT)

        #

        services = HG.client_controller.services_manager.GetServices(
            (HC.LOCAL_TAG, HC.TAG_REPOSITORY, HC.LOCAL_RATING_LIKE,
             HC.LOCAL_RATING_NUMERICAL))

        for service in services:

            service_name = service.GetName()
            service_key = service.GetServiceKey()

            service_type = service.GetServiceType()

            if service_type in HC.REAL_TAG_SERVICES:

                self._tag_service_keys.addItem(service_name, service_key)

            elif service_type == HC.LOCAL_RATING_LIKE:

                self._ratings_like_service_keys.addItem(
                    service_name, service_key)

            elif service_type == HC.LOCAL_RATING_NUMERICAL:

                self._ratings_numerical_service_keys.addItem(
                    service_name, service_key)
                self._ratings_numerical_incdec_service_keys.addItem(
                    service_name, service_key)

        self._SetActions()

        #

        command_type = command.GetCommandType()
        data = command.GetData()

        if command_type == CC.APPLICATION_COMMAND_TYPE_SIMPLE:

            action = data

            QP.SetStringSelection(self._simple_actions, action)

            self._command_type_choice.SetValue(self.COMMAND_TYPE_PANEL_SIMPLE)

        else:

            (service_key, content_type, action, value) = data

            if HG.client_controller.services_manager.ServiceExists(
                    service_key):

                self._service = HG.client_controller.services_manager.GetService(
                    service_key)

            else:

                QW.QMessageBox.warning(
                    self, 'Warning',
                    'The service that this command relies upon no longer exists! This command will reset to a default form.'
                )

                local_tag_services = list(
                    HG.client_controller.services_manager.GetServices(
                        (HC.LOCAL_TAG, )))

                self._service = local_tag_services[0]

                content_type = HC.CONTENT_TYPE_MAPPINGS
                action = HC.CONTENT_UPDATE_SET

                value = 'tag'

            service_name = self._service.GetName()
            service_type = self._service.GetServiceType()

            self._flip_or_set_action.SetValue(action)

            if service_type in HC.REAL_TAG_SERVICES:

                QP.SetStringSelection(self._tag_service_keys, service_name)

                self._tag_value.setText(value)

                self._command_type_choice.SetValue(self.COMMAND_TYPE_PANEL_TAG)

            elif service_type == HC.LOCAL_RATING_LIKE:

                QP.SetStringSelection(self._ratings_like_service_keys,
                                      service_name)

                self._SetActions()

                if value is None:

                    self._ratings_like_remove.setChecked(True)

                elif value == True:

                    self._ratings_like_like.setChecked(True)

                elif value == False:

                    self._ratings_like_dislike.setChecked(True)

                self._command_type_choice.SetValue(
                    self.COMMAND_TYPE_PANEL_RATING_LIKE)

            elif service_type == HC.LOCAL_RATING_NUMERICAL:

                if action in (HC.CONTENT_UPDATE_SET, HC.CONTENT_UPDATE_FLIP):

                    QP.SetStringSelection(self._ratings_numerical_service_keys,
                                          service_name)

                    self._SetActions()

                    if value is None:

                        self._ratings_numerical_remove.setChecked(True)

                    else:

                        num_stars = self._current_ratings_numerical_service.GetNumStars(
                        )

                        slider_value = int(round(value * num_stars))

                        self._ratings_numerical_slider.SetValue(slider_value)

                    self._command_type_choice.SetValue(
                        self.COMMAND_TYPE_PANEL_RATING_NUMERICAL)

                elif action in (HC.CONTENT_UPDATE_INCREMENT,
                                HC.CONTENT_UPDATE_DECREMENT):

                    QP.SetStringSelection(
                        self._ratings_numerical_incdec_service_keys,
                        service_name)

                    self._ratings_numerical_incdec.SetValue(action)

                    self._command_type_choice.SetValue(
                        self.COMMAND_TYPE_PANEL_RATING_NUMERICAL_INCDEC)

        #

        tag_sub_vbox = QP.VBoxLayout()

        QP.AddToLayout(tag_sub_vbox, self._tag_value,
                       CC.FLAGS_EXPAND_PERPENDICULAR)
        QP.AddToLayout(tag_sub_vbox, self._tag_input,
                       CC.FLAGS_EXPAND_BOTH_WAYS)

        tag_hbox = QP.HBoxLayout()

        QP.AddToLayout(tag_hbox, self._tag_service_keys,
                       CC.FLAGS_EXPAND_DEPTH_ONLY)
        QP.AddToLayout(tag_hbox, tag_sub_vbox, CC.FLAGS_EXPAND_SIZER_BOTH_WAYS)

        self._tag_panel.setLayout(tag_hbox)

        ratings_like_hbox = QP.HBoxLayout()

        QP.AddToLayout(ratings_like_hbox, self._ratings_like_service_keys,
                       CC.FLAGS_EXPAND_DEPTH_ONLY)
        QP.AddToLayout(ratings_like_hbox, self._ratings_like_like,
                       CC.FLAGS_VCENTER)
        QP.AddToLayout(ratings_like_hbox, self._ratings_like_dislike,
                       CC.FLAGS_VCENTER)
        QP.AddToLayout(ratings_like_hbox, self._ratings_like_remove,
                       CC.FLAGS_VCENTER)

        self._ratings_like_panel.setLayout(ratings_like_hbox)

        ratings_numerical_hbox = QP.HBoxLayout()

        QP.AddToLayout(ratings_numerical_hbox,
                       self._ratings_numerical_service_keys,
                       CC.FLAGS_EXPAND_DEPTH_ONLY)
        QP.AddToLayout(ratings_numerical_hbox, self._ratings_numerical_slider,
                       CC.FLAGS_VCENTER)
        QP.AddToLayout(ratings_numerical_hbox, self._ratings_numerical_remove,
                       CC.FLAGS_VCENTER)

        self._ratings_numerical_panel.setLayout(ratings_numerical_hbox)

        hbox = QP.HBoxLayout()

        QP.AddToLayout(hbox, self._ratings_numerical_incdec_service_keys,
                       CC.FLAGS_EXPAND_DEPTH_ONLY)
        QP.AddToLayout(hbox, self._ratings_numerical_incdec, CC.FLAGS_VCENTER)

        self._ratings_numerical_incdec_panel.setLayout(hbox)

        vbox = QP.VBoxLayout()

        QP.AddToLayout(vbox, self._command_type_choice,
                       CC.FLAGS_EXPAND_PERPENDICULAR)
        QP.AddToLayout(vbox, self._simple_actions,
                       CC.FLAGS_EXPAND_PERPENDICULAR)
        QP.AddToLayout(vbox, self._flip_or_set_action,
                       CC.FLAGS_EXPAND_PERPENDICULAR)
        QP.AddToLayout(vbox, self._tag_panel,
                       CC.FLAGS_EXPAND_SIZER_PERPENDICULAR)
        QP.AddToLayout(vbox, self._ratings_like_panel,
                       CC.FLAGS_EXPAND_SIZER_PERPENDICULAR)
        QP.AddToLayout(vbox, self._ratings_numerical_panel,
                       CC.FLAGS_EXPAND_SIZER_PERPENDICULAR)
        QP.AddToLayout(vbox, self._ratings_numerical_incdec_panel,
                       CC.FLAGS_EXPAND_SIZER_PERPENDICULAR)
        QP.AddToLayout(vbox, QW.QWidget(self), CC.FLAGS_EXPAND_BOTH_WAYS)

        self.widget().setLayout(vbox)

        self._UpdateVisibleControls()

        #

        self._command_type_choice.currentIndexChanged.connect(
            self._UpdateVisibleControls)