def override (key, modifier, movement, step, select): gtk.binding_entry_remove (gtk.TextView, key, modifier) gtk.binding_entry_add_signal (gtk.TextView, key, modifier, "move_cursor", gobject.TYPE_ENUM, movement, gobject.TYPE_INT, step, gobject.TYPE_BOOLEAN, select)
def __init__(self): gobject.GObject.__init__(self) gtk.TextView.__init__(self) gtk.binding_entry_add_signal(self, gtk.keysyms.KP_Enter, 0, 'message-send') gtk.binding_entry_add_signal(self, gtk.keysyms.Return, 0, 'message-send')
def build_ui(self): self.window = gtk.ScrolledWindow() self.window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) self.icons = {} self.icons['device'] = _geticon('upnp-device.png') self.icons['mediaserver'] = _geticon('network-server.png') self.icons['mediarenderer'] = _geticon('media-renderer.png') self.icons['binarylight'] = _geticon('network-light.png') self.icons['dimmablelight'] = self.icons['binarylight'] self.icons['digitalsecuritycamera'] = _geticon('camera-web.png') self.icons['printer'] = _geticon('printer.png') self.folder_icon = _geticon('folder.png') self.service_icon = _geticon('upnp-service.png') self.action_icon = _geticon('upnp-action.png') self.action_arg_in_icon = _geticon('upnp-action-arg-in.png') self.action_arg_out_icon = _geticon('upnp-action-arg-out.png') self.state_variable_icon = _geticon('upnp-state-variable.png') self.store = gtk.TreeStore(int, # 0: type str, # 1: name str, # 2: device udn gtk.gdk.Pixbuf, object ) self.treeview = gtk.TreeView(self.store) self.column = gtk.TreeViewColumn('Devices') self.treeview.append_column(self.column) # create a CellRenderers to render the data icon_cell = gtk.CellRendererPixbuf() text_cell = gtk.CellRendererText() self.column.pack_start(icon_cell, False) self.column.pack_start(text_cell, True) self.column.set_attributes(text_cell, text=1) self.column.add_attribute(icon_cell, "pixbuf", 3) #self.column.set_cell_data_func(self.cellpb, get_icon) self.treeview.connect("button_press_event", self.button_action) self.treeview.connect("row-activated", self.activated) self.treeview.connect("move_cursor", self.moved_cursor) gtk.binding_entry_add_signal(self.treeview, gtk.keysyms.Left, 0, "expand-collapse-cursor-row", bool, False, bool, False, bool, False) gtk.binding_entry_add_signal(self.treeview, gtk.keysyms.Right, 0, "expand-collapse-cursor-row", bool, False, bool, True, bool, False) selection = self.treeview.get_selection() selection.set_mode(gtk.SELECTION_SINGLE) self.window.add(self.treeview) self.windows = {}
def __init__(self): gobject.GObject.__init__(self) gtk.Notebook.__init__(self) gtk.binding_entry_add_signal(self, gtk.keysyms.Tab, gtk.gdk.CONTROL_MASK | gtk.gdk.SHIFT_MASK, 'prev-page') gtk.binding_entry_add_signal(self, gtk.keysyms.Tab, gtk.gdk.CONTROL_MASK, 'next-page')
def connect_with_chat_control(self, control): self.chat_control = control base = Base(self, self.chat_control) self.controls.append(base) if self.first_run: # ALT + U gtk.binding_entry_add_signal(control.msg_textview, gtk.keysyms.u, gtk.gdk.MOD1_MASK, 'mykeypress', int, gtk.keysyms.u, gtk.gdk.ModifierType, gtk.gdk.MOD1_MASK) self.first_run = False self.update_button_state(self.chat_control)
def connect_with_chat_control(self, control): if not isinstance(control, chat_control.ChatControl): return self.chat_control = control base = Base(self, self.chat_control) self.controls.append(base) if self.first_run: # ALT + L gtk.binding_entry_add_signal(control.msg_textview, gtk.keysyms.l, gtk.gdk.MOD1_MASK, 'mykeypress', int, gtk.keysyms.l, gtk.gdk.ModifierType, gtk.gdk.MOD1_MASK) self.first_run = False
def connect_with_chat_control(self, chat_control): #if not dbus_support.supported: #return if self.first_run: # ALT + N gtk.binding_entry_add_signal(chat_control.msg_textview, gtk.keysyms.n, gtk.gdk.MOD1_MASK, 'mykeypress', int, gtk.keysyms.n, gtk.gdk.ModifierType, gtk.gdk.MOD1_MASK) self.first_run = False self.chat_control = chat_control control = Base(self, self.chat_control) self.controls.append(control)
def test_bool_arg_binding(): """ Ensure that a keybinding signal with a boolean argument is emitted. """ class Test(gtk.Button): __gsignals__ = {"sig": (gobject.SIGNAL_ACTION | gobject.SIGNAL_RUN_LAST, None, (bool,))} def __init__(self): super(gtk.Button, self).__init__() def do_sig(self, val): self.val = val test = Test() gtk.binding_entry_add_signal(Test, gtk.keysyms.r, 0, "sig", bool, True) gtk.bindings_activate(test, gtk.keysyms.r, 0) assert test.val gtk.binding_entry_add_signal(Test, gtk.keysyms.k, 0, "sig", bool, False) gtk.bindings_activate(test, gtk.keysyms.k, 0) assert not test.val
def __init__(self): gobject.GObject.__init__(self) gtk.binding_entry_add_signal(self, gtk.keysyms.KP_Enter, 0, 'message-send') gtk.binding_entry_add_signal(self, gtk.keysyms.Return, 0, 'message-send') gtk.binding_entry_add_signal(self, gtk.keysyms.Escape, 0, 'escape-pressed')
line_count = 1 self.modify_text(gtk.STATE_NORMAL, self.get_style().text[gtk.STATE_INSENSITIVE]) # Get Font Height font = self.create_pango_context().get_font_description() layout = self.create_pango_layout(UNSET_TEXT) layout.set_markup('WTF?!') layout.set_font_description(font) text_size = layout.get_pixel_size()[1] # Resize lines = line_count if self.has_focus else 1 input_size = int((text_size + (6 if lines == 1 else 1.5)) * lines) self.gui.text_scroll.set_size_request(0, input_size) if lines == 1: self.gui.progress.set_size_request(0, input_size) if not self.initiated: self.initiated = True self.loose_focus() if not self.main.any_status(ST_LOGIN_SUCCESSFUL, ST_CONNECT): self.gui.hide_all() gtk.binding_entry_add_signal(TextInput, gtk.keysyms.Return, 0, 'submit') gtk.binding_entry_add_signal(TextInput, gtk.keysyms.KP_Enter, 0, 'submit')
self.pango_overlay = self.create_pango_layout("") self.pango_overlay.set_markup(self.overlay_text % (self.overlay_color, text)) def on_size_allocate(self, *args): if self.drawable: self.drawable.show() def expose_view(self, window, event): if not self.drawable: self.drawable = self.get_window(gtk.TEXT_WINDOW_TEXT) self.pango_overlay = self.create_pango_layout("") self.set_overlay_text(MAX_MESSAGE_LENGTH) gc = self.drawable.new_gc() ww, wh = self.drawable.get_size() tw, th = self.pango_overlay.get_pixel_size() self.drawable.draw_layout(gc, ww - tw - 2, wh - th, self.pango_overlay) def on_text_changed(self, w): chars = self.get_char_count() color = self.error_color if chars > MAX_MESSAGE_LENGTH else self.base_color self.modify_base(gtk.STATE_NORMAL, color) def on_connection_online(self, *args): self.set_sensitive(True) def on_connection_offline(self, *args): self.set_sensitive(False) gtk.binding_entry_add_signal(InputTextView, gtk.keysyms.Return, 0, "submit") gtk.binding_entry_add_signal(InputTextView, gtk.keysyms.KP_Enter, 0, "submit")
def show_options(self, widget, event=None): self.url.set_text('') self.url.grab_focus() class MessageTextView(gtk.TextView): '''Class for the message textview (where user writes new messages) for chat/groupchat windows''' __gsignals__ = dict(mykeypress=(gobject.SIGNAL_RUN_LAST | gobject.SIGNAL_ACTION, None, (int, gtk.gdk.ModifierType))) def __init__(self): gtk.TextView.__init__(self) self.set_border_width(2) self.set_left_margin(2) self.set_right_margin(2) self.set_wrap_mode(gtk.WRAP_WORD) def destroy(self): import gc gobject.idle_add(lambda:gc.collect()) def clear(self, widget=None): self.get_buffer().set_text('') if gobject.pygtk_version < (2, 8, 0): gobject.type_register(MessageTextView) gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.Return, 0, 'mykeypress', int, gtk.keysyms.Return, gtk.gdk.ModifierType, 0) gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.Escape, 0, 'mykeypress', int, gtk.keysyms.Escape, gtk.gdk.ModifierType, 0)
if self.mode < 2: return w, h = self.get_size() if self.workspace == 'single': if (w, h) == self.single_win_size: return self.single_win_size = (w, h) else: if (w, h) == self.wide_win_size: return self.wide_win_size = (w, h) self.win_pos = self.get_position() self.contenido.update_wrap(w, self.workspace) return def move_event(self, widget, event): self.win_pos = self.get_position() def __on_key_press(self, widget, keycomb): if self.mode < 2: return if keycomb == 'ctrl+n': self.show_update_box() #if gobject.pygtk_version < (2, 8, 0): gobject.type_register(Main) gtk.binding_entry_add_signal(Main, gtk.keysyms.n, gtk.gdk.CONTROL_MASK, 'mykeypress', str, 'ctrl+n')
primary_markup = "<b>%s</b>" % primary_text primary_label = gtk.Label(primary_markup) primary_label.set_use_markup(True) primary_label.set_line_wrap(True) primary_label.set_alignment(0, 0.5) primary_label.set_flags(gtk.CAN_FOCUS) primary_label.set_selectable(True) primary_label.show() vbox.pack_start(primary_label, True, True) if secondary_text: secondary_markup = "<small>%s</small>" % secondary_text secondary_label = gtk.Label(secondary_markup) secondary_label.set_flags(gtk.CAN_FOCUS) secondary_label.set_use_markup(True) secondary_label.set_line_wrap(True) secondary_label.set_selectable(True) secondary_label.set_alignment(0, 0.5) secondary_label.show() vbox.pack_start(secondary_label, True, True) if additionnal_widget: vbox.pack_start(additionnal_widget, True, True) self.set_contents(hbox_content) gtk.binding_entry_add_signal(MessageArea, gtk.gdk.keyval_from_name("Escape"), 0, "close")
if not pixbuf: return dest = pixbuf.rotate_simple(rot) view.set_pixbuf(dest) # Create a rotation signal with an associated keybinding. gobject.signal_new( "rotate", gtkimageview.AnimView, gobject.SIGNAL_RUN_LAST | gobject.SIGNAL_ACTION, gobject.TYPE_NONE, (gobject.TYPE_INT,), ) gtk.binding_entry_add_signal( gtkimageview.AnimView, gtk.keysyms.e, 0, "rotate", int, gtk.gdk.PIXBUF_ROTATE_COUNTERCLOCKWISE ) gtk.binding_entry_add_signal(gtkimageview.AnimView, gtk.keysyms.r, 0, "rotate", int, gtk.gdk.PIXBUF_ROTATE_CLOCKWISE) view = gtkimageview.AnimView() view.connect("rotate", rotate_cb) view.set_anim(anim) scroll_win = gtkimageview.ImageScrollWin(view) win = gtk.Window() win.set_default_size(600, 400) win.add(scroll_win) win.show_all() gtk.main()
now = self.get_cursor() if not now == (None,None): self.set_cursor(len(self.liststore)-1) elif what == "a": self.client.post_window.show_up() elif what == "h": self.client.lines_note_book.prev_page() elif what == "l": self.client.lines_note_book.next_page() # when j is pressed,call keypressed event. gtk.binding_entry_add_signal(Eventline,gtk.keysyms.J, 0,"keypressed",str,"j") # when k is pressed,call keypressed event. gtk.binding_entry_add_signal(Eventline,gtk.keysyms.K, 0,"keypressed",str,"k") # when g is pressed,call keypressed event. gtk.binding_entry_add_signal(Eventline,gtk.keysyms.G, 0,"keypressed",str,"g") # when G is pressed,call keypressed event. # Shift_Mask.not g but G. gtk.binding_entry_add_signal(Eventline,gtk.keysyms.G, gtk.gdk.SHIFT_MASK,"keypressed",str,"G") # when r is pressed,call keypressed event.
def __init__(self): gobject.GObject.__init__(self) gtk.Notebook.__init__(self) gtk.binding_entry_add_signal(self, gtk.keysyms.Tab, gtk.gdk.CONTROL_MASK | gtk.gdk.SHIFT_MASK, "prev-page") gtk.binding_entry_add_signal(self, gtk.keysyms.Tab, gtk.gdk.CONTROL_MASK, "next-page")
w, h = self.get_size() if self.workspace == 'single': if (w, h) == self.single_win_size: return self.single_win_size = (w, h) else: if (w, h) == self.wide_win_size: return self.wide_win_size = (w, h) self.win_pos = self.get_position() self.contenido.update_wrap(w, self.workspace) return def move_event(self, widget, event): self.win_pos = self.get_position() def __on_key_press(self, widget, keycomb): if self.mode < 2: return if keycomb == 'ctrl+n': self.show_update_box() #if gobject.pygtk_version < (2, 8, 0): gobject.type_register(Main) gtk.binding_entry_add_signal(Main, gtk.keysyms.n, gtk.gdk.CONTROL_MASK, 'mykeypress', str, 'ctrl+n')
icon.set_tooltip_text("wallet is unencrypted") def add_help_button(hbox, message): button = gtk.Button("?") button.connect("clicked", lambda x: show_message(message)) button.show() hbox.pack_start(button, False, False) class MyWindow(gtk.Window): __gsignals__ = dict(mykeypress=(gobject.SIGNAL_RUN_LAST | gobject.SIGNAL_ACTION, None, (str,))) gobject.type_register(MyWindow) gtk.binding_entry_add_signal(MyWindow, gtk.keysyms.W, gtk.gdk.CONTROL_MASK, "mykeypress", str, "ctrl+W") gtk.binding_entry_add_signal(MyWindow, gtk.keysyms.Q, gtk.gdk.CONTROL_MASK, "mykeypress", str, "ctrl+Q") class ElectrumWindow: def show_message(self, msg): show_message(msg, self.window) def __init__(self, wallet, config): self.config = config self.wallet = wallet self.funds_error = False # True if not enough funds self.window = MyWindow(gtk.WINDOW_TOPLEVEL) title = "Electrum " + self.wallet.electrum_version + " - " + self.config.path if not self.wallet.seed:
if gobject.pygtk_version < (2, 8, 0): gobject.type_register(MessageTextView) # We register depending on keysym and modifier some bindings # but we also pass those as param so we can construct fake Event # Here we register bindings for those combinations that there is NO DEFAULT # action to be done by gtk TextView. In such case we should not add a binding # as the default action comes first and our bindings is useless. In that case # we catch and do stuff before default action in normal key_press_event # and we also return True there to stop the default action from running # CTRL + SHIFT + TAB gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.ISO_Left_Tab, gtk.gdk.CONTROL_MASK, 'mykeypress', int, gtk.keysyms.ISO_Left_Tab, gtk.gdk.ModifierType, gtk.gdk.CONTROL_MASK) # CTRL + TAB gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.Tab, gtk.gdk.CONTROL_MASK, 'mykeypress', int, gtk.keysyms.Tab, gtk.gdk.ModifierType, gtk.gdk.CONTROL_MASK) # TAB gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.Tab, 0, 'mykeypress', int, gtk.keysyms.Tab, gtk.gdk.ModifierType, 0) # CTRL + UP gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.Up, gtk.gdk.CONTROL_MASK, 'mykeypress', int, gtk.keysyms.Up, gtk.gdk.ModifierType, gtk.gdk.CONTROL_MASK)
hbox_content.pack_start(vbox, True, True) primary_markup = "<b>%s</b>" % primary_text primary_label = gtk.Label(primary_markup) primary_label.set_use_markup(True) primary_label.set_line_wrap(True) primary_label.set_alignment(0, 0.5) primary_label.set_flags(gtk.CAN_FOCUS) primary_label.set_selectable(True) primary_label.show() vbox.pack_start(primary_label, True, True) if secondary_text: secondary_markup = "<small>%s</small>" % secondary_text secondary_label = gtk.Label(secondary_markup) secondary_label.set_flags(gtk.CAN_FOCUS) secondary_label.set_use_markup(True) secondary_label.set_line_wrap(True) secondary_label.set_selectable(True) secondary_label.set_alignment(0, 0.5) secondary_label.show() vbox.pack_start(secondary_label, True, True) self.set_contents(hbox_content) gtk.binding_entry_add_signal(MessageArea, gtk.gdk.keyval_from_name("Escape"), 0, "close")
buffer = self.get_buffer() start, end = buffer.get_bounds() buffer.delete(start, end) # We register depending on keysym and modifier some bindings # but we also pass those as param so we can construct fake Event # Here we register bindings for those combinations that there is NO DEFAULT # action to be done by gtk TextView. In such case we should not add a binding # as the default action comes first and our bindings is useless. In that case # we catch and do stuff before default action in normal key_press_event # and we also return True there to stop the default action from running # CTRL + SHIFT + TAB gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.ISO_Left_Tab, gtk.gdk.CONTROL_MASK, 'mykeypress', int, gtk.keysyms.ISO_Left_Tab, gtk.gdk.ModifierType, gtk.gdk.CONTROL_MASK) # CTRL + TAB gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.Tab, gtk.gdk.CONTROL_MASK, 'mykeypress', int, gtk.keysyms.Tab, gtk.gdk.ModifierType, gtk.gdk.CONTROL_MASK) # TAB gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.Tab, 0, 'mykeypress', int, gtk.keysyms.Tab, gtk.gdk.ModifierType, 0) # CTRL + UP gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.Up, gtk.gdk.CONTROL_MASK, 'mykeypress', int,
import gtk import threading import gobject from settings import * class PostView(gtk.TextView): __gsignals__= { "keypressed":(gobject.SIGNAL_RUN_LAST|gobject.SIGNAL_ACTION, None, (str,),) } gtk.binding_entry_add_signal(PostView,gtk.keysyms.Escape, 0,"keypressed",str,"esc") gtk.binding_entry_add_signal(PostView,gtk.keysyms.Return, gtk.gdk.CONTROL_MASK,"keypressed",str,"C-Enter") class PostBox(gtk.HBox): def __init__(self,client): gtk.HBox.__init__(self) self.client = client post_view = PostView() post_view.connect("keypressed",self.keypressed) post_view.set_wrap_mode(gtk.WRAP_CHAR) self.post_buffer = post_view.get_buffer()
self.set_accepts_tab(True) self.set_editable(True) self.set_cursor_visible(True) self.set_wrap_mode(gtk.WRAP_WORD_CHAR) self.set_left_margin(2) self.set_right_margin(2) self.set_pixels_above_lines(2) self.set_pixels_below_lines(2) def destroy(self): import gc gobject.idle_add(lambda: gc.collect()) def clear(self, widget=None): '''clear text in the textview''' buffer = self.get_buffer() start, end = buffer.get_bounds() buffer.delete(start, end) gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.Return, 0, 'mykeypress', int, gtk.keysyms.Return, gtk.gdk.ModifierType, 0) gtk.binding_entry_add_signal(MessageTextView, gtk.keysyms.Escape, 0, 'mykeypress', int, gtk.keysyms.Escape, gtk.gdk.ModifierType, 0) if gobject.pygtk_version < (2, 8): gobject.type_register(MessageTextView) gobject.type_register(HtmlTextView)
icon.set_tooltip_text('wallet is encrypted') else: icon.set_tooltip_text('wallet is unencrypted') def add_help_button(hbox, message): button = gtk.Button('?') button.connect("clicked", lambda x: show_message(message)) button.show() hbox.pack_start(button,False, False) class MyWindow(gtk.Window): __gsignals__ = dict( mykeypress = (gobject.SIGNAL_RUN_LAST | gobject.SIGNAL_ACTION, None, (str,)) ) gobject.type_register(MyWindow) gtk.binding_entry_add_signal(MyWindow, gtk.keysyms.W, gtk.gdk.CONTROL_MASK, 'mykeypress', str, 'ctrl+W') gtk.binding_entry_add_signal(MyWindow, gtk.keysyms.Q, gtk.gdk.CONTROL_MASK, 'mykeypress', str, 'ctrl+Q') class ElectrumWindow: def show_message(self, msg): show_message(msg, self.window) def __init__(self, wallet, config): self.config = config self.wallet = wallet self.funds_error = False # True if not enough funds self.num_zeros = int(self.config.get('num_zeros',0)) self.window = MyWindow(gtk.WINDOW_TOPLEVEL)
class NullShaper(cairotool.ImageCairoShaper): def get_damage_area(self): return gdk.Rectangle(0, 0, 0, 0) def motion(self, x, y): pass def draw(self, cr): pass def reset(self): pass def start(self, x, y): pass gobject.signal_new('toggle_overwrite', gtkimageview.ImageView, gobject.SIGNAL_RUN_LAST | gobject.SIGNAL_ACTION, gobject.TYPE_NONE, ()) gtk.binding_entry_add_signal(gtkimageview.ImageView, gtk.keysyms.t, 0, 'toggle_overwrite') pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, 4000, 2000) view = gtkimageview.ImageView() view.set_interpolation(gdk.INTERP_NEAREST) view.set_pixbuf(pixbuf) tool = cairotool.ImageToolCairo(view, NullShaper()) view.set_tool(tool) def toggle_cb(*args): tool.set_overwritable_pixbuf(not tool.get_overwritable_pixbuf()) view.connect('toggle_overwrite', toggle_cb) def do_rectangle_cb(*args): surface = tool.get_image_surface() width = surface.get_width()
def add_help_button(hbox, message): button = gtk.Button('?') button.connect("clicked", lambda x: show_message(message)) button.show() hbox.pack_start(button, False, False) class MyWindow(gtk.Window): __gsignals__ = dict(mykeypress=(gobject.SIGNAL_RUN_LAST | gobject.SIGNAL_ACTION, None, (str, ))) gobject.type_register(MyWindow) gtk.binding_entry_add_signal(MyWindow, gtk.keysyms.W, gtk.gdk.CONTROL_MASK, 'mykeypress', str, 'ctrl+W') gtk.binding_entry_add_signal(MyWindow, gtk.keysyms.Q, gtk.gdk.CONTROL_MASK, 'mykeypress', str, 'ctrl+Q') class ElectrumWindow: def show_message(self, msg): show_message(msg, self.window) def __init__(self, wallet, config): self.config = config self.wallet = wallet self.funds_error = False # True if not enough funds self.window = MyWindow(gtk.WINDOW_TOPLEVEL) title = 'Electrum ' + self.wallet.electrum_version + ' - ' + self.config.path
def test_keybinding_signal_on_gobject(): """ Attempt to bind a keybinding to a signal in a non-gtk class. Test should fail with a warning message because only gtk classes can have keybindings. """ class Test47(gobject.GObject): pass gobject.type_register(Test47) # Add a signal to the class gobject.signal_new( "asignal", Test47, gobject.SIGNAL_RUN_LAST | gobject.SIGNAL_ACTION, gobject.TYPE_NONE, (gobject.TYPE_INT,) ) gtk.binding_entry_add_signal(Test47, gtk.keysyms.x, 0, "asignal", int, 5)