Example #1
0
    def __init__(self, fragment, args, client, animation_manager=None, parent=None, has_menu_pos=True):
        """
            @fragment [Fragment] user_settings.Fragment object to describe fragment
            @client [RpcdClient] client
            @parent [QWidget] parent widget
        """

        #assert isinstance(client, RpcdClient)
        assert frag_types.has_key(fragment.type)

        QFrame.__init__(self, parent)

        self.animation_manager = animation_manager
        self.has_menu_pos = has_menu_pos
        self.fragment = fragment
        self.fetcher = frag_types[fragment.type].fetcher(fragment, args, client)
        self.connect(self.fetcher, SIGNAL(self.fetcher.ERROR_SIGNAL), self.errorHandler)
        self.window = parent
        self.cumulative_mode = False
        self.interval = Interval('daily')

        self.setFragmentColor()

        self.setFrameShadow(QFrame.Sunken)
        self.setFrameShape(QFrame.StyledPanel)
        self.setContextMenuPolicy(Qt.ActionsContextMenu)

        self.toolspace = None
        self.vbox = QVBoxLayout()
#        self.vbox.setContentsMargins(9,0,9,9)
        self.vbox.setContentsMargins(9,0,9,0)
        self.setLayout(self.vbox)

        self.stacked = QStackedWidget(self)
        updating_label = QLabel("<img src=\":/icons/refresh.png\" /><br />%s" % self.tr("Updating..."))
        updating_label.setAlignment(Qt.AlignHCenter|Qt.AlignVCenter)
        self.stacked.addWidget(updating_label)

        # Create all actions for the rightclick context menu
        self.action_list = []
        self.switch_actions = {}

        self.viewlayout = QHBoxLayout()
        self.viewlayout.setContentsMargins(0,0,0,0)
        self.viewlayout.setSpacing(2)
        self.viewlayout.addStretch()
        widget = QWidget()
        widget.setLayout(self.viewlayout)
        self.vbox.addWidget(widget)

        self.line = QFrame(self)
        self.line.setFrameShape(QFrame.HLine)
        self.line.setFrameShadow(QFrame.Sunken)
        self.line.setObjectName("line")

        # Menu to choose position of fragment
        if self.has_menu_pos:
            self.pos_menu = QMenu(tr('Position'), self)
#        self.pos_action = QAction(tr('Position'), self.pos_menu)

        def make_lambda(l):
            """ usefull to create the lambda function with a copied parameter. or it'll bug """
            return lambda: QTimer.singleShot(0, lambda: self.setView(l))

        self.buttons = []

        button = QToolButton()
        button.visible = True
        button.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Ignored)
        button.setMinimumSize(0,16)
        button.setIcon(QIcon(":/icons/refresh.png"))
        button.setFixedHeight(16)
        button.setToolTip(tr("Refresh"))
        self.connect(button, SIGNAL("clicked()"), self.updateData)
        self.viewlayout.addWidget(button)
        self.buttons.append(button)

        # All of the views available for this kind of fragment.
        if len(frag_types[fragment.type].views) > 1:
            for label in frag_types[fragment.type].views:

                try:
                    item_name = views_list_label[label]
                except KeyError:
                    continue

                # item_name returns a unicode string, but PyQT (Qt 4.2.1) won't convert it to a char*
                # unless we convert it to a non-unicode string ....
                action = QAction(QIcon(':/icons/%s' % label),
                                 tr("Switch to %s") % self.tr(unicode(item_name)), self)
                self.connect(action, SIGNAL("triggered()"), make_lambda(label))
                self.action_list += [action]
                self.switch_actions[label] = action

                button = QToolButton()
                button.visible = True
                button.setBackgroundRole(QPalette.Button)
                button.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Minimum)
                button.setMinimumSize(0,16)
                button.setFixedHeight(16)
                button.setIcon(QIcon(":/icons/%s" % label))
                button.setToolTip(tr("Switch to %s") % self.tr(unicode(item_name)))
                self.connect(button, SIGNAL("clicked()"), make_lambda(label))
                self.viewlayout.addWidget(button)
                self.buttons.append(button)

            # Separator
            action = QAction(self)
            action.setSeparator(True)
            self.action_list += [action]

        # Refresh
        action = QAction(QIcon(':/icons/refresh.png'), tr('Refresh'), self)
        self.connect(action, SIGNAL('triggered()'), self.updateData)
        self.action_list += [action]
        if self.FRAGMENT_EDITION:
            # Edit
            action = QAction(QIcon(':/icons/edit.png'), tr('Edit this fragment...'), self)
            self.connect(action, SIGNAL('triggered()'), self.editFragment)
            self.action_list += [action]
            # Delete
            action = QAction(QIcon(':/icons/moins.png'), tr('Delete this fragment'), self)
            self.connect(action, SIGNAL('triggered()'), self.removeFragment)
            self.action_list += [action]

        self.setView(fragment.view, update=False)

        self.setAcceptDrops(True)
        self.pos = -1