]> git.lyx.org Git - features.git/blobdiff - src/insets/insetindex.C
read the Changelog
[features.git] / src / insets / insetindex.C
index 03e844d5d5021a270962d923aea1780bfa19b1aa..c009b38848e6c891fa41c3989606f3e39823f7a6 100644 (file)
 #include "LString.h"
 #include "lyx_gui_misc.h" // WarnReadonly
  
-extern BufferView * current_view;
-
 FD_index_form * index_form = 0;
 
-extern "C" void index_cb(FL_OBJECT *, long data)
+extern "C"
+void index_cb(FL_OBJECT *, long data)
 {
-       InsetIndex * inset = static_cast<InsetIndex*>(index_form->index_form->u_vdata);
-       
-       switch (data) {
-       case 1: // OK
-               if(!current_view->buffer()->isReadonly()) {
-                       string tmp = fl_get_input(index_form->key);
-                       if(tmp != inset->getContents()) {
-                               inset->setContents(tmp);
-                               fl_hide_form(index_form->index_form);
-                               current_view->updateInset(inset, true);
-                               break;
-                       }
-               } // fall through to Cancel on RO
-       case 0: // Cancel
-               fl_hide_form(index_form->index_form); break;
-       }
-}
+       InsetIndex::Holder * holder =
+               static_cast<InsetIndex::Holder*>
+               (index_form->index_form->u_vdata);
 
+       holder->inset->callback( index_form, data );
+}
+       
 
 static
 FD_index_form * create_form_index_form()
@@ -72,28 +60,54 @@ FD_index_form * create_form_index_form()
 
 InsetIndex::InsetIndex(string const & key)
        : InsetCommand("index", key) 
-{
-}
+{}
 
 
 InsetIndex::~InsetIndex()
 {
        if(index_form && index_form->index_form
           && index_form->index_form->visible
-          && index_form->index_form->u_vdata == this)
+          && index_form->index_form->u_vdata == &holder)
                fl_hide_form(index_form->index_form);
 }
 
 
+void InsetIndex::callback( FD_index_form * form, long data )
+{
+       switch (data)
+       {
+       case 1: // OK
+               if(!holder.view->buffer()->isReadonly())
+               {
+                       string tmp = fl_get_input(form->key);
+                       if(tmp != getContents())
+                       {
+                               setContents(tmp);
+                               holder.view->updateInset( this, true );
+                       }
+               } // fall through to Cancel
+       case 0:
+               fl_hide_form(form->index_form);
+               break;
+       }
+}
+
+
 void InsetIndex::Edit(BufferView * bv, int, int, unsigned int)
 {
        if(bv->buffer()->isReadonly())
                WarnReadonly(bv->buffer()->fileName());
 
-       if (!index_form)
+       if (!index_form) {
                index_form = create_form_index_form();
+               fl_set_form_atclose(index_form->index_form,
+                                   CancelCloseBoxCB, 0);
+       }
+
+       holder.inset = this;
+       holder.view = bv;
        
-       index_form->index_form->u_vdata = this;
+       index_form->index_form->u_vdata =  &holder;
        fl_set_input(index_form->key, getContents().c_str());
        if (index_form->index_form->visible) {
                fl_raise_form(index_form->index_form);
@@ -115,22 +129,25 @@ string InsetIndex::getScreenLabel() const
 // InsetPrintIndex
 //
 
+#if 0
 InsetPrintIndex::InsetPrintIndex()
        : InsetCommand("printindex")
 {
        owner = 0;
 }
+#endif
 
 
 InsetPrintIndex::InsetPrintIndex(Buffer * o)
        : InsetCommand("printindex"), owner(o)
-{
-}
+{}
 
 
+#if 0
 InsetPrintIndex::~InsetPrintIndex()
 {
 }
+#endif
 
 
 string InsetPrintIndex::getScreenLabel() const