summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiri Moskovcak <jmoskovc@redhat.com>2009-09-09 16:41:11 +0200
committerJiri Moskovcak <jmoskovc@redhat.com>2009-09-09 16:41:11 +0200
commit45a0e08efabebe77a1ce6ce45510320e2278009f (patch)
treef33da998073cf7e68872b5232db878efc84734ef
parent320b7eae1821cb3f92a8e19d6ea6fa70be552d29 (diff)
downloadabrt-45a0e08efabebe77a1ce6ce45510320e2278009f.tar.gz
abrt-45a0e08efabebe77a1ce6ce45510320e2278009f.tar.xz
abrt-45a0e08efabebe77a1ce6ce45510320e2278009f.zip
GUI: more global settings (still "read-only")
-rw-r--r--src/Gui/CCMainWindow.py4
-rw-r--r--src/Gui/PluginList.py6
-rw-r--r--src/Gui/SettingsDialog.py231
-rw-r--r--src/Gui/ccgui.glade11
-rw-r--r--src/Gui/settings.GtkBuilder429
5 files changed, 593 insertions, 88 deletions
diff --git a/src/Gui/CCMainWindow.py b/src/Gui/CCMainWindow.py
index 4fe07751..63d9b0b6 100644
--- a/src/Gui/CCMainWindow.py
+++ b/src/Gui/CCMainWindow.py
@@ -108,8 +108,8 @@ class MainWindow():
self.wTree.get_widget("bReport").connect("clicked", self.on_bReport_clicked)
self.wTree.get_widget("miQuit").connect("activate", self.on_bQuit_clicked)
self.wTree.get_widget("miAbout").connect("activate", self.on_miAbout_clicked)
- self.wTree.get_widget("miPreferences").connect("activate", self.on_miPreferences_clicked)
- self.wTree.get_widget("miSettings").connect("activate", self.on_miSettings_clicked)
+ self.wTree.get_widget("miPlugins").connect("activate", self.on_miPreferences_clicked)
+ self.wTree.get_widget("miPreferences").connect("activate", self.on_miSettings_clicked)
# connect handlers for daemon signals
self.ccdaemon.connect("crash", self.on_data_changed_cb, None)
self.ccdaemon.connect("analyze-complete", self.on_analyze_complete_cb, self.pBarWindow)
diff --git a/src/Gui/PluginList.py b/src/Gui/PluginList.py
index 76bdf81e..005bffee 100644
--- a/src/Gui/PluginList.py
+++ b/src/Gui/PluginList.py
@@ -40,6 +40,12 @@ class PluginInfoList(list):
def getActionPlugins(self):
return [x for x in self if x["Enabled"] == 'yes' and x["Type"] == 'Action']
+
+ def getDatabasePlugins(self):
+ return [x for x in self if x["Enabled"] == 'yes' and x["Type"] == 'Database']
+
+ def getAnalyzerPlugins(self):
+ return [x for x in self if x["Enabled"] == 'yes' and x["Type"] == 'Analyzer']
diff --git a/src/Gui/SettingsDialog.py b/src/Gui/SettingsDialog.py
index a2ba1f06..10a10df2 100644
--- a/src/Gui/SettingsDialog.py
+++ b/src/Gui/SettingsDialog.py
@@ -6,6 +6,18 @@ from CC_gui_functions import *
from ABRTPlugin import PluginSettings, PluginInfo
from abrt_utils import _
+
+#FIXME: create a better struct, to automatize hydrate/dehydrate process
+settings_dict = { "Common":
+ {"OpenGPGCheck":bool,
+ "Database":object,
+ "EnabledPlugins": list,
+ "BlackList": list,
+ "MaxCrashReportsSize": int,
+ "OpenGPGPublicKeys": list,
+ },
+ }
+
class SettingsDialog:
def __init__(self, parent, daemon):
builderfile = "%s%ssettings.GtkBuilder" % (sys.path[0],"/")
@@ -15,8 +27,43 @@ class SettingsDialog:
self.window = self.builder.get_object("wGlobalSettings")
print "GSD init"
self.builder.get_object("bSaveSettings").connect("clicked", self.on_ok_clicked)
+ self.builder.get_object("bCancelSettings").connect("clicked", self.on_cancel_clicked)
self.builder.get_object("bAddCronJob").connect("clicked", self.on_bAddCronJob_clicked)
+ # action plugin list for Cron tab
+ self.actionPluginsListStore = gtk.ListStore(str, object)
+ self.actionPluginsListStore.append([_("<b>Select plugin</b>"), None])
+ # database plugin list
+ self.databasePluginsListStore = gtk.ListStore(str, object)
+ self.databasePluginsListStore.append([_("<b>Select database backend</b>"), None])
+
+ self.dbcombo = self.builder.get_object("cbDatabase")
+ self.dbcombo.set_model(self.databasePluginsListStore)
+ cell = gtk.CellRendererText()
+ self.dbcombo.pack_start(cell)
+ self.dbcombo.add_attribute(cell, "markup", 0)
+ # blacklist edit
+ self.builder.get_object("bEditBlackList").connect("clicked", self.on_blacklistEdit_clicked)
+
+ self.builder.get_object("bOpenGPGPublicKeys").connect("clicked", self.on_GPGKeysEdit_clicked)
+ self.builder.get_object("bAddAction").connect("clicked", self.on_bAddAction_clicked)
+ # AnalyzerActionsAndReporters
+ self.analyzerPluginsListStore = gtk.ListStore(str, object)
+ self.analyzerPluginsListStore.append([_("<b>Select plugin</b>"), None])
+ # GPG keys
+ self.wGPGKeys = self.builder.get_object("wGPGKeys")
+ self.GPGKeysListStore = gtk.ListStore(str)
+ self.tvGPGKeys = self.builder.get_object("tvGPGKeys")
+ self.tvGPGKeys.set_model(self.GPGKeysListStore)
+ self.builder.get_object("bCancelGPGKeys").connect("clicked", self.on_bCancelGPGKeys_clicked)
+ self.builder.get_object("bSaveGPGKeys").connect("clicked", self.on_bSaveGPGKeys_clicked)
+
+ gpg_column = gtk.TreeViewColumn()
+ cell = gtk.CellRendererText()
+ gpg_column.pack_start(cell)
+ gpg_column.add_attribute(cell, "text", 0)
+ self.tvGPGKeys.append_column(gpg_column)
+
def filter_settings(self, model, miter, data):
return True
@@ -26,55 +73,169 @@ class SettingsDialog:
except Exception, e:
# FIXME: this should be error gui message!
print e
+ for i in self.settings:
+ print "XXX", i
+ for key,val in self.settings[i].iteritems():
+ print "\t", key, val
+ try:
+ self.pluginlist = getPluginInfoList(self.ccdaemon, refresh=True)
+ except Exception, e:
+ print e
- # hydrate cron jobs:
+ ## hydrate cron jobs:
for key,val in self.settings["Cron"].iteritems():
- try:
- self.pluginlist = getPluginInfoList(self.ccdaemon, refresh=True)
- except Exception, e:
- print e
-
- hbox = gtk.HBox(homogeneous=True)
- time = gtk.Entry()
- plugins = gtk.ComboBox()
- enabledPluginsListStore = gtk.ListStore(str, object)
- cell = gtk.CellRendererText()
- plugins.pack_start(cell)
- plugins.add_attribute(cell, 'text', 0)
- enabledPluginsListStore.append([_("Select a plugin"), None])
- for plugin in self.pluginlist.getActionPlugins():
- print "#", plugin.getName()
- enabledPluginsListStore.append([plugin.getName(), plugin])
- plugins.set_model(enabledPluginsListStore)
- plugins.set_active(0)
- hbox.pack_start(time,False)
- hbox.pack_start(plugins,False)
- self.builder.get_object("vbCronJobs").pack_start(hbox,False)
- hbox.show_all()
- #print "\t%s:%s" % (key,val)
+ # actionas are separated by ','
+ actions = val.split(',')
+ self.settings["Cron"][key] = actions
+ for plugin in self.pluginlist.getActionPlugins():
+ it = self.actionPluginsListStore.append([plugin.getName(), plugin])
+ for key,val in self.settings["Cron"].iteritems():
+ if plugin.getName() in val:
+ cron_job = (key,it)
+ self.add_CronJob(cron_job)
+ self.settings["Cron"][key].remove(plugin.getName())
+ # hydrate common
+ common = self.settings["Common"]
+ ## gpgcheck
+ self.builder.get_object("cbOpenGPGCheck").set_active(common["OpenGPGCheck"] == 'yes')
+ ## database
+ for dbplugin in self.pluginlist.getDatabasePlugins():
+ it = self.databasePluginsListStore.append([dbplugin.getName(), dbplugin])
+ if common["Database"] == dbplugin.getName():
+ self.dbcombo.set_active_iter(it)
+ ## MaxCrashSize
+ self.builder.get_object("sbMaxCrashReportsSize").set_value(float(common["MaxCrashReportsSize"]))
+ ## GPG keys
+ self.builder.get_object("eOpenGPGPublicKeys").set_text(common["OpenGPGPublicKeys"])
+ self.gpgkeys = common["OpenGPGPublicKeys"].split(',')
+ for gpgkey in self.gpgkeys:
+ self.GPGKeysListStore.append([gpgkey])
+
+ ## blacklist
+ self.builder.get_object("eBlacklist").set_text(common["BlackList"])
+ # hydrate AnalyzerActionsAndReporters
+ AnalyzerActionsAndReporters = self.settings["AnalyzerActionsAndReporters"]
+ for analplugin in self.pluginlist.getAnalyzerPlugins():
+ it = self.analyzerPluginsListStore.append([analplugin.getName(), analplugin])
+ if AnalyzerActionsAndReporters.has_key(analplugin.getName()):
+ action = (AnalyzerActionsAndReporters[analplugin.getName()], it)
+ self.add_AnalyzerAction(action)
+
+ def on_bCancelGPGKeys_clicked(self, button):
+ print "cancel"
+ self.wGPGKeys.hide()
+
+ def on_bSaveGPGKeys_clicked(self, button):
+ print "save"
+ self.wGPGKeys.hide()
+ def on_bAddGPGKey_clicked(self, button):
+ print "add GPG key"
+
+ def on_bRemoveGPGKey_clicked(self, button):
+ print "add GPG key"
+
+ def on_blacklistEdit_clicked(self, button):
+ print "edit blacklist"
+
+ def on_GPGKeysEdit_clicked(self, button):
+ self.wGPGKeys.show()
+
def on_ok_clicked(self, button):
self.dehydrate()
+ self.window.hide()
- def on_bAddCronJob_clicked(self, button):
- hbox = gtk.HBox(homogeneous=True)
+ def on_cancel_clicked(self, button):
+ self.window.hide()
+
+ def on_remove_CronJob_clicked(self, button, job_hbox):
+ self.removeHBoxWihtChildren(job_hbox)
+
+ def on_remove_Action_clicked(self, button, binding_hbox):
+ self.removeHBoxWihtChildren(binding_hbox)
+
+ def removeHBoxWihtChildren(self, job_hbox):
+ job_hbox.get_parent().remove(job_hbox)
+ for child in job_hbox.get_children():
+ child.destroy()
+ job_hbox.destroy()
+
+ def add_CronJob(self, job=None):
+ hbox = gtk.HBox()
time = gtk.Entry()
+ remove_image = gtk.Image()
+ remove_image.set_from_stock("gtk-remove",gtk.ICON_SIZE_MENU)
+ remove_button = gtk.Button()
+ remove_button.set_image(remove_image)
+ remove_button.set_tooltip_text(_("Remove this job"))
+ remove_button.connect("clicked", self.on_remove_CronJob_clicked, hbox)
plugins = gtk.ComboBox()
- enabledPluginsListStore = gtk.ListStore(str, object)
cell = gtk.CellRendererText()
+
plugins.pack_start(cell)
- plugins.add_attribute(cell, 'text', 0)
- for plugin in self.pluginlist.getActionPlugins():
- print "#", plugin.getName()
- enabledPluginsListStore.append([plugin.getName(), plugin])
- plugins.set_model(enabledPluginsListStore)
- plugins.set_active(0)
- hbox.pack_start(time,False)
- hbox.pack_start(plugins,False)
+ plugins.add_attribute(cell, 'markup', 0)
+ plugins.set_model(self.actionPluginsListStore)
+
+ if job:
+ time.set_text(job[0])
+ plugins.set_active_iter(job[1])
+ else:
+ plugins.set_active(0)
+ hbox.pack_start(plugins,True)
+ hbox.pack_start(time,True)
+ hbox.pack_start(remove_button,False)
self.builder.get_object("vbCronJobs").pack_start(hbox,False)
+
hbox.show_all()
+
+ def on_bAddCronJob_clicked(self, button):
+ self.add_CronJob()
print "add"
+ def on_bEditAction_clicked(self, button, data=None):
+ print "edit action"
+
+ def add_AnalyzerAction(self, action=None):
+ print "add_AnalyzerAction"
+ hbox = gtk.HBox()
+ action_list = gtk.Entry()
+ edit_actions = gtk.Button()
+ edit_actions.set_tooltip_text("Edit actions")
+ edit_image = gtk.Image()
+ edit_image.set_from_stock("gtk-edit", gtk.ICON_SIZE_MENU)
+ edit_actions.set_image(edit_image)
+ edit_actions.connect("clicked", self.on_bEditAction_clicked)
+
+ remove_image = gtk.Image()
+ remove_image.set_from_stock("gtk-remove",gtk.ICON_SIZE_MENU)
+ remove_button = gtk.Button()
+ remove_button.set_image(remove_image)
+ remove_button.set_tooltip_text(_("Remove this action"))
+ remove_button.connect("clicked", self.on_remove_Action_clicked, hbox)
+
+ reporters = gtk.ComboBox()
+ cell = gtk.CellRendererText()
+ reporters.pack_start(cell)
+ reporters.add_attribute(cell, 'markup', 0)
+ reporters.set_model(self.analyzerPluginsListStore)
+
+ if action:
+ action_list.set_text(action[0])
+ reporters.set_active_iter(action[1])
+ else:
+ reporters.set_active(0)
+
+ hbox.pack_start(reporters,True)
+ hbox.pack_start(action_list,True)
+ hbox.pack_start(edit_actions,False)
+ hbox.pack_start(remove_button,False)
+ self.builder.get_object("vbActions").pack_start(hbox,False)
+ hbox.show_all()
+
+ def on_bAddAction_clicked(self, button):
+ self.add_AnalyzerAction()
+ print "on_bAddActions_clicked"
+
def on_cancel_clicked(self,button):
print "hide"
self.window.hide()
diff --git a/src/Gui/ccgui.glade b/src/Gui/ccgui.glade
index 67bf6fa3..991b4e30 100644
--- a/src/Gui/ccgui.glade
+++ b/src/Gui/ccgui.glade
@@ -141,18 +141,17 @@ Zdenek Prikryl &lt;zprikryl@redhat.com&gt;</property>
<widget class="GtkMenu" id="menu1">
<property name="visible">True</property>
<child>
- <widget class="GtkImageMenuItem" id="miPreferences">
- <property name="label">gtk-preferences</property>
+ <widget class="GtkMenuItem" id="miPlugins">
<property name="visible">True</property>
- <property name="use_underline">True</property>
- <property name="use_stock">True</property>
+ <property name="label" translatable="yes">Plugins</property>
</widget>
</child>
<child>
- <widget class="GtkMenuItem" id="miSettings">
+ <widget class="GtkImageMenuItem" id="miPreferences">
+ <property name="label">gtk-preferences</property>
<property name="visible">True</property>
- <property name="label" translatable="yes">Global settings</property>
<property name="use_underline">True</property>
+ <property name="use_stock">True</property>
</widget>
</child>
</widget>
diff --git a/src/Gui/settings.GtkBuilder b/src/Gui/settings.GtkBuilder
index 676f3907..859eac9e 100644
--- a/src/Gui/settings.GtkBuilder
+++ b/src/Gui/settings.GtkBuilder
@@ -1,6 +1,6 @@
<?xml version="1.0"?>
<interface>
- <requires lib="gtk+" version="2.14"/>
+ <requires lib="gtk+" version="2.16"/>
<!-- interface-naming-policy project-wide -->
<object class="GtkWindow" id="wPluginsSettings">
<property name="title" translatable="yes">Settings</property>
@@ -67,7 +67,8 @@
<child>
<object class="GtkLabel" id="label4">
<property name="visible">True</property>
- <property name="xalign">0.05000000074505806</property>
+ <property name="xalign">2.2351741291171123e-10</property>
+ <property name="xpad">5</property>
<property name="label" translatable="yes">Web Site:</property>
</object>
<packing>
@@ -78,7 +79,8 @@
<child>
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
- <property name="xalign">0.05000000074505806</property>
+ <property name="xalign">2.2351741291171123e-10</property>
+ <property name="xpad">5</property>
<property name="label" translatable="yes">Author:</property>
</object>
<packing>
@@ -90,7 +92,8 @@
<child>
<object class="GtkLabel" id="label3">
<property name="visible">True</property>
- <property name="xalign">0.05000000074505806</property>
+ <property name="xalign">0</property>
+ <property name="xpad">5</property>
<property name="label" translatable="yes">Version:</property>
</object>
<packing>
@@ -100,7 +103,7 @@
<child>
<object class="GtkLabel" id="lPluginVersion">
<property name="visible">True</property>
- <property name="xalign">0.05000000074505806</property>
+ <property name="xalign">2.2351741291171123e-10</property>
<property name="label" translatable="yes">Nothing selected</property>
</object>
<packing>
@@ -113,7 +116,7 @@
<child>
<object class="GtkLabel" id="lPluginAuthor">
<property name="visible">True</property>
- <property name="xalign">0.05000000074505806</property>
+ <property name="xalign">2.2351741291171123e-10</property>
<property name="label" translatable="yes">Nothing selected</property>
</object>
<packing>
@@ -126,7 +129,7 @@
<child>
<object class="GtkLabel" id="lPluginWebSite">
<property name="visible">True</property>
- <property name="xalign">0.05000000074505806</property>
+ <property name="xalign">0</property>
<property name="label" translatable="yes">Nothing selected</property>
</object>
<packing>
@@ -228,36 +231,174 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
- <object class="GtkTable" id="stable1">
+ <object class="GtkTable" id="common_table">
<property name="visible">True</property>
- <property name="n_rows">3</property>
- <property name="n_columns">3</property>
+ <property name="n_rows">5</property>
+ <property name="n_columns">2</property>
<child>
- <placeholder/>
+ <object class="GtkCheckButton" id="cbOpenGPGCheck">
+ <property name="label" translatable="yes">Check package GPG signature</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="right_attach">2</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
</child>
<child>
- <placeholder/>
+ <object class="GtkLabel" id="lDatabasePlugin">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="xpad">5</property>
+ <property name="label" translatable="yes">Database backend: </property>
+ </object>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
</child>
<child>
- <placeholder/>
+ <object class="GtkComboBox" id="cbDatabase">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
</child>
<child>
- <placeholder/>
+ <object class="GtkLabel" id="lBlacklist">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="xpad">5</property>
+ <property name="label" translatable="yes">Blacklisted packages: </property>
+ </object>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
</child>
<child>
- <placeholder/>
+ <object class="GtkLabel" id="lMaxCrashReportsSize">
+ <property name="visible">True</property>
+ <property name="xalign">2.2351741291171123e-10</property>
+ <property name="xpad">5</property>
+ <property name="label" translatable="yes">Max coredump storage size(MB):</property>
+ </object>
+ <packing>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
</child>
<child>
- <placeholder/>
+ <object class="GtkLabel" id="lOpenGPGPublicKeys">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="xpad">5</property>
+ <property name="label" translatable="yes">GPG keys: </property>
+ </object>
+ <packing>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
</child>
<child>
- <placeholder/>
+ <object class="GtkSpinButton" id="sbMaxCrashReportsSize">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">&#x25CF;</property>
+ <property name="adjustment">adjMaxRepSize</property>
+ <property name="numeric">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
</child>
<child>
- <placeholder/>
+ <object class="GtkHBox" id="blhbox">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkEntry" id="eBlacklist">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">&#x25CF;</property>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="bEditBlackList">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="tooltip_text" translatable="yes">Edit blacklisted packages</property>
+ <property name="image">imEdit</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
</child>
<child>
- <placeholder/>
+ <object class="GtkHBox" id="gpghbox">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkEntry" id="eOpenGPGPublicKeys">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">False</property>
+ <property name="invisible_char">&#x25CF;</property>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="bOpenGPGPublicKeys">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="image">imEdit1</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
</child>
</object>
</child>
@@ -285,11 +426,49 @@
<property name="visible">True</property>
<property name="resize_mode">queue</property>
<child>
- <object class="GtkVBox" id="vbCronJobs">
+ <object class="GtkVBox" id="cjvbox1">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
- <placeholder/>
+ <object class="GtkHBox" id="cjhbox1">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkLabel" id="lPlugin">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Plugin&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="lTime">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Time (or period)&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="vbCronJobs">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
</child>
</object>
</child>
@@ -360,36 +539,103 @@
</packing>
</child>
<child>
- <object class="GtkTable" id="stable3">
+ <object class="GtkVBox" id="actions_vbox">
<property name="visible">True</property>
- <property name="n_rows">3</property>
- <property name="n_columns">3</property>
- <child>
- <placeholder/>
- </child>
- <child>
- <placeholder/>
- </child>
- <child>
- <placeholder/>
- </child>
- <child>
- <placeholder/>
- </child>
- <child>
- <placeholder/>
- </child>
- <child>
- <placeholder/>
- </child>
+ <property name="orientation">vertical</property>
<child>
- <placeholder/>
+ <object class="GtkHBox" id="ahbox1">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkLabel" id="lReporter">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Analyzer plugin&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="lAssociatedActions">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Associated action&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkAlignment" id="action_lbl_align">
+ <property name="visible">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
</child>
<child>
- <placeholder/>
+ <object class="GtkVBox" id="vbActions">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
</child>
<child>
- <placeholder/>
+ <object class="GtkHBox" id="actions_button_hbox">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkAlignment" id="act_align1">
+ <property name="visible">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkAlignment" id="act_align2">
+ <property name="visible">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="bAddAction">
+ <property name="label" translatable="yes">gtk-add</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">2</property>
+ </packing>
</child>
</object>
<packing>
@@ -472,4 +718,97 @@
</object>
</child>
</object>
+ <object class="GtkAdjustment" id="adjMaxRepSize">
+ <property name="upper">1000000</property>
+ <property name="step_increment">1</property>
+ </object>
+ <object class="GtkImage" id="imEdit">
+ <property name="visible">True</property>
+ <property name="stock">gtk-edit</property>
+ <property name="icon-size">1</property>
+ </object>
+ <object class="GtkImage" id="imEdit1">
+ <property name="visible">True</property>
+ <property name="stock">gtk-edit</property>
+ <property name="icon-size">1</property>
+ </object>
+ <object class="GtkWindow" id="wGPGKeys">
+ <property name="title" translatable="yes">GPG Keys</property>
+ <property name="modal">True</property>
+ <property name="default_width">400</property>
+ <property name="default_height">250</property>
+ <child>
+ <object class="GtkVBox" id="gpgkeys_vbox">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkTreeView" id="tvGPGKeys">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="gpg_buttons_hbox">
+ <property name="visible">True</property>
+ <property name="homogeneous">True</property>
+ <child>
+ <object class="GtkButton" id="bAddGPGKey">
+ <property name="label" translatable="yes">gtk-add</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="bRemoveGPGKey">
+ <property name="label" translatable="yes">gtk-remove</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="bSaveGPGKeys">
+ <property name="label" translatable="yes">gtk-ok</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="bCancelGPGKeys">
+ <property name="label" translatable="yes">gtk-cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
</interface>