1
# Copyright (c) 2001-2004 Twisted Matrix Laboratories.
2
# See LICENSE for details.
5
from twisted.words.im.baseaccount import AccountManager
6
from twisted.words.im.pbsupport import PBAccount
7
from twisted.words.im.tocsupport import TOCAccount
8
from twisted.words.im.ircsupport import IRCAccount
9
import twisted.words.im.jychat
11
from java.awt import GridLayout, FlowLayout, BorderLayout, Container
13
from java.awt.event import ActionListener
14
from javax.swing import JTextField, JPasswordField, JComboBox, JPanel, JLabel,\
15
JCheckBox, JFrame, JButton, BoxLayout, JTable, JScrollPane, \
17
from javax.swing.border import TitledBorder
18
from javax.swing.table import DefaultTableModel
21
stype = "twisted.words"
25
def __init__(self, amgui):
27
self.am = amgui.acctmanager
29
self.autologin = JCheckBox("Automatically Log In")
30
self.acctname = JTextField()
31
self.gwoptions = JPanel(doublebuffered)
32
self.gwoptions.border = TitledBorder("Gateway Options")
33
self.buildgwoptions("Twisted")
34
self.mainframe = JFrame("New Account Window")
37
def buildgwinfo(self):
38
self.gateways = {"Twisted" : {"ident" : JTextField(),
39
"passwd" : JPasswordField(),
40
"host" : JTextField("twistedmatrix.com"),
41
"port" : JTextField("8787"),
42
"service" : JTextField("twisted.words"),
43
"persp" : JTextField()},
44
"AIM" : {"ident" : JTextField(),
45
"passwd" : JPasswordField(),
46
"host" : JTextField("toc.oscar.aol.com"),
47
"port" : JTextField("9898")},
48
"IRC" : {"ident" : JTextField(),
49
"passwd" : JPasswordField(),
50
"host" : JTextField(),
51
"port" : JTextField("6667"),
52
"channels" : JTextField()}
54
self.displayorder = { "Twisted" : [["Identity Name", "ident"],
55
["Password", "passwd"],
58
["Service Name", "service"],
59
["Perspective Name", "persp"]],
60
"AIM" : [["Screen Name", "ident"],
61
["Password", "passwd"],
64
"IRC" : [["Nickname", "ident"],
65
["Password", "passwd"],
68
["Channels", "channels"]]
71
def buildgwoptions(self, gw):
72
self.gwoptions.removeAll()
73
self.gwoptions.layout = GridLayout(len(self.gateways[gw]), 2)
74
for mapping in self.displayorder[gw]:
75
self.gwoptions.add(JLabel(mapping[0]))
76
self.gwoptions.add(self.gateways[gw][mapping[1]])
79
gw = JPanel(GridLayout(1, 2), doublebuffered)
80
gw.add(JLabel("Gateway"))
81
self.gwlist = JComboBox(self.gateways.keys())#, actionPerformed=self.changegw)
82
self.gwlist.setSelectedItem("Twisted")
85
stdoptions = JPanel(GridLayout(2, 2), doublebuffered)
86
stdoptions.border = TitledBorder("Standard Options")
87
stdoptions.add(JLabel())
88
stdoptions.add(self.autologin)
89
stdoptions.add(JLabel("Account Name"))
90
stdoptions.add(self.acctname)
92
buttons = JPanel(FlowLayout(), doublebuffered)
93
buttons.add(JButton("OK", actionPerformed=self.addaccount))
94
buttons.add(JButton("Cancel", actionPerformed=self.cancel))
96
mainpane = self.mainframe.getContentPane()
97
mainpane.layout = BoxLayout(mainpane, BoxLayout.Y_AXIS)
99
mainpane.add(self.gwoptions)
100
mainpane.add(stdoptions)
101
mainpane.add(buttons)
104
self.mainframe.setLocation(100, 100)
105
self.mainframe.pack()
106
self.mainframe.show()
109
def changegw(self, ae):
110
self.buildgwoptions(self.gwlist.getSelectedItem())
111
self.mainframe.pack()
112
self.mainframe.show()
114
def addaccount(self, ae):
115
gwselection = self.gwlist.getSelectedItem()
116
gw = self.gateways[gwselection]
117
name = gw["ident"].text
118
passwd = gw["passwd"].text
119
host = gw["host"].text
120
port = int(gw["port"].text)
121
autologin = self.autologin.isSelected()
122
acctname = self.acctname.text
124
if gwselection == "Twisted":
125
sname = gw["service"].text
126
perspective = gw["persp"].text
127
self.am.addAccount(PBAccount(acctname, autologin, name, passwd,
129
[[stype, sname, perspective]]))
130
elif gwselection == "AIM":
131
self.am.addAccount(TOCAccount(acctname, autologin, name, passwd,
133
elif gwselection == "IRC":
134
channels = gw["channels"].text
135
self.am.addAccount(IRCAccount(acctname, autologin, name, passwd,
136
host, port, channels))
139
print "Added new account"
140
self.mainframe.dispose()
142
def cancel(self, ae):
143
print "Cancelling new account creation"
144
self.mainframe.dispose()
147
class UneditableTableModel(DefaultTableModel):
148
def isCellEditable(self, x, y):
151
class AccountManagementGUI:
153
self.acctmanager = AccountManager()
154
self.mainframe = JFrame("Account Manager")
156
self.headers = ["Account Name", "Status", "Autologin", "Gateway"]
157
self.data = UneditableTableModel([], self.headers)
158
self.table = JTable(self.data)
159
self.table.columnSelectionAllowed = 0 #cannot select columns
160
self.table.selectionMode = ListSelectionModel.SINGLE_SELECTION
162
self.connectbutton = JButton("Connect", actionPerformed=self.connect)
163
self.dconnbutton = JButton("Disconnect", actionPerformed=self.disconnect)
164
self.deletebutton = JButton("Delete", actionPerformed=self.deleteAccount)
166
self.mainframe.pack()
167
self.mainframe.show()
170
buttons = JPanel(FlowLayout(), doublebuffered)
171
buttons.add(self.connectbutton)
172
buttons.add(self.dconnbutton)
173
buttons.add(JButton("New", actionPerformed=self.addNewAccount))
174
buttons.add(self.deletebutton)
175
buttons.add(JButton("Quit", actionPerformed=self.quit))
177
mainpane = self.mainframe.getContentPane()
178
mainpane.layout = BoxLayout(mainpane, BoxLayout.Y_AXIS)
179
mainpane.add(JScrollPane(self.table))
180
mainpane.add(buttons)
184
self.data.setDataVector(self.acctmanager.getSnapShot(), self.headers)
185
if self.acctmanager.isEmpty():
186
self.deletebutton.setEnabled(0)
187
self.connectbutton.setEnabled(0)
188
self.dconnbutton.setEnabled(0)
190
self.deletebutton.setEnabled(1)
191
if not 1 in self.acctmanager.getConnectionInfo(): #all disconnected
192
self.dconnbutton.setEnabled(0)
193
self.connectbutton.setEnabled(1)
194
elif not 0 in self.acctmanager.getConnectionInfo(): #all connected
195
self.dconnbutton.setEnabled(1)
196
self.connectbutton.setEnabled(0)
198
self.dconnbutton.setEnabled(1)
199
self.connectbutton.setEnabled(1)
201
#callable button actions
202
def connect(self, ae):
203
print "Trying to connect"
204
row = self.table.getSelectedRow()
206
print "Trying to connect to an account but no account selected"
208
acctname = self.data.getValueAt(row, 0)
210
self.chatui = twisted.words.im.jychat.JyChatUI()
211
self.acctmanager.connect(acctname, self.chatui)
214
def disconnect(self, ae):
215
print "Trying to disconnect"
216
row = self.table.getSelectedRow()
218
print "Trying to logoff an account but no account was selected."
220
acctname = self.data.getValueAt(row, 0)
221
self.acctmanager.disconnect(acctname)
224
def addNewAccount(self, ae):
225
print "Starting new account creation"
226
NewAccountGUI(self).show()
228
def deleteAccount(self, ae):
229
print "Deleting account"
230
row = self.table.getSelectedRow()
232
print "Trying to delete an account but no account selected"
234
acctname = self.data.getValueAt(row, 0)
235
self.acctmanager.delAccount(acctname)
239
self.acctmanager.quit()
242
if __name__ == "__main__":
243
n = AccountManagementGUI()