root/branches/gajim_0.8/src/history_window.py

Revision 2580, 6.5 kB (checked in by nk, 3 years ago)

get_nb_line becomes get_no_of_lines; marked for translation title in history window

Line 
1##      history_window.py
2##
3## Gajim Team:
4##      - Yann Le Boulanger <asterix@lagaule.org>
5##      - Vincent Hanquez <tab@snarc.org>
6##      - Nikos Kouremenos <kourem@gmail.com>
7##
8##      Copyright (C) 2003-2005 Gajim Team
9##
10## This program is free software; you can redistribute it and/or modify
11## it under the terms of the GNU General Public License as published
12## by the Free Software Foundation; version 2 only.
13##
14## This program is distributed in the hope that it will be useful,
15## but WITHOUT ANY WARRANTY; without even the implied warranty of
16## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17## GNU General Public License for more details.
18##
19
20import gtk
21import gtk.glade
22import time
23
24from common import gajim
25from common import i18n
26
27_ = i18n._
28APP = i18n.APP
29gtk.glade.bindtextdomain(APP, i18n.DIR)
30gtk.glade.textdomain(APP)
31
32GTKGUI_GLADE = 'gtkgui.glade'
33
34class HistoryWindow:
35        """Class for bowser agent window:
36        to know the agents on the selected server"""
37        def on_history_window_destroy(self, widget):
38                del self.plugin.windows['logs'][self.jid]
39
40        def on_close_button_clicked(self, widget):
41                self.window.destroy()
42
43        def on_earliest_button_clicked(self, widget):
44                start, end = self.history_buffer.get_bounds()
45                self.history_buffer.delete(start, end)
46                self.earliest_button.set_sensitive(False)
47                self.previous_button.set_sensitive(False)
48                self.forward_button.set_sensitive(True)
49                self.latest_button.set_sensitive(True)
50                end = 50
51                if end > self.no_of_lines:
52                        end = self.no_of_lines
53                nb, lines = gajim.logger.read(self.jid, 0, end)
54                self.set_buttons_sensitivity(nb)
55                for line in lines:
56                        self.new_line(line[0], line[1], line[2:])
57                self.num_begin = 0
58
59        def on_previous_button_clicked(self, widget):
60                start, end = self.history_buffer.get_bounds()
61                self.history_buffer.delete(start, end)
62                self.earliest_button.set_sensitive(True)
63                self.previous_button.set_sensitive(True)
64                self.forward_button.set_sensitive(True)
65                self.latest_button.set_sensitive(True)
66                begin = self.num_begin - 50
67                if begin < 0:
68                        begin = 0
69                end = begin + 50
70                if end > self.no_of_lines:
71                        end = self.no_of_lines
72                nb, lines = gajim.logger.read(self.jid, begin, end)
73                self.set_buttons_sensitivity(nb)
74                for line in lines:
75                        self.new_line(line[0], line[1], line[2:])
76                self.num_begin = begin
77
78        def on_forward_button_clicked(self, widget):
79                start, end = self.history_buffer.get_bounds()
80                self.history_buffer.delete(start, end)
81                self.earliest_button.set_sensitive(True)
82                self.previous_button.set_sensitive(True)
83                self.forward_button.set_sensitive(True)
84                self.latest_button.set_sensitive(True)
85                begin = self.num_begin + 50
86                if begin > self.no_of_lines:
87                        begin = self.no_of_lines
88                end = begin + 50
89                if end > self.no_of_lines:
90                        end = self.no_of_lines
91                nb, lines = gajim.logger.read(self.jid, begin, end)
92                self.set_buttons_sensitivity(nb)
93                for line in lines:
94                        self.new_line(line[0], line[1], line[2:])
95                self.num_begin = begin
96
97        def on_latest_button_clicked(self, widget):
98                start, end = self.history_buffer.get_bounds()
99                self.history_buffer.delete(start, end)
100                self.earliest_button.set_sensitive(True)
101                self.previous_button.set_sensitive(True)
102                self.forward_button.set_sensitive(False)
103                self.latest_button.set_sensitive(False)
104                begin = self.no_of_lines - 50
105                if begin < 0:
106                        begin = 0
107                nb, lines = gajim.logger.read(self.jid, begin, self.no_of_lines)
108                self.set_buttons_sensitivity(nb)
109                for line in lines:
110                        self.new_line(line[0], line[1], line[2:])
111                self.num_begin = begin
112
113        def set_buttons_sensitivity(self, nb):
114                if nb == 50:
115                        self.earliest_button.set_sensitive(False)
116                        self.previous_button.set_sensitive(False)
117                if nb == self.no_of_lines:
118                        self.forward_button.set_sensitive(False)
119                        self.latest_button.set_sensitive(False)
120
121        def new_line(self, date, type, data):
122                """write a new line"""
123                buff = self.history_buffer
124                start_iter = buff.get_start_iter()
125                tim = time.strftime('[%x %X] ', time.localtime(float(date)))
126                buff.insert(start_iter, tim)
127                name = None
128                tag_name = ''
129                tag_msg = ''
130                if type == 'gc':
131                        name = data[0]
132                        msg = ':'.join(data[1:])
133                        tag_name = 'incoming'
134                elif type == 'gcstatus':
135                        nick = data[0]
136                        show = data[1]
137                        status_msg = ':'.join(data[2:])
138                        msg = _('%s is now %s: %s') % (nick, show, status_msg)
139                        tag_msg = 'status'
140                elif type == 'recv':
141                        try:
142                                name = gajim.contacts[self.account][self.jid][0].name
143                        except:
144                                name = None
145                        if not name:
146                                name = self.jid.split('@')[0]
147                        msg = ':'.join(data[0:])
148                        tag_name = 'incoming'
149                elif type == 'sent':
150                        name = gajim.nicks[self.account]
151                        msg = ':'.join(data[0:])
152                        tag_name = 'outgoing'
153                else:
154                        status_msg = ':'.join(data[1:])
155                        msg = _('Status is now: %s: %s') % (data[0], status_msg)
156                        tag_msg = 'status'
157
158                if name:
159                        before_str = gajim.config.get('before_nickname')
160                        after_str = gajim.config.get('after_nickname')
161                        format = before_str + name + after_str + ' '
162                        buff.insert_with_tags_by_name(start_iter, format, tag_name)
163                if tag_msg:
164                        buff.insert_with_tags_by_name(start_iter, msg, tag_msg)
165                else:
166                        buff.insert(start_iter, msg)
167       
168        def __init__(self, plugin, jid, account):
169                self.plugin = plugin
170                self.jid = jid
171                self.account = account
172                self.no_of_lines = gajim.logger.get_no_of_lines(jid)
173                xml = gtk.glade.XML(GTKGUI_GLADE, 'history_window', APP)
174                self.window = xml.get_widget('history_window')
175                if account and gajim.contacts[account].has_key(jid):
176                        contact = gajim.get_first_contact_instance_from_jid(account, jid)
177                        title = _('Conversation History with %s') % contact.name
178                else:
179                        title = _('Conversation History with %s') % jid
180                self.window.set_title(title)
181                self.history_buffer = xml.get_widget('history_textview').get_buffer()
182                self.earliest_button = xml.get_widget('earliest_button')
183                self.previous_button = xml.get_widget('previous_button')
184                self.forward_button = xml.get_widget('forward_button')
185                self.latest_button = xml.get_widget('latest_button')
186                xml.signal_autoconnect(self)
187
188                tag = self.history_buffer.create_tag('incoming')
189                color = gajim.config.get('inmsgcolor')
190                tag.set_property('foreground', color)
191
192                tag = self.history_buffer.create_tag('outgoing')
193                color = gajim.config.get('outmsgcolor')
194                tag.set_property('foreground', color)
195
196                tag = self.history_buffer.create_tag('status')
197                color = gajim.config.get('statusmsgcolor')
198                tag.set_property('foreground', color)
199
200                begin = 0
201                if self.no_of_lines > 50:
202                        begin = self.no_of_lines - 50
203                nb, lines = gajim.logger.read(self.jid, begin, self.no_of_lines)
204                self.set_buttons_sensitivity(nb)
205                for line in lines:
206                        self.new_line(line[0], line[1], line[2:])
207                self.num_begin = begin
208                self.window.show_all()
Note: See TracBrowser for help on using the browser.