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)
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())
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)
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()
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)
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)
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)
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()
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()
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())
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)
def do_focus_in_event(self, event): if self._hint_shown: self.show_text("") return KiwiEntry.do_focus_in_event(self, event)
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)
def testGType(self): entry = KiwiEntry() self.assertEqual(gobject.type_name(entry), 'KiwiEntry') entry = ProxyEntry() self.assertEqual(gobject.type_name(entry), 'ProxyEntry')
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()