]> git.lyx.org Git - features.git/blob - src/insets/insetindex.C
read the Changelog
[features.git] / src / insets / insetindex.C
1 #include <config.h>
2
3 #include <cstdlib>
4
5 #ifdef __GNUG__
6 #pragma implementation
7 #endif
8
9 #include FORMS_H_LOCATION  
10 #include "insetindex.h"
11 #include "buffer.h"
12 #include "debug.h"
13 #include "LaTeXFeatures.h"
14 #include "gettext.h"
15 #include "LString.h"
16 #include "lyx_gui_misc.h" // WarnReadonly
17  
18 FD_index_form * index_form = 0;
19
20 extern "C"
21 void index_cb(FL_OBJECT *, long data)
22 {
23         InsetIndex::Holder * holder =
24                 static_cast<InsetIndex::Holder*>
25                 (index_form->index_form->u_vdata);
26
27         holder->inset->callback( index_form, data );
28 }
29         
30
31 static
32 FD_index_form * create_form_index_form()
33 {
34         FL_OBJECT * obj;
35         FD_index_form *fdui = (FD_index_form *) fl_calloc(1, sizeof(FD_index_form));
36
37         fdui->index_form = fl_bgn_form(FL_NO_BOX, 258, 196);
38         obj = fl_add_box(FL_UP_BOX, 0, 0, 258, 196, "");
39         fdui->key = obj = fl_add_input(FL_NORMAL_INPUT, 93, 26, 130, 30,
40                                        idex(_("Keyword:|#K")));
41           fl_set_object_shortcut(obj, scex(_("Keyword:|#K")), 1);
42           fl_set_object_lsize(obj, FL_NORMAL_SIZE);
43         obj = fl_add_button(FL_RETURN_BUTTON, 50, 140, 80, 30, _("OK"));
44           obj->u_vdata = index_form;
45           fl_set_object_callback(obj, index_cb, 1);
46         obj = fl_add_button(FL_NORMAL_BUTTON, 150, 140, 80, 30,
47                             idex(_("Cancel|^[")));
48           fl_set_object_shortcut(obj, scex(_("Cancel|^[")), 1);
49           obj->u_vdata = index_form;
50           fl_set_object_callback(obj, index_cb, 0);
51         fl_end_form();
52
53         return fdui;
54 }
55
56
57
58 /*---------------------------------------*/
59
60
61 InsetIndex::InsetIndex(string const & key)
62         : InsetCommand("index", key) 
63 {}
64
65
66 InsetIndex::~InsetIndex()
67 {
68         if(index_form && index_form->index_form
69            && index_form->index_form->visible
70            && index_form->index_form->u_vdata == &holder)
71                 fl_hide_form(index_form->index_form);
72 }
73
74
75 void InsetIndex::callback( FD_index_form * form, long data )
76 {
77         switch (data)
78         {
79         case 1: // OK
80                 if(!holder.view->buffer()->isReadonly())
81                 {
82                         string tmp = fl_get_input(form->key);
83                         if(tmp != getContents())
84                         {
85                                 setContents(tmp);
86                                 holder.view->updateInset( this, true );
87                         }
88                 } // fall through to Cancel
89         case 0:
90                 fl_hide_form(form->index_form);
91                 break;
92         }
93 }
94
95
96 void InsetIndex::Edit(BufferView * bv, int, int, unsigned int)
97 {
98         if(bv->buffer()->isReadonly())
99                 WarnReadonly(bv->buffer()->fileName());
100
101         if (!index_form) {
102                 index_form = create_form_index_form();
103                 fl_set_form_atclose(index_form->index_form,
104                                     CancelCloseBoxCB, 0);
105         }
106
107         holder.inset = this;
108         holder.view = bv;
109         
110         index_form->index_form->u_vdata =  &holder;
111         fl_set_input(index_form->key, getContents().c_str());
112         if (index_form->index_form->visible) {
113                 fl_raise_form(index_form->index_form);
114         } else {
115                 fl_show_form(index_form->index_form,
116                              FL_PLACE_MOUSE, FL_FULLBORDER,
117                              _("Index"));
118         }
119 }
120
121
122 string InsetIndex::getScreenLabel() const
123 {
124         return _("Idx");
125 }
126
127
128 //
129 // InsetPrintIndex
130 //
131
132 #if 0
133 InsetPrintIndex::InsetPrintIndex()
134         : InsetCommand("printindex")
135 {
136         owner = 0;
137 }
138 #endif
139
140
141 InsetPrintIndex::InsetPrintIndex(Buffer * o)
142         : InsetCommand("printindex"), owner(o)
143 {}
144
145
146 #if 0
147 InsetPrintIndex::~InsetPrintIndex()
148 {
149 }
150 #endif
151
152
153 string InsetPrintIndex::getScreenLabel() const
154 {
155         return _("PrintIndex");
156 }
157
158
159 void InsetPrintIndex::Validate(LaTeXFeatures & features) const
160 {
161         features.makeidx = true;
162 }
163
164
165 Inset::Code InsetPrintIndex::LyxCode() const
166 {
167         return Inset::INDEX_CODE;
168 }