]> git.lyx.org Git - lyx.git/blob - src/frontends/xforms/FormSpellchecker.C
John's spellchecker patch plus a new helper function getStringFromBrowser.
[lyx.git] / src / frontends / xforms / FormSpellchecker.C
1 /**
2  * \file FormSpellchecker.C
3  * Copyright 2001 The LyX Team.
4  * See the file COPYING.
5  *
6  * \author Edwin Leuven
7  */
8
9 #include <config.h>
10
11 #ifdef __GNUG__
12 #pragma implementation
13 #endif
14
15 #include "xformsBC.h"
16 #include "xforms_helpers.h"
17 #include "ControlSpellchecker.h"
18 #include "FormSpellchecker.h"
19 #include "form_spellchecker.h"
20
21 typedef FormCB<ControlSpellchecker, FormDB<FD_form_spellchecker> > base_class;
22
23 FormSpellchecker::FormSpellchecker(ControlSpellchecker & c)
24         : base_class(c, _("LyX: Spellchecker")), clickline_(-1)
25 {}
26
27
28 void FormSpellchecker::build()
29 {
30         dialog_.reset(build_spellchecker());
31         
32         fl_set_slider_bounds(dialog_->slider, 0.0, 100.0);
33         fl_set_slider_step(dialog_->slider, 1.0);
34
35         // Manage the buttons
36         bc().setCancel(dialog_->done);
37         bc().addReadOnly(dialog_->replace);
38         bc().addReadOnly(dialog_->accept);
39         bc().addReadOnly(dialog_->insert);
40         bc().addReadOnly(dialog_->ignore);
41         bc().addReadOnly(dialog_->start);
42         bc().addReadOnly(dialog_->stop);
43         bc().addReadOnly(dialog_->browser);
44 }
45
46 void FormSpellchecker::update()
47 {
48         string w = "";
49         fl_set_input(dialog_->input, w.c_str());
50         fl_set_object_label(dialog_->text, w.c_str());
51         fl_clear_browser(dialog_->browser);
52         fl_set_slider_value(dialog_->slider, 0);
53 }
54
55 void FormSpellchecker::hide()
56 {
57         clickline_ = -1;
58         
59         if (form() && form()->visible)
60                 fl_hide_form(form());
61 }
62
63 ButtonPolicy::SMInput FormSpellchecker::input(FL_OBJECT * obj, long)
64 {
65         if (obj == dialog_->replace) {
66                 string const tmp = fl_get_input(dialog_->input);
67                 controller().replace(tmp);
68         } else if (obj == dialog_->start) {
69                 controller().check();
70                 stop(false);
71         } else if (obj == dialog_->stop) {
72                 controller().stop();
73                 stop(true);
74         } else if (obj == dialog_->ignore) {
75                 controller().check();
76         } else if (obj == dialog_->accept) {
77                 controller().ignoreAll();
78         } else if (obj == dialog_->insert) {
79                 controller().insert();
80         } else if (obj == dialog_->options) {
81                 controller().options();
82         } else if (obj == dialog_->browser) {
83                 int const sel = fl_get_browser(dialog_->browser);
84                 if (sel < 1)
85                         return ButtonPolicy::SMI_NOOP;
86
87                 if (clickline_ == sel) {
88                         string const tmp = fl_get_input(dialog_->input);
89                         controller().replace(tmp);
90                 }
91
92                 clickline_ = sel;
93                 char const * cptmp = fl_get_browser_line(dialog_->browser,
94                                                          clickline_);
95                 string const tmp = (cptmp) ? cptmp : "";
96                 fl_set_input(dialog_->input, tmp.c_str());
97         }
98
99         return ButtonPolicy::SMI_VALID;
100 }
101
102 void FormSpellchecker::partialUpdate(int id)
103 {
104         switch (id) {
105         case 0:
106                 // set progress bar
107                 fl_set_slider_value(dialog_->slider,
108                                     controller().getProgress());
109                 break;
110         case 1:
111         {
112                 // set suggestions
113                 string w = controller().getWord();
114                 fl_set_input(dialog_->input, w.c_str());
115                 fl_set_object_label(dialog_->text, w.c_str());
116                 fl_clear_browser(dialog_->browser);
117                 while ( !(w = controller().getSuggestion()).empty() ) {
118                         fl_add_browser_line(dialog_->browser, w.c_str());
119                 }
120         }
121                 break;
122         case 2:
123                 // show exit message
124                 fl_show_messages(controller().getMessage().c_str());
125                 hide();
126         }
127         
128 }
129
130                 
131 void FormSpellchecker::showMessage(const char * msg)
132 {
133         fl_show_message(msg, "", "");
134 }
135
136 void FormSpellchecker::stop(bool stop)
137 {
138         setEnabled(dialog_->start, stop);
139         setEnabled(dialog_->replace, !stop);
140         setEnabled(dialog_->ignore, !stop);
141         setEnabled(dialog_->accept, !stop);
142         setEnabled(dialog_->insert, !stop);
143         setEnabled(dialog_->stop, !stop);
144         setEnabled(dialog_->browser, !stop);
145         setEnabled(dialog_->input, !stop);
146 }