The unified diff between revisions [9af6e795..] and [594720f0..] is displayed below. It can also be downloaded as a raw diff.
This diff has been restricted to the following files: 'view.ml'
#
#
# patch "view.ml"
# from [1fd9c1202a2ea9a2dbbf928a1f1e29d3e061aa74]
# to [480559485398180fae369859edfe5b13aacb12e1]
#
============================================================
--- view.ml 1fd9c1202a2ea9a2dbbf928a1f1e29d3e061aa74
+++ view.ml 480559485398180fae369859edfe5b13aacb12e1
@@ -390,6 +390,7 @@ module Branch_selector = struct
type t = {
store : GTree.tree_store ;
branch_column : string GTree.column ;
+ count_column : int GTree.column ;
in_view_column : bool GTree.column ;
vis_column : bool GTree.column ;
w : [`CANCEL|`DELETE_EVENT|`VIEW] GWindow.dialog ;
@@ -398,6 +399,7 @@ module Branch_selector = struct
toggle_renderer : GTree.cell_renderer_toggle ;
radio_buttons : GButton.radio_button array ;
entries : GEdit.entry array ;
+ propagate_checkb : GButton.toggle_button ;
mutable selected_b : int ;
mutable limit_kind : int ;
}
@@ -406,6 +408,7 @@ module Branch_selector = struct
(* The model containing branch names *)
let cl = new GTree.column_list in
let branch_column = cl#add Gobject.Data.string in
+ let count_column = cl#add Gobject.Data.int in
let in_view_column = cl#add Gobject.Data.boolean in
let vis_column = cl#add Gobject.Data.boolean in
let model = GTree.tree_store cl in
@@ -458,22 +461,30 @@ module Branch_selector = struct
ignore (view#append_column vc) ;
view#set_expander_column (Some vc)
end ;
+ begin
+ let vc = GTree.view_column ~title:"Count" () in
+ let r = GTree.cell_renderer_text [`XALIGN 1.] in
+ vc#pack r ;
+ vc#add_attribute r "text" count_column ;
+ vc#add_attribute r "visible" vis_column ;
+ ignore (view#append_column vc)
+ end ;
(* The radio buttons for the date limit *)
- let packing = Ui.category "Date limit" packing in
- let tooltips = GData.tooltips () in
- let date_entry_tooltip_text =
- "Specify a date (YYYY-MM-DD), a tag or a revision id" in
- let tbl =
- GPack.table
- ~columns:2 ~rows:3
- ~row_spacings:2 ~col_spacings:4 ~packing () in
- let b1 =
- let packing = tbl#attach ~left:0 ~top:0 in
- GButton.radio_button
- ~label:"_No limit" ~use_mnemonic:true ~active:true ~packing () in
- let group = b1#group in
- let b2, entry_from, entry_to =
+ let b1, b2, entry_from, entry_to =
+ let packing = Ui.category "Date limit" packing in
+ let tooltips = GData.tooltips () in
+ let date_entry_tooltip_text =
+ "Specify a date (YYYY-MM-DD), a tag or a revision id" in
+ let tbl =
+ GPack.table
+ ~columns:2 ~rows:3
+ ~row_spacings:2 ~col_spacings:4 ~packing () in
+ let b1 =
+ let packing = tbl#attach ~left:0 ~top:0 in
+ GButton.radio_button
+ ~label:"_No limit" ~use_mnemonic:true ~active:true ~packing () in
+ let group = b1#group in
let button =
GButton.radio_button ~group
~label:"_Interval limit" ~use_mnemonic:true
@@ -490,10 +501,19 @@ module Branch_selector = struct
let e2 = GEdit.entry ~packing ~activates_default:true () in
tooltips#set_tip ~text:date_entry_tooltip_text e2#coerce ;
ignore (e1#connect#activate (fun () -> e2#misc#grab_focus ())) ;
- (button, e1, e2) in
+ (b1, button, e1, e2) in
+ (* The check button to select all propagate nodes or not *)
+ let checkb =
+ let packing = Ui.category "Options" packing in
+ GButton.check_button
+ ~label:"Display all propagate nodes"
+ ~active:false
+ ~packing () in
+
{ store = model ;
branch_column = branch_column ;
+ count_column = count_column ;
in_view_column = in_view_column ;
vis_column = vis_column ;
view = view ;
@@ -502,6 +522,7 @@ module Branch_selector = struct
w = w ;
radio_buttons = [| b1 ; b2 |] ;
entries = [| entry_from ; entry_to |] ;
+ propagate_checkb = checkb ;
selected_b = 0 ;
limit_kind = 0 }
@@ -583,7 +604,11 @@ module Branch_selector = struct
| _ ->
make_query_limit_interval ctrl query_domain
s.entries.(0)#text s.entries.(1)#text in
- Some { query = (query_domain, query_limit) ;
+ let query_propagate =
+ s.propagate_checkb#active in
+ Some { query = { dom = query_domain ;
+ lim = query_limit ;
+ all_propagates = query_propagate };
preselect = id }
with
| Complete.None -> None
@@ -674,9 +699,10 @@ module Branch_selector = struct
let rec loop kl parent t =
let m, parent =
match t with
- | Trie.N (v, m) ->
+ | Trie.N ((v, n), m) ->
let row = s.store#append ?parent () in
s.store#set ~row ~column:s.branch_column v ;
+ s.store#set ~row ~column:s.count_column n ;
s.store#set ~row ~column:s.vis_column true ;
m, Some row
| Trie.B m when kl <> [] && at_least_two m ->
@@ -695,10 +721,10 @@ module Branch_selector = struct
assert (s.store#get_iter_first = None) ;
(* branch names are theoretically unstructured but
in practice . is used as delimiter. (NDQF) *)
- List.map (fun b -> string_split '.' b, b) br
+ List.map (fun ((b, _) as v) -> string_split '.' b, v) br
++
List.fold_left
- (fun acc (bl, b) -> Trie.insert acc bl b)
+ (fun acc (bl, v) -> Trie.insert acc bl v)
Trie.empty
++
fill_store_from_trie s
@@ -848,7 +874,15 @@ module KeyNav = struct
let navigate_is_sibling k id =
List.exists (fun (i, _) -> i = id) k.keyboard_nav_siblings
- let navigate_choose k current_id direction =
+ let on_same_branch db id =
+ let b_target = Database.fetch_cert_value db id "branch" in
+ fun (id, _) ->
+ let b_node = Database.fetch_cert_value db id "branch" in
+ List.exists
+ (fun b -> List.mem b b_target)
+ b_node
+
+ let navigate_choose k ctrl current_id direction =
match k.keyboard_nav_siblings with
| [] -> None
| [ n ] -> Some n
@@ -861,11 +895,9 @@ module KeyNav = struct
| `NEXT -> locate sx
| `PREV -> locate (List.rev sx)
| `PARENT | `CHILD ->
- match k.previous_selected_node with
- | None -> Some (List.hd sx)
- | Some (p_id, _) ->
- try Some (List.find (fun (id, _) -> id = p_id) sx)
- with Not_found -> Some (List.hd sx)
+ match List.filter (on_same_branch (some ctrl#get_db) current_id) sx with
+ | [] -> Some (List.hd sx)
+ | h :: _ -> Some h
let navigate k ctrl key =
match ctrl#get_selected_node with
@@ -881,7 +913,7 @@ module KeyNav = struct
k.previous_selected_node ;
k.previous_selected_node
| (`NEXT | `PREV) as d when k.keyboard_nav_siblings <> [] ->
- navigate_choose k id d
+ navigate_choose k ctrl id d
| #Viz_types.direction as d ->
match ctrl#get_agraph with
| None -> None
@@ -895,7 +927,7 @@ module KeyNav = struct
| `NEXT | `PREV ->
Agraph.get_siblings graph id in
k.keyboard_nav_siblings <- cnodes ;
- navigate_choose k id d
+ navigate_choose k ctrl id d
let select k id previous_id =
k.previous_selected_node <- previous_id ;
@@ -1252,7 +1284,8 @@ module Canvas = struct
let color =
match s.edge_kind with
SAME_BRANCH -> "black"
- | BRANCHING -> "orange"
+ | BRANCHING
+ | BRANCHING_NEIGH -> "orange"
| DISAPPROVED -> "red"
| SPANNING -> "darkgrey" in
let bpath = GnomeCanvas.PathDef.new_path () in