本文整理汇总了Python中GTG.core.plugins.engine.PluginEngine类的典型用法代码示例。如果您正苦于以下问题:Python PluginEngine类的具体用法?Python PluginEngine怎么用?Python PluginEngine使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了PluginEngine类的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: __init__
def __init__(self, config_obj):
"""Constructor."""
self.config_obj = config_obj
self.config = self.config_obj.conf_dict
self.builder = gtk.Builder()
self.builder.add_from_file(ViewConfig.PREFERENCES_GLADE_FILE)
# store references to some objects
widgets = {
'dialog': 'PreferencesDialog',
'backend_tree': 'BackendTree',
'plugin_tree': 'PluginTree',
'plugin_about_dialog': 'PluginAboutDialog',
'plugin_configure': 'plugin_configure',
'plugin_depends': 'PluginDepends',
'plugin_config_dialog': 'PluginConfigDialog',
'pref_autostart': 'pref_autostart',
'pref_show_preview': 'pref_show_preview'
}
for attr, widget in widgets.iteritems():
setattr(self, attr, self.builder.get_object(widget))
# keep a reference to the parent task browser
#FIXME: this is not needed and should be removed
# self.tb = taskbrowser
self.pengine = PluginEngine()
# initialize tree models
self._init_backend_tree()
# this can't happen yet, due to the order of things in
# TaskBrowser.__init__(). Happens in activate() instead.
# self._init_plugin_tree()
pref_signals_dic = self.get_signals_dict()
self.builder.connect_signals(pref_signals_dic)
示例2: __init__
def __init__(self, requester):
self.req = requester
self.config = self.req.get_config("plugins")
builder = Gtk.Builder()
builder.add_from_file(ViewConfig.PLUGINS_UI_FILE)
self.dialog = builder.get_object("PluginsDialog")
self.dialog.set_title(_("Plugins - %s" % info.NAME))
self.plugin_tree = builder.get_object("PluginTree")
self.plugin_configure = builder.get_object("plugin_configure")
self.plugin_about = builder.get_object("PluginAboutDialog")
self.plugin_depends = builder.get_object("PluginDepends")
help.add_help_shortcut(self.dialog, "plugins")
self.pengine = PluginEngine()
# plugin config initiation
if self.pengine.get_plugins():
self.config.set("disabled", [p.module_name for p in self.pengine.get_plugins("disabled")])
self.config.set("enabled", [p.module_name for p in self.pengine.get_plugins("enabled")])
# see constants PLUGINS_COL_* for column meanings
self.plugin_store = Gtk.ListStore(str, bool, str, str, bool)
builder.connect_signals(
{
"on_plugins_help": self.on_help,
"on_plugins_close": self.on_close,
"on_PluginsDialog_delete_event": self.on_close,
"on_PluginTree_cursor_changed": self.on_plugin_select,
"on_plugin_about": self.on_plugin_about,
"on_plugin_configure": self.on_plugin_configure,
"on_PluginAboutDialog_close": self.on_plugin_about_close,
}
)
示例3: __init_plugin_engine
def __init_plugin_engine(self):
self.pengine = PluginEngine(GTG.PLUGIN_DIR)
# initializes the plugin api class
self.plugin_api = PluginAPI(self.req, self)
self.pengine.register_api(self.plugin_api)
# checks the conf for user settings
try:
plugins_enabled = self.config["plugins"]["enabled"]
except KeyError:
plugins_enabled = []
for plugin in self.pengine.get_plugins():
plugin.enabled = plugin.module_name in plugins_enabled
# initializes and activates each plugin (that is enabled)
self.pengine.activate_plugins()
示例4: __init_plugin_engine
def __init_plugin_engine(self):
self.pengine = PluginEngine()
# initializes the plugin api class
self.plugin_api = PluginAPI(self.req, self)
self.pengine.register_api(self.plugin_api)
# checks the conf for user settings
try:
plugins_enabled = self.plugins_config.get("enabled")
except configparser.Error:
plugins_enabled = []
for plugin in self.pengine.get_plugins():
plugin.enabled = plugin.module_name in plugins_enabled
# initializes and activates each plugin (that is enabled)
self.pengine.activate_plugins()
示例5: __init__
def __init__(self, config_obj):
self.config_obj = config_obj
self.config = self.config_obj.conf_dict
builder = gtk.Builder()
builder.add_from_file(ViewConfig.PLUGINS_GLADE_FILE)
self.dialog = builder.get_object("PluginsDialog")
self.dialog.set_title(_("Plugins - %s" % info.NAME))
self.plugin_tree = builder.get_object("PluginTree")
self.plugin_configure = builder.get_object("plugin_configure")
self.plugin_about = builder.get_object("PluginAboutDialog")
self.plugin_depends = builder.get_object('PluginDepends')
self.pengine = PluginEngine()
# plugin config initiation, if never used
if "plugins" in self.config:
if "enabled" not in self.config["plugins"]:
self.config["plugins"]["enabled"] = []
if "disabled" not in self.config["plugins"]:
self.config["plugins"]["disabled"] = []
elif self.pengine.get_plugins():
self.config["plugins"] = {}
self.config["plugins"]["disabled"] = \
[p.module_name for p in self.pengine.get_plugins("disabled")]
self.config["plugins"]["enabled"] = \
[p.module_name for p in self.pengine.get_plugins("enabled")]
# see constants PLUGINS_COL_* for column meanings
self.plugin_store = gtk.ListStore(str, bool, str, str, bool)
builder.connect_signals({
'on_plugins_help':
self.on_help,
'on_plugins_close':
self.on_close,
'on_PluginsDialog_delete_event':
self.on_close,
'on_PluginTree_cursor_changed':
self.on_plugin_select,
'on_plugin_about':
self.on_plugin_about,
'on_plugin_configure':
self.on_plugin_configure,
'on_PluginAboutDialog_close':
self.on_plugin_about_close,
})
示例6: __init__
#.........这里部分代码省略.........
"startdate_focus_out": lambda w, e: self.date_focus_out(
w, e, GTGCalendar.DATE_KIND_START),
"closeddate_changed": lambda w: self.date_changed(
w, GTGCalendar.DATE_KIND_CLOSED),
"closeddate_focus_out": lambda w, e: self.date_focus_out(
w, e, GTGCalendar.DATE_KIND_CLOSED),
"on_insert_subtask_clicked": self.insert_subtask,
"on_inserttag_clicked": self.inserttag_clicked,
"on_open_parent_clicked": self.open_parent_clicked,
"on_move": self.on_move,
}
self.builder.connect_signals(dic)
self.window = self.builder.get_object("TaskEditor")
# Removing the Normal textview to replace it by our own
# So don't try to change anything with glade, this is a home-made
# widget
textview = self.builder.get_object("textview")
scrolled = self.builder.get_object("scrolledtask")
scrolled.remove(textview)
self.textview = TaskView(self.req, self.clipboard)
self.textview.show()
self.textview.set_subtask_callback(self.new_subtask)
self.textview.open_task_callback(self.vmanager.open_task)
self.textview.set_left_margin(7)
self.textview.set_right_margin(5)
scrolled.add(self.textview)
conf_font_value = self.browser_config.get("font_name")
if conf_font_value != "":
self.textview.override_font(Pango.FontDescription(conf_font_value))
# Voila! it's done
self.calendar = GTGCalendar()
self.calendar.set_transient_for(self.window)
self.calendar.set_decorated(False)
self.duedate_widget = self.builder.get_object("duedate_entry")
self.startdate_widget = self.builder.get_object("startdate_entry")
self.closeddate_widget = self.builder.get_object("closeddate_entry")
self.dayleft_label = self.builder.get_object("dayleft")
self.tasksidebar = self.builder.get_object("tasksidebar")
# Define accelerator keys
self.init_accelerators()
self.task = task
tags = task.get_tags()
self.textview.subtasks_callback(task.get_children)
self.textview.removesubtask_callback(task.remove_child)
self.textview.set_get_tagslist_callback(task.get_tags_name)
self.textview.set_add_tag_callback(task.add_tag)
self.textview.set_remove_tag_callback(task.remove_tag)
self.textview.save_task_callback(self.light_save)
texte = self.task.get_text()
title = self.task.get_title()
# the first line is the title
self.textview.set_text("%s\n" % title)
# we insert the rest of the task
if texte:
self.textview.insert("%s" % texte)
else:
# If not text, we insert tags
if tags:
for t in tags:
self.textview.insert_text("%s, " % t.get_name())
self.textview.insert_text("\n")
# If we don't have text, we still need to insert subtasks if any
subtasks = task.get_children()
if subtasks:
self.textview.insert_subtasks(subtasks)
# We select the title if it's a new task
if thisisnew:
self.textview.select_title()
else:
self.task.set_to_keep()
self.textview.modified(full=True)
self.window.connect("destroy", self.destruction)
self.calendar.connect("date-changed", self.on_date_changed)
# plugins
self.pengine = PluginEngine()
self.plugin_api = PluginAPI(self.req, self.vmanager, self)
self.pengine.register_api(self.plugin_api)
self.pengine.onTaskLoad(self.plugin_api)
# Putting the refresh callback at the end make the start a lot faster
self.textview.refresh_callback(self.refresh_editor)
self.refresh_editor()
self.textview.grab_focus()
# restoring size and position, spatial tasks
if self.config is not None:
tid = self.task.get_id()
if self.config.has_section(tid):
if self.config.has_option(tid, "position"):
pos_x, pos_y = self.config.get(tid, "position")
self.move(int(pos_x), int(pos_y))
if self.config.has_option(tid, "size"):
width, height = self.config.get(tid, "size")
self.window.resize(int(width), int(height))
self.textview.set_editable(True)
self.window.show()
示例7: TaskEditor
#.........这里部分代码省略.........
self.textview.removesubtask_callback(task.remove_child)
self.textview.set_get_tagslist_callback(task.get_tags_name)
self.textview.set_add_tag_callback(task.add_tag)
self.textview.set_remove_tag_callback(task.remove_tag)
self.textview.save_task_callback(self.light_save)
texte = self.task.get_text()
title = self.task.get_title()
# the first line is the title
self.textview.set_text("%s\n" % title)
# we insert the rest of the task
if texte:
self.textview.insert("%s" % texte)
else:
# If not text, we insert tags
if tags:
for t in tags:
self.textview.insert_text("%s, " % t.get_name())
self.textview.insert_text("\n")
# If we don't have text, we still need to insert subtasks if any
subtasks = task.get_children()
if subtasks:
self.textview.insert_subtasks(subtasks)
# We select the title if it's a new task
if thisisnew:
self.textview.select_title()
else:
self.task.set_to_keep()
self.textview.modified(full=True)
self.window.connect("destroy", self.destruction)
self.calendar.connect("date-changed", self.on_date_changed)
# plugins
self.pengine = PluginEngine()
self.plugin_api = PluginAPI(self.req, self.vmanager, self)
self.pengine.register_api(self.plugin_api)
self.pengine.onTaskLoad(self.plugin_api)
# Putting the refresh callback at the end make the start a lot faster
self.textview.refresh_callback(self.refresh_editor)
self.refresh_editor()
self.textview.grab_focus()
# restoring size and position, spatial tasks
if self.config is not None:
tid = self.task.get_id()
if self.config.has_section(tid):
if self.config.has_option(tid, "position"):
pos_x, pos_y = self.config.get(tid, "position")
self.move(int(pos_x), int(pos_y))
if self.config.has_option(tid, "size"):
width, height = self.config.get(tid, "size")
self.window.resize(int(width), int(height))
self.textview.set_editable(True)
self.window.show()
# Define accelerator-keys for this dialog
# TODO: undo/redo
def init_accelerators(self):
agr = Gtk.AccelGroup()
self.window.add_accel_group(agr)
# Escape and Ctrl-W close the dialog. It's faster to call close
# directly, rather than use the close button widget
key, modifier = Gtk.accelerator_parse('Escape')
示例8: Manager
class Manager(object):
############## init #####################################################
def __init__(self, req):
self.req = req
self.config_obj = self.req.get_global_config()
self.config = self.config_obj.conf_dict
self.task_config = self.config_obj.task_conf_dict
# Editors
self.opened_task = {} # This is the list of tasks that are already
# opened in an editor of course it's empty
# right now
self.browser = None
self.__start_browser_hidden = False
self.gtk_terminate = False #if true, the gtk main is not started
#Shared clipboard
self.clipboard = clipboard.TaskClipboard(self.req)
#Browser (still hidden)
self.browser = TaskBrowser(self.req, self)
self.__init_plugin_engine()
if not self.__start_browser_hidden:
self.show_browser()
#Deletion UI
self.delete_dialog = None
#Preferences and Backends windows
# Initialize dialogs
self.preferences_dialog = None
self.edit_backends_dialog = None
#DBus
DBusTaskWrapper(self.req, self)
Log.debug("Manager initialization finished")
def __init_plugin_engine(self):
self.pengine = PluginEngine(GTG.PLUGIN_DIR)
# initializes the plugin api class
self.plugin_api = PluginAPI(self.req, self)
self.pengine.register_api(self.plugin_api)
# checks the conf for user settings
try:
plugins_enabled = self.config["plugins"]["enabled"]
except KeyError:
plugins_enabled = []
for plugin in self.pengine.get_plugins():
plugin.enabled = plugin.module_name in plugins_enabled
# initializes and activates each plugin (that is enabled)
self.pengine.activate_plugins()
############## Browser #################################################
def open_browser(self):
if not self.browser:
self.browser = TaskBrowser(self.req, self)
Log.debug("Browser is open")
#FIXME : the browser should not be the center of the universe.
# In fact, we should build a system where view can register themselves
# as "stay_alive" views. As long as at least one "stay_alive" view
# is registered, gtg keeps running. It quit only when the last
# "stay_alive view" is closed (and then unregistered).
# Currently, the browser is our only "stay_alive" view.
def close_browser(self,sender=None):
self.hide_browser()
#may take a while to quit
self.quit()
def hide_browser(self,sender=None):
self.browser.hide()
def iconify_browser(self,sender=None):
self.browser.iconify()
def show_browser(self,sender=None):
self.browser.show()
def is_browser_visible(self,sender=None):
return self.browser.is_visible()
def get_browser(self):
#used by the plugin api to hook in the browser
return self.browser
def start_browser_hidden(self):
self.__start_browser_hidden = True
################# Task Editor ############################################
def get_opened_editors(self):
'''
Returns a dict of task_uid -> TaskEditor, one for each opened editor
window
#.........这里部分代码省略.........
示例9: Manager
class Manager(GObject.GObject):
__object_signal__ = (GObject.SIGNAL_RUN_FIRST, GObject.TYPE_NONE,
(GObject.TYPE_PYOBJECT,))
__object_string_signal__ = (GObject.SIGNAL_RUN_FIRST, GObject.TYPE_NONE,
(GObject.TYPE_PYOBJECT, GObject.TYPE_STRING, ))
__gsignals__ = {'tasks-deleted': __object_signal__,
'task-status-changed': __object_string_signal__,
}
# init ##################################################################
def __init__(self, req):
GObject.GObject.__init__(self)
self.req = req
self.config_obj = self.req.get_global_config()
self.browser_config = self.config_obj.get_subconfig("browser")
self.plugins_config = self.config_obj.get_subconfig("plugins")
self.task_config = self.config_obj.get_taskconfig()
# Editors
# This is the list of tasks that are already opened in an editor
# of course it's empty right now
self.opened_task = {}
self.browser = None
self.__start_browser_hidden = False
self.gtk_terminate = False # if true, the gtk main is not started
# if true, closing the last window doesn't quit GTG
# (GTG lives somewhere else without GUI, e.g. notification area)
self.daemon_mode = False
# Shared clipboard
self.clipboard = clipboard.TaskClipboard(self.req)
# Initialize Timer
self.config = self.req.get_config('browser')
self.timer = Timer(self.config)
# Browser (still hidden)
self.browser = TaskBrowser(self.req, self)
self.__init_plugin_engine()
if not self.__start_browser_hidden:
self.show_browser()
# Deletion UI
self.delete_dialog = None
# Preferences and Backends windows
# Initialize dialogs
self.preferences = PreferencesDialog(self.req, self)
self.plugins = PluginsDialog(self.config_obj)
self.edit_backends_dialog = None
# Tag Editor
self.tag_editor_dialog = None
# DBus
DBusTaskWrapper(self.req, self)
Log.debug("Manager initialization finished")
def __init_plugin_engine(self):
self.pengine = PluginEngine(GTG.PLUGIN_DIR)
# initializes the plugin api class
self.plugin_api = PluginAPI(self.req, self)
self.pengine.register_api(self.plugin_api)
# checks the conf for user settings
try:
plugins_enabled = self.plugins_config.get("enabled")
except configparser.Error:
plugins_enabled = []
for plugin in self.pengine.get_plugins():
plugin.enabled = plugin.module_name in plugins_enabled
# initializes and activates each plugin (that is enabled)
self.pengine.activate_plugins()
# Browser ##############################################################
def open_browser(self):
if not self.browser:
self.browser = TaskBrowser(self.req, self)
# notify user if backup was used
backend_dic = self.req.get_all_backends()
for backend in backend_dic:
if backend.get_name() == "backend_localfile" and \
backend.used_backup():
backend.notify_user_about_backup()
Log.debug("Browser is open")
# FIXME : the browser should not be the center of the universe.
# In fact, we should build a system where view can register themselves
# as "stay_alive" views. As long as at least one "stay_alive" view
# is registered, gtg keeps running. It quit only when the last
# "stay_alive view" is closed (and then unregistered).
# Currently, the browser is our only "stay_alive" view.
def close_browser(self, sender=None):
self.hide_browser()
# may take a while to quit
self.quit()
#.........这里部分代码省略.........
示例10: __init__
class PluginsDialog:
""" Dialog for Plugins configuration """
def __init__(self, config_obj):
self.config_obj = config_obj
self.config = self.config_obj.get_subconfig("plugins")
builder = Gtk.Builder()
builder.add_from_file(ViewConfig.PLUGINS_UI_FILE)
self.dialog = builder.get_object("PluginsDialog")
self.dialog.set_title(_("Plugins - %s" % info.NAME))
self.plugin_tree = builder.get_object("PluginTree")
self.plugin_configure = builder.get_object("plugin_configure")
self.plugin_about = builder.get_object("PluginAboutDialog")
self.plugin_depends = builder.get_object('PluginDepends')
help.add_help_shortcut(self.dialog, "plugins")
self.pengine = PluginEngine()
# plugin config initiation
if self.pengine.get_plugins():
self.config.set(
"disabled",
[p.module_name for p in self.pengine.get_plugins("disabled")],
)
self.config.set(
"enabled",
[p.module_name for p in self.pengine.get_plugins("enabled")],
)
# see constants PLUGINS_COL_* for column meanings
self.plugin_store = Gtk.ListStore(str, bool, str, str, bool)
builder.connect_signals({
'on_plugins_help':
self.on_help,
'on_plugins_close':
self.on_close,
'on_PluginsDialog_delete_event':
self.on_close,
'on_PluginTree_cursor_changed':
self.on_plugin_select,
'on_plugin_about':
self.on_plugin_about,
'on_plugin_configure':
self.on_plugin_configure,
'on_PluginAboutDialog_close':
self.on_plugin_about_close,
})
def _init_plugin_tree(self):
""" Initialize the PluginTree Gtk.TreeView.
The format is modelled after the one used in gedit; see
http://git.gnome.org/browse/gedit/tree/gedit/gedit-plugin-mapnager.c
"""
# force creation of the Gtk.ListStore so we can reference it
self._refresh_plugin_store()
# renderer for the toggle column
renderer = Gtk.CellRendererToggle()
renderer.set_property('xpad', 6)
renderer.connect('toggled', self.on_plugin_toggle)
# toggle column
column = Gtk.TreeViewColumn(None, renderer, active=PLUGINS_COL_ENABLED,
activatable=PLUGINS_COL_ACTIVATABLE,
sensitive=PLUGINS_COL_ACTIVATABLE)
self.plugin_tree.append_column(column)
# plugin name column
column = Gtk.TreeViewColumn()
column.set_spacing(6)
# icon renderer for the plugin name column
icon_renderer = Gtk.CellRendererPixbuf()
icon_renderer.set_property('stock-size', Gtk.IconSize.SMALL_TOOLBAR)
icon_renderer.set_property('xpad', 3)
column.pack_start(icon_renderer, False)
column.set_cell_data_func(icon_renderer, plugin_icon)
# text renderer for the plugin name column
name_renderer = Gtk.CellRendererText()
name_renderer.set_property('ellipsize', Pango.EllipsizeMode.END)
column.pack_start(name_renderer, True)
column.set_cell_data_func(name_renderer, plugin_markup, self)
self.plugin_tree.append_column(column)
# finish setup
self.plugin_tree.set_model(self.plugin_store)
self.plugin_tree.set_search_column(2)
def _refresh_plugin_store(self):
""" Refresh status of plugins and put it in a Gtk.ListStore """
self.plugin_store.clear()
self.pengine.recheck_plugin_errors(True)
for name, plugin in self.pengine.plugins.items():
# activateable if there is no error
self.plugin_store.append((name, plugin.enabled, plugin.full_name,
plugin.short_description,
not plugin.error))
#.........这里部分代码省略.........
示例11: __init__
#.........这里部分代码省略.........
"close_clicked" : self.close,
"duedate_changed" : (self.date_changed,
GTGCalendar.DATE_KIND_DUE),
"startingdate_changed" : (self.date_changed,
GTGCalendar.DATE_KIND_START),
"closeddate_changed" : (self.date_changed,
GTGCalendar.DATE_KIND_CLOSED),
"on_insert_subtask_clicked" : self.insert_subtask,
"on_inserttag_clicked" : self.inserttag_clicked,
"on_move" : self.on_move,
}
self.builder.connect_signals(dic)
self.window = self.builder.get_object("TaskEditor")
#Removing the Normal textview to replace it by our own
#So don't try to change anything with glade, this is a home-made widget
textview = self.builder.get_object("textview")
scrolled = self.builder.get_object("scrolledtask")
scrolled.remove(textview)
self.textview = TaskView(self.req,self.clipboard)
self.textview.show()
self.textview.set_subtask_callback(self.new_subtask)
self.textview.open_task_callback(self.vmanager.open_task)
self.textview.set_left_margin(7)
self.textview.set_right_margin(5)
scrolled.add(self.textview)
#Voila! it's done
self.calendar = GTGCalendar(self.builder)
self.duedate_widget = self.builder.get_object("duedate_entry")
self.startdate_widget = self.builder.get_object("startdate_entry")
self.closeddate_widget = self.builder.get_object("closeddate_entry")
self.dayleft_label = self.builder.get_object("dayleft")
self.tasksidebar = self.builder.get_object("tasksidebar")
# Define accelerator keys
self.init_accelerators()
self.task = task
tags = task.get_tags()
self.textview.subtasks_callback(task.get_children)
self.textview.removesubtask_callback(task.remove_child)
self.textview.set_get_tagslist_callback(task.get_tags_name)
self.textview.set_add_tag_callback(task.add_tag)
self.textview.set_remove_tag_callback(task.remove_tag)
self.textview.save_task_callback(self.light_save)
texte = self.task.get_text()
title = self.task.get_title()
#the first line is the title
self.textview.set_text("%s\n"%title)
#we insert the rest of the task
if texte :
self.textview.insert("%s"%texte)
else :
#If not text, we insert tags
if tags :
for t in tags :
self.textview.insert_text("%s, "%t.get_name())
self.textview.insert_text("\n")
#If we don't have text, we still need to insert subtasks if any
subtasks = task.get_children()
if subtasks :
self.textview.insert_subtasks(subtasks)
#We select the title if it's a new task
if thisisnew :
self.textview.select_title()
else :
self.task.set_to_keep()
self.textview.modified(full=True)
self.window.connect("destroy", self.destruction)
self.calendar.connect("date-changed", self.on_date_changed)
# plugins
self.pengine = PluginEngine()
self.plugin_api = PluginAPI(self.req, self.vmanager, self)
self.pengine.register_api(self.plugin_api)
self.pengine.onTaskLoad(self.plugin_api)
#Putting the refresh callback at the end make the start a lot faster
self.textview.refresh_callback(self.refresh_editor)
self.refresh_editor()
self.textview.grab_focus()
#restoring size and position, spatial tasks
if self.config :
tid = self.task.get_id()
if tid in self.config:
if "position" in self.config[tid]:
pos = self.config[tid]["position"]
self.move(pos[0],pos[1])
#print "restoring position %s %s" %(pos[0],pos[1])
if "size" in self.config[tid]:
size = self.config[tid]["size"]
#print "size %s - %s" %(str(size[0]),str(size[1]))
#this eval(str()) is a ugly (!) hack to accept both int and str
#FIXME: Fix this!
self.window.resize(eval(str(size[0])),eval(str(size[1])))
self.textview.set_editable(True)
#Connection for the update
self.req.connect('task-modified',self.task_modified)
self.window.show()