## $Id: prefs.py,v 1.72 2001/10/16 17:48:32 kjetilja Exp $
## System modules
from gtk import *
from gnome.ui import *
from gnome.config import *
from posixpath import split
import os, glob, sys
## Local import pwdmodules
import folderops, fileops, fonts
## Error messages from the GUI
err1 = """You must specify at least one account!"""
err2 = """You must specify a host for outgoing mail!"""
err3 = """Unable to create mail folder directory: \n %s"""
WIN_SIZE = 0
FLD_SIZE = 1
MSG_SIZE = 2
LST_SIZE = 3
## Name of the default account
DEF_ACC = "New account"
## Old GnomeUI modules have a typo here
class PFontPicker(GnomeFontPicker):
def __init__(self, _obj=None):
GnomeFontPicker.__init__(self, _obj)
def get_font_name(self):
import _gnomeui
return _gnomeui.gnome_font_picker_get_font_name(self._o)
##
##
## Preferences class
##
##
class Preferences:
##
## Method __init__ (self)
##
## Constructor for preferences class.
##
##
def __init__(self):
launch_preferences = 0
if not has_section('pygmy/prefs'):
launch_preferences = 1
self.accounts = {}
self.filepaths = {}
account_names = get_vector('pygmy/prefs/account_names')
for name in account_names:
self.accounts[name] = get_vector('pygmy/accounts/%s' % name)
if self.accounts[name][0][0] == '_':
self.accounts[name] = map(lambda x: x[1:], self.accounts[name])
self.defacc = get_string('pygmy/prefs/defacc') or ''
# Keep temporarily for consistency with older versions of Pygmy
self.usemailserver = get_bool('pygmy/prefs/usemailserver') or 0
self.serverentry = get_string('pygmy/prefs/serverentry') or "smtp"
self.usesendmail = get_bool('pygmy/prefs/usesendmail') or 0
self.sendmailentry = get_string('pygmy/prefs/sendmailentry') or "/usr/lib/sendmail"
# End of consistency check
self.external_cmd = get_string('pygmy/prefs/external_cmd') or ""
self.invoke_at_startup = get_bool('pygmy/prefs/invoke_at_startup') or 0
self.mailnotify = get_bool('pygmy/prefs/mailnotify') or 0
self.addsig = get_bool('pygmy/prefs/addsig') or 0
self.sigreply = get_string('pygmy/prefs/sigreply') or 'none'
self.sigforward = get_string('pygmy/prefs/sigforward') or 'none'
self.expand = get_bool('pygmy/prefs/expand') or 0
self.confirmsend = get_bool('pygmy/prefs/confirmsend') or 0
self.fillwidth = get_int('pygmy/prefs/fillwidth') or 74
self.view_to = get_bool('pygmy/prefs/view_to') or 0
self.view_cc = get_bool('pygmy/prefs/view_cc') or 0
self.trash = get_bool('pygmy/prefs/trash') or 0
self.default_folders = ('inbox', 'sent-mail', 'drafts', 'trash')
self.filter_start = get_bool('pygmy/prefs/filter_start') or 0
self.gtkhtml = get_bool('pygmy/prefs/gtkhtml') or 0
self.citechar = get_string('pygmy/prefs/citechar') or ">"
self.prefix = get_string('pygmy/prefs/prefix') or "Re:"
self.forward = get_string('pygmy/prefs/forward') or "Fw:"
self.usebuiltined = get_bool('pygmy/prefs/usebuiltined') or \
not get_bool('pygmy/prefs/useexternaled')
self.externaledentry = get_string('pygmy/prefs/externaledentry') or "/usr/bin/vim"
self.editorhints = get_string('pygmy/prefs/editorhints') or 'none'
self.fld_font = get_string('pygmy/prefs/fld_font') or fonts.NORMAL_FONT
self.sub_font = get_string('pygmy/prefs/sub_font') or fonts.NORMAL_FONT
self.msg_font = get_string('pygmy/prefs/msg_font') or fonts.NORMAL_FONT
self.compose_font = get_string('pygmy/prefs/compose_font') or fonts.NORMAL_FONT
self.externaled_font = get_string('pygmy/prefs/externaled_font') or fonts.EXTERNALED_FONT
default_sizes = [[560, 560], [170, 280], [520, 280], [10, 100, 290, 10, 20]]
self.size = range(len(default_sizes))
for index in range(len(default_sizes)):
vec = get_vector('pygmy/geometry/win_%d' % index)
vec = map(lambda x: int(x), vec)
self.size[index] = vec or default_sizes[index]
fp = get_vector('pygmy/prefs/default_filepaths')
for name in fp:
self.filepaths[name] = get_string('pygmy/filepaths/%s' % name)
homedir = fileops.gethomedir()
self.alistfile = get_string('pygmy/prefs/alistfile') or \
os.path.join(homedir, ".pygmy-adrlist")
self.flistfile = get_string('pygmy/prefs/flistfile') or \
os.path.join(homedir, ".pygmy-filterlist")
self.spoolfile = get_string('pygmy/prefs/spoolfile') or \
fileops.getmailfile()
self.folders = get_string('pygmy/prefs/folders') or \
os.path.join(homedir, "Mail")
self.more = get_bool('pygmy/prefs/moreheaders') or 0
self.version = "0.6.0"
if launch_preferences:
p = PreferencesWindow(self)
p.mainloop()
##
## Method save (self)
##
## Save the current configuration.
##
##
def save(self):
set_bool('pygmy/prefs/filter_start', self.filter_start)
set_bool('pygmy/prefs/gtkhtml', self.gtkhtml)
set_string('pygmy/prefs/defacc', self.defacc)
# set_bool('pygmy/prefs/usemailserver', self.usemailserver)
# set_string('pygmy/prefs/serverentry', self.serverentry)
# set_bool('pygmy/prefs/usesendmail', self.usesendmail)
set_string('pygmy/prefs/external_cmd', self.external_cmd)
set_bool('pygmy/prefs/invoke_at_startup', self.invoke_at_startup)
set_bool('pygmy/prefs/mailnotify', self.mailnotify)
set_bool('pygmy/prefs/addsig', self.addsig)
set_string('pygmy/prefs/sigreply', self.sigreply)
set_string('pygmy/prefs/sigforward', self.sigforward)
set_bool('pygmy/prefs/expand', self.expand)
set_bool('pygmy/prefs/confirmsend', self.confirmsend)
set_int('pygmy/prefs/fillwidth', self.fillwidth)
set_bool('pygmy/prefs/view_cc', self.view_cc)
set_bool('pygmy/prefs/view_to', self.view_to)
set_bool('pygmy/prefs/trash', self.trash)
set_string('pygmy/prefs/citechar', self.citechar)
set_string('pygmy/prefs/prefix', self.prefix)
set_string('pygmy/prefs/forward', self.forward)
set_string('pygmy/prefs/fld_font', self.fld_font)
set_string('pygmy/prefs/sub_font', self.sub_font)
set_string('pygmy/prefs/msg_font', self.msg_font)
set_string('pygmy/prefs/compose_font', self.compose_font)
set_string('pygmy/prefs/externaled_font', self.externaled_font)
set_string('pygmy/prefs/version', self.version)
set_vector('pygmy/prefs/default_folders', self.default_folders)
set_string('pygmy/prefs/alistfile', self.alistfile)
set_string('pygmy/prefs/flistfile', self.flistfile)
set_string('pygmy/prefs/spoolfile', self.spoolfile)
set_string('pygmy/prefs/folders', self.folders)
# Editor preferences
set_bool('pygmy/prefs/usebuiltined', self.usebuiltined )
set_bool('pygmy/prefs/useexternaled', not self.usebuiltined )
set_string('pygmy/prefs/externaledentry', self.externaledentry )
set_string('pygmy/prefs/editorhints', self.editorhints )
clean_section('pygmy/accounts')
set_vector('pygmy/prefs/account_names', self.accounts.keys())
for name in self.accounts.keys():
# For consistency with older than 0.5.13 preferences file
if len(self.accounts[name]) == 4:
if self.usesendmail:
self.accounts[name] = self.accounts[name] + \
['', self.sendmailentry]
else:
self.accounts[name] = self.accounts[name] + \
[self.serverentry, '']
self.usemailserver, self.sendmailentry, self.usesendmail,\
self.sendmailentry = 0, '', 0, ''
# End of consistency check
if self.accounts[name][4] != '': self.accounts[name][5] = ''
set_vector('pygmy/accounts/%s' % name, map(lambda x: '_'+ x,
self.accounts[name][:]))
clean_section('pygmy/geometry')
index = 0
for set in self.size:
vec = map(lambda x: str(x), self.size[index])
set_vector('pygmy/geometry/win_%d' % index, vec)
index = index + 1
clean_section('pygmy/filepaths')
set_vector('pygmy/prefs/default_filepaths', self.filepaths.keys())
for name in self.filepaths.keys():
set_string('pygmy/filepaths/%s' % name, self.filepaths[name] or '' )
set_bool('pygmy/prefs/moreheaders', self.more)
sync()
##
##
## Preferences Window class
##
##
class PreferencesWindow:
##
## Method __init__ (self, prefs instance, parent window instance)
##
## Constructor for preferences window.
##
##
def __init__(self, prefs, parent=None):
from gnome.zvt import ZvtTerm
self.win = GnomeDialog(':Pygmy - Preferences', 'Ok', 'Cancel')
self.vbox = self.win.vbox
self.prefs = prefs
self.dialogs = {}
self.entry = prefs.accounts.copy()
self.externaled_support = "writechild" in dir(ZvtTerm)
if not self.externaled_support:
self.prefs.usebuiltined = 0
# Set parent window if supplied
if parent != None:
self.win.set_parent(parent)
self.win.connect('delete_event', mainquit)
self.win.connect('destroy', mainquit)
self.win.connect('clicked', self.handle_callbacks)
self.init_notebook()
self.vbox.show()
self.win.show()
##
## Method handle_callbacks (self, button, no)
##
## Handle callbacks for the action buttons.
##
##
def handle_callbacks(self, button, no):
if no == 0:
# Propagate configuration from the preferences window
if self.entry.has_key(DEF_ACC):
del self.entry[DEF_ACC]
self.prefs.accounts = self.entry.copy()
self.prefs.folders = self.direntry.gtk_entry().get_text()
self.prefs.spoolfile = self.spoolentry.gtk_entry().get_text()
self.prefs.mailnotify = self.notify.get_active()
self.prefs.trash = self.trash.get_active()
self.prefs.expand = self.expand.get_active()
self.prefs.addsig = self.addsig.get_active()
self.prefs.sigreply = self.sigreply.get_menu().get_active().get_data("id")
self.prefs.sigforward = self.sigforward.get_menu().get_active().get_data("id")
self.prefs.confirmsend = self.confirmsend.get_active()
self.prefs.filter_start = self.filter_start.get_active()
self.prefs.fillwidth = int(self.fillwidth.get_value())
self.prefs.sub_font = self.sub_fontpicker.get_font_name()
self.prefs.fld_font = self.fld_fontpicker.get_font_name()
self.prefs.msg_font = self.msg_fontpicker.get_font_name()
self.prefs.compose_font = self.compose_fontpicker.get_font_name()
if self.externaled_support:
self.prefs.externaled_font = self.externaled_fontpicker.get_font_name()
self.prefs.external_cmd = self.externalentry.gtk_entry().get_text()
self.prefs.invoke_at_startup = self.invokeentry.get_active()
self.prefs.gtkhtml = self.gtkhtml.get_active()
#editor prefs
if self.externaled_support:
self.prefs.usebuiltined = self.usebuiltined.get_active()
self.prefs.externaledentry = self.externaledentry.get_text()
self.prefs.editorhints = self.editorhints.get_menu().get_active().get_data("id")
# Ensure only one of mailserver or smtp is set
#if self.prefs.usemailserver:
# self.prefs.usesendmail = 0
#if self.prefs.usesendmail:
# self.prefs.usemailserver = 0
# Check that the username and email address is entered
if len(self.prefs.accounts) == 0:
w = GnomeErrorDialog(err1)
w.set_parent(self.win)
w.show()
return
# Check if the folder directory exists
try:
os.stat(self.prefs.folders)
except os.error:
# Need to create the directory
try:
os.mkdir(self.prefs.folders)
except os.error:
# Could not create directory
w = GnomeErrorDialog(err3 % self.prefs.folders)
w.set_parent(self.win)
w.show()
return
# Find all folders in the mail directory
try:
flds = map( lambda x, y=split: y(x)[1],
glob.glob(self.prefs.folders+'/*') )
except IndexError:
flds = []
# Ensure that the default folders are present
for f in self.prefs.default_folders:
if f not in flds:
# Create default folder file
open(self.prefs.folders+'/'+f, 'a').close()
# Create the index file
folderops.create_folder_index(self.prefs.folders+"/"+f)
# Save configuration to disk
self.prefs.save()
# Finished
self.win.destroy()
elif no == 1:
# Just bail out without doing any modifications
self.win.destroy()
else:
print "preferences -- got unknown button callback event"
##
## Method init_notebook (self)
##
## Create the notbook widget.
##
##
def init_notebook(self):
notebook = GtkNotebook()
notebook.set_tab_pos(POS_TOP)
frame = GtkFrame('Accounts')
frame.set_border_width(10)
frame.set_usize(400, 320)
frame.show()
label = GtkLabel('Accounts')
notebook.append_page(frame, label)
self.init_account(frame)
frame = GtkFrame('Incoming')
frame.set_border_width(10)
frame.set_usize(400, 320)
frame.show()
label = GtkLabel('Incoming')
notebook.append_page(frame, label)
self.init_incoming(frame)
if self.externaled_support:
frame = GtkFrame('Editor')
frame.set_border_width(10)
frame.set_usize(400, 320)
frame.show()
label = GtkLabel('Editor')
notebook.append_page(frame, label)
self.init_editor(frame)
frame = GtkFrame('Mail')
frame.set_border_width(10)
frame.set_usize(400, 320)
frame.show()
label = GtkLabel('Mail')
notebook.append_page(frame, label)
self.init_messages(frame)
frame = GtkFrame('Misc')
frame.set_border_width(10)
frame.set_usize(400, 320)
frame.show()
label = GtkLabel('Misc')
notebook.append_page(frame, label)
self.init_fonts(frame)
self.vbox.pack_start(notebook)
notebook.show()
##
## Method *acc* (self)
##
## Methods for account management
##
##
def update_acc(self):
self.acc.clear()
e = self.entry.keys()
if DEF_ACC in e:
e.remove(DEF_ACC)
e.sort()
for name in e:
self.acc.append( (name,) )
acc = self.prefs.defacc
if acc and len(e) > 0:
if acc in e:
row = e.index(acc)
self.acc.set_background(row, GdkColor(29535,29535,32535))
else:
self.prefs.defacc = ''
def acc_edit_cb(self, button, no):
w = self.dialogs[button]
accname = w[8]
if no == 0:
del self.entry[accname]
self.entry[accname] = [
w[1].get_text(),
w[2].get_text(),
w[4].gtk_entry().get_text(),
w[3].get_text(),
w[5].get_text(),
w[6].gtk_entry().get_text()
]
if not w[7].get_active():
self.entry[accname][4] = '' # Flag that smtpserver is not used
self.update_acc()
elif no == 1:
pass
del self.dialogs[button]
button.destroy()
def acc_select(self, list, r, c, ev):
if hasattr(ev, 'type'):
# Check for double clicks on the list item
if ev.type == 5:
name = list.get_text(r,c)
v = GnomeDialog('Modify Account %s' % name, 'Ok', 'Cancel')
v.set_parent(self.win)
v.connect('clicked', self.acc_edit_cb)
v.show()
t, self.dialogs[v] = self.acc_view(name)
v.vbox.pack_start(t)
def acc_new(self, button):
v = GnomeDialog('New Account', 'Ok', 'Cancel')
v.set_parent(self.win)
v.connect('clicked', self.acc_new_cb)
v.show()
import pwd
pwdline = pwd.getpwuid(os.getuid())
dummy = [pwdline[4],
'%s@' % pwdline[0],
'%s/.signature' % pwdline[5],
'%s@' % pwdline[0]
]
self.entry[DEF_ACC] = dummy
t, self.dialogs[v] = self.acc_view(DEF_ACC)
v.vbox.pack_start(t)
def acc_new_cb(self, button, no):
w = self.dialogs[button]
if no == 0:
self.entry[w[0].get_text()] = [
w[1].get_text(),
w[2].get_text(),
w[4].gtk_entry().get_text(),
w[3].get_text(),
w[5].get_text(),
w[6].gtk_entry().get_text(),
]
self.update_acc()
del self.dialogs[button]
button.destroy()
def acc_remove(self, button):
if self.acc.selection == []:
return
row = self.acc.selection[0]
account = self.acc.get_text(row, 0)
if account == self.prefs.defacc:
self.prefs.defacc = ''
del self.entry[account]
self.update_acc()
def acc_view(self, accname):
if len (self.entry[accname]) == 6:
name, email, sigfile, reply, smtpserver, sendmail = self.entry[accname]
else: # For compatibility with older versions of Pymy
name, email, sigfile, reply = self.entry[accname]
smtpserver, sendmail = '', ''
if smtpserver != '': usesmtpserver = 1
else: usesmtpserver = 0
if sendmail == '': sendmail = '/usr/lib/sendmail'
notebook = GtkNotebook()
notebook.set_tab_pos(POS_TOP)
notebook.show()
# Make tab for identity
frame = GtkFrame('Identity')
frame.set_border_width(10)
frame.set_usize(320, 300)
frame.show()
label = GtkLabel('Identity')
notebook.append_page(frame, label)
t = GtkTable(15,1,0)
t.show()
la = GtkLabel("Account name:")
la.show()
la.set_alignment(0.0, 0.5)
accentry = GtkEntry()
accentry.show()
accentry.set_text(accname)
ln = GtkLabel("User name:")
ln.show()
ln.set_alignment(0.0, 0.5)
nameentry = GtkEntry()
nameentry.show()
if name != None:
nameentry.set_text(name)
le = GtkLabel("Email address:")
le.show()
le.set_alignment(0.0, 0.5)
mailentry = GtkEntry()
mailentry.show()
if email != None:
mailentry.set_text(email)
ls = GtkLabel("Signature file:")
ls.show()
ls.set_alignment(0.0, 0.5)
sigentry = GnomeFileEntry()
sigentry.gnome_entry().set_history_id('signature')
sigentry.gnome_entry().load_history()
sigentry.show()
if sigfile != None:
sigentry.gtk_entry().set_text(sigfile)
lr = GtkLabel("Reply-to address:")
lr.show()
lr.set_alignment(0.0, 0.5)
replyentry = GtkEntry()
replyentry.show()
if reply != None:
replyentry.set_text(reply)
t.attach(la, 0, 1, 0, 1, yoptions=0, ypadding=3, xpadding=10)
t.attach(accentry, 0, 1, 1, 2, xpadding=10, yoptions=0, ypadding=3)
t.attach(ln, 0, 1, 2, 3, yoptions=0, ypadding=3, xpadding=10)
t.attach(nameentry, 0, 1, 3, 4, xpadding=10, yoptions=0, ypadding=3)
t.attach(le, 0, 1, 4, 5, yoptions=0, ypadding=3, xpadding=10)
t.attach(mailentry, 0, 1, 5, 6, xpadding=10, yoptions=0, ypadding=3)
t.attach(lr, 0, 1, 6, 7, yoptions=0, ypadding=3, xpadding=10)
t.attach(replyentry, 0, 1, 7, 8, xpadding=10, yoptions=0, ypadding=3)
t.attach(ls, 0, 1, 8, 9, yoptions=0, ypadding=3, xpadding=10)
t.attach(sigentry, 0, 1, 10, 11, xpadding=10, yoptions=0, ypadding=3)
frame.add(t)
# Make tab for outgoing
t = GtkTable(4,1,0)
t.show()
frame = GtkFrame('Outgoing')
frame.set_border_width(10)
frame.set_usize(320, 300)
frame.show()
label = GtkLabel('Outgoing')
notebook.append_page(frame, label)
bsv = GtkRadioButton(None, "Send using mail server:")
bsv.show()
bsv.set_active ( usesmtpserver )
serverentry = GtkEntry()
serverentry.show()
if smtpserver != '':
serverentry.set_text (smtpserver)
bsm = GtkRadioButton(bsv, "Send using local 'sendmail':")
bsm.show()
bsm.set_active ( not usesmtpserver )
sendmailentry = GnomeFileEntry()
sendmailentry.gnome_entry().set_history_id('sendmail')
sendmailentry.gnome_entry().load_history()
sendmailentry.show()
sendmailentry.gtk_entry().set_text(sendmail)
t.attach(bsv, 0, 1, 0, 1, yoptions=0, ypadding=3, xpadding=10)
t.attach(serverentry, 0, 1, 1, 2, xpadding=10, yoptions=0, ypadding=3)
t.attach(bsm, 0, 1, 3, 4, yoptions=0, ypadding=3, xpadding=10)
t.attach(sendmailentry, 0, 1, 4, 5, xpadding=10, yoptions=0, ypadding=3)
frame.add(t)
# Return notebook
return notebook, (accentry, nameentry, mailentry, replyentry, sigentry,
serverentry, sendmailentry, bsv, accname)
def set_as_default(self, button):
if self.acc.selection == []:
return
row = self.acc.selection[0]
account = self.acc.get_text(row, 0)
self.prefs.defacc = account
self.update_acc()
## Create the account notebook
def init_account(self, frame):
t = GtkTable(8,1,0)
t.show()
acc = GtkCList(1, ['Name'])
acc.connect("select_row", self.acc_select)
# Widget attributes
acc.set_selection_mode(SELECTION_SINGLE)
acc.set_column_width(0, 150)
acc.set_column_width(1, 150)
acc.set_border_width(2)
acc.set_usize(0, 250)
# Add scrollbars
swin = GtkScrolledWindow()
swin.set_policy(POLICY_AUTOMATIC, POLICY_AUTOMATIC)
swin.add(acc)
swin.show()
acc.show()
t.attach(swin, 0, 3, 0, 1, yoptions=0)
# 'Default' button
b = GtkButton('Set as default')
b.show()
b.connect('clicked', self.set_as_default)
t.attach(b, 0, 1, 1, 2, yoptions=0, ypadding=5, xpadding=5)
# 'Delete' button
b = GtkButton('Remove')
b.show()
b.connect('clicked', self.acc_remove)
t.attach(b, 1, 2, 1, 2, yoptions=0, ypadding=5, xpadding=5)
# 'New...' button
b = GtkButton('New...')
b.show()
b.connect('clicked', self.acc_new)
t.attach(b, 2, 3, 1, 2, yoptions=0, ypadding=5, xpadding=5)
frame.add(t)
# Add entries to the list view
self.acc = acc
self.update_acc()
## Create the 'Editor' notebook
def init_editor(self, frame):
from externaleditor import hintlist
t = GtkTable(8,1,0)
t.show()
self.usebuiltined = GtkRadioButton(None, "Use standard editor")
self.usebuiltined.show()
self.usebuiltined.set_active(self.prefs.usebuiltined)
self.useexternaled = GtkRadioButton(self.usebuiltined,
"Use external editor")
self.useexternaled.show()
self.useexternaled.set_active( not self.prefs.usebuiltined)
self.externaledentry = GtkEntry()
self.externaledentry.show()
self.externaledentry.set_sensitive( not self.prefs.usebuiltined )
self.externaledentry.set_text(self.prefs.externaledentry)
self.usebuiltined.connect('clicked', self.editor_cb, 1 )
self.useexternaled.connect('clicked', self.editor_cb, 0 )
self.editorhints = GtkOptionMenu()
self.editorhints.show()
self.editorhints.set_sensitive( not self.prefs.usebuiltined )
m = GtkMenu()
n = 0
for menu in hintlist:
# add the item to the option list
i = GtkMenuItem(menu[0])
i.set_data("id", menu[1])
i.show()
m.append(i)
# check if this item should be made "active"
if self.prefs.editorhints == menu[1]:
active = n
n = n + 1
m.set_active(active)
self.editorhints.set_menu(m)
b = GtkHBox()
lc = GtkLabel("External Editor Font: ")
lc.show()
lc.set_alignment(0.0, 0.5)
b.pack_start(lc, expand=FALSE, fill=TRUE)
mc = PFontPicker()
mc.set_mode(FONT_PICKER_MODE_FONT_INFO)
if self.prefs.externaled_font != None:
mc.set_font_name(self.prefs.externaled_font)
mc.show()
self.externaled_fontpicker = mc
b.pack_start(mc, expand=FALSE, fill=TRUE)
b.show()
t.attach(self.usebuiltined, 0, 1, 0, 1, yoptions=0, ypadding=3, xpadding=10)
t.attach(self.useexternaled, 0, 1, 1, 2, xpadding=10, yoptions=0,
ypadding=3)
t.attach(self.externaledentry, 0, 1, 2, 3, yoptions=0, ypadding=3, xpadding=10)
t.attach(self.editorhints, 0, 1, 3, 4, yoptions=0, ypadding=3, xpadding=10)
t.attach(b, 0, 1, 4, 5, yoptions=0, ypadding=3, xpadding=10)
frame.add(t)
def editor_cb( self, widget=None, usebuiltin=1 ):
self.externaledentry.set_sensitive( not usebuiltin )
self.editorhints.set_sensitive( not usebuiltin )
self.externaled_fontpicker.set_sensitive( not usebuiltin )
## Create the 'Incoming' notebook
def init_incoming(self, frame):
t = GtkTable(8,1,0)
t.show()
lf = GtkLabel("Incoming mail file:")
lf.show()
lf.set_alignment(0.0, 0.5)
self.spoolentry = GnomeFileEntry()
self.spoolentry.show()
self.spoolentry.gnome_entry().set_history_id('mailspool')
self.spoolentry.gnome_entry().load_history()
if self.prefs.spoolfile != None:
self.spoolentry.gtk_entry().set_text(self.prefs.spoolfile)
lm = GtkLabel("Mail folder directory:")
lm.show()
lm.set_alignment(0.0, 0.5)
self.direntry = GnomeFileEntry()
self.direntry.show()
self.direntry.gnome_entry().set_history_id('folderdir')
self.direntry.gnome_entry().load_history()
if self.prefs.folders != None:
self.direntry.gtk_entry().set_text(self.prefs.folders)
lec = GtkLabel("External command for mail fetching:")
lec.show()
lec.set_alignment(0.0, 0.5)
self.externalentry = GnomeFileEntry()
self.externalentry.show()
self.externalentry.gnome_entry().set_history_id('external')
self.externalentry.gnome_entry().load_history()
if self.prefs.external_cmd:
self.externalentry.gtk_entry().set_text(self.prefs.external_cmd)
self.invokeentry = GtkCheckButton("Invoke external command at startup")
self.invokeentry.show()
self.invokeentry.set_active(self.prefs.invoke_at_startup)
t.attach(lf, 0, 1, 0, 1, yoptions=0, ypadding=3, xpadding=10)
t.attach(self.spoolentry, 0, 1, 1, 2, xpadding=10, yoptions=0,
ypadding=3)
t.attach(lm, 0, 1, 3, 4, yoptions=0, ypadding=3, xpadding=10)
t.attach(self.direntry, 0, 1, 4, 5, xpadding=10, yoptions=0,
ypadding=3)
t.attach(lec, 0, 1, 5, 6, yoptions=0, ypadding=3, xpadding=10)
t.attach(self.externalentry, 0, 1, 6, 7, xpadding=10, yoptions=0,
ypadding=3)
t.attach(self.invokeentry, 0, 1, 7, 8, xpadding=10, yoptions=0,
ypadding=3)
frame.add(t)
# Create the 'Fonts:' notebook
def init_fonts(self, frame):
t = GtkTable(8,1,0)
t.show()
lf = GtkLabel("Folder Tree:")
lf.show()
lf.set_alignment(0.0, 0.5)
fp = PFontPicker()
fp.set_mode(FONT_PICKER_MODE_FONT_INFO)
if self.prefs.fld_font != None:
fp.set_font_name(self.prefs.fld_font)
fp.show()
self.fld_fontpicker = fp
ls = GtkLabel("Message Headers:")
ls.show()
ls.set_alignment(0.0, 0.5)
sp = PFontPicker()
sp.set_mode(FONT_PICKER_MODE_FONT_INFO)
if self.prefs.sub_font != None:
sp.set_font_name(self.prefs.sub_font)
sp.show()
self.sub_fontpicker = sp
lm = GtkLabel("Message Body:")
lm.show()
lm.set_alignment(0.0, 0.5)
mp = PFontPicker()
mp.set_mode(FONT_PICKER_MODE_FONT_INFO)
if self.prefs.msg_font != None:
mp.set_font_name(self.prefs.msg_font)
mp.show()
self.msg_fontpicker = mp
lc = GtkLabel("Compose Body:")
lc.show()
lc.set_alignment(0.0, 0.5)
mc = PFontPicker()
mc.set_mode(FONT_PICKER_MODE_FONT_INFO)
if self.prefs.compose_font != None:
mc.set_font_name(self.prefs.compose_font)
mc.show()
self.compose_fontpicker = mc
self.gtkhtml = GtkCheckButton("If available, use GtkHTML for message viewing")
self.gtkhtml.show()
self.gtkhtml.set_active(self.prefs.gtkhtml)
v = GtkHBox()
v.show()
fillval = self.prefs.fillwidth
fillwidth_label = GtkLabel("Set fill-width for paragraphs ")
fillwidth_label.show()
self.fillwidth = GtkSpinButton(GtkAdjustment(fillval,10,130,1,10,0), 0, 0)
self.fillwidth.show()
v.pack_start(fillwidth_label, expand=FALSE, fill=TRUE)
v.pack_start(self.fillwidth, expand=FALSE, fill=FALSE)
t.attach(lf, 0, 1, 0, 1, yoptions=0, ypadding=3, xpadding=10)
t.attach(fp, 1, 2, 0, 1, xpadding=20, yoptions=0, ypadding=3)
t.attach(ls, 0, 1, 2, 3, yoptions=0, ypadding=3, xpadding=10)
t.attach(sp, 1, 2, 2, 3, xpadding=20, yoptions=0, ypadding=3)
t.attach(lm, 0, 1, 4, 5, yoptions=0, ypadding=3, xpadding=10)
t.attach(mp, 1, 2, 4, 5, xpadding=20, yoptions=0, ypadding=3)
t.attach(lc, 0, 1, 6, 7, yoptions=0, ypadding=3, xpadding=10)
t.attach(mc, 1, 2, 6, 7, xpadding=20, yoptions=0, ypadding=3)
t.attach(self.gtkhtml, 0, 2, 7, 8, xpadding=10, yoptions=0, ypadding=3)
t.attach(v, 0, 2, 8, 9, xpadding=10, yoptions=0, ypadding=3)
frame.add(t)
## Create the 'Messages' notebook
def init_messages(self, frame):
t = GtkTable(6,2,0)
t.show()
self.notify = GtkCheckButton("Popup notify window when new mail arrives")
self.notify.show()
self.notify.set_active(self.prefs.mailnotify)
self.trash = GtkCheckButton("Empty 'trash' folder on exit")
self.trash.show()
self.trash.set_active(self.prefs.trash)
# create the menus for where to put signatures when replying
# and when forwarding
rb = GtkHBox()
fb = GtkHBox()
self.sigreply = GtkOptionMenu()
self.sigreply.show()
self.sigreply.set_sensitive( self.prefs.addsig )
self.sigforward = GtkOptionMenu()
self.sigforward.show()
self.sigforward.set_sensitive( self.prefs.addsig )
rm = GtkMenu()
fm = GtkMenu()
n = 0
ractive = 1
factive = 1
s = [ ("Don't use signature", 'none'),
("Put signature after cited text", 'after'),
("Put signature before cited text", 'before') ]
for menu in s:
# add the item to each option list
ri = GtkMenuItem(menu[0])
ri.set_data("id", menu[1])
ri.show()
rm.append(ri)
fi = GtkMenuItem(menu[0])
fi.set_data("id", menu[1])
fi.show()
fm.append(fi)
# check if this item should be made "active"
if self.prefs.sigreply == menu[1]:
ractive = n
if self.prefs.sigforward == menu[1]:
factive = n
n = n + 1
rm.set_active(ractive)
fm.set_active(factive)
self.sigreply.set_menu(rm)
l = GtkLabel(" when replying")
l.show()
rb.pack_start(self.sigreply, expand=FALSE, fill=TRUE)
rb.pack_start(l, expand=FALSE, fill=TRUE)
rb.show()
self.sigforward.set_menu(fm)
l = GtkLabel(" when forwarding")
l.show()
fb.pack_start(self.sigforward, expand=FALSE, fill=TRUE)
fb.pack_start(l, expand=FALSE, fill=TRUE)
fb.show()
self.addsig = GtkCheckButton("Automatically add signature in composer")
self.addsig.show()
self.addsig.connect('clicked', self.addsig_cb )
self.addsig.set_active(self.prefs.addsig)
self.expand = GtkCheckButton("Confirm address list name expansions")
self.expand.show()
self.expand.set_active(self.prefs.expand)
self.confirmsend = GtkCheckButton("Popup notify window when mail has been successfully sent")
self.confirmsend.show()
self.confirmsend.set_active(self.prefs.confirmsend)
self.filter_start = GtkCheckButton("When getting new mail, only run filters on new mail")
self.filter_start.show()
self.filter_start.set_active(self.prefs.filter_start)
self.gtkhtml = GtkCheckButton("If available, use GtkHTML for message viewing")
self.gtkhtml.show()
self.gtkhtml.set_active(self.prefs.gtkhtml)
v = GtkHBox()
v.show()
fillval = self.prefs.fillwidth
fillwidth_label = GtkLabel("Set fill-width for paragraphs ")
fillwidth_label.show()
self.fillwidth = GtkSpinButton(GtkAdjustment(fillval,10,130,1,10,0), 0, 0)
self.fillwidth.show()
v.pack_start(fillwidth_label, expand=FALSE, fill=TRUE)
v.pack_start(self.fillwidth, expand=FALSE, fill=FALSE)
t.attach(self.notify, 0, 1, 0, 1, xpadding=10, yoptions=0, ypadding=3)
t.attach(self.trash, 0, 1, 1, 2, xpadding=10, yoptions=0, ypadding=3)
t.attach(self.addsig, 0, 1, 2, 3, xpadding=10, yoptions=0, ypadding=3)
t.attach(rb, 0, 1, 3, 4, xpadding=10, yoptions=0, ypadding=3)
t.attach(fb, 0, 1, 4, 5, xpadding=10, yoptions=0, ypadding=3)
t.attach(self.expand, 0, 1, 5, 6, xpadding=10, yoptions=0, ypadding=3)
t.attach(self.confirmsend, 0, 1, 6, 7, xpadding=10, yoptions=0, ypadding=3)
t.attach(self.filter_start, 0, 1, 7, 8, xpadding=10, yoptions=0, ypadding=3)
frame.add(t)
def addsig_cb( self, widget=None ):
self.sigreply.set_sensitive( self.addsig.get_active() )
self.sigforward.set_sensitive( self.addsig.get_active() )
## Window mainloop
def mainloop(self):
mainloop()
syntax highlighted by Code2HTML, v. 0.9.1