File 2225-observer-Keep-sel-after-column-change-tv.patch of Package erlang

From 7f871c02a45dbb233f284737d0ab362ca0249cbd Mon Sep 17 00:00:00 2001
From: Dan Gudmundsson <dgud@erlang.org>
Date: Mon, 20 Mar 2017 18:47:13 +0100
Subject: [PATCH 3/5] observer: Keep sel after column change tv

---
 lib/observer/src/observer_tv_table.erl | 30 ++++++++++++++++++++++++++++--
 1 file changed, 28 insertions(+), 2 deletions(-)

diff --git a/lib/observer/src/observer_tv_table.erl b/lib/observer/src/observer_tv_table.erl
index 75e691964..46da65e00 100644
--- a/lib/observer/src/observer_tv_table.erl
+++ b/lib/observer/src/observer_tv_table.erl
@@ -233,9 +233,22 @@ handle_event(#wx{id=?ID_REFRESH},State = #state{pid=Pid}) ->
     {noreply, State};
 
 handle_event(#wx{event=#wxList{type=command_list_col_click, col=Col}},
-	     State = #state{pid=Pid}) ->
+	     State = #state{pid=Pid, grid=Grid, selected=OldSel}) ->
+    SelObj = case OldSel of
+                 undefined -> undefined;
+                 _ -> get_row(Pid, OldSel, term)
+             end,
     Pid ! {sort, Col+1},
-    {noreply, State};
+    case SelObj =/= undefined andalso search(Pid, SelObj, -1, true, term) of
+        false when is_integer(OldSel) ->
+            wxListCtrl:setItemState(Grid, OldSel, 0, ?wxLIST_STATE_SELECTED),
+            {noreply, State#state{selected=undefined}};
+        false ->
+            {noreply, State#state{selected=undefined}};
+        Row ->
+            wxListCtrl:setItemState(Grid, Row, 16#FFFF, ?wxLIST_STATE_SELECTED),
+            {noreply, State#state{selected=Row}}
+    end;
 
 handle_event(#wx{event=#wxSize{size={W,_}}},  State=#state{grid=Grid}) ->
     observer_lib:set_listctrl_col_size(Grid, W),
@@ -607,6 +620,17 @@ keysort(Col, Table) ->
 	   end,
     lists:sort(Sort, Table).
 
+search([Term, -1, true, term], S=#holder{parent=Parent, table=Table}) ->
+    Search = fun(Idx, [Tuple|_]) ->
+                     Tuple =:= Term andalso throw(Idx),
+                     Tuple
+             end,
+    try array:map(Search, Table) of
+        _ -> Parent ! {self(), false}
+    catch Index ->
+            Parent ! {self(), Index}
+    end,
+    S;
 search([Str, Row, Dir0, CaseSens],
        S=#holder{parent=Parent, n=N, table=Table}) ->
     Opt = case CaseSens of
@@ -642,6 +666,8 @@ get_row(From, Row, Col, Table) ->
 	    From ! {self(), format(Object)};
 	[Object|_] when Col =:= all_multiline ->
 	    From ! {self(), io_lib:format("~p", [Object])};
+        [Object|_] when Col =:= term ->
+	    From ! {self(), Object};
 	[Object|_] when tuple_size(Object) >= Col ->
 	    From ! {self(), format(element(Col, Object))};
 	_ ->
-- 
2.12.2

openSUSE Build Service is sponsored by