]> git.lyx.org Git - lyx.git/blob - src/frontends/xforms/FormSpellchecker.C
Fix crash when using dialog with keyboard:
[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 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 sel = fl_get_browser(dialog_->browser);
84                 if (clickline_==sel) {
85                         string tmp = fl_get_input(dialog_->input);
86                         controller().replace(tmp);
87                 }
88                 clickline_ = sel;
89                 string tmp = fl_get_browser_line(dialog_->browser, clickline_);
90                 fl_set_input(dialog_->input, tmp.c_str());
91         }
92
93         return ButtonPolicy::SMI_VALID;
94 }
95
96 void FormSpellchecker::partialUpdate(int id)
97 {
98         switch (id) {
99         case 0:
100                 // set progress bar
101                 fl_set_slider_value(dialog_->slider,
102                                     controller().getProgress());
103                 break;
104         case 1:
105         {
106                 // set suggestions
107                 string w = controller().getWord();
108                 fl_set_input(dialog_->input, w.c_str());
109                 fl_set_object_label(dialog_->text, w.c_str());
110                 fl_clear_browser(dialog_->browser);
111                 while ( !(w = controller().getSuggestion()).empty() ) {
112                         fl_add_browser_line(dialog_->browser, w.c_str());
113                 }
114         }
115                 break;
116         case 2:
117                 // show exit message
118                 fl_show_messages(controller().getMessage().c_str());
119                 hide();
120         }
121         
122 }
123
124                 
125 void FormSpellchecker::showMessage(const char * msg)
126 {
127         fl_show_message(msg, "", "");
128 }
129
130 void FormSpellchecker::stop(bool stop)
131 {
132         setEnabled(dialog_->start, stop);
133         setEnabled(dialog_->replace, !stop);
134         setEnabled(dialog_->ignore, !stop);
135         setEnabled(dialog_->accept, !stop);
136         setEnabled(dialog_->insert, !stop);
137         setEnabled(dialog_->stop, !stop);
138         setEnabled(dialog_->browser, !stop);
139         setEnabled(dialog_->input, !stop);
140 }