Exemple #1
0
    def __init__(self, canvas, main_window, title="Photos",
                 elements=None, theme=None):
        Screen.__init__(self, canvas, "images/thumbnail",
                        main_window, title, theme)

        self._setup_gui()

        self.elements = elements

        self.throbber = self.part_swallow_get("throbber")

        self.row_widths = []

        self.over_speed = False

        self.kinetic = KineticMouse(self._move_offset)
        self.is_dragging = False
        self.mouse_down_pos = None

        self.callback_block_load = None
        self.callback_resume_load = None

        self.callback_transition_in_finished = None

        self.callback_clicked = None
        self.callback_move_offset = None
        # the resize callback is triggered in ImageGridContainer's _setup_gui
        self.callback_resized = None
        self.callback_on_theme_changed = None
Exemple #2
0
class ImageThumbScreen(Screen):
    view_name = "images_thumb"

    click_constant = 20
    speed_threshold = 1000

    def __init__(self, canvas, main_window, title="Photos",
                 elements=None, theme=None):
        Screen.__init__(self, canvas, "images/thumbnail",
                        main_window, title, theme)

        self._setup_gui()

        self.elements = elements

        self.throbber = self.part_swallow_get("throbber")

        self.row_widths = []

        self.over_speed = False

        self.kinetic = KineticMouse(self._move_offset)
        self.is_dragging = False
        self.mouse_down_pos = None

        self.callback_block_load = None
        self.callback_resume_load = None

        self.callback_transition_in_finished = None

        self.callback_clicked = None
        self.callback_move_offset = None
        # the resize callback is triggered in ImageGridContainer's _setup_gui
        self.callback_resized = None
        self.callback_on_theme_changed = None

    def ImageFrameThumb(self, theme=None):
        return ImageFrameThumb(self.evas, self, theme)

    def theme_changed(self):
        Screen.theme_changed(self)
        self.image_grid.theme_changed()
        self._setup_click_area()
        self.callback_on_theme_changed()

    def loaded(self):
        self._check_has_elements()
        self.throbber_stop()

    def _check_has_elements(self):
        if self.elements:
            self.signal_emit("message,hide", "")
        else:
            self.part_text_set("message", "No items found.")
            self.signal_emit("message,show", "")

    def throbber_start(self):
        self.throbber.signal_emit("throbber,start", "")

    def throbber_stop(self):
        self.throbber.signal_emit("throbber,stop", "")

    def _setup_gui(self):
        self.image_grid = ImageGridContainer(self,
                                             hpadding=20, vpadding=20)

        self.part_swallow("contents", self.image_grid)
        self._setup_click_area()

    def _setup_click_area(self):
        self.click_area = self.part_object_get("click_area")
        self.click_area.on_mouse_down_add(self._cb_on_mouse_down)
        self.click_area.on_mouse_up_add(self._cb_on_mouse_up)
        self.click_area.on_mouse_move_add(self._cb_on_mouse_move)

    def clear_all(self):
        self.image_grid.clear_all()

    def _check_speed(self, keep_moving):
        if not keep_moving:
            if self.over_speed:
                log.debug("resume load callback")
                if self.callback_resume_load:
                    self.callback_resume_load()
            self.over_speed = False
            return

        if self.kinetic.animation:
            speed = abs(self.kinetic.anim_speed)
            log.debug("abs vel = %s", speed)

            if not self.over_speed and (speed > self.speed_threshold):
                log.debug("hold file sets")
                if self.callback_block_load:
                    self.callback_block_load()
                self.over_speed = True

    def _move_offset(self, offset):
        if not self.callback_move_offset:
            return False

        keep_moving = self.callback_move_offset(offset)
        self._check_speed(keep_moving)

        return keep_moving

    def _emit_clicked(self, x, y):
        obj = self.image_grid.object_at_xy(x, y)
        if obj:
            self.callback_clicked(obj)

    def _is_click_possible(self, x):
        if self.is_dragging or self.mouse_down_pos is None:
            return False
        else:
            return abs(x - self.mouse_down_pos) <= self.click_constant

    def _cb_on_mouse_up(self, obj, event):
        if not event.button == 1:
            return

        x, y = event.position.canvas

        if self._is_click_possible(x):
            self._emit_clicked(x, y)
            self.kinetic.mouse_cancel()
        else:
            self.kinetic.mouse_up(x)

    def _cb_on_mouse_down(self, obj, event):
        if not event.button == 1:
            return

        x, y = event.position.canvas

        self.mouse_down_pos = x
        self.is_dragging = not self.kinetic.mouse_down(x)

    def _cb_on_mouse_move(self, obj, event):
        if not event.buttons == 1:
            return

        x, y = event.position.canvas

        if not self._is_click_possible(x):
            self.is_dragging = True

        self.kinetic.mouse_move(x)

    @edje.decorators.signal_callback("transition,in,finished", "")
    def cb_transition_in_finished(self, emission, source):
        self.callback_transition_in_finished()

    @evas.decorators.del_callback
    def _cb_on_delete(self):
        self.image_grid.delete()