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