Example #1
0
File: entry.py Project: Schevo/kiwi
    def __init__(self, data_type=None):
        self._block_changed = False
        self._has_been_updated = False
        KiwiEntry.__init__(self)
        ValidatableProxyWidgetMixin.__init__(self)
        self._data_type = data_type

        # Hide currency symbol from the entry.
        self.set_options_for_datatype(currency, symbol=False)
Example #2
0
    def __init__(self, entry=None):
        """
        Create a new ComboEntry object.
        :param entry: a gtk.Entry subclass to use
        """
        gtk.VBox.__init__(self)
        self._popping_down = False

        if not entry:
            entry = KiwiEntry()

        if isinstance(entry, KiwiEntry):
            entry.set_normal_completion()

        self.hbox = gtk.HBox()
        self.pack_start(gtk.EventBox())
        self.pack_start(self.hbox, expand=False)
        self.pack_start(gtk.EventBox())

        self.mode = ComboMode.UNKNOWN
        self.entry = entry
        self.entry.connect('activate',
                           self._on_entry__activate)
        self.entry.connect('changed',
                           self._on_entry__changed)
        self.entry.connect('scroll-event',
                           self._on_entry__scroll_event)
        self.entry.connect('key-press-event',
                           self._on_entry__key_press_event)
        self.entry.connect('focus-out-event',
                           self._on_entry__focus_out_event)

        self.hbox.pack_start(self.entry, True, True)
        self.hbox.show_all()

        self._button = gtk.ToggleButton()
        self._button.connect('scroll-event', self._on_entry__scroll_event)
        self._button.connect('toggled', self._on_button__toggled)
        self._button.set_focus_on_click(False)
        self.hbox.pack_end(self._button, False, False)
        self._button.show()

        arrow = gtk.Arrow(gtk.ARROW_DOWN, gtk.SHADOW_NONE)
        self._button.add(arrow)
        arrow.show()

        self._popup = _ComboEntryPopup(self)
        self._popup.connect('text-selected', self._on_popup__text_selected)
        self._popup.connect('hide', self._on_popup__hide)
        self._popup.set_size_request(-1, 24)

        completion = KiwiEntryCompletion()
        completion.set_popup_window(self._popup)
        completion.set_treeview(self._popup._treeview)
        self.entry.set_completion(completion)
        self.set_model(completion.get_model())
Example #3
0
File: entry.py Project: fuinha/kiwi
 def __init__(self, data_type=None):
     self._block_changed = False
     self._has_been_updated = False
     KiwiEntry.__init__(self)
     ValidatableProxyWidgetMixin.__init__(self)
     self._entry_data_type = data_type
     # XXX: Sales -> New Loan Item requires this, figure out why
     try:
         self.props.data_type = data_type
     except (AttributeError, TypeError):
         pass
     # Hide currency symbol from the entry.
     self.set_options_for_datatype(currency, symbol=False)
Example #4
0
def main(args):
    w = Gtk.Window()
    w.set_position(Gtk.WindowPosition.CENTER)
    w.set_size_request(250, -1)
    w.set_title('ComboEntry example')
    w.connect('delete-event', Gtk.main_quit)

    e = KiwiEntry()
    e.set_mask('0000-00-00')
    w.add(e)

    w.show_all()
    e.set_position(0)
    Gtk.main()
Example #5
0
    def __init__(self, data_type=None):
        self._block_changed = False
        self._has_been_updated = False
        KiwiEntry.__init__(self)
        ValidatableProxyWidgetMixin.__init__(self)
        self._set_data_type(data_type)
        # Hide currency symbol from the entry.
        self.set_options_for_datatype(currency, symbol=False)

        # This used to be an override, but after the gtk3 migration if we
        # use the override or create a do_changed method GObject will break
        # the object in a way that it will be considered a Gtk.SpinButton
        # directly instead of a ProxySpinButton. The side effect of that
        # would be that out custom events (e.g. validate) would not exist.
        self.connect('changed', self._on_changed)
Example #6
0
    def __init__(self, model=None, text_column=-1):
        deprecationwarn(
            'ComboBoxEntry is deprecated, use ComboEntry instead',
            stacklevel=3)

        gtk.ComboBox.__init__(self)
        self.entry = KiwiEntry()
        # HACK: We need to set a private variable, this seems to
        #       be the only way of doing so
        self.entry.start_editing(gtk.gdk.Event(gtk.gdk.BUTTON_PRESS))
        self.add(self.entry)
        self.entry.show()

        self._text_renderer = gtk.CellRendererText()
        self.pack_start(self._text_renderer, True)
        self.set_active(-1)
        self.entry_changed_id = self.entry.connect('changed',
                                                     self._on_entry__changed)
        self._active_changed_id = self.connect("changed",
                                               self._on_entry__active_changed)
        self._has_frame_changed(None)
        self.connect("notify::has-frame", self._has_frame_changed)

        if not model:
            model = gtk.ListStore(str)
            text_column = 0
        self.set_model(model)
        self.set_text_column(text_column)
Example #7
0
File: entry.py Project: fuinha/kiwi
    def set_text(self, text):
        """
        Sets the text of the entry

        :param text:
        """

        self._has_been_updated = True
        self._update_current_object(text)

        # If content isn't empty set_text emitts changed twice.
        # Protect content-changed from being updated and issue
        # a manual emission afterwards
        self._block_changed = True
        KiwiEntry.set_text(self, text)
        self._block_changed = False
        self.emit('content-changed')

        self.set_position(-1)
Example #8
0
def main(args):
    w = gtk.Window()
    w.set_position(gtk.WIN_POS_CENTER)
    w.set_size_request(250, 300)
    w.set_title('KiwiEntryCompletion example')
    w.connect('delete-event', gtk.main_quit)

    vbox = gtk.VBox()
    w.add(vbox)

    model = gtk.ListStore(str)
    list = load_colors()
    list.sort()
    for i in list:
        model.append((i,))

    entry = KiwiEntry()
    vbox.pack_start(entry, False)

    sw = gtk.ScrolledWindow()
    sw.set_policy(gtk.POLICY_NEVER, gtk.POLICY_ALWAYS)
    vbox.pack_start(sw)
    
    treeview = gtk.TreeView(model)
    treeview.append_column(
        gtk.TreeViewColumn('Completions', gtk.CellRendererText(), text=0))

    sw.add(treeview)

    completion = KiwiEntryCompletion()
    entry.set_completion(completion)
    completion.set_property('minimum-key-length', 0)
    completion.set_model(model)
    completion.set_treeview(treeview)


    w.show_all()
    gtk.main()
Example #9
0
class BaseComboBoxEntry(gtk.ComboBox):
    def __init__(self, model=None, text_column=-1):
        deprecationwarn(
            'ComboBoxEntry is deprecated, use ComboEntry instead',
            stacklevel=3)

        gtk.ComboBox.__init__(self)
        self.entry = KiwiEntry()
        # HACK: We need to set a private variable, this seems to
        #       be the only way of doing so
        self.entry.start_editing(gtk.gdk.Event(gtk.gdk.BUTTON_PRESS))
        self.add(self.entry)
        self.entry.show()

        self._text_renderer = gtk.CellRendererText()
        self.pack_start(self._text_renderer, True)
        self.set_active(-1)
        self.entry_changed_id = self.entry.connect('changed',
                                                     self._on_entry__changed)
        self._active_changed_id = self.connect("changed",
                                               self._on_entry__active_changed)
        self._has_frame_changed(None)
        self.connect("notify::has-frame", self._has_frame_changed)

        if not model:
            model = gtk.ListStore(str)
            text_column = 0
        self.set_model(model)
        self.set_text_column(text_column)

    # Virtual methods
    def do_mnemnoic_activate(self, group_cycling):
        self.entry.grab_focus()
        return True

    def do_grab_focus(self):
        self.entry.grab_focus()

    # Signal handlers
    def _on_entry__active_changed(self, combobox):
        iter = combobox.get_active_iter()
        if not iter:
            return

        self.entry.handler_block(self.entry_changed_id)
        model = self.get_model()
        self.entry.set_text(model[iter][self._text_column])
        self.entry.handler_unblock(self.entry_changed_id)

    def _has_frame_changed(self, pspec):
        has_frame = self.get_property("has-frame")
        self.entry.set_has_frame(has_frame)

    def _on_entry__changed(self, entry):
        self.handler_block(self._active_changed_id)
        self.set_active(-1)
        self.handler_unblock(self._active_changed_id)

    # Public API
    def set_text_column(self, text_column):
        self._text_column = text_column
        if text_column != -1:
            self.set_attributes(self._text_renderer, text=text_column)

    def get_text_column(self):
        return self._text_column

    # IconEntry
    def set_pixbuf(self, pixbuf):
        self.entry.set_pixbuf(pixbuf)

    def update_background(self, color):
        self.entry.update_background(color)

    def get_background(self):
        return self.entry.get_background()

    def get_icon_window(self):
        return self.entry.get_icon_window()
Example #10
0
    def __init__(self, entry=None):
        """
        Create a new ComboEntry object.
        :param entry: a Gtk.Entry subclass to use
        """
        super(ComboEntry, self).__init__(orientation=Gtk.Orientation.VERTICAL)
        self._popping_down = False

        # This will force both the entry and the button have the same height
        self._sizegroup = Gtk.SizeGroup.new(Gtk.SizeGroupMode.VERTICAL)

        if not entry:
            entry = KiwiEntry()
        self._sizegroup.add_widget(entry)

        if isinstance(entry, KiwiEntry):
            entry.set_normal_completion()

        self.hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
        self.hbox.set_valign(Gtk.Align.CENTER)
        self.hbox.get_style_context().add_class(Gtk.STYLE_CLASS_LINKED)

        # FIXME: Why are those EventBox here?
        self.pack_start(Gtk.EventBox(), True, True, 0)
        self.pack_start(self.hbox, True, True, 0)
        self.pack_start(Gtk.EventBox(), True, True, 0)

        self.mode = ComboMode.UNKNOWN
        self.entry = entry
        self.entry.connect('activate',
                           self._on_entry__activate)
        self.entry.connect('changed',
                           self._on_entry__changed)
        self.entry.connect('scroll-event',
                           self._on_entry__scroll_event)
        self.entry.connect('key-press-event',
                           self._on_entry__key_press_event)
        self.entry.connect('focus-out-event',
                           self._on_entry__focus_out_event)

        self.hbox.pack_start(self.entry, True, True, 0)
        self.hbox.show_all()

        self._button = Gtk.ToggleButton()
        self._button.set_vexpand_set(True)
        self._button.set_vexpand(False)
        self._button.connect('scroll-event', self._on_entry__scroll_event)
        self._button.connect('toggled', self._on_button__toggled)
        self._button.set_focus_on_click(False)
        self.hbox.pack_end(self._button, False, False, 0)
        self._button.show()
        self._sizegroup.add_widget(self._button)

        arrow = Gtk.Arrow(arrow_type=Gtk.ArrowType.DOWN, shadow_type=Gtk.ShadowType.NONE)
        self._button.add(arrow)
        arrow.show()

        self._popup = _ComboEntryPopup(self)
        self._popup.connect('text-selected', self._on_popup__text_selected)
        self._popup.connect('hide', self._on_popup__hide)
        self._popup.set_size_request(-1, 24)

        completion = KiwiEntryCompletion()
        completion.set_popup_window(self._popup)
        completion.set_treeview(self._popup._treeview)
        self.entry.set_completion(completion)
        self.set_model(completion.get_model())
Example #11
0
 def do_focus_out_event(self, event):
     text = self.get_text()
     if not text:
         self.show_hint()
     return KiwiEntry.do_focus_out_event(self, event)
Example #12
0
 def do_focus_in_event(self, event):
     if self._hint_shown:
         self.show_text("")
     return KiwiEntry.do_focus_in_event(self, event)
Example #13
0
 def do_grab_focus(self):
     if self._hint_shown:
         # Why do we have to do_grab_focus from gtk.Widget here?
         return gtk.Widget.do_grab_focus(self)
     else:
         return KiwiEntry.do_grab_focus(self)
Example #14
0
    def testGType(self):
        entry = KiwiEntry()
        self.assertEqual(gobject.type_name(entry), 'KiwiEntry')

        entry = ProxyEntry()
        self.assertEqual(gobject.type_name(entry), 'ProxyEntry')
Example #15
0
class BaseComboBoxEntry(gtk.ComboBox):
    def __init__(self, model=None, text_column=-1):
        deprecationwarn('ComboBoxEntry is deprecated, use ComboEntry instead',
                        stacklevel=3)

        gtk.ComboBox.__init__(self)
        self.entry = KiwiEntry()
        # HACK: We need to set a private variable, this seems to
        #       be the only way of doing so
        self.entry.start_editing(gtk.gdk.Event(gtk.gdk.BUTTON_PRESS))
        self.add(self.entry)
        self.entry.show()

        self._text_renderer = gtk.CellRendererText()
        self.pack_start(self._text_renderer, True)
        self.set_active(-1)
        self.entry_changed_id = self.entry.connect('changed',
                                                   self._on_entry__changed)
        self._active_changed_id = self.connect("changed",
                                               self._on_entry__active_changed)
        self._has_frame_changed(None)
        self.connect("notify::has-frame", self._has_frame_changed)

        if not model:
            model = gtk.ListStore(str)
            text_column = 0
        self.set_model(model)
        self.set_text_column(text_column)

    # Virtual methods
    def do_mnemnoic_activate(self, group_cycling):
        self.entry.grab_focus()
        return True

    def do_grab_focus(self):
        self.entry.grab_focus()

    # Signal handlers
    def _on_entry__active_changed(self, combobox):
        iter = combobox.get_active_iter()
        if not iter:
            return

        self.entry.handler_block(self.entry_changed_id)
        model = self.get_model()
        self.entry.set_text(model[iter][self._text_column])
        self.entry.handler_unblock(self.entry_changed_id)

    def _has_frame_changed(self, pspec):
        has_frame = self.get_property("has-frame")
        self.entry.set_has_frame(has_frame)

    def _on_entry__changed(self, entry):
        self.handler_block(self._active_changed_id)
        self.set_active(-1)
        self.handler_unblock(self._active_changed_id)

    # Public API
    def set_text_column(self, text_column):
        self._text_column = text_column
        if text_column != -1:
            self.set_attributes(self._text_renderer, text=text_column)

    def get_text_column(self):
        return self._text_column

    # IconEntry
    def set_pixbuf(self, pixbuf):
        self.entry.set_pixbuf(pixbuf)

    def update_background(self, color):
        self.entry.update_background(color)

    def get_background(self):
        return self.entry.get_background()