]> git.lyx.org Git - lyx.git/blob - src/insets/insetindex.C
7e617a84afe045e815cf1999e59a93a29cc86029
[lyx.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" void index_cb(FL_OBJECT *, long data)
21 {
22         InsetIndex::Holder * holder =
23                 static_cast<InsetIndex::Holder*>
24                 (index_form->index_form->u_vdata);
25
26         holder->inset->callback( index_form, data );
27 }
28         
29
30 static
31 FD_index_form * create_form_index_form()
32 {
33         FL_OBJECT * obj;
34         FD_index_form *fdui = (FD_index_form *) fl_calloc(1, sizeof(FD_index_form));
35
36         fdui->index_form = fl_bgn_form(FL_NO_BOX, 258, 196);
37         obj = fl_add_box(FL_UP_BOX, 0, 0, 258, 196, "");
38         fdui->key = obj = fl_add_input(FL_NORMAL_INPUT, 93, 26, 130, 30,
39                                        idex(_("Keyword:|#K")));
40           fl_set_object_shortcut(obj, scex(_("Keyword:|#K")), 1);
41           fl_set_object_lsize(obj, FL_NORMAL_SIZE);
42         obj = fl_add_button(FL_RETURN_BUTTON, 50, 140, 80, 30, _("OK"));
43           obj->u_vdata = index_form;
44           fl_set_object_callback(obj, index_cb, 1);
45         obj = fl_add_button(FL_NORMAL_BUTTON, 150, 140, 80, 30,
46                             idex(_("Cancel|^[")));
47           fl_set_object_shortcut(obj, scex(_("Cancel|^[")), 1);
48           obj->u_vdata = index_form;
49           fl_set_object_callback(obj, index_cb, 0);
50         fl_end_form();
51
52         return fdui;
53 }
54
55
56
57 /*---------------------------------------*/
58
59
60 InsetIndex::InsetIndex(string const & key)
61         : InsetCommand("index", key) 
62 {
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, CancelCloseBoxCB, 0);
104         }
105
106         holder.inset = this;
107         holder.view = bv;
108         
109         index_form->index_form->u_vdata =  &holder;
110         fl_set_input(index_form->key, getContents().c_str());
111         if (index_form->index_form->visible) {
112                 fl_raise_form(index_form->index_form);
113         } else {
114                 fl_show_form(index_form->index_form,
115                              FL_PLACE_MOUSE, FL_FULLBORDER,
116                              _("Index"));
117         }
118 }
119
120
121 string InsetIndex::getScreenLabel() const
122 {
123         return _("Idx");
124 }
125
126
127 //
128 // InsetPrintIndex
129 //
130
131 InsetPrintIndex::InsetPrintIndex()
132         : InsetCommand("printindex")
133 {
134         owner = 0;
135 }
136
137
138 InsetPrintIndex::InsetPrintIndex(Buffer * o)
139         : InsetCommand("printindex"), owner(o)
140 {
141 }
142
143
144 InsetPrintIndex::~InsetPrintIndex()
145 {
146 }
147
148
149 string InsetPrintIndex::getScreenLabel() const
150 {
151         return _("PrintIndex");
152 }
153
154
155 void InsetPrintIndex::Validate(LaTeXFeatures & features) const
156 {
157         features.makeidx = true;
158 }
159
160
161 Inset::Code InsetPrintIndex::LyxCode() const
162 {
163         return Inset::INDEX_CODE;
164 }