Big portion of doc-string refactoring

This commit is contained in:
Alexander Cherniuk 2009-11-25 22:59:43 +02:00
parent 7316d00766
commit a23961fbf6
16 changed files with 856 additions and 496 deletions

View File

@ -43,23 +43,25 @@ constants = Constants()
# Completion dict
(
C_INFO_JID,
C_INFO_ACCOUNT,
C_INFO_NAME,
C_INFO_COMPLETION
C_INFO_JID,
C_INFO_ACCOUNT,
C_INFO_NAME,
C_INFO_COMPLETION
) = range(4)
# contact_name, date, message, time
(
C_LOG_JID,
C_CONTACT_NAME,
C_UNIXTIME,
C_MESSAGE,
C_TIME
C_LOG_JID,
C_CONTACT_NAME,
C_UNIXTIME,
C_MESSAGE,
C_TIME
) = range(5)
class HistoryWindow:
'''Class for browsing logs of conversations with contacts'''
"""
Class for browsing logs of conversations with contacts
"""
def __init__(self, jid = None, account = None):
xml = gtkgui_helpers.get_glade('history_window.glade')
@ -132,15 +134,16 @@ class HistoryWindow:
self.window.show_all()
def _fill_completion_dict(self):
'''Fill completion_dict for key auto completion. Then load history for
current jid (by calling another function).
"""
Fill completion_dict for key auto completion. Then load history for
current jid (by calling another function)
Key will be either jid or full_completion_name
(contact name or long description like "pm-contact from groupchat....")
Key will be either jid or full_completion_name (contact name or long
description like "pm-contact from groupchat....").
{key : (jid, account, nick_name, full_completion_name}
this is a generator and does pseudo-threading via idle_add()
'''
This is a generator and does pseudo-threading via idle_add().
"""
liststore = gtkgui_helpers.get_completion_liststore(self.jid_entry)
# Add all jids in logs.db:
@ -208,8 +211,10 @@ class HistoryWindow:
yield False
def _get_account_for_jid(self, jid):
'''Return the corresponding account of the jid.
May be None if an account could not be found'''
"""
Return the corresponding account of the jid. May be None if an account
could not be found
"""
accounts = gajim.contacts.get_accounts()
account = None
for acc in accounts:
@ -247,7 +252,9 @@ class HistoryWindow:
widget.select_region(0, -1) # select text
def _load_history(self, jid_or_name, account = None):
'''Load history for the given jid/name and show it'''
"""
Load history for the given jid/name and show it
"""
if jid_or_name and jid_or_name in self.completion_dict:
# a full qualified jid or a contact name was entered
info_jid, info_account, info_name, info_completion = self.completion_dict[jid_or_name]
@ -324,9 +331,9 @@ class HistoryWindow:
self._add_lines_for_date(year, month, day)
def on_calendar_month_changed(self, widget):
'''asks for days in this month if they have logs it bolds them (marks
them)
'''
"""
Ask for days in this month, if they have logs it bolds them (marks them)
"""
if not self.jid:
return
year, month, day = widget.get_date() # integers
@ -362,7 +369,9 @@ class HistoryWindow:
return show
def _add_lines_for_date(self, year, month, day):
'''adds all the lines for given date in textbuffer'''
"""
Add all the lines for given date in textbuffer
"""
self.history_buffer.set_text('') # clear the buffer first
self.last_time_printout = 0
@ -376,7 +385,9 @@ class HistoryWindow:
line[5])
def _add_new_line(self, contact_name, tim, kind, show, message, subject):
'''add a new line in textbuffer'''
"""
Add a new line in textbuffer
"""
if not message and kind not in (constants.KIND_STATUS,
constants.KIND_GCSTATUS):
return
@ -538,8 +549,10 @@ class HistoryWindow:
self.jids_to_search = gajim.logger.get_jids_in_db()
def on_results_treeview_row_activated(self, widget, path, column):
'''a row was double clicked, get date from row, and select it in calendar
which results to showing conversation logs for that date'''
"""
A row was double clicked, get date from row, and select it in calendar
which results to showing conversation logs for that date
"""
# get currently selected date
cur_year, cur_month = self.calendar.get_date()[0:2]
cur_month = gtkgui_helpers.make_gtk_month_python_month(cur_month)
@ -568,7 +581,9 @@ class HistoryWindow:
# and highlight all that
def _scroll_to_result(self, unix_time):
'''scrolls to the result using unix_time and highlight line'''
"""
Scroll to the result using unix_time and highlight line
"""
start_iter = self.history_buffer.get_start_iter()
local_time = time.localtime(float(unix_time))
tim = time.strftime('%X', local_time)
@ -602,7 +617,9 @@ class HistoryWindow:
' '.join(no_log_for))
def open_history(self, jid, account):
'''Load chat history of the specified jid'''
"""
Load chat history of the specified jid
"""
self.jid_entry.set_text(jid)
if account and account not in self.accounts_seen_online:
# Update dict to not only show bare jid

View File

@ -25,7 +25,7 @@
## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
##
'''
"""
A gtk.TextView-based renderer for XHTML-IM, as described in:
http://www.jabber.org/jeps/jep-0071.html
@ -33,8 +33,7 @@ Starting with the version posted by Gustavo Carneiro,
I (Santiago Gala) am trying to make it more compatible
with the markup that docutils generate, and also more
modular.
'''
"""
import gobject
import pango
@ -187,7 +186,6 @@ for name in BLOCK_HEAD:
)
def _parse_css_color(color):
'''_parse_css_color(css_color) -> gtk.gdk.Color'''
if color.startswith('rgb(') and color.endswith(')'):
r, g, b = [int(c)*257 for c in color[4:-1].split(',')]
return gtk.gdk.Color(r, g, b)
@ -200,10 +198,11 @@ def style_iter(style):
class HtmlHandler(xml.sax.handler.ContentHandler):
"""A handler to display html to a gtk textview.
"""
A handler to display html to a gtk textview
It keeps a stack of "style spans" (start/end element pairs)
and a stack of list counters, for nested lists.
It keeps a stack of "style spans" (start/end element pairs) and a stack of
list counters, for nested lists.
"""
def __init__(self, conv_textview, startiter):
xml.sax.handler.ContentHandler.__init__(self)
@ -240,8 +239,10 @@ class HtmlHandler(xml.sax.handler.ContentHandler):
callback(allocation.width*frac, *args)
def _parse_length(self, value, font_relative, block_relative, minl, maxl, callback, *args):
'''Parse/calc length, converting to pixels, calls callback(length, *args)
when the length is first computed or changes'''
"""
Parse/calc length, converting to pixels, calls callback(length, *args)
when the length is first computed or changes
"""
if value.endswith('%'):
val = float(value[:-1])
sign = cmp(val,0)
@ -556,11 +557,11 @@ class HtmlHandler(xml.sax.handler.ContentHandler):
if h:
self._parse_length(h, False, False, 1, 1000, height_cb)
def set_size(pixbuf, w, h, dims):
'''FIXME: floats should be relative to the whole
textview, and resize with it. This needs new
pifbufs for every resize, gtk.gdk.Pixbuf.scale_simple
or similar.
'''
"""
FIXME: Floats should be relative to the whole textview, and
resize with it. This needs new pifbufs for every resize,
gtk.gdk.Pixbuf.scale_simple or similar.
"""
if isinstance(dims[0], float):
dims[0] = int(dims[0]*w)
elif not dims[0]:
@ -945,7 +946,9 @@ if __name__ == '__main__':
tooltip = tooltips.BaseTooltip()
def on_textview_motion_notify_event(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
"""
global change_cursor
pointer_x, pointer_y = htmlview.tv.window.get_pointer()[0:2]
x, y = htmlview.tv.window_to_buffer_coords(gtk.TEXT_WINDOW_TEXT, pointer_x,

View File

@ -29,8 +29,8 @@
## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
Provides IPython console widget.
"""
Provides IPython console widget
@author: Eitan Isaacson
@organization: IBM Corporation
@ -40,7 +40,7 @@ Provides IPython console widget.
All rights reserved. This program and the accompanying materials are made
available under the terms of the BSD which accompanies this distribution, and
is available at U{http://www.opensource.org/licenses/bsd-license.php}
'''
"""
import gtk, gobject
import re
@ -55,10 +55,10 @@ except ImportError:
IPython = None
class IterableIPShell:
'''
"""
Create an IPython instance. Does not start a blocking event loop,
instead allow single iterations. This allows embedding in GTK+
without blockage.
without blockage
@ivar IP: IPython instance.
@type IP: IPython.iplib.InteractiveShell
@ -70,12 +70,10 @@ class IterableIPShell:
@type history_level: integer
@ivar complete_sep: Seperation delimeters for completion function.
@type complete_sep: _sre.SRE_Pattern
'''
def __init__(self,argv=[],user_ns=None,user_global_ns=None,
cin=None, cout=None,cerr=None, input_func=None):
'''
"""
def __init__(self,argv=[],user_ns=None,user_global_ns=None, cin=None,
cout=None,cerr=None, input_func=None):
"""
@param argv: Command line options for IPython
@type argv: list
@param user_ns: User namespace.
@ -90,7 +88,7 @@ class IterableIPShell:
@type cerr: IO stream
@param input_func: Replacement for builtin raw_input()
@type input_func: function
'''
"""
if input_func:
IPython.iplib.raw_input_original = input_func
if cin:
@ -121,9 +119,9 @@ class IterableIPShell:
self.complete_sep = re.compile('[\s\{\}\[\]\(\)]')
def execute(self):
'''
Executes the current line provided by the shell object.
'''
"""
Execute the current line provided by the shell object
"""
self.history_level = 0
orig_stdout = sys.stdout
sys.stdout = IPython.Shell.Term.cout
@ -156,32 +154,32 @@ class IterableIPShell:
sys.stdout = orig_stdout
def historyBack(self):
'''
Provides one history command back.
"""
Provide one history command back
@return: The command string.
@rtype: string
'''
"""
self.history_level -= 1
return self._getHistory()
def historyForward(self):
'''
Provides one history command forward.
"""
Provide one history command forward
@return: The command string.
@rtype: string
'''
"""
self.history_level += 1
return self._getHistory()
def _getHistory(self):
'''
Get's the command string of the current history level.
"""
Get the command string of the current history level
@return: Historic command string.
@rtype: string
'''
"""
try:
rv = self.IP.user_ns['In'][self.history_level].strip('\n')
except IndexError:
@ -190,17 +188,17 @@ class IterableIPShell:
return rv
def updateNamespace(self, ns_dict):
'''
Add the current dictionary to the shell namespace.
"""
Add the current dictionary to the shell namespace
@param ns_dict: A dictionary of symbol-values.
@type ns_dict: dictionary
'''
"""
self.IP.user_ns.update(ns_dict)
def complete(self, line):
'''
Returns an auto completed line and/or posibilities for completion.
"""
Returns an auto completed line and/or posibilities for completion
@param line: Given line so far.
@type line: string
@ -208,7 +206,7 @@ class IterableIPShell:
@return: Line completed as for as possible,
and possible further completions.
@rtype: tuple
'''
"""
split_line = self.complete_sep.split(line)
possibilities = self.IP.complete(split_line[-1])
@ -222,7 +220,9 @@ class IterableIPShell:
return True
def common_prefix(seq):
"""Returns the common prefix of a sequence of strings"""
"""
Return the common prefix of a sequence of strings
"""
return "".join(c for i, c in enumerate(seq[0])
if all(s.startswith(c, i) for s in seq))
if possibilities:
@ -233,8 +233,8 @@ class IterableIPShell:
def shell(self, cmd,verbose=0,debug=0,header=''):
'''
Replacement method to allow shell commands without them blocking.
"""
Replacement method to allow shell commands without them blocking
@param cmd: Shell command to execute.
@type cmd: string
@ -244,7 +244,7 @@ class IterableIPShell:
@type debug: integer
@param header: Header to be printed before output
@type header: string
'''
"""
if verbose or debug: print header+cmd
# flush stdout so we don't mangle python's buffering
if not debug:
@ -254,8 +254,8 @@ class IterableIPShell:
input_.close()
class ConsoleView(gtk.TextView):
'''
Specialized text view for console-like workflow.
"""
Specialized text view for console-like workflow
@cvar ANSI_COLORS: Mapping of terminal colors to X11 names.
@type ANSI_COLORS: dictionary
@ -268,7 +268,8 @@ class ConsoleView(gtk.TextView):
@type mark: gtk.TextMark
@ivar line_start: Start of command line mark.
@type line_start: gtk.TextMark
'''
"""
ANSI_COLORS = {'0;30': 'Black', '0;31': 'Red',
'0;32': 'Green', '0;33': 'Brown',
'0;34': 'Blue', '0;35': 'Purple',
@ -279,9 +280,9 @@ class ConsoleView(gtk.TextView):
'1;36': 'LightCyan', '1;37': 'White'}
def __init__(self):
'''
Initialize console view.
'''
"""
Initialize console view
"""
gtk.TextView.__init__(self)
self.modify_font(pango.FontDescription('Mono'))
self.set_cursor_visible(True)
@ -305,14 +306,14 @@ class ConsoleView(gtk.TextView):
gobject.idle_add(self._write, text, editable)
def _write(self, text, editable=False):
'''
Write given text to buffer.
"""
Write given text to buffer
@param text: Text to append.
@type text: string
@param editable: If true, added text is editable.
@type editable: boolean
'''
"""
segments = self.color_pat.split(text)
segment = segments.pop(0)
start_mark = self.text_buffer.create_mark(None,
@ -339,12 +340,12 @@ class ConsoleView(gtk.TextView):
gobject.idle_add(self._showPrompt, prompt)
def _showPrompt(self, prompt):
'''
Prints prompt at start of line.
"""
Print prompt at start of line
@param prompt: Prompt to print.
@type prompt: string
'''
"""
self._write(prompt)
self.text_buffer.move_mark(self.line_start,
self.text_buffer.get_end_iter())
@ -353,24 +354,24 @@ class ConsoleView(gtk.TextView):
gobject.idle_add(self._changeLine, text)
def _changeLine(self, text):
'''
Replace currently entered command line with given text.
"""
Replace currently entered command line with given text
@param text: Text to use as replacement.
@type text: string
'''
"""
iter_ = self.text_buffer.get_iter_at_mark(self.line_start)
iter_.forward_to_line_end()
self.text_buffer.delete(self.text_buffer.get_iter_at_mark(self.line_start), iter_)
self._write(text, True)
def getCurrentLine(self):
'''
Get text in current command line.
"""
Get text in current command line
@return: Text of current command line.
@rtype: string
'''
"""
rv = self.text_buffer.get_slice(
self.text_buffer.get_iter_at_mark(self.line_start),
self.text_buffer.get_end_iter(), False)
@ -380,12 +381,12 @@ class ConsoleView(gtk.TextView):
gobject.idle_add(self._showReturned, text)
def _showReturned(self, text):
'''
Show returned text from last command and print new prompt.
"""
Show returned text from last command and print new prompt
@param text: Text to show.
@type text: string
'''
"""
iter_ = self.text_buffer.get_iter_at_mark(self.line_start)
iter_.forward_to_line_end()
self.text_buffer.apply_tag_by_name(
@ -400,10 +401,10 @@ class ConsoleView(gtk.TextView):
self.text_buffer.place_cursor(self.text_buffer.get_end_iter())
def onKeyPress(self, widget, event):
'''
"""
Key press callback used for correcting behavior for console-like
interfaces. For example 'home' should go to prompt, not to begining of
line.
line
@param widget: Widget that key press accored in.
@type widget: gtk.Widget
@ -412,7 +413,7 @@ class ConsoleView(gtk.TextView):
@return: Return True if event should not trickle.
@rtype: boolean
'''
"""
insert_mark = self.text_buffer.get_insert()
insert_iter = self.text_buffer.get_iter_at_mark(insert_mark)
selection_mark = self.text_buffer.get_selection_bound()
@ -445,9 +446,9 @@ class ConsoleView(gtk.TextView):
return self.onKeyPressExtend(event)
def onKeyPressExtend(self, event):
'''
For some reason we can't extend onKeyPress directly (bug #500900).
'''
"""
For some reason we can't extend onKeyPress directly (bug #500900)
"""
pass
class IPythonView(ConsoleView, IterableIPShell):
@ -456,9 +457,9 @@ class IPythonView(ConsoleView, IterableIPShell):
a GTK+ IPython console.
'''
def __init__(self):
'''
Initialize. Redirect I/O to console.
'''
"""
Initialize. Redirect I/O to console
"""
ConsoleView.__init__(self)
self.cout = StringIO()
IterableIPShell.__init__(self, cout=self.cout,cerr=self.cout,
@ -470,24 +471,24 @@ class IPythonView(ConsoleView, IterableIPShell):
self.interrupt = False
def raw_input(self, prompt=''):
'''
Custom raw_input() replacement. Get's current line from console buffer.
"""
Custom raw_input() replacement. Get's current line from console buffer
@param prompt: Prompt to print. Here for compatability as replacement.
@type prompt: string
@return: The current command line text.
@rtype: string
'''
"""
if self.interrupt:
self.interrupt = False
raise KeyboardInterrupt
return self.getCurrentLine()
def onKeyPressExtend(self, event):
'''
"""
Key press callback with plenty of shell goodness, like history,
autocompletions, etc.
autocompletions, etc
@param widget: Widget that key press occured in.
@type widget: gtk.Widget
@ -496,7 +497,7 @@ class IPythonView(ConsoleView, IterableIPShell):
@return: True if event should not trickle.
@rtype: boolean
'''
"""
if event.state & gtk.gdk.CONTROL_MASK and event.keyval == 99:
self.interrupt = True
self._processLine()
@ -524,9 +525,9 @@ class IPythonView(ConsoleView, IterableIPShell):
return True
def _processLine(self):
'''
Process current command line.
'''
"""
Process current command line
"""
self.history_pos = 0
self.execute()
rv = self.cout.getvalue()

View File

@ -39,7 +39,10 @@ TYPE_PM = 'pm'
####################
class MessageControl:
'''An abstract base widget that can embed in the gtk.Notebook of a MessageWindow'''
"""
An abstract base widget that can embed in the gtk.Notebook of a
MessageWindow
"""
def __init__(self, type_id, parent_win, widget_name, contact, account, resource = None):
# dict { cb id : widget}
@ -67,57 +70,87 @@ class MessageControl:
return fjid
def set_control_active(self, state):
'''Called when the control becomes active (state is True)
or inactive (state is False)'''
"""
Called when the control becomes active (state is True) or inactive (state
is False)
"""
pass # Derived classes MUST implement this method
def minimizable(self):
'''Called to check if control can be minimized'''
# NOTE: Derived classes MAY implement this
"""
Called to check if control can be minimized
Derived classes MAY implement this.
"""
return False
def safe_shutdown(self):
'''Called to check if control can be closed without loosing data.
returns True if control can be closed safely else False'''
# NOTE: Derived classes MAY implement this
"""
Called to check if control can be closed without loosing data.
returns True if control can be closed safely else False
Derived classes MAY implement this.
"""
return True
def allow_shutdown(self, method, on_response_yes, on_response_no,
on_response_minimize):
'''Called to check is a control is allowed to shutdown.
on_response_minimize):
"""
Called to check is a control is allowed to shutdown.
If a control is not in a suitable shutdown state this method
should call on_response_no, else on_response_yes or
on_response_minimize '''
# NOTE: Derived classes MAY implement this
on_response_minimize
Derived classes MAY implement this.
"""
on_response_yes(self)
def shutdown(self):
# NOTE: Derived classes MUST implement this
"""
Derived classes MUST implement this
"""
pass
def repaint_themed_widgets(self):
pass # NOTE: Derived classes SHOULD implement this
"""
Derived classes SHOULD implement this
"""
pass
def update_ui(self):
pass # NOTE: Derived classes SHOULD implement this
"""
Derived classes SHOULD implement this
"""
pass
def toggle_emoticons(self):
pass # NOTE: Derived classes MAY implement this
"""
Derived classes MAY implement this
"""
pass
def update_font(self):
pass # NOTE: Derived classes SHOULD implement this
"""
Derived classes SHOULD implement this
"""
pass
def update_tags(self):
pass # NOTE: Derived classes SHOULD implement this
"""
Derived classes SHOULD implement this
"""
pass
def get_tab_label(self, chatstate):
'''Return a suitable tab label string. Returns a tuple such as:
(label_str, color) either of which can be None
if chatstate is given that means we have HE SENT US a chatstate and
we want it displayed'''
# NOTE: Derived classes MUST implement this
"""
Return a suitable tab label string. Returns a tuple such as: (label_str,
color) either of which can be None if chatstate is given that means we
have HE SENT US a chatstate and we want it displayed
Derivded classes MUST implement this.
"""
# Return a markup'd label and optional gtk.Color in a tupple like:
#return (label_str, None)
# return (label_str, None)
pass
def get_tab_image(self, count_unread=True):
@ -126,11 +159,15 @@ class MessageControl:
return None
def prepare_context_menu(self):
# NOTE: Derived classes SHOULD implement this
"""
Derived classes SHOULD implement this
"""
return None
def chat_buttons_set_visible(self, state):
# NOTE: Derived classes MAY implement this
"""
Derived classes MAY implement this
"""
self.hide_chat_buttons = state
def got_connected(self):
@ -170,8 +207,8 @@ class MessageControl:
self.print_esession_details()
def send_message(self, message, keyID='', type_='chat', chatstate=None,
msg_id=None, composing_xep=None, resource=None, user_nick=None, xhtml=None,
callback=None, callback_args=[]):
msg_id=None, composing_xep=None, resource=None, user_nick=None,
xhtml=None, callback=None, callback_args=[]):
# Send the given message to the active tab.
# Doesn't return None if error
jid = self.contact.jid

View File

@ -42,8 +42,9 @@ from common import gajim
####################
class MessageWindow(object):
'''Class for windows which contain message like things; chats,
groupchats, etc.'''
"""
Class for windows which contain message like things; chats, groupchats, etc
"""
# DND_TARGETS is the targets needed by drag_source_set and drag_dest_set
DND_TARGETS = [('GAJIM_TAB', 0, 81)]
@ -160,7 +161,9 @@ class MessageWindow(object):
self.account = new_name
def change_jid(self, account, old_jid, new_jid):
''' call then when the full jid of a contral change'''
"""
Called when the full jid of the control is changed
"""
if account not in self._controls:
return
if old_jid not in self._controls[account]:
@ -417,7 +420,9 @@ class MessageWindow(object):
return True
def _on_close_button_clicked(self, button, control):
'''When close button is pressed: close a tab'''
"""
When close button is pressed: close a tab
"""
self.remove_tab(control, self.CLOSE_CLOSE_BUTTON)
def show_icon(self):
@ -444,7 +449,9 @@ class MessageWindow(object):
self.window.set_icon(icon.get_pixbuf())
def show_title(self, urgent=True, control=None):
'''redraw the window's title'''
"""
Redraw the window's title
"""
if not control:
control = self.get_active_control()
if not control:
@ -512,8 +519,10 @@ class MessageWindow(object):
self.window.present()
def remove_tab(self, ctrl, method, reason = None, force = False):
'''reason is only for gc (offline status message)
if force is True, do not ask any confirmation'''
"""
Reason is only for gc (offline status message) if force is True, do not
ask any confirmation
"""
def close(ctrl):
if reason is not None: # We are leaving gc with a status message
ctrl.shutdown(reason)
@ -616,7 +625,9 @@ class MessageWindow(object):
self.show_icon()
def repaint_themed_widgets(self):
'''Repaint controls in the window with theme color'''
"""
Repaint controls in the window with theme color
"""
# iterate through controls and repaint
for ctrl in self.controls():
ctrl.repaint_themed_widgets()
@ -663,8 +674,10 @@ class MessageWindow(object):
ctrl.update_tags()
def get_control(self, key, acct):
'''Return the MessageControl for jid or n, where n is a notebook page index.
When key is an int index acct may be None'''
"""
Return the MessageControl for jid or n, where n is a notebook page index.
When key is an int index acct may be None
"""
if isinstance(key, str):
key = unicode(key, 'utf-8')
@ -686,7 +699,9 @@ class MessageWindow(object):
return (acct in self._controls and jid in self._controls[acct])
def change_key(self, old_jid, new_jid, acct):
'''Change the JID key of a control'''
"""
Change the JID key of a control
"""
try:
# Check if controls exists
ctrl = self._controls[acct][old_jid]
@ -814,10 +829,10 @@ class MessageWindow(object):
control.msg_textview.grab_focus()
def get_tab_at_xy(self, x, y):
'''Thanks to Gaim
Return the tab under xy and
if its nearer from left or right side of the tab
'''
"""
Return the tab under xy and if its nearer from left or right side of the
tab
"""
page_num = -1
to_right = False
horiz = self.notebook.get_tab_pos() == gtk.POS_TOP or \
@ -844,7 +859,9 @@ class MessageWindow(object):
return (page_num, to_right)
def find_page_num_according_to_tab_label(self, tab_label):
'''Find the page num of the tab label'''
"""
Find the page num of the tab label
"""
page_num = -1
for i in xrange(self.notebook.get_n_pages()):
page = self.notebook.get_nth_page(i)
@ -856,18 +873,21 @@ class MessageWindow(object):
################################################################################
class MessageWindowMgr(gobject.GObject):
'''A manager and factory for MessageWindow objects'''
"""
A manager and factory for MessageWindow objects
"""
__gsignals__ = {
'window-delete': (gobject.SIGNAL_RUN_LAST, None, (object,)),
}
# These constants map to common.config.opt_one_window_types indices
(
ONE_MSG_WINDOW_NEVER,
ONE_MSG_WINDOW_ALWAYS,
ONE_MSG_WINDOW_ALWAYS_WITH_ROSTER,
ONE_MSG_WINDOW_PERACCT,
ONE_MSG_WINDOW_PERTYPE,
ONE_MSG_WINDOW_NEVER,
ONE_MSG_WINDOW_ALWAYS,
ONE_MSG_WINDOW_ALWAYS_WITH_ROSTER,
ONE_MSG_WINDOW_PERACCT,
ONE_MSG_WINDOW_PERTYPE,
) = range(5)
# A key constant for the main window in ONE_MSG_WINDOW_ALWAYS mode
MAIN_WIN = 'main'
@ -875,12 +895,14 @@ class MessageWindowMgr(gobject.GObject):
ROSTER_MAIN_WIN = 'roster'
def __init__(self, parent_window, parent_paned):
''' A dictionary of windows; the key depends on the config:
ONE_MSG_WINDOW_NEVER: The key is the contact JID
ONE_MSG_WINDOW_ALWAYS: The key is MessageWindowMgr.MAIN_WIN
ONE_MSG_WINDOW_ALWAYS_WITH_ROSTER: The key is MessageWindowMgr.MAIN_WIN
ONE_MSG_WINDOW_PERACCT: The key is the account name
ONE_MSG_WINDOW_PERTYPE: The key is a message type constant'''
"""
A dictionary of windows; the key depends on the config:
ONE_MSG_WINDOW_NEVER: The key is the contact JID
ONE_MSG_WINDOW_ALWAYS: The key is MessageWindowMgr.MAIN_WIN
ONE_MSG_WINDOW_ALWAYS_WITH_ROSTER: The key is MessageWindowMgr.MAIN_WIN
ONE_MSG_WINDOW_PERACCT: The key is the account name
ONE_MSG_WINDOW_PERTYPE: The key is a message type constant
"""
gobject.GObject.__init__(self)
self._windows = {}
@ -931,7 +953,9 @@ class MessageWindowMgr(gobject.GObject):
return False
def _resize_window(self, win, acct, type_):
'''Resizes window according to config settings'''
"""
Resizes window according to config settings
"""
if self.mode in (self.ONE_MSG_WINDOW_ALWAYS,
self.ONE_MSG_WINDOW_ALWAYS_WITH_ROSTER):
size = (gajim.config.get('msgwin-width'),
@ -958,7 +982,9 @@ class MessageWindowMgr(gobject.GObject):
win.parent_paned.set_position(parent_size[0])
def _position_window(self, win, acct, type_):
'''Moves window according to config settings'''
"""
Moves window according to config settings
"""
if (self.mode in [self.ONE_MSG_WINDOW_NEVER,
self.ONE_MSG_WINDOW_ALWAYS_WITH_ROSTER]):
return
@ -1054,15 +1080,19 @@ class MessageWindowMgr(gobject.GObject):
return
def get_control(self, jid, acct):
'''Amongst all windows, return the MessageControl for jid'''
"""
Amongst all windows, return the MessageControl for jid
"""
win = self.get_window(jid, acct)
if win:
return win.get_control(jid, acct)
return None
def get_gc_control(self, jid, acct):
'''Same as get_control. Was briefly required, is not any more.
May be useful some day in the future?'''
"""
Same as get_control. Was briefly required, is not any more. May be useful
some day in the future?
"""
ctrl = self.get_control(jid, acct)
if ctrl and ctrl.type_id == message_control.TYPE_GC:
return ctrl

View File

@ -27,14 +27,15 @@ from common import gajim
from common import xmpp
def describe_features(features):
'''a human-readable description of the features that have been negotiated'''
"""
A human-readable description of the features that have been negotiated
"""
if features['logging'] == 'may':
return _('- messages will be logged')
elif features['logging'] == 'mustnot':
return _('- messages will not be logged')
class FeatureNegotiationWindow:
'''FeatureNegotiotionWindow class'''
def __init__(self, account, jid, session, form):
self.account = account
self.jid = jid

View File

@ -26,21 +26,27 @@ from common import gajim
def device_now_active(self, *args):
'''For Network Manager 0.6'''
"""
For Network Manager 0.6
"""
for connection in gajim.connections.itervalues():
if gajim.config.get_per('accounts', connection.name,
'listen_to_network_manager') and connection.time_to_reconnect:
connection._reconnect()
def device_no_longer_active(self, *args):
'''For Network Manager 0.6'''
"""
For Network Manager 0.6
"""
for connection in gajim.connections.itervalues():
if gajim.config.get_per('accounts', connection.name,
'listen_to_network_manager') and connection.connected > 1:
connection._disconnectedReconnCB()
def state_changed(state):
'''For Network Manager 0.7'''
"""
For Network Manager 0.7
"""
if props.Get("org.freedesktop.NetworkManager", "State") == 3:
for connection in gajim.connections.itervalues():
if gajim.config.get_per('accounts', connection.name,

View File

@ -69,7 +69,9 @@ def server_display(server):
win.present()
def get_show_in_roster(event, account, contact, session=None):
'''Return True if this event must be shown in roster, else False'''
"""
Return True if this event must be shown in roster, else False
"""
if event == 'gc_message_received':
return True
num = get_advanced_notification(event, account, contact)
@ -84,7 +86,9 @@ def get_show_in_roster(event, account, contact, session=None):
return True
def get_show_in_systray(event, account, contact, type_=None):
'''Return True if this event must be shown in systray, else False'''
"""
Return True if this event must be shown in systray, else False
"""
num = get_advanced_notification(event, account, contact)
if num is not None:
if gajim.config.get_per('notifications', str(num), 'systray') == 'yes':
@ -98,8 +102,9 @@ def get_show_in_systray(event, account, contact, type_=None):
return gajim.config.get('trayicon_notification_on_events')
def get_advanced_notification(event, account, contact):
'''Returns the number of the first (top most)
advanced notification else None'''
"""
Returns the number of the first (top most) advanced notification else None
"""
num = 0
notif = gajim.config.get_per('notifications', str(num))
while notif:
@ -146,10 +151,11 @@ def get_advanced_notification(event, account, contact):
notif = gajim.config.get_per('notifications', str(num))
def notify(event, jid, account, parameters, advanced_notif_num=None):
'''Check what type of notifications we want, depending on basic
and the advanced configuration of notifications and do these notifications;
advanced_notif_num holds the number of the first (top most) advanced
notification'''
"""
Check what type of notifications we want, depending on basic and the advanced
configuration of notifications and do these notifications; advanced_notif_num
holds the number of the first (top most) advanced notification
"""
# First, find what notifications we want
do_popup = False
do_sound = False
@ -327,12 +333,13 @@ def notify(event, jid, account, parameters, advanced_notif_num=None):
except Exception:
pass
def popup(event_type, jid, account, msg_type='', path_to_image=None,
title=None, text=None):
'''Notifies a user of an event. It first tries to a valid implementation of
def popup(event_type, jid, account, msg_type='', path_to_image=None, title=None,
text=None):
"""
Notify a user of an event. It first tries to a valid implementation of
the Desktop Notification Specification. If that fails, then we fall back to
the older style PopupNotificationWindow method.'''
the older style PopupNotificationWindow method
"""
# default image
if not path_to_image:
path_to_image = os.path.abspath(
@ -414,9 +421,12 @@ def on_pynotify_notification_clicked(notification, action):
gajim.interface.handle_event(account, jid, msg_type)
class NotificationResponseManager:
'''Collects references to pending DesktopNotifications and manages there
signalling. This is necessary due to a bug in DBus where you can't remove
a signal from an interface once it's connected.'''
"""
Collect references to pending DesktopNotifications and manages there
signalling. This is necessary due to a bug in DBus where you can't remove a
signal from an interface once it's connected
"""
def __init__(self):
self.pending = {}
self.received = []
@ -464,8 +474,11 @@ class NotificationResponseManager:
notification_response_manager = NotificationResponseManager()
class DesktopNotification:
'''A DesktopNotification that interfaces with D-Bus via the Desktop
Notification specification'''
"""
A DesktopNotification that interfaces with D-Bus via the Desktop Notification
specification
"""
def __init__(self, event_type, jid, account, msg_type='',
path_to_image=None, title=None, text=None):
self.path_to_image = path_to_image

View File

@ -36,7 +36,9 @@ from common import gajim
class ProfileWindow:
'''Class for our information window'''
"""
Class for our information window
"""
def __init__(self, account):
self.xml = gtkgui_helpers.get_glade('profile_window.glade')
@ -173,7 +175,9 @@ class ProfileWindow:
on_response_cancel = on_cancel, on_response_clear = on_clear)
def on_PHOTO_button_press_event(self, widget, event):
'''If right-clicked, show popup'''
"""
If right-clicked, show popup
"""
if event.button == 3 and self.avatar_encoded: # right click
menu = gtk.Menu()
@ -257,7 +261,9 @@ class ProfileWindow:
self.update_progressbar_timeout_id = None
def add_to_vcard(self, vcard_, entry, txt):
'''Add an information to the vCard dictionary'''
"""
Add an information to the vCard dictionary
"""
entries = entry.split('_')
loc = vcard_
if len(entries) == 3: # We need to use lists
@ -280,7 +286,9 @@ class ProfileWindow:
return vcard_
def make_vcard(self):
'''make the vCard dictionary'''
"""
Make the vCard dictionary
"""
entries = ['FN', 'NICKNAME', 'BDAY', 'EMAIL_HOME_USERID', 'URL',
'TEL_HOME_NUMBER', 'N_FAMILY', 'N_GIVEN', 'N_MIDDLE', 'N_PREFIX',
'N_SUFFIX', 'ADR_HOME_STREET', 'ADR_HOME_EXTADR', 'ADR_HOME_LOCALITY',

View File

@ -64,9 +64,10 @@ DBUS_DICT_SS = lambda : dbus.Dictionary({}, signature="ss")
DBUS_NONE = lambda : dbus.Int32(0)
def get_dbus_struct(obj):
''' recursively go through all the items and replace
them with their casted dbus equivalents
'''
"""
Recursively go through all the items and replace them with their casted dbus
equivalents
"""
if obj is None:
return DBUS_NONE()
if isinstance(obj, (unicode, str)):
@ -110,8 +111,12 @@ class Remote:
class SignalObject(dbus.service.Object):
''' Local object definition for /org/gajim/dbus/RemoteObject.
(This docstring is not be visible, because the clients can access only the remote object.)'''
"""
Local object definition for /org/gajim/dbus/RemoteObject
This docstring is not be visible, because the clients can access only the
remote object.
"""
def __init__(self, bus_name):
self.first_show = True
@ -193,14 +198,18 @@ class SignalObject(dbus.service.Object):
pass
def raise_signal(self, signal, arg):
'''raise a signal, with a single argument of unspecified type
Instead of obj.raise_signal("Foo", bar), use obj.Foo(bar).'''
"""
Raise a signal, with a single argument of unspecified type Instead of
obj.raise_signal("Foo", bar), use obj.Foo(bar)
"""
getattr(self, signal)(arg)
@dbus.service.method(INTERFACE, in_signature='s', out_signature='s')
def get_status(self, account):
'''Returns status (show to be exact) which is the global one
unless account is given'''
"""
Return status (show to be exact) which is the global one unless account is
given
"""
if not account:
# If user did not ask for account, returns the global status
return DBUS_STRING(helpers.get_global_show())
@ -210,8 +219,9 @@ class SignalObject(dbus.service.Object):
@dbus.service.method(INTERFACE, in_signature='s', out_signature='s')
def get_status_message(self, account):
'''Returns status which is the global one
unless account is given'''
"""
Return status which is the global one unless account is given
"""
if not account:
# If user did not ask for account, returns the global status
return DBUS_STRING(str(helpers.get_global_status()))
@ -220,7 +230,9 @@ class SignalObject(dbus.service.Object):
return DBUS_STRING(status)
def _get_account_and_contact(self, account, jid):
'''get the account (if not given) and contact instance from jid'''
"""
Get the account (if not given) and contact instance from jid
"""
connected_account = None
contact = None
accounts = gajim.contacts.get_accounts()
@ -247,8 +259,10 @@ class SignalObject(dbus.service.Object):
return connected_account, contact
def _get_account_for_groupchat(self, account, room_jid):
'''get the account which is connected to groupchat (if not given)
or check if the given account is connected to the groupchat'''
"""
Get the account which is connected to groupchat (if not given)
or check if the given account is connected to the groupchat
"""
connected_account = None
accounts = gajim.contacts.get_accounts()
# if there is only one account in roster, take it as default
@ -273,8 +287,10 @@ class SignalObject(dbus.service.Object):
@dbus.service.method(INTERFACE, in_signature='sss', out_signature='b')
def send_file(self, file_path, jid, account):
'''send file, located at 'file_path' to 'jid', using account
(optional) 'account' '''
"""
Send file, located at 'file_path' to 'jid', using account (optional)
'account'
"""
jid = self._get_real_jid(jid, account)
connected_account, contact = self._get_account_and_contact(account, jid)
@ -289,8 +305,10 @@ class SignalObject(dbus.service.Object):
def _send_message(self, jid, message, keyID, account, type_ = 'chat',
subject = None):
'''can be called from send_chat_message (default when send_message)
or send_single_message'''
"""
Can be called from send_chat_message (default when send_message) or
send_single_message
"""
if not jid or not message:
return DBUS_BOOLEAN(False)
if not keyID:
@ -305,22 +323,27 @@ class SignalObject(dbus.service.Object):
@dbus.service.method(INTERFACE, in_signature='ssss', out_signature='b')
def send_chat_message(self, jid, message, keyID, account):
'''Send chat 'message' to 'jid', using account (optional) 'account'.
if keyID is specified, encrypt the message with the pgp key '''
"""
Send chat 'message' to 'jid', using account (optional) 'account'. If keyID
is specified, encrypt the message with the pgp key
"""
jid = self._get_real_jid(jid, account)
return self._send_message(jid, message, keyID, account)
@dbus.service.method(INTERFACE, in_signature='sssss', out_signature='b')
def send_single_message(self, jid, subject, message, keyID, account):
'''Send single 'message' to 'jid', using account (optional) 'account'.
if keyID is specified, encrypt the message with the pgp key '''
"""
Send single 'message' to 'jid', using account (optional) 'account'. If
keyID is specified, encrypt the message with the pgp key
"""
jid = self._get_real_jid(jid, account)
return self._send_message(jid, message, keyID, account, type, subject)
@dbus.service.method(INTERFACE, in_signature='sss', out_signature='b')
def send_groupchat_message(self, room_jid, message, account):
'''Send 'message' to groupchat 'room_jid',
using account (optional) 'account'.'''
"""
Send 'message' to groupchat 'room_jid', using account (optional) 'account'
"""
if not room_jid or not message:
return DBUS_BOOLEAN(False)
connected_account = self._get_account_for_groupchat(account, room_jid)
@ -332,8 +355,10 @@ class SignalObject(dbus.service.Object):
@dbus.service.method(INTERFACE, in_signature='sss', out_signature='b')
def open_chat(self, jid, account, message):
'''Shows the tabbed window for new message to 'jid', using account
(optional) 'account' '''
"""
Shows the tabbed window for new message to 'jid', using account (optional)
'account'
"""
if not jid:
raise dbus_support.MissingArgument()
jid = self._get_real_jid(jid, account)
@ -384,8 +409,10 @@ class SignalObject(dbus.service.Object):
@dbus.service.method(INTERFACE, in_signature='sss', out_signature='b')
def change_status(self, status, message, account):
''' change_status(status, message, account). account is optional -
if not specified status is changed for all accounts. '''
"""
change_status(status, message, account). Account is optional - if not
specified status is changed for all accounts
"""
if status not in ('offline', 'online', 'chat',
'away', 'xa', 'dnd', 'invisible'):
return DBUS_BOOLEAN(False)
@ -404,9 +431,10 @@ class SignalObject(dbus.service.Object):
@dbus.service.method(INTERFACE, in_signature='ss', out_signature='')
def set_priority(self, prio, account):
''' set_priority(prio, account). account is optional -
if not specified priority is changed for all accounts. that are synced
with global status'''
"""
set_priority(prio, account). Account is optional - if not specified
priority is changed for all accounts. That are synced with global status
"""
if account:
gajim.config.set_per('accounts', account, 'priority', prio)
show = gajim.SHOW_LIST[gajim.connections[account].connected]
@ -429,14 +457,17 @@ class SignalObject(dbus.service.Object):
@dbus.service.method(INTERFACE, in_signature='', out_signature='')
def show_next_pending_event(self):
'''Show the window(s) with next pending event in tabbed/group chats.'''
"""
Show the window(s) with next pending event in tabbed/group chats
"""
if gajim.events.get_nb_events():
gajim.interface.systray.handle_first_event()
@dbus.service.method(INTERFACE, in_signature='s', out_signature='a{sv}')
def contact_info(self, jid):
'''get vcard info for a contact. Return cached value of the vcard.
'''
"""
Get vcard info for a contact. Return cached value of the vcard
"""
if not isinstance(jid, unicode):
jid = unicode(jid)
if not jid:
@ -452,7 +483,9 @@ class SignalObject(dbus.service.Object):
@dbus.service.method(INTERFACE, in_signature='', out_signature='as')
def list_accounts(self):
'''list register accounts'''
"""
List register accounts
"""
result = gajim.contacts.get_accounts()
result_array = dbus.Array([], signature='s')
if result and len(result) > 0:
@ -462,7 +495,9 @@ class SignalObject(dbus.service.Object):
@dbus.service.method(INTERFACE, in_signature='s', out_signature='a{ss}')
def account_info(self, account):
'''show info on account: resource, jid, nick, prio, message'''
"""
Show info on account: resource, jid, nick, prio, message
"""
result = DBUS_DICT_SS()
if account in gajim.connections:
# account is valid
@ -479,8 +514,10 @@ class SignalObject(dbus.service.Object):
@dbus.service.method(INTERFACE, in_signature='s', out_signature='aa{sv}')
def list_contacts(self, account):
'''list all contacts in the roster. If the first argument is specified,
then return the contacts for the specified account'''
"""
List all contacts in the roster. If the first argument is specified, then
return the contacts for the specified account
"""
result = dbus.Array([], signature='aa{sv}')
accounts = gajim.contacts.get_accounts()
if len(accounts) == 0:
@ -500,7 +537,9 @@ class SignalObject(dbus.service.Object):
@dbus.service.method(INTERFACE, in_signature='', out_signature='')
def toggle_roster_appearance(self):
''' shows/hides the roster window '''
"""
Show/hide the roster window
"""
win = gajim.interface.roster.window
if win.get_property('visible'):
gobject.idle_add(win.hide)
@ -514,7 +553,9 @@ class SignalObject(dbus.service.Object):
@dbus.service.method(INTERFACE, in_signature='', out_signature='')
def toggle_ipython(self):
''' shows/hides the ipython window '''
"""
Show/hide the ipython window
"""
win = gajim.ipython_window
if win:
if win.window.is_visible():
@ -615,9 +656,10 @@ class SignalObject(dbus.service.Object):
return False
def _get_real_jid(self, jid, account = None):
'''get the real jid from the given one: removes xmpp: or get jid from nick
if account is specified, search only in this account
'''
"""
Get the real jid from the given one: removes xmpp: or get jid from nick if
account is specified, search only in this account
"""
if account:
accounts = [account]
else:
@ -643,7 +685,9 @@ class SignalObject(dbus.service.Object):
return jid
def _contacts_as_dbus_structure(self, contacts):
''' get info from list of Contact objects and create dbus dict '''
"""
Get info from list of Contact objects and create dbus dict
"""
if not contacts:
return None
prim_contact = None # primary contact

File diff suppressed because it is too large Load Diff

View File

@ -32,8 +32,9 @@ import dataforms_widget
class SearchWindow:
def __init__(self, account, jid):
'''Create new window.'''
"""
Create new window
"""
# an account object
self.account = account
self.jid = jid
@ -231,5 +232,4 @@ class SearchWindow:
self.window.set_title('%s - Search - Gajim' % \
self.data_form_widget.title)
# vim: se ts=3:

View File

@ -57,7 +57,9 @@ class ChatControlSession(stanza_session.EncryptedStanzaSession):
self.detach_from_control()
def get_chatstate(self, msg, msgtxt):
'''extracts chatstate from a <message/> stanza'''
"""
Extract chatstate from a <message/> stanza
"""
composing_xep = None
chatstate = None
@ -83,7 +85,9 @@ class ChatControlSession(stanza_session.EncryptedStanzaSession):
return (composing_xep, chatstate)
def received(self, full_jid_with_resource, msgtxt, tim, encrypted, msg):
'''dispatch a received <message> stanza'''
"""
Dispatch a received <message> stanza
"""
msg_type = msg.getType()
subject = msg.getSubject()
resource = gajim.get_resource_from_jid(full_jid_with_resource)
@ -265,9 +269,11 @@ class ChatControlSession(stanza_session.EncryptedStanzaSession):
chatstate, msg_id, composing_xep, user_nick, xhtml, form_node]))
def roster_message(self, jid, msg, tim, encrypted=False, msg_type='',
subject=None, resource='', msg_id=None, user_nick='',
advanced_notif_num=None, xhtml=None, form_node=None):
'''display the message or show notification in the roster'''
subject=None, resource='', msg_id=None, user_nick='',
advanced_notif_num=None, xhtml=None, form_node=None):
"""
Display the message or show notification in the roster
"""
contact = None
# if chat window will be for specific resource
resource_for_chat = resource

View File

@ -39,7 +39,10 @@ from common import helpers
from common import pep
class StatusIcon:
'''Class for the notification area icon'''
"""
Class for the notification area icon
"""
def __init__(self):
self.single_message_handler_id = None
self.new_chat_handler_id = None
@ -54,22 +57,30 @@ class StatusIcon:
self.tooltip = tooltips.NotificationAreaTooltip()
def subscribe_events(self):
'''Register listeners to the events class'''
"""
Register listeners to the events class
"""
gajim.events.event_added_subscribe(self.on_event_added)
gajim.events.event_removed_subscribe(self.on_event_removed)
def unsubscribe_events(self):
'''Unregister listeners to the events class'''
"""
Unregister listeners to the events class
"""
gajim.events.event_added_unsubscribe(self.on_event_added)
gajim.events.event_removed_unsubscribe(self.on_event_removed)
def on_event_added(self, event):
'''Called when an event is added to the event list'''
"""
Called when an event is added to the event list
"""
if event.show_in_systray:
self.set_img()
def on_event_removed(self, event_list):
'''Called when one or more events are removed from the event list'''
"""
Called when one or more events are removed from the event list
"""
self.set_img()
def show_icon(self):
@ -102,7 +113,9 @@ class StatusIcon:
self.on_left_click()
def set_img(self):
'''apart from image, we also update tooltip text here'''
"""
Apart from image, we also update tooltip text here
"""
if not gajim.interface.systray_enabled:
return
if gajim.events.get_nb_systray_events():
@ -122,7 +135,9 @@ class StatusIcon:
# self.img_tray.set_from_animation(image.get_animation())
def change_status(self, global_status):
''' set tray image to 'global_status' '''
"""
Set tray image to 'global_status'
"""
# change image and status, only if it is different
if global_status is not None and self.status != global_status:
self.status = global_status
@ -145,7 +160,9 @@ class StatusIcon:
dialogs.NewChatDialog(account)
def make_menu(self, event_button, event_time):
'''create chat with and new message (sub) menus/menuitems'''
"""
Create chat with and new message (sub) menus/menuitems
"""
for m in self.popup_menus:
m.destroy()
@ -366,8 +383,10 @@ class StatusIcon:
gajim.interface.handle_event(account, jid, event.type_)
def on_middle_click(self):
'''middle click raises window to have complete focus (fe. get kbd events)
but if already raised, it hides it'''
"""
Middle click raises window to have complete focus (fe. get kbd events)
but if already raised, it hides it
"""
win = gajim.interface.roster.window
if win.is_active(): # is it fully raised? (eg does it receive kbd events?)
win.hide()

View File

@ -41,7 +41,9 @@ from common import helpers
from common.pep import MOODS, ACTIVITIES
class BaseTooltip:
''' Base Tooltip class;
"""
Base Tooltip class
Usage:
tooltip = BaseTooltip()
....
@ -57,7 +59,8 @@ class BaseTooltip:
Tooltip is displayed aligned centered to the mouse poiner and 4px below the widget.
In case tooltip goes below the visible area it is shown above the widget.
'''
"""
def __init__(self):
self.timeout = 0
self.preferred_position = [0, 0]
@ -65,14 +68,17 @@ class BaseTooltip:
self.id = None
def populate(self, data):
''' this method must be overriden by all extenders
This is the most simple implementation: show data as value of a label
'''
"""
This method must be overriden by all extenders. This is the most simple
implementation: show data as value of a label
"""
self.create_window()
self.win.add(gtk.Label(data))
def create_window(self):
''' create a popup window each time tooltip is requested '''
"""
Create a popup window each time tooltip is requested
"""
self.win = gtk.Window(gtk.WINDOW_POPUP)
self.win.set_border_width(3)
self.win.set_resizable(False)
@ -86,10 +92,12 @@ class BaseTooltip:
self.screen = self.win.get_screen()
def _get_icon_name_for_tooltip(self, contact):
''' helper function used for tooltip contacts/acounts
"""
Helper function used for tooltip contacts/acounts
Tooltip on account has fake contact with sub == '', in this case we show
real status of the account
'''
"""
if contact.ask == 'subscribe':
return 'requested'
elif contact.sub in ('both', 'to', ''):
@ -133,11 +141,13 @@ class BaseTooltip:
return True
def show_tooltip(self, data, widget_height, widget_y_position):
''' show tooltip on widget.
data contains needed data for tooltip contents
widget_height is the height of the widget on which we show the tooltip
widget_y_position is vertical position of the widget on the screen
'''
"""
Show tooltip on widget
Data contains needed data for tooltip contents.
widget_height is the height of the widget on which we show the tooltip.
widget_y_position is vertical position of the widget on the screen.
"""
# set tooltip contents
self.populate(data)
@ -163,8 +173,11 @@ class BaseTooltip:
self.id = None
class StatusTable:
''' Contains methods for creating status table. This
is used in Roster and NotificationArea tooltips '''
"""
Contains methods for creating status table. This is used in Roster and
NotificationArea tooltips
"""
def __init__(self):
self.current_row = 1
self.table = None
@ -201,8 +214,10 @@ class StatusTable:
return str_status
def add_status_row(self, file_path, show, str_status, status_time=None,
show_lock=False, indent=True):
''' appends a new row with status icon to the table '''
show_lock=False, indent=True):
"""
Append a new row with status icon to the table
"""
self.current_row += 1
state_file = show.replace(' ', '_')
files = []
@ -235,7 +250,10 @@ class StatusTable:
self.current_row + 1, 0, 0, 0, 0)
class NotificationAreaTooltip(BaseTooltip, StatusTable):
''' Tooltip that is shown in the notification area '''
"""
Tooltip that is shown in the notification area
"""
def __init__(self):
BaseTooltip.__init__(self)
StatusTable.__init__(self)
@ -283,7 +301,10 @@ class NotificationAreaTooltip(BaseTooltip, StatusTable):
self.hbox.show_all()
class GCTooltip(BaseTooltip):
''' Tooltip that is shown in the GC treeview '''
"""
Tooltip that is shown in the GC treeview
"""
def __init__(self):
self.account = None
self.text_label = gtk.Label()
@ -378,7 +399,10 @@ class GCTooltip(BaseTooltip):
self.win.add(vcard_table)
class RosterTooltip(NotificationAreaTooltip):
''' Tooltip that is shown in the roster treeview '''
"""
Tooltip that is shown in the roster treeview
"""
def __init__(self):
self.account = None
self.image = gtk.Image()
@ -561,7 +585,7 @@ class RosterTooltip(NotificationAreaTooltip):
vcard_current_row + 1, gtk.EXPAND | gtk.FILL,
vertical_fill, 0, 0)
else:
if isinstance(property_[0], (unicode, str)): #FIXME: rm unicode?
if isinstance(property_[0], (unicode, str)): # FIXME: rm unicode?
label.set_markup(property_[0])
label.set_line_wrap(True)
else:
@ -575,10 +599,10 @@ class RosterTooltip(NotificationAreaTooltip):
self.win.add(vcard_table)
def _append_pep_info(self, contact, properties):
'''
"""
Append Tune, Mood, Activity information of the specified contact
to the given property list.
'''
"""
if 'mood' in contact.pep:
mood = contact.pep['mood'].asMarkupText()
mood_string = _('Mood:') + ' %s' % mood
@ -586,7 +610,7 @@ class RosterTooltip(NotificationAreaTooltip):
if 'activity' in contact.pep:
activity = contact.pep['activity'].asMarkupText()
activity_string = _('Activity:') + ' %s' % activity
activity_string = _('Activity:') + ' %s' % activity
properties.append((activity_string, None))
if 'tune' in contact.pep:
@ -596,7 +620,10 @@ class RosterTooltip(NotificationAreaTooltip):
class FileTransfersTooltip(BaseTooltip):
''' Tooltip that is shown in the notification area '''
"""
Tooltip that is shown in the notification area
"""
def __init__(self):
BaseTooltip.__init__(self)
@ -680,7 +707,9 @@ class FileTransfersTooltip(BaseTooltip):
class ServiceDiscoveryTooltip(BaseTooltip):
''' Tooltip that is shown when hovering over a service discovery row '''
"""
Tooltip that is shown when hovering over a service discovery row
"""
def populate(self, status):
self.create_window()
label = gtk.Label()

View File

@ -45,8 +45,11 @@ from common import gajim
from common.i18n import Q_
def get_avatar_pixbuf_encoded_mime(photo):
'''return the pixbuf of the image
photo is a dictionary containing PHOTO information'''
"""
Return the pixbuf of the image
Photo is a dictionary containing PHOTO information.
"""
if not isinstance(photo, dict):
return None, None, None
img_decoded = None
@ -71,7 +74,9 @@ def get_avatar_pixbuf_encoded_mime(photo):
return pixbuf, avatar_encoded, avatar_mime_type
class VcardWindow:
'''Class for contact's information window'''
"""
Class for contact's information window
"""
def __init__(self, contact, account, gc_contact = None):
# the contact variable is the jid if vcard is true
@ -151,7 +156,9 @@ class VcardWindow:
self.window.destroy()
def on_PHOTO_eventbox_button_press_event(self, widget, event):
'''If right-clicked, show popup'''
"""
If right-clicked, show popup
"""
if event.button == 3: # right click
menu = gtk.Menu()
menuitem = gtk.ImageMenuItem(gtk.STOCK_SAVE_AS)
@ -465,7 +472,9 @@ class ZeroconfVcardWindow:
self.window.destroy()
def on_PHOTO_eventbox_button_press_event(self, widget, event):
'''If right-clicked, show popup'''
"""
If right-clicked, show popup
"""
if event.button == 3: # right click
menu = gtk.Menu()
menuitem = gtk.ImageMenuItem(gtk.STOCK_SAVE_AS)