From 3d7d4c1fff1fc884a12c18fcf7bf4487b270a36f Mon Sep 17 00:00:00 2001 From: Nikos Kouremenos Date: Mon, 18 Apr 2005 14:05:30 +0000 Subject: [PATCH] adding setting in advanced/misc for not checking for new version. [this is not an expert setting, and should stay in prefs window]. ALSO fixes/typos all over --- src/common/cell_renderer_image.py | 115 ++++++++++++++++++++++ src/common/check_for_new_version.py | 21 +++- src/common/config.py | 5 +- src/common/gajim.py | 3 +- src/config.py | 22 ++++- src/dialogs.py | 2 +- src/gajim.py | 143 ++++++---------------------- src/groupchat_window.py | 7 +- src/gtkgui.glade | 20 +++- src/roster_window.py | 11 ++- 10 files changed, 214 insertions(+), 135 deletions(-) create mode 100644 src/common/cell_renderer_image.py diff --git a/src/common/cell_renderer_image.py b/src/common/cell_renderer_image.py new file mode 100644 index 000000000..e222a1f2c --- /dev/null +++ b/src/common/cell_renderer_image.py @@ -0,0 +1,115 @@ +## cell_renderer_image.py +## +## Gajim Team: +## - Yann Le Boulanger +## - Vincent Hanquez +## - Nikos Kouremenos +## +## Copyright (C) 2003-2005 Gajim Team +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published +## by the Free Software Foundation; version 2 only. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## + +import gtk +import gobject + +class CellRendererImage(gtk.GenericCellRenderer): + + __gproperties__ = { + 'image': (gobject.TYPE_OBJECT, 'Image', + 'Image', gobject.PARAM_READWRITE), + } + + def __init__(self): + self.__gobject_init__() + self.image = None + + def do_set_property(self, pspec, value): + setattr(self, pspec.name, value) + + def do_get_property(self, pspec): + return getattr(self, pspec.name) + + def func(self, model, path, iter, (image, tree)): + if model.get_value(iter, 0) == image: + self.redraw = 1 + cell_area = tree.get_cell_area(path, tree.get_column(0)) + tree.queue_draw_area(cell_area.x, cell_area.y, cell_area.width, \ + cell_area.height) + + def animation_timeout(self, tree, image): + if image.get_storage_type() == gtk.IMAGE_ANIMATION: + self.redraw = 0 + image.get_data('iter').advance() + model = tree.get_model() + model.foreach(self.func, (image, tree)) + if self.redraw: + gobject.timeout_add(image.get_data('iter').get_delay_time(), \ + self.animation_timeout, tree, image) + else: + image.set_data('iter', None) + + def on_render(self, window, widget, background_area,cell_area, \ + expose_area, flags): + if not self.image: + return + pix_rect = gtk.gdk.Rectangle() + pix_rect.x, pix_rect.y, pix_rect.width, pix_rect.height = \ + self.on_get_size(widget, cell_area) + + pix_rect.x += cell_area.x + pix_rect.y += cell_area.y + pix_rect.width -= 2 * self.get_property('xpad') + pix_rect.height -= 2 * self.get_property('ypad') + + draw_rect = cell_area.intersect(pix_rect) + draw_rect = expose_area.intersect(draw_rect) + + if self.image.get_storage_type() == gtk.IMAGE_ANIMATION: + if not self.image.get_data('iter'): + animation = self.image.get_animation() + self.image.set_data('iter', animation.get_iter()) + gobject.timeout_add(self.image.get_data('iter').get_delay_time(), \ + self.animation_timeout, widget, self.image) + + pix = self.image.get_data('iter').get_pixbuf() + elif self.image.get_storage_type() == gtk.IMAGE_PIXBUF: + pix = self.image.get_pixbuf() + else: + return + window.draw_pixbuf(widget.style.black_gc, pix, \ + draw_rect.x-pix_rect.x, draw_rect.y-pix_rect.y, draw_rect.x, \ + draw_rect.y+2, draw_rect.width, draw_rect.height, \ + gtk.gdk.RGB_DITHER_NONE, 0, 0) + + def on_get_size(self, widget, cell_area): + if not self.image: + return 0, 0, 0, 0 + if self.image.get_storage_type() == gtk.IMAGE_ANIMATION: + animation = self.image.get_animation() + pix = animation.get_iter().get_pixbuf() + elif self.image.get_storage_type() == gtk.IMAGE_PIXBUF: + pix = self.image.get_pixbuf() + else: + return 0, 0, 0, 0 + pixbuf_width = pix.get_width() + pixbuf_height = pix.get_height() + calc_width = self.get_property('xpad') * 2 + pixbuf_width + calc_height = self.get_property('ypad') * 2 + pixbuf_height + x_offset = 0 + y_offset = 0 + if cell_area and pixbuf_width > 0 and pixbuf_height > 0: + x_offset = self.get_property('xalign') * (cell_area.width - \ + calc_width - self.get_property('xpad')) + y_offset = self.get_property('yalign') * (cell_area.height - \ + calc_height - self.get_property('ypad')) + return x_offset, y_offset, calc_width, calc_height + +gobject.type_register(CellRendererImage) diff --git a/src/common/check_for_new_version.py b/src/common/check_for_new_version.py index 5eb74fba4..f7ca75730 100644 --- a/src/common/check_for_new_version.py +++ b/src/common/check_for_new_version.py @@ -1,3 +1,22 @@ +## common/check_for_new_version.py +## +## Gajim Team: +## - Yann Le Boulanger +## - Vincent Hanquez +## - Nikos Kouremenos +## +## Copyright (C) 2003-2005 Gajim Team +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published +## by the Free Software Foundation; version 2 only. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## + import gtk import gtk.glade @@ -9,7 +28,7 @@ APP = i18n.APP gtk.glade.bindtextdomain(APP, i18n.DIR) gtk.glade.textdomain(APP) -GTKGUI_GLADE='plugins/gtkgui/gtkgui.glade' +GTKGUI_GLADE='gtkgui.glade' class Check_for_new_version_dialog: def __init__(self, plugin): diff --git a/src/common/config.py b/src/common/config.py index d8481ac8e..3030a249b 100644 --- a/src/common/config.py +++ b/src/common/config.py @@ -18,7 +18,7 @@ ## -import re +import sre import copy OPT_TYPE = 0 @@ -87,6 +87,7 @@ class Config: 'before_nickname': [ opt_str, '<' ], 'after_nickname': [ opt_str, '>' ], 'do_not_send_os_info': [ opt_bool, False ], + 'do_not_check_for_new_version': [ opt_bool, False ], 'usegpg': [ opt_bool, False ], 'lognotusr': [ opt_bool, True ], 'lognotsep': [ opt_bool, True ], @@ -236,7 +237,7 @@ class Config: elif type[0] == 'string': return self.is_valid_string(val) else: - return re.match(type[1], val) + return sre.match(type[1], val) def set(self, optname, value): if not self.__options.has_key(optname): diff --git a/src/common/gajim.py b/src/common/gajim.py index 76ada3789..a16c1824f 100644 --- a/src/common/gajim.py +++ b/src/common/gajim.py @@ -3,6 +3,7 @@ ## Gajim Team: ## - Yann Le Boulanger ## - Vincent Hanquez +## - Nikos Kouremenos ## ## Copyright (C) 2003-2005 Gajim Team ## @@ -20,7 +21,7 @@ import logging import common.config import common.logger -version = "0.7" +version = '0.7' config = common.config.Config() connections = {} log = logging.getLogger('Gajim') diff --git a/src/config.py b/src/config.py index c9637d326..78aa477fb 100644 --- a/src/config.py +++ b/src/config.py @@ -22,17 +22,19 @@ import gtk.glade import gobject import os import common.sleepy + +import dialogs +import gtkgui from common import gajim from common import connection from common import i18n +from common import cell_renderer_image + _ = i18n._ APP = i18n.APP gtk.glade.bindtextdomain (APP, i18n.DIR) gtk.glade.textdomain (APP) -import dialogs -import gtkgui - GTKGUI_GLADE='gtkgui.glade' @@ -495,6 +497,12 @@ class Preferences_window: gajim.config.set('do_not_send_os_info', False) self.plugin.save_config() + def on_do_not_check_for_new_version_checkbutton_toggled(self, widget): + if widget.get_active(): + gajim.config.set('do_not_check_for_new_version', True) + else: + gajim.config.set('do_not_check_for_new_version', False) + self.plugin.save_config() def fill_msg_treeview(self): self.xml.get_widget('delete_msg_button').set_sensitive(False) @@ -883,6 +891,12 @@ class Preferences_window: # don't send os info st = gajim.config.get('do_not_send_os_info') self.xml.get_widget('do_not_send_os_info_checkbutton').set_active(st) + + # don't check for new version + st = gajim.config.get('do_not_check_for_new_version') + btn = self.xml.get_widget('do_not_check_for_new_version_checkbutton') + btn.set_active(st) + self.xml.signal_autoconnect(self) self.sound_tree.get_model().connect('row-changed', \ @@ -1485,7 +1499,7 @@ class Add_remove_emoticons_window: col = gtk.TreeViewColumn(_('Image')) self.emot_tree.append_column(col) - renderer = gtkgui.CellRendererImage() + renderer = cell_renderer_image.CellRendererImage() col.pack_start(renderer, expand = False) col.add_attribute(renderer, 'image', 2) diff --git a/src/dialogs.py b/src/dialogs.py index b3970fd52..9c5d064bf 100644 --- a/src/dialogs.py +++ b/src/dialogs.py @@ -1,4 +1,4 @@ -## plugins/dialogs.py +## dialogs.py ## ## Gajim Team: ## - Yann Le Boulanger diff --git a/src/gajim.py b/src/gajim.py index 197e33944..be31ac210 100644 --- a/src/gajim.py +++ b/src/gajim.py @@ -29,10 +29,11 @@ import pango import gobject import os import sre -from common import gajim +import signal import common.sleepy import common.check_for_new_version +from common import gajim from common import i18n i18n.init() _ = i18n._ @@ -48,102 +49,8 @@ try: except ImportError: pass -class CellRendererImage(gtk.GenericCellRenderer): - - __gproperties__ = { - 'image': (gobject.TYPE_OBJECT, 'Image', - 'Image', gobject.PARAM_READWRITE), - } - - def __init__(self): - self.__gobject_init__() - self.image = None - - def do_set_property(self, pspec, value): - setattr(self, pspec.name, value) - - def do_get_property(self, pspec): - return getattr(self, pspec.name) - - def func(self, model, path, iter, (image, tree)): - if model.get_value(iter, 0) == image: - self.redraw = 1 - cell_area = tree.get_cell_area(path, tree.get_column(0)) - tree.queue_draw_area(cell_area.x, cell_area.y, cell_area.width, \ - cell_area.height) - - def animation_timeout(self, tree, image): - if image.get_storage_type() == gtk.IMAGE_ANIMATION: - self.redraw = 0 - image.get_data('iter').advance() - model = tree.get_model() - model.foreach(self.func, (image, tree)) - if self.redraw: - gobject.timeout_add(image.get_data('iter').get_delay_time(), \ - self.animation_timeout, tree, image) - else: - image.set_data('iter', None) - - def on_render(self, window, widget, background_area,cell_area, \ - expose_area, flags): - if not self.image: - return - pix_rect = gtk.gdk.Rectangle() - pix_rect.x, pix_rect.y, pix_rect.width, pix_rect.height = \ - self.on_get_size(widget, cell_area) - - pix_rect.x += cell_area.x - pix_rect.y += cell_area.y - pix_rect.width -= 2 * self.get_property('xpad') - pix_rect.height -= 2 * self.get_property('ypad') - - draw_rect = cell_area.intersect(pix_rect) - draw_rect = expose_area.intersect(draw_rect) - - if self.image.get_storage_type() == gtk.IMAGE_ANIMATION: - if not self.image.get_data('iter'): - animation = self.image.get_animation() - self.image.set_data('iter', animation.get_iter()) - gobject.timeout_add(self.image.get_data('iter').get_delay_time(), \ - self.animation_timeout, widget, self.image) - - pix = self.image.get_data('iter').get_pixbuf() - elif self.image.get_storage_type() == gtk.IMAGE_PIXBUF: - pix = self.image.get_pixbuf() - else: - return - window.draw_pixbuf(widget.style.black_gc, pix, \ - draw_rect.x-pix_rect.x, draw_rect.y-pix_rect.y, draw_rect.x, \ - draw_rect.y+2, draw_rect.width, draw_rect.height, \ - gtk.gdk.RGB_DITHER_NONE, 0, 0) - - def on_get_size(self, widget, cell_area): - if not self.image: - return 0, 0, 0, 0 - if self.image.get_storage_type() == gtk.IMAGE_ANIMATION: - animation = self.image.get_animation() - pix = animation.get_iter().get_pixbuf() - elif self.image.get_storage_type() == gtk.IMAGE_PIXBUF: - pix = self.image.get_pixbuf() - else: - return 0, 0, 0, 0 - pixbuf_width = pix.get_width() - pixbuf_height = pix.get_height() - calc_width = self.get_property('xpad') * 2 + pixbuf_width - calc_height = self.get_property('ypad') * 2 + pixbuf_height - x_offset = 0 - y_offset = 0 - if cell_area and pixbuf_width > 0 and pixbuf_height > 0: - x_offset = self.get_property('xalign') * (cell_area.width - \ - calc_width - self.get_property('xpad')) - y_offset = self.get_property('yalign') * (cell_area.height - \ - calc_height - self.get_property('ypad')) - return x_offset, y_offset, calc_width, calc_height - -gobject.type_register(CellRendererImage) - class User: - """Information concerning each users""" + '''Information concerning each users''' def __init__(self, *args): if len(args) == 0: self.jid = '' @@ -177,7 +84,7 @@ import config GTKGUI_GLADE='gtkgui.glade' -class interface: +class Interface: def launch_browser_mailer(self, kind, url): #kind = 'url' or 'mail' if gajim.config.get('openwith') == 'gnome-open': @@ -207,7 +114,7 @@ class interface: def play_timeout(self, pid): pidp, r = os.waitpid(pid, os.WNOHANG) - return 0 + return False def play_sound(self, event): if not gajim.config.get('sounds_on'): @@ -257,7 +164,7 @@ class interface: if not resource: resource = '' priority = array[4] - if jid.find("@") <= 0: + if jid.find('@') <= 0: #It must be an agent ji = jid.replace('@', '') else: @@ -280,7 +187,7 @@ class interface: if user1.show in statuss: old_show = statuss.index(user1.show) if (resources != [''] and (len(luser) != 1 or - luser[0].show != 'offline')) and not jid.find("@") <= 0: + luser[0].show != 'offline')) and not jid.find('@') <= 0: old_show = 0 user1 = User(user1.jid, user1.name, user1.groups, user1.show, \ user1.status, user1.sub, user1.ask, user1.resource, \ @@ -309,7 +216,7 @@ class interface: user1.status = array[2] user1.priority = priority user1.keyID = keyID - if jid.find("@") <= 0: + if jid.find('@') <= 0: #It must be an agent if self.roster.contacts[account].has_key(ji): #Update existing iter @@ -346,7 +253,7 @@ class interface: def handle_event_msg(self, account, array): #('MSG', account, (user, msg, time)) jid = array[0].split('/')[0] - if jid.find("@") <= 0: + if jid.find('@') <= 0: jid = jid.replace('@', '') if gajim.config.get('ignore_unknown_contacts') and \ not self.roster.contacts[account].has_key(jid): @@ -370,7 +277,7 @@ class interface: def handle_event_msgerror(self, account, array): #('MSGERROR', account, (user, error_code, error_msg, msg, time)) jid = array[0].split('/')[0] - if jid.find("@") <= 0: + if jid.find('@') <= 0: jid = jid.replace('@', '') self.roster.on_message(jid, _('error while sending') + \ ' \"%s\" ( %s )' % (array[3], array[2]), array[4], account) @@ -523,9 +430,9 @@ class interface: self.roster.redraw_jid(jid, account) def read_sleepy(self): - """Check if we are idle""" + '''Check if we are idle''' if not self.sleeper.poll(): - return 1 + return True # renew timeout (loop for ever) state = self.sleeper.getState() for account in gajim.connections: if not self.sleeper_state[account]: @@ -548,10 +455,10 @@ class interface: #we go extended away gajim.connections[account].change_status('xa', 'auto away (idle)') self.sleeper_state[account] = 3 - return 1 + return True # renew timeout (loop for ever) def autoconnect(self): - """auto connect at startup""" + '''auto connect at startup''' ask_message = 0 for a in gajim.connections: if gajim.config.get_per('accounts', a, 'autoconnect'): @@ -564,7 +471,7 @@ class interface: for a in gajim.connections: if gajim.config.get_per('accounts', a, 'autoconnect'): self.roster.send_status(a, 'online', message, 1) - return 0 + return False def show_systray(self): self.systray.show_icon() @@ -681,10 +588,13 @@ class interface: conn.register_handler('ROSTER_INFO', self.handle_event_roster_info) def process_connections(self): - for account in gajim.connections: - if gajim.connections[account].connected: - gajim.connections[account].process(0.01) - return True + try: + for account in gajim.connections: + if gajim.connections[account].connected: + gajim.connections[account].process(0.01) + return True # renew timeout (loop for ever) + except KeyboardInterrupt: + sys.exit() def save_config(self): parser.read_config() @@ -738,7 +648,8 @@ class interface: if self.systray_capabilities: self.show_systray() - common.check_for_new_version.Check_for_new_version_dialog(self) + if not gajim.config.get('do_not_check_for_new_version'): + common.check_for_new_version.Check_for_new_version_dialog(self) self.init_regexp() @@ -752,10 +663,12 @@ class interface: self.register_handlers(gajim.connections[account]) gobject.timeout_add(100, self.autoconnect) - gobject.timeout_add(500, self.read_sleepy) gobject.timeout_add(200, self.process_connections) + gobject.timeout_add(500, self.read_sleepy) if __name__ == '__main__': + signal.signal(signal.SIGINT, signal.SIG_DFL) # ^C exits the application + try: # Import Psyco if available import psyco psyco.full() @@ -764,5 +677,5 @@ if __name__ == '__main__': parser.parseCfgFile() parser.fill_config() - interface() + Interface() gtk.main() diff --git a/src/groupchat_window.py b/src/groupchat_window.py index d8f64eed2..e032d84e7 100644 --- a/src/groupchat_window.py +++ b/src/groupchat_window.py @@ -22,12 +22,11 @@ import gtk.glade import pango import gobject import time -from common import gajim import dialogs import chat -from gtkgui import CellRendererImage - +from common import gajim from common import i18n +from common import cell_renderer_image _ = i18n._ APP = i18n.APP @@ -468,7 +467,7 @@ class Groupchat_window(chat.Chat): #status_image, nickname, real_jid, status store = gtk.TreeStore(gtk.Image, str, str, str) column = gtk.TreeViewColumn('contacts') - renderer_image = CellRendererImage() + renderer_image = cell_renderer_image.CellRendererImage() renderer_image.set_property('width', 20) column.pack_start(renderer_image, expand = False) column.add_attribute(renderer_image, 'image', 0) diff --git a/src/gtkgui.glade b/src/gtkgui.glade index 9ff023a8e..51b0870a2 100644 --- a/src/gtkgui.glade +++ b/src/gtkgui.glade @@ -5829,7 +5829,7 @@ Custom True True - Don't send OS Information + Do not send OS Information True GTK_RELIEF_NORMAL True @@ -5846,7 +5846,23 @@ Custom - + + True + True + Do not check for new version at startup + True + GTK_RELIEF_NORMAL + True + False + False + True + + + + 0 + False + False + diff --git a/src/roster_window.py b/src/roster_window.py index 2c9ce45ea..5461d12c1 100644 --- a/src/roster_window.py +++ b/src/roster_window.py @@ -1,4 +1,4 @@ -## plugins/gtkgui/roster_window.py +## roster_window.py ## ## Gajim Team: ## - Yann Le Boulanger @@ -25,14 +25,15 @@ import os import Queue import common.sleepy -from common import gajim import tabbed_chat_window import groupchat_window import history_window -from gtkgui import CellRendererImage, User import dialogs import config +from gtkgui import User +from common import gajim +from common import cell_renderer_image from common import i18n _ = i18n._ @@ -1359,7 +1360,7 @@ class Roster_window: gobject.TYPE_STRING) self.status_combobox = gtk.ComboBox() self.xml.get_widget('vbox1').pack_end(self.status_combobox, False) - cell = CellRendererImage() + cell = cell_renderer_image.CellRendererImage() self.status_combobox.pack_start(cell, False) self.status_combobox.add_attribute(cell, 'image', 1) cell = gtk.CellRendererText() @@ -1386,7 +1387,7 @@ class Roster_window: #this col has two cells: first one img, second one text col = gtk.TreeViewColumn() - render_pixbuf = CellRendererImage() + render_pixbuf = cell_renderer_image.CellRendererImage() col.pack_start(render_pixbuf, expand = False) col.add_attribute(render_pixbuf, 'image', 0) col.set_cell_data_func(render_pixbuf, self.iconCellDataFunc, None)