예제 #1
0
class UpdatesTab(BaseTab, ThreadedObject):
    title = "Updates"
    image = "toolbarScriptReload"
    identifier = "updates"

    def setup(self):
        self.list = UpdateList((20, 20, -20, -60),
                               editCallback=self.update_interface,
                               refreshCallback=self.update_interface)

        self.updated_at_text = UpdatedTimeTextBox((120, -38, -20, 20),
                                                  sizeStyle="small")

        self.update_button = UpdateButton((-160, -42, 140, 20),
                                          callback=self.in_thread.install_updates)

        self.refresh_button = Button((20, -42, 90, 20), "Refresh",
                                     callback=self.in_thread.update_list)

        if env.environment == 'production':
            self.refresh_button.show(False)

        self.update_interface()

    def activate(self):
        self.set_default_button(self.update_button)
        self.in_thread.update_list()

    @progress.each('installable')
    @progress.tick('repositoryWillDownload',
                   'Downloading {repository.repo}')
    @progress.tick('extensionWillInstall',
                   'Installing {extension.bundle.name}')
    def install_updates(self, sender=None):
        for extension in self.installable:
            extension.update()

        self.update_list(force=True)

    def update_list(self, force=False):
        if self.list.is_refreshing:
            return None

        try:
            self.update_progress = Overlay("Checking for updates...",
                                           (20, 20, -20, -60),
                                           opacity=0.6,
                                           offset=90)
            self.refresh_button.enable(False)
            self.list.refresh(force=force)
            self.enable()
        except UpdateList.ConnectionError:
            self.disable("Couldn't connect to the internet...")
        finally:
            del self.update_progress
            self.refresh_button.enable(True)

    def update_interface(self, sender=None):
        self.updated_at_text.update()
        self.update_button.update(len(self.list.selected))

    def disable(self, *args, **kwargs):
        self.list.enable(False)
        super(UpdatesTab, self).disable(*args, **kwargs)

    def enable(self, *args, **kwargs):
        self.list.enable(True)
        super(UpdatesTab, self).enable(*args, **kwargs)

    @property
    def installable(self):
        return self.list.selected
예제 #2
0
class SliderGroup(Group):

    _callback = weakrefCallbackProperty()

    def __init__(self, width, sliderInfo, continuous=True, callback=None):
        super().__init__((0, 0, width, 0))
        self._callback = callback
        self._continuous = continuous
        self._tags = []
        self.setSliderInfo(sliderInfo)

    def _breakCycles(self):
        self._callback = None
        super()._breakCycles()

    def setSliderInfo(self, sliderInfo):
        savedState = self.get()
        # clear all subviews
        for attr, value in list(self.__dict__.items()):
            if isinstance(value, VanillaBaseObject):
                delattr(self, attr)
        margin = 10
        y = margin
        self._tags = []
        self._defaultValues = {}
        for tag, (label, minValue, defaultValue,
                  maxValue) in sliderInfo.items():
            self._tags.append(tag)
            self._defaultValues[tag] = defaultValue
            attrName = f"slider_{tag}"
            slider = SliderPlus((margin, y, -margin, 40),
                                label,
                                minValue,
                                defaultValue,
                                maxValue,
                                continuous=self._continuous,
                                callback=self._sliderChanged)
            setattr(self, attrName, slider)
            y += 50

        self.resetAllButton = Button((10, y, 120, 25), "Reset all axes",
                                     self._resetAllButtonCallback)
        self.resetAllButton.enable(False)
        y += 35

        posSize = (0, 0, self.getPosSize()[2], y)
        self.setPosSize(posSize)
        self._updateState(savedState)

    def _sliderChanged(self, sender):
        self.resetAllButton.enable(True)
        callCallback(self._callback, self)

    def _resetAllButtonCallback(self, sender):
        self.resetAllButton.enable(False)
        for tag in self._tags:
            attrName = f"slider_{tag}"
            slider = getattr(self, attrName)
            slider.set(self._defaultValues[tag])
        callCallback(self._callback, self)

    def get(self):
        state = {}
        for tag in self._tags:
            attrName = f"slider_{tag}"
            slider = getattr(self, attrName)
            value = slider.get()
            if value is not None:
                if len(self._defaultValues[tag]
                       ) != 1 or value not in self._defaultValues[tag]:
                    state[tag] = value
        return state

    def _updateState(self, state):
        for tag, value in state.items():
            attrName = f"slider_{tag}"
            slider = getattr(self, attrName, None)
            if slider is not None:
                slider.set(value)

    def set(self, state):
        if state:
            self.resetAllButton.enable(True)
        for tag in self._tags:
            attrName = f"slider_{tag}"
            slider = getattr(self, attrName)
            value = state.get(tag)
            if value is None:
                value = self._defaultValues[tag]
            slider.set(value)
예제 #3
0
class UpdatesTab(BaseTab, ThreadedObject):
    title = "Updates"
    image = "toolbarScriptReload"
    identifier = "updates"

    max_tab_size = (500, 10000)

    def setup(self):
        self.list = UpdateList((20, 20, -20, -60),
                               editCallback=self.update_interface,
                               refreshCallback=self.update_interface)

        self.updated_at_text = UpdatedTimeTextBox((120, -38, -20, 20),
                                                  sizeStyle="small")

        self.update_button = UpdateButton(
            (-160, -42, 140, 20), callback=self.in_thread.install_updates)

        self.refresh_button = Button((20, -42, 90, 20),
                                     "Refresh",
                                     callback=self.in_thread.update_list)

        if env.environment == 'production':
            self.refresh_button.show(False)

        self.update_interface()

    def activate(self):
        self.set_default_button(self.update_button)
        self.in_thread.update_list()

    @progress.each('installable')
    @progress.tick('repositoryWillDownload', 'Downloading {repository.repo}')
    @progress.tick('extensionWillInstall',
                   'Installing {extension.bundle.name}')
    def install_updates(self, sender=None):
        for extension in self.installable:
            extension.update()

        self.update_list(force=True)

    def update_list(self, force=False):
        if self.list.is_refreshing:
            return None

        try:
            self.update_progress = Overlay("Checking for updates...",
                                           (20, 20, -20, -60),
                                           opacity=0.6,
                                           offset=90)
            self.refresh_button.enable(False)
            self.list.refresh(force=force)
            self.enable()
        except UpdateList.ConnectionError:
            self.disable("Couldn't connect to the internet...")
        finally:
            del self.update_progress
            self.refresh_button.enable(True)

    def update_interface(self, sender=None):
        self.updated_at_text.update()
        self.update_button.update(len(self.list.selected))

    def disable(self, *args, **kwargs):
        self.list.enable(False)
        super(UpdatesTab, self).disable(*args, **kwargs)

    def enable(self, *args, **kwargs):
        self.list.enable(True)
        super(UpdatesTab, self).enable(*args, **kwargs)

    @property
    def installable(self):
        return self.list.selected