merge local diff

This commit is contained in:
Yann Leboulanger 2009-11-25 16:51:26 +01:00
commit 18fc83c1e8
5 changed files with 417 additions and 182 deletions

View File

@ -35,7 +35,9 @@ class AtomWindow:
@classmethod
def newAtomEntry(cls, entry):
''' Queue new entry, open window if there's no one opened. '''
"""
Queue new entry, open window if there's no one opened
"""
cls.entries.append(entry)
if cls.window is None:
@ -48,7 +50,9 @@ class AtomWindow:
cls.window = None
def __init__(self):
''' Create new window... only if we have anything to show. '''
"""
Create new window... only if we have anything to show
"""
assert len(self.__class__.entries)>0
self.entry = None # the entry actually displayed
@ -69,7 +73,9 @@ class AtomWindow:
self.feed_title_eventbox.add_events(gtk.gdk.BUTTON_PRESS_MASK)
def displayNextEntry(self):
''' Get next entry from the queue and display it in the window. '''
"""
Get next entry from the queue and display it in the window
"""
assert len(self.__class__.entries)>0
newentry = self.__class__.entries.pop(0)
@ -103,8 +109,10 @@ class AtomWindow:
self.entry = newentry
def updateCounter(self):
''' We display number of events on the top of window, sometimes it needs to be
changed...'''
"""
Display number of events on the top of window, sometimes it needs to be
changed
"""
count = len(self.__class__.entries)
if count>0:
self.new_entry_label.set_text(i18n.ngettext(

View File

@ -63,17 +63,23 @@ from common.exceptions import GajimGeneralException
#---------- PreferencesWindow class -------------#
class PreferencesWindow:
'''Class for Preferences window'''
"""
Class for Preferences window
"""
def on_preferences_window_destroy(self, widget):
'''close window'''
"""
Close window
"""
del gajim.interface.instances['preferences']
def on_close_button_clicked(self, widget):
self.window.destroy()
def __init__(self):
'''Initialize Preferences window'''
"""
Initialize Preferences window
"""
self.xml = gtkgui_helpers.get_glade('preferences_window.glade')
self.window = self.xml.get_widget('preferences_window')
self.window.set_transient_for(gajim.interface.roster.window)
@ -495,8 +501,10 @@ class PreferencesWindow:
self.window.hide()
def get_per_account_option(self, opt):
'''Return the value of the option opt if it's the same in all accounts
else returns "mixed"'''
"""
Return the value of the option opt if it's the same in all accounts else
returns "mixed"
"""
if len(gajim.connections) == 0:
# a non existant key return default value
return gajim.config.get_per('accounts', '__default__', opt)
@ -585,7 +593,9 @@ class PreferencesWindow:
self.toggle_emoticons()
def toggle_emoticons(self):
'''Update emoticons state in Opened Chat Windows'''
"""
Update emoticons state in Opened Chat Windows
"""
for win in gajim.interface.msg_win_mgr.windows():
win.toggle_emoticons()
@ -779,7 +789,9 @@ class PreferencesWindow:
self.sounds_preferences.window.present()
def update_text_tags(self):
'''Update color tags in Opened Chat Windows'''
"""
Update color tags in opened chat windows
"""
for win in gajim.interface.msg_win_mgr.windows():
win.update_tags()
@ -800,7 +812,9 @@ class PreferencesWindow:
gajim.interface.save_config()
def update_text_font(self):
'''Update text font in Opened Chat Windows'''
"""
Update text font in opened chat windows
"""
for win in gajim.interface.msg_win_mgr.windows():
win.update_font()
@ -879,7 +893,9 @@ class PreferencesWindow:
gajim.interface.save_config()
def _set_color(self, state, widget_name, option):
''' set color value in prefs and update the UI '''
"""
Set color value in prefs and update the UI
"""
if state:
color = self.xml.get_widget(widget_name).get_color()
color_string = gtkgui_helpers.make_color_string(color)
@ -1346,7 +1362,10 @@ class ManageProxiesWindow:
#---------- AccountsWindow class -------------#
class AccountsWindow:
'''Class for accounts window: list of accounts'''
"""
Class for accounts window: list of accounts
"""
def on_accounts_window_destroy(self, widget):
del gajim.interface.instances['accounts']
@ -1414,7 +1433,9 @@ class AccountsWindow:
iter_ = model.iter_next(iter_)
def init_accounts(self):
'''initialize listStore with existing accounts'''
"""
Initialize listStore with existing accounts
"""
self.remove_button.set_sensitive(False)
self.rename_button.set_sensitive(False)
self.current_account = None
@ -1440,7 +1461,9 @@ class AccountsWindow:
elif self.need_relogin and self.current_account and \
gajim.connections[self.current_account].connected > 0:
def login(account, show_before, status_before):
''' login with previous status'''
"""
Login with previous status
"""
# first make sure connection is really closed,
# 0.5 may not be enough
gajim.connections[account].disconnect(True)
@ -1473,7 +1496,9 @@ class AccountsWindow:
self.resend_presence = False
def on_accounts_treeview_cursor_changed(self, widget):
'''Activate modify buttons when a row is selected, update accounts info'''
"""
Activate modify buttons when a row is selected, update accounts info
"""
sel = self.accounts_treeview.get_selection()
(model, iter_) = sel.get_selected()
if iter_:
@ -1739,7 +1764,9 @@ class AccountsWindow:
gajim.config.get_per('accounts', account, 'use_ft_proxies'))
def on_add_button_clicked(self, widget):
'''When add button is clicked: open an account information window'''
"""
When add button is clicked: open an account information window
"""
if 'account_creation_wizard' in gajim.interface.instances:
gajim.interface.instances['account_creation_wizard'].window.present()
else:
@ -1747,8 +1774,10 @@ class AccountsWindow:
AccountCreationWizardWindow()
def on_remove_button_clicked(self, widget):
'''When delete button is clicked:
Remove an account from the listStore and from the config file'''
"""
When delete button is clicked: Remove an account from the listStore and
from the config file
"""
if not self.current_account:
return
account = self.current_account
@ -2409,8 +2438,11 @@ class AccountsWindow:
'zeroconf_email', email)
class FakeDataForm(gtk.Table, object):
'''Class for forms that are in XML format <entry1>value1</entry1>
infos in a table {entry1: value1, }'''
"""
Class for forms that are in XML format <entry1>value1</entry1> infos in a
table {entry1: value1}
"""
def __init__(self, infos):
gtk.Table.__init__(self)
self.infos = infos
@ -2418,7 +2450,9 @@ class FakeDataForm(gtk.Table, object):
self._draw_table()
def _draw_table(self):
'''Draw the table'''
"""
Draw the table
"""
nbrow = 0
if 'instructions' in self.infos:
nbrow = 1
@ -2452,9 +2486,11 @@ class FakeDataForm(gtk.Table, object):
return self.infos
class ServiceRegistrationWindow:
'''Class for Service registration window:
Window that appears when we want to subscribe to a service
if is_form we use dataforms_widget else we use service_registarion_window'''
"""
Class for Service registration window. Window that appears when we want to
subscribe to a service if is_form we use dataforms_widget else we use
service_registarion_window
"""
def __init__(self, service, infos, account, is_form):
self.service = service
self.account = account
@ -2501,7 +2537,7 @@ class ServiceRegistrationWindow:
self.window.destroy()
class GroupchatConfigWindow:
'''GroupchatConfigWindow class'''
def __init__(self, account, room_jid, form = None):
self.account = account
self.room_jid = room_jid
@ -2654,7 +2690,9 @@ class GroupchatConfigWindow:
self.remove_button[affiliation].set_sensitive(True)
def affiliation_list_received(self, users_dict):
'''Fill the affiliation treeview'''
"""
Fill the affiliation treeview
"""
for jid in users_dict:
affiliation = users_dict[jid]['affiliation']
if affiliation not in self.affiliation_labels.keys():
@ -2703,8 +2741,10 @@ class GroupchatConfigWindow:
#---------- RemoveAccountWindow class -------------#
class RemoveAccountWindow:
'''ask for removing from gajim only or from gajim and server too
and do removing of the account given'''
"""
Ask for removing from gajim only or from gajim and server too and do
removing of the account given
"""
def on_remove_account_window_destroy(self, widget):
if self.account in gajim.interface.instances:
@ -2904,7 +2944,9 @@ class ManageBookmarksWindow:
del gajim.interface.instances['manage_bookmarks']
def on_add_bookmark_button_clicked(self, widget):
'''Add a new bookmark.'''
"""
Add a new bookmark
"""
# Get the account that is currently used
# (the parent of the currently selected item)
(model, iter_) = self.selection.get_selected()
@ -2929,9 +2971,9 @@ class ManageBookmarksWindow:
self.view.set_cursor(model.get_path(iter_))
def on_remove_bookmark_button_clicked(self, widget):
'''
Remove selected bookmark.
'''
"""
Remove selected bookmark
"""
(model, iter_) = self.selection.get_selected()
if not iter_: # Nothing selected
return
@ -2944,9 +2986,9 @@ class ManageBookmarksWindow:
self.clear_fields()
def check_valid_bookmark(self):
'''
Check if all neccessary fields are entered correctly.
'''
"""
Check if all neccessary fields are entered correctly
"""
(model, iter_) = self.selection.get_selected()
if not model.iter_parent(iter_):
@ -2963,10 +3005,10 @@ class ManageBookmarksWindow:
return True
def on_ok_button_clicked(self, widget):
'''
Parse the treestore data into our new bookmarks array,
then send the new bookmarks to the server.
'''
"""
Parse the treestore data into our new bookmarks array, then send the new
bookmarks to the server.
"""
(model, iter_) = self.selection.get_selected()
if iter_ and model.iter_parent(iter_):
#bookmark selected, check it
@ -2997,9 +3039,9 @@ class ManageBookmarksWindow:
self.window.destroy()
def bookmark_selected(self, selection):
'''
"""
Fill in the bookmark's data into the fields.
'''
"""
(model, iter_) = selection.get_selected()
if not iter_:
@ -3444,8 +3486,10 @@ class AccountCreationWizardWindow:
return True # loop forever
def new_acc_connected(self, form, is_form, ssl_msg, ssl_err, ssl_cert,
ssl_fingerprint):
'''connection to server succeded, present the form to the user.'''
ssl_fingerprint):
"""
Connection to server succeded, present the form to the user
"""
if self.update_progressbar_timeout_id is not None:
gobject.source_remove(self.update_progressbar_timeout_id)
self.back_button.show()
@ -3479,7 +3523,9 @@ class AccountCreationWizardWindow:
self.notebook.set_current_page(4) # show form page
def new_acc_not_connected(self, reason):
'''Account creation failed: connection to server failed'''
"""
Account creation failed: connection to server failed
"""
if self.account not in gajim.connections:
return
if self.update_progressbar_timeout_id is not None:
@ -3499,7 +3545,9 @@ class AccountCreationWizardWindow:
self.notebook.set_current_page(6) # show finish page
def acc_is_ok(self, config):
'''Account creation succeeded'''
"""
Account creation succeeded
"""
self.create_vars(config)
self.show_finish_page()
@ -3507,7 +3555,9 @@ class AccountCreationWizardWindow:
gobject.source_remove(self.update_progressbar_timeout_id)
def acc_is_not_ok(self, reason):
'''Account creation failed'''
"""
Account creation failed
"""
self.back_button.show()
self.cancel_button.show()
self.go_online_checkbutton.hide()

View File

@ -158,8 +158,10 @@ class TextViewImage(gtk.Image):
class ConversationTextview(gobject.GObject):
'''Class for the conversation textview (where user reads already said
messages) for chat/groupchat windows'''
"""
Class for the conversation textview (where user reads already said messages)
for chat/groupchat windows
"""
__gsignals__ = dict(
quote = (gobject.SIGNAL_RUN_LAST | gobject.SIGNAL_ACTION,
None, # return value
@ -177,8 +179,10 @@ class ConversationTextview(gobject.GObject):
SCROLL_DELAY = 33 # milliseconds
def __init__(self, account, used_in_history_window = False):
'''if used_in_history_window is True, then we do not show
Clear menuitem in context menu'''
"""
If used_in_history_window is True, then we do not show Clear menuitem in
context menu
"""
gobject.GObject.__init__(self)
self.used_in_history_window = used_in_history_window
@ -642,8 +646,9 @@ class ConversationTextview(gobject.GObject):
return False
def on_textview_motion_notify_event(self, widget, event):
'''change the cursor to a hand when we are over a mail or an
url'''
"""
Change the cursor to a hand when we are over a mail or an url
"""
pointer_x, pointer_y = self.tv.window.get_pointer()[0:2]
x, y = self.tv.window_to_buffer_coords(gtk.TEXT_WINDOW_TEXT,
pointer_x, pointer_y)
@ -688,7 +693,9 @@ class ConversationTextview(gobject.GObject):
self.change_cursor = True
def clear(self, tv = None):
'''clear text in the textview'''
"""
Clear text in the textview
"""
buffer_ = self.tv.get_buffer()
start, end = buffer_.get_bounds()
buffer_.delete(start, end)
@ -698,15 +705,18 @@ class ConversationTextview(gobject.GObject):
self.focus_out_end_mark = None
def visit_url_from_menuitem(self, widget, link):
'''basically it filters out the widget instance'''
"""
Basically it filters out the widget instance
"""
helpers.launch_browser_mailer('url', link)
def on_textview_populate_popup(self, textview, menu):
'''we override the default context menu and we prepend Clear
(only if used_in_history_window is False)
and if we have sth selected we show a submenu with actions on
the phrase (see on_conversation_textview_button_press_event)'''
"""
Override the default context menu and we prepend Clear (only if
used_in_history_window is False) and if we have sth selected we show a
submenu with actions on the phrase (see
on_conversation_textview_button_press_event)
"""
separator_menuitem_was_added = False
if not self.used_in_history_window:
item = gtk.SeparatorMenuItem()
@ -971,13 +981,13 @@ class ConversationTextview(gobject.GObject):
def detect_and_print_special_text(self, otext, other_tags, graphics=True):
'''detects special text (emots & links & formatting)
prints normal text before any special text it founts,
then print special text (that happens many times until
last special text is printed) and then returns the index
"""
Detect special text (emots & links & formatting), print normal text
before any special text it founds, then print special text (that happens
many times until last special text is printed) and then return the index
after *last* special text, so we can print it in
print_conversation_line()'''
print_conversation_line()
"""
buffer_ = self.tv.get_buffer()
insert_tags_func = buffer_.insert_with_tags_by_name
@ -1023,8 +1033,10 @@ class ConversationTextview(gobject.GObject):
return buffer_.get_end_iter()
def print_special_text(self, special_text, other_tags, graphics=True):
'''is called by detect_and_print_special_text and prints
special text (emots, links, formatting)'''
"""
Is called by detect_and_print_special_text and prints special text
(emots, links, formatting)
"""
tags = []
use_other_tags = True
text_is_valid_uri = False
@ -1163,9 +1175,12 @@ class ConversationTextview(gobject.GObject):
buffer_.insert_with_tags_by_name(end_iter, '\n', 'eol')
def print_conversation_line(self, text, jid, kind, name, tim,
other_tags_for_name=[], other_tags_for_time=[], other_tags_for_text=[],
subject=None, old_kind=None, xhtml=None, simple=False, graphics=True):
'''prints 'chat' type messages'''
other_tags_for_name=[], other_tags_for_time=[],
other_tags_for_text=[], subject=None, old_kind=None, xhtml=None,
simple=False, graphics=True):
"""
Print 'chat' type messages
"""
buffer_ = self.tv.get_buffer()
buffer_.begin_user_action()
if self.marks_queue.full():
@ -1263,8 +1278,10 @@ class ConversationTextview(gobject.GObject):
buffer_.end_user_action()
def get_time_to_show(self, tim):
'''Get the time, with the day before if needed and return it.
It DOESN'T format a fuzzy time'''
"""
Get the time, with the day before if needed and return it. It DOESN'T
format a fuzzy time
"""
format = ''
# get difference in days since epoch (86400 = 24*3600)
# number of days since epoch for current time (in GMT) -
@ -1317,8 +1334,10 @@ class ConversationTextview(gobject.GObject):
self.print_empty_line()
def print_real_text(self, text, text_tags=[], name=None, xhtml=None,
graphics=True):
'''this adds normal and special text. call this to add text'''
graphics=True):
"""
Add normal and special text. call this to add text
"""
if xhtml:
try:
if name and (text.startswith('/me ') or text.startswith('/me\n')):

View File

@ -38,7 +38,10 @@ import itertools
class DataFormWidget(gtk.Alignment, object):
# "public" interface
''' Data Form widget. Use like any other widget. '''
"""
Data Form widget. Use like any other widget
"""
def __init__(self, dataformnode=None):
''' Create a widget. '''
gtk.Alignment.__init__(self, xscale=1.0, yscale=1.0)
@ -65,7 +68,9 @@ class DataFormWidget(gtk.Alignment, object):
selection.set_mode(gtk.SELECTION_MULTIPLE)
def set_data_form(self, dataform):
''' Set the data form (xmpp.DataForm) displayed in widget. '''
"""
Set the data form (xmpp.DataForm) displayed in widget
"""
assert isinstance(dataform, dataforms.DataForm)
self.del_data_form()
@ -84,7 +89,9 @@ class DataFormWidget(gtk.Alignment, object):
gtkgui_helpers.label_set_autowrap(self.instructions_label)
def get_data_form(self):
''' Data form displayed in the widget or None if no form. '''
"""
Data form displayed in the widget or None if no form
"""
return self._data_form
def del_data_form(self):
@ -95,8 +102,10 @@ class DataFormWidget(gtk.Alignment, object):
'Data form presented in a widget')
def get_title(self):
''' Get the title of data form, as a unicode object. If no
title or no form, returns u''. Useful for setting window title. '''
"""
Get the title of data form, as a unicode object. If no title or no form,
returns u''. Useful for setting window title
"""
if self._data_form is not None:
if self._data_form.title is not None:
return self._data_form.title
@ -117,9 +126,11 @@ class DataFormWidget(gtk.Alignment, object):
pass
def clean_data_form(self):
'''Remove data about existing form. This metod is empty, because
it is rewritten by build_*_data_form, according to type of form
which is actually displayed.'''
"""
Remove data about existing form. This metod is empty, because it is
rewritten by build_*_data_form, according to type of form which is
actually displayed
"""
pass
def build_single_data_form(self):
@ -138,14 +149,18 @@ class DataFormWidget(gtk.Alignment, object):
self.clean_data_form = self.clean_single_data_form
def clean_single_data_form(self):
'''(Called as clean_data_form, read the docs of clean_data_form()).
Remove form from widget.'''
"""
Called as clean_data_form, read the docs of clean_data_form(). Remove
form from widget
"""
self.singleform.destroy()
self.clean_data_form = self.empty_method # we won't call it twice
del self.singleform
def build_multiple_data_form(self):
'''Invoked when new multiple form is to be created.'''
"""
Invoked when new multiple form is to be created
"""
assert isinstance(self._data_form, dataforms.MultipleDataForm)
self.clean_data_form()
@ -196,13 +211,17 @@ class DataFormWidget(gtk.Alignment, object):
self.refresh_multiple_buttons()
def clean_multiple_data_form(self):
'''(Called as clean_data_form, read the docs of clean_data_form()).
Remove form from widget.'''
"""
Called as clean_data_form, read the docs of clean_data_form(). Remove
form from widget
"""
self.clean_data_form = self.empty_method # we won't call it twice
del self.multiplemodel
def refresh_multiple_buttons(self):
''' Checks for treeview state and makes control buttons sensitive.'''
"""
Checks for treeview state and makes control buttons sensitive
"""
selection = self.records_treeview.get_selection()
model = self.records_treeview.get_model()
count = selection.count_selected_rows()
@ -273,9 +292,12 @@ class DataFormWidget(gtk.Alignment, object):
self.refresh_multiple_buttons()
class SingleForm(gtk.Table, object):
''' Widget that represent DATAFORM_SINGLE mode form. Because this is used
not only to display single forms, but to form input windows of multiple-type
forms, it is in another class.'''
"""
Widget that represent DATAFORM_SINGLE mode form. Because this is used not
only to display single forms, but to form input windows of multiple-type
forms, it is in another class
"""
def __init__(self, dataform):
assert isinstance(dataform, dataforms.SimpleDataForm)
@ -284,9 +306,11 @@ class SingleForm(gtk.Table, object):
self.set_row_spacings(6)
def decorate_with_tooltip(widget, field):
''' Adds a tooltip containing field's description to a widget.
Creates EventBox if widget doesn't have its own gdk window.
Returns decorated widget. '''
"""
Adds a tooltip containing field's description to a widget. Creates
EventBox if widget doesn't have its own gdk window. Returns decorated
widget
"""
if field.description != '':
if widget.flags() & gtk.NO_WINDOW:
evbox = gtk.EventBox()

View File

@ -61,9 +61,14 @@ from common import dataforms
from common.exceptions import GajimGeneralException
class EditGroupsDialog:
'''Class for the edit group dialog window'''
"""
Class for the edit group dialog window
"""
def __init__(self, list_):
'''list_ is a list of (contact, account) tuples'''
"""
list_ is a list of (contact, account) tuples
"""
self.xml = gtkgui_helpers.get_glade('edit_groups_dialog.glade')
self.dialog = self.xml.get_widget('edit_groups_dialog')
self.dialog.set_transient_for(gajim.interface.roster.window)
@ -96,7 +101,9 @@ class EditGroupsDialog:
self.dialog.destroy()
def remove_group(self, group):
'''remove group group from all contacts and all their brothers'''
"""
Remove group group from all contacts and all their brothers
"""
for (contact, account) in self.list_:
gajim.interface.roster.remove_contact_from_groups(contact.jid, account, [group])
@ -104,7 +111,9 @@ class EditGroupsDialog:
gajim.interface.roster.draw_group(_('General'), account)
def add_group(self, group):
'''add group group to all contacts and all their brothers'''
"""
Add group group to all contacts and all their brothers
"""
for (contact, account) in self.list_:
gajim.interface.roster.add_contact_to_groups(contact.jid, account, [group])
@ -199,7 +208,9 @@ class EditGroupsDialog:
column.set_attributes(renderer, active=1, inconsistent=2)
class PassphraseDialog:
'''Class for Passphrase dialog'''
"""
Class for Passphrase dialog
"""
def __init__(self, titletext, labeltext, checkbuttontext=None,
ok_handler=None, cancel_handler=None):
self.xml = gtkgui_helpers.get_glade('passphrase_dialog.glade')
@ -258,7 +269,10 @@ class PassphraseDialog:
self.cancel_handler()
class ChooseGPGKeyDialog:
'''Class for GPG key dialog'''
"""
Class for GPG key dialog
"""
def __init__(self, title_text, prompt_text, secret_keys, on_response,
selected=None):
'''secret_keys : {keyID: userName, ...}'''
@ -428,9 +442,9 @@ class ChangeActivityDialog:
self.subactivity = data[1]
def on_ok_button_clicked(self, widget):
'''
"""
Return activity and messsage (None if no activity selected)
'''
"""
if self.checkbutton.get_active():
self.on_response(self.activity, self.subactivity,
self.entry.get_text().decode('utf-8'))
@ -524,10 +538,10 @@ class ChangeMoodDialog:
self.window.destroy()
class TimeoutDialog:
'''
"""
Class designed to be derivated to create timeout'd dialogs (dialogs that
closes automatically after a timeout)
'''
"""
def __init__(self, timeout, on_timeout):
self.countdown_left = timeout
self.countdown_enabled = True
@ -540,7 +554,9 @@ class TimeoutDialog:
gobject.timeout_add_seconds(1, self.countdown)
def on_timeout():
'''To be implemented in derivated classes'''
"""
To be implemented in derivated classes
"""
pass
def countdown(self):
@ -638,7 +654,9 @@ class ChangeStatusMessageDialog(TimeoutDialog):
self.dialog.show_all()
def draw_activity(self):
'''Set activity button'''
"""
Set activity button
"""
img = self.xml.get_widget('activity_image')
label = self.xml.get_widget('activity_button_label')
if 'activity' in self.pep_dict and self.pep_dict['activity'] in \
@ -661,7 +679,9 @@ class ChangeStatusMessageDialog(TimeoutDialog):
label.set_text('')
def draw_mood(self):
'''Set mood button'''
"""
Set mood button
"""
img = self.xml.get_widget('mood_image')
label = self.xml.get_widget('mood_button_label')
if self.pep_dict['mood'] in pep.MOODS:
@ -803,13 +823,17 @@ class ChangeStatusMessageDialog(TimeoutDialog):
self.pep_dict['mood_text'])
class AddNewContactWindow:
'''Class for AddNewContactWindow'''
"""
Class for AddNewContactWindow
"""
uid_labels = {'jabber': _('Jabber ID:'),
'aim': _('AIM Address:'),
'gadu-gadu': _('GG Number:'),
'icq': _('ICQ Number:'),
'msn': _('MSN Address:'),
'yahoo': _('Yahoo! Address:')}
def __init__(self, account=None, jid=None, user_nick=None, group=None):
self.account = account
if account is None:
@ -983,11 +1007,15 @@ _('Please fill in the data of the contact you want to add in account %s') %accou
self.window.destroy()
def on_cancel_button_clicked(self, widget):
'''When Cancel button is clicked'''
"""
When Cancel button is clicked
"""
self.window.destroy()
def on_add_button_clicked(self, widget):
'''When Subscribe button is clicked'''
"""
When Subscribe button is clicked
"""
jid = self.uid_entry.get_text().decode('utf-8').strip()
if not jid:
return
@ -1111,7 +1139,10 @@ _('Please fill in the data of the contact you want to add in account %s') %accou
self.add_button.set_sensitive(False)
class AboutDialog:
'''Class for about dialog'''
"""
Class for about dialog
"""
def __init__(self):
dlg = gtk.AboutDialog()
dlg.set_transient_for(gajim.interface.roster.window)
@ -1184,7 +1215,9 @@ class AboutDialog:
return str_[0:-1] # remove latest .
def get_path(self, filename):
'''where can we find this Credits file ?'''
"""
Where can we find this Credits file?
"""
if os.path.isfile(os.path.join(gajim.defs.docdir, filename)):
return os.path.join(gajim.defs.docdir, filename)
elif os.path.isfile('../' + filename):
@ -1273,14 +1306,18 @@ class HigDialog(gtk.MessageDialog):
self.destroy()
def popup(self):
'''show dialog'''
"""
Show dialog
"""
vb = self.get_children()[0].get_children()[0] # Give focus to top vbox
vb.set_flags(gtk.CAN_FOCUS)
vb.grab_focus()
self.show_all()
class FileChooserDialog(gtk.FileChooserDialog):
'''Non-blocking FileChooser Dialog around gtk.FileChooserDialog'''
"""
Non-blocking FileChooser Dialog around gtk.FileChooserDialog
"""
def __init__(self, title_text, action, buttons, default_response,
select_multiple = False, current_folder = None, on_response_ok = None,
on_response_cancel = None):
@ -1332,7 +1369,10 @@ class AspellDictError:
gajim.config.set('use_speller', False)
class ConfirmationDialog(HigDialog):
'''HIG compliant confirmation dialog.'''
"""
HIG compliant confirmation dialog
"""
def __init__(self, pritext, sectext='', on_response_ok=None,
on_response_cancel=None):
self.user_response_ok = on_response_ok
@ -1359,7 +1399,10 @@ class ConfirmationDialog(HigDialog):
self.destroy()
class NonModalConfirmationDialog(HigDialog):
'''HIG compliant non modal confirmation dialog.'''
"""
HIG compliant non modal confirmation dialog
"""
def __init__(self, pritext, sectext='', on_response_ok=None,
on_response_cancel=None):
self.user_response_ok = on_response_ok
@ -1386,8 +1429,11 @@ class NonModalConfirmationDialog(HigDialog):
self.destroy()
class WarningDialog(HigDialog):
"""
HIG compliant warning dialog
"""
def __init__(self, pritext, sectext=''):
'''HIG compliant warning dialog.'''
HigDialog.__init__( self, None,
gtk.MESSAGE_WARNING, gtk.BUTTONS_OK, pritext, sectext)
self.set_modal(False)
@ -1396,8 +1442,11 @@ class WarningDialog(HigDialog):
self.popup()
class InformationDialog(HigDialog):
"""
HIG compliant info dialog
"""
def __init__(self, pritext, sectext=''):
'''HIG compliant info dialog.'''
HigDialog.__init__(self, None,
gtk.MESSAGE_INFO, gtk.BUTTONS_OK, pritext, sectext)
self.set_modal(False)
@ -1405,16 +1454,22 @@ class InformationDialog(HigDialog):
self.popup()
class ErrorDialog(HigDialog):
"""
HIG compliant error dialog
"""
def __init__(self, pritext, sectext=''):
'''HIG compliant error dialog.'''
HigDialog.__init__( self, None,
gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, pritext, sectext)
self.popup()
class YesNoDialog(HigDialog):
"""
HIG compliant YesNo dialog
"""
def __init__(self, pritext, sectext='', checktext='', on_response_yes=None,
on_response_no=None):
'''HIG compliant YesNo dialog.'''
on_response_no=None):
self.user_response_yes = on_response_yes
self.user_response_no = on_response_no
HigDialog.__init__( self, None,
@ -1448,15 +1503,20 @@ class YesNoDialog(HigDialog):
self.destroy()
def is_checked(self):
''' Get active state of the checkbutton '''
"""
Get active state of the checkbutton
"""
if not self.checkbutton:
return False
return self.checkbutton.get_active()
class ConfirmationDialogCheck(ConfirmationDialog):
'''HIG compliant confirmation dialog with checkbutton.'''
def __init__(self, pritext, sectext='', checktext='',
on_response_ok=None, on_response_cancel=None, is_modal=True):
"""
HIG compliant confirmation dialog with checkbutton
"""
def __init__(self, pritext, sectext='', checktext='', on_response_ok=None,
on_response_cancel=None, is_modal=True):
self.user_response_ok = on_response_ok
self.user_response_cancel = on_response_cancel
@ -1495,11 +1555,16 @@ class ConfirmationDialogCheck(ConfirmationDialog):
self.destroy()
def is_checked(self):
''' Get active state of the checkbutton '''
"""
Get active state of the checkbutton
"""
return self.checkbutton.get_active()
class ConfirmationDialogDubbleCheck(ConfirmationDialog):
'''HIG compliant confirmation dialog with 2 checkbuttons.'''
"""
HIG compliant confirmation dialog with 2 checkbuttons
"""
def __init__(self, pritext, sectext='', checktext1='', checktext2='',
on_response_ok=None, on_response_cancel=None, is_modal=True):
self.user_response_ok = on_response_ok
@ -1560,7 +1625,10 @@ class ConfirmationDialogDubbleCheck(ConfirmationDialog):
return [is_checked_1, is_checked_2]
class FTOverwriteConfirmationDialog(ConfirmationDialog):
'''HIG compliant confirmation dialog to overwrite or resume a file transfert'''
"""
HIG compliant confirmation dialog to overwrite or resume a file transfert
"""
def __init__(self, pritext, sectext='', propose_resume=True,
on_response=None):
HigDialog.__init__(self, None, gtk.MESSAGE_QUESTION, gtk.BUTTONS_CANCEL,
@ -1597,7 +1665,10 @@ class FTOverwriteConfirmationDialog(ConfirmationDialog):
self.destroy()
class CommonInputDialog:
'''Common Class for Input dialogs'''
"""
Common Class for Input dialogs
"""
def __init__(self, title, label_str, is_modal, ok_handler, cancel_handler):
self.dialog = self.xml.get_widget('input_dialog')
label = self.xml.get_widget('label')
@ -1633,9 +1704,12 @@ class CommonInputDialog:
self.dialog.destroy()
class InputDialog(CommonInputDialog):
'''Class for Input dialog'''
"""
Class for Input dialog
"""
def __init__(self, title, label_str, input_str=None, is_modal=True,
ok_handler=None, cancel_handler=None):
ok_handler=None, cancel_handler=None):
self.xml = gtkgui_helpers.get_glade('input_dialog.glade')
CommonInputDialog.__init__(self, title, label_str, is_modal, ok_handler,
cancel_handler)
@ -1651,9 +1725,12 @@ class InputDialog(CommonInputDialog):
return self.input_entry.get_text().decode('utf-8')
class InputDialogCheck(InputDialog):
'''Class for Input dialog'''
"""
Class for Input dialog
"""
def __init__(self, title, label_str, checktext='', input_str=None,
is_modal=True, ok_handler=None, cancel_handler=None):
is_modal=True, ok_handler=None, cancel_handler=None):
self.xml = gtkgui_helpers.get_glade('input_dialog.glade')
InputDialog.__init__(self, title, label_str, input_str=input_str,
is_modal=is_modal, ok_handler=ok_handler,
@ -1683,7 +1760,9 @@ class InputDialogCheck(InputDialog):
return self.input_entry.get_text().decode('utf-8')
def is_checked(self):
''' Get active state of the checkbutton '''
"""
Get active state of the checkbutton
"""
try:
return self.checkbutton.get_active()
except Exception:
@ -1691,7 +1770,10 @@ class InputDialogCheck(InputDialog):
return False
class ChangeNickDialog(InputDialogCheck):
'''Class for changing room nickname in case of conflict'''
"""
Class for changing room nickname in case of conflict
"""
def __init__(self, account, room_jid, title, prompt, check_text=None):
InputDialogCheck.__init__(self, title, '', checktext=check_text,
input_str='', is_modal=True, ok_handler=None, cancel_handler=None)
@ -1773,7 +1855,10 @@ class ChangeNickDialog(InputDialogCheck):
self.room_queue.append((account, room_jid, prompt))
class InputTextDialog(CommonInputDialog):
'''Class for multilines Input dialog (more place than InputDialog)'''
"""
Class for multilines Input dialog (more place than InputDialog)
"""
def __init__(self, title, label_str, input_str=None, is_modal=True,
ok_handler=None, cancel_handler=None):
self.xml = gtkgui_helpers.get_glade('input_text_dialog.glade')
@ -1790,7 +1875,10 @@ class InputTextDialog(CommonInputDialog):
return self.input_buffer.get_text(start_iter, end_iter).decode('utf-8')
class DubbleInputDialog:
'''Class for Dubble Input dialog'''
"""
Class for Dubble Input dialog
"""
def __init__(self, title, label_str1, label_str2, input_str1=None,
input_str2=None, is_modal=True, ok_handler=None, cancel_handler=None):
self.xml = gtkgui_helpers.get_glade('dubbleinput_dialog.glade')
@ -1876,7 +1964,9 @@ class SubscriptionRequestWindow:
self.window.destroy()
def on_authorize_button_clicked(self, widget):
'''accept the request'''
"""
Accept the request
"""
gajim.connections[self.account].send_authorization(self.jid)
self.window.destroy()
contact = gajim.contacts.get_contact(self.account, self.jid)
@ -1884,7 +1974,9 @@ class SubscriptionRequestWindow:
AddNewContactWindow(self.account, self.jid, self.user_nick)
def on_contact_info_activate(self, widget):
'''ask vcard'''
"""
Ask vcard
"""
if self.jid in gajim.interface.instances[self.account]['infos']:
gajim.interface.instances[self.account]['infos'][self.jid].window.present()
else:
@ -1896,11 +1988,15 @@ class SubscriptionRequestWindow:
get_widget('information_notebook').remove_page(0)
def on_start_chat_activate(self, widget):
'''open chat'''
"""
Open chat
"""
gajim.interface.new_chat_from_jid(self.account, self.jid)
def on_deny_button_clicked(self, widget):
'''refuse the request'''
"""
Refuse the request
"""
gajim.connections[self.account].refuse_authorization(self.jid)
contact = gajim.contacts.get_contact(self.account, self.jid)
if contact and _('Not in Roster') in contact.get_shown_groups():
@ -1908,7 +2004,9 @@ class SubscriptionRequestWindow:
self.window.destroy()
def on_actions_button_clicked(self, widget):
'''popup action menu'''
"""
Popup action menu
"""
menu = self.prepare_popup_menu()
menu.show_all()
gtkgui_helpers.popup_emoticons_under_button(menu, widget, self.window.window)
@ -1916,11 +2014,12 @@ class SubscriptionRequestWindow:
class JoinGroupchatWindow:
def __init__(self, account=None, room_jid='', nick='', password='',
automatic=False):
'''automatic is a dict like {'invities': []}
If automatic is not empty, this means room must be automaticaly configured
and when done, invities must be automatically invited'''
automatic=False):
"""
Automatic is a dict like {'invities': []}. If automatic is not empty,
this means room must be automaticaly configured and when done, invities
must be automatically invited
"""
if account:
if room_jid != '' and room_jid in gajim.gc_connected[account] and\
gajim.gc_connected[account][room_jid]:
@ -2007,7 +2106,9 @@ class JoinGroupchatWindow:
self.window.show_all()
def on_join_groupchat_window_destroy(self, widget):
'''close window'''
"""
Close window
"""
if self.account and 'join_gc' in gajim.interface.instances[self.account]:
# remove us from open windows
del gajim.interface.instances[self.account]['join_gc']
@ -2039,7 +2140,9 @@ class JoinGroupchatWindow:
self._room_jid_entry.set_text(room_jid)
def on_cancel_button_clicked(self, widget):
'''When Cancel button is clicked'''
"""
When Cancel button is clicked
"""
self.window.destroy()
def on_bookmark_checkbutton_toggled(self, widget):
@ -2050,7 +2153,9 @@ class JoinGroupchatWindow:
auto_join_checkbutton.set_sensitive(False)
def on_join_button_clicked(self, widget):
'''When Join button is clicked'''
"""
When Join button is clicked
"""
if not self.account:
ErrorDialog(_('Invalid Account'),
_('You have to choose an account from which you want to join the '
@ -2138,7 +2243,9 @@ class SynchroniseSelectAccountDialog:
self.window.destroy()
def init_accounts(self):
'''initialize listStore with existing accounts'''
"""
Initialize listStore with existing accounts
"""
model = self.accounts_treeview.get_model()
model.clear()
for remote_account in gajim.connections:
@ -2204,7 +2311,9 @@ class SynchroniseSelectContactsDialog:
self.window.destroy()
def init_contacts(self):
'''initialize listStore with existing accounts'''
"""
Initialize listStore with existing accounts
"""
model = self.contacts_treeview.get_model()
model.clear()
@ -2267,7 +2376,9 @@ class NewChatDialog(InputDialog):
self.dialog.show_all()
def new_chat_response(self, jid):
''' called when ok button is clicked '''
"""
Called when ok button is clicked
"""
if gajim.connections[self.account].connected <= 1:
#if offline or connecting
ErrorDialog(_('Connection not available'),
@ -2433,10 +2544,10 @@ class PopupNotificationWindow:
self.adjust_height_and_move_popup_notification_windows()
class SingleMessageWindow:
'''SingleMessageWindow can send or show a received
singled message depending on action argument which can be 'send'
or 'receive'.
'''
"""
SingleMessageWindow can send or show a received singled message depending on
action argument which can be 'send' or 'receive'
"""
# Keep a reference on windows so garbage collector don't restroy them
instances = []
def __init__(self, account, to='', action='', from_whom='', subject='',
@ -2847,9 +2958,12 @@ class XMLConsoleWindow:
TRANSLATED_ACTION = {'add': _('add'), 'modify': _('modify'),
'remove': _('remove')}
class RosterItemExchangeWindow:
''' Windows used when someone send you a exchange contact suggestion '''
"""
Windows used when someone send you a exchange contact suggestion
"""
def __init__(self, account, action, exchange_list, jid_from,
message_body=None):
message_body=None):
self.account = account
self.action = action
self.exchange_list = exchange_list
@ -3067,8 +3181,10 @@ class RosterItemExchangeWindow:
class PrivacyListWindow:
'''Window that is used for creating NEW or EDITING already there privacy
lists'''
"""
Window that is used for creating NEW or EDITING already there privacy lists
"""
def __init__(self, account, privacy_list_name, action):
'''action is 'EDIT' or 'NEW' depending on if we create a new priv list
or edit an already existing one'''
@ -3406,9 +3522,10 @@ class PrivacyListWindow:
self.window.destroy()
class PrivacyListsWindow:
'''Window that is the main window for Privacy Lists;
we can list there the privacy lists and ask to create a new one
or edit an already there one'''
"""
Window that is the main window for Privacy Lists; we can list there the
privacy lists and ask to create a new one or edit an already there one
"""
def __init__(self, account):
self.account = account
self.privacy_lists_save = []
@ -3565,9 +3682,10 @@ class InvitationReceivedDialog:
class ProgressDialog:
def __init__(self, title_text, during_text, messages_queue):
'''during text is what to show during the procedure,
messages_queue has the message to show
in the textview'''
"""
During text is what to show during the procedure, messages_queue has the
message to show in the textview
"""
self.xml = gtkgui_helpers.get_glade('progress_dialog.glade')
self.dialog = self.xml.get_widget('progress_dialog')
self.label = self.xml.get_widget('label')
@ -3594,10 +3712,14 @@ class ProgressDialog:
class SoundChooserDialog(FileChooserDialog):
def __init__(self, path_to_snd_file='', on_response_ok=None,
on_response_cancel=None):
'''optionally accepts path_to_snd_file so it has that as selected'''
on_response_cancel=None):
"""
Optionally accepts path_to_snd_file so it has that as selected
"""
def on_ok(widget, callback):
'''check if file exists and call callback'''
"""
Check if file exists and call callback
"""
path_to_snd_file = self.get_filename()
path_to_snd_file = gtkgui_helpers.decode_filechooser_file_paths(
(path_to_snd_file,))[0]
@ -3633,8 +3755,10 @@ class SoundChooserDialog(FileChooserDialog):
class ImageChooserDialog(FileChooserDialog):
def __init__(self, path_to_file='', on_response_ok=None,
on_response_cancel=None):
'''optionally accepts path_to_snd_file so it has that as selected'''
on_response_cancel=None):
"""
Optionally accepts path_to_snd_file so it has that as selected
"""
def on_ok(widget, callback):
'''check if file exists and call callback'''
path_to_file = self.get_filename()
@ -3725,8 +3849,10 @@ class AvatarChooserDialog(ImageChooserDialog):
class AddSpecialNotificationDialog:
def __init__(self, jid):
'''jid is the jid for which we want to add special notification
(sound and notification popups)'''
"""
jid is the jid for which we want to add special notification (sound and
notification popups)
"""
self.xml = gtkgui_helpers.get_glade('add_special_notification_window.glade')
self.window = self.xml.get_widget('add_special_notification_window')
self.condition_combobox = self.xml.get_widget('condition_combobox')
@ -3846,7 +3972,9 @@ class AdvancedNotificationsWindow:
self.window.show_all()
def initiate_rule_state(self):
'''Set values for all widgets'''
"""
Set values for all widgets
"""
if self.active_num < 0:
return
# event
@ -4237,8 +4365,10 @@ class TransformChatToMUC:
# Keep a reference on windows so garbage collector don't restroy them
instances = []
def __init__(self, account, jids, preselected=None):
'''This window is used to trasform a one-to-one chat to a MUC.
We do 2 things: first select the server and then make a guests list.'''
"""
This window is used to trasform a one-to-one chat to a MUC. We do 2
things: first select the server and then make a guests list
"""
self.instances.append(self)
self.account = account
@ -4389,7 +4519,9 @@ class DataFormWindow(Dialog):
self.destroy()
class ESessionInfoWindow:
'''Class for displaying information about a XEP-0116 encrypted session'''
"""
Class for displaying information about a XEP-0116 encrypted session
"""
def __init__(self, session):
self.session = session
@ -4468,7 +4600,9 @@ class ESessionInfoWindow:
YesNoDialog(pritext, sectext, on_response_yes=on_yes, on_response_no=on_no)
class GPGInfoWindow:
'''Class for displaying information about a XEP-0116 encrypted session'''
"""
Class for displaying information about a XEP-0116 encrypted session
"""
def __init__(self, control):
xml = gtkgui_helpers.get_glade('esession_info_window.glade')
security_image = xml.get_widget('security_image')