Esempio n. 1
0
    def __init__(self, parent=None, width=200, value=50, show_label=True):
        """ Constructs a new progress bar. If show_label is True, a label indicating
        the current progress is shown """
        LUIObject.__init__(self)
        self.set_width(width)

        self._bg_layout = LUIHorizontalStretchedLayout(parent=self,
                                                       prefix="ProgressbarBg",
                                                       width="100%")

        self._fg_left = LUISprite(self, "ProgressbarFg_Left", "skin")
        self._fg_mid = LUISprite(self, "ProgressbarFg", "skin")
        self._fg_right = LUISprite(self, "ProgressbarFg_Right", "skin")
        self._fg_finish = LUISprite(self, "ProgressbarFg_Finish", "skin")

        self._show_label = show_label
        self._progress_pixel = 0
        self._fg_finish.right = 0

        if self._show_label:
            self._progress_label = LUILabel(parent=self, text=u"33 %")
            self._progress_label.centered = (True, True)

        self.set_value(value)
        self._update_progress()

        if parent is not None:
            self.parent = parent
Esempio n. 2
0
 def __init__(self,
              text=u"Label",
              shadow=None,
              font_size=14,
              font="label",
              color=None,
              wordwrap=False,
              **kwargs):
     """ Creates a new label. If shadow is True, a small text shadow will be
     rendered below the actual text. """
     LUIObject.__init__(self)
     LUIInitialState.init(self, kwargs)
     self._text = LUIText(self, unicode(text), font, font_size, 0, 0,
                          wordwrap)
     self._text.z_offset = 1
     if color is None:
         self.color = LUILabel.DEFAULT_COLOR
     else:
         self.color = color
     if shadow is None:
         shadow = LUILabel.DEFAULT_USE_SHADOW
     self._have_shadow = shadow
     if self._have_shadow:
         self._shadow_text = LUIText(self, unicode(text), font, font_size,
                                     0, 0, wordwrap)
         self._shadow_text.top = 1
         self._shadow_text.color = (0, 0, 0, 0.6)
Esempio n. 3
0
    def __init__(self, parent=None, width=200, value=50, show_label=True):
        """ Constructs a new progress bar. If show_label is True, a label indicating
        the current progress is shown """
        LUIObject.__init__(self)
        self.set_width(width)

        self._bg_layout = LUIHorizontalStretchedLayout(
            parent=self, prefix="ProgressbarBg", width="100%")

        self._fg_left = LUISprite(self, "ProgressbarFg_Left", "skin")
        self._fg_mid = LUISprite(self, "ProgressbarFg", "skin")
        self._fg_right = LUISprite(self, "ProgressbarFg_Right", "skin")
        self._fg_finish = LUISprite(self, "ProgressbarFg_Finish", "skin")

        self._show_label = show_label
        self._progress_pixel = 0
        self._fg_finish.right = 0

        if self._show_label:
            self._progress_label = LUILabel(parent=self, text=u"33 %")
            self._progress_label.centered = (True, True)

        self.set_value(value)
        self._update_progress()

        if parent is not None:
            self.parent = parent
Esempio n. 4
0
    def __init__(self, width=200, options=None, selected_option=None, **kwargs):
        """ Constructs a new selectbox with a given width """
        LUIObject.__init__(self, x=0, y=0, w=width+4, solid=True)
        LUIInitialState.init(self, kwargs)

        # The selectbox has a small border, to correct this we move it
        self.margin.left = -2

        self._bg_layout = LUIHorizontalStretchedLayout(parent=self, prefix="Selectbox", width="100%")

        self._label_container = LUIObject(self, x=10, y=0)
        self._label_container.set_size("100%", "100%")
        self._label_container.clip_bounds = (0,0,0,0)
        self._label = LUILabel(parent=self._label_container, text=u"Select an option ..")
        self._label.center_vertical = True

        self._drop_menu = LUISelectdrop(parent=self, width=width)
        self._drop_menu.top = self._bg_layout._sprite_right.height - 7
        self._drop_menu.topmost = True

        self._drop_open = False
        self._drop_menu.hide()

        self._options = []
        self._current_option_id = None

        if options is not None:
            self._options = options

        self._select_option(selected_option)
Esempio n. 5
0
 def __init__(self, text=u"Label", shadow=None, font_size=14, font="label", color=None, wordwrap=False, **kwargs):
     """ Creates a new label. If shadow is True, a small text shadow will be
     rendered below the actual text. """
     LUIObject.__init__(self)
     LUIInitialState.init(self, kwargs)
     self._text = LUIText(
         self,
         unicode(text),
         font,
         font_size,
         0,
         0,
         wordwrap
     )
     self._text.z_offset = 1
     if color is None:
         self.color = LUILabel.DEFAULT_COLOR
     else:
         self.color = color
     if shadow is None:
         shadow = LUILabel.DEFAULT_USE_SHADOW
     self._have_shadow = shadow
     if self._have_shadow:
         self._shadow_text = LUIText(
             self,
             unicode(text),
             font,
             font_size,
             0,
             0,
             wordwrap
         )
         self._shadow_text.top = 1
         self._shadow_text.color = (0,0,0,0.6)
Esempio n. 6
0
 def __init__(self, template="ButtonDefault", **kwargs):
     LUIObject.__init__(self, x=0, y=0, solid=True)
     self._template = template
     self._button_sprite = LUISprite(self, template, "skin")
     self._button_sprite.width = width
     self._button_sprite.height = height
     LUIInitialState.init(self, kwargs)
Esempio n. 7
0
 def __init__(self, template="ButtonDefault", **kwargs):
     LUIObject.__init__(self, x=0, y=0, solid=True)
     self._template = template
     self._button_sprite = LUISprite(self, template, "skin")
     self._button_sprite.width = width
     self._button_sprite.height = height
     LUIInitialState.init(self, kwargs)
Esempio n. 8
0
 def __init__(self,
              parent=None,
              group=None,
              value=None,
              active=False,
              label=u"Radiobox",
              **kwargs):
     """ Constructs a new radiobox. group should be a handle to a LUIRadioboxGroup.
     value will be the value returned by group.value, in case the box was
     selected. By default, the radiobox is not active. """
     assert group is not None, "LUIRadiobox needs a LUIRadioboxGroup!"
     LUIObject.__init__(self, x=0, y=0, solid=True)
     self._sprite = LUISprite(self, "Radiobox_Default", "skin")
     self._label = LUILabel(parent=self,
                            text=label,
                            margin=(0, 0, 0, 23),
                            center_vertical=True)
     self._value = value
     self._active = False
     self._hovered = False
     self._group = group
     self._group.register_box(self)
     if active:
         self.set_active()
     if parent:
         self.parent = parent
     LUIInitialState.init(self, kwargs)
Esempio n. 9
0
    def __init__(self, parent=None, color=None):
        LUIObject.__init__(self, x=0, y=0, w=27, h=27)

        self.previewBg = LUISprite(self, "ColorpickerPreviewBg", "skin")

        self.filler = LUISprite(self, "blank", "skin")
        self.filler.width = 21
        self.filler.height = 21
        self.filler.pos = (5, 5)
        self.filler.color = (0.2, 0.6, 1.0, 1.0)

        self.overlay = LUISprite(self, "ColorpickerPreviewOverlay", "skin")
        self.overlay.pos = (2, 2)
        self.overlay.bind("click", self._open_dialog)

        self.fit_to_children()

        self.popup = LUIColorpickerPopup(self)
        self.popup.hide()

        if color is not None:
            self.colorValue = color
        else:
            # My favourite color
            self.colorValue = (0.2, 0.6, 1.0)
        self.set_color_value(self.colorValue)

        self.popup.add_change_callback(self._on_popup_color_changed)

        if parent is not None:
            self.parent = parent
Esempio n. 10
0
    def __init__(self, **kwargs):
        """ Creates a new block of text. """
        LUIObject.__init__(self)
        LUIInitialState.init(self, kwargs)
        self._cursor = LVecBase2i(0)
        self._last_size = 14

        self.labels = []
Esempio n. 11
0
    def __init__(self, **kwargs):
        """ Creates a new block of text. """
        LUIObject.__init__(self)
        LUIInitialState.init(self, kwargs)
        self._cursor = LVecBase2i(0)
        self._last_size = 14

        self.labels = []
Esempio n. 12
0
    def __init__(self, parent=None, width=100, height=100, padding=10, **kwargs):
        LUIObject.__init__(self)
        self.set_size(width, height)
        self._content_parent = LUIObject(self)
        self._content_parent.set_size("100%", "100%")
        self._content_parent.clip_bounds = (0,0,0,0)

        self._content_clip = LUIObject(self._content_parent, x=padding, y=padding)
        self._content_clip.set_size("100%", "100%")

        self._content_scroller = LUIObject(self._content_clip)
        self._content_scroller.width = "100%"


        self._scrollbar = LUIObject(self, x=0, y=0, w=20)
        self._scrollbar.height = "100%"
        self._scrollbar.right = -10

        self._scrollbar_bg = LUISprite(self._scrollbar, "blank", "skin")
        self._scrollbar_bg.color = (1,1,1,0.05)
        self._scrollbar_bg.set_size(3, "100%")
        self._scrollbar_bg.center_horizontal = True

        # Handle
        self._scrollbar_handle = LUIObject(self._scrollbar, x=5, y=0, w=10)
        self._scroll_handle_top = LUISprite(self._scrollbar_handle, "ScrollbarHandle_Top", "skin")
        self._scroll_handle_mid = LUISprite(self._scrollbar_handle, "ScrollbarHandle", "skin")
        self._scroll_handle_bottom = LUISprite(self._scrollbar_handle, "ScrollbarHandle_Bottom", "skin")

        self._scrollbar_handle.solid = True
        self._scrollbar.solid = True

        self._scrollbar_handle.bind("mousedown", self._start_scrolling)
        self._scrollbar_handle.bind("mouseup", self._stop_scrolling)
        self._scrollbar.bind("mousedown", self._on_bar_click)
        self._scrollbar.bind("mouseup", self._stop_scrolling)

        self._handle_dragging = False
        self._drag_start_y = 0

        self._scroll_top_position = 0
        self._content_height = 400

        scroll_shadow_width = self.width - 10

        # Scroll shadow
        self._scroll_shadow_top = LUIHorizontalStretchedLayout(parent=self, prefix="ScrollShadowTop", width="100%")
        self._scroll_shadow_bottom = LUIHorizontalStretchedLayout(parent=self, prefix="ScrollShadowBottom", width="100%")
        self._scroll_shadow_bottom.bottom = 0

        self._handle_height = 100

        if parent is not None:
            self.parent = parent

        LUIInitialState.init(self, kwargs)
        self.content_node = self._content_scroller
        taskMgr.doMethodLater(0.05, lambda task: self._update(), "update_scrollbar")
Esempio n. 13
0
 def __init__(self, template="ButtonDefault", **kwargs):
     LUIObject.__init__(self, x=0, y=0, solid=True)
     self._template = template
     self._button_sprite = LUISprite(self, template, "skin")
     if 'width' in kwargs:
         self._button_sprite.width = kwargs['width']
     if 'height' in kwargs:
         self._button_sprite.height = kwargs['height']
     LUIInitialState.init(self, kwargs)
Esempio n. 14
0
 def __init__(self, parent=None, key=u"A", instruction=u"Instruction"):
     LUIObject.__init__(self)
     self.marker = LUIKeyMarker(parent=self, key=key)
     self.instructionLabel = LUILabel(parent=self,
                                      text=instruction,
                                      shadow=True)
     self.instructionLabel.centered = (False, True)
     self.instructionLabel.margin.top = -4
     self.set_key(key)
Esempio n. 15
0
 def __init__(self, image_prefix="", **kwargs):
     """ Creates a new layout, using the image_prefix as prefix. """
     LUIObject.__init__(self)
     self.set_size("100%", "100%")
     self._prefix = image_prefix
     self._parts = {}
     for i in self._MODES:
         self._parts[i] = LUISprite(self, "blank", "skin")
     self._update_layout()
     LUIInitialState.init(self, kwargs)
Esempio n. 16
0
 def __init__(self, image_prefix="", **kwargs):
     """ Creates a new layout, using the image_prefix as prefix. """
     LUIObject.__init__(self)
     self.set_size("100%", "100%")
     self._prefix = image_prefix
     self._parts = {}
     for i in self._MODES:
         self._parts[i] = LUISprite(self, "blank", "skin")
     self._update_layout()
     LUIInitialState.init(self, kwargs)
Esempio n. 17
0
 def __init__(self, checked=False, label=u"Checkbox", **kwargs):
     """ Constructs a new checkbox with the given label and state. By default,
     the checkbox is not checked. """
     LUIObject.__init__(self, x=0, y=0, solid=True)
     self._checked = checked
     self._checkbox_sprite = LUISprite(self, "Checkbox_Default", "skin")
     self._label = LUILabel(parent=self, text=label, margin=(0, 0, 0, 25),
                            center_vertical=True, alpha=0.4)
     self._hovered = False
     LUIInitialState.init(self, kwargs)
Esempio n. 18
0
 def __init__(self, parent=None, prefix="ButtonDefault", **kwargs):
     LUIObject.__init__(self)
     self._layout = LUIHorizontalLayout(self, spacing=0)
     self._layout.width = "100%"
     self._sprite_left = LUISprite(self._layout.cell(), "blank", "skin")
     self._sprite_mid = LUISprite(self._layout.cell('*'), "blank", "skin")
     self._sprite_right = LUISprite(self._layout.cell(), "blank", "skin")
     if parent is not None:
         self.parent = parent
     self.prefix = prefix
     LUIInitialState.init(self, kwargs)
Esempio n. 19
0
 def __init__(self, parent=None, prefix="ButtonDefault", **kwargs):
     LUIObject.__init__(self)
     self._layout = LUIHorizontalLayout(self, spacing=0)
     self._layout.width = "100%"
     self._sprite_left = LUISprite(self._layout.cell(), "blank", "skin")
     self._sprite_mid = LUISprite(self._layout.cell('*'), "blank", "skin")
     self._sprite_right = LUISprite(self._layout.cell(), "blank", "skin")
     if parent is not None:
         self.parent = parent
     self.prefix = prefix
     LUIInitialState.init(self, kwargs)
Esempio n. 20
0
    def __init__(self, parent=None, filled=True, min_value=0.0, max_value=1.0, width=100.0, value=None, **kwargs):
        """ Constructs a new slider. If filled is True, the part behind the knob
        will be solid """
        LUIObject.__init__(self, x=0, y=0, solid=True)
        self.set_width(width)
        self._knob = LUISprite(self, "SliderKnob", "skin")
        self._knob.z_offset = 2
        self._knob.solid = True

        # Construct the background
        self._slider_bg = LUIHorizontalStretchedLayout(parent=self, prefix="SliderBg", center_vertical=True, width="100%", margin=(-1, 0, 0, 0))

        self._filled = filled
        self._min_value = min_value
        self._max_value = max_value

        self._side_margin = self._knob.width / 4
        self._effective_width = self.width - 2 * self._side_margin

        if self._filled:
            self._slider_fill = LUIObject(self)
            self._fill_left = LUISprite(self._slider_fill, "SliderBgFill_Left", "skin")
            self._fill_mid = LUISprite(self._slider_fill, "SliderBgFill", "skin")
            self._fill_mid.left = self._fill_left.width
            self._slider_fill.z_offset = 1
            self._slider_fill.center_vertical = True

        if parent is not None:
            self.parent = parent

        # Handle various events
        self._knob.bind("mousedown", self._start_drag)
        self._knob.bind("mousemove", self._update_drag)
        self._knob.bind("mouseup", self._stop_drag)
        self._knob.bind("keydown", self._on_keydown)
        self._knob.bind("blur", self._stop_drag)
        self._knob.bind("keyrepeat", self._on_keydown)

        self._drag_start_pos = None
        self._dragging = False
        self._drag_start_val = 0
        self.current_val = 10

        # Set initial value
        if value is None:
            self.set_value( (self._min_value + self._max_value) / 2.0 )
        else:
            self.set_value(value)

        self._update_knob()

        LUIInitialState.init(self, kwargs)
Esempio n. 21
0
 def __init__(self, checked=False, label=u"Checkbox", **kwargs):
     """ Constructs a new checkbox with the given label and state. By default,
     the checkbox is not checked. """
     LUIObject.__init__(self, x=0, y=0, solid=True)
     self._checked = checked
     self._checkbox_sprite = LUISprite(self, "Checkbox_Default", "skin")
     self._label = LUILabel(parent=self,
                            text=label,
                            margin=(0, 0, 0, 25),
                            center_vertical=True,
                            alpha=0.4)
     self._hovered = False
     LUIInitialState.init(self, kwargs)
Esempio n. 22
0
    def __init__(self, parent=None, key=u"A"):
        LUIObject.__init__(self)
        self.bgLeft = LUISprite(self, "Keymarker_Left", "skin")
        self.bgMid = LUISprite(self, "Keymarker", "skin")
        self.bgRight = LUISprite(self, "Keymarker_Right", "skin")

        self.label = LUILabel(parent=self, text=key, shadow=True)
        self.label.centered = (True, True)
        self.label.margin = (-3, 0, 0, -1)
        self.margin = (-1, 0, 0, -1)

        self.set_key(key)

        if parent is not None:
            self.parent = parent

        self.fit_to_children()
Esempio n. 23
0
    def __init__(self, inner_padding=5, scrollable=False, style=FS_raised,
                 **kwargs):
        """ Creates a new frame with the given options and style. If scrollable
        is True, the contents of the frame will scroll if they don't fit into
        the frame height. inner_padding only has effect if scrollable is True.
        You can call fit_to_children() to make the frame fit automatically to
        it's contents."""
        LUIObject.__init__(self)

        # Each *style* has a different border size (size of the shadow). The
        # border size shouldn't get calculated to the actual framesize, so we
        # are determining it first and then substracting it.
        # TODO: We could do this automatically, determined by the sprite size
        # probably?
        self._border_size = 0
        self.padding = 10
        self.solid = True
        prefix = ""

        if style == LUIFrame.FS_raised:
            temp = LUISprite(self, "Frame_Left", "skin")
            self._border_size = temp.width
            self.remove_child(temp)
            prefix = "Frame_"
        elif style == LUIFrame.FS_sunken:
            self._border_size = 0
            prefix = "SunkenFrame_"
        else:
            raise Exception("Unkown LUIFrame style: " + style)

        self._scrollable = scrollable
        self._layout = LUICornerLayout(parent=self, image_prefix=prefix)
        self._layout.margin = -(self.padding.top + self._border_size)
        if self._scrollable:
            self._content = LUIObject(self)
            self._content.size = (self.width, self.height)
            self._content.pos = (self._border_size, self._border_size)
            self._scroll_content = LUIScrollableRegion(
                self._content,
                width=self.width - 2 * self.padding.left,
                height=self.height - 2 * self.padding.left,
                padding=inner_padding)
            self.content_node = self._scroll_content.content_node

        LUIInitialState.init(self, kwargs)
Esempio n. 24
0
 def __init__(self, parent=None, group=None, value=None, active=False, label=u"Radiobox", **kwargs):
     """ Constructs a new radiobox. group should be a handle to a LUIRadioboxGroup.
     value will be the value returned by group.value, in case the box was
     selected. By default, the radiobox is not active. """
     assert group is not None, "LUIRadiobox needs a LUIRadioboxGroup!"
     LUIObject.__init__(self, x=0, y=0, solid=True)
     self._sprite = LUISprite(self, "Radiobox_Default", "skin")
     self._label = LUILabel(parent=self, text=label, margin=(0, 0, 0, 23),
         center_vertical=True)
     self._value = value
     self._active = False
     self._hovered = False
     self._group = group
     self._group.register_box(self)
     if active:
         self.set_active()
     if parent:
         self.parent = parent
     LUIInitialState.init(self, kwargs)
Esempio n. 25
0
    def __init__(self, text=u"Button", template="ButtonDefault", **kwargs):
        """ Constructs a new button. The template controls which sprites to use.
        If the template is "ButtonDefault" for example, the sprites
        "ButtonDefault_Left", "ButtonDefault" and "ButtonDefault_Right" will
        be used. The sprites used when the button is pressed should be named
        "ButtonDefaultFocus_Left" and so on then.

        If an explicit width is set on the button, the button will stick to that
        width, otherwise it will automatically resize to fit the label """
        LUIObject.__init__(self, x=0, y=0, solid=True)
        self._template = template
        self._layout = LUIHorizontalStretchedLayout(
            parent=self, prefix=self._template, width="100%")
        self._label = LUILabel(parent=self, text=text)
        self._label.z_offset = 1
        self._label.center_vertical = True
        self._label.margin = 0, 20, 0, 20
        self.margin.left = -1
        LUIInitialState.init(self, kwargs)
Esempio n. 26
0
    def __init__(self, text=u"Button", template="ButtonDefault", **kwargs):
        """ Constructs a new button. The template controls which sprites to use.
        If the template is "ButtonDefault" for example, the sprites
        "ButtonDefault_Left", "ButtonDefault" and "ButtonDefault_Right" will
        be used. The sprites used when the button is pressed should be named
        "ButtonDefaultFocus_Left" and so on then.

        If an explicit width is set on the button, the button will stick to
        that width, otherwise it will automatically resize to fit the label """
        LUIObject.__init__(self, x=0, y=0, solid=True)
        self._template = template
        self._layout = LUIHorizontalStretchedLayout(parent=self,
                                                    prefix=self._template,
                                                    width="100%")
        self._label = LUILabel(parent=self, text=text)
        self._label.z_offset = 1
        self._label.center_vertical = True
        self._label.margin = 0, 20, 0, 20
        self.margin.left = -1
        LUIInitialState.init(self, kwargs)
Esempio n. 27
0
    def __init__(self,
                 parent=None,
                 width=100.0,
                 filled=False,
                 min_value=0,
                 max_value=1.0,
                 precision=2,
                 value=None):
        LUIObject.__init__(self, x=0, y=0, w=width, h=0)
        LUICallback.__init__(self)

        max_numbers_before = max(len(str(int(max_value))),
                                 len(str(int(min_value))))
        number_space_required = max_numbers_before

        if precision > 0:
            number_space_required += 1 + precision

        pixels_per_number = 7
        self.precision = precision

        self.slider = LUISlider(self,
                                width=width -
                                pixels_per_number * number_space_required - 5,
                                filled=filled,
                                min_value=min_value,
                                max_value=max_value,
                                value=value)
        self.label = LUILabel(parent=self, shadow=True, text=u"1.23")
        self.label.right = 0
        self.label.top = self.label.height - self.slider.height
        self.label.color = (1, 1, 1, 0.5)

        self.slider.add_change_callback(self._on_slider_changed)
        self.slider.add_change_callback(self._trigger_callback)
        self._on_slider_changed(self.slider, self.slider.get_value())

        if parent is not None:
            self.parent = parent

        self.fit_to_children()
Esempio n. 28
0
    def __init__(self, parent=None, width=200, placeholder=u"Enter some text ..", value=u"", **kwargs):
        """ Constructs a new input field. An input field always needs a width specified """
        LUIObject.__init__(self, x=0, y=0, solid=True)
        self.set_width(width)
        self._layout = LUIHorizontalStretchedLayout(parent=self, prefix="InputField", width="100%")

        # Container for the text
        self._text_content = LUIObject(self)
        self._text_content.margin = (5, 7, 5, 7)
        self._text_content.clip_bounds = (0,0,0,0)
        self._text_content.set_size("100%", "100%")

        # Scroller for the text, so we can move right and left
        self._text_scroller = LUIObject(parent=self._text_content)
        self._text_scroller.center_vertical = True
        self._text = LUILabel(parent=self._text_scroller, text=u"")

        # Cursor for the current position
        self._cursor = LUISprite(self._text_scroller, "blank", "skin", x=0, y=0, w=2, h=15)
        self._cursor.color = (0.5, 0.5, 0.5)
        self._cursor.margin.top = 2
        self._cursor.z_offset = 20
        self._cursor_index = 0
        self._cursor.hide()
        self._value = value

        # Placeholder text, shown when out of focus and no value exists
        self._placeholder = LUILabel(parent=self._text_content, text=placeholder, shadow=False,
            center_vertical=True, alpha=0.2)

        # Various states
        self._tickrate = 1.0
        self._tickstart = 0.0

        self._render_text()

        if parent is not None:
            self.parent = parent

        LUIInitialState.init(self, kwargs)
Esempio n. 29
0
    def __init__(self, parent, width=200):
        LUIObject.__init__(self, x=0, y=0, w=width, h=1, solid=True)

        self._layout = LUICornerLayout(parent=self, image_prefix="Selectdrop_",
                                       width=width + 10, height=100)
        self._layout.margin.left = -3

        self._opener = LUISprite(self, "SelectboxOpen_Right", "skin")
        self._opener.right = -4
        self._opener.top = -25
        self._opener.z_offset = 3

        self._container = LUIObject(self._layout, 0, 0, 0, 0)
        self._container.width = self.width
        self._container.clip_bounds = (0,0,0,0)
        self._container.left = 5
        self._container.solid = True
        self._container.bind("mousedown", lambda *args: self.request_focus())

        self._selectbox = parent
        self._option_focus = False
        self.parent = self._selectbox
Esempio n. 30
0
    def __init__(self,
                 width=200,
                 options=None,
                 selected_option=None,
                 **kwargs):
        """ Constructs a new selectbox with a given width """
        LUIObject.__init__(self, x=0, y=0, w=width + 4, solid=True)
        LUIInitialState.init(self, kwargs)

        # The selectbox has a small border, to correct this we move it
        self.margin.left = -2

        self._bg_layout = LUIHorizontalStretchedLayout(parent=self,
                                                       prefix="Selectbox",
                                                       width="100%")

        self._label_container = LUIObject(self, x=10, y=0)
        self._label_container.set_size("100%", "100%")
        self._label_container.clip_bounds = (0, 0, 0, 0)
        self._label = LUILabel(parent=self._label_container,
                               text=u"Select an option ..")
        self._label.center_vertical = True

        self._drop_menu = LUISelectdrop(parent=self, width=width)
        self._drop_menu.top = self._bg_layout._sprite_right.height - 7
        self._drop_menu.topmost = True

        self._drop_open = False
        self._drop_menu.hide()

        self._options = []
        self._current_option_id = None

        if options is not None:
            self._options = options

        self._select_option(selected_option)
Esempio n. 31
0
    def __init__(self, parent, width=200):
        LUIObject.__init__(self, x=0, y=0, w=width, h=1, solid=True)

        self._layout = LUICornerLayout(parent=self,
                                       image_prefix="Selectdrop_",
                                       width=width + 10,
                                       height=100)
        self._layout.margin.left = -3

        self._opener = LUISprite(self, "SelectboxOpen_Right", "skin")
        self._opener.right = -4
        self._opener.top = -25
        self._opener.z_offset = 3

        self._container = LUIObject(self._layout, 0, 0, 0, 0)
        self._container.width = self.width
        self._container.clip_bounds = (0, 0, 0, 0)
        self._container.left = 5
        self._container.solid = True
        self._container.bind("mousedown", lambda *args: self.request_focus())

        self._selectbox = parent
        self._option_focus = False
        self.parent = self._selectbox
Esempio n. 32
0
    def __init__(self,
                 parent=None,
                 filled=True,
                 min_value=0.0,
                 max_value=1.0,
                 width=100.0,
                 value=None,
                 **kwargs):
        """ Constructs a new slider. If filled is True, the part behind the knob
        will be solid """
        LUIObject.__init__(self, x=0, y=0, solid=True)
        self.set_width(width)
        self._knob = LUISprite(self, "SliderKnob", "skin")
        self._knob.z_offset = 2
        self._knob.solid = True

        # Construct the background
        self._slider_bg = LUIHorizontalStretchedLayout(parent=self,
                                                       prefix="SliderBg",
                                                       center_vertical=True,
                                                       width="100%",
                                                       margin=(-1, 0, 0, 0))

        self._filled = filled
        self._min_value = min_value
        self._max_value = max_value

        self._side_margin = self._knob.width / 4
        self._effective_width = self.width - 2 * self._side_margin

        if self._filled:
            self._slider_fill = LUIObject(self)
            self._fill_left = LUISprite(self._slider_fill, "SliderBgFill_Left",
                                        "skin")
            self._fill_mid = LUISprite(self._slider_fill, "SliderBgFill",
                                       "skin")
            self._fill_mid.left = self._fill_left.width
            self._slider_fill.z_offset = 1
            self._slider_fill.center_vertical = True

        if parent is not None:
            self.parent = parent

        # Handle various events
        self._knob.bind("mousedown", self._start_drag)
        self._knob.bind("mousemove", self._update_drag)
        self._knob.bind("mouseup", self._stop_drag)
        self._knob.bind("keydown", self._on_keydown)
        self._knob.bind("blur", self._stop_drag)
        self._knob.bind("keyrepeat", self._on_keydown)

        self._drag_start_pos = None
        self._dragging = False
        self._drag_start_val = 0
        self.current_val = 10

        # Set initial value
        if value is None:
            self.set_value((self._min_value + self._max_value) / 2.0)
        else:
            self.set_value(value)

        self._update_knob()

        LUIInitialState.init(self, kwargs)
Esempio n. 33
0
    def __init__(self,
                 parent=None,
                 width=100,
                 height=100,
                 padding=10,
                 **kwargs):
        LUIObject.__init__(self)
        self.set_size(width, height)
        self._content_parent = LUIObject(self)
        self._content_parent.set_size("100%", "100%")
        self._content_parent.clip_bounds = (0, 0, 0, 0)

        self._content_clip = LUIObject(self._content_parent,
                                       x=padding,
                                       y=padding)
        self._content_clip.set_size("100%", "100%")

        self._content_scroller = LUIObject(self._content_clip)
        self._content_scroller.width = "100%"

        self._scrollbar = LUIObject(self, x=0, y=0, w=20)
        self._scrollbar.height = "100%"
        self._scrollbar.right = -10

        self._scrollbar_bg = LUISprite(self._scrollbar, "blank", "skin")
        self._scrollbar_bg.color = (1, 1, 1, 0.05)
        self._scrollbar_bg.set_size(3, "100%")
        self._scrollbar_bg.center_horizontal = True

        # Handle
        self._scrollbar_handle = LUIObject(self._scrollbar, x=5, y=0, w=10)
        self._scroll_handle_top = LUISprite(self._scrollbar_handle,
                                            "ScrollbarHandle_Top", "skin")
        self._scroll_handle_mid = LUISprite(self._scrollbar_handle,
                                            "ScrollbarHandle", "skin")
        self._scroll_handle_bottom = LUISprite(self._scrollbar_handle,
                                               "ScrollbarHandle_Bottom",
                                               "skin")

        self._scrollbar_handle.solid = True
        self._scrollbar.solid = True

        self._scrollbar_handle.bind("mousedown", self._start_scrolling)
        self._scrollbar_handle.bind("mouseup", self._stop_scrolling)
        self._scrollbar.bind("mousedown", self._on_bar_click)
        self._scrollbar.bind("mouseup", self._stop_scrolling)

        self._handle_dragging = False
        self._drag_start_y = 0

        self._scroll_top_position = 0
        self._content_height = 400

        # Scroll shadow
        self._scroll_shadow_top = LUIHorizontalStretchedLayout(
            parent=self, prefix="ScrollShadowTop", width="100%")
        self._scroll_shadow_bottom = LUIHorizontalStretchedLayout(
            parent=self, prefix="ScrollShadowBottom", width="100%")
        self._scroll_shadow_bottom.bottom = 0

        self._handle_height = 100

        if parent is not None:
            self.parent = parent

        LUIInitialState.init(self, kwargs)
        self.content_node = self._content_scroller
        taskMgr.doMethodLater(0.05, lambda task: self._update(),
                              "update_scrollbar")
Esempio n. 34
0
 def __init__(self, **kwargs):
     """ Creates a new formatted label. """
     LUIObject.__init__(self)
     LUIInitialState.init(self, kwargs)
     self._cursor = LVecBase2i(0)
     self._last_size = 14