259 |
(*************************************************************************) |
(*************************************************************************) |
260 |
|
|
261 |
method content (col : GTree.view_column) c = |
method content (col : GTree.view_column) c = |
262 |
|
let autosize = match col#sizing with `AUTOSIZE -> true | _ -> false in |
263 |
match c with |
match c with |
264 |
Col_friend_name -> |
Col_friend_name -> |
265 |
begin |
begin |
274 |
end; |
end; |
275 |
let renderer = GTree.cell_renderer_text [`XALIGN 0.] in |
let renderer = GTree.cell_renderer_text [`XALIGN 0.] in |
276 |
col#pack ~expand:false renderer; |
col#pack ~expand:false renderer; |
277 |
col#set_cell_data_func renderer |
col#add_attribute renderer "foreground" friend_color; |
278 |
(fun model row -> |
if autosize |
279 |
match !view_context with |
then col#add_attribute renderer "text" friend_name |
280 |
|
else col#set_cell_data_func renderer |
281 |
|
(fun model row -> |
282 |
|
match !view_context with |
283 |
Some context when col#width > 0 -> |
Some context when col#width > 0 -> |
284 |
begin |
begin |
285 |
let width = |
let width = |
291 |
let s = GuiTools.fit_string_to_pixels name ~context ~pixels:width in |
let s = GuiTools.fit_string_to_pixels name ~context ~pixels:width in |
292 |
renderer#set_properties [ `TEXT s ] |
renderer#set_properties [ `TEXT s ] |
293 |
end |
end |
294 |
| _ -> renderer#set_properties [ `TEXT "" ] |
| _ -> renderer#set_properties [ `TEXT "" ] |
295 |
); |
) |
|
col#add_attribute renderer "foreground" friend_color; |
|
296 |
end |
end |
297 |
|
|
298 |
| Col_friend_network -> |
| Col_friend_network -> |
332 |
(*************************************************************************) |
(*************************************************************************) |
333 |
|
|
334 |
method force_update_icons () = |
method force_update_icons () = |
335 |
|
let f k row = |
336 |
|
let s = friend_of_key k in |
337 |
|
store#set ~row ~column:friend_network_pixb (Mi.network_pixb s.source_network ~size:A.SMALL ()); |
338 |
|
store#set ~row ~column:friend_type_pixb (Mi.source_type_to_icon s.source_type ~size:A.SMALL); |
339 |
|
store#set ~row ~column:friend_state_pixb (Mi.client_state_to_icon false ~size:A.SMALL); |
340 |
|
let rec iter items = |
341 |
|
match items with |
342 |
|
[] -> () |
343 |
|
| (GTreeDirectory tree) :: tail -> |
344 |
|
begin |
345 |
|
tree.g_file_tree_pixb <- folder_closed (); |
346 |
|
iter tail |
347 |
|
end |
348 |
|
| (GTreeFile r) :: tail -> |
349 |
|
begin |
350 |
|
r.res_network_pixb <- Mi.network_pixb r.res_num ~size:A.SMALL (); |
351 |
|
r.res_name_pixb <- Mi.file_type_of_name r.res_name ~size:A.SMALL; |
352 |
|
iter tail |
353 |
|
end |
354 |
|
in |
355 |
|
match s.source_files with |
356 |
|
None -> () |
357 |
|
| Some ft -> |
358 |
|
begin |
359 |
|
ft.g_file_tree_pixb <- folder_closed (); |
360 |
|
iter ft.g_file_tree_list |
361 |
|
end |
362 |
|
in |
363 |
List.iter (fun k -> |
List.iter (fun k -> |
364 |
try |
try |
|
let s = friend_of_key k in |
|
365 |
let row = self#find_row k in |
let row = self#find_row k in |
366 |
store#set ~row ~column:friend_network_pixb (Mi.network_pixb s.source_network ~size:A.SMALL ()); |
Gaux.may ~f:(f k) row |
|
store#set ~row ~column:friend_type_pixb (Mi.source_type_to_icon s.source_type ~size:A.SMALL); |
|
|
store#set ~row ~column:friend_state_pixb (Mi.client_state_to_icon false ~size:A.SMALL); |
|
|
let rec iter items = |
|
|
match items with |
|
|
[] -> () |
|
|
| (GTreeDirectory tree) :: tail -> |
|
|
begin |
|
|
tree.g_file_tree_pixb <- folder_closed (); |
|
|
iter tail |
|
|
end |
|
|
| (GTreeFile r) :: tail -> |
|
|
begin |
|
|
r.res_network_pixb <- Mi.network_pixb r.res_num ~size:A.SMALL (); |
|
|
r.res_name_pixb <- Mi.file_type_of_name r.res_name ~size:A.SMALL; |
|
|
iter tail |
|
|
end |
|
|
in |
|
|
match s.source_files with |
|
|
None -> () |
|
|
| Some ft -> |
|
|
begin |
|
|
ft.g_file_tree_pixb <- folder_closed (); |
|
|
iter ft.g_file_tree_list |
|
|
end |
|
367 |
with _ -> () |
with _ -> () |
368 |
) (self#all_items ()) |
) (self#all_items ()) |
369 |
|
|
613 |
|
|
614 |
let rec insert_dir ft id ?parent () = |
let rec insert_dir ft id ?parent () = |
615 |
ft.g_file_tree_num <- !id; |
ft.g_file_tree_num <- !id; |
616 |
let parent = folderstore#add_item ft ?parent () in |
folderstore#add_item ft ?parent (); |
617 |
H.add ft_by_num ft; |
H.add ft_by_num ft; |
618 |
incr id; |
incr id; |
619 |
match ft.g_file_tree_list with |
match ft.g_file_tree_list with |
622 |
List.iter (fun tree_item -> |
List.iter (fun tree_item -> |
623 |
match tree_item with |
match tree_item with |
624 |
GTreeFile _ -> () |
GTreeFile _ -> () |
625 |
| GTreeDirectory d -> insert_dir d id ~parent () |
| GTreeDirectory d -> |
626 |
|
try |
627 |
|
let parent = folderstore#find_row (folder_key ft.g_file_tree_num) in |
628 |
|
insert_dir d id ~parent () |
629 |
|
with _ -> () |
630 |
) ft.g_file_tree_list |
) ft.g_file_tree_list |
631 |
|
|
632 |
let on_select_friend sel = |
let on_select_friend sel = |
713 |
let ft = folder_of_key k in |
let ft = folder_of_key k in |
714 |
List.iter (fun tree_item -> |
List.iter (fun tree_item -> |
715 |
match tree_item with |
match tree_item with |
716 |
GTreeFile r -> ignore (resultstore#add_item r) |
GTreeFile r -> resultstore#add r ~f:update_results_label () |
717 |
| _ -> () |
| _ -> () |
718 |
) ft.g_file_tree_list; |
) ft.g_file_tree_list |
|
update_results_label () |
|
719 |
with _ -> () |
with _ -> () |
720 |
end |
end |
721 |
|
|
796 |
|
|
797 |
let remove_friend s = |
let remove_friend s = |
798 |
friendstore#remove_item (friend_key s.source_num); |
friendstore#remove_item (friend_key s.source_num); |
799 |
|
let _ = |
800 |
|
match s.source_files with |
801 |
|
None -> () |
802 |
|
| Some ft -> |
803 |
|
List.iter (fun tree_item -> |
804 |
|
match tree_item with |
805 |
|
GTreeFile r -> Hashtbl.remove G.results r.res_num |
806 |
|
| _ -> () |
807 |
|
) ft.g_file_tree_list |
808 |
|
in |
809 |
update_friends_label (); |
update_friends_label (); |
810 |
if List.mem_assoc s.source_num !source_has_file |
if List.mem_assoc s.source_num !source_has_file |
811 |
then source_has_file := List.remove_assoc s.source_num !source_has_file |
then source_has_file := List.remove_assoc s.source_num !source_has_file |
815 |
let row = friendstore#find_row (friend_key s_new.source_num) in |
let row = friendstore#find_row (friend_key s_new.source_num) in |
816 |
if client_browsed_tag land s_new.source_type = 0 |
if client_browsed_tag land s_new.source_type = 0 |
817 |
then remove_friend s |
then remove_friend s |
818 |
else friendstore#update_item row s s_new |
else Gaux.may ~f:(fun r -> friendstore#update_item r s s_new) row |
819 |
with _ -> |
with _ -> |
820 |
if client_browsed_tag land s_new.source_type <> 0 |
if client_browsed_tag land s_new.source_type <> 0 |
821 |
then begin |
then begin |
822 |
ignore (friendstore#add_item s_new); |
friendstore#add_item s_new ~f:update_friends_label () |
|
update_friends_label () |
|
823 |
end |
end |
824 |
|
|
825 |
let add_friend_files (source_num , dirname, result_num) = |
let add_friend_files (source_num , dirname, result_num) = |
834 |
in |
in |
835 |
Mi.add_file tree dirname r; |
Mi.add_file tree dirname r; |
836 |
let s_new = {s with source_files = Some tree} in |
let s_new = {s with source_files = Some tree} in |
|
Hashtbl.remove G.results result_num; |
|
837 |
(if not (List.mem_assoc source_num !source_has_file) |
(if not (List.mem_assoc source_num !source_has_file) |
838 |
then source_has_file := (source_num, false) :: !source_has_file); |
then source_has_file := (source_num, false) :: !source_has_file); |
839 |
h_update_friend s s_new; |
h_update_friend s s_new; |