missed these files from the last commit (I'm still learning git)
[rox-postal.git] / accounts.py
blobef11e8ac93dd836a60b78750be459b9fef295074
1 import rox, gtk
2 from rox import Menu
4 ADD = 1
5 EDIT = 2
6 DELETE = 3
7 REVERT = 4
9 class AccountEditor(rox.Dialog):
10 last_row = 0
12 def __init__(self, account):
13 rox.Dialog.__init__(self)
14 self.set_title(_('Account Editor'))
15 self.set_size_request(300, -1)
16 self.account = account
17 self.table = gtk.Table(2, 4)
18 self.vbox.add(self.table)
19 self.add_str(_('Name: '), 'name', account.name)
20 self.add_num(_('Poll Time (minutes): '), 'polltime',
21 account.polltime, min = 0.1, max = 1440.0,
22 step = 0.1, page = 1, digits = 1)
23 self.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK)
24 self.set_default_response(gtk.RESPONSE_OK)
26 def add_row(self, label, widget):
27 n = self.last_row
28 self.table.attach(gtk.Label(label), 0, 1, n, n+1, 0, 0)
29 self.table.attach(widget, 1, 2, n, n+1, gtk.EXPAND|gtk.FILL, 0)
30 self.last_row += 1
32 def add_num(self, label, name, value, min=1, max=65535, step=1, page=10, digits = 0):
33 entry = gtk.SpinButton()
34 entry.set_range(min, max)
35 entry.set_increments(step, page)
36 entry.set_digits(digits)
37 entry.set_value(value)
38 entry.connect('value-changed', self.set_num, name)
39 self.add_row(label, entry)
41 def set_num(self, widget, name):
42 self.account.__dict__[name] = widget.get_value()
44 def add_str(self, label, name, value, visible=True):
45 entry = gtk.Entry()
46 entry.set_text(value)
47 entry.set_visibility(visible)
48 entry.connect('changed', self.set_str, name)
49 self.add_row(label, entry)
51 def set_str(self, widget, name):
52 self.account.__dict__[name] = widget.get_text()
54 def add_list(self, label, name, value):
55 string = ','.join(value)
56 entry = gtk.Entry()
57 entry.set_text(string)
58 entry.connect('changed', self.set_list, name)
59 self.add_row(label, entry)
61 def set_list(self, widget, name):
62 string = widget.get_text()
63 self.account.__dict__[name] = string.split(',')
65 def add_bool(self, label, name, value, text=None):
66 item = gtk.CheckButton(label=text)
67 item.set_active(value)
68 item.connect('toggled', self.set_bool, name)
69 self.add_row(label, item)
71 def set_bool(self, widget, name):
72 self.account.__dict__[name] = widget.get_active()
74 class MBOXEditor(AccountEditor):
75 def __init__(self, account):
76 AccountEditor.__init__(self, account)
77 self.set_title(_('MBOX Account Editor'))
78 self.add_str(_('Path: '), 'filename', account.filename)
79 self.show_all()
81 class IMAPEditor(AccountEditor):
82 def __init__(self, account):
83 AccountEditor.__init__(self, account)
84 self.set_title(_('IMAP Account Editor'))
85 self.add_str(_('Server: '), 'server', account.server)
86 self.add_num(_('Port: '), 'port', account.port, 1, 65535, 1, 100)
87 self.add_str(_('Username: '), 'username', account.username)
88 self.add_str(_('Password: '), 'password', account.password, False)
89 self.add_list(_('Folders: '), 'folders', account.folders)
90 self.add_bool(_('SSL: '), 'ssl', account.ssl)
91 self.show_all()
93 class POPEditor(AccountEditor):
94 def __init__(self, account):
95 AccountEditor.__init__(self, account)
96 self.set_title(_('POP Account Editor'))
97 self.add_str(_('Server: '), 'server', account.server)
98 self.add_num(_('Port: '), 'port', account.port, 1, 65535, 1, 100)
99 self.add_str(_('Username: '), 'username', account.username)
100 self.add_str(_('Password: '), 'password', account.password, False)
101 self.add_bool(_('SSL: '), 'ssl', account.ssl)
102 self.add_bool(_('APOP: '), 'apop', account.apop)
103 self.show_all()
106 class AccountList(rox.Dialog):
107 def __init__(self, accounts):
108 rox.Dialog.__init__(self)
109 self.set_title(_('Postal: Account Editor'))
111 hbox = gtk.HBox()
112 self.vbox.pack_start(hbox)
113 swin = gtk.ScrolledWindow()
114 swin.set_size_request(-1, 200)
115 hbox.pack_start(swin)
117 self.accts = gtk.ListStore(str, str, object)
118 if accounts != None:
119 for acct in accounts:
120 row = self.accts.append()
121 self.accts.set(row, 0, acct.name, 1, acct.protocol, 2, acct)
123 view = gtk.TreeView(self.accts)
124 view.append_column(gtk.TreeViewColumn(_('Name'), gtk.CellRendererText(), text=0))
125 view.append_column(gtk.TreeViewColumn(_('Type'), gtk.CellRendererText(), text=1))
126 view.connect('row-activated', self.select_row)
127 swin.add(view)
129 self.view = view
130 self.accounts = accounts
132 def response(self, resp):
133 if resp == EDIT:
134 self.edit()
135 elif resp == DELETE:
136 self.remove()
137 elif resp == ADD:
138 self.add()
139 else:
140 return False
141 self.emit_stop_by_name('response')
142 return True
144 self.connect('response', response)
145 self.add_button(gtk.STOCK_ADD, ADD)
146 self.add_button(gtk.STOCK_DELETE, DELETE)
147 self.add_button(gtk.STOCK_EDIT, EDIT)
148 self.add_button(gtk.STOCK_CLOSE, gtk.RESPONSE_CANCEL)
149 self.set_default_response(gtk.RESPONSE_CANCEL)
151 self.vbox.show_all()
152 self.action_area.show_all()
154 def select_row(self, list, path, *stuff):
155 model = list.get_model()
156 row = model.get_iter(path)
157 account = model.get_value(row, 2)
158 self.edit_account(account)
160 def add(self):
161 items = []
162 items.append(Menu.Action(_('IMAP'), 'add_account', None, None, ('IMAP',)))
163 items.append(Menu.Action(_('POP'), 'add_account', None, None, ('POP',)))
164 items.append(Menu.Action(_('MBOX'), 'add_account', None, None, ('MBOX',)))
165 menu = Menu.Menu('choose', items)
166 menu.attach(self, self)
167 menu.popup(self, None)
169 def add_account(self, account_type):
170 if account_type == 'IMAP':
171 import imap_check
172 account = imap_check.IMAPChecker()
173 elif account_type == 'POP':
174 import pop_check
175 account = pop_check.POPChecker()
176 elif account_type == 'MBOX':
177 import mbox_check
178 account = mbox_check.MBOXChecker()
179 else:
180 return
181 self.edit_account(account)
182 self.accts.append([account.name, account.protocol, account])
183 self.accounts.append(account)
185 def remove(self):
186 model, row = self.view.get_selection().get_selected()
187 path = model.get_path(row)
188 model.remove(row)
189 del self.accounts[path[0]]
191 def edit(self):
192 model, row = self.view.get_selection().get_selected()
193 account = model.get_value(row, 2)
194 self.edit_account(account)
195 model.set(row, 0, account.name, 1, account.protocol, 2, account)
197 def edit_account(self, account):
198 if account.protocol == 'IMAP':
199 dlg = IMAPEditor(account)
200 elif account.protocol == 'MBOX':
201 dlg = MBOXEditor(account)
202 elif account.protocol == 'POP':
203 dlg = POPEditor(account)
204 else:
205 return
206 dlg.set_transient_for(self)
207 dlg.set_modal(True)
208 dlg.run()
209 dlg.destroy()