aboutsummaryrefslogtreecommitdiffstats
path: root/lib/observer/src/observer_tv_wx.erl
diff options
context:
space:
mode:
authorSiri Hansen <[email protected]>2016-05-26 15:29:03 +0200
committerSiri Hansen <[email protected]>2016-05-26 15:29:03 +0200
commite5f436615f0649a4d19b03762c016e91e0dce0eb (patch)
treed6095deb384ed356c775bff0c923152a27b677ab /lib/observer/src/observer_tv_wx.erl
parent89adc0eec23c1a3ac552650004863de4cf82422e (diff)
parentab22fe599d0e6918cea46d620acaf7f8e16d36b6 (diff)
downloadotp-e5f436615f0649a4d19b03762c016e91e0dce0eb.tar.gz
otp-e5f436615f0649a4d19b03762c016e91e0dce0eb.tar.bz2
otp-e5f436615f0649a4d19b03762c016e91e0dce0eb.zip
Merge branch 'siri/observer/improve-trace/OTP-13481'
* siri/observer/improve-trace/OTP-13481: [observer] Update user guide [observer] Automatically add active node [observer] Allow more trace flags on procs/ports from GUI [runtime_tools] Don't trace the trace client port [runtime_tools] Allow setting trace flag 'exiting' with dbg [observer] Add more default match specs for messages [observer] Add test of new Ports tab [observer] Improve appearance in Trace tab [observer] Allow multiple select in Ports tab [observer] Make right click menu act on the "expected pid" [observer] In Trace tab, show procs/ports for selected node only [observer] Add right click menu in Table tab [observer] Add menu option to set default MS for send/receive [observer] Add tracing of ports [ttb] Allow setting trace flags on ports [observer] Set correct parent in Label dialog [observer] Add Ports tab in GUI [observer] Add functionality in GUI for trace pattern on messages [ttb] Set trace patterns on messages Conflicts: lib/observer/src/observer_wx.erl
Diffstat (limited to 'lib/observer/src/observer_tv_wx.erl')
-rw-r--r--lib/observer/src/observer_tv_wx.erl34
1 files changed, 32 insertions, 2 deletions
diff --git a/lib/observer/src/observer_tv_wx.erl b/lib/observer/src/observer_tv_wx.erl
index 1860f2f469..59f6443551 100644
--- a/lib/observer/src/observer_tv_wx.erl
+++ b/lib/observer/src/observer_tv_wx.erl
@@ -37,7 +37,8 @@
-define(ID_UNREADABLE, 405).
-define(ID_SYSTEM_TABLES, 406).
-define(ID_TABLE_INFO, 407).
-
+-define(ID_SHOW_TABLE, 408).
+
-record(opt, {type=ets,
sys_hidden=true,
unread_hidden=true,
@@ -49,6 +50,7 @@
{
parent,
grid,
+ panel,
node=node(),
opt=#opt{},
selected,
@@ -86,12 +88,13 @@ init([Notebook, Parent]) ->
wxListItem:destroy(Li),
wxListCtrl:connect(Grid, command_list_item_activated),
+ wxListCtrl:connect(Grid, command_list_item_right_click),
wxListCtrl:connect(Grid, command_list_item_selected),
wxListCtrl:connect(Grid, command_list_col_click),
wxListCtrl:connect(Grid, size, [{skip, true}]),
wxWindow:setFocus(Grid),
- {Panel, #state{grid=Grid, parent=Parent, timer={false, 10}}}.
+ {Panel, #state{grid=Grid, parent=Parent, panel=Panel, timer={false, 10}}}.
handle_event(#wx{id=?ID_REFRESH},
State = #state{node=Node, grid=Grid, opt=Opt}) ->
@@ -145,6 +148,16 @@ handle_event(#wx{event=#wxList{type=command_list_item_activated,
end,
{noreply, State};
+handle_event(#wx{event=#wxList{type=command_list_item_right_click}},
+ State=#state{panel=Panel}) ->
+
+ Menu = wxMenu:new(),
+ wxMenu:append(Menu, ?ID_TABLE_INFO, "Table info"),
+ wxMenu:append(Menu, ?ID_SHOW_TABLE, "Show Table Content"),
+ wxWindow:popupMenu(Panel, Menu),
+ wxMenu:destroy(Menu),
+ {noreply, State};
+
handle_event(#wx{event=#wxList{type=command_list_item_selected, itemIndex=Index}},
State) ->
{noreply, State#state{selected=Index}};
@@ -160,6 +173,22 @@ handle_event(#wx{id=?ID_TABLE_INFO},
{noreply, State}
end;
+handle_event(#wx{id=?ID_SHOW_TABLE},
+ State=#state{grid=Grid, node=Node, opt=#opt{type=Type}, tabs=Tabs, selected=Sel}) ->
+ case Sel of
+ undefined ->
+ {noreply, State};
+ R when is_integer(R) ->
+ Table = lists:nth(Sel+1, Tabs),
+ case Table#tab.protection of
+ private ->
+ self() ! {error, "Table has 'private' protection and can not be read"};
+ _ ->
+ observer_tv_table:start_link(Grid, [{node,Node}, {type,Type}, {table,Table}])
+ end,
+ {noreply, State}
+ end;
+
handle_event(#wx{id=?ID_REFRESH_INTERVAL},
State = #state{grid=Grid, timer=Timer0}) ->
Timer = observer_lib:interval_dialog(Grid, Timer0, 10, 5*60),
@@ -315,6 +344,7 @@ display_table_info(Parent0, Node, Source, Table) ->
{_, Sizer, _} = observer_lib:display_info(Frame, [IdInfo,Settings,Memory]),
wxSizer:setSizeHints(Sizer, Frame),
+ wxWindow:setMinSize(Frame, {300, -1}),
wxFrame:center(Frame),
wxFrame:show(Frame).