home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.4)
-
- import gtk
- import gtk.glade as gtk
- import gconf
- import gobject
- from virtkey import virtkey
- from sok import Sok
- import shutil
- from utils import *
- from xml.parsers.expat import ExpatError
- import os
- import os.path as os
- import gettext
- app = 'onboard-settings'
- gettext.textdomain(app)
- gettext.bindtextdomain(app)
- gtk.glade.textdomain(app)
- gtk.glade.bindtextdomain(app)
-
- class Settings:
-
- def __init__(self, mainwin):
- self.SOK_INSTALL_DIR = os.path.dirname(os.path.abspath(__file__))
- self.gladeXML = gtk.glade.XML(os.path.join(self.SOK_INSTALL_DIR, 'settings.glade'))
- self.window = self.gladeXML.get_widget('settingsWindow')
- self.gladeXML.signal_autoconnect({
- 'on_layoutView_released': self.do_change_layout,
- 'on_addButton_clicked': self.add_sok,
- 'on_removeButton_clicked': self.cb_removeButton_clicked,
- 'on_macroAddButton_clicked': self.add_macro,
- 'on_closeButton_clicked': self.cb_closeButton_clicked,
- 'on_intervalSpin_value_changed': self.cb_intervalSpin_value_changed,
- 'on_scanningCheck_toggled': self.cb_scanningCheck_toggled,
- 'on_closeButton_clicked': gtk.main_quit,
- 'on_personaliseButton_clicked': self.cb_on_personaliseButton_clicked,
- 'on_layoutFolderButton_clicked': self.cb_layoutFolderButton_clicked,
- 'on_icon_toggled': self.cb_icon_toggled })
- self.layoutView = self.gladeXML.get_widget('layoutView')
- self.macroNumberBox = self.gladeXML.get_widget('macroNumberBox')
- self.macroTextBox = self.gladeXML.get_widget('macroTextBox')
- self.macroDeleteBox = self.gladeXML.get_widget('macroDeleteBox')
- self.gconfClient = gconf.client_get_default()
- self.layoutView.append_column(gtk.TreeViewColumn(None, gtk.CellRendererText(), markup = 0))
- self.user_layout_root = '%s/.sok/layouts/' % os.path.expanduser('~')
- if not os.path.exists(self.user_layout_root):
- os.makedirs(self.user_layout_root)
-
- self.update_layoutList()
- self.on_macros_changed()
- self.gladeXML.get_widget('icon_toggle').set_active(self.gconfClient.get_bool('/apps/sok/trayicon'))
- scanEnabled = self.gconfClient.get_bool('/apps/sok/scanning')
- if scanEnabled:
- self.gladeXML.get_widget('scanningCheck').set_active(True)
-
- scanInterval = self.gconfClient.get_int('/apps/sok/scanning_interval')
- if scanInterval:
- self.gladeXML.get_widget('intervalSpin').set_value(float(scanInterval) / 1000)
-
- self.window.show()
- self.window.set_keep_above(not mainwin)
- self.window.connect('destroy', gtk.main_quit)
- gtk.main()
-
-
- def on_macros_changed(self, client = None, cxion_id = None, entry = None, user_data = None):
- tempMacroList = self.gconfClient.get_list('/apps/sok/macros', gconf.VALUE_STRING)
- self.macroNumbers = []
- for child in self.macroNumberBox.get_children():
- if child.__class__ is gtk.Entry:
- self.macroNumberBox.remove(child)
- continue
-
- for child in self.macroTextBox.get_children():
- if child.__class__ is gtk.Entry:
- self.macroTextBox.remove(child)
- continue
-
- for child in self.macroDeleteBox.get_children():
- if child.__class__ is gtk.Button:
- self.macroDeleteBox.remove(child)
- continue
-
- for n in range(len(tempMacroList)):
- macroStr = tempMacroList[n]
- if macroStr:
- self.macroNumbers.append(n)
- numberEntry = gtk.Entry()
- numberEntry.set_text(str(n))
- numberEntry.connect('activate', self.cb_macro_numberEntry_activate, n)
- numberEntry.set_size_request(5, 30)
- self.macroNumberBox.pack_start(numberEntry, False, False, 5)
- numberEntry.show()
- textEntry = gtk.Entry()
- textEntry.set_text(macroStr)
- textEntry.connect('activate', self.cb_macro_textEntry_activate, n)
- textEntry.set_size_request(-1, 30)
- self.macroTextBox.pack_start(textEntry, False, False, 5)
- textEntry.show()
- deleteButton = gtk.Button(stock = gtk.STOCK_DELETE)
- deleteButton.connect('clicked', self.cb_macro_deleteButton_clicked, n)
- self.macroDeleteBox.pack_start(deleteButton, False, False, 5)
- deleteButton.show()
- continue
-
-
-
- def cb_macro_numberEntry_activate(self, widget, currentNumber):
- newNo = int(widget.get_text())
- if newNo not in self.macroNumbers:
- li = self.gconfClient.get_list('/apps/sok/macros', gconf.VALUE_STRING)
- if newNo > len(li) - 1:
- for n in range(len(li) - newNo - 1):
- li.append('')
-
-
- text = li[currentNumber]
- li[currentNumber] = ''
- li[newNo] = text
- self.gconfClient.set_list('/apps/sok/macros', gconf.VALUE_STRING, li)
- self.on_macros_changed()
- else:
- dialog = gtk.MessageDialog(self.window, type = gtk.MESSAGE_WARNING, buttons = gtk.BUTTONS_OK, message_format = 'Snippit already assigned to this number')
- dialog.run()
- widget.set_text(str(currentNumber))
- dialog.destroy()
-
-
- def cb_macro_textEntry_activate(self, widget, currentNumber):
- li = self.gconfClient.get_list('/apps/sok/macros', gconf.VALUE_STRING)
- li[currentNumber] = widget.get_text()
- self.gconfClient.set_list('/apps/sok/macros', gconf.VALUE_STRING, li)
- self.on_macros_changed()
-
-
- def cb_macro_deleteButton_clicked(self, widget, currentNumber):
- li = self.gconfClient.get_list('/apps/sok/macros', gconf.VALUE_STRING)
- li[currentNumber] = ''
- self.gconfClient.set_list('/apps/sok/macros', gconf.VALUE_STRING, li)
- self.on_macros_changed()
-
-
- def cb_icon_toggled(self, widget):
- self.gconfClient.set_bool('/apps/sok/trayicon', widget.get_active())
-
-
- def open_user_layout_dir(self):
- if os.path.exists('/usr/bin/nautilus'):
- os.system('nautilus --no-desktop %s' % self.user_layout_root)
- elif os.path.exists('/usr/bin/thunar'):
- os.system('thunar %s' % self.user_layout_root)
- else:
- print 'No file manager to open layout folder'
-
-
- def cb_layoutFolderButton_clicked(self, widget):
- self.open_user_layout_dir()
-
-
- def cb_on_personaliseButton_clicked(self, widget):
- dialog = MacroDialog(self.window, 'Enter name for personalised layout')
- dialog.show_all()
- response = dialog.run()
- if response == gtk.RESPONSE_OK:
- text = dialog.macroEntry.get_text()
- s = Sok()
- create_default_layout_XML(text, virtkey(), s)
- s.clean()
- self.update_layoutList()
- self.open_user_layout_dir()
-
- dialog.destroy()
-
-
- def cb_scanningCheck_toggled(self, widget):
- self.gconfClient.set_bool('/apps/sok/scanning', widget.get_active())
-
-
- def cb_intervalSpin_value_changed(self, widget):
- self.gconfClient.set_int('/apps/sok/scanning_interval', int(widget.get_value() * 1000))
-
-
- def cb_closeButton_clicked(self, widget):
- self.window.destroy()
-
-
- def update_layoutList(self):
- self.layoutList = gtk.ListStore(str, str)
- self.layoutView.set_model(self.layoutList)
- it = self.layoutList.append(('Default', ''))
- self.layoutView.get_selection().select_iter(it)
- self.get_soks(os.path.join(self.SOK_INSTALL_DIR, 'layouts'))
- self.get_soks(self.user_layout_root)
-
-
- def cb_selected_layout_changed(self):
- self.get_soks(self.user_layout_root)
-
-
- def cb_macroList_drag_drop(self, widget, event, thing1, thing2, thing3):
- gobject.idle_add(self.macroList_changed)
-
-
- def add_macro(self, event):
- dialog = MacroDialog(self.window, 'Enter text for snippit')
- dialog.show_all()
- response = dialog.run()
- if response == gtk.RESPONSE_OK:
- text = dialog.macroEntry.get_text()
- l = self.gconfClient.get_list('/apps/sok/macros', gconf.VALUE_STRING)
- if self.macroNumbers:
- if len(l) <= self.macroNumbers[-1] + 1:
- l.append(text)
- else:
- l[self.macroNumbers[-1] + 1] = text
- else:
- l.append(text)
- self.gconfClient.set_list('/apps/sok/macros', gconf.VALUE_STRING, l)
-
- dialog.destroy()
- self.on_macros_changed()
-
-
- def add_sok(self, event):
- chooser = gtk.FileChooserDialog(title = None, action = gtk.FILE_CHOOSER_ACTION_OPEN, buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK))
- filterer = gtk.FileFilter()
- filterer.add_pattern('*.sok')
- chooser.add_filter(filterer)
- response = chooser.run()
- if response == gtk.RESPONSE_OK:
- filename = chooser.get_filename()
- f = open(filename)
- sokdoc = minidom.parse(f).documentElement
- for p in sokdoc.getElementsByTagName('pane'):
- fn = p.attributes['filename'].value
- shutil.copyfile('%s/%s' % (os.path.dirname(filename), fn), '%s%s' % (self.user_layout_root, fn))
-
- shutil.copyfile(filename, '%s%s' % (self.user_layout_root, os.path.basename(filename)))
- self.update_layoutList()
-
- chooser.destroy()
-
-
- def cb_removeButton_clicked(self, event):
- filename = self.layoutList.get_value(self.layoutView.get_selection().get_selected()[1], 1)
- f = open(filename)
- sokdoc = minidom.parse(f).documentElement
- f.close()
- os.remove(filename)
- for p in sokdoc.getElementsByTagName('pane'):
- os.remove('%s/%s' % (os.path.dirname(filename), p.attributes['filename'].value))
-
- self.gconfClient.set_string('/apps/sok/layout_filename', '')
- self.update_layoutList()
-
-
- def get_soks(self, path):
- files = os.listdir(path)
- soks = []
- for f in files:
- if f[-4:] == '.sok':
- filename = '%s/%s' % (path, f)
- theActualFile = open(filename)
-
- try:
- sokdoc = minidom.parse(theActualFile).documentElement
- if os.access(filename, os.W_OK):
- it = self.layoutList.append(('<i>%s</i>' % sokdoc.attributes['id'].value, filename))
- else:
- it = self.layoutList.append((sokdoc.attributes['id'].value, filename))
- if filename == self.gconfClient.get_string('/apps/sok/layout_filename'):
- self.layoutView.get_selection().select_iter(it)
- except ExpatError:
- strerror = None
- print 'XML in %s %s' % (filename, strerror)
- except KeyError:
- strerror = None
- print 'key %s required in %s' % (strerror, filename)
-
- theActualFile.close()
- continue
-
-
-
- def find_soks(self, path):
- files = os.listdir(path)
- soks = []
- for f in files:
- if f[-4:] == '.sok':
- soks.append(f)
- continue
-
- return soks
-
-
- def do_change_layout(self, widget, event):
- filename = self.layoutList.get_value(widget.get_selection().get_selected()[1], 1)
- self.gconfClient.set_string('/apps/sok/layout_filename', filename)
-
-
-
- class MacroDialog(gtk.MessageDialog):
-
- def __init__(self, parent, message):
- gtk.MessageDialog.__init__(self, parent, gtk.MESSAGE_QUESTION)
- self.add_buttons(gtk.STOCK_OK, gtk.RESPONSE_OK, gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)
- self.macroEntry = gtk.Entry()
- self.macroEntry.connect('activate', self.cb_macroEntry_activated)
- self.vbox.pack_end(self.macroEntry)
- self.set_markup(message)
-
-
- def cb_macroEntry_activated(self, event):
- self.response(gtk.RESPONSE_OK)
-
-
- if __name__ == '__main__':
- s = Settings(True)
-
-