]> git.lyx.org Git - lyx.git/blob - src/frontends/xforms/FormSpellchecker.C
b3575dc9e5cc1ec8a40bd9547a41c45a46520458
[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, leuven@fee.uva.nl
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 "forms/form_spellchecker.h"
20 #include FORMS_H_LOCATION
21
22 typedef FormCB<ControlSpellchecker, FormDB<FD_spellchecker> > base_class;
23
24 FormSpellchecker::FormSpellchecker(ControlSpellchecker & c, Dialogs & d)
25         : base_class(c, d, _("LyX: Spellchecker"), false)
26 {
27 }
28
29
30 void FormSpellchecker::build()
31 {
32         dialog_.reset(build_spellchecker(this));
33
34         fl_set_slider_bounds(dialog_->slider, 0.0, 100.0);
35         fl_set_slider_step(dialog_->slider, 1.0);
36
37         fl_set_browser_dblclick_callback(dialog_->browser,
38                                          C_FormBaseInputCB, 2);
39
40         fl_set_input_return(dialog_->input, FL_RETURN_CHANGED);
41         setPrehandler(dialog_->input);
42
43         // Manage the buttons
44         bc().setCancel(dialog_->button_close);
45         bc().addReadOnly(dialog_->button_replace);
46         bc().addReadOnly(dialog_->button_accept);
47         bc().addReadOnly(dialog_->button_insert);
48         bc().addReadOnly(dialog_->button_ignore);
49         bc().addReadOnly(dialog_->button_start);
50         bc().addReadOnly(dialog_->button_stop);
51         bc().addReadOnly(dialog_->browser);
52 }
53
54 void FormSpellchecker::update()
55 {
56         string const w;
57         fl_set_input(dialog_->input, w.c_str());
58         fl_set_object_label(dialog_->text, w.c_str());
59         fl_clear_browser(dialog_->browser);
60         fl_set_slider_value(dialog_->slider, 0);
61 }
62
63 ButtonPolicy::SMInput FormSpellchecker::input(FL_OBJECT * obj, long val)
64 {
65         if (obj == dialog_->button_replace) {
66                 string const tmp = getString(dialog_->input);
67                 controller().replace(tmp);
68
69         } else if (obj == dialog_->button_start) {
70                 controller().check();
71                 stop(false);
72
73         } else if (obj == dialog_->button_stop) {
74                 controller().stop();
75                 stop(true);
76
77         } else if (obj == dialog_->button_ignore) {
78                 controller().check();
79
80         } else if (obj == dialog_->button_accept) {
81                 controller().ignoreAll();
82
83         } else if (obj == dialog_->button_insert) {
84                 controller().insert();
85
86         } else if (obj == dialog_->browser) {
87                 int const line = fl_get_browser(dialog_->browser);
88                 string const tmp =
89                         getString(dialog_->browser, line);
90                 if (tmp.empty())
91                         return ButtonPolicy::SMI_NOOP;
92
93                 if (val != 2) {
94                         // single-click
95                         // place the chosen string in the input as feedback
96                         fl_set_input(dialog_->input, tmp.c_str());
97
98                 } else {
99                         // double-click
100                         controller().replace(tmp);
101                         // reset the browser so that the following
102                         // single-click callback doesn't do anything
103                         fl_deselect_browser_line(dialog_->browser, line);
104                 }
105         }
106
107         return ButtonPolicy::SMI_VALID;
108 }
109
110 void FormSpellchecker::partialUpdate(int id)
111 {
112         switch (id) {
113         case 0:
114                 // set progress bar
115                 fl_set_slider_value(dialog_->slider,
116                                     controller().getProgress());
117                 break;
118         case 1:
119         {
120                 // set suggestions
121                 string w = controller().getWord();
122                 fl_set_input(dialog_->input, w.c_str());
123                 fl_set_object_label(dialog_->text, w.c_str());
124                 fl_clear_browser(dialog_->browser);
125                 while (!(w = controller().getSuggestion()).empty()) {
126                         fl_add_browser_line(dialog_->browser, w.c_str());
127                 }
128         }
129         break;
130         case 2:
131                 // show exit message
132                 fl_show_messages(controller().getMessage().c_str());
133                 //hide();
134         }
135 }
136
137
138 void FormSpellchecker::showMessage(const char * msg)
139 {
140         fl_show_message(msg, "", "");
141 }
142
143 void FormSpellchecker::stop(bool stop)
144 {
145         setEnabled(dialog_->button_start, stop);
146         setEnabled(dialog_->button_replace, !stop);
147         setEnabled(dialog_->button_ignore, !stop);
148         setEnabled(dialog_->button_accept, !stop);
149         setEnabled(dialog_->button_insert, !stop);
150         setEnabled(dialog_->button_stop, !stop);
151         setEnabled(dialog_->browser, !stop);
152         setEnabled(dialog_->input, !stop);
153 }