# # # patch "database.ml" # from [06fe1d1d5d2da0880adc0da73ff75a86b114b946] # to [50a5a35ff7dc8d9910fe824e9ff81b6d8afae95b] # # patch "query.ml" # from [4f5275a8caa6115155468338bef6aa22b1888825] # to [f691b2a902e28ebb9503a018f52a1634297b39ed] # # patch "view.ml" # from [e996eff1992c98cfc0f787d2fa6e804662890253] # to [e2d0e8ea6928c04c7002e37d08aee0c5de5a1c3e] # # patch "viz_types.ml" # from [155a8730aa4d15f76597efa96a689bc01e39b76f] # to [000e61799446f6d11caad5379ca79c9ea6ff087e] # # patch "viz_types.mli" # from [1f4386c49f92acb7c868e93ccf62986219a3da49] # to [dcc5514fcad957dbccfe3b83c2878fe91dc605b0] # ============================================================ --- database.ml 06fe1d1d5d2da0880adc0da73ff75a86b114b946 +++ database.ml 50a5a35ff7dc8d9910fe824e9ff81b6d8afae95b @@ -182,13 +182,13 @@ let process_neighb_in g s = assert (NodeMap.mem child g.nodes) ; add_nodes_with_edge g id NEIGHBOUR_IN child REGULAR BRANCHING_NEIGH -let process_neighb_out db = +let process_neighb_out all db = let is_interesting = is_interesting_neighbour_out db in fun g s -> let parent = Sqlite3.column_text s 0 in let id = Sqlite3.column_text s 1 in assert (NodeMap.mem parent g.nodes) ; - if is_interesting parent id + if all || is_interesting parent id then add_nodes_with_edge g parent REGULAR id NEIGHBOUR_OUT BRANCHING_NEIGH else g @@ -212,7 +212,10 @@ let process_branching_edge g s = g -let fetch_agraph_with_view db base64 (query, query_limit) = +let fetch_agraph_with_view db base64 query = + let { dom = query ; + lim = query_limit ; + all_propagates = all_propagates } = query in let view_name_limit = if query_limit <> QUERY_NO_LIMIT then view_name_limit @@ -246,7 +249,7 @@ LEFT OUTER JOIN %s AS D2 ON D2.id = chil LEFT OUTER JOIN %s AS D2 ON D2.id = child \ WHERE D2.id ISNULL" view_name_limit view_name_domain - (process_neighb_out db) agraph in + (process_neighb_out all_propagates db) agraph in (* ancestry *) let agraph = @@ -303,7 +306,7 @@ let fetch_with_view query base64 db f = String.concat "" [ "X\'" ; Viz_misc.hex_enc s ; "\'" ] let fetch_with_view query base64 db f = - let (query_domain, query_limit) = query in + let { dom = query_domain ; lim = query_limit } = query in let register_date_p () = match query_limit with ============================================================ --- query.ml 4f5275a8caa6115155468338bef6aa22b1888825 +++ query.ml f691b2a902e28ebb9503a018f52a1634297b39ed @@ -27,10 +27,10 @@ module Selector = struct end let make_selectors g sel = - match Agraph.get_query g with - | QUERY_ALL, lim -> + match (Agraph.get_query g).dom with + | QUERY_ALL -> [ escape_selector sel ] - | QUERY_BRANCHES br, lim -> + | QUERY_BRANCHES br -> List.map (fun b -> Printf.sprintf "b:%s/%s" (escape_selector b) (escape_selector sel)) br @@ -46,9 +46,7 @@ module Selector = struct () let has_date_limit g = - match Agraph.get_query g with - | _, QUERY_NO_LIMIT -> false - | _ -> true + (Agraph.get_query g).lim <> QUERY_NO_LIMIT let filter_present g = function | `IDS ids when has_date_limit g -> ============================================================ --- view.ml e996eff1992c98cfc0f787d2fa6e804662890253 +++ view.ml e2d0e8ea6928c04c7002e37d08aee0c5de5a1c3e @@ -399,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 ; } @@ -470,20 +471,20 @@ module Branch_selector = struct 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 @@ -500,8 +501,16 @@ 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 ; @@ -513,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 } @@ -594,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 ============================================================ --- viz_types.ml 155a8730aa4d15f76597efa96a689bc01e39b76f +++ viz_types.ml 000e61799446f6d11caad5379ca79c9ea6ff087e @@ -12,7 +12,11 @@ type query_limit = type query_limit = | QUERY_NO_LIMIT | QUERY_BETWEEN of date * date -type query = query_domain * query_limit +type query = { + dom : query_domain ; + lim : query_limit ; + all_propagates : bool + } type select_info = { query : query; preselect : string option; } ============================================================ --- viz_types.mli 1f4386c49f92acb7c868e93ccf62986219a3da49 +++ viz_types.mli dcc5514fcad957dbccfe3b83c2878fe91dc605b0 @@ -14,7 +14,11 @@ type query_limit = type query_limit = | QUERY_NO_LIMIT | QUERY_BETWEEN of date * date -type query = query_domain * query_limit +type query = { + dom : query_domain ; + lim : query_limit ; + all_propagates : bool + } type select_info = { query : query; preselect : string option; }