1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
#include "GraphWidget.hxx"
#include "StapParser.hxx"
#include <cerrno>
#include <cmath>
#include <cstdio>
#include <iostream>
#include <sstream>
#include <string>
#include <map>
#include <gtkmm.h>
#include <gtkmm/stock.h>
#include <gtkmm/main.h>
#include <gtkmm/window.h>
#include <unistd.h>
#include <poll.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
using namespace systemtap;
class GrapherWindow : public Gtk::Window
{
public:
GrapherWindow();
virtual ~GrapherWindow() {}
Gtk::VBox m_Box;
GraphWidget w;
protected:
virtual void on_menu_file_quit();
// menu support
Glib::RefPtr<Gtk::UIManager> m_refUIManager;
Glib::RefPtr<Gtk::ActionGroup> m_refActionGroup;
};
GrapherWindow::GrapherWindow()
{
set_title("systemtap grapher");
add(m_Box);
w.setExtents(0.0, 1.0, 5.0, 0.0);
w.setLineWidth(2);
//Create actions for menus and toolbars:
m_refActionGroup = Gtk::ActionGroup::create();
//File menu:
m_refActionGroup->add(Gtk::Action::create("FileMenu", "File"));
m_refActionGroup->add(Gtk::Action::create("FileQuit", Gtk::Stock::QUIT),
sigc::mem_fun(*this, &GrapherWindow::on_menu_file_quit));
m_refUIManager = Gtk::UIManager::create();
m_refUIManager->insert_action_group(m_refActionGroup);
add_accel_group(m_refUIManager->get_accel_group());
//Layout the actions in a menubar and toolbar:
Glib::ustring ui_info =
"<ui>"
" <menubar name='MenuBar'>"
" <menu action='FileMenu'>"
" <menuitem action='FileQuit'/>"
" </menu>"
" </menubar>"
"</ui>";
try
{
m_refUIManager->add_ui_from_string(ui_info);
}
catch(const Glib::Error& ex)
{
std::cerr << "building menus failed: " << ex.what();
}
Gtk::Widget* pMenubar = m_refUIManager->get_widget("/MenuBar");
if(pMenubar)
m_Box.pack_start(*pMenubar, Gtk::PACK_SHRINK);
m_Box.pack_start(w, Gtk::PACK_EXPAND_WIDGET);
w.show();
show_all_children();
}
void GrapherWindow::on_menu_file_quit()
{
hide();
}
int main(int argc, char** argv)
{
Gtk::Main app(argc, argv);
GrapherWindow win;
win.set_title("Grapher");
win.set_default_size(600, 200);
StapParser stapParser(win, win.w);
StapParser stapParser(win, w);
Glib::signal_io().connect(sigc::mem_fun(stapParser,
&StapParser::ioCallback),
0,
Glib::IO_IN);
Gtk::Main::run(win);
return 0;
}
|