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