OLD | NEW |
| (Empty) |
1 # Copyright (c) 2001-2004 Twisted Matrix Laboratories. | |
2 # See LICENSE for details. | |
3 | |
4 # | |
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 | |
10 | |
11 from java.awt import GridLayout, FlowLayout, BorderLayout, Container | |
12 import sys | |
13 from java.awt.event import ActionListener | |
14 from javax.swing import JTextField, JPasswordField, JComboBox, JPanel, JLabel,\ | |
15 JCheckBox, JFrame, JButton, BoxLayout, JTable, JScrollPane, \ | |
16 ListSelectionModel | |
17 from javax.swing.border import TitledBorder | |
18 from javax.swing.table import DefaultTableModel | |
19 | |
20 doublebuffered = 0 | |
21 stype = "twisted.words" | |
22 | |
23 | |
24 class NewAccountGUI: | |
25 def __init__(self, amgui): | |
26 self.amgui = amgui | |
27 self.am = amgui.acctmanager | |
28 self.buildgwinfo() | |
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") | |
35 self.buildpane() | |
36 | |
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()} | |
53 } | |
54 self.displayorder = { "Twisted" : [["Identity Name", "ident"], | |
55 ["Password", "passwd"], | |
56 ["Host", "host"], | |
57 ["Port", "port"], | |
58 ["Service Name", "service"], | |
59 ["Perspective Name", "persp"]], | |
60 "AIM" : [["Screen Name", "ident"], | |
61 ["Password", "passwd"], | |
62 ["Host", "host"], | |
63 ["Port", "port"]], | |
64 "IRC" : [["Nickname", "ident"], | |
65 ["Password", "passwd"], | |
66 ["Host", "host"], | |
67 ["Port", "port"], | |
68 ["Channels", "channels"]] | |
69 } | |
70 | |
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]]) | |
77 | |
78 def buildpane(self): | |
79 gw = JPanel(GridLayout(1, 2), doublebuffered) | |
80 gw.add(JLabel("Gateway")) | |
81 self.gwlist = JComboBox(self.gateways.keys())#, actionPerformed=self.cha
ngegw) | |
82 self.gwlist.setSelectedItem("Twisted") | |
83 gw.add(self.gwlist) | |
84 | |
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) | |
91 | |
92 buttons = JPanel(FlowLayout(), doublebuffered) | |
93 buttons.add(JButton("OK", actionPerformed=self.addaccount)) | |
94 buttons.add(JButton("Cancel", actionPerformed=self.cancel)) | |
95 | |
96 mainpane = self.mainframe.getContentPane() | |
97 mainpane.layout = BoxLayout(mainpane, BoxLayout.Y_AXIS) | |
98 mainpane.add(gw) | |
99 mainpane.add(self.gwoptions) | |
100 mainpane.add(stdoptions) | |
101 mainpane.add(buttons) | |
102 | |
103 def show(self): | |
104 self.mainframe.setLocation(100, 100) | |
105 self.mainframe.pack() | |
106 self.mainframe.show() | |
107 | |
108 #actionlisteners | |
109 def changegw(self, ae): | |
110 self.buildgwoptions(self.gwlist.getSelectedItem()) | |
111 self.mainframe.pack() | |
112 self.mainframe.show() | |
113 | |
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 | |
123 | |
124 if gwselection == "Twisted": | |
125 sname = gw["service"].text | |
126 perspective = gw["persp"].text | |
127 self.am.addAccount(PBAccount(acctname, autologin, name, passwd, | |
128 host, port, | |
129 [[stype, sname, perspective]])) | |
130 elif gwselection == "AIM": | |
131 self.am.addAccount(TOCAccount(acctname, autologin, name, passwd, | |
132 host, port)) | |
133 elif gwselection == "IRC": | |
134 channels = gw["channels"].text | |
135 self.am.addAccount(IRCAccount(acctname, autologin, name, passwd, | |
136 host, port, channels)) | |
137 | |
138 self.amgui.update() | |
139 print "Added new account" | |
140 self.mainframe.dispose() | |
141 | |
142 def cancel(self, ae): | |
143 print "Cancelling new account creation" | |
144 self.mainframe.dispose() | |
145 | |
146 | |
147 class UneditableTableModel(DefaultTableModel): | |
148 def isCellEditable(self, x, y): | |
149 return 0 | |
150 | |
151 class AccountManagementGUI: | |
152 def __init__(self): | |
153 self.acctmanager = AccountManager() | |
154 self.mainframe = JFrame("Account Manager") | |
155 self.chatui = None | |
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 | |
161 | |
162 self.connectbutton = JButton("Connect", actionPerformed=self.connect) | |
163 self.dconnbutton = JButton("Disconnect", actionPerformed=self.disconnect
) | |
164 self.deletebutton = JButton("Delete", actionPerformed=self.deleteAccount
) | |
165 self.buildpane() | |
166 self.mainframe.pack() | |
167 self.mainframe.show() | |
168 | |
169 def buildpane(self): | |
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)) | |
176 | |
177 mainpane = self.mainframe.getContentPane() | |
178 mainpane.layout = BoxLayout(mainpane, BoxLayout.Y_AXIS) | |
179 mainpane.add(JScrollPane(self.table)) | |
180 mainpane.add(buttons) | |
181 self.update() | |
182 | |
183 def update(self): | |
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) | |
189 else: | |
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) | |
197 else: | |
198 self.dconnbutton.setEnabled(1) | |
199 self.connectbutton.setEnabled(1) | |
200 | |
201 #callable button actions | |
202 def connect(self, ae): | |
203 print "Trying to connect" | |
204 row = self.table.getSelectedRow() | |
205 if row < 0: | |
206 print "Trying to connect to an account but no account selected" | |
207 else: | |
208 acctname = self.data.getValueAt(row, 0) | |
209 if not self.chatui: | |
210 self.chatui = twisted.words.im.jychat.JyChatUI() | |
211 self.acctmanager.connect(acctname, self.chatui) | |
212 self.update() | |
213 | |
214 def disconnect(self, ae): | |
215 print "Trying to disconnect" | |
216 row = self.table.getSelectedRow() | |
217 if row < 0: | |
218 print "Trying to logoff an account but no account was selected." | |
219 else: | |
220 acctname = self.data.getValueAt(row, 0) | |
221 self.acctmanager.disconnect(acctname) | |
222 self.update() | |
223 | |
224 def addNewAccount(self, ae): | |
225 print "Starting new account creation" | |
226 NewAccountGUI(self).show() | |
227 | |
228 def deleteAccount(self, ae): | |
229 print "Deleting account" | |
230 row = self.table.getSelectedRow() | |
231 if row < 0: | |
232 print "Trying to delete an account but no account selected" | |
233 else: | |
234 acctname = self.data.getValueAt(row, 0) | |
235 self.acctmanager.delAccount(acctname) | |
236 self.update() | |
237 | |
238 def quit(self, ae): | |
239 self.acctmanager.quit() | |
240 sys.exit() | |
241 | |
242 if __name__ == "__main__": | |
243 n = AccountManagementGUI() | |
OLD | NEW |