Ejemplo n.º 1
0
class NewEventTextInput(TextInput):
    '''NewEventTextInput is TextInput which is used to create a new event
       for a widget. When event is created then on_create_event is emitted
    '''

    __events__ = ('on_create_event',)

    info_message = StringProperty(None)
    '''Message which will be displayed in the InfoBubble
       :data:`info_message` is a :class:`~kivy.properties.StringProperty`
    '''

    def on_create_event(self, *args):
        '''Default event handler for 'on_create_event'
        '''
        pass

    def on_text_validate(self):
        '''Create a new event to a CustomWidget
        '''
        if self.text[:3] == 'on_':
            self.dispatch('on_create_event')

    def on_touch_down(self, touch):
        '''Default handler for 'on_touch_down' event.
        '''
        if self.collide_point(*touch.pos):
            self.info_bubble = InfoBubble(message=self.info_message)
            bubble_pos = list(self.to_window(*self.pos))
            bubble_pos[1] += self.height
            self.info_bubble.show(bubble_pos, 1.5)

        return super(NewEventTextInput, self).on_touch_down(touch)
Ejemplo n.º 2
0
class NewEventTextInput(TextInput):
    '''NewEventTextInput is TextInput which is used to create a new event
       for a widget. When event is created then on_create_event is emitted
    '''

    __events__ = ('on_create_event',)

    info_message = StringProperty(None)
    '''Message which will be displayed in the InfoBubble
       :data:`info_message` is a :class:`~kivy.properties.StringProperty`
    '''

    def on_create_event(self, *args):
        '''Default event handler for 'on_create_event'
        '''
        pass

    def on_text_validate(self):
        '''Create a new event to a CustomWidget
        '''
        if self.text[:3] == 'on_':
            self.dispatch('on_create_event')

    def on_touch_down(self, touch):
        '''Default handler for 'on_touch_down' event.
        '''
        if self.collide_point(*touch.pos):
            self.info_bubble = InfoBubble(message=self.info_message)
            bubble_pos = list(self.to_window(*self.pos))
            bubble_pos[1] += self.height
            self.info_bubble.show(bubble_pos, 1.5)

        return super(NewEventTextInput, self).on_touch_down(touch)
Ejemplo n.º 3
0
class NewEventTextInput(TextInput):
    '''NewEventTextInput is TextInput which is used to create a new event
       for a widget. When event is created then on_create_event is emitted
    '''

    __events__ = ('on_create_event',)
    
    info_message = StringProperty(None)
    '''Message which will be displayed in the InfoBubble
       :data:`info_message` is a :class:`~kivy.properties.StringProperty`
    '''

    def on_create_event(self, *args):
        pass

    def insert_text(self, substring, from_undo=False):
        if '\n' in substring:
            #Enter pressed create a new event
            substring = substring.replace('\n', '')
            if self.text[:3] == 'on_':
                self.dispatch('on_create_event')

        super(NewEventTextInput, self).insert_text(substring, from_undo)

    def on_touch_down(self, touch):
        if self.collide_point(*touch.pos):
            self.info_bubble = InfoBubble(message=self.info_message)
            self.info_bubble.show(self.pos, 1)

        return super(NewEventTextInput, self).on_touch_down(touch)
Ejemplo n.º 4
0
    def on_touch_down(self, touch):
        '''Default handler for 'on_touch_down' event
        '''
        if self.collide_point(*touch.pos):
            self.info_bubble = InfoBubble(message=self.info_message)
            self.info_bubble.show(self.pos, 1)

        return super(EventHandlerTextInput, self).on_touch_down(touch)
Ejemplo n.º 5
0
    def on_touch_down(self, touch):
        '''Default handler for 'on_touch_down' event
        '''
        if self.collide_point(*touch.pos):
            self.info_bubble = InfoBubble(message=self.info_message)
            bubble_pos = list(self.to_window(*self.pos))
            bubble_pos[1] += self.height
            self.info_bubble.show(bubble_pos, 1.5)

        return super(EventHandlerTextInput, self).on_touch_down(touch)
Ejemplo n.º 6
0
    def on_touch_down(self, touch):
        '''Default handler for 'on_touch_down' event
        '''
        if self.collide_point(*touch.pos):
            self.info_bubble = InfoBubble(message=self.info_message)
            bubble_pos = list(self.to_window(*self.pos))
            bubble_pos[1] += self.height
            self.info_bubble.show(bubble_pos, 1.5)

        return super(EventHandlerTextInput, self).on_touch_down(touch)
Ejemplo n.º 7
0
class NewEventTextInput(TextInput):
    '''NewEventTextInput is TextInput which is used to create a new event
       for a widget. When event is created then on_create_event is emitted
    '''

    __events__ = ('on_create_event',)

    info_message = StringProperty(None)
    '''Message which will be displayed in the InfoBubble
       :data:`info_message` is a :class:`~kivy.properties.StringProperty`
    '''

    def on_create_event(self, *args):
        '''Default event handler for 'on_create_event'
        '''
        pass

    def insert_text(self, substring, from_undo=False):
        '''Override of 'insert_text' of :class:`kivy.uix.textinput.TextInput`
        '''
        if '\n' in substring:
            # Enter pressed create a new event
            substring = substring.replace('\n', '')
            if self.text[:3] == 'on_':
                self.dispatch('on_create_event')

        super(NewEventTextInput, self).insert_text(substring, from_undo)

    def on_touch_down(self, touch):
        '''Default handler for 'on_touch_down' event.
        '''
        if self.collide_point(*touch.pos):
            self.info_bubble = InfoBubble(message=self.info_message)
            self.info_bubble.show(self.pos, 1)

        return super(NewEventTextInput, self).on_touch_down(touch)
Ejemplo n.º 8
0
class EventHandlerTextInput(TextInput):
    '''EventHandlerTextInput is used to display/change/remove EventHandler
       for an event
    '''

    eventwidget = ObjectProperty(None)
    '''Current selected widget
       :data:`eventwidget` is a :class:`~kivy.properties.ObjectProperty`
    '''

    eventname = StringProperty(None)
    '''Name of current event
       :data:`eventname` is a :class:`~kivy.properties.ObjectProperty`
    '''

    kv_code_input = ObjectProperty()
    '''Reference to KVLangArea
       :data:`kv_code_input` is a :class:`~kivy.properties.ObjectProperty`
    '''

    text_inserted = BooleanProperty(None)
    '''Specifies whether text has been inserted or not
       :data:`text_inserted` is a :class:`~kivy.properties.ObjectProperty`
    '''

    project_loader = ObjectProperty(None)
    '''Reference to ProjectLoader
       :data:`project_loader` is a :class:`~kivy.properties.ObjectProperty`
    '''

    info_message = StringProperty(None)
    '''Message to be displayed by InfoBubble
       :data:`info_message` is a :class:`~kivy.properties.StringProperty`
    '''

    dropdown = ObjectProperty(None)
    '''DropDown which will be displayed to show possible
       functions for that event
       :data:`dropdown` is a :class:`~kivy.properties.ObjectProperty`
    '''

    def on_touch_down(self, touch):
        '''Default handler for 'on_touch_down' event
        '''
        if self.collide_point(*touch.pos):
            self.info_bubble = InfoBubble(message=self.info_message)
            bubble_pos = list(self.to_window(*self.pos))
            bubble_pos[1] += self.height
            self.info_bubble.show(bubble_pos, 1.5)

        return super(EventHandlerTextInput, self).on_touch_down(touch)

    def show_drop_down_for_widget(self, widget):
        '''Show all functions for a widget in a Dropdown.
        '''
        self.dropdown = DropDown()
        list_funcs = dir(widget)
        for func in list_funcs:
            if '__' not in func and hasattr(getattr(widget, func), '__call__'):
                btn = Button(text=func, size_hint=(None, None),
                             size=(100, 30), shorten=True)
                self.dropdown.add_widget(btn)
                btn.bind(on_release=lambda btn: self.dropdown.select(btn.text))
                btn.text_size = [btn.size[0] - 4, btn.size[1]]
                btn.valign = 'middle'

        self.dropdown.open(self)
        self.dropdown.pos = (self.x, self.y)
        self.dropdown.bind(on_select=self._dropdown_select)

    def _dropdown_select(self, instance, value):
        '''Event handler for 'on_select' event of self.dropdown
        '''
        self.text += value

    def on_text(self, instance, value):
        '''Default event handler for 'on_text'
        '''
        if not self.kv_code_input:
            return

        self.kv_code_input.set_event_handler(self.eventwidget,
                                             self.eventname,
                                             self.text)
        if self.text and self.text[-1] == '.':
            if self.text == 'self.':
                self.show_drop_down_for_widget(self.eventwidget)

            elif self.text == 'root.':
                self.show_drop_down_for_widget(
                    self.project_loader.root_rule.widget)

            else:
                _id = self.text.replace('.', '')
                root = self.project_loader.root_rule.widget
                widget = None

                if _id in root.ids:
                    widget = root.ids[_id]

                if widget:
                    self.show_drop_down_for_widget(widget)

        elif self.dropdown:
            self.dropdown.dismiss()
Ejemplo n.º 9
0
class EventHandlerTextInput(TextInput):
    '''EventHandlerTextInput is used to display/change/remove EventHandler
       for an event
    '''

    eventwidget = ObjectProperty(None)
    '''Current selected widget
       :data:`eventwidget` is a :class:`~kivy.properties.ObjectProperty`
    '''

    eventname = StringProperty(None)
    '''Name of current event
       :data:`eventname` is a :class:`~kivy.properties.ObjectProperty`
    '''

    kv_code_input = ObjectProperty()
    '''Reference to KVLangArea
       :data:`kv_code_input` is a :class:`~kivy.properties.ObjectProperty`
    '''

    text_inserted = BooleanProperty(None)
    '''Specifies whether text has been inserted or not
       :data:`text_inserted` is a :class:`~kivy.properties.ObjectProperty`
    '''

    info_message = StringProperty(None)
    '''Message to be displayed by InfoBubble
       :data:`info_message` is a :class:`~kivy.properties.StringProperty`
    '''

    dropdown = ObjectProperty(None)
    '''DropDown which will be displayed to show possible
       functions for that event
       :data:`dropdown` is a :class:`~kivy.properties.ObjectProperty`
    '''

    def on_touch_down(self, touch):
        '''Default handler for 'on_touch_down' event
        '''
        if self.collide_point(*touch.pos):
            self.info_bubble = InfoBubble(message=self.info_message)
            bubble_pos = list(self.to_window(*self.pos))
            bubble_pos[1] += self.height
            self.info_bubble.show(bubble_pos, 1.5)

        return super(EventHandlerTextInput, self).on_touch_down(touch)

    def show_drop_down_for_widget(self, widget):
        '''Show all functions for a widget in a Dropdown.
        '''
        self.dropdown = DropDown()
        list_funcs = dir(widget)
        for func in list_funcs:
            if '__' not in func and hasattr(getattr(widget, func), '__call__'):
                btn = Button(text=func, size_hint=(None, None),
                             size=(100, 30), shorten=True)
                self.dropdown.add_widget(btn)
                btn.bind(on_release=lambda btn: self.dropdown.select(btn.text))
                btn.text_size = [btn.size[0] - 4, btn.size[1]]
                btn.valign = 'middle'

        self.dropdown.open(self)
        self.dropdown.pos = (self.x, self.y)
        self.dropdown.bind(on_select=self._dropdown_select)

    def _dropdown_select(self, instance, value):
        '''Event handler for 'on_select' event of self.dropdown
        '''
        self.text += value

    def on_text(self, instance, value):
        '''Default event handler for 'on_text'
        '''
        if not self.kv_code_input:
            return

        d = get_designer()
        playground = d.ui_creator.playground
        self.kv_code_input.set_event_handler(self.eventwidget,
                                             self.eventname,
                                             self.text)
        if self.text and self.text[-1] == '.':
            if self.text == 'self.':
                self.show_drop_down_for_widget(self.eventwidget)
            ## TODO recursively call eventwidget.parent to get the root widget
            elif self.text == 'root.':
                self.show_drop_down_for_widget(playground.root)

            else:
                _id = self.text.replace('.', '')
                root = playground.root
                widget = None

                if _id in root.ids:
                    widget = root.ids[_id]

                if widget:
                    self.show_drop_down_for_widget(widget)

        elif self.dropdown:
            self.dropdown.dismiss()
Ejemplo n.º 10
0
    def on_touch_down(self, touch):
        if self.collide_point(*touch.pos):
            self.info_bubble = InfoBubble(message=self.info_message)
            self.info_bubble.show(self.pos, 1)

        return super(NewEventTextInput, self).on_touch_down(touch)