]> git.lyx.org Git - lyx.git/blob - src/lyx_sendfax_main.C
Fix small bug in reading \set_color in lyxrc
[lyx.git] / src / lyx_sendfax_main.C
1
2 #include <config.h>
3
4 #include <cstdlib>
5 #include FORMS_H_LOCATION
6 #include "debug.h"
7 #include "lyx_sendfax.h"
8 #include "lyx_main.h"
9 #include "lyxrc.h"
10 #include "support/filetools.h"
11 #include "lyx_gui_misc.h" // CancelCloseBoxCB
12 #include "support/syscall.h"
13 #include "gettext.h"
14
15 using std::endl;
16
17 /* Prototypes */
18
19 bool sendfax(string const &fname, string const &sendcmd);
20 bool button_send(string const &fname, string const &sendcmd = string());
21 void show_logfile(string logfile, bool show_if_empty);
22
23 const int LEN_PHONE = 20;
24 const int LEN_NAME = 25;
25
26 /* Global Variables */
27
28 string phone_book;
29 string global_sendcmd;
30 string filename;
31
32 FD_xsendfax *fd_xsendfax;
33 FD_phonebook  *fd_phonebook;
34 FD_logfile  *fd_logfile;
35
36 bool send_fax(string const &fname, string const &sendcmd)
37 {
38     // I put FAXCMD here to see if I can get rid of some strange errors. (Lgb)
39     string FAXCMD = "sendfax -n -h '$$Host' -c '$$Comment' -x '$$Enterprise' -d '$$Name'@'$$Phone' '$$FName'";
40     string title = _("Fax File: ");
41     string path;
42     
43     if (fname.empty())
44         return false;
45     path= OnlyPath(fname);
46     if (path.empty() || path == "./")
47         filename = GetCWD() + "/" + fname;
48     else
49         filename = fname;
50
51     if (sendcmd.empty())
52             global_sendcmd = FAXCMD;
53     else
54             global_sendcmd = sendcmd;
55     
56     fd_xsendfax = create_form_xsendfax();
57     fd_phonebook = create_form_phonebook();
58     fd_logfile = create_form_logfile();
59
60     // Make sure the close box doesn't kill LyX when being pressed. (RvdK)
61     fl_set_form_atclose(fd_xsendfax->xsendfax, CancelCloseBoxCB, 0);
62     fl_set_form_atclose(fd_phonebook->phonebook, CancelCloseBoxCB, 0);
63     fl_set_form_atclose(fd_logfile->logfile, CancelCloseBoxCB, 0);
64
65     /* init Phone-Book */
66     string phone_book_name;
67     if (lyxrc.phone_book.empty()) {
68         phone_book_name = "phonebook";
69     } else
70         phone_book_name = lyxrc.phone_book;
71     phone_book= FileSearch(user_lyxdir, phone_book_name);
72     if (phone_book.empty()) 
73         phone_book = AddName(user_lyxdir, phone_book_name);
74
75     fl_set_browser_fontsize(fd_phonebook->browser, FL_NORMAL_SIZE);
76     fl_set_browser_fontstyle(fd_phonebook->browser, FL_FIXED_STYLE);
77     fl_load_browser(fd_phonebook->browser, phone_book.c_str());
78
79     title += OnlyFilename(fname);
80
81     /* show the first form */
82     fl_show_form(fd_xsendfax->xsendfax, FL_PLACE_MOUSE, FL_FULLBORDER, title.c_str());
83 /*
84     while(true) {
85         obj = fl_do_forms();
86         if (obj == fd_xsendfax->Button_Cancel)
87             break;
88         else if (obj == fd_xsendfax->Button_Send) {
89             if (button_send(fname, global_sendcmd))
90                 break;
91         } else if (obj == fd_xsendfax->Button_Apply) {
92             button_send(fname, global_sendcmd);
93         } else if (obj == fd_xsendfax->Button_SPhone) {
94             cb_select_phoneno(0, 0);
95         }
96     }
97     fl_hide_form(fd_xsendfax->xsendfax);
98 */
99     return true;
100 }
101
102
103 bool button_send(string const &fname, string const &sendcmd)
104 {
105     string
106         name = fl_get_input(fd_xsendfax->Input_Name),
107         phone = fl_get_input(fd_xsendfax->Input_Phone),
108         enterprise = fl_get_input(fd_xsendfax->Input_Enterprise),
109         comment = fl_get_input(fd_xsendfax->Input_Comment),
110         host = GetEnv("FAX_SERVER"),
111         logfile,
112         cmd;
113
114     if (phone.empty())
115         return false;
116     logfile = TmpFileName(OnlyPath(fname), "FAX");
117     cmd = sendcmd + " >";
118     cmd += logfile + " 2>";
119     cmd += logfile;
120     cmd = subst(cmd, "$$Host", host);
121     cmd = subst(cmd, "$$Comment", comment);
122     cmd = subst(cmd, "$$Enterprise", enterprise);
123     cmd = subst(cmd, "$$Name", name);
124     cmd = subst(cmd, "$$Phone", phone);
125     cmd = subst(cmd, "$$FName", fname);
126     lyxerr << "CMD: " << cmd << endl;
127     Systemcalls one(Systemcalls::System, cmd);
128     show_logfile(logfile, false);
129     remove(logfile.c_str());
130     return true;
131 }
132
133
134 void cb_hide_form(FL_OBJECT *ob, long)
135 {
136     fl_hide_form(ob->form);
137 }
138
139
140 void cb_select_phoneno(FL_OBJECT *, long)
141 {
142     int
143         i,
144         n= fl_get_browser_maxline(fd_phonebook->browser);
145     char const
146         *line;
147
148     fl_hide_form(fd_phonebook->phonebook);
149     line = fl_get_browser_line(fd_phonebook->browser, 1);
150     if (!n || strstr(line, _("Empty Phonebook"))) {
151         fl_clear_browser(fd_phonebook->browser);
152         return;
153     }
154     i = fl_get_browser(fd_phonebook->browser);
155     line = fl_get_browser_line(fd_phonebook->browser, i);
156     if (!line)
157         return;
158     char *buf = new char [strlen(line)+1];
159
160     strcpy(buf, line);
161     for(i = LEN_PHONE; (i > 0) && (buf[i] == ' '); --i)
162         ;
163     buf[i + 1] = 0;
164     for(i = LEN_PHONE + LEN_NAME + 1; (i > LEN_PHONE) && (buf[i] == ' '); --i)
165         ;
166     buf[i + 1] = 0;
167     fl_set_input(fd_xsendfax->Input_Phone, buf);
168     fl_set_input(fd_xsendfax->Input_Name, buf+LEN_PHONE+1);
169     fl_set_input(fd_xsendfax->Input_Enterprise, buf+LEN_PHONE+LEN_NAME+2);
170     delete [] buf;
171 }
172
173
174 void cb_add_phoneno(FL_OBJECT *, long )
175 {
176     char const
177         *line;
178     char const
179         *name = fl_get_input(fd_xsendfax->Input_Name),
180         *phone = fl_get_input(fd_xsendfax->Input_Phone),
181         *enterprise = fl_get_input(fd_xsendfax->Input_Enterprise);
182     int
183         i, n;
184
185     if (!strlen(phone))
186         return;
187
188     char * buf = new char [50 + strlen(enterprise)];
189
190     sprintf(buf, "%-*.*s %-*.*s %s",
191             LEN_PHONE, LEN_PHONE, phone,
192             LEN_NAME, LEN_NAME, name,
193             enterprise);
194     n = fl_get_browser_maxline(fd_phonebook->browser);
195     if (n) {
196         line = fl_get_browser_line(fd_phonebook->browser, 1);
197         if (strstr(line, _("Empty Phonebook"))) {
198             fl_clear_browser(fd_phonebook->browser);
199             n = 0;
200         }
201     }
202     for(i = 1; i <= n; ++i) {
203         line = fl_get_browser_line(fd_phonebook->browser, i);
204         if (!strncmp(buf, line, 46))
205             break;
206     }
207     if (i > n) {
208         fl_addto_browser(fd_phonebook->browser, buf);
209         fl_set_object_label(fd_xsendfax->pb_save, _("Save (needed)"));
210     }
211     delete[] buf;
212 }
213
214
215 void cb_delete_phoneno(FL_OBJECT *, long )
216 {
217     char const
218         *line;
219     char const
220         *name = fl_get_input(fd_xsendfax->Input_Name),
221         *phone = fl_get_input(fd_xsendfax->Input_Phone),
222         *enterprise = fl_get_input(fd_xsendfax->Input_Enterprise);
223     int
224         i, n;
225
226     if (!strlen(phone))
227         return;
228     char *buf = new char [50+strlen(enterprise)];
229     sprintf(buf, "%-*.*s %-*.*s %s",
230             LEN_PHONE, LEN_PHONE, phone,
231             LEN_NAME, LEN_NAME, name,
232             enterprise);
233     n = fl_get_browser_maxline(fd_phonebook->browser);
234     if (n) {
235         line = fl_get_browser_line(fd_phonebook->browser, 1);
236         if (strstr(line, _("Empty Phonebook"))) {
237             fl_clear_browser(fd_phonebook->browser);
238             n = 0;
239         }
240     }
241     for(i = 1; i <= n; ++i) {
242         line = fl_get_browser_line(fd_phonebook->browser, i);
243         if (!strncmp(buf, line, 46))
244             break;
245     }
246     if (i <= n) {
247         fl_delete_browser_line(fd_phonebook->browser, i);
248         fl_set_object_label(fd_xsendfax->pb_save, _("Save (needed)"));
249     }
250     delete[] buf;
251 }
252
253
254 void cb_save_phoneno(FL_OBJECT *, long )
255 {
256     char const
257         *line;
258     int
259         i, n;
260     FILE
261         *fp;
262
263     if (!(fp = fopen(phone_book.c_str(), "w"))) {
264         WriteAlert(_("Error!"), _("Cannot open phone book: "), phone_book);
265         return;
266     }
267     n = fl_get_browser_maxline(fd_phonebook->browser);
268     if (n) {
269         line = fl_get_browser_line(fd_phonebook->browser, 1);
270         if (strstr(line, _("Empty Phonebook"))) {
271             fl_clear_browser(fd_phonebook->browser);
272             n = 0;
273         }
274     }
275     for(i = 1; i <= n; ++i) {
276         line = fl_get_browser_line(fd_phonebook->browser, i);
277         fprintf(fp, "%s\n", line);
278     }
279     fclose(fp);
280     fl_set_object_label(fd_xsendfax->pb_save, _("Save"));
281     fl_redraw_form(fd_xsendfax->xsendfax);
282 }
283
284 void show_logfile(string logfile, bool show_if_empty)
285 {
286     if (logfile.empty())
287         return;
288     if (!fl_load_browser(fd_logfile->browser, logfile.c_str())) {
289         if (!show_if_empty)
290             return;
291         fl_add_browser_line(fd_logfile->browser,
292                             _("NO OR EMPTY LOGFILE!"));
293     }
294     if (fd_logfile->logfile->visible) {
295         fl_raise_form(fd_logfile->logfile);
296     } else {
297         fl_show_form(fd_logfile->logfile,
298                      FL_PLACE_MOUSE | FL_FREE_SIZE, FL_FULLBORDER,
299                      _("Message-Window"));
300     }
301 }
302
303 void FaxLogfileCloseCB(FL_OBJECT *, long)
304 {
305     fl_hide_form(fd_logfile->logfile);
306 }
307
308 void FaxCancelCB(FL_OBJECT *, long)
309 {
310     fl_hide_form(fd_xsendfax->xsendfax);
311 }
312
313 void FaxApplyCB(FL_OBJECT *, long)
314 {
315     button_send(filename, global_sendcmd);
316 }
317
318 void FaxSendCB(FL_OBJECT *, long)
319 {
320     if (button_send(filename, global_sendcmd))
321         FaxCancelCB(0, 0);
322 }
323
324 void FaxOpenPhonebookCB(FL_OBJECT *, long)
325 {
326     int
327         n= fl_get_browser_maxline(fd_phonebook->browser);
328
329     if (!n)
330         fl_addto_browser(fd_phonebook->browser, _("@L@b@cEmpty Phonebook"));
331     fl_show_form(fd_phonebook->phonebook, FL_PLACE_MOUSE, FL_FULLBORDER,
332                  _("Phonebook"));
333 }