Search can open File URL's in mozilla/djview/xpdf/xchm
[sfinx.git] / include / faraon.H
blob1c70dd66bd048691468f497dd62302996bab757d
2  /*
3   *   Copyright (C) 2007, Rus V. Brushkoff, All rights reserved.
4   */
6 #ifndef _FARAON_H_
7 #define _FARAON_H_
9 #include <F_App.H>
10 #include <string>
11 #include <FL/Fl_Preferences.H>
12 #include <cc++/socket.h>
13 #include <network.H>
14 #include <version.H>
16 using namespace F;
17 using namespace ost;
18 using namespace std;
20 #define SFINX_LOG_DEBUG   0
21 #define SFINX_LOG_NOTICE  1
22 #define SFINX_LOG_WARN    2
23 #define SFINX_LOG_ERROR   3
24 #define SFINX_LOG_FATAL   4
26 class app_specific_ui {
28   Mutex big_lock;
30  public:
32   app_specific_ui() { }
33   virtual ~app_specific_ui() { }
34   virtual void log(int level, const char *fmt, ...) = 0;
35   virtual void edit_slice(sfinx_slice_t *slice) = 0;
36   virtual void fill_preferences() = 0;
37   virtual void fill_unsorted_files_tree(sfinx_files_vector_t *) = 0;
38   virtual void progress(sfinx_progress_t *) = 0;
39   virtual void files_module_edit_reply(sfinx_string_t *) = 0;
40   virtual void files_module_edit(sfinx_file_t *) = 0;
41   virtual void notes_module_reply(sfinx_string_t *) = 0;
42   virtual void notes_module_edit(sfinx_note_t *) = 0;
43   virtual void alert(sfinx_string_t *) = 0;
44   virtual void search_browser(sfinx_pair_vector_t *) = 0;
45   virtual void fill_objects_tree() = 0;
46   void lock() { big_lock.enterMutex(); }
47   void unlock() { big_lock.leaveMutex(); }
50 class x11_ui: public F_FLTK_UI, public app_specific_ui {
51  public:
52    x11_ui() : F_FLTK_UI() { }
53    ~x11_ui() { }
54    void init();
55    void log(int level, const char *fmt, ...);
56    void edit_slice(sfinx_slice_t *slice);
57    void fill_preferences();
58    void fill_unsorted_files_tree(sfinx_files_vector_t *);
59    void progress(sfinx_progress_t *);
60    void files_module_edit_reply(sfinx_string_t *);
61    void files_module_edit(sfinx_file_t *);
62    void notes_module_edit(sfinx_note_t *);
63    void notes_module_reply(sfinx_string_t *);
64    void alert(sfinx_string_t *);
65    void search_browser(sfinx_pair_vector_t *);
66    
67    void fill_objects_tree();
70 class faraon_app : public F_App {
71   // available ui's for this app
72   x11_ui ui1;
74  public:
76   connection_to_sfinx sfinx;
78   string server_name;
79   sfinx_pair_vector_t files_module_conf;
80   sfinx_slice_vector_t slices; // ÄÅÒÅ×Ï ÓÌÁÊÓÏ× Ó ÏÂØÅËÔÁÍÉ, Ï ËÏÔÏÒÙÈ ÚÎÁÅÔ ÓÆÉÎËÓ
81   bool slices_need_update;
83   faraon_app(int argc, char **argv, const char *name = 0,
84     const char *version = 0, const char *author = 0,
85         const char *license = 0, CommandOption *opts = 0) :
86           F_App(argc, argv, name, version, author, license, opts) {
87             files_module_conf.tid(SFINX_FILES_MODULE_CONF);
88             files_module_conf.add(FILES_MODULE_UNSORTED_PATH, new sfinx_string_t);
89             files_module_conf.add(FILES_MODULE_SORTED_TREE_PATH, new sfinx_string_t);
90         files_module_conf.add(FILES_MODULE_DESC_FILE_ENABLE, new sfinx_8bit_t);
91         files_module_conf.add(FILES_MODULE_DESC_FILE_NAME, new sfinx_string_t);
92         slices_need_update = true;
93  }
94   app_specific_ui *ui() { return dynamic_cast<app_specific_ui *>(ui_); }
95         ~faraon_app() { }
96         void read_preferences();
97         void write_preferences();
98         bool connect();
99         bool connected() { return sfinx.connected(); }
100         void main();
101         bool refresh_slices(bool force = false) {
102           if (force || slices_need_update)
103             return sfinx.send(SFINX_OBJECTS_TREE_REQUEST, (u32_t)0xFFFFFFFF);
104           ui()->fill_objects_tree();
105           return false;
107   void prepare_search_info(sfinx_t *el, string &inf);
108         bool process_requests();
109         string slice_name(sfinx_id_t slice_id) {
110           sfinx_slice_t *slice = slices.find(slice_id);
111           string t;
112           if (!slice)
113             return t;
114           t = slice->name();
115           t += " [ ";
116           t += slice->description();
117           t += " ]";
118           return t;
120   string slice_hierarchy(sfinx_id_t sid) {
121     vector <string> h;
122     sfinx_slice_t *slice;
123     do {
124       slice = slices.find(sid);
125       if (!slice)
126         break;
127       string t = slice->name();
128       t += " [ ";
129       t += slice->description();
130       t += " ]";
131       sid = slice->parent_id;
132       h.push_back(t);
133   } while (sid != 1);
134    string res;
135    if (h.size()) {
136      for (int32_t i = h.size() - 1; i >= 0; i--) {
137        res.append(h[i]);
138        if (i)
139          res.append(", ");
140      }
141    }
142     return res;
143   }
144   string slice_hierarchy_path(sfinx_id_t sid) {
145     vector <string> h;
146     sfinx_slice_t *slice;
147     do {
148       slice = slices.find(sid);
149       if (!slice)
150         break;
151       h.push_back("/" + slice->directory_);
152       sid = slice->parent_id;
153   } while (sid != 1);
154    string res;
155    if (h.size()) {
156      for (int32_t i = h.size() - 1; i >= 0; i--) {
157        res.append(h[i]);
158      }
159    }
160     return res;
161   }
164 extern faraon_app *app;
166 #endif