.
[sfinx.git] / faraon / x11_ui.fl
blobbf011417ad4066abc2a018a3dcb6e389a985906c
1 # data file for the Fltk User Interface Designer (fluid)
2 version 1,0108 
3 i18n_type 1 
4 i18n_include <libintl.h> 
5 i18n_function gettext 
6 header_name {.H} 
7 code_name {.C}
8 decl {\#include <faraon.H>} {global
9
11 decl {\#include <FL/fl_ask.H>} {global
12
14 decl {\#include <FL/Fl_Preferences.H>} {global
15
17 decl {\#include <Flek/Fl_Toggle_Tree.H>} {public global
18
20 decl {\#include <scroll.H>} {public global
21
23 decl {Fl_Toggle_Tree *config_tree;} {global
24
26 decl {Fl_Toggle_Tree *slices_tree;} {global
27
29 decl {Fl_Toggle_Tree *select_slice_tree;} {global
30
32 decl {u32_t current_slice_id, selected_slice_id;} {global
33
35 decl {string current_slice_name;} {global
36
38 decl {sfinx_file_t current_files_module_tree_path(SFINX_FILES_MODULE_UNSORTED_TREE_REQUEST);} {} 
40 decl {sfinx_note_t current_note;} {} 
42 Function {relink_slice_action()} {private return_type void
43 } {
44   code {sfinx_slice_t slice(SFINX_SLICE_RELINK);
45 slice.slice_id = current_slice_id;
46 slice.parent_slice_id = selected_slice_id; //(u32_t) node->user_data();
47 slice.name(""); // for size update
48 app->sfinx.send(slice);
49 select_slice_w->hide();
50 app->sfinx.send(SFINX_SLICES_MODULE_TREE_REQUEST, (u8_t)0);} {}
51
53 Function {select_file_main_slice_action()} {private return_type void
54 } {
55   code {//debug("selected slice - %d [%s]", current_slice_id, current_slice_name.c_str());
56 file_main_slice_b->user_data(to_voidp(current_slice_id));
57 static string l;
58 l = current_slice_name;
59 file_main_slice_b->label(l.c_str());
60 file_main_slice_b->redraw();
61 // check for additional slices if it is here - remove it
62 for (int i = 1; i <= file_additional_slices_br->size(); i++) {
63         if (file_additional_slices_br->data(i) == to_voidp(current_slice_id)) {
64                 file_additional_slices_br->remove(i);
65                 return;
66         }
67 }} {}
68
70 Function {select_file_additional_slice_action()} {private return_type void
71 } {
72   code {if (to_voidp(current_slice_id) == file_main_slice_b->user_data()) // already set as main slice
73         return;
74 for (int i = 1; i <= file_additional_slices_br->size(); i++) {
75         if (file_additional_slices_br->data(i) == to_voidp(current_slice_id))
76                 return;
78 file_additional_slices_br->add(current_slice_name.c_str(), to_voidp(current_slice_id));
79 file_additional_slices_br->redraw();} {}
80
82 Function {search_add_slice_action()} {private return_type void
83 } {
84   code {for (int i = 1; i <= search_slices_br->size(); i++) {
85         if (search_slices_br->data(i) == to_voidp(current_slice_id))
86                 return;
88 search_slices_br->add(current_slice_name.c_str(), to_voidp(current_slice_id));
89 search_slices_br->redraw();} {}
90
92 Function {slices_tree_cb(Fl_Widget *, void *)} {private return_type void
93 } {
94   code {Fl_Toggle_Node *node = slices_tree->selected();
95 if (!node)
96         return;
97 current_slice_id = from_voidp(node->user_data());
98 current_slice_name = node->label();
99 if (!Fl::event_clicks())
100         return;
101 void (*select_slice_action)(void) = (void (*)())(slices_w->user_data());
102 if (select_slice_action) {
103         slices_w->hide();
104         slices_w->user_data(0);
105         select_slice_action();
106 }} {}
109 Function {select_slice_tree_cb(Fl_Widget *, void *)} {private return_type void
110 } {
111   code {if (!Fl::event_clicks())
112         return;
113 select_slice_b->do_callback();} {}
116 Function {write_preferences()} {private return_type void
117 } {
118   code {app->server_name = config_sfinx_server_name_i->value();
119 app->files_module_conf.clear();
120 app->files_module_conf.add(FILES_MODULE_UNSORTED_PATH,
121         config_files_module_unsorted_path_i->value());
122 app->files_module_conf.add(FILES_MODULE_SORTED_TREE_PATH,
123         config_files_module_sorted_path_i->value());
124 app->files_module_conf.add(FILES_MODULE_DESC_FILE_NAME,
125         config_files_module_desc_file_name_i->value());
126 app->files_module_conf.add(FILES_MODULE_DESC_FILE_ENABLE,
127         gen_desc_files_b->value());
128 app->write_preferences();} {}
131 Function {config_tree_cb(Fl_Widget *, void *)} {private return_type void
132 } {
133   code {static Fl_Group *prev_group;
134 Fl_Toggle_Node *node = config_tree->selected();
135 if (node) {
136         Fl_Group *gr = *((Fl_Group **)(node->user_data()));
137         if (prev_group)
138                 prev_group->hide();
139         prev_group = gr;
140          gr->show();
141 //config_tree->unselect();
142  }} {}
145 Function {fill_config_tree()} {private return_type void
146 } {
147   code {config_tree->add_next("Connection", 0, 0, (void *)&config_connection_gr);
148 config_tree->add_next("Files Module", 0, 0, (void *)&config_files_module_gr);
149 config_tree->add_next("Confirmation", 0, 0, (void *)&config_confirmation_gr);
150 config_tree->callback(config_tree_cb);
151 config_tree->edit_on_reselect(0);} {}
154 Function {x11_ui::init()} {open private return_type void
155 } {
156   Fl_Window main_w {
157     label Faraon
158     callback {if (fl_choice("Really quit ?", "No", "Yes", 0L))
159         F::shutdown(0);} open
160     xywh {34 45 940 365} type Double hide
161   } {
162     Fl_Menu_Bar {} {open
163       xywh {0 0 940 22}
164     } {
165       Submenu {} {
166         label Connection
167         xywh {0 0 67 22} labeltype ENGRAVED_LABEL
168       } {
169         MenuItem {} {
170           label {Connect to ...}
171           xywh {0 0 34 22} shortcut 0x80063 labeltype ENGRAVED_LABEL deactivate
172         }
173         MenuItem {} {
174           label {Connect to default server}
175           xywh {10 10 34 22} labeltype ENGRAVED_LABEL deactivate
176         }
177         MenuItem {} {
178           label {Disconnect from Sfinx}
179           xywh {10 10 34 22} labeltype ENGRAVED_LABEL deactivate
180         }
181         MenuItem {} {
182           label {Connection Info}
183           xywh {20 20 34 22} shortcut 0x80069 labeltype ENGRAVED_LABEL deactivate
184         }
185         MenuItem {} {
186           label {Sfinx Stat}
187           xywh {30 30 34 22} labeltype ENGRAVED_LABEL deactivate divider
188         }
189         MenuItem {} {
190           label Preferences
191           callback {app->read_preferences();
192 config_sfinx_server_name_i->value(app->server_name.c_str());
193 preferences_w->show();}
194           xywh {30 30 34 22} shortcut 0x80070 labeltype ENGRAVED_LABEL divider
195         }
196         MenuItem {} {
197           label Exit
198           callback {if (fl_choice("Really quit ?", "No", "Yes", 0L))
199         F::shutdown(0);}
200           xywh {20 20 34 22} shortcut 0x80078 labeltype ENGRAVED_LABEL
201         }
202       }
203       Submenu {} {
204         label Modules open
205         xywh {10 10 67 22} labeltype ENGRAVED_LABEL
206       } {
207         MenuItem {} {
208           label {AI Module}
209           callback {if (!app->connected()) {
210  fl_message("Not connected to Sfinx Server !");
211  return;
213 if (app->sfinx.send(SFINX_SLICES_MODULE_TREE_REQUEST, (u8_t)0))
214   return;
215 slices_w->show();}
216           xywh {10 10 34 22} shortcut 0x61 labeltype ENGRAVED_LABEL deactivate
217         }
218         MenuItem {} {
219           label Slices
220           callback {if (!app->connected()) {
221  fl_message("Not connected to Sfinx Server !");
222  return;
224 if (app->sfinx.send(SFINX_SLICES_MODULE_TREE_REQUEST, (u8_t)0))
225   return;
226 slices_w->show();}
227           xywh {10 10 34 22} shortcut 0x73 labeltype ENGRAVED_LABEL
228         }
229         MenuItem {} {
230           label {Knowledge Module}
231           callback {if (!app->connected()) {
232  fl_message("Not connected to Sfinx Server !");
233  return;
235           xywh {40 40 34 22} shortcut 0x6b labeltype ENGRAVED_LABEL deactivate
236         }
237         MenuItem {} {
238           label Tasks
239           callback {if (!app->connected()) {
240  fl_message("Not connected to Sfinx Server !");
241  return;
243           xywh {40 40 34 22} shortcut 0x74 labeltype ENGRAVED_LABEL deactivate
244         }
245         MenuItem {} {
246           label Messages
247           callback {if (!app->connected()) {
248  fl_message("Not connected to Sfinx Server !");
249  return;
251           xywh {40 40 34 22} shortcut 0x6d labeltype ENGRAVED_LABEL deactivate
252         }
253         MenuItem {} {
254           label Contacts
255           callback {if (!app->connected()) {
256  fl_message("Not connected to Sfinx Server !");
257  return;
259           xywh {50 50 34 22} shortcut 0x63 labeltype ENGRAVED_LABEL deactivate
260         }
261         MenuItem {} {
262           label Events
263           callback {if (!app->connected()) {
264  fl_message("Not connected to Sfinx Server !");
265  return;
267           xywh {40 40 34 22} shortcut 0x65 labeltype ENGRAVED_LABEL deactivate
268         }
269         MenuItem {} {
270           label Files
271           callback {if (!app->connected()) {
272  fl_message("Not connected to Sfinx Server !");
273  return;
275 app->sfinx.send(SFINX_FILES_MODULE_CONF_REQUEST, (u8_t) 0);
276 if (app->sfinx.send(current_files_module_tree_path))
277   return;
278 files_module_w->show();}
279           xywh {20 20 34 22} shortcut 0x66 labeltype ENGRAVED_LABEL
280         }
281         MenuItem {} {
282           label Notes
283           callback {if (!app->connected()) {
284  fl_message("Not connected to Sfinx Server !");
285  return;
287 current_note.id(SFINX_NOTES_MODULE_TREE_REQUEST);
288 if (app->sfinx.send(current_note))
289   return;
290 notes_w->show();}
291           xywh {30 30 34 22} shortcut 0x6e labeltype ENGRAVED_LABEL
292         }
293       }
294       Submenu {} {
295         label Tools open
296         xywh {20 20 67 22} labeltype ENGRAVED_LABEL
297       } {
298         MenuItem {} {
299           label {Browser && Searcher}
300           callback {if (!app->connected()) {
301  fl_message("Not connected to Sfinx Server !");
302  return;
304 search_i->take_focus();
305 search_w->show();}
306           xywh {30 30 34 22} shortcut 0x62 labeltype ENGRAVED_LABEL
307         }
308         MenuItem {} {
309           label Reader
310           callback {if (!app->connected()) {
311  fl_message("Not connected to Sfinx Server !");
312  return;
314           xywh {30 30 34 22} shortcut 0x72 labeltype ENGRAVED_LABEL deactivate divider
315         }
316         MenuItem {} {
317           label {AI Tracer}
318           callback {if (!app->connected()) {
319  fl_message("Not connected to Sfinx Server !");
320  return;
322           xywh {40 40 34 22} shortcut 0x40061 labeltype ENGRAVED_LABEL deactivate
323         }
324         MenuItem {} {
325           label {Knowledge Tracer}
326           callback {if (!app->connected()) {
327  fl_message("Not connected to Sfinx Server !");
328  return;
330           xywh {40 40 34 22} shortcut 0x4006b labeltype ENGRAVED_LABEL deactivate
331         }
332         MenuItem {} {
333           label {Indexing machine}
334           callback {if (!app->connected()) {
335  fl_message("Not connected to Sfinx Server !");
336  return;
338           xywh {30 30 34 22} shortcut 0x40069 labeltype ENGRAVED_LABEL deactivate
339         }
340         MenuItem {} {
341           label {Check Sfinx DB}
342           callback {if (!app->connected()) {
343  fl_message("Not connected to Sfinx Server !");
344  return;
346           xywh {40 40 34 22} shortcut 0x40064 labeltype ENGRAVED_LABEL deactivate
347         }
348         MenuItem {} {
349           label {DB Backups}
350           callback {if (!app->connected()) {
351  fl_message("Not connected to Sfinx Server !");
352  return;
354           xywh {30 30 34 22} shortcut 0x40062 labeltype ENGRAVED_LABEL deactivate divider
355         }
356         MenuItem {} {
357           label {Clear log window}
358           callback {log_br->clear();}
359           xywh {30 30 34 22} shortcut 0x10063 labeltype ENGRAVED_LABEL
360         }
361       }
362       Submenu {} {
363         label {                                                                                                                                                                 } open
364         xywh {20 20 67 22} labeltype ENGRAVED_LABEL deactivate
365       } {}
366       Submenu {} {
367         label Help
368         xywh {20 20 67 22} labeltype ENGRAVED_LABEL
369       } {
370         MenuItem {} {
371           label {Manual     }
372           xywh {30 30 34 22} shortcut 0xffbe labeltype ENGRAVED_LABEL deactivate divider
373         }
374         MenuItem {} {
375           label About
376           callback {about_w->show();}
377           xywh {30 30 34 22} shortcut 0x80061 labeltype ENGRAVED_LABEL
378         }
379       }
380     }
381     Fl_Output status_bar_o {
382       tooltip Status xywh {0 347 940 20} box PLASTIC_UP_BOX color 31 deactivate
383     }
384     Fl_Browser log_br {
385       xywh {-1 21 943 326} type Select color 31 labelfont 4 textfont 4
386     }
387   }
388   Fl_Window preferences_w {
389     label Preferences
390     xywh {215 308 742 373} type Double color 31 hide
391   } {
392     Fl_Button {} {
393       label Cancel
394       callback {preferences_w->hide();}
395       xywh {390 330 112 25} labeltype ENGRAVED_LABEL
396     }
397     Fl_Button {} {
398       label Apply
399       callback {write_preferences();
400 preferences_w->hide();}
401       xywh {572 330 112 25} labeltype ENGRAVED_LABEL
402     }
403     Fl_Scroll prefs_tree_scroll {
404       xywh {10 29 173 283} type VERTICAL_ALWAYS box ENGRAVED_FRAME color 28
405       code0 {config_tree = new Fl_Toggle_Tree(12, 12, prefs_tree_scroll->w() - prefs_tree_scroll->scrollbar.w(), 10);}
406       code1 {fill_config_tree();}
407     } {}
408     Fl_Group config_connection_gr {open
409       xywh {183 19 535 283} box ENGRAVED_FRAME hide
410     } {
411       Fl_Input config_sfinx_server_name_i {
412         label {Sfinx Server Name}
413         xywh {273 89 375 26} color 29 labeltype ENGRAVED_LABEL align 1
414       }
415       Fl_Choice {} {
416         label {Minimum Auth Level}
417         xywh {227 179 211 23} down_box BORDER_BOX color 48 labeltype ENGRAVED_LABEL align 5 deactivate
418       } {
419         MenuItem {} {
420           label {User Name && Passsword}
421           xywh {0 0 35 22}
422         }
423         MenuItem {} {
424           label {RSA Key}
425           xywh {10 10 35 22}
426         }
427       }
428       Fl_Choice {} {
429         label {Minimum Debug Level}
430         xywh {227 230 211 23} down_box BORDER_BOX color 48 labeltype ENGRAVED_LABEL align 5 deactivate
431       } {
432         MenuItem {} {
433           label {Debug Level}
434           xywh {10 10 35 22}
435         }
436         MenuItem {} {
437           label {Chat Level}
438           xywh {20 20 35 22}
439         }
440         MenuItem {} {
441           label {Info Level}
442           xywh {20 20 35 22}
443         }
444         MenuItem {} {
445           label {Notice Level}
446           xywh {30 30 35 22}
447         }
448         MenuItem {} {
449           label {Warning Level}
450           xywh {30 30 35 22}
451         }
452         MenuItem {} {
453           label {Error Level}
454           xywh {40 40 35 22}
455         }
456         MenuItem {} {
457           label {Alert Level}
458           xywh {40 40 35 22}
459         }
460         MenuItem {} {
461           label {Critical Level}
462           xywh {50 50 35 22}
463         }
464         MenuItem {} {
465           label {Fatal Level}
466           xywh {60 60 35 22}
467         }
468       }
469       Fl_Choice {} {
470         label {Minimum Crypt Level}
471         xywh {476 179 211 23} down_box BORDER_BOX color 48 labeltype ENGRAVED_LABEL align 5 deactivate
472       } {
473         MenuItem {} {
474           label {Plain Stream}
475           xywh {10 10 35 22}
476         }
477         MenuItem {} {
478           label {AES Stream}
479           xywh {20 20 35 22}
480         }
481       }
482     }
483     Fl_Group config_files_module_gr {
484       xywh {193 29 535 283} box ENGRAVED_FRAME hide
485     } {
486       Fl_Input config_files_module_unsorted_path_i {
487         label {Unsorted files path on Sfinx server}
488         xywh {283 68 375 26} color 29 labeltype ENGRAVED_LABEL align 1
489       }
490       Fl_Input config_files_module_sorted_path_i {
491         label {Sorted file tree path on Sfinx server}
492         xywh {283 128 375 26} color 29 labeltype ENGRAVED_LABEL align 1
493       }
494       Fl_Check_Button gen_desc_files_b {
495         label {Generate description files}
496         xywh {209 233 241 23} box PLASTIC_UP_BOX down_box DOWN_BOX selection_color 15 labeltype ENGRAVED_LABEL align 16
497       }
498       Fl_Input config_files_module_desc_file_name_i {
499         label {Description file name}
500         xywh {283 189 375 26} color 29 labeltype ENGRAVED_LABEL align 1
501       }
502       Fl_Check_Button process_files_mime_type_b {
503         label {Detect files MIME type}
504         xywh {472 233 241 23} box PLASTIC_UP_BOX down_box DOWN_BOX selection_color 15 labeltype ENGRAVED_LABEL align 16
505       }
506     }
507     Fl_Group config_confirmation_gr {
508       xywh {183 19 535 283} box ENGRAVED_FRAME hide
509     } {
510       Fl_Check_Button exit_confirm_b {
511         label {Exit confirm}
512         xywh {216 45 204 23} box PLASTIC_UP_BOX down_box DOWN_BOX selection_color 15 labeltype ENGRAVED_LABEL deactivate
513       }
514     }
515   }
516   Fl_Window select_slice_w {
517     label {Select Sfinx Object}
518     xywh {165 227 730 370} type Double color 31 hide modal
519   } {
520     Fl_Button {} {
521       label Cancel
522       callback {select_slice_w->hide();}
523       xywh {594 312 112 25} labeltype ENGRAVED_LABEL
524     }
525     Fl_Button select_slice_b {
526       label Select
527       callback {Fl_Toggle_Node *node = select_slice_tree->selected();
528 if (!node)
529         return;
530 selected_slice_id = from_voidp(node->user_data());
531 void (*select_slice_action)(void) = (void (*)())(select_slice_b->user_data());
532 select_slice_action();}
533       xywh {21 312 312 25} labeltype ENGRAVED_LABEL
534     }
535     Fl_Scroll select_slice_tree_scroll {open
536       xywh {15 15 702 280} box ENGRAVED_FRAME color 28
537       code0 {select_slice_tree = new Fl_Toggle_Tree(12, 12, select_slice_tree_scroll->w(), 10);}
538       code1 {select_slice_tree->callback(select_slice_tree_cb);}
539       code2 {select_slice_w->resizable(select_slice_tree_scroll);}
540       code3 {select_slice_tree_scroll->resizable(select_slice_tree);}
541       class Fl_Scroll_Resize
542     } {}
543     Fl_Output select_slice_status_to {
544       xywh {0 349 733 21} box PLASTIC_UP_BOX color 31 deactivate
545     }
546     Fl_Choice select_object_type_ch {
547       label {Object Type}
548       xywh {360 313 211 23} down_box BORDER_BOX color 48 labeltype ENGRAVED_LABEL align 5
549     } {
550       MenuItem {} {
551         label Slice
552         xywh {20 20 35 22}
553       }
554       MenuItem {} {
555         label File
556         xywh {30 30 35 22}
557       }
558       MenuItem {} {
559         label Note
560         xywh {30 30 35 22}
561       }
562     }
563   }
564   Fl_Window slices_w {
565     label {Sfinx Slices}
566     xywh {172 126 730 370} type Double color 31 hide modal
567   } {
568     Fl_Button {} {
569       label Cancel
570       callback {slices_w->hide();}
571       xywh {605 312 112 25} labeltype ENGRAVED_LABEL
572     }
573     Fl_Button {} {
574       label {Delete slice}
575       callback {Fl_Toggle_Node *node = slices_tree->selected();
576 if (!node)
577         return;
578 if (current_slice_id == 1) // Root Slice can't be deleted
579         return;
580 // set safe deletion mode
581 slice_deletion_type_ch->value(0);
582 data_deletion_type_ch->value(0);
583 delete_sfinx_slice_to->value(current_slice_name.c_str());
584 delete_slice_w->show();}
585       xywh {456 312 128 25} labeltype ENGRAVED_LABEL
586     }
587     Fl_Scroll slices_tree_scroll {open
588       xywh {15 15 702 280} box ENGRAVED_FRAME color 28
589       code0 {slices_tree = new Fl_Toggle_Tree(12, 12, slices_tree_scroll->w() /*- slices_tree_scroll->scrollbar.w()*/, 10);}
590       code1 {slices_tree->callback(slices_tree_cb);}
591       code2 {slices_w->resizable(slices_tree_scroll);}
592       code3 {slices_tree_scroll->resizable(slices_tree);}
593       class Fl_Scroll_Resize
594     } {}
595     Fl_Button {} {
596       label {Edit slice}
597       callback {Fl_Toggle_Node *node = slices_tree->selected();
598 if (!node)
599         return;
600 edit_slice_w->user_data(node->user_data());
601 app->sfinx.send(SFINX_EDIT_SLICE_REQUEST, (u32_t)from_voidp(node->user_data()));
602 edit_slice_w->label("Edit Sfinx Slice");}
603       xywh {305 312 128 25} labeltype ENGRAVED_LABEL
604     }
605     Fl_Output slices_status_to {
606       xywh {0 349 733 21} box PLASTIC_UP_BOX color 31 deactivate
607     }
608     Fl_Button {} {
609       label {New slice}
610       callback {Fl_Toggle_Node *node = slices_tree->selected();
611 if (!node) {
612         fl_alert("Please select slice connection point !");
613         return;
615 edit_slice_w->user_data(0); // new slice
616 slice_name_i->value(0);
617 slice_directory_i->value(0);
618 slice_name_i->take_focus();
619 slice_description_i->value(0);
620 edit_slice_to->value(string(string("Parent slice: ") + current_slice_name).c_str());
621 edit_slice_w->label("New Sfinx Slice");
622 edit_slice_w->show();}
623       xywh {21 312 112 25} labeltype ENGRAVED_LABEL
624     }
625     Fl_Button {} {
626       label {Relink slice}
627       callback {Fl_Toggle_Node *node = slices_tree->selected();
628 if (!node)
629         return;
630 if (app->sfinx.send(SFINX_SLICES_MODULE_TREE_REQUEST_EXCEPT, (u32_t)current_slice_id))
631   return;
632 select_slice_b->user_data((void *)relink_slice_action);
633 select_slice_w->show();}
634       xywh {154 312 128 25} labeltype ENGRAVED_LABEL
635     }
636   }
637   Fl_Window edit_slice_w {
638     label {Edit Sfinx Slice}
639     xywh {276 319 595 330} type Double color 31 hide modal
640   } {
641     Fl_Input slice_name_i {
642       label {Slice Name}
643       xywh {47 35 496 26} color 29 labeltype ENGRAVED_LABEL align 1
644     }
645     Fl_Input slice_directory_i {
646       label {Slice Directory}
647       xywh {47 93 496 26} color 29 labeltype ENGRAVED_LABEL align 1
648     }
649     Fl_Input slice_description_i {
650       label {Slice Description}
651       xywh {34 158 523 89} type Multiline color 29 labeltype ENGRAVED_LABEL align 1
652     }
653     Fl_Return_Button {} {
654       label Ok
655       callback {if (!slice_name_i->size()) {
656         fl_message("Missing slice name !");
657         return;
659 u32_t slice_id = from_voidp(edit_slice_w->user_data());
660 sfinx_slice_t slice;
661 if (slice_id)
662         slice.id(SFINX_EDIT_SLICE);
663 else
664         slice.id(SFINX_NEW_SLICE);
665 slice.name(slice_name_i->value());
666 slice.directory(slice_directory_i->value());
667 slice.description(slice_description_i->value());
668 slice.slice_id = slice_id;
669 slice.parent_slice_id = current_slice_id;
670 app->sfinx.send(slice);
671 edit_slice_w->hide();
672 app->sfinx.send(SFINX_SLICES_MODULE_TREE_REQUEST, (u8_t)0);}
673       xywh {111 270 112 25} labeltype ENGRAVED_LABEL
674     }
675     Fl_Button {} {
676       label Cancel
677       callback {edit_slice_w->hide();}
678       xywh {359 270 112 25} labeltype ENGRAVED_LABEL
679     }
680     Fl_Output edit_slice_to {
681       xywh {0 312 598 21} box PLASTIC_UP_BOX color 31 labelsize 10 textsize 10
682     }
683   }
684   Fl_Window delete_slice_w {
685     label {Delete Sfinx Slice}
686     xywh {252 500 388 223} type Double color 31 hide modal
687   } {
688     Fl_Button {} {
689       label Cancel
690       callback {delete_slice_w->hide();}
691       xywh {238 175 112 25} labeltype ENGRAVED_LABEL
692     }
693     Fl_Button {} {
694       label Delete
695       callback {// need to confirm deletion ?!
696 bool recursivly = slice_deletion_type_ch->value();
698 app->sfinx.send(data_deletion_type_ch->value() ?
699         (recursivly ? SFINX_DELETE_SLICE_ASSOC_DATA_RECURSIVLY : SFINX_DELETE_SLICE_ASSOC_DATA) :
700         (recursivly ? SFINX_DELETE_SLICE_MARK_DATA_UNSORTED_RECURSIVLY : SFINX_DELETE_SLICE_MARK_DATA_UNSORTED),
701         (u32_t)current_slice_id);
702 app->sfinx.send(recursivly ? SFINX_DELETE_SLICE_RECURSIVLY : SFINX_DELETE_SLICE_WITH_REATTACH,
703         (u32_t)current_slice_id);
704 delete_slice_w->hide();
705 app->sfinx.send(SFINX_SLICES_MODULE_TREE_REQUEST, (u8_t)0);}
706       xywh {39 175 112 25} labeltype ENGRAVED_LABEL
707     }
708     Fl_Output delete_sfinx_slice_to {
709       label {Please confirm deletion of the slice}
710       xywh {35 31 330 26} box ENGRAVED_FRAME color 29 labeltype ENGRAVED_LABEL align 1
711     }
712     Fl_Choice slice_deletion_type_ch {
713       label {Slice && Data Deletion Type}
714       xywh {73 82 240 23} down_box BORDER_BOX color 48 labeltype ENGRAVED_LABEL align 5
715     } {
716       MenuItem {} {
717         label {Attach subslices to parent}
718         xywh {10 10 35 22}
719       }
720       MenuItem {} {
721         label {Delete all subslices recursivly}
722         xywh {20 20 35 22}
723       }
724     }
725     Fl_Choice data_deletion_type_ch {
726       label {Associated Data Deletion Type}
727       xywh {73 132 240 23} down_box BORDER_BOX color 48 labeltype ENGRAVED_LABEL align 5
728     } {
729       MenuItem {} {
730         label {Mark all data 'Unsorted'}
731         xywh {20 20 35 22}
732       }
733       MenuItem {} {
734         label {Delete all data}
735         xywh {30 30 35 22}
736       }
737     }
738   }
739   Fl_Window progress_w {
740     label Progress
741     xywh {286 302 464 98} type Double hide
742   } {
743     Fl_Progress progress_bar {
744       label {67 %}
745       xywh {22 46 422 27} box PLASTIC_DOWN_BOX selection_color 2
746     }
747     Fl_Box progress_l {
748       label {Doing some work ...}
749       xywh {66 10 330 25} box FLAT_BOX labeltype ENGRAVED_LABEL
750     }
751   }
752   Fl_Window files_module_w {
753     label {Files Module}
754     xywh {83 125 730 370} type Double color 31 hide resizable
755   } {
756     Fl_Button {} {
757       label Cancel
758       callback {files_module_w->hide();}
759       xywh {605 312 112 25} labeltype ENGRAVED_LABEL
760     }
761     Fl_Output files_module_status_to {
762       xywh {0 349 733 21} box PLASTIC_UP_BOX color 31
763     }
764     Fl_Button classify_file_b {
765       label Classify
766       callback {int n = files_module_tree_br->value();
767 if (!n)
768         return;
769 sfinx_file_t *file = ((sfinx_files_vector_t *)files_module_tree_br->user_data())->files[n - 1];
770 //debug("slice_id - %d, parent_id - %d, name - %s", current_files_module_tree_path.file_id, current_files_module_tree_path.main_slice_id,
771 //      file->name.c_str());
772 string path;
773 if (current_files_module_tree_path.id() == SFINX_FILES_MODULE_UNSORTED_TREE_REQUEST)
774         app->files_module_conf.get(FILES_MODULE_UNSORTED_PATH, path);
775 else
776         app->files_module_conf.get(FILES_MODULE_SORTED_TREE_PATH, path);
777 char buf[256];
778 int eyear, emonth, eday, ehour, emin, esec, cyear, cmonth, cday, chour, cmin, csec;
779 file->etime.GetDate(eyear, emonth, eday);
780 file->etime.GetTime(ehour, emin, esec);
781 file->ctime.GetDate(cyear, cmonth, cday);
782 file->ctime.GetTime(chour, cmin, csec);
783 sprintf(buf, "%llu bytes | Modified: %02d/%02d/%04d %02d:%02d:%02d | Last Status Changed: %02d/%02d/%04d %02d:%02d:%02d", file->fsize, cday, cmonth,
784         cyear, chour, cmin, csec, eday, emonth, eyear, ehour, emin, esec);
785 string t = "URL: " + path + current_files_module_tree_path.name + "/" + file->name + " | " + file->mimetype + " | Size: " + buf;
786 classify_file_to->value(t.c_str());
787 file_title_i->value(0);
788 file_name_i->value(file->name.c_str());
789 // save orig file name
790 file->orig_name = file->name;
791 file->id(SFINX_FILES_MODULE_CLASSIFY_REQUEST); // new file
792 file_title_i->take_focus();
793 file_authority_i->value(0);
794 file_description_i->value(0);
795 file_comments_i->value(0);
796 sorted_location_b->value(1);
797 file_compress_b->value(1);
798 file_gen_csum_b->value(1);
799 file_main_slice_b->label("Main Slice (Not Set)");
800 file_main_slice_b->user_data(0); // ÔÕÔÁ ÈÒÁÎÉÔÓÑ slice_id
801 file_additional_slices_br->clear();
802 classify_file_w->user_data((void *)file);
803 classify_file_w->show();}
804       xywh {21 312 112 25} labeltype ENGRAVED_LABEL
805     }
806     Fl_Button {} {
807       label Edit
808       xywh {154 312 128 25} labeltype ENGRAVED_LABEL
809     }
810     Fl_Browser files_module_tree_br {
811       callback {if (!Fl::event_clicks())
812         return;
813 sfinx_files_vector_t *tree = (sfinx_files_vector_t *) files_module_tree_br->user_data();
814 int n = files_module_tree_br->value();
815 //debug("selected %s file", tree->files[n - 1]->url.c_str());
816 if (tree->files[n - 1]->is_directory) { // ÀÚÅÒ ÓÍÅÎÉÌ ÄÉÒÅËÔÏÒÉÀ
817         // × file_id ÈÒÁÎÉÔÓÑ id ÔÅËÕÝÅÊ ÄÉÒÅËÔÏÒÉÉ-ÓÌÁÊÓÁ × ËÏÔÏÒÏÊ ÎÁÈÏÄÉÍÓÑ/×ÙÂÒÁÌÉ
818         // × main_obj_id - parent_id ÄÉÒÅËÔÏÒÉÉ
819         // ÚÁÈÏÄÉÍ × ÄÉÒÅËÔÏÒÉÀ - ÔÅËÕÝÁÑ ÓÔÁÎÏ×ÉÔÓÑ parent'ÏÍ
820         current_files_module_tree_path.file_id = tree->files[n - 1]->file_id;
821         current_files_module_tree_path.main_obj_id = tree->files[n - 1]->main_obj_id;
822         // × name ÈÒÁÎÉÔÓÑ ×ÅÓØ ÐÕÔØ ÏÔ root location
823         // × orig_name ÔÏÌØËÏ ÉÍÑ ÔÅËÕÝÅÊ
824         string t = current_files_module_tree_path.name.c_str();
825 //      current_files_module_tree_path.orig_name = tree->files[n - 1]->name;
826         t += ('/' + tree->files[n - 1]->name);
827         current_files_module_tree_path.name = t;
828         //debug("requesting dir %s", current_files_module_tree_path.c_str());
829         app->sfinx.send(current_files_module_tree_path);
830 } else {
831         if (!(tree->files[n - 1]->file_id)) // classify file    
832                 classify_file_b->do_callback();
833         else {
834                 // app->sfinx.send(SFINX_SLICES_MODULE_TREE_REQUEST, (u8_t)0); // prepare for slice_name() calls
835                 sfinx_file_t *file = tree->files[n - 1];
836                 file->id(SFINX_FILES_MODULE_EDIT_FILE_REQUEST);
837                 app->sfinx.send(file);
838         }
840       xywh {8 45 716 255} type Multi color 31 resizable
841       code0 {static int widths[] = { 10, 450, 200, 200, 0};}
842       code1 {files_module_tree_br->column_widths(widths);}
843     }
844     Fl_Button {} {
845       label Delete
846       callback {int n = files_module_tree_br->value();
847 if (!n)
848         return;
849 sfinx_file_t *file = ((sfinx_files_vector_t *)files_module_tree_br->user_data())->files[n - 1];
850 string path;
851 if (current_files_module_tree_path.id() == SFINX_FILES_MODULE_UNSORTED_TREE_REQUEST) {
852         // sure ?
853         string message = "Deleting \\'" + file->name + "\\'. Are you sure ?";
854         if (fl_choice(message.c_str(), "Yes", "No", 0L))
855                 return;
856         app->files_module_conf.get(FILES_MODULE_UNSORTED_PATH, path);
857         path += "/" + file->name;
858         sfinx_string_t f(SFINX_FILES_MODULE_UNLINK);
859         f.set(path);
860         app->sfinx.send(f);
861 } else {
862         // sorted can be marked unsorted or deleted
863         string message = "Delete or Unsort \\'" + file->name + "\\' ?";
864         int res = fl_choice(message.c_str(), "Cancel", "Unsort", "Delete");
865         if (!res)
866                 return;
867         if (res == 2) { // delete
868                 file->id(SFINX_FILES_MODULE_SORTED_UNLINK);
869                 app->sfinx.send(file);
870         } else {
871                 file->id(SFINX_FILES_MODULE_UNSORT);
872                 app->sfinx.send(file);
873         }
875 //files_module_tree_br->remove(n);
876 app->sfinx.send(current_files_module_tree_path);}
877       xywh {300 312 112 25} labeltype ENGRAVED_LABEL
878     }
879     Fl_Button select_files_tree_b {
880       label {Sorted tree}
881       callback {files_module_tree_br->clear();
882 current_files_module_tree_path.name.clear();
883 current_files_module_tree_path.orig_name.clear();
884 if (select_files_tree_b->user_data()) {
885         select_files_tree_b->user_data(0);
886         select_files_tree_b->label("Sorted tree");
887         current_files_module_tree_path.id(SFINX_FILES_MODULE_UNSORTED_TREE_REQUEST);
888         current_files_module_tree_path.file_id = 0;
889 } else {
890         select_files_tree_b->user_data((void *)1);
891         select_files_tree_b->label("Unsorted tree");
892         current_files_module_tree_path.id(SFINX_FILES_MODULE_SORTED_TREE_REQUEST);
893         current_files_module_tree_path.file_id = 1; // root id
896 select_files_tree_b->redraw();
897 app->sfinx.send(current_files_module_tree_path);}
898       xywh {562 10 128 25} labeltype ENGRAVED_LABEL
899     }
900     Fl_Button {} {
901       label {Up [ .. ]}
902       callback {const char *p = strrchr(current_files_module_tree_path.name.c_str(), '/');
903 if (!p)
904         current_files_module_tree_path.name.clear();
905 else {
906         char path[1024];
907         path[0] = 0;
908         strncat(path, current_files_module_tree_path.name.c_str(), p - current_files_module_tree_path.name.c_str());
909         current_files_module_tree_path.name = path;
910         current_files_module_tree_path.file_id = current_files_module_tree_path.main_obj_id;
912 app->sfinx.send(current_files_module_tree_path);}
913       xywh {35 10 112 25} labeltype ENGRAVED_LABEL
914     }
915     Fl_Button {} {
916       label Reload
917       callback {app->sfinx.send(current_files_module_tree_path);}
918       xywh {166 10 112 25} labeltype ENGRAVED_LABEL
919     }
920     Fl_Button {} {
921       label {Select All}
922       callback {for (int i = 1; i <= files_module_tree_br->size(); i++)
923         files_module_tree_br->select(i);}
924       xywh {295 10 112 25} labeltype ENGRAVED_LABEL
925     }
926     Fl_Button {} {
927       label {Unselect All}
928       callback {files_module_tree_br->deselect();}
929       xywh {428 10 112 25} labeltype ENGRAVED_LABEL
930     }
931   }
932   Fl_Window classify_file_w {
933     label {Classify File}
934     xywh {80 271 1020 515} type Double color 31 hide modal
935   } {
936     Fl_Button {} {
937       label Cancel
938       callback {classify_file_w->hide();}
939       xywh {612 454 112 25} labeltype ENGRAVED_LABEL
940     }
941     Fl_Input file_title_i {
942       label Title
943       xywh {16 27 496 26} color 29 labeltype ENGRAVED_LABEL align 1
944     }
945     Fl_Input file_authority_i {
946       label Authority
947       xywh {16 83 496 26} color 29 labeltype ENGRAVED_LABEL align 1
948     }
949     Fl_Input file_description_i {
950       label Description
951       xywh {549 78 447 101} type Multiline color 29 labeltype ENGRAVED_LABEL align 1
952     }
953     Fl_Input file_comments_i {
954       label Comments
955       xywh {582 220 416 212} type Multiline color 29 labeltype ENGRAVED_LABEL align 1
956     }
957     Fl_Output classify_file_to {
958       xywh {0 497 1022 21} box PLASTIC_UP_BOX color 31 labelsize 10 textsize 10
959     }
960     Fl_Return_Button {} {
961       label Ok
962       callback {if (!file_main_slice_b->user_data()) {
963         fl_alert("You have to select Main Slice for file !");
964         return;
966 if (!file_name_i->size()) {
967         fl_alert("File must have some name !");
968         return;
970 sfinx_file_t *file = (sfinx_file_t *)classify_file_w->user_data();
971 // file->id(SFINX_FILES_MODULE_CLASSIFY_REQUEST);
972 file->name = file_name_i->value();
973 file->title = file_title_i->value();
974 file->authority = file_authority_i->value();
975 file->description = file_description_i->value();
976 file->comments = file_comments_i->value();
977 file->sorted_location = sorted_location_b->value();
978 file->store_compressed = file_compress_b->value();
979 file->generate_csum = file_gen_csum_b->value();
980 file->main_obj_id = from_voidp(file_main_slice_b->user_data());
981 file->objects.clear();
982 for (int i = 1; i <= file_additional_slices_br->size(); i++) {
983 //      file->objects.push_back(from_voidp(file_additional_slices_br->data(i)));
985 app->sfinx.send(file);}
986       xywh {243 454 112 25} labeltype ENGRAVED_LABEL
987     }
988     Fl_Check_Button sorted_location_b {
989       label {Sorted Location}
990       xywh {15 132 241 23} box PLASTIC_UP_BOX down_box DOWN_BOX selection_color 15 labeltype ENGRAVED_LABEL align 16
991     }
992     Fl_Check_Button file_crypt_b {
993       label Encrypt
994       xywh {15 165 241 23} box PLASTIC_UP_BOX down_box DOWN_BOX selection_color 15 labeltype ENGRAVED_LABEL align 16 deactivate
995     }
996     Fl_Check_Button file_compress_b {
997       label {Store compressed}
998       xywh {274 132 241 23} box PLASTIC_UP_BOX down_box DOWN_BOX selection_color 15 labeltype ENGRAVED_LABEL align 16
999     }
1000     Fl_Box {} {
1001       xywh {13 205 552 227} box ENGRAVED_FRAME
1002     }
1003     Fl_Button file_main_slice_b {
1004       label {Main Slice (Not Set)}
1005       callback {app->sfinx.send(SFINX_SLICES_MODULE_TREE_REQUEST, (u8_t)0);
1006 slices_w->user_data((void *)select_file_main_slice_action);
1007 slices_w->show();}
1008       tooltip {File Main Slice} xywh {45 226 489 25} box PLASTIC_THIN_UP_BOX labeltype ENGRAVED_LABEL
1009     }
1010     Fl_Browser file_additional_slices_br {
1011       label {Additional Slices}
1012       xywh {26 275 525 102} type Multi color 46 labeltype ENGRAVED_LABEL align 1
1013     }
1014     Fl_Button file_add_slice_b {
1015       label {Add Slice}
1016       callback {app->sfinx.send(SFINX_SLICES_MODULE_TREE_REQUEST, (u8_t)0);
1017 slices_w->user_data((void *)select_file_additional_slice_action);
1018 slices_w->show();}
1019       xywh {82 391 138 25} box PLASTIC_THIN_UP_BOX labeltype ENGRAVED_LABEL
1020     }
1021     Fl_Button file_remove_slice_b {
1022       label {Remove Slice}
1023       callback {for (int i = file_additional_slices_br->size(); i >= 1; i--) {
1024         if (file_additional_slices_br->selected(i))
1025                 file_additional_slices_br->remove(i);
1027       xywh {358 391 138 25} box PLASTIC_THIN_UP_BOX labeltype ENGRAVED_LABEL
1028     }
1029     Fl_Input file_name_i {
1030       label {File Name}
1031       xywh {549 26 447 26} color 29 labeltype ENGRAVED_LABEL align 1
1032     }
1033     Fl_Check_Button file_gen_csum_b {
1034       label {Generate CSUM}
1035       xywh {274 165 241 23} box PLASTIC_UP_BOX down_box DOWN_BOX selection_color 15 labeltype ENGRAVED_LABEL align 16
1036     }
1037   }
1038   Fl_Window search_w {
1039     label Search
1040     xywh {169 380 749 389} type Double color 31 hide modal
1041   } {
1042     Fl_Button {} {
1043       label Cancel
1044       callback {search_w->hide();}
1045       xywh {182 347 363 25} box PLASTIC_ROUND_UP_BOX labeltype ENGRAVED_LABEL
1046     }
1047     Fl_Return_Button {} {
1048       label Search
1049       callback {sfinx_search_query_t query;
1050 query.pattern = search_i->value();
1051 if (search_in_files_b->value())
1052         query.add_area(SFINX_SEARCH_IN_FILES);
1053 // add restrictions ...
1054 app->sfinx.send(query);}
1055       xywh {539 48 163 25} box PLASTIC_ROUND_UP_BOX labeltype ENGRAVED_LABEL
1056     }
1057     Fl_Check_Button search_in_files_b {
1058       label {Search in Files}
1059       xywh {48 96 241 23} box PLASTIC_UP_BOX down_box DOWN_BOX selection_color 15 labeltype ENGRAVED_LABEL align 16 deactivate
1060     }
1061     Fl_Box {} {
1062       xywh {87 141 561 189} box ROUNDED_FRAME
1063     }
1064     Fl_Browser search_slices_br {
1065       label {Restrict Search by Slices}
1066       xywh {105 173 525 102} type Multi color 46 labeltype ENGRAVED_LABEL align 1
1067     }
1068     Fl_Button search_add_slice_b {
1069       label {Add Slice}
1070       callback {app->sfinx.send(SFINX_SLICES_MODULE_TREE_REQUEST, (u8_t)0);
1071 slices_w->user_data((void *)search_add_slice_action);
1072 slices_w->show();}
1073       xywh {161 289 138 25} box PLASTIC_THIN_UP_BOX labeltype ENGRAVED_LABEL
1074     }
1075     Fl_Button {} {
1076       label {Remove Slice}
1077       callback {for (int i = search_slices_br->size(); i >= 1; i--) {
1078         if (search_slices_br->selected(i))
1079                 search_slices_br->remove(i);
1081       xywh {437 289 138 25} box PLASTIC_THIN_UP_BOX labeltype ENGRAVED_LABEL
1082     }
1083     Fl_Input search_i {
1084       label {Search for ...}
1085       xywh {46 47 447 26} color 29 labeltype ENGRAVED_LABEL align 1
1086     }
1087   }
1088   Fl_Window search_browser_w {
1089     label {Search Browser}
1090     xywh {217 305 854 476} type Double color 31 hide resizable modal
1091   } {
1092     Fl_Button {} {
1093       label Cancel
1094       callback {search_browser_w->hide();}
1095       xywh {638 449 187 20} box PLASTIC_ROUND_UP_BOX color 0 labeltype ENGRAVED_LABEL
1096     }
1097     Fl_Browser search_browser_br {
1098       xywh {4 4 846 439} type Hold box GTK_THIN_UP_BOX color 44 resizable
1099     }
1100     Fl_Button {} {
1101       label {Previous Page}
1102       xywh {25 449 169 20} box PLASTIC_ROUND_UP_BOX color 0 labeltype ENGRAVED_LABEL
1103     }
1104     Fl_Button {} {
1105       label {Next Page}
1106       xywh {231 449 169 20} box PLASTIC_ROUND_UP_BOX color 0 labeltype ENGRAVED_LABEL
1107     }
1108     Fl_Choice goto_page_ch {
1109       label {Current Page }
1110       xywh {531 450 72 20} box PLASTIC_THIN_UP_BOX down_box PLASTIC_THIN_UP_BOX color 44 labeltype ENGRAVED_LABEL
1111     } {}
1112   }
1113   Fl_Window notes_w {
1114     label {Notes Module}
1115     xywh {83 125 730 370} type Double color 31 hide resizable
1116   } {
1117     Fl_Button {} {
1118       label Cancel
1119       callback {notes_w->hide();}
1120       xywh {605 312 112 25} labeltype ENGRAVED_LABEL
1121     }
1122     Fl_Output notes_module_status_to {
1123       xywh {0 349 733 21} box PLASTIC_UP_BOX color 31
1124     }
1125     Fl_Button new_note_b {
1126       label Classify
1127       xywh {21 312 112 25} labeltype ENGRAVED_LABEL
1128     }
1129     Fl_Button {} {
1130       label Edit
1131       xywh {154 312 128 25} labeltype ENGRAVED_LABEL
1132     }
1133     Fl_Browser notes_br {
1134       callback {if (!Fl::event_clicks())
1135         return;
1137 sfinx_files_vector_t *tree = (sfinx_files_vector_t *) files_module_tree_br->user_data();
1138 int n = files_module_tree_br->value();
1139 //debug("selected %s file", tree->files[n - 1]->url.c_str());
1140 if (tree->files[n - 1]->is_directory) { // ÀÚÅÒ ÓÍÅÎÉÌ ÄÉÒÅËÔÏÒÉÀ
1141         // × file_id ÈÒÁÎÉÔÓÑ id ÔÅËÕÝÅÊ ÄÉÒÅËÔÏÒÉÉ-ÓÌÁÊÓÁ × ËÏÔÏÒÏÊ ÎÁÈÏÄÉÍÓÑ/×ÙÂÒÁÌÉ
1142         // × main_obj_id - parent_id ÄÉÒÅËÔÏÒÉÉ
1143         // ÚÁÈÏÄÉÍ × ÄÉÒÅËÔÏÒÉÀ - ÔÅËÕÝÁÑ ÓÔÁÎÏ×ÉÔÓÑ parent'ÏÍ
1144         current_files_module_tree_path.file_id = tree->files[n - 1]->file_id;
1145         current_files_module_tree_path.main_obj_id = tree->files[n - 1]->main_obj_id;
1146         // × name ÈÒÁÎÉÔÓÑ ×ÅÓØ ÐÕÔØ ÏÔ root location
1147         // × orig_name ÔÏÌØËÏ ÉÍÑ ÔÅËÕÝÅÊ
1148         string t = current_files_module_tree_path.name.c_str();
1149 //      current_files_module_tree_path.orig_name = tree->files[n - 1]->name;
1150         t += ('/' + tree->files[n - 1]->name);
1151         current_files_module_tree_path.name = t;
1152         //debug("requesting dir %s", current_files_module_tree_path.c_str());
1153         app->sfinx.send(current_files_module_tree_path);
1154 } else {
1155         if (!(tree->files[n - 1]->file_id)) // classify file    
1156                 classify_file_b->do_callback();
1157         else {
1158                 // app->sfinx.send(SFINX_SLICES_MODULE_TREE_REQUEST, (u8_t)0); // prepare for slice_name() calls
1159                 sfinx_file_t *file = tree->files[n - 1];
1160                 file->id(SFINX_FILES_MODULE_EDIT_FILE_REQUEST);
1161                 app->sfinx.send(file);
1162         }
1163 }*/}
1164       xywh {8 45 716 255} type Multi color 31 resizable
1165       code0 {/* static int widths[] = { 10, 450, 200, 200, 0}; */}
1166       code1 {/* files_module_tree_br->column_widths(widths); */}
1167     }
1168     Fl_Button {} {
1169       label Delete
1170       callback {int n = notes_br->value();
1171 if (!n)
1172         return;
1173 /*sfinx_file_t *file = ((sfinx_files_vector_t *)files_module_tree_br->user_data())->files[n - 1];
1174 string path;
1175 if (current_files_module_tree_path.id() == SFINX_FILES_MODULE_UNSORTED_TREE_REQUEST) {
1176         // sure ?
1177         string message = "Deleting \\'" + file->name + "\\'. Are you sure ?";
1178         if (fl_choice(message.c_str(), "Yes", "No", 0L))
1179                 return;
1180         app->files_module_conf.get(FILES_MODULE_UNSORTED_PATH, path);
1181         path += "/" + file->name;
1182         sfinx_string_t f(SFINX_FILES_MODULE_UNLINK);
1183         f.set(path);
1184         app->sfinx.send(f);
1185 } else {
1186         // sorted can be marked unsorted or deleted
1187         string message = "Delete or Unsort \\'" + file->name + "\\' ?";
1188         int res = fl_choice(message.c_str(), "Cancel", "Unsort", "Delete");
1189         if (!res)
1190                 return;
1191         if (res == 2) { // delete
1192                 file->id(SFINX_FILES_MODULE_SORTED_UNLINK);
1193                 app->sfinx.send(file);
1194         } else {
1195                 file->id(SFINX_FILES_MODULE_UNSORT);
1196                 app->sfinx.send(file);
1197         }
1199 //files_module_tree_br->remove(n);
1200 app->sfinx.send(current_files_module_tree_path);*/}
1201       xywh {300 312 112 25} labeltype ENGRAVED_LABEL
1202     }
1203     Fl_Button {} {
1204       label {Up [ .. ]}
1205       xywh {35 10 112 25} labeltype ENGRAVED_LABEL
1206     }
1207     Fl_Button {} {
1208       label Reload
1209       callback {app->sfinx.send(current_note);}
1210       xywh {166 10 112 25} labeltype ENGRAVED_LABEL
1211     }
1212     Fl_Button {} {
1213       label {Select All}
1214       callback {for (int i = 1; i <= notes_br->size(); i++)
1215         notes_br->select(i);}
1216       xywh {297 10 112 25} labeltype ENGRAVED_LABEL
1217     }
1218     Fl_Button {} {
1219       label {Unselect All}
1220       callback {notes_br->deselect();}
1221       xywh {428 10 112 25} labeltype ENGRAVED_LABEL
1222     }
1223   }
1224   Fl_Window edit_note_w {
1225     label {Edit Note}
1226     xywh {69 302 1020 385} type Double color 31 hide modal
1227   } {
1228     Fl_Button {} {
1229       label Cancel
1230       callback {edit_note_w->hide();}
1231       xywh {648 321 112 25} labeltype ENGRAVED_LABEL
1232     }
1233     Fl_Input note_name_ii {
1234       label Name
1235       xywh {16 27 496 26} color 29 labeltype ENGRAVED_LABEL align 1
1236     }
1237     Fl_Input note_url_i {
1238       label URL
1239       xywh {16 83 496 26} color 29 labeltype ENGRAVED_LABEL align 1
1240     }
1241     Fl_Input note_text_i {
1242       label Text
1243       xywh {16 141 496 158} type Multiline color 29 labeltype ENGRAVED_LABEL align 1
1244     }
1245     Fl_Output edit_note_to {
1246       xywh {0 364 1022 21} box PLASTIC_UP_BOX color 31 labelsize 10 textsize 10
1247     }
1248     Fl_Return_Button {} {
1249       label Ok
1250       callback {/*if (!file_main_slice_b->user_data()) {
1251         fl_alert("You have to select Main Slice for file !");
1252         return;
1254 if (!file_name_i->size()) {
1255         fl_alert("File must have some name !");
1256         return;
1258 sfinx_file_t *file = (sfinx_file_t *)classify_file_w->user_data();
1259 // file->id(SFINX_FILES_MODULE_CLASSIFY_REQUEST);
1260 file->name = file_name_i->value();
1261 file->title = file_title_i->value();
1262 file->authority = file_authority_i->value();
1263 file->description = file_description_i->value();
1264 file->comments = file_comments_i->value();
1265 file->sorted_location = sorted_location_b->value();
1266 file->store_compressed = file_compress_b->value();
1267 file->generate_csum = file_gen_csum_b->value();
1268 file->main_obj_id = from_voidp(file_main_slice_b->user_data());
1269 file->objects.clear();
1270 for (int i = 1; i <= file_additional_slices_br->size(); i++) {
1271 //      file->objects.push_back(from_voidp(file_additional_slices_br->data(i)));
1273 app->sfinx.send(file);*/}
1274       xywh {279 321 112 25} labeltype ENGRAVED_LABEL
1275     }
1276     Fl_Box {} {
1277       xywh {535 72 467 227} box ENGRAVED_FRAME
1278     }
1279     Fl_Button note_main_object_b {
1280       label {Main Object Link (Not Set)}
1281       callback {/*app->sfinx.send(SFINX_SLICES_MODULE_TREE_REQUEST, (u8_t)0);
1282 slices_w->user_data((void *)select_file_main_slice_action);
1283 slices_w->show();*/}
1284       tooltip {File Main Slice} xywh {594 93 348 25} box PLASTIC_THIN_UP_BOX labeltype ENGRAVED_LABEL
1285     }
1286     Fl_Browser note_additional_objects_br {
1287       label {Additional Object Tags} selected
1288       xywh {559 146 420 102} type Multi color 46 labeltype ENGRAVED_LABEL align 1
1289     }
1290     Fl_Button note_add_object_b {
1291       label {Add Link}
1292       callback {/*app->sfinx.send(SFINX_SLICES_MODULE_TREE_REQUEST, (u8_t)0);
1293 slices_w->user_data((void *)select_file_additional_slice_action);
1294 slices_w->show();*/}
1295       xywh {584 258 138 25} box PLASTIC_THIN_UP_BOX labeltype ENGRAVED_LABEL
1296     }
1297     Fl_Button note_remove_object_b {
1298       label {Remove Link}
1299       callback {for (int i = note_additional_objects_br->size(); i >= 1; i--) {
1300         if (note_additional_objects_br->selected(i))
1301                 note_additional_objects_br->remove(i);
1303       xywh {811 258 138 25} box PLASTIC_THIN_UP_BOX labeltype ENGRAVED_LABEL
1304     }
1305     Fl_Choice note_secured_ch {
1306       label {Secure Level}
1307       xywh {536 27 211 23} down_box BORDER_BOX color 48 labeltype ENGRAVED_LABEL align 5 deactivate
1308     } {
1309       MenuItem {} {
1310         label None
1311         xywh {10 10 35 22}
1312       }
1313       MenuItem {} {
1314         label {Crypted Text}
1315         xywh {20 20 35 22}
1316       }
1317     }
1318   }
1319   Fl_Window about_w {
1320     xywh {357 229 374 154} type Double hide
1321   } {
1322     Fl_Button {} {
1323       label Ok
1324       callback {about_w->hide();}
1325       xywh {72 122 226 20} box PLASTIC_ROUND_UP_BOX labeltype ENGRAVED_LABEL
1326     }
1327     Fl_Box {} {
1328       image {../docs/sfinx.jpg} xywh {10 9 130 101}
1329     }
1330     Fl_Box {} {
1331       label Sfinx
1332       xywh {203 6 99 33} labeltype EMBOSSED_LABEL labelfont 9 labelsize 32
1333     }
1334     Fl_Box {} {
1335       label {Personal knowledge manager}
1336       xywh {150 40 214 22} labeltype EMBOSSED_LABEL labelcolor 64
1337     }
1338     Fl_Box {} {
1339       label {Copyright (C) 2007 Rus V. Brushkoff}
1340       xywh {150 58 214 22} labeltype EMBOSSED_LABEL labelfont 8 labelsize 11 labelcolor 56
1341     }
1342     Fl_Box {} {
1343       label {Email:  Rus@@Sfinx.Od.UA}
1344       xywh {150 75 214 22} labeltype EMBOSSED_LABEL labelfont 8 labelsize 11 labelcolor 56
1345     }
1346     Fl_Box {} {
1347       label {http://sfinx.od.ua/index.php?id=sfinx}
1348       xywh {150 93 214 22} labeltype EMBOSSED_LABEL labelfont 8 labelsize 11 labelcolor 56
1349     }
1350   }
1351   code {current_slice_id = 1; // root id
1352 main_w->show();} {}
1355 Function {x11_ui::log(int level, const char *fmt, ...)} {private return_type void
1356 } {
1357   code {char buf[10240];
1358 const char *level_str;
1359 static Mutex log_m;
1360 log_m.enterMutex();
1361 Fl::lock();
1362 ::va_list args;
1363 ::va_start(args, fmt);
1364 ::va_end(args);
1365 switch (level) {
1366         case SFINX_LOG_NOTICE:
1367                 level_str = "NOTICE";
1368                 break;
1369         case SFINX_LOG_WARN:
1370                 level_str = "WARN";
1371                 break;
1372         case SFINX_LOG_ERROR:
1373                 level_str = "ERROR";
1374                 break;
1375         case SFINX_LOG_FATAL:
1376                 level_str = "FATAL";
1377                 break;
1378         default:
1379                 level_str = "UNKN_LEVEL";
1381 // add time ?
1382 strcpy(buf, level_str);
1383 strcat(buf, ": ");
1384 ::vsnprintf(buf + strlen(level_str) + 2, sizeof(buf) - (strlen(level_str) + 2), fmt, args);
1385 log_br->add(buf);
1386 Fl::unlock();
1387 log_m.leaveMutex();} {}
1390 Function {x11_ui::fill_slices_tree(sfinx_slice_vector_t *slices)} {private return_type void
1391 } {
1392   code {// need locks
1393 Fl::lock();
1394 slices_tree->clear();
1395 slices_tree->draw_lines(1);
1396 slices_tree->alternate_color(FL_LIGHT2);
1397 slices_tree->trim_color(FL_LIGHT1);
1398 slices_tree->edit_on_reselect(0);
1399 sfinx_slice_t *slice;
1400 Fl_Toggle_Node *node;
1401 u32_t max_name_len = 0;
1402 for (u32_t i = 0; i < slices->len(); i++) {
1403         slice = slices->get(i);
1404         string name = slice->name() + string(" [ ") +
1405                 slice->description() + string(" ] ");
1406         // replace \\n with spaces
1407         string filt_elems( "\\n");
1408         string::size_type pos = 0;
1409         while (( pos = name.find_first_of(filt_elems, pos)) != string::npos)
1410                 name.replace(pos, 1, string(" "));
1411         if (name.size() > max_name_len)
1412                 max_name_len = name.size();
1413         if (!slice->parent_slice_id) {
1414                 node = slices_tree->add_sub((char *)name.c_str());
1415                 node->user_data(to_voidp(slice->slice_id));
1416         } else {
1417                 node = slices_tree->find(to_voidp(slice->parent_slice_id));
1418                 if (node) {
1419                         slices_tree->open(node);
1420                         node = slices_tree->add_sub((char *)name.c_str());
1421                         node->user_data(to_voidp(slice->slice_id));
1422                 } else F::log("fill slices:",
1423                         "can't find node for %d parent, slice_id %d",
1424                                 slice->parent_slice_id, slice->slice_id);
1425         }
1427 s32_t width = max_name_len * 8;
1428 // need to count depth for width update
1429 slices_tree->resize(slices_tree->x(), slices_tree->y(), width > slices_tree_scroll->w() ? width : slices_tree_scroll->w(), slices_tree->h());
1430 // try to select previous node
1431 node = slices_tree->find(to_voidp(current_slice_id));
1432 if (node)
1433         slices_tree->select_range(node, node);
1434 Fl::unlock();} {}
1437 Function {x11_ui::fill_select_slice_tree(sfinx_slice_vector_t *slices)} {private return_type void
1438 } {
1439   code {// need locks
1440 Fl::lock();
1441 select_slice_tree->clear();
1442 select_slice_tree->draw_lines(1);
1443 select_slice_tree->alternate_color(FL_LIGHT2);
1444 select_slice_tree->trim_color(FL_LIGHT1);
1445 select_slice_tree->edit_on_reselect(0);
1446 sfinx_slice_t *slice;
1447 Fl_Toggle_Node *node;
1448 u32_t max_name_len = 0;
1449 for (u32_t i = 0; i < slices->len(); i++) {
1450         slice = slices->get(i);
1451         string name = slice->name() + string(" [ ") +
1452                 slice->description() + string(" ] ");
1453         // replace \\n with spaces
1454         string filt_elems( "\\n");
1455         string::size_type pos = 0;
1456         while (( pos = name.find_first_of(filt_elems, pos)) != string::npos)
1457                 name.replace(pos, 1, string(" "));
1458         if (name.size() > max_name_len)
1459                 max_name_len = name.size();
1460         if (!slice->parent_slice_id) {
1461                 node = select_slice_tree->add_sub((char *)name.c_str());
1462                 node->user_data(to_voidp(slice->slice_id));
1463         } else {
1464                 node = select_slice_tree->find(to_voidp(slice->parent_slice_id));
1465                 if (node) {
1466                         select_slice_tree->open(node);
1467                         node = select_slice_tree->add_sub((char *)name.c_str());
1468                         node->user_data(to_voidp(slice->slice_id));
1469                 } // else node is not connected - just ignore
1470         }
1472 s32_t width = max_name_len * 8;
1473 // need to count depth for width update
1474 select_slice_tree->resize(select_slice_tree->x(), select_slice_tree->y(),
1475         width > select_slice_tree_scroll->w() ? width : select_slice_tree_scroll->w(), select_slice_tree->h());
1476 Fl::unlock();} {}
1479 Function {x11_ui::edit_slice(sfinx_slice_t *slice)} {private return_type void
1480 } {
1481   code {// need locks
1482 Fl::lock();
1483 slice_name_i->value(slice->name());
1484 slice_directory_i->value(slice->directory());
1485 slice_name_i->take_focus();
1486 slice_description_i->value(slice->description());
1487 string status_line = "Parent slice: ";
1488 status_line += slice->parent_name();
1489 int cyear, cmonth, cday, eyear, emonth, eday, chour, cmin, csec, ehour, emin, esec;
1490 slice->ctime.GetDate(cyear, cmonth, cday);
1491 slice->etime.GetDate(eyear, emonth, eday);
1492 slice->ctime.GetTime(chour, cmin, csec);
1493 slice->etime.GetTime(ehour, emin, esec);
1494 char buf[128];
1495 sprintf(buf, " | Created at %02d/%02d/%02d %02d:%02d:%02d, Modified at %02d/%02d/%02d %02d:%02d:%02d", cyear, cmonth, cday, chour, cmin,
1496         csec, eyear, emonth, eday, ehour, emin, esec);
1497 status_line += buf;
1498 edit_slice_to->value(status_line.c_str());
1499 edit_slice_w->show();
1500 Fl::unlock();} {}
1503 Function {x11_ui::fill_preferences()} {private return_type void
1504 } {
1505   code {Fl::lock();
1506 string t;
1507 app->files_module_conf.get(FILES_MODULE_UNSORTED_PATH, t);
1508 config_files_module_unsorted_path_i->value(t.c_str());
1509 app->files_module_conf.get(FILES_MODULE_SORTED_TREE_PATH, t);
1510 config_files_module_sorted_path_i->value(t.c_str());
1511 app->files_module_conf.get(FILES_MODULE_DESC_FILE_NAME, t);
1512 config_files_module_desc_file_name_i->value(t.c_str());
1513 u32_t gen_desc_files;
1514 app->files_module_conf.get(FILES_MODULE_DESC_FILE_ENABLE, &gen_desc_files);
1515 gen_desc_files_b->value(gen_desc_files);
1516 Fl::unlock();} {}
1519 Function {x11_ui::fill_files_module_tree(sfinx_files_vector_t *tree_)} {private return_type void
1520 } {
1521   code {Fl::lock();
1522 static sfinx_files_vector_t tree;
1523 tree.copy(tree_);
1524 files_module_tree_br->user_data((void *)&tree);
1525 files_module_tree_br->clear();
1526 char buf[256];
1527 u32_t files = 0, dirs = 0;
1528 // set parent dir id
1529 if (tree.files.size())
1530         current_files_module_tree_path.main_obj_id = tree.files[0]->compressed_fsize;
1531 for (u32_t i = 0; i < tree.files.size(); i++) {
1532         if (tree.files[i]->is_directory)
1533                 strcpy(buf, "\\t@b@.");
1534         else
1535                 strcpy(buf, "\\t");
1536         strncat(buf, tree.files[i]->name.c_str(), 50);
1537         char dir_len[64];
1538         if (tree.files[i]->is_directory) {
1539                 strcpy(dir_len, "\\t@b@.< DIR >\\t");
1540                 dirs++;
1541         } else {
1542                 sprintf(dir_len, "\\t%llu\\t", tree.files[i]->fsize);
1543                 files++;
1544         }
1545         strcat(buf, dir_len);
1546         int cyear, cmonth, cday, chour, cmin, csec;
1547         tree.files[i]->ctime.GetDate(cyear, cmonth, cday);
1548         tree.files[i]->ctime.GetTime(chour, cmin, csec);
1549         sprintf(dir_len, "%02d/%02d/%04d %02d:%02d:%02d\\t", cday, cmonth, cyear, chour, cmin, csec);
1550         strcat(buf, dir_len);
1551         strcat(buf, tree.files[i]->mimetype.c_str());
1552         files_module_tree_br->add(buf);
1554 files_module_tree_br->redraw();
1555 string root;
1556 if (current_files_module_tree_path.id() == SFINX_FILES_MODULE_UNSORTED_TREE_REQUEST)
1557         app->files_module_conf.get(FILES_MODULE_UNSORTED_PATH, root);
1558 else
1559         app->files_module_conf.get(FILES_MODULE_SORTED_TREE_PATH, root);
1560 sprintf(buf, "Path: %s | Total %d file%s and %d director%s", (root + current_files_module_tree_path.name.c_str()).c_str(), files, (files == 1) ? "" : "s",  dirs,
1561         (dirs == 1) ? "y" : "ies");
1562 files_module_status_to->value(buf);
1563 files_module_status_to->redraw();
1564 Fl::unlock();} {}
1567 Function {x11_ui::files_module_classify_reply(sfinx_string_t *classify_error)} {private return_type void
1568 } {
1569   code {Fl::lock();
1570 if (classify_error->size() == 1) {
1571         classify_file_w->hide();
1572         app->sfinx.send(current_files_module_tree_path);
1573         // files_module_tree_br->remove(files_module_tree_br->value());
1574 } else
1575         fl_alert(classify_error->c_str());
1576 Fl::unlock();} {}
1579 Function {x11_ui::progress(sfinx_progress_t *p)} {private return_type void
1580 } {
1581   code {Fl::lock();
1582 static char buf[128];
1583 switch (p->status()) {
1584         case SFINX_PROGRESS_START:
1585                 progress_l->label(p->label());
1586                 strcpy(buf, p->strvalue());
1587                 progress_bar->label(buf);
1588                 progress_bar->minimum(0);
1589                 progress_bar->maximum(p->max());
1590                 progress_bar->value(p->value());
1591                 progress_w->show();
1592                 progress_w->redraw();
1593                 break;
1594         case SFINX_PROGRESS_END:
1595                 progress_w->hide();
1596                 break;
1597         case SFINX_PROGRESS_NONE:
1598         default:
1599                 break;
1601 Fl::unlock();} {}
1604 Function {x11_ui::alert(sfinx_string_t *alert)} {private return_type void
1605 } {
1606   code {Fl::lock();
1607 if (alert->size() != 1)
1608         fl_alert(alert->c_str());
1609 Fl::unlock();} {}
1612 Function {x11_ui::files_module_edit(sfinx_file_t *f)} {private return_type void
1613 } {
1614   code {Fl::lock();
1615 static sfinx_file_t file;
1616 file.copy(f);
1617 char buf[256];
1618 int eyear, emonth, eday, ehour, emin, esec, cyear, cmonth, cday, chour, cmin, csec;
1619 file.etime.GetDate(eyear, emonth, eday);
1620 file.etime.GetTime(ehour, emin, esec);
1621 file.ctime.GetDate(cyear, cmonth, cday);
1622 file.ctime.GetTime(chour, cmin, csec);
1623 sprintf(buf, "%llu bytes | Modified: %02d/%02d/%04d %02d:%02d:%02d | Last Status Changed: %02d/%02d/%04d %02d:%02d:%02d", file.fsize, cday, cmonth, cyear,
1624         chour, cmin, csec, eday, emonth, eyear, ehour, emin, esec);
1625 string path;
1626 if (current_files_module_tree_path.id() == SFINX_FILES_MODULE_UNSORTED_TREE_REQUEST)
1627         app->files_module_conf.get(FILES_MODULE_UNSORTED_PATH, path);
1628 else
1629         app->files_module_conf.get(FILES_MODULE_SORTED_TREE_PATH, path);
1630 string t = "URL: " + path + current_files_module_tree_path.name + "/" + file.name + " | " + file.mimetype + " | Size: " + buf;
1631 classify_file_to->value(t.c_str());
1632 file_title_i->value(file.title.c_str());
1633 file_name_i->value(file.name.c_str());
1634 // save orig file name
1635 file.orig_name = file.name;
1636 file.id(SFINX_FILES_MODULE_EDIT_FILE); // edit file
1637 file_title_i->take_focus();
1638 file_authority_i->value(file.authority.c_str());
1639 file_description_i->value(file.description.c_str());
1640 file_comments_i->value(file.comments.c_str());
1641 sorted_location_b->value(file.sorted_location);
1642 file_compress_b->value(file.store_compressed);
1643 file_gen_csum_b->value(file.generate_csum);
1644 static string main_slice_name;
1645 main_slice_name = app->slice_name(file.main_obj_id);
1646 file_main_slice_b->label(main_slice_name.c_str());
1647 file_main_slice_b->user_data(to_voidp(file.main_obj_id)); // ÔÕÔÁ ÈÒÁÎÉÔÓÑ main_slice_id
1648 file_additional_slices_br->clear();
1649 //for (u32_t i = 0; i < file.objects.size(); i++)
1650 //      file_additional_slices_br->add((app->slice_name(file.objects[i]).c_str()), to_voidp(file.objects[i]));
1651 classify_file_w->user_data((void *)&file);
1652 classify_file_w->show();
1653 Fl::unlock();} {}
1656 Function {x11_ui::files_module_edit_reply(sfinx_string_t *classify_error)} {private return_type void
1657 } {
1658   code {Fl::lock();
1659 if (classify_error->size() == 1) {
1660         app->sfinx.send(current_files_module_tree_path);
1661         classify_file_w->hide();
1662 } else
1663         fl_alert(classify_error->c_str());
1664 Fl::unlock();} {}
1667 Function {x11_ui::search_browser(sfinx_pair_vector_t *r)} {private return_type void
1668 } {
1669   code {Fl::lock();
1670 search_browser_br->clear();
1671 if (!r->len()) {
1672         search_browser_br->add("Sfinx has no data for this query");
1673         goto out;
1675 goto_page_ch->clear();
1676 /*for (u32_t i = 1; i < 50; i++) {
1677         char b[32];
1678         sprintf(b, "%d", i);
1679         goto_page_ch->add(b, 0, 0, (void *)i);
1680 //      Fl_Menu_Item *item = (Fl_Menu_Item *)(goto_page_ch->menu() + n);
1681 //      item->color(FL_GREEN);
1682 } */
1683 goto_page_ch->value(0);
1684 //goto_page_ch->selection_color(FL_GREEN);
1686 // fill browser
1687 for (u32_t i = 0; i < r->len(); i++) {
1688         sfinx_pair_t *p = r->find(i);
1689         if (!p)
1690                 bug();
1691         sfinx_t *el;
1692         if (!p->get(i, &el))
1693                 bug();
1694         // adding element
1695         string inf;
1696         prepare_search_info(el, inf);
1697         string::size_type pos = 0, found;
1698         while ((found = inf.find('\\n', pos)) != string::npos) {
1699                 string line(inf, pos, found - pos);
1700                 search_browser_br->add(line.c_str());
1701                 pos = found + 1;
1702         }
1703         search_browser_br->add("@-");
1705 out:
1706 search_browser_w->show();
1707 Fl::unlock();} {}
1710 Function {x11_ui::prepare_search_info(sfinx_t *el, string &inf)} {private return_type void
1711 } {
1712   code {sfinx_file_t *f;
1713 switch (el->id()) {
1714       case SFINX_ELEMENT_FILE:
1715         f = (sfinx_file_t *)el;
1716         inf = "\\nType: File\\n";
1717         inf.append("Slice Hierarchy: " + app->slice_hierarchy(f->main_obj_id) + "\\n");
1718 /*        if (f->slices.size()) {
1719           inf.append("Additional Slices : ");
1720           for (u32_t i = 0; i < f->slices.size(); i++) {
1721             if (i)
1722               inf.append(", ");
1723             inf.append(app->slice_name(f->slices[i]));
1724          }
1725           inf.append("\\n");
1726        }*/
1727         inf.append("Title: " + f->title + "\\n");
1728         inf.append("Authority: " + f->authority + "\\n");
1729         inf.append("Description: " + f->description + "\\n");
1730         inf.append("Comments: " + f->comments + "\\n");
1731         inf.append("Name: " + f->name + "\\n");
1732         char buf[64];
1733         sprintf(buf, "%llu bytes\\n", f->fsize);
1734         inf.append("Size: ");
1735         inf.append(buf);
1736         if (f->csum.size())
1737                 inf.append("Csum: " + f->csum + "\\n");
1738         sprintf(buf, "%llu bytes\\n", f->compressed_fsize);
1739         inf.append("Compressed Size: ");
1740         inf.append(buf);
1741         if (f->compressed_csum.size())
1742                 inf.append("Compressed Csum: " + f->compressed_csum + "\\n");
1743         int year, month, day, hour, min, sec;
1744         f->ctime.GetDate(year, month, day);
1745         f->ctime.GetTime(hour, min, sec);
1746         sprintf(buf, "Create Entry Time: %02d/%02d/%04d %02d:%02d:%02d\\n", day, month, year, hour, min, sec);
1747         inf.append(buf);
1748         f->etime.GetDate(year, month, day);
1749         f->etime.GetTime(hour, min, sec);
1750         sprintf(buf, "Edit Entry Time: %02d/%02d/%04d %02d:%02d:%02d\\n", day, month, year, hour, min, sec);
1751         inf.append(buf);
1752         inf.append("\\n");
1753         break;
1754       default:
1755         debug("Can't fill element info !");
1756         bug();
1757 }} {}