ability to configure pubsub nodes. see #3053
This commit is contained in:
parent
ecfde88bac
commit
13541c0425
7 changed files with 207 additions and 199 deletions
|
@ -1,135 +1,120 @@
|
||||||
<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
|
<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
|
||||||
|
<!--*- mode: xml -*-->
|
||||||
<glade-interface>
|
<glade-interface>
|
||||||
|
|
||||||
<widget class="GtkWindow" id="manage_pep_services_window">
|
<widget class="GtkWindow" id="manage_pep_services_window">
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
<property name="title" translatable="yes"></property>
|
|
||||||
<property name="type">GTK_WINDOW_TOPLEVEL</property>
|
|
||||||
<property name="window_position">GTK_WIN_POS_NONE</property>
|
|
||||||
<property name="modal">False</property>
|
|
||||||
<property name="default_width">350</property>
|
<property name="default_width">350</property>
|
||||||
<property name="default_height">150</property>
|
<property name="default_height">150</property>
|
||||||
<property name="resizable">True</property>
|
|
||||||
<property name="destroy_with_parent">False</property>
|
|
||||||
<property name="decorated">True</property>
|
|
||||||
<property name="skip_taskbar_hint">False</property>
|
|
||||||
<property name="skip_pager_hint">False</property>
|
|
||||||
<property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
|
|
||||||
<property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
|
|
||||||
<property name="focus_on_map">True</property>
|
|
||||||
<property name="urgency_hint">False</property>
|
|
||||||
<signal name="destroy" handler="on_manage_pep_services_window_destroy"/>
|
<signal name="destroy" handler="on_manage_pep_services_window_destroy"/>
|
||||||
|
|
||||||
<child>
|
<child>
|
||||||
<widget class="GtkVBox" id="vbox1">
|
<widget class="GtkVBox" id="vbox1">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="homogeneous">False</property>
|
|
||||||
<property name="spacing">0</property>
|
|
||||||
|
|
||||||
<child>
|
<child>
|
||||||
<widget class="GtkScrolledWindow" id="scrolledwindow1">
|
<widget class="GtkScrolledWindow" id="scrolledwindow1">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
|
<property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
|
||||||
<property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
|
<property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
|
||||||
<property name="shadow_type">GTK_SHADOW_NONE</property>
|
|
||||||
<property name="window_placement">GTK_CORNER_TOP_LEFT</property>
|
|
||||||
|
|
||||||
<child>
|
<child>
|
||||||
<widget class="GtkTreeView" id="services_treeview">
|
<widget class="GtkTreeView" id="services_treeview">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
<property name="headers_visible">True</property>
|
|
||||||
<property name="rules_hint">False</property>
|
|
||||||
<property name="reorderable">False</property>
|
|
||||||
<property name="enable_search">True</property>
|
|
||||||
<property name="fixed_height_mode">False</property>
|
|
||||||
<property name="hover_selection">False</property>
|
|
||||||
<property name="hover_expand">False</property>
|
|
||||||
</widget>
|
</widget>
|
||||||
</child>
|
</child>
|
||||||
</widget>
|
</widget>
|
||||||
<packing>
|
|
||||||
<property name="padding">0</property>
|
|
||||||
<property name="expand">True</property>
|
|
||||||
<property name="fill">True</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
</child>
|
||||||
|
|
||||||
<child>
|
<child>
|
||||||
<widget class="GtkHButtonBox" id="hbuttonbox1">
|
<widget class="GtkHButtonBox" id="hbuttonbox1">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="layout_style">GTK_BUTTONBOX_DEFAULT_STYLE</property>
|
<property name="spacing">6</property>
|
||||||
<property name="spacing">0</property>
|
|
||||||
|
|
||||||
<child>
|
<child>
|
||||||
<widget class="GtkButton" id="add_button">
|
<widget class="GtkButton" id="add_button">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
<property name="can_default">True</property>
|
<property name="can_default">True</property>
|
||||||
<property name="has_default">True</property>
|
<property name="has_default">True</property>
|
||||||
<property name="can_focus">True</property>
|
|
||||||
<property name="label">gtk-add</property>
|
<property name="label">gtk-add</property>
|
||||||
<property name="use_stock">True</property>
|
<property name="use_stock">True</property>
|
||||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
|
||||||
<property name="focus_on_click">True</property>
|
|
||||||
<property name="response_id">-5</property>
|
<property name="response_id">-5</property>
|
||||||
<signal name="clicked" handler="on_add_button_clicked" last_modification_time="Sat, 31 Mar 2007 07:57:55 GMT"/>
|
<signal name="clicked" handler="on_add_button_clicked"/>
|
||||||
</widget>
|
</widget>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<widget class="GtkButton" id="delete_button">
|
<widget class="GtkButton" id="delete_button">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
<property name="can_default">True</property>
|
<property name="can_default">True</property>
|
||||||
<property name="has_default">True</property>
|
<property name="has_default">True</property>
|
||||||
<property name="can_focus">True</property>
|
|
||||||
<property name="label">gtk-delete</property>
|
<property name="label">gtk-delete</property>
|
||||||
<property name="use_stock">True</property>
|
<property name="use_stock">True</property>
|
||||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
|
||||||
<property name="focus_on_click">True</property>
|
|
||||||
<property name="response_id">-5</property>
|
<property name="response_id">-5</property>
|
||||||
<signal name="clicked" handler="on_delete_button_clicked" last_modification_time="Sat, 31 Mar 2007 07:57:55 GMT"/>
|
<signal name="clicked" handler="on_delete_button_clicked"/>
|
||||||
</widget>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<widget class="GtkButton" id="cancel_button">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_default">True</property>
|
|
||||||
<property name="can_focus">True</property>
|
|
||||||
<property name="label">gtk-cancel</property>
|
|
||||||
<property name="use_stock">True</property>
|
|
||||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
|
||||||
<property name="focus_on_click">True</property>
|
|
||||||
<property name="response_id">-6</property>
|
|
||||||
<signal name="clicked" handler="on_cancel_button_clicked" last_modification_time="Sat, 31 Mar 2007 07:58:52 GMT"/>
|
|
||||||
</widget>
|
|
||||||
</child>
|
|
||||||
|
|
||||||
<child>
|
|
||||||
<widget class="GtkButton" id="ok_button">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_default">True</property>
|
|
||||||
<property name="has_default">True</property>
|
|
||||||
<property name="can_focus">True</property>
|
|
||||||
<property name="label">gtk-ok</property>
|
|
||||||
<property name="use_stock">True</property>
|
|
||||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
|
||||||
<property name="focus_on_click">True</property>
|
|
||||||
<property name="response_id">-5</property>
|
|
||||||
<signal name="clicked" handler="on_ok_button_clicked" last_modification_time="Sat, 31 Mar 2007 07:57:55 GMT"/>
|
|
||||||
</widget>
|
|
||||||
</child>
|
|
||||||
</widget>
|
</widget>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="padding">0</property>
|
<property name="position">1</property>
|
||||||
<property name="expand">True</property>
|
</packing>
|
||||||
<property name="fill">True</property>
|
</child>
|
||||||
|
<child>
|
||||||
|
<widget class="GtkButton" id="configure_button">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="receives_default">True</property>
|
||||||
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
|
<property name="response_id">0</property>
|
||||||
|
<signal name="clicked" handler="on_configure_button_clicked"/>
|
||||||
|
<child>
|
||||||
|
<widget class="GtkHBox" id="hbox1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
|
<child>
|
||||||
|
<widget class="GtkImage" id="image1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
|
<property name="stock">gtk-preferences</property>
|
||||||
|
</widget>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<widget class="GtkLabel" id="label1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
|
<property name="label" translatable="yes">_Configure</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
</widget>
|
||||||
|
<packing>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</widget>
|
||||||
|
</child>
|
||||||
|
</widget>
|
||||||
|
<packing>
|
||||||
|
<property name="position">2</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<widget class="GtkButton" id="close_button">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="can_default">True</property>
|
||||||
|
<property name="label">gtk-close</property>
|
||||||
|
<property name="use_stock">True</property>
|
||||||
|
<property name="response_id">-6</property>
|
||||||
|
<signal name="clicked" handler="on_close_button_clicked"/>
|
||||||
|
</widget>
|
||||||
|
<packing>
|
||||||
|
<property name="position">3</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</widget>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="padding">6</property>
|
||||||
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</widget>
|
</widget>
|
||||||
</child>
|
</child>
|
||||||
</widget>
|
</widget>
|
||||||
|
|
||||||
</glade-interface>
|
</glade-interface>
|
||||||
|
|
|
@ -59,7 +59,7 @@ VCARD_ARRIVED = 'vcard_arrived'
|
||||||
AGENT_REMOVED = 'agent_removed'
|
AGENT_REMOVED = 'agent_removed'
|
||||||
METACONTACTS_ARRIVED = 'metacontacts_arrived'
|
METACONTACTS_ARRIVED = 'metacontacts_arrived'
|
||||||
PRIVACY_ARRIVED = 'privacy_arrived'
|
PRIVACY_ARRIVED = 'privacy_arrived'
|
||||||
PEP_ACCESS_MODEL = 'pep_access_model'
|
PEP_CONFIG = 'pep_config'
|
||||||
HAS_IDLE = True
|
HAS_IDLE = True
|
||||||
try:
|
try:
|
||||||
import idle
|
import idle
|
||||||
|
@ -1121,16 +1121,13 @@ class ConnectionVcard:
|
||||||
self.get_privacy_list('block')
|
self.get_privacy_list('block')
|
||||||
# Ask metacontacts before roster
|
# Ask metacontacts before roster
|
||||||
self.get_metacontacts()
|
self.get_metacontacts()
|
||||||
elif self.awaiting_answers[id][0] == PEP_ACCESS_MODEL:
|
elif self.awaiting_answers[id][0] == PEP_CONFIG:
|
||||||
conf = iq_obj.getTag('pubsub').getTag('configure')
|
conf = iq_obj.getTag('pubsub').getTag('configure')
|
||||||
node = conf.getAttr('node')
|
node = conf.getAttr('node')
|
||||||
form_tag = conf.getTag('x', namespace=common.xmpp.NS_DATA)
|
form_tag = conf.getTag('x', namespace=common.xmpp.NS_DATA)
|
||||||
if form_tag:
|
if form_tag:
|
||||||
form = common.dataforms.ExtendForm(node=form_tag)
|
form = common.dataforms.ExtendForm(node=form_tag)
|
||||||
for field in form.iter_fields():
|
self.dispatch('PEP_CONFIG', (node, form))
|
||||||
if field.var == 'pubsub#access_model':
|
|
||||||
self.dispatch('PEP_ACCESS_MODEL', (node, field.value))
|
|
||||||
break
|
|
||||||
|
|
||||||
del self.awaiting_answers[id]
|
del self.awaiting_answers[id]
|
||||||
|
|
||||||
|
|
|
@ -64,28 +64,13 @@ class ConnectionPubSub:
|
||||||
|
|
||||||
self.connection.send(query)
|
self.connection.send(query)
|
||||||
|
|
||||||
def send_pb_configure(self, jid, node, cb, *cbargs, **cbkwargs):
|
def send_pb_configure(self, jid, node, form):
|
||||||
query = xmpp.Iq('set', to=jid)
|
query = xmpp.Iq('set', to=jid)
|
||||||
c = query.addChild('pubsub', namespace=xmpp.NS_PUBSUB)
|
c = query.addChild('pubsub', namespace=xmpp.NS_PUBSUB_OWNER)
|
||||||
c = c.addChild('configure', {'node': node})
|
c = c.addChild('configure', {'node': node})
|
||||||
|
c.addChild(node=form)
|
||||||
|
|
||||||
id = self.connection.send(query)
|
self.connection.send(query)
|
||||||
|
|
||||||
def on_configure(self, connection, query):
|
|
||||||
try:
|
|
||||||
filledform = cb(stanza['pubsub']['configure']['x'], *cbargs, **cbkwargs)
|
|
||||||
#TODO: Build a form
|
|
||||||
#TODO: Send it
|
|
||||||
|
|
||||||
except CancelConfigure:
|
|
||||||
cancel = xmpp.Iq('set', to=jid)
|
|
||||||
ca = query.addChild('pubsub', namespace=xmpp.NS_PUBSUB)
|
|
||||||
ca = ca.addChild('configure', {'node': node})
|
|
||||||
#ca = ca.addChild('x', namespace=xmpp.NS_DATA, {'type': 'cancel'})
|
|
||||||
|
|
||||||
self.connection.send(cancel)
|
|
||||||
|
|
||||||
self.__callbacks[id] = (on_configure, (), {})
|
|
||||||
|
|
||||||
def _PubSubCB(self, conn, stanza):
|
def _PubSubCB(self, conn, stanza):
|
||||||
try:
|
try:
|
||||||
|
@ -100,5 +85,5 @@ class ConnectionPubSub:
|
||||||
e = e.addChild('configure', {'node': node})
|
e = e.addChild('configure', {'node': node})
|
||||||
id = self.connection.getAnID()
|
id = self.connection.getAnID()
|
||||||
query.setID(id)
|
query.setID(id)
|
||||||
self.awaiting_answers[id] = (connection_handlers.PEP_ACCESS_MODEL,)
|
self.awaiting_answers[id] = (connection_handlers.PEP_CONFIG,)
|
||||||
self.connection.send(query)
|
self.connection.send(query)
|
||||||
|
|
|
@ -3681,45 +3681,22 @@ class ManagePEPServicesWindow:
|
||||||
'''close window'''
|
'''close window'''
|
||||||
del gajim.interface.instances[self.account]['pep_services']
|
del gajim.interface.instances[self.account]['pep_services']
|
||||||
|
|
||||||
def on_ok_button_clicked(self, widget):
|
def on_close_button_clicked(self, widget):
|
||||||
pass
|
|
||||||
|
|
||||||
def on_cancel_button_clicked(self, widget):
|
|
||||||
self.window.destroy()
|
self.window.destroy()
|
||||||
|
|
||||||
def cellrenderer_combo_edited(self, cellrenderer, path, new_text):
|
|
||||||
self.treestore[path][1] = new_text
|
|
||||||
|
|
||||||
def init_services(self):
|
def init_services(self):
|
||||||
treeview = self.xml.get_widget('services_treeview')
|
self.treeview = self.xml.get_widget('services_treeview')
|
||||||
# service, access_model, group
|
# service, access_model, group
|
||||||
self.treestore = gtk.ListStore(str, str, str)
|
self.treestore = gtk.ListStore(str)
|
||||||
treeview.set_model(self.treestore)
|
self.treeview.set_model(self.treestore)
|
||||||
|
|
||||||
col = gtk.TreeViewColumn('Service')
|
col = gtk.TreeViewColumn('Service')
|
||||||
treeview.append_column(col)
|
self.treeview.append_column(col)
|
||||||
|
|
||||||
cellrenderer_text = gtk.CellRendererText()
|
cellrenderer_text = gtk.CellRendererText()
|
||||||
col.pack_start(cellrenderer_text)
|
col.pack_start(cellrenderer_text)
|
||||||
col.add_attribute(cellrenderer_text, 'text', 0)
|
col.add_attribute(cellrenderer_text, 'text', 0)
|
||||||
|
|
||||||
col = gtk.TreeViewColumn('access model')
|
|
||||||
treeview.append_column(col)
|
|
||||||
|
|
||||||
model = gtk.ListStore(str)
|
|
||||||
model.append(['open'])
|
|
||||||
model.append(['presence'])
|
|
||||||
model.append(['roster'])
|
|
||||||
model.append(['whitelist'])
|
|
||||||
cellrenderer_combo = gtk.CellRendererCombo()
|
|
||||||
cellrenderer_combo.set_property('text-column', 0)
|
|
||||||
cellrenderer_combo.set_property('model', model)
|
|
||||||
cellrenderer_combo.set_property('has-entry', False)
|
|
||||||
cellrenderer_combo.set_property('editable', True)
|
|
||||||
cellrenderer_combo.connect('edited', self.cellrenderer_combo_edited)
|
|
||||||
col.pack_start(cellrenderer_combo)
|
|
||||||
col.add_attribute(cellrenderer_combo, 'text', 1)
|
|
||||||
|
|
||||||
our_jid = gajim.get_jid_from_account(self.account)
|
our_jid = gajim.get_jid_from_account(self.account)
|
||||||
gajim.connections[self.account].discoverItems(our_jid)
|
gajim.connections[self.account].discoverItems(our_jid)
|
||||||
|
|
||||||
|
@ -3727,9 +3704,21 @@ class ManagePEPServicesWindow:
|
||||||
our_jid = gajim.get_jid_from_account(self.account)
|
our_jid = gajim.get_jid_from_account(self.account)
|
||||||
for item in items:
|
for item in items:
|
||||||
if 'jid' in item and item['jid'] == our_jid and 'node' in item:
|
if 'jid' in item and item['jid'] == our_jid and 'node' in item:
|
||||||
# ask <configure> to have access model
|
self.treestore.append([item['node']])
|
||||||
gajim.connections[self.account].request_pb_configuration(
|
|
||||||
item['jid'], item['node'])
|
|
||||||
|
|
||||||
def new_service(self, node, model):
|
def on_configure_button_clicked(self, widget):
|
||||||
self.treestore.append([node, model, ''])
|
selection = self.treeview.get_selection()
|
||||||
|
if not selection:
|
||||||
|
return
|
||||||
|
model, iter = selection.get_selected()
|
||||||
|
node = model[iter][0]
|
||||||
|
our_jid = gajim.get_jid_from_account(self.account)
|
||||||
|
gajim.connections[self.account].request_pb_configuration(our_jid, node)
|
||||||
|
|
||||||
|
def config(self, node, form):
|
||||||
|
def on_ok(form, node):
|
||||||
|
form.type = 'submit'
|
||||||
|
our_jid = gajim.get_jid_from_account(self.account)
|
||||||
|
gajim.connections[self.account].send_pb_configure(our_jid, node, form)
|
||||||
|
window = dialogs.DataFormWindow(form, (on_ok, node))
|
||||||
|
window.show_all()
|
||||||
|
|
|
@ -340,6 +340,8 @@ class SingleForm(gtk.Table, object):
|
||||||
widget = gtk.VBox()
|
widget = gtk.VBox()
|
||||||
first_radio = None
|
first_radio = None
|
||||||
for value, label in field.iter_options():
|
for value, label in field.iter_options():
|
||||||
|
if not label:
|
||||||
|
label = value
|
||||||
radio = gtk.RadioButton(first_radio, label=label)
|
radio = gtk.RadioButton(first_radio, label=label)
|
||||||
radio.connect('toggled',
|
radio.connect('toggled',
|
||||||
self.on_list_single_radiobutton_toggled, field, value)
|
self.on_list_single_radiobutton_toggled, field, value)
|
||||||
|
|
|
@ -1013,21 +1013,49 @@ class AboutDialog:
|
||||||
return str_[0:-1] # remove latest .
|
return str_[0:-1] # remove latest .
|
||||||
|
|
||||||
class Dialog(gtk.Dialog):
|
class Dialog(gtk.Dialog):
|
||||||
def __init__(self, parent, title, buttons, default = None):
|
def __init__(self, parent, title, buttons, default = None,
|
||||||
gtk.Dialog.__init__(self, title, parent, gtk.DIALOG_DESTROY_WITH_PARENT | gtk.DIALOG_MODAL | gtk.DIALOG_NO_SEPARATOR)
|
on_response_ok=None, on_response_cancel=None):
|
||||||
|
gtk.Dialog.__init__(self, title, parent, gtk.DIALOG_DESTROY_WITH_PARENT | gtk.DIALOG_NO_SEPARATOR)
|
||||||
|
|
||||||
|
self.user_response_ok = on_response_ok
|
||||||
|
self.user_response_cancel = on_response_cancel
|
||||||
self.set_border_width(6)
|
self.set_border_width(6)
|
||||||
self.vbox.set_spacing(12)
|
self.vbox.set_spacing(12)
|
||||||
self.set_resizable(False)
|
self.set_resizable(False)
|
||||||
|
|
||||||
|
possible_responses = {gtk.STOCK_OK: self.on_response_ok,
|
||||||
|
gtk.STOCK_CANCEL: self.on_response_cancel}
|
||||||
for stock, response in buttons:
|
for stock, response in buttons:
|
||||||
self.add_button(stock, response)
|
b = self.add_button(stock, response)
|
||||||
|
for response in possible_responses:
|
||||||
|
if stock == response:
|
||||||
|
b.connect('clicked', possible_responses[response])
|
||||||
|
break
|
||||||
|
|
||||||
if default is not None:
|
if default is not None:
|
||||||
self.set_default_response(default)
|
self.set_default_response(default)
|
||||||
else:
|
else:
|
||||||
self.set_default_response(buttons[-1][1])
|
self.set_default_response(buttons[-1][1])
|
||||||
|
|
||||||
|
def on_response_ok(self, widget):
|
||||||
|
if self.user_response_ok:
|
||||||
|
if isinstance(self.user_response_ok, tuple):
|
||||||
|
self.user_response_ok[0](*self.user_response_ok[1:])
|
||||||
|
else:
|
||||||
|
self.user_response_ok()
|
||||||
|
self.destroy()
|
||||||
|
|
||||||
|
def on_response_cancel(self, widget):
|
||||||
|
if self.user_response_cancel:
|
||||||
|
if isinstance(self.user_response_cancel, tuple):
|
||||||
|
self.user_response_cancel[0](*self.user_response_ok[1:])
|
||||||
|
else:
|
||||||
|
self.user_response_cancel()
|
||||||
|
self.destroy()
|
||||||
|
|
||||||
|
def just_destroy(self, widget):
|
||||||
|
self.destroy()
|
||||||
|
|
||||||
def get_button(self, index):
|
def get_button(self, index):
|
||||||
buttons = self.action_area.get_children()
|
buttons = self.action_area.get_children()
|
||||||
return index < len(buttons) and buttons[index] or None
|
return index < len(buttons) and buttons[index] or None
|
||||||
|
@ -3700,3 +3728,25 @@ class TransformChatToMUC:
|
||||||
def unique_room_id_error(self, server):
|
def unique_room_id_error(self, server):
|
||||||
self.unique_room_id_supported(server,
|
self.unique_room_id_supported(server,
|
||||||
gajim.nicks[self.account] + str(randrange(9999999)))
|
gajim.nicks[self.account] + str(randrange(9999999)))
|
||||||
|
|
||||||
|
class DataFormWindow(Dialog):
|
||||||
|
def __init__(self, form, on_response_ok):
|
||||||
|
self.df_response_ok = on_response_ok
|
||||||
|
Dialog.__init__(self, None, 'test', [(gtk.STOCK_CANCEL,
|
||||||
|
gtk.RESPONSE_REJECT), (gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)],
|
||||||
|
on_response_ok=self.on_ok)
|
||||||
|
self.set_resizable(True)
|
||||||
|
self.dataform_widget = dataforms_widget.DataFormWidget()
|
||||||
|
self.dataform = dataforms.ExtendForm(node = form)
|
||||||
|
self.dataform_widget.set_sensitive(True)
|
||||||
|
self.dataform_widget.data_form = self.dataform
|
||||||
|
self.dataform_widget.show_all()
|
||||||
|
self.vbox.pack_start(self.dataform_widget)
|
||||||
|
|
||||||
|
def on_ok(self):
|
||||||
|
form = self.dataform_widget.data_form
|
||||||
|
if isinstance(self.df_response_ok, tuple):
|
||||||
|
self.df_response_ok[0](form, *self.df_response_ok[1:])
|
||||||
|
else:
|
||||||
|
self.df_response_ok(form)
|
||||||
|
self.destroy()
|
||||||
|
|
|
@ -2199,10 +2199,10 @@ class Interface:
|
||||||
_('You are already connected to this account with the same resource. Please type a new one'), input_str = gajim.connections[account].server_resource,
|
_('You are already connected to this account with the same resource. Please type a new one'), input_str = gajim.connections[account].server_resource,
|
||||||
is_modal = False, ok_handler = on_ok)
|
is_modal = False, ok_handler = on_ok)
|
||||||
|
|
||||||
def handle_event_pep_access_model(self, account, data):
|
def handle_event_pep_config(self, account, data):
|
||||||
# ('PEP_ACCESS_MODEL', account, (node, model))
|
# ('PEP_ACCESS_MODEL', account, (node, form))
|
||||||
if self.instances[account].has_key('pep_services'):
|
if self.instances[account].has_key('pep_services'):
|
||||||
self.instances[account]['pep_services'].new_service(data[0], data[1])
|
self.instances[account]['pep_services'].config(data[0], data[1])
|
||||||
|
|
||||||
def handle_event_unique_room_id_supported(self, account, data):
|
def handle_event_unique_room_id_supported(self, account, data):
|
||||||
'''Receive confirmation that unique_room_id are supported'''
|
'''Receive confirmation that unique_room_id are supported'''
|
||||||
|
@ -2629,7 +2629,7 @@ class Interface:
|
||||||
'SEARCH_FORM': self.handle_event_search_form,
|
'SEARCH_FORM': self.handle_event_search_form,
|
||||||
'SEARCH_RESULT': self.handle_event_search_result,
|
'SEARCH_RESULT': self.handle_event_search_result,
|
||||||
'RESOURCE_CONFLICT': self.handle_event_resource_conflict,
|
'RESOURCE_CONFLICT': self.handle_event_resource_conflict,
|
||||||
'PEP_ACCESS_MODEL': self.handle_event_pep_access_model,
|
'PEP_CONFIG': self.handle_event_pep_config,
|
||||||
'UNIQUE_ROOM_ID_UNSUPPORTED': \
|
'UNIQUE_ROOM_ID_UNSUPPORTED': \
|
||||||
self.handle_event_unique_room_id_unsupported,
|
self.handle_event_unique_room_id_unsupported,
|
||||||
'UNIQUE_ROOM_ID_SUPPORTED': self.handle_event_unique_room_id_supported,
|
'UNIQUE_ROOM_ID_SUPPORTED': self.handle_event_unique_room_id_supported,
|
||||||
|
|
Loading…
Add table
Reference in a new issue