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