~landscape/zope3/newer-from-ztk

« back to all changes in this revision

Viewing changes to src/twisted/words/im/gtkaccount.py

  • Committer: Thomas Hervé
  • Date: 2009-07-08 13:52:04 UTC
  • Revision ID: thomas@canonical.com-20090708135204-df5eesrthifpylf8
Remove twisted copy

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (c) 2001-2004 Twisted Matrix Laboratories.
2
 
# See LICENSE for details.
3
 
 
4
 
 
5
 
try:
6
 
    import cPickle as pickle
7
 
except ImportError:
8
 
    import pickle
9
 
 
10
 
import gtk
11
 
 
12
 
from twisted.words.im.gtkcommon import GLADE_FILE, SETTINGS_FILE, autoConnectMethods,\
13
 
     openGlade
14
 
 
15
 
from twisted.words.im import gtkchat
16
 
 
17
 
### This generic stuff uses the word "account" in a very different way -- chat
18
 
### accounts are potential sources of messages, InstanceMessenger accounts are
19
 
### individual network connections.
20
 
 
21
 
class AccountManager:
22
 
    def __init__(self):
23
 
        self.xml = openGlade(GLADE_FILE, root="MainIMWindow")
24
 
        self.chatui = gtkchat.GtkChatClientUI(self.xml)
25
 
        self.chatui._accountmanager = self # TODO: clean this up... it's used in gtkchat
26
 
        print self.xml._o
27
 
        autoConnectMethods(self, self.chatui.theContactsList)
28
 
        self.widget = self.xml.get_widget("AccountManWidget")
29
 
        self.widget.show_all()
30
 
        try:
31
 
            f = open(SETTINGS_FILE)
32
 
            self.accounts = pickle.load(f)
33
 
            print 'loaded!'
34
 
            self.refreshAccounts()
35
 
        except IOError:
36
 
            self.accounts = []
37
 
            print 'initialized!'
38
 
 
39
 
    def on_ConsoleButton_clicked(self, b):
40
 
        #### For debugging purposes...
41
 
        from twisted.manhole.ui.pywidgets import LocalInteraction
42
 
        l = LocalInteraction()
43
 
        l.localNS['chat'] = self.chatui
44
 
        l.show_all()
45
 
 
46
 
    def created(self, acct):
47
 
        self.accounts.append(acct)
48
 
        self.refreshAccounts()
49
 
 
50
 
    def refreshAccounts(self):
51
 
        w = self.xml.get_widget("accountsList")
52
 
        w.clear()
53
 
        for acct in self.accounts:
54
 
            l = [acct.accountName, acct.isOnline() and 'yes' or 'no',
55
 
                 acct.autoLogin and 'yes' or 'no', acct.gatewayType]
56
 
            w.append(l)
57
 
 
58
 
    def lockNewAccount(self, b):
59
 
        self.xml.get_widget("NewAccountButton").set_sensitive(not b)
60
 
 
61
 
    def on_NewAccountButton_clicked(self, b):
62
 
        NewAccount(self)
63
 
 
64
 
    def on_MainIMWindow_destroy(self, w):
65
 
        print 'Saving...'
66
 
        pickle.dump(self.accounts, open(SETTINGS_FILE,'wb'))
67
 
        print 'Saved.'
68
 
        gtk.mainquit()
69
 
 
70
 
 
71
 
    def on_DeleteAccountButton_clicked(self, b):
72
 
        lw = self.xml.get_widget("accountsList")
73
 
        if lw.selection:
74
 
            del self.accounts[lw.selection[0]]
75
 
            self.refreshAccounts()
76
 
 
77
 
    def on_LogOnButton_clicked(self, b):
78
 
        lw = self.xml.get_widget("accountsList")
79
 
        if lw.selection:
80
 
            self.accounts[lw.selection[0]].logOn(self.chatui)
81
 
 
82
 
 
83
 
class DummyAccountForm:
84
 
    def __init__(self, manager):
85
 
        self.widget = gtk.GtkButton("HELLO")
86
 
 
87
 
    def create(self, sname, autoLogin):
88
 
        return None
89
 
 
90
 
 
91
 
class NewAccount:
92
 
    def __init__(self, manager):
93
 
        self.manager = manager
94
 
        self.manager.lockNewAccount(1)
95
 
        self.xml = openGlade(GLADE_FILE, root="NewAccountWindow")
96
 
        autoConnectMethods(self)
97
 
        self.widget = self.xml.get_widget("NewAccountWindow")
98
 
        self.frame = self.xml.get_widget("GatewayFrame")
99
 
        # Making up for a deficiency in glade.
100
 
        widgetMenu = self.xml.get_widget("GatewayOptionMenu")
101
 
        m = gtk.GtkMenu()
102
 
        activ = 0
103
 
        self.currentGateway = None
104
 
        for name, klas in registeredTypes:
105
 
            i = gtk.GtkMenuItem(name)
106
 
            m.append(i)
107
 
            k = klas(self.manager)
108
 
            i.connect("activate", self.gatewaySelected, k)
109
 
            if not activ:
110
 
                activ = 1
111
 
                self.gatewaySelected(None, k)
112
 
        widgetMenu.set_menu(m)
113
 
        self.widget.show_all()
114
 
 
115
 
    def gatewaySelected(self, ig, k):
116
 
        if self.currentGateway:
117
 
            self.frame.remove(self.currentGateway.widget)
118
 
        self.currentGateway = k
119
 
        self.frame.add(k.widget)
120
 
        k.widget.show_all()
121
 
 
122
 
    def createAccount(self, b):
123
 
        autoLogin = self.xml.get_widget("AutoLogin").get_active()
124
 
        accountName = self.xml.get_widget("accountName").get_text()
125
 
        x = self.currentGateway.create(accountName, autoLogin)
126
 
        if x:
127
 
            self.manager.created(x)
128
 
            self.destroyMe()
129
 
 
130
 
    def destroyMe(self, b=None):
131
 
        self.widget.destroy()
132
 
 
133
 
    def on_NewAccountWindow_destroy(self, w):
134
 
        self.manager.lockNewAccount(0)
135
 
 
136
 
from twisted.words.im.pbsupport import PBAccount
137
 
from twisted.words.im.tocsupport import TOCAccount
138
 
from twisted.words.im.ircsupport import IRCAccount
139
 
 
140
 
 
141
 
class PBAccountForm:
142
 
    def __init__(self, manager):
143
 
        self.manager = manager
144
 
        self.xml = openGlade(GLADE_FILE, root="PBAccountWidget")
145
 
        autoConnectMethods(self)
146
 
        self.widget = self.xml.get_widget("PBAccountWidget")
147
 
        self.on_serviceType_changed()
148
 
        self.selectedRow = None
149
 
 
150
 
    def addPerspective(self, b):
151
 
        stype = self.xml.get_widget("serviceType").get_text()
152
 
        sname = self.xml.get_widget("serviceName").get_text()
153
 
        pname = self.xml.get_widget("perspectiveName").get_text()
154
 
        self.xml.get_widget("serviceList").append([stype, sname, pname])
155
 
 
156
 
    def removePerspective(self, b):
157
 
        if self.selectedRow is not None:
158
 
            self.xml.get_widget("serviceList").remove(self.selectedRow)
159
 
 
160
 
    def on_serviceType_changed(self, w=None):
161
 
        self.xml.get_widget("serviceName").set_text(self.xml.get_widget("serviceType").get_text())
162
 
        self.xml.get_widget("perspectiveName").set_text(self.xml.get_widget("identity").get_text())
163
 
 
164
 
    on_identity_changed = on_serviceType_changed
165
 
 
166
 
    def on_serviceList_select_row(self, slist, row, column, event):
167
 
        self.selectedRow = row
168
 
 
169
 
    def create(self, accName, autoLogin):
170
 
        host = self.xml.get_widget("hostname").get_text()
171
 
        port = self.xml.get_widget("portno").get_text()
172
 
        user = self.xml.get_widget("identity").get_text()
173
 
        pasw = self.xml.get_widget("password").get_text()
174
 
        serviceList = self.xml.get_widget("serviceList")
175
 
        services = []
176
 
        for r in xrange(0, serviceList.rows):
177
 
            row = []
178
 
            for c in xrange(0, serviceList.columns):
179
 
                row.append(serviceList.get_text(r, c))
180
 
            services.append(row)
181
 
        if not services:
182
 
            services.append([
183
 
                self.xml.get_widget("serviceType").get_text(),
184
 
                self.xml.get_widget("serviceName").get_text(),
185
 
                self.xml.get_widget("perspectiveName").get_text()])
186
 
        return PBAccount(accName, autoLogin, user, pasw, host, int(port),
187
 
                         services)
188
 
 
189
 
 
190
 
class TOCAccountForm:
191
 
    def __init__(self, maanger):
192
 
        self.xml = openGlade(GLADE_FILE, root="TOCAccountWidget")
193
 
        self.widget = self.xml.get_widget("TOCAccountWidget")
194
 
 
195
 
    def create(self, accountName, autoLogin):
196
 
        return TOCAccount(
197
 
            accountName, autoLogin,
198
 
            self.xml.get_widget("TOCName").get_text(),
199
 
            self.xml.get_widget("TOCPass").get_text(),
200
 
            self.xml.get_widget("TOCHost").get_text(),
201
 
            int(self.xml.get_widget("TOCPort").get_text()) )
202
 
 
203
 
 
204
 
class IRCAccountForm:
205
 
    def __init__(self, maanger):
206
 
        self.xml = openGlade(GLADE_FILE, root="IRCAccountWidget")
207
 
        self.widget = self.xml.get_widget("IRCAccountWidget")
208
 
 
209
 
    def create(self, accountName, autoLogin):
210
 
        return IRCAccount(
211
 
            accountName, autoLogin,
212
 
            self.xml.get_widget("ircNick").get_text(),
213
 
            self.xml.get_widget("ircPassword").get_text(),
214
 
            self.xml.get_widget("ircServer").get_text(),
215
 
            int(self.xml.get_widget("ircPort").get_text()),
216
 
            self.xml.get_widget("ircChannels").get_text(),
217
 
            )
218
 
 
219
 
 
220
 
 
221
 
registeredTypes = [ ("Twisted", PBAccountForm),
222
 
                    ("AOL Instant Messenger", TOCAccountForm),
223
 
                    ["IRC", IRCAccountForm],
224
 
                    ("Dummy", DummyAccountForm) ]