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