[nemiver/profiler: 4/16] WIP
- From: Fabien Parent <fparent src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nemiver/profiler: 4/16] WIP
- Date: Sun, 8 Jul 2012 14:28:32 +0000 (UTC)
commit 21c208a5c3af62d36e4ae7dcd8ea40fc05bb350b
Author: Fabien Parent <parent f gmail com>
Date: Sat Jun 2 22:15:51 2012 +0200
WIP
configure.ac | 2 +
src/persp/profperspective/Makefile.am | 12 +-
src/persp/profperspective/menus/Makefile.am | 10 ++
src/persp/profperspective/menus/menus.xml | 12 ++
src/persp/profperspective/nmv-call-list.cc | 158 ++++++++++++++++++++
src/persp/profperspective/nmv-call-list.h | 62 ++++++++
.../profperspective/nmv-load-report-dialog.cc | 63 ++++++++
src/persp/profperspective/nmv-load-report-dialog.h | 53 +++++++
src/persp/profperspective/nmv-prof-perspective.cc | 84 ++++++++++-
src/persp/profperspective/ui/Makefile.am | 8 +
src/persp/profperspective/ui/loadreportdialog.ui | 117 +++++++++++++++
11 files changed, 576 insertions(+), 5 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 8579045..524264a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -500,6 +500,8 @@ src/Makefile
src/persp/dbgperspective/sqlscripts/sqlite/Makefile
src/persp/profperspective/Makefile
src/persp/profperspective/profperspective.conf
+ src/persp/profperspective/ui/Makefile
+ src/persp/profperspective/menus/Makefile
data/Makefile
data/icons/Makefile
data/icons/16x16/Makefile
diff --git a/src/persp/profperspective/Makefile.am b/src/persp/profperspective/Makefile.am
index 7920e02..f88bea5 100644
--- a/src/persp/profperspective/Makefile.am
+++ b/src/persp/profperspective/Makefile.am
@@ -1,3 +1,5 @@
+SUBDIRS=ui menus
+
h=$(abs_srcdir)
plugin_config_files= \
@@ -15,7 +17,11 @@ plugin_LTLIBRARIES=libprofperspectiveplugin.la
plugindir= NEMIVER_PLUGINS_DIR@/$(PLUGIN_NAME)
sources= \
$(h)/nmv-prof-perspective.cc \
-$(h)/nmv-prof-perspective.h
+$(h)/nmv-prof-perspective.h \
+$(h)/nmv-call-list.cc \
+$(h)/nmv-call-list.h \
+$(h)/nmv-load-report-dialog.cc \
+$(h)/nmv-load-report-dialog.h
libprofperspectiveplugin_la_SOURCES=$(sources)
libprofperspectiveplugin_la_LDFLAGS= -module -avoid-version -Wl,--as-needed
@@ -30,5 +36,5 @@ INCLUDES= NEMIVERPROFPERSP_CFLAGS@ -DENABLE_NLS=1 -DDATADIR=\"${datadir}\" \
-I$(abs_top_srcdir)/src/uicommon \
-I$(abs_top_srcdir)/src/workbench \
-I$(abs_top_srcdir)/src/persp \
--I$(abs_top_srcdir)/src/profperspective
-
+-I$(abs_top_srcdir)/src/profperspective \
+-I$(abs_top_srcdir)/src/profengine
diff --git a/src/persp/profperspective/menus/Makefile.am b/src/persp/profperspective/menus/Makefile.am
new file mode 100644
index 0000000..2563be1
--- /dev/null
+++ b/src/persp/profperspective/menus/Makefile.am
@@ -0,0 +1,10 @@
+PLUGIN_NAME=profperspective
+
+menusfiles = \
+menus.xml
+
+menusdir = @NEMIVER_PLUGINS_DIR@/$(PLUGIN_NAME)/menus
+menus_DATA = $(menusfiles)
+
+EXTRA_DIST = $(menusfiles)
+
diff --git a/src/persp/profperspective/menus/menus.xml b/src/persp/profperspective/menus/menus.xml
new file mode 100644
index 0000000..940a2be
--- /dev/null
+++ b/src/persp/profperspective/menus/menus.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+ <ui>
+ <menubar name="MenuBar">
+ <menu action="FileMenuAction" name="FileMenu">
+ <placeholder name="FileMenuAdditions">
+ <menuitem action="LoadReportMenuItemAction"
+ name="LoadReportMenuItem"/>
+ </placeholder>
+ </menu>
+ </menubar>
+ </ui>
+
diff --git a/src/persp/profperspective/nmv-call-list.cc b/src/persp/profperspective/nmv-call-list.cc
new file mode 100644
index 0000000..6f5f2b4
--- /dev/null
+++ b/src/persp/profperspective/nmv-call-list.cc
@@ -0,0 +1,158 @@
+//Author: Fabien Parent
+/*
+ *This file is part of the Nemiver project
+ *
+ *Nemiver is free software; you can redistribute
+ *it and/or modify it under the terms of
+ *the GNU General Public License as published by the
+ *Free Software Foundation; either version 2,
+ *or (at your option) any later version.
+ *
+ *Nemiver is distributed in the hope that it will
+ *be useful, but WITHOUT ANY WARRANTY;
+ *without even the implied warranty of
+ *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *See the GNU General Public License for more details.
+ *
+ *You should have received a copy of the
+ *GNU General Public License along with Nemiver;
+ *see the file COPYING.
+ *If not, write to the Free Software Foundation,
+ *Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ *See COPYRIGHT file copyright information.
+ */
+
+#include "nmv-call-list.h"
+#include "common/nmv-exception.h"
+#include "uicommon/nmv-ui-utils.h"
+#include <gtkmm/treeview.h>
+#include <gtkmm/treemodel.h>
+#include <gtkmm/treestore.h>
+#include <gtkmm/scrolledwindow.h>
+#include <glib/gi18n.h>
+
+NEMIVER_BEGIN_NAMESPACE (nemiver)
+
+struct CallListColumns : public Gtk::TreeModel::ColumnRecord
+{
+ CallListColumns ()
+ {
+ add (function_name);
+ add (usage);
+ add (call_node);
+ }
+
+ Gtk::TreeModelColumn<CallGraphNodeSafePtr> call_node;
+ Gtk::TreeModelColumn<Glib::ustring> function_name;
+ Gtk::TreeModelColumn<float> usage;
+};
+
+struct CallList::Priv {
+ Gtk::TreeView treeview;
+ Gtk::ScrolledWindow body;
+ CallListColumns columns;
+ Glib::RefPtr<Gtk::TreeStore> store;
+ IProfilerSafePtr profiler;
+
+ Priv (const IProfilerSafePtr &a_profiler) :
+ profiler (a_profiler)
+ {
+ body.add (treeview);
+ body.set_policy (Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
+ body.show_all ();
+
+ store = Gtk::TreeStore::create (columns);
+
+ Gtk::CellRendererProgress *renderer =
+ Gtk::manage (new Gtk::CellRendererProgress);
+ THROW_IF_FAIL (renderer);
+
+ treeview.append_column (_("Function"), columns.function_name);
+ int usage_col_id = treeview.append_column (_("Usage"), *renderer);
+ treeview.set_model (store);
+ //treeview.signal_row_activated ().connect
+ // (sigc::mem_fun (*this, &CallList::Priv::on_signal_row_activated));
+
+ Gtk::TreeViewColumn *column = treeview.get_column (usage_col_id - 1);
+ if (column) {
+ column->add_attribute (renderer->property_value(), columns.usage);
+ }
+ }
+
+/* void
+ on_signal_row_activated (const Gtk::TreeModel::Path &a_path,
+ Gtk::TreeViewColumn*)
+ {
+ NEMIVER_TRY
+
+ THROW_IF_FAIL (store);
+
+ Gtk::TreeModel::iterator iter = store->get_iter (a_path);
+ if (!iter) {
+ return;
+ }
+
+ CallNodeSafePtr call_node = iter->get_value (columns.call_node);
+ THROW_IF_FAIL (call_node);
+
+ THROW_IF_FAIL (profiler);
+ profiler->annotate_source_file (call_node->filepath ());
+
+ NEMIVER_CATCH
+ }
+*/
+
+ void
+ add_node (CallGraphNodeSafePtr a_call_graph_node,
+ Gtk::TreeModel::iterator a_parent = Gtk::TreeModel::iterator ())
+ {
+ const std::list<CallGraphNodeSafePtr>& children =
+ a_call_graph_node->children ();
+ for (std::list<CallGraphNodeSafePtr>::const_iterator iter =
+ children.begin ();
+ iter != children.end ();
+ ++iter) {
+
+ Gtk::TreeModel::iterator row;
+ if (a_parent) {
+ row = store->append (a_parent->children ());
+ } else {
+ row = store->append ();
+ }
+
+ if (row) {
+ (*row)[columns.function_name] = (*iter)->function ();
+ (*row)[columns.usage] = (*iter)->percentage ();
+ (*row)[columns.call_node] = *iter;
+ }
+
+ add_node (*iter, row);
+ }
+ }
+};
+
+Gtk::Widget& CallList::widget () const
+{
+ THROW_IF_FAIL (m_priv);
+ return m_priv->body;
+}
+
+void
+CallList::load_call_graph (CallGraphSafePtr a_call_graph)
+{
+ THROW_IF_FAIL (m_priv);
+ m_priv->add_node(a_call_graph);
+}
+
+CallList::CallList (const IProfilerSafePtr &a_profiler) :
+ m_priv (new Priv (a_profiler))
+{
+}
+
+CallList::~CallList ()
+{
+}
+
+NEMIVER_END_NAMESPACE (nemiver)
+
diff --git a/src/persp/profperspective/nmv-call-list.h b/src/persp/profperspective/nmv-call-list.h
new file mode 100644
index 0000000..436ebb5
--- /dev/null
+++ b/src/persp/profperspective/nmv-call-list.h
@@ -0,0 +1,62 @@
+//Author: Fabien Parent
+/*
+ *This file is part of the Nemiver project
+ *
+ *Nemiver is free software; you can redistribute
+ *it and/or modify it under the terms of
+ *the GNU General Public License as published by the
+ *Free Software Foundation; either version 2,
+ *or (at your option) any later version.
+ *
+ *Nemiver is distributed in the hope that it will
+ *be useful, but WITHOUT ANY WARRANTY;
+ *without even the implied warranty of
+ *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *See the GNU General Public License for more details.
+ *
+ *You should have received a copy of the
+ *GNU General Public License along with Nemiver;
+ *see the file COPYING.
+ *If not, write to the Free Software Foundation,
+ *Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ *See COPYRIGHT file copyright information.
+ */
+#ifndef __NMV_CALL_LIST_H__
+#define __NMV_CALL_LIST_H__
+
+#include "common/nmv-safe-ptr.h"
+#include "common/nmv-namespace.h"
+#include "nmv-call-graph-node.h"
+#include "nmv-i-profiler.h"
+
+namespace Gtk {
+ class Widget;
+}
+
+NEMIVER_BEGIN_NAMESPACE (nemiver)
+
+using common::SafePtr;
+
+class CallNode;
+typedef CallNode CallTree;
+
+class CallList {
+ //non copyable
+ CallList (const CallList&);
+ CallList& operator= (const CallList&);
+
+ struct Priv;
+ SafePtr<Priv> m_priv;
+public:
+
+ CallList (const IProfilerSafePtr&);
+ ~CallList ();
+ Gtk::Widget& widget () const;
+ void load_call_graph (CallGraphSafePtr);
+};
+
+NEMIVER_END_NAMESPACE (nemiver)
+
+#endif //__NMV_CALL_LIST_H__
+
diff --git a/src/persp/profperspective/nmv-load-report-dialog.cc b/src/persp/profperspective/nmv-load-report-dialog.cc
new file mode 100644
index 0000000..18a8cbc
--- /dev/null
+++ b/src/persp/profperspective/nmv-load-report-dialog.cc
@@ -0,0 +1,63 @@
+//Author: Fabien Parent
+/*
+ *This file is part of the Nemiver project
+ *
+ *Nemiver is free software; you can redistribute
+ *it and/or modify it under the terms of
+ *the GNU General Public License as published by the
+ *Free Software Foundation; either version 2,
+ *or (at your option) any later version.
+ *
+ *Nemiver is distributed in the hope that it will
+ *be useful, but WITHOUT ANY WARRANTY;
+ *without even the implied warranty of
+ *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *See the GNU General Public License for more details.
+ *
+ *You should have received a copy of the
+ *GNU General Public License along with Nemiver;
+ *see the file COPYING.
+ *If not, write to the Free Software Foundation,
+ *Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ *See COPYRIGHT file copyright information.
+ */
+#include "config.h"
+#include <vector>
+#include <glib/gi18n.h>
+#include <gtkmm/dialog.h>
+#include <gtkmm/filechooserbutton.h>
+#include <gtkmm/stock.h>
+#include "common/nmv-exception.h"
+#include "common/nmv-env.h"
+#include "common/nmv-ustring.h"
+#include "nmv-load-report-dialog.h"
+#include "nmv-ui-utils.h"
+
+using namespace std;
+using namespace nemiver::common;
+
+NEMIVER_BEGIN_NAMESPACE (nemiver)
+
+class LoadReportDialog::Priv {
+ Gtk::Button *okbutton;
+
+public:
+ Priv (const Glib::RefPtr<Gtk::Builder> &/*a_gtkbuilder*/) :
+ okbutton (0)
+ {
+ }
+};//end class LoadReportDialog::Priv
+
+LoadReportDialog::LoadReportDialog (const UString &a_root_path) :
+ Dialog (a_root_path, "loadreportdialog.ui", "loadreportdialog")
+{
+ m_priv.reset (new Priv (gtkbuilder ()));
+}
+
+LoadReportDialog::~LoadReportDialog ()
+{
+}
+
+NEMIVER_END_NAMESPACE (nemiver)
+
diff --git a/src/persp/profperspective/nmv-load-report-dialog.h b/src/persp/profperspective/nmv-load-report-dialog.h
new file mode 100644
index 0000000..f57011b
--- /dev/null
+++ b/src/persp/profperspective/nmv-load-report-dialog.h
@@ -0,0 +1,53 @@
+//Author: Fabien Parent
+/*
+ *This file is part of the Nemiver project
+ *
+ *Nemiver is free software; you can redistribute
+ *it and/or modify it under the terms of
+ *the GNU General Public License as published by the
+ *Free Software Foundation; either version 2,
+ *or (at your option) any later version.
+ *
+ *Nemiver is distributed in the hope that it will
+ *be useful, but WITHOUT ANY WARRANTY;
+ *without even the implied warranty of
+ *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *See the GNU General Public License for more details.
+ *
+ *You should have received a copy of the
+ *GNU General Public License along with Nemiver;
+ *see the file COPYING.
+ *If not, write to the Free Software Foundation,
+ *Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ *See COPYRIGHT file copyright information.
+ */
+#ifndef __NMV_LOAD_REPORT_DIALOG_H__
+#define __NMV_LOAD_REPORT_DIALOG_H__
+
+#include "common/nmv-safe-ptr-utils.h"
+#include "nmv-dialog.h"
+
+NEMIVER_BEGIN_NAMESPACE (nemiver)
+
+namespace common {
+class UString;
+}
+
+using nemiver::common::UString;
+using nemiver::common::SafePtr;
+
+class LoadReportDialog : public Dialog {
+ class Priv;
+ SafePtr<Priv> m_priv;
+
+public:
+ LoadReportDialog (const UString &a_resource_root_path);
+ virtual ~LoadReportDialog ();
+
+};//end class LoadReportDialog
+
+NEMIVER_END_NAMESPACE (nemiver)
+
+#endif //__NMV_LOAD_REPORT_DIALOG_H__
+
diff --git a/src/persp/profperspective/nmv-prof-perspective.cc b/src/persp/profperspective/nmv-prof-perspective.cc
index f78cc6a..7757a7c 100644
--- a/src/persp/profperspective/nmv-prof-perspective.cc
+++ b/src/persp/profperspective/nmv-prof-perspective.cc
@@ -24,7 +24,11 @@
*/
#include "nmv-prof-perspective.h"
+#include "nmv-ui-utils.h"
+#include "nmv-load-report-dialog.h"
+
#include <list>
+#include <glib/gi18n.h>
#include <gtkmm/widget.h>
NEMIVER_BEGIN_NAMESPACE (nemiver)
@@ -34,8 +38,10 @@ class ProfPerspective : public IProfPerspective {
ProfPerspective (const IProfPerspective&);
ProfPerspective& operator= (const IProfPerspective&);
- Gtk::TextView body;
+ Glib::RefPtr<Gtk::ActionGroup> default_action_group;
+ Gtk::HPaned body;
IWorkbench *workbench;
+
sigc::signal<void, bool> signal_activated;
sigc::signal<void> signal_layout_changed;
@@ -57,6 +63,9 @@ public:
Gtk::Widget* load_menu (const UString &a_filename,
const UString &a_widget_name);
bool agree_to_shutdown ();
+ void init_actions ();
+ void load_report_file ();
+ void on_load_report_file_action ();
sigc::signal<void, bool>& activated_signal ();
sigc::signal<void>& layout_changed_signal ();
@@ -98,6 +107,7 @@ void
ProfPerspective::do_init (IWorkbench *a_workbench)
{
workbench = a_workbench;
+ init_actions ();
}
const UString&
@@ -126,10 +136,80 @@ ProfPerspective::get_workbench ()
return *workbench;
}
+void
+ProfPerspective::init_actions ()
+{
+ Gtk::StockID nil_stock_id ("");
+ sigc::slot<void> nil_slot;
+ Glib::RefPtr<Gtk::UIManager> uimanager = get_workbench ().get_ui_manager ();
+ THROW_IF_FAIL (uimanager);
+
+ static ui_utils::ActionEntry s_default_action_entries [] = {
+ {
+ "LoadReportMenuItemAction",
+ nil_stock_id,
+ _("_Load Report File..."),
+ _("Load a report file from disk"),
+ sigc::mem_fun (*this, &ProfPerspective::on_load_report_file_action),
+ ui_utils::ActionEntry::DEFAULT,
+ "",
+ false
+ }
+ };
+
+ default_action_group =
+ Gtk::ActionGroup::create ("profiler-default-action-group");
+ default_action_group->set_sensitive (true);
+
+ int num_actions =
+ sizeof (s_default_action_entries) / sizeof (ui_utils::ActionEntry);
+
+ ui_utils::add_action_entries_to_action_group
+ (s_default_action_entries, num_actions, default_action_group);
+
+ uimanager->insert_action_group (default_action_group);
+
+ get_workbench ().get_root_window ().add_accel_group
+ (uimanager->get_accel_group ());
+}
+
std::list<Gtk::UIManager::ui_merge_id>
ProfPerspective::edit_workbench_menu ()
{
- return std::list<Gtk::UIManager::ui_merge_id> ();
+ std::string relative_path = Glib::build_filename ("menus", "menus.xml");
+ std::string absolute_path;
+ THROW_IF_FAIL (build_absolute_resource_path
+ (Glib::filename_to_utf8 (relative_path), absolute_path));
+
+ Glib::RefPtr<Gtk::UIManager> uimanager = get_workbench ().get_ui_manager ();
+ THROW_IF_FAIL (uimanager);
+ Gtk::UIManager::ui_merge_id menubar_merge_id =
+ uimanager->add_ui_from_file (Glib::filename_to_utf8 (absolute_path));
+
+ std::list<Gtk::UIManager::ui_merge_id> merge_ids;
+ merge_ids.push_back (menubar_merge_id);
+ return merge_ids;
+}
+
+void
+ProfPerspective::load_report_file ()
+{
+ LoadReportDialog dialog (plugin_path ());
+
+ int result = dialog.run ();
+ if (result != Gtk::RESPONSE_OK) {
+ return;
+ }
+}
+
+void
+ProfPerspective::on_load_report_file_action ()
+{
+ NEMIVER_TRY
+
+ load_report_file ();
+
+ NEMIVER_CATCH
}
Gtk::Widget*
diff --git a/src/persp/profperspective/ui/Makefile.am b/src/persp/profperspective/ui/Makefile.am
new file mode 100644
index 0000000..b7347c3
--- /dev/null
+++ b/src/persp/profperspective/ui/Makefile.am
@@ -0,0 +1,8 @@
+PLUGIN_NAME=profperspective
+uifiles = loadreportdialog.ui
+
+uidir = @NEMIVER_PLUGINS_DIR@/$(PLUGIN_NAME)/ui
+ui_DATA = $(uifiles)
+
+EXTRA_DIST = $(uifiles)
+
diff --git a/src/persp/profperspective/ui/loadreportdialog.ui b/src/persp/profperspective/ui/loadreportdialog.ui
new file mode 100644
index 0000000..f4396ae
--- /dev/null
+++ b/src/persp/profperspective/ui/loadreportdialog.ui
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.0 -->
+ <object class="GtkDialog" id="loadreportdialog">
+ <property name="width_request">300</property>
+ <property name="can_focus">False</property>
+ <property name="title" translatable="yes">Choose a Report File</property>
+ <property name="resizable">False</property>
+ <property name="default_width">350</property>
+ <property name="default_height">200</property>
+ <property name="type_hint">dialog</property>
+ <child internal-child="vbox">
+ <object class="GtkBox" id="dialog-vbox1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child internal-child="action_area">
+ <object class="GtkButtonBox" id="dialog-action_area1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="layout_style">end</property>
+ <child>
+ <object class="GtkButton" id="cancelbutton">
+ <property name="label">gtk-cancel</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="receives_default">False</property>
+ <property name="use_action_appearance">False</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="okbutton">
+ <property name="label">gtk-ok</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="receives_default">False</property>
+ <property name="use_action_appearance">False</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="vbox1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="border_width">6</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkFrame" id="frame_reportfile">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkAlignment" id="alignment2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkFileChooserButton" id="filechooserbutton_reportfile">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="title" translatable="yes">Select A Core File</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label_reportfile">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes"><b>Report File:</b></property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="-6">cancelbutton</action-widget>
+ <action-widget response="-5">okbutton</action-widget>
+ </action-widgets>
+ </object>
+</interface>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]