コード例 #1
0
    def test_selection_mode(self):
        treeview = Gtk.TreeView()
        _ = managers.TreeViewManager(treeview)
        self.assertEqual(treeview.get_selection().get_mode(),
                         Gtk.SelectionMode.SINGLE)
        treeview.destroy()

        treeview = Gtk.TreeView()
        _ = managers.TreeViewManager(treeview,
                                     selection_mode=Gtk.SelectionMode.NONE)
        self.assertEqual(treeview.get_selection().get_mode(),
                         Gtk.SelectionMode.NONE)
        treeview.destroy()
コード例 #2
0
    def __init__(self, *args, **kwargs):
        super(CampaignSelectionDialog, self).__init__(*args, **kwargs)
        treeview = self.gobjects['treeview_campaigns']
        self.treeview_manager = managers.TreeViewManager(
            treeview,
            cb_delete=self._prompt_to_delete_row,
            cb_refresh=self.load_campaigns)
        self.treeview_manager.set_column_titles(
            ('Campaign Name', 'Company', 'Type', 'Messages', 'Created By',
             'Creation Date', 'Expiration'),
            column_offset=1)
        self.treeview_manager.set_column_color(background=8, foreground=9)
        treeview.set_tooltip_column(10)
        self.popup_menu = self.treeview_manager.get_popup_menu()
        self._creation_assistant = None

        self._tv_model = Gtk.ListStore(str, str, str, str, str, str, str, str,
                                       Gdk.RGBA, Gdk.RGBA, str)
        # default sort is descending by campaign creation date
        self._tv_model.set_sort_column_id(6, Gtk.SortType.DESCENDING)

        # create and set the filter for expired campaigns
        self._tv_model_filter = self._tv_model.filter_new()
        self._tv_model_filter.set_visible_func(self._filter_campaigns)
        tv_model = Gtk.TreeModelSort(model=self._tv_model_filter)
        tv_model.set_sort_func(
            4, gui_utilities.gtk_treesortable_sort_func_numeric, 4)
        treeview.set_model(tv_model)

        # setup menus for filtering campaigns and load campaigns
        self.get_popup_filter_menu()
        self.load_campaigns()
コード例 #3
0
 def __init__(self, *args, **kwargs):
     super(CampaignCompWindow, self).__init__(*args, **kwargs)
     self.comp_graph = CampaignCompGraph(
         self.application, style_context=self.application.style_context)
     self.gobjects['scrolledwindow_compare'].add(self.comp_graph.canvas)
     self.gobjects['box_compare'].pack_end(
         self.comp_graph.navigation_toolbar, False, False, 0)
     self.comp_graph.navigation_toolbar.hide()
     treeview = self.gobjects['treeview_campaigns']
     tvm = managers.TreeViewManager(treeview,
                                    cb_refresh=self.load_campaigns)
     toggle_renderer = Gtk.CellRendererToggle()
     toggle_renderer.connect('toggled', self.signal_renderer_toggled)
     self.stack = self.gobjects['stack_main']
     self.prev_child = self.stack.get_visible_child()
     b = Gtk.CellRendererText()
     tvm.set_column_titles(('Compare', 'Name', 'Company', 'Type',
                            'Created By', 'Creation Date', 'Expiration'),
                           column_offset=1,
                           renderers=(toggle_renderer, b, b, b, b, b, b))
     self._model = Gtk.ListStore(str, bool, str, str, str, str, str, str)
     self._model.set_sort_column_id(2, Gtk.SortType.ASCENDING)
     treeview.set_model(self._model)
     self.load_campaigns()
     self.window.show()
コード例 #4
0
	def __init__(self, *args, **kwargs):
		super(CampaignSelectionDialog, self).__init__(*args, **kwargs)
		treeview = self.gobjects['treeview_campaigns']
		self.treeview_manager = managers.TreeViewManager(treeview, cb_delete=self._prompt_to_delete_row, cb_refresh=self.load_campaigns)
		self.treeview_manager.set_column_titles(
			tuple(column.title for column in self.view_columns),
			column_offset=4,
			renderers=tuple(column.cell_renderer() for column in self.view_columns)
		)
		treeview.set_tooltip_column(1)
		self.treeview_manager.set_column_color(background=2, foreground=3)
		self.popup_menu = self.treeview_manager.get_popup_menu()
		self._creation_assistant = None

		view_column_types = tuple(column.g_type for column in self.view_columns)
		self._tv_model = Gtk.ListStore(str, str, Gdk.RGBA, Gdk.RGBA, *view_column_types)

		# create and set the filter for expired campaigns
		self._tv_model_filter = self._tv_model.filter_new()
		self._tv_model_filter.set_visible_func(self._filter_campaigns)
		tree_model_sort = Gtk.TreeModelSort(model=self._tv_model_filter)
		for idx, column in enumerate(self.view_columns, 4):
			if column.sort_function is not None:
				tree_model_sort.set_sort_func(idx, column.sort_function, idx)
		# default sort is descending by campaign creation date
		tree_model_sort.set_sort_column_id(9, Gtk.SortType.DESCENDING)
		treeview.set_model(tree_model_sort)

		# setup menus for filtering campaigns and load campaigns
		self.get_popup_filter_menu()
		self.load_campaigns()
コード例 #5
0
ファイル: plugin_manager.py プロジェクト: u53r55/king-phisher
    def __init__(self, *args, **kwargs):
        super(PluginManagerWindow, self).__init__(*args, **kwargs)
        treeview = self.gobjects['treeview_plugins']
        self._last_plugin_selected = None
        self._module_errors = {}
        tvm = managers.TreeViewManager(treeview, cb_refresh=self.load_plugins)
        toggle_renderer = Gtk.CellRendererToggle()
        toggle_renderer.connect('toggled', self.signal_renderer_toggled)
        tvm.set_column_titles(
            ('Enabled', 'Plugin'),
            column_offset=1,
            renderers=(toggle_renderer, Gtk.CellRendererText()))
        tvm.column_views['Enabled'].set_cell_data_func(
            toggle_renderer, self._toggle_cell_data_func)
        self._model = Gtk.ListStore(str, bool, str)
        self._model.set_sort_column_id(2, Gtk.SortType.ASCENDING)
        treeview.set_model(self._model)
        self.load_plugins()

        self.popup_menu = tvm.get_popup_menu()
        self.popup_menu.append(Gtk.SeparatorMenuItem())
        menu_item = Gtk.MenuItem.new_with_label('Reload')
        menu_item.connect('activate', self.signal_popup_menu_activate_reload)
        self.popup_menu.append(menu_item)
        self.popup_menu.show_all()

        self.window.show()
        selection = treeview.get_selection()
        selection.unselect_all()
        paned = self.gobjects['paned_plugins']
        self._paned_offset = paned.get_allocation(
        ).height - paned.get_position()
コード例 #6
0
 def __init__(self, *args, **kwargs):
     super(TagEditorDialog, self).__init__(*args, **kwargs)
     self.popup_menus = {}
     self.treeview_managers = {}
     for tag_table in self.tag_tables:
         treeview = self.gobjects['treeview_' + tag_table]
         model = Gtk.ListStore(int, str, str)
         treeview.set_model(model)
         tvm = managers.TreeViewManager(
             treeview,
             cb_delete=functools.partial(self.delete_tag, tag_table),
             cb_refresh=functools.partial(self.load_tags, tag_table))
         name_renderer = Gtk.CellRendererText()
         name_renderer.connect('edited', self.signal_renderer_edited,
                               (tag_table, 1, 'name'))
         name_renderer.set_property('editable', True)
         description_renderer = Gtk.CellRendererText()
         description_renderer.connect('edited', self.signal_renderer_edited,
                                      (tag_table, 2, 'description'))
         description_renderer.set_property('editable', True)
         description_renderer.set_property('ellipsize',
                                           Pango.EllipsizeMode.END)
         tvm.set_column_titles(
             ('Name', 'Description'),
             column_offset=1,
             renderers=(name_renderer, description_renderer))
         self.treeview_managers[tag_table] = tvm
         self.popup_menus[tag_table] = tvm.get_popup_menu()
     self.load_tags()
コード例 #7
0
 def test_column_titles(self):
     treeview = Gtk.TreeView()
     treeview_manager = managers.TreeViewManager(treeview)
     self.assertEqual(len(treeview_manager.column_titles), 0)
     treeview_manager.set_column_titles(('col0', 'col1'))
     self.assertEqual(len(treeview_manager.column_titles), 2)
     self.assertEqual(treeview_manager.column_titles.get('col0'), 0)
     self.assertEqual(treeview_manager.column_titles.get('col1'), 1)
コード例 #8
0
    def __init__(self, *args, **kwargs):
        super(PluginManagerWindow, self).__init__(*args, **kwargs)
        treeview = self.gobjects['treeview_plugins']
        self.status_bar = self.gobjects['statusbar']
        self._module_errors = {}
        tvm = managers.TreeViewManager(treeview, cb_refresh=self._load_plugins)
        toggle_renderer_enable = Gtk.CellRendererToggle()
        toggle_renderer_enable.connect('toggled',
                                       self.signal_renderer_toggled_enable)
        toggle_renderer_install = Gtk.CellRendererToggle()
        toggle_renderer_install.connect('toggled',
                                        self.signal_renderer_toggled_install)
        tvm.set_column_titles(
            ['Installed', 'Enabled', 'Title', 'Compatible', 'Version'],
            column_offset=1,
            renderers=[
                toggle_renderer_install, toggle_renderer_enable,
                Gtk.CellRendererText(),
                Gtk.CellRendererText(),
                Gtk.CellRendererText()
            ])
        tvm.column_views['Enabled'].set_cell_data_func(
            toggle_renderer_enable, self._toggle_cell_data_func)
        tvm.column_views['Enabled'].add_attribute(toggle_renderer_enable,
                                                  'visible', 6)
        tvm.column_views['Enabled'].add_attribute(toggle_renderer_enable,
                                                  'sensitive', 1)
        tvm.column_views['Installed'].add_attribute(toggle_renderer_install,
                                                    'visible', 7)
        tvm.column_views['Installed'].add_attribute(toggle_renderer_install,
                                                    'sensitive', 8)
        self._model = Gtk.TreeStore(str, bool, bool, str, str, str, bool, bool,
                                    bool, str)
        self._model.set_sort_column_id(3, Gtk.SortType.ASCENDING)
        treeview.set_model(self._model)
        self.plugin_path = os.path.join(self.application.user_data_path,
                                        'plugins')
        self.load_thread = utilities.Thread(target=self._load_catalogs)
        self.load_thread.start()
        self.popup_menu = tvm.get_popup_menu()
        self.popup_menu.append(Gtk.SeparatorMenuItem())
        menu_item = Gtk.MenuItem.new_with_label('Reload')
        menu_item.connect('activate', self.signal_popup_menu_activate_reload)
        self.popup_menu.append(menu_item)
        menu_item_reload_all = Gtk.MenuItem.new_with_label('Reload All')
        menu_item_reload_all.connect(
            'activate', self.signal_popup_menu_activate_reload_all)
        self.popup_menu.append(menu_item_reload_all)
        self.popup_menu.show_all()
        self._update_status_bar('Loading...')
        self.window.show()

        selection = treeview.get_selection()
        selection.unselect_all()
        paned = self.gobjects['paned_plugins']
        self._paned_offset = paned.get_allocation(
        ).height - paned.get_position()
コード例 #9
0
	def __init__(self, *args, **kwargs):
		super(CampaignViewGenericTableTab, self).__init__(*args, **kwargs)
		treeview = self.gobjects['treeview_campaign']
		self.treeview_manager = managers.TreeViewManager(
			treeview,
			selection_mode=Gtk.SelectionMode.MULTIPLE,
			cb_delete=self._prompt_to_delete_row,
			cb_refresh=self.load_campaign_information
		)
		self.treeview_manager.set_column_titles(self.view_columns, column_offset=1)
		self.popup_menu = self.treeview_manager.get_popup_menu()
		"""The :py:class:`Gtk.Menu` object which is displayed when right-clicking in the view area."""
コード例 #10
0
 def test_popup_menu(self):
     treeview = Gtk.TreeView()
     treeview_manager = managers.TreeViewManager(treeview)
     treeview_manager.set_column_titles(('col0', 'col1'))
     menu = treeview_manager.get_popup_menu()
     self.assertEqual(len(menu.get_children()),
                      1,
                      msg='the popup menu contains more than one entry')
     copy_submenuitem = menu.get_children()[0]
     self.assertEqual(copy_submenuitem.get_label(), 'Copy')
     copy_submenu = copy_submenuitem.get_submenu()
     self.assertEqual(
         len(copy_submenu.get_children()),
         4,
         msg='the copy submenu contains an invalid number or entries')
     treeview.destroy()
コード例 #11
0
	def __init__(self, *args, **kwargs):
		super(CampaignViewGenericTableTab, self).__init__(*args, **kwargs)
		treeview = self.gobjects['treeview_campaign']
		self.treeview_manager = managers.TreeViewManager(
			treeview,
			selection_mode=Gtk.SelectionMode.MULTIPLE,
			cb_delete=self._prompt_to_delete_row,
			cb_refresh=self.load_campaign_information
		)
		self.treeview_manager.set_column_titles(self.view_columns, column_offset=1)
		self.popup_menu = self.treeview_manager.get_popup_menu()
		"""The :py:class:`Gtk.Menu` object which is displayed when right-clicking in the view area."""
		treeview = self.gobjects['treeview_campaign']
		store_columns = [str] * (len(self.view_columns) + 1)
		store = Gtk.ListStore(*store_columns)
		treeview.set_model(store)
		self.application.connect('server-connected', self.signal_kp_server_connected)
コード例 #12
0
    def test_popup_copy_submenu(self):
        treeview = Gtk.TreeView()
        treeview_manager = managers.TreeViewManager(treeview)
        treeview_manager.set_column_titles(('col0', ))
        menu = treeview_manager.get_popup_copy_submenu()
        self.assertEqual(
            len(menu.get_children()),
            1,
            msg='the copy submenu contains an invalid number or entries')

        treeview_manager.set_column_titles(('col0', 'col1'))
        menu = treeview_manager.get_popup_copy_submenu()
        self.assertEqual(
            len(menu.get_children()),
            4,
            msg='the copy submenu contains an invalid number or entries')
        treeview.destroy()
コード例 #13
0
    def __init__(self, *args, **kwargs):
        super(ClonePageDialog, self).__init__(*args, **kwargs)
        self.resources = Gtk.ListStore(str, str, int)
        treeview = self.gobjects['treeview_resources']
        treeview.set_model(self.resources)
        self.treeview_manager = managers.TreeViewManager(treeview)
        self.treeview_manager.set_column_titles(
            ('Resource Path', 'MIME Type', 'Size'),
            renderers=(Gtk.CellRendererText(), Gtk.CellRendererText(),
                       extras.CellRendererBytes()))
        self.popup_menu = self.treeview_manager.get_popup_menu()

        self.button_cancel = self.gobjects['button_cancel']
        self.entry_directory = self.gobjects['entry_clone_directory']
        # managed separately to be kept out of the config
        self.entry_target = self.gtk_builder_get('entry_target')
        self.label_status = self.gobjects['label_status']
        self.spinner_status = self.gobjects['spinner_status']
コード例 #14
0
    def __init__(self, *args, **kwargs):
        super(ClonePageDialog, self).__init__(*args, **kwargs)
        self.resources = Gtk.ListStore(*tuple(column.g_type
                                              for column in self.view_columns))
        treeview = self.gobjects['treeview_resources']
        treeview.set_model(self.resources)
        self.treeview_manager = managers.TreeViewManager(treeview)
        self.treeview_manager.set_column_titles(
            tuple(column.title for column in self.view_columns),
            renderers=tuple(column.cell_renderer()
                            for column in self.view_columns))
        self.popup_menu = self.treeview_manager.get_popup_menu()

        self.button_cancel = self.gobjects['button_cancel']
        self.entry_directory = self.gobjects['entry_clone_directory']
        # managed separately to be kept out of the config
        self.entry_target = self.gtk_builder_get('entry_target')
        self.label_status = self.gobjects['label_status']
        self.spinner_status = self.gobjects['spinner_status']
コード例 #15
0
	def __init__(self, *args, **kwargs):
		super(CampaignViewGenericTableTab, self).__init__(*args, **kwargs)
		treeview = self.gobjects['treeview_campaign']
		self.treeview_manager = managers.TreeViewManager(
			treeview,
			selection_mode=Gtk.SelectionMode.MULTIPLE,
			cb_delete=self._prompt_to_delete_row,
			cb_refresh=self.load_campaign_information
		)
		self.treeview_manager.set_column_titles(
			self.view_column_titles,
			column_offset=1,
			renderers=tuple(column.cell_renderer() for column in self.view_columns)
		)
		for column in self.view_columns:
			if isinstance(column, extras.ColumnDefinitionDatetime):
				self.treeview_manager.column_views[column.title].set_fixed_width(150)
		self.popup_menu = self.treeview_manager.get_popup_menu()
		"""The :py:class:`Gtk.Menu` object which is displayed when right-clicking in the view area."""
		treeview = self.gobjects['treeview_campaign']
		self._rule = None
		self._rule_context = rule_engine.Context(type_resolver=rule_engine.type_resolver_from_dict(
			dict((column.name, rule_engine.DataType.from_type(column.python_type)) for column in self.view_columns)
		))

		view_column_types = tuple(column.g_type for column in self.view_columns)
		self._tv_model = Gtk.ListStore(str, *view_column_types)
		self._tv_model_filter = self._tv_model.filter_new()
		self._tv_model_filter.set_visible_func(self._tv_filter)
		tree_model_sort = Gtk.TreeModelSort(model=self._tv_model_filter)
		for idx, column in enumerate(self.view_columns, 1):
			if column.sort_function is not None:
				tree_model_sort.set_sort_func(idx, column.sort_function, idx)
		treeview.set_model(tree_model_sort)
		self.application.connect('server-connected', self.signal_kp_server_connected)

		filter_revealer = self.gobjects['revealer_filter']
		menu_item = Gtk.CheckMenuItem.new_with_label('Show Filter')
		menu_item.set_active(filter_revealer.get_reveal_child())
		menu_item.connect('toggled', self.signal_toggled_show_filter)
		menu_item.show()
		self.popup_menu.append(menu_item)
コード例 #16
0
ファイル: campaign.py プロジェクト: zhangway100/king-phisher
	def __init__(self, application, campaign_id=None):
		"""
		:param application: The application instance which this object belongs to.
		:type application: :py:class:`~king_phisher.client.application.KingPhisherClientApplication`
		:param campaign_id: The ID of the campaign to edit.
		"""
		super(CampaignAssistant, self).__init__(application)
		self.campaign_id = campaign_id
		self._close_ready = True
		self._page_titles = {}
		for page_n in range(self.assistant.get_n_pages()):
			page = self.assistant.get_nth_page(page_n)
			page_title = self.assistant.get_page_title(page)
			if page_title:
				self._page_titles[page_title] = page_n

		self._expiration_time = managers.TimeSelectorButtonManager(self.application, self.gobjects['togglebutton_expiration_time'])
		self._set_comboboxes()
		self._set_defaults()

		if not self.config['server_config']['server.require_id']:
			self.gobjects['checkbutton_reject_after_credentials'].set_sensitive(False)
			self.gobjects['checkbutton_reject_after_credentials'].set_property('active', False)

		confirm_preamble = 'Verify all settings are correct in the previous sections'
		if campaign_id:
			# re-configuring an existing campaign
			self.gobjects['label_confirm_body'].set_text(confirm_preamble + ', then hit "Apply" to update the King Phisher campaign with the new settings.')
			self.gobjects['label_intro_body'].set_text('This assistant will walk you through reconfiguring the selected King Phisher campaign.')
			self.gobjects['label_intro_title'].set_text('Configure Campaign')
		else:
			# creating a new campaign
			self.gobjects['label_confirm_body'].set_text(confirm_preamble + ', then hit "Apply" to create the new King Phisher campaign.')
			self.gobjects['label_intro_body'].set_text('This assistant will walk you through creating and configuring a new King Phisher campaign.')
			self.gobjects['label_intro_title'].set_text('New Campaign')

		self._url_thread = None
		domain_completion = Gtk.EntryCompletion()
		self._hostname_list_store = Gtk.ListStore(str)
		domain_completion.set_model(self._hostname_list_store)
		domain_completion.set_text_column(0)
		self.gobjects['entry_hostname_filter'].set_completion(domain_completion)

		tvm = managers.TreeViewManager(self.gobjects['treeview_url_selector'])
		tvm.set_column_titles(
			['Hostname', 'Landing Page', 'URL'],
			renderers=[
				Gtk.CellRendererText(),
				Gtk.CellRendererText(),
				Gtk.CellRendererText()
			]
		)
		self._url_model = Gtk.ListStore(str, str, str, object, object, str, str)
		self._url_model.set_sort_column_id(0, Gtk.SortType.ASCENDING)
		self.gobjects['treeview_url_selector'].set_model(self._url_model)
		self._url_information = {
			'created': None,
			'data': None
		}
		self._load_url_treeview_tsafe(refresh=True)
		paned = self.gobjects['paned_url_info']
		self._paned_offset = paned.get_allocation().height - paned.get_position()
コード例 #17
0
ファイル: plugin_manager.py プロジェクト: qsdj/king-phisher
    def __init__(self, *args, **kwargs):
        super(PluginManagerWindow, self).__init__(*args, **kwargs)
        self.catalog_plugins = plugins.ClientCatalogManager(
            self.application.user_data_path)
        self.plugin_path = os.path.join(self.application.user_data_path,
                                        'plugins')
        self.status_bar = self.gobjects['statusbar']
        self._installed_plugins_treeview_tracker = None
        """
		This is used to track and make sure all plugins make it into the
		treeview. It is set each time catalogs are loaded or refreshed. Once the
		loading operation is complete, plugins that remain were not loaded due
		their data (repo or id) missing from the catalog, likely due to it
		having been removed.
		"""
        self._worker_thread = None
        self._worker_thread_start(self._load_catalogs_tsafe)
        self.__load_errors = {}
        self.__installing_plugin = None

        tvm = managers.TreeViewManager(self.gobjects['treeview_plugins'])
        toggle_renderer_enable = Gtk.CellRendererToggle()
        toggle_renderer_enable.connect('toggled',
                                       self.signal_renderer_toggled_enable)
        toggle_renderer_install = Gtk.CellRendererToggle()
        toggle_renderer_install.connect('toggled',
                                        self.signal_renderer_toggled_install)
        tvm.set_column_titles(
            ('Installed', 'Enabled', 'Title', 'Compatible', 'Version'),
            column_offset=1,
            renderers=(toggle_renderer_install, toggle_renderer_enable,
                       Gtk.CellRendererText(), Gtk.CellRendererText(),
                       Gtk.CellRendererText()))
        tvm.column_views['Enabled'].set_cell_data_func(
            toggle_renderer_enable, self._toggle_enabled_cell_data_func)
        tvm.column_views['Enabled'].add_attribute(toggle_renderer_enable,
                                                  'visible', 6)
        tvm.column_views['Enabled'].add_attribute(toggle_renderer_enable,
                                                  'sensitive', 1)
        tvm.column_views['Installed'].set_cell_data_func(
            toggle_renderer_install, self._toggle_install_cell_data_func)
        tvm.column_views['Installed'].add_attribute(toggle_renderer_install,
                                                    'visible', 7)
        tvm.column_views['Installed'].add_attribute(toggle_renderer_install,
                                                    'sensitive', 8)
        self._model = Gtk.TreeStore(str, bool, bool, str, str, str, bool, bool,
                                    bool, str)
        self._model.set_sort_column_id(3, Gtk.SortType.ASCENDING)
        self.gobjects['treeview_plugins'].set_model(self._model)

        self._tv_popup_menu = managers.MenuManager(tvm.get_popup_menu())
        self._tv_popup_menu.append_item(Gtk.SeparatorMenuItem())
        self._tv_popup_menu.append('Reload',
                                   self.signal_popup_menu_activate_reload)
        self._tv_popup_menu.append('Reload All',
                                   self.signal_popup_menu_activate_reload_all)
        self._tv_popup_menu.append_item(Gtk.SeparatorMenuItem())
        self._tv_popup_menu.append(
            'Show Documentation',
            self.signal_popup_menu_activate_show_documentation)
        self._tv_popup_menu.append('Update',
                                   self.signal_popup_menu_activate_update)

        self._info_popup_menu = managers.MenuManager()
        self._info_popup_menu.append('Reload',
                                     self.signal_popup_menu_activate_reload)
        self._info_popup_menu.append_item(Gtk.SeparatorMenuItem())
        self._info_popup_menu.append(
            'Show Documentation',
            self.signal_popup_menu_activate_show_documentation)
        self._info_popup_menu.append('Update',
                                     self.signal_popup_menu_activate_update)
        self.gobjects['menubutton_plugin_info'].set_popup(
            self._info_popup_menu.menu)

        self._update_status_bar('Loading...')
        self.window.show()
        paned = self.gobjects['paned_plugins']
        self._paned_offset = paned.get_allocation(
        ).height - paned.get_position()