]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/gnome/FormIndex.C
Clean-up of the button controller.
[lyx.git] / src / frontends / gnome / FormIndex.C
index f99b2a5af28a4ff4bbc61b061fd558682f3275d8..7e787bc015edde8b09558c40af956bd2f3f439ed 100644 (file)
@@ -1,4 +1,3 @@
-// -*- C++ -*-
 /* This file is part of
  * ====================================================== 
  *
 #include "LyXView.h"
 #include "buffer.h"
 #include "lyxfunc.h"
+#include "form_index.h"
 
-extern "C" {
-#include "diainsertindex_interface.h"
-#include "support.h"
-}
+#include <gtk--/label.h>
+#include <gtk--/box.h>
+#include <gtk--/buttonbox.h>
+#include <gnome--/entry.h>
+#include <gnome--/stock.h>
+#include <gtk--/separator.h>
 
-#include <gtk--/base.h>
+// temporary solution for LyXView
+#include "mainapp.h"
+extern GLyxAppWin * mainAppWin;
+
+namespace {
+
+// configuration keys
+string const CONF_ENTRY("FormIndex_entry");
+
+} // namespace anon
 
-#include "gettext.h"
-#include "Dialogs.h"
-#include "FormIndex.h"
-#include "LyXView.h"
-#include "buffer.h"
-#include "form_index.h"
-#include "lyxfunc.h"
 
 FormIndex::FormIndex(LyXView * lv, Dialogs * d)
-       : lv_(lv), d_(d), u_(0), h_(0), ih_(0), inset_(0), dialog_(NULL)
+       : lv_(lv), d_(d), inset_(0), u_(0), h_(0), ih_(0), dialog_(0)
 {
   // let the dialog be shown
   // These are permanent connections so we won't bother
@@ -56,10 +60,10 @@ FormIndex::~FormIndex()
 
 void FormIndex::showInset( InsetCommand * const inset )
 {
-  if( dialog_!=NULL || inset == 0 ) return;
+  if( dialog_!=0 || inset == 0 ) return;
   
   inset_ = inset;
-  ih_ = inset_->hide.connect(slot(this, &FormIndex::hide));
+  ih_ = inset_->hideDialog.connect(slot(this, &FormIndex::hide));
   
   params = inset->params();
   show();
@@ -67,7 +71,7 @@ void FormIndex::showInset( InsetCommand * const inset )
 
 void FormIndex::createInset( string const & arg )
 {
-  if( dialog_!=NULL ) return;
+  if( dialog_!=0 ) return;
   
   params.setFromString( arg );
   show();
@@ -77,57 +81,90 @@ void FormIndex::show()
 {
   if (!dialog_)
     {
-      GtkWidget * pd = create_DiaInsertIndex();
+      using namespace Gtk::Box_Helpers;
+      
+      Gtk::Label * label = manage( new Gtk::Label(_("Keyword")) );
+      Gtk::Box * mbox = manage( new Gtk::HBox() );
+      Gtk::ButtonBox * bbox = manage( new Gtk::HButtonBox() );
+      Gtk::Separator * sep = manage( new Gtk::VSeparator() );
 
-      dialog_ = Gtk::wrap(pd);
-      keyword_ = Gtk::wrap( GNOME_ENTRY( lookup_widget(pd, "keyword") ) );
+      keyword_ = manage( new Gnome::Entry() );
+      
+      b_ok = Gtk::wrap( GTK_BUTTON( gnome_stock_button(GNOME_STOCK_BUTTON_OK) ) );
+      b_cancel = Gtk::wrap( GTK_BUTTON( gnome_stock_button(GNOME_STOCK_BUTTON_CANCEL) ) );
+      
+      // set up spacing
+      mbox->set_spacing(2);
+      bbox->set_spacing(4);
+
+      keyword_->set_history_id(CONF_ENTRY);
+      keyword_->set_max_saved(10);
+      keyword_->load_history();
+      keyword_->set_use_arrows_always(true);
       
-      b_ok = Gtk::wrap( GTK_BUTTON( lookup_widget(pd, "button_ok") ) );
-      b_cancel = Gtk::wrap( GTK_BUTTON( lookup_widget(pd, "button_cancel") ) );
+      // packing
+      bbox->children().push_back(Element(*b_ok, false, false));
+      bbox->children().push_back(Element(*b_cancel, false, false));
 
+      mbox->children().push_back(Element(*label, false, false));
+      mbox->children().push_back(Element(*keyword_, true, true));
+      mbox->children().push_back(Element(*sep, false, false));
+      mbox->children().push_back(Element(*bbox, false, false));
+
+      // packing dialog to main window
+      dialog_ = mbox;
+      mainAppWin->add_action(*dialog_, _(" Index "));
+
+      // setting focus
+      GTK_WIDGET_SET_FLAGS (GTK_WIDGET(keyword_->get_entry()->gtkobj()), GTK_CAN_DEFAULT);
+      gtk_widget_grab_focus (GTK_WIDGET(keyword_->get_entry()->gtkobj()));
+      gtk_widget_grab_default (GTK_WIDGET(keyword_->get_entry()->gtkobj()));
+
+      // connecting signals
       b_ok->clicked.connect(slot(this, &FormIndex::apply));
-      b_ok->clicked.connect(dialog_->destroy.slot());
-      b_cancel->clicked.connect(dialog_->destroy.slot());
+      keyword_->get_entry()->activate.connect(slot(this, &FormIndex::apply));
+
+      b_cancel->clicked.connect(slot(mainAppWin, &GLyxAppWin::remove_action));
+
       dialog_->destroy.connect(slot(this, &FormIndex::free));
 
-      u_ = d_->updateBufferDependent.connect(slot(this, &FormIndex::update));
+      u_ = d_->updateBufferDependent.connect(slot(this, &FormIndex::updateSlot));
       h_ = d_->hideBufferDependent.connect(slot(this, &FormIndex::hide));
 
-      if (!dialog_->is_visible()) dialog_->show_all();
-
-      update();  // make sure its up-to-date
-    }
-  else
-    {
-      Gdk_Window dialog_win(dialog_->get_window());
-      dialog_win.raise();
+      updateSlot();  // make sure its up-to-date
     }
 }
-      
-void FormIndex::update()
+
+void FormIndex::updateSlot(bool switched)
 {
-  if (dialog_ != NULL &&
+  if (switched)
+    {
+      hide();
+      return;
+    }
+  
+  if (dialog_ != 0 &&
       lv_->view()->available())
     {
       keyword_->get_entry()->set_text(params.getContents().c_str());
-  
+      
       bool sens = (!(lv_->buffer()->isReadonly()));
-
+      
       keyword_->set_sensitive(sens);
       b_ok->set_sensitive(sens);
     }
 }
-
+      
 void FormIndex::hide()
 {
-  if (dialog_!=NULL) dialog_->destroy();
+  if (dialog_!=0) mainAppWin->remove_action();
 }
 
 void FormIndex::free()
 {
-  if (dialog_!=NULL)
+  if (dialog_!=0)
     {
-      dialog_ = NULL;
+      dialog_ = 0;
       u_.disconnect();
       h_.disconnect();
       inset_ = 0;
@@ -153,6 +190,13 @@ void FormIndex::apply()
   else
     {
       lv_->getLyXFunc()->Dispatch( LFUN_INDEX_INSERT,
-                                  params.getAsString().c_str() );
+                                  params.getAsString() );
     }
+
+  // save history
+  keyword_->save_history();
+
+  // hide the dialog
+  hide();
 }
+