[go: up one dir, main page]

Menu

Diff of /functions.py [000000] .. [r1]  Maximize  Restore

Switch to side-by-side view

--- a
+++ b/functions.py
@@ -0,0 +1,205 @@
+#!/usr/bin/env python
+
+import sys
+
+try:
+    import pygtk
+    pygtk.require("2.0")
+except:
+    print("pygtk Not Availible")
+    sys.exit(1)
+try:
+    import gtk
+    import pango
+    import cairo
+except:
+    print("GTK Not Availible")
+    sys.exit(1)
+
+def simple_dialog(title=None, parent=None):
+    dialog = gtk.Dialog(title, parent, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, 
+        buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OK, gtk.RESPONSE_OK))
+    entry = gtk.Entry()
+    entry.show()
+    aa = dialog.get_content_area()
+    aa.pack_end(entry)
+    if dialog.run() == gtk.RESPONSE_OK:
+        ret = entry.get_text()
+    dialog.destroy()
+    return ret
+
+def textview_add_widget(textview, offset, widget):
+    textbuffer = textview.get_buffer()
+    iter = textbuffer.get_iter_at_offset(offset)
+    iter.backward_line()
+    iter.forward_line()
+    anchor = textbuffer.create_child_anchor(iter)
+    textview.add_child_at_anchor(widget, anchor)
+
+def get_text_buffer(textview):
+    buffer = textview.get_buffer()
+    start = buffer.get_start_iter()
+    end = buffer.get_end_iter()
+    return buffer.get_text(start, end)
+
+def get_selection_text(textview):
+    buffer = textview.get_buffer()
+    if not buffer.get_has_selection(): return False
+    text = get_text_buffer(textview)
+    text = unicode(text.decode('utf8'))
+    sel = buffer.get_selection_bounds()
+    return text[sel[0].get_offset():sel[1].get_offset()]
+
+def set_text_buffer(textview, text):
+    textview.get_buffer().set_text(text)
+
+def varname_is_valid(var_name):
+    x = '{0}=1'.format(var_name)
+    try:
+        exec(x)
+        return True
+    except:
+        return False
+
+def make_treeview(column_types, column_names, editable=False, edit_handler=None):
+        liststore = gtk.ListStore(*column_types)
+        treeview = gtk.TreeView(liststore)
+        treeview.set_grid_lines(gtk.TREE_VIEW_GRID_LINES_BOTH)        
+        for n in range(len(column_names)):
+            tvcolumn = gtk.TreeViewColumn(column_names[n])
+            treeview.append_column(tvcolumn)
+            cell = gtk.CellRendererText()
+            if editable:
+                cell.set_property('editable', True)
+                if edit_handler:
+                    cell.connect("edited", edit_handler, n)
+            tvcolumn.pack_start(cell, True)
+            tvcolumn.add_attribute(cell, 'text', n)
+            tvcolumn.set_resizable(True)
+            tvcolumn.set_expand(True)
+        return liststore, treeview
+
+def error_dialog(window, msg, title):
+    dialog = gtk.MessageDialog(window, flags = gtk.DIALOG_MODAL, type = gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK, message_format = msg)
+    dialog.set_title(title)
+    dialog.run()
+    dialog.destroy()
+    return False
+
+def create_menu(accel_group, caption, menu_items, callback):
+    """
+    a function to facilitate the creation of a menu based on menu_items
+    tuple containing menu items'texts and a common callback. The caption of
+    this menu is caption
+    """
+    menu = gtk.Menu()
+    for item in menu_items:
+        # first check if an accelarator is present (search for &)
+        item_list = item.split(":")
+        if len(item_list) == 2:
+            item, accel = item_list
+        else:
+            accel = None
+        # if the text string for menu item caption is multiwords
+        # join them with underlines to create a unique data for
+        # passing to the handler (e.g. edit.copy_text)
+        s = "_".join([x.lower() for x in item.replace("_", "").split()])
+        c = "_".join([x.lower() for x in caption.replace("_", "").split()])
+        insert_menu_item(accel_group, menu, item, accel, callback, "%s.%s" % (c, s))
+    menu_item = gtk.MenuItem(caption)
+    menu_item.show()
+    menu_item.set_submenu(menu)
+    return menu_item
+
+def insert_menu_item(accel_group, menu, caption, accel, callback, data):
+    """
+    a function to simplify the menu item creation job
+    menu: which menu this item append to
+    caption: the text for this menu item
+    callback: the handler function for this menu item
+    data: data to be passed to the handler
+    """
+    if caption != '-':
+        try:
+            stock = eval("gtk.STOCK_" + "_".join(caption.replace("_", "").upper().split()))
+        except AttributeError:
+            stock = caption
+    if caption != '-':
+        menu_item = gtk.ImageMenuItem(stock)
+        menu.append(menu_item)
+        menu_item.connect("activate", callback, data)
+        if accel:
+            key, mod = gtk.accelerator_parse(accel)
+            menu_item.add_accelerator("activate", accel_group, key, mod, gtk.ACCEL_VISIBLE)
+    else:
+        menu_item = gtk.SeparatorMenuItem()
+        menu.append(menu_item)
+    menu_item.show()
+
+def add_tool_button(toolbar, label, image, callback, data=None):
+    tool_button = gtk.ToolButton(image)
+    tool_button.set_label(label)
+    tool_button.connect("clicked", callback, data)
+    tool_button.show()
+    toolbar.insert(tool_button, -1)
+
+def select_file(window, title, action):
+    """
+    A generic method returning file name
+    """
+    stock = {gtk.FILE_CHOOSER_ACTION_OPEN: gtk.STOCK_OPEN, gtk.FILE_CHOOSER_ACTION_SAVE: gtk.STOCK_SAVE}
+    buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, stock[action], gtk.RESPONSE_OK)
+    fdialog = gtk.FileChooserDialog(title, window, action, buttons)
+    fdialog.set_default_response(gtk.RESPONSE_OK)
+    response = fdialog.run()
+    if response == gtk.RESPONSE_OK:
+        file_name = fdialog.get_filename()
+    else:
+        file_name = None
+    fdialog.destroy()
+    return file_name
+
+def build_iconset(img_file):
+    img = gtk.Image()
+    img.set_from_file(img_file)
+    img.show()
+    pixbuf = img.get_pixbuf()        
+    return gtk.IconSet(pixbuf)
+
+def add_icon(icon_id, icon_file, icon_factory):
+    icon_set = build_iconset(icon_file)
+    icon_factory.add(icon_id, icon_set)
+
+def strip_ml_tags(in_text):
+	"""Description: Removes all HTML/XML-like tags from the input text.
+	Inputs: s --> string of text
+	Outputs: text string without the tags
+	
+	# doctest unit testing framework
+
+	>>> test_text = "Keep this Text <remove><me /> KEEP </remove> 123"
+	>>> strip_ml_tags(test_text)
+	'Keep this Text  KEEP  123'
+	"""
+	# convert in_text to a mutable object (e.g. list)
+	s_list = list(in_text)
+	i,j = 0,0
+	
+	while i < len(s_list):
+		# iterate until a left-angle bracket is found
+		if s_list[i] == '<':
+			while s_list[i] != '>':
+				# pop everything from the the left-angle bracket until the right-angle bracket
+				s_list.pop(i)
+				
+			# pops the right-angle bracket, too
+			s_list.pop(i)
+		else:
+			i=i+1
+			
+	# convert the list back into text
+	join_char=''
+	return join_char.join(s_list)
+    # a better way is to use re
+    # p = re.compile('<.*?>')
+    # return p.sub('', data)