gnms 2.1.0.rc1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of gnms might be problematic. Click here for more details.

Files changed (140) hide show
  1. data/LICENSE +459 -0
  2. data/README +29 -0
  3. data/bin/gnms +11 -0
  4. data/gnms.gemspec +70 -0
  5. data/lib/cmd_parse.rb +747 -0
  6. data/lib/config_global.rb +414 -0
  7. data/lib/contact.rb +171 -0
  8. data/lib/external/crypt/blowfish-tables.rb +190 -0
  9. data/lib/external/crypt/blowfish.rb +110 -0
  10. data/lib/external/crypt/cbc.rb +123 -0
  11. data/lib/external/crypt/stringxor.rb +27 -0
  12. data/lib/external/fog.rb +41 -0
  13. data/lib/external/jjmx.rb +45 -0
  14. data/lib/external/sms.rb +282 -0
  15. data/lib/external/xmpp4r-simple.rb +497 -0
  16. data/lib/format.rb +85 -0
  17. data/lib/gnms.rb +329 -0
  18. data/lib/gui/about_window.rb +177 -0
  19. data/lib/gui/adddelnode.rb +799 -0
  20. data/lib/gui/base_window.rb +789 -0
  21. data/lib/gui/canvas_map.rb +498 -0
  22. data/lib/gui/charts/gruff.rb +51 -0
  23. data/lib/gui/color_macro.rb +145 -0
  24. data/lib/gui/config_window.rb +2151 -0
  25. data/lib/gui/custom_plugin_window.rb +90 -0
  26. data/lib/gui/debug_window.rb +46 -0
  27. data/lib/gui/event_window.rb +469 -0
  28. data/lib/gui/find_node_window.rb +438 -0
  29. data/lib/gui/help_window.rb +47 -0
  30. data/lib/gui/ipcalculator.rb +147 -0
  31. data/lib/gui/jmx_ref_window.rb +309 -0
  32. data/lib/gui/link_view.rb +46 -0
  33. data/lib/gui/mib_browser.rb +585 -0
  34. data/lib/gui/node_host_property.rb +3712 -0
  35. data/lib/gui/node_host_view.rb +270 -0
  36. data/lib/gui/node_network_property.rb +1059 -0
  37. data/lib/gui/node_network_view.rb +186 -0
  38. data/lib/gui/node_view.rb +672 -0
  39. data/lib/gui/oid_ref_window.rb +288 -0
  40. data/lib/gui/snmptrap_ref_window.rb +288 -0
  41. data/lib/gui/sub/account_frame.rb +196 -0
  42. data/lib/gui/sub/contact_frame.rb +519 -0
  43. data/lib/gui/syslog_ref_window.rb +288 -0
  44. data/lib/gui/treenode_window.rb +320 -0
  45. data/lib/gui/update_window.rb +124 -0
  46. data/lib/gui/widgets.rb +169 -0
  47. data/lib/gui/wmi_ref_window.rb +286 -0
  48. data/lib/interface.rb +16 -0
  49. data/lib/ipcalc.rb +266 -0
  50. data/lib/link.rb +45 -0
  51. data/lib/main.rb +1091 -0
  52. data/lib/monitor/client/custom/custom_monitoring.rb +40 -0
  53. data/lib/monitor/client/jmx/jmx_attr_monitoring.rb +36 -0
  54. data/lib/monitor/client/jmx/jmx_monitoring.rb +83 -0
  55. data/lib/monitor/client/jmx/jmx_ref.rb +114 -0
  56. data/lib/monitor/client/snmp/mibs/SNMPv2-MIB.txt +854 -0
  57. data/lib/monitor/client/snmp/mibs/SNMPv2-SMI.txt +344 -0
  58. data/lib/monitor/client/snmp/oid_ref.rb +141 -0
  59. data/lib/monitor/client/snmp/snmp.rb +178 -0
  60. data/lib/monitor/client/snmp/snmp_monitoring.rb +58 -0
  61. data/lib/monitor/client/wmi/wmi.rb +139 -0
  62. data/lib/monitor/client/wmi/wmi_monitoring.rb +60 -0
  63. data/lib/monitor/client/wmi/wmi_ref.rb +141 -0
  64. data/lib/monitor/custom_plugin.rb +50 -0
  65. data/lib/monitor/server/msg_buffer.rb +39 -0
  66. data/lib/monitor/server/snmp/snmptrap_analyzer.rb +81 -0
  67. data/lib/monitor/server/snmp/snmptrap_capture.rb +26 -0
  68. data/lib/monitor/server/snmp/snmptrap_monitoring.rb +32 -0
  69. data/lib/monitor/server/snmp/snmptrap_ref.rb +135 -0
  70. data/lib/monitor/server/snmp/snmptrap_server.rb +50 -0
  71. data/lib/monitor/server/syslog/syslog_analyzer.rb +141 -0
  72. data/lib/monitor/server/syslog/syslog_capture.rb +28 -0
  73. data/lib/monitor/server/syslog/syslog_monitoring.rb +32 -0
  74. data/lib/monitor/server/syslog/syslog_ref.rb +136 -0
  75. data/lib/monitor/server/syslog/syslog_server.rb +43 -0
  76. data/lib/node.rb +1020 -0
  77. data/lib/node_db.rb +2668 -0
  78. data/lib/node_host.rb +215 -0
  79. data/lib/node_listener.rb +639 -0
  80. data/lib/node_network.rb +269 -0
  81. data/lib/node_property.rb +39 -0
  82. data/lib/notify/alarm.rb +247 -0
  83. data/lib/notify/irc_bot.rb +167 -0
  84. data/lib/notify/xmpp_bot.rb +107 -0
  85. data/lib/service.rb +36 -0
  86. data/lib/version.rb +8 -0
  87. data/pixmap/bg/map_bg.jpg +0 -0
  88. data/pixmap/bg/map_bg2.jpg +0 -0
  89. data/pixmap/logo.jpg +0 -0
  90. data/pixmap/logo_icon.png +0 -0
  91. data/pixmap/os/3com.png +0 -0
  92. data/pixmap/os/aix.gif +0 -0
  93. data/pixmap/os/amiga.png +0 -0
  94. data/pixmap/os/beos.png +0 -0
  95. data/pixmap/os/cisco.png +0 -0
  96. data/pixmap/os/freebsd.png +0 -0
  97. data/pixmap/os/hp.png +0 -0
  98. data/pixmap/os/hurd.gif +0 -0
  99. data/pixmap/os/irix.gif +0 -0
  100. data/pixmap/os/linux.png +0 -0
  101. data/pixmap/os/mac.png +0 -0
  102. data/pixmap/os/netbsd.gif +0 -0
  103. data/pixmap/os/netware.png +0 -0
  104. data/pixmap/os/openbsd.png +0 -0
  105. data/pixmap/os/os2warp.gif +0 -0
  106. data/pixmap/os/qnx.gif +0 -0
  107. data/pixmap/os/sco.gif +0 -0
  108. data/pixmap/os/sgi.xpm +111 -0
  109. data/pixmap/os/solaris.gif +0 -0
  110. data/pixmap/os/unix.gif +0 -0
  111. data/pixmap/os/unknown.png +0 -0
  112. data/pixmap/os/vms.xpm +345 -0
  113. data/pixmap/os/windows.png +0 -0
  114. data/pixmap/type/cloud.png +0 -0
  115. data/pixmap/type/device.png +0 -0
  116. data/pixmap/type/firewall.png +0 -0
  117. data/pixmap/type/gateway.png +0 -0
  118. data/pixmap/type/home.png +0 -0
  119. data/pixmap/type/host.png +0 -0
  120. data/pixmap/type/network.png +0 -0
  121. data/pixmap/type/printer.png +0 -0
  122. data/pixmap/type/router.png +0 -0
  123. data/pixmap/type/server.png +0 -0
  124. data/pixmap/type/switch.png +0 -0
  125. data/pixmap/type/vm.png +0 -0
  126. data/plugins/Defaultme.rb +7 -0
  127. data/plugins/DnsCheck.rb +46 -0
  128. data/plugins/FooMonitor.rb +26 -0
  129. data/plugins/HttpVirtualHostMonitor.rb +43 -0
  130. data/plugins/MysqlShowStatusMonitor.rb +64 -0
  131. data/plugins/PgsqlPercentConnectionMonitor.rb +72 -0
  132. data/plugins/SshCpuLoadMonitor.rb +85 -0
  133. data/plugins/SshDiskMonitor.rb +69 -0
  134. data/plugins/SshFgtAvExpiredMonitor.rb +75 -0
  135. data/plugins/SshPercentUsedRamMonitor.rb +74 -0
  136. data/plugins/TelnetCpuLoadMonitor.rb +69 -0
  137. data/plugins/example1.rb +15 -0
  138. data/plugins/example2.rb +7 -0
  139. data/sound/beep.wav +0 -0
  140. metadata +378 -0
@@ -0,0 +1,124 @@
1
+ require 'net/http'
2
+
3
+ #
4
+ # get changelog from version arg
5
+ #
6
+ def get_changelog(version)
7
+ changelog_text=""
8
+ #changelog file name is changelog-last_version_file_name
9
+ changelog_base_name="changelog-"
10
+
11
+ begin
12
+ Net::HTTP.start(GNMS_PROJECT_SERVER, 80) do |http|
13
+ response,=http.get('/'+GNMS_PROJECT_URL+'/'+changelog_base_name+version)
14
+ response.body.each do |str|
15
+ changelog_text=changelog_text+"#{str}"
16
+ end
17
+ end
18
+ rescue
19
+ end
20
+ if changelog_text == ""
21
+ return "No changelog available"
22
+ else
23
+ return changelog_text
24
+ end
25
+ end
26
+
27
+ #
28
+ # check new update from the main home project url
29
+ #
30
+ #
31
+ def check_update_window
32
+ last_version_file_name="lastversion"
33
+ window = Gtk::Window.new
34
+ window.set_size_request(500,250)
35
+ window.set_title "Check update"
36
+ window.set_transient_for($win)
37
+
38
+ vbox = Gtk::VBox.new
39
+ vbox.show
40
+ window.add vbox
41
+
42
+ Net::HTTP.version_1_1
43
+ last_version=""
44
+ text = Gtk::TextView.new
45
+ combo_last_version = Gtk::ComboBox.new
46
+ Thread.start {
47
+
48
+ begin
49
+ Gtk.thread_protect do
50
+ $win.hide_update_menu_entry()
51
+ end
52
+ Net::HTTP.start(GNMS_PROJECT_SERVER, 80) do |http|
53
+ response,=http.get('/'+GNMS_PROJECT_URL+'/'+last_version_file_name)
54
+ response.body.each do |str|
55
+ re=Regexp.new('^(\d+)\.(\d+)\.?(.+)?$')
56
+ str.scan(re) do |m1, m2, m3|
57
+ if (m1.to_i() > GNMSMAJORVERSION)
58
+ last_version=last_version+"#{str}"
59
+ elsif (m1.to_i() >= GNMSMAJORVERSION) && (m2.to_i() > GNMSMINORVERSION)
60
+ last_version=last_version+"#{str}"
61
+ elsif (m1.to_i() >= GNMSMAJORVERSION) && (m2.to_i() >= GNMSMINORVERSION)
62
+ if m3 != nil
63
+ if m3 > GNMSTAGVERSION
64
+ last_version=last_version+"#{str}"
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+ Gtk.thread_protect do
71
+ hbox=Gtk::HBox.new
72
+ labelf=Gtk::Label.new("Choose version")
73
+ hbox.add labelf
74
+ last_version.split(/\n/).each {|v|
75
+ combo_last_version.append_string(v)
76
+ }
77
+ combo_last_version.show
78
+ hbox.add combo_last_version
79
+ vbox.add hbox
80
+ combo_last_version.signal_connect("changed") {|val|
81
+ if val.text != ""
82
+ text.buffer.delete(text.buffer.start_iter,text.buffer.end_iter)
83
+ text.buffer.insert_at_cursor(get_changelog(combo_last_version.active_text).to_s)
84
+ end
85
+ }
86
+ end
87
+ end
88
+ rescue
89
+ #no update available
90
+ Gtk.thread_protect do
91
+ window.set_size_request(350,25)
92
+ label=Gtk::Label.new("No update available for version : "+GNMSVERSION)
93
+ vbox.add label
94
+ end
95
+ end
96
+ Gtk.thread_protect do
97
+ if last_version != ""
98
+ changelog=get_changelog(combo_last_version.active_text)
99
+ text.cursor_visible=false
100
+ text.set_size_request(-1,225)
101
+ text.set_editable(false)
102
+ text.show
103
+ scrolled_window = Gtk::ScrolledWindow.new(nil, nil)
104
+ scrolled_window.border_width=2
105
+ scrolled_window.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC)
106
+ scrolled_window.show
107
+ scrolled_window.add(text)
108
+ text.grab_focus
109
+ text.freeze
110
+ text.buffer.insert_at_cursor(changelog.to_s)
111
+ vbox.add scrolled_window
112
+ end
113
+ window.show_all
114
+ window.signal_connect("key_press_event") {|w,e|
115
+ if e.keyval == Gdk::Keyval::GDK_Escape
116
+ window.destroy
117
+ end
118
+ }
119
+ window.signal_connect("destroy") {|w,e|
120
+ $win.show_update_menu_entry()
121
+ }
122
+ end
123
+ }
124
+ end
@@ -0,0 +1,169 @@
1
+
2
+ module Gtk
3
+ class CList < TreeView
4
+ attr_accessor :nb_event
5
+
6
+ def set_sort_column(col_src,col_dst)
7
+ get_column(col_src-1).set_sort_column_id(col_dst)
8
+ end
9
+ def initialize(ttitle)
10
+ @nb_event=0
11
+ super(Gtk::ListStore.new(Gdk::Color, *ttitle.collect{|d| d.class}))
12
+ set_enable_search(false)
13
+ i=1
14
+ renderer=Gtk::CellRendererText.new()
15
+ #renderer.background = "pink"
16
+ ttitle.each {|col|
17
+ column=Gtk::TreeViewColumn.new(col,
18
+ renderer,{
19
+ :background_gdk => 0,
20
+ :text => i
21
+ })
22
+ column.set_sort_column_id(i)
23
+ append_column(column)
24
+ i+=1
25
+ }
26
+ end
27
+
28
+ def append(ttext)
29
+ row=model.append
30
+ set_bg_color(ttext[1], row)
31
+ i=1
32
+ ttext.each {|val|
33
+ row[i]=val
34
+ i+=1
35
+ }
36
+ @nb_event+=1
37
+ end
38
+
39
+ def prepend(ttext)
40
+ row=model.prepend
41
+ if ttext
42
+ set_bg_color(ttext[1], row)
43
+ i=1
44
+ ttext.each {|val|
45
+ row[i]=val
46
+ i+=1
47
+ }
48
+ @nb_event+=1
49
+ end
50
+ end
51
+
52
+ def remove(row)
53
+ if model.remove(row)
54
+ @nb_event-=1
55
+ end
56
+ end
57
+
58
+ def clear()
59
+ model.clear()
60
+ @nb_event=0
61
+ end
62
+
63
+ def get_value(iter, column)
64
+ model.get_value(iter, column) unless iter == nil
65
+ end
66
+
67
+ #
68
+ # change title of each column
69
+ #
70
+ def changed_all_column_name(table)
71
+ indx=0
72
+ columns.each do |col|
73
+ col.set_title(table[indx])
74
+ indx+=1
75
+ end
76
+ end
77
+
78
+ #
79
+ # change title to str of column col
80
+ #
81
+ def changed_column_name(col,str)
82
+ get_column(col).set_title(str) unless col > (columns.size - 1)
83
+ end
84
+
85
+
86
+ private
87
+ def set_bg_color(val, row)
88
+ case val
89
+ when ""
90
+ when "PANIC"
91
+ row[0]=$red
92
+ when "ALERT"
93
+ row[0]=$orange
94
+ when "ERR"
95
+ row[0]=$yellow
96
+ when "WARN"
97
+ row[0]=$blue
98
+ when "INFO"
99
+ row[0]=$green
100
+ else
101
+ #perhaps it s not a level it s a status ?
102
+ set_bg_color(get_level_from_status(val),row)
103
+ end
104
+ end
105
+ end
106
+
107
+ class ImageComboList < Gtk::ComboBox
108
+
109
+ @subdir = String.new
110
+ @filename = String.new
111
+ @filetype = String.new
112
+
113
+ def filename
114
+ return "#{@subdir}/#{self.active_iter[1]}.#{@filetype}"
115
+ end
116
+
117
+ def name
118
+ return "#{self.active_iter[1]}"
119
+ end
120
+
121
+ def selected
122
+ if self
123
+ return self.active
124
+ else
125
+ return nil
126
+ end
127
+ end
128
+
129
+ def initialize(subd, filename, filetype="png")
130
+ @subdir = subd
131
+ @filename = filename
132
+ @filetype = filetype
133
+
134
+ item_active = 0
135
+
136
+ model = Gtk::ListStore.new(Gdk::Pixbuf, String)
137
+ menu_icon_size = Gtk::IconSize.lookup(Gtk::IconSize::MENU)[0]
138
+ pos = 0
139
+ for typefile in Dir["#{PIXMAP_PATH}/#{subd}/*#{filetype}"].sort
140
+ iter = model.append
141
+ iter[0] = Gdk::Pixbuf.new(typefile, menu_icon_size, menu_icon_size)
142
+ iter[1] = typefile[PIXMAP_PATH.length+subd.length + 2 ,typefile.size - PIXMAP_PATH.length - subd.length - 2 - filetype.length - 1]
143
+ if filename and iter[1] == filename
144
+ item_active = pos
145
+ end
146
+ pos +=1
147
+ end
148
+
149
+ super(model)
150
+ self.active = item_active
151
+
152
+ # column 1
153
+ renderer = Gtk::CellRendererPixbuf.new
154
+ self.pack_start(renderer, false)
155
+ self.set_attributes(renderer, :pixbuf => 0)
156
+
157
+ # column 2
158
+ renderer = Gtk::CellRendererText.new
159
+ self.pack_start(renderer, true)
160
+ self.set_attributes(renderer, :text => 1)
161
+
162
+ #self.signal_connect("changed") do
163
+ # p self.filename
164
+ #end
165
+ end
166
+ end
167
+
168
+ end
169
+
@@ -0,0 +1,286 @@
1
+ class WMIRefWindow
2
+
3
+ def clear_ls()
4
+ @wmi_ref_ls.clear()
5
+ end
6
+ #populate listview with saved values
7
+ def populate_ls()
8
+ $wmi_refs.each_key do |name|
9
+ iter = @wmi_ref_ls.append
10
+ iter[0] = name
11
+ iter[1] = $wmi_refs[name].description
12
+ end
13
+ end
14
+
15
+ def initialize()
16
+ #save wmiref hash
17
+ @wmirefs_backup=$wmi_refs.dup
18
+ @window=Gtk::Window.new
19
+ @window.set_title("WMI Request Ref configuration")
20
+ @window.set_size_request(300, 200)
21
+
22
+ @window.signal_connect("key_press_event") {|w,e|
23
+ if e.keyval == Gdk::Keyval::GDK_Escape
24
+ @window.destroy
25
+ end
26
+ }
27
+
28
+ frame = Gtk::Frame::new
29
+ frame.border_width=5
30
+ frame.show
31
+ vbox_root=Gtk::VBox::new
32
+ vbox_root.show
33
+ @window.add vbox_root
34
+ vbox_root.add frame
35
+
36
+ vbox = Gtk::VBox.new(false,0)
37
+ vbox.show
38
+ frame.add vbox
39
+
40
+ @wmi_ref_ls = Gtk::ListStore.new(String, String)
41
+ @wmi_ref_view = Gtk::TreeView.new(@wmi_ref_ls)
42
+ @wmi_ref_view.show
43
+ column1 = Gtk::TreeViewColumn.new("Name",
44
+ Gtk::CellRendererText.new, {:text => 0})
45
+ column1.set_sort_column_id(0)
46
+ column2 = Gtk::TreeViewColumn.new("Description",
47
+ Gtk::CellRendererText.new, {:text => 1})
48
+ column2.set_sort_column_id(1)
49
+
50
+ @wmi_ref_view.append_column(column1)
51
+ @wmi_ref_view.append_column(column2)
52
+
53
+ scroll = Gtk::ScrolledWindow.new(nil, nil)
54
+ scroll.border_width=2
55
+ scroll.set_policy(Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC)
56
+ scroll.add @wmi_ref_view
57
+ scroll.show
58
+
59
+ # Create a menu
60
+ menu = Gtk::Menu.new
61
+
62
+ item_add = Gtk::ImageMenuItem.new("Add WMI Ref")
63
+ image_item_add = Gtk::Image.new()
64
+ image_item_add.set_stock(Gtk::Stock::ADD)
65
+ item_add.set_image(image_item_add)
66
+ item_add.signal_connect("activate") { add_gui_wmi_ref() }
67
+ menu.append(item_add)
68
+ item_del = Gtk::ImageMenuItem.new("Delete selected WMI Ref")
69
+ image_item_del = Gtk::Image.new()
70
+ image_item_del.set_stock(Gtk::Stock::REMOVE)
71
+ item_del.set_image(image_item_del)
72
+ item_del.signal_connect("activate") {
73
+ if @wmi_ref_view.selection.selected!=nil
74
+ if WMIRef::del_wmi_ref(@wmi_ref_view.selection.selected[0])
75
+ @wmi_ref_view.model.remove(@wmi_ref_view.selection.selected)
76
+ else
77
+ dialog = Gtk::MessageDialog.new(@window, Gtk::Dialog::DESTROY_WITH_PARENT,
78
+ Gtk::MessageDialog::ERROR,
79
+ Gtk::MessageDialog::BUTTONS_OK,
80
+ "You can't delete! WMI Ref in use")
81
+ dialog.run
82
+ dialog.destroy
83
+ end
84
+ end
85
+ }
86
+ menu.append(item_del)
87
+ item_edit = Gtk::ImageMenuItem.new("Edit WMI Ref")
88
+ image_item_edit = Gtk::Image.new()
89
+ image_item_edit.set_stock(Gtk::Stock::EDIT)
90
+ item_edit.set_image(image_item_edit)
91
+ item_edit.signal_connect("activate") {
92
+ if @wmi_ref_view.selection.selected != nil
93
+ edit_wmi_ref(@wmi_ref_view.selection.selected[0])
94
+ end
95
+ }
96
+ menu.append(item_edit)
97
+
98
+ @wmi_ref_view.signal_connect("button_press_event") do |widget, event|
99
+ if event.kind_of? Gdk::EventButton and event.button == 3
100
+ if @wmi_ref_view.selection.selected == nil
101
+ item_del.set_sensitive(false)
102
+ item_edit.set_sensitive(false)
103
+ else
104
+ item_del.set_sensitive(true)
105
+ item_edit.set_sensitive(true)
106
+ end
107
+ menu.popup(nil, nil, event.button, event.time)
108
+ elsif (@wmi_ref_view.selection.selected != nil) && (event.event_type == Gdk::Event::BUTTON2_PRESS)
109
+ edit_wmi_ref(@wmi_ref_view.selection.selected[0])
110
+ end
111
+ end
112
+
113
+ menu.show_all
114
+
115
+ populate_ls()
116
+ vbox.add(scroll)
117
+
118
+ bbox = Gtk::HBox::new(FALSE, 10)
119
+ bbox.border_width=10
120
+ bbox.show
121
+
122
+ ok_button = Gtk::Button.new(Gtk::Stock::OK)
123
+ ok_button.show
124
+ ok_button.signal_connect("clicked") {
125
+ WMIRef::write_db_wmiref()
126
+ @window.destroy
127
+ }
128
+
129
+ cancel_button = Gtk::Button.new(Gtk::Stock::CANCEL)
130
+ cancel_button.show
131
+ cancel_button.signal_connect("clicked") {
132
+ $wmi_refs=@wmirefs_backup
133
+ @window.destroy
134
+ }
135
+ ok_button.set_flags(Gtk::Widget::CAN_DEFAULT)
136
+ bbox.pack_start(ok_button, TRUE, TRUE, 0)
137
+ cancel_button.set_flags(Gtk::Widget::CAN_DEFAULT)
138
+ bbox.pack_start(cancel_button, TRUE, TRUE, 0)
139
+
140
+ separator = Gtk::HSeparator::new()
141
+ separator.show
142
+ vbox_root.pack_start(separator, FALSE, TRUE, 0)
143
+ vbox_root.pack_start(bbox, FALSE, TRUE, 0)
144
+
145
+ @window.show
146
+ end
147
+
148
+ def add_gui_wmi_ref()
149
+ add_modify_wmi_ref(true)
150
+ end
151
+
152
+ def edit_wmi_ref(wmi_ref_name)
153
+ add_modify_wmi_ref(false, wmi_ref_name)
154
+ end
155
+
156
+ def add_modify_wmi_ref(add_boolean, wmi_ref_name=nil)
157
+ window=Gtk::Window.new
158
+ window.set_modal(true)
159
+ lbl="Edit WMI Ref"
160
+ if add_boolean
161
+ lbl="Add WMI Ref"
162
+ end
163
+
164
+ window.set_title(lbl)
165
+ window.set_size_request(460, 160)
166
+
167
+ window.signal_connect("key_press_event") {|w,e|
168
+ if e.keyval == Gdk::Keyval::GDK_Escape
169
+ window.destroy
170
+ end
171
+ }
172
+
173
+ frame = Gtk::Frame::new
174
+ frame.border_width=10
175
+ frame.show
176
+ vbox_root=Gtk::VBox::new
177
+ vbox_root.show
178
+ window.add vbox_root
179
+ vbox_root.add frame
180
+
181
+ vbox = Gtk::VBox.new
182
+ vbox.show
183
+ frame.add vbox
184
+
185
+ table = Gtk::Table.new(3,2,false)
186
+ table.show
187
+
188
+ label_name = Gtk::Label.new "Name"
189
+ label_name.show
190
+ if add_boolean
191
+ entry_name = Gtk::Entry.new
192
+ else
193
+ entry_name = Gtk::Entry.new
194
+ entry_name.set_editable false
195
+ entry_name.set_text(wmi_ref_name)
196
+ end
197
+ entry_name.show
198
+
199
+ table.attach(label_name,0,1,0,1)
200
+ table.attach(entry_name,1,2,0,1)
201
+
202
+ entry_description = Gtk::Entry.new
203
+ if !add_boolean
204
+ entry_description.set_text($wmi_refs[entry_name.text()].description) unless entry_name.text() == ""
205
+ end
206
+ entry_description.show
207
+ label_description = Gtk::Label.new "Description"
208
+ label_description.show
209
+
210
+ table.attach(label_description,0,1,1,2)
211
+ table.attach(entry_description,1,2,1,2)
212
+
213
+ entry_value = Gtk::Entry.new
214
+ if !add_boolean
215
+ entry_value.set_text($wmi_refs[entry_name.text()].value) unless entry_name.text() == ""
216
+ end
217
+ entry_value.show
218
+ label_value = Gtk::Label.new "Value"
219
+ label_value.show
220
+
221
+ table.attach(label_value,0,1,2,3)
222
+ table.attach(entry_value,1,2,2,3)
223
+ if !add_boolean
224
+ entry_name.signal_connect("changed") {|e|
225
+ if e.text() != ""
226
+ entry_description.set_text($wmi_refs[e.text()].description)
227
+ entry_value.set_text($wmi_refs[e.text()].value)
228
+ end
229
+ }
230
+ end
231
+ bbox =Gtk::HBox::new(FALSE, 10)
232
+ bbox.border_width=10
233
+ bbox.show
234
+
235
+ ok_button = Gtk::Button.new(Gtk::Stock::OK)
236
+ ok_button.show
237
+ ok_button.signal_connect("clicked") {
238
+ if add_boolean
239
+ #new entry!
240
+ if $wmi_refs[entry_name.text()] == nil
241
+ WMIRef::add_wmi_ref(entry_name.text(),entry_description.text(),entry_value.text())
242
+ iter = @wmi_ref_ls.append
243
+ iter[0] = entry_name.text()
244
+ iter[1] = entry_description.text()
245
+ window.destroy
246
+ else
247
+ dialog = Gtk::MessageDialog.new(window, Gtk::Dialog::DESTROY_WITH_PARENT,
248
+ Gtk::MessageDialog::ERROR,
249
+ Gtk::MessageDialog::BUTTONS_OK,
250
+ "WMI Ref '#{entry_name.text()}' already exists!")
251
+ dialog.run
252
+ dialog.destroy
253
+ end
254
+ else
255
+ #modify existing entry
256
+ $wmi_refs[entry_name.text()].description=entry_description.text()
257
+ $wmi_refs[entry_name.text()].value=entry_value.text()
258
+ @wmi_ref_ls.each do |model,path,iter|
259
+ if iter[0] == entry_name.text()
260
+ iter[1]=entry_description.text()
261
+ break
262
+ end
263
+ end
264
+ window.destroy
265
+ end
266
+ }
267
+
268
+ cancel_button = Gtk::Button.new(Gtk::Stock::CANCEL)
269
+ cancel_button.show
270
+ cancel_button.signal_connect("clicked") {
271
+ window.destroy
272
+ }
273
+
274
+ ok_button.set_flags(Gtk::Widget::CAN_DEFAULT)
275
+ bbox.pack_start(ok_button, TRUE, TRUE, 0)
276
+ cancel_button.set_flags(Gtk::Widget::CAN_DEFAULT)
277
+ bbox.pack_start(cancel_button, TRUE, TRUE, 0)
278
+
279
+ vbox.add(table)
280
+ separator = Gtk::HSeparator::new()
281
+ separator.show
282
+ vbox_root.pack_start(separator, FALSE, TRUE, 0)
283
+ vbox_root.pack_start(bbox, FALSE, TRUE, 0)
284
+ window.show
285
+ end
286
+ end