]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/xforms/FormMathsBitmap.C
Yet more dialog tweaking from Rob.
[lyx.git] / src / frontends / xforms / FormMathsBitmap.C
index c08da574b288c7fc25b355ef7bcceaee39f4003b..518650e739c3ff8b4f9053ebf18a310d73d2a14a 100644 (file)
@@ -1,33 +1,33 @@
 /**
  * \file FormMathsBitmap.C
- * Copyright 2001 the LyX Team
- * Read the file COPYING
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
  *
  * \author Alejandro Aguilar Sierra
- * \author John Levon, moz@compsoc.man.ac.uk
- * \author Angus Leeming, a.leeming@ic.ac.uk
+ * \author John Levon
+ * \author Angus Leeming 
+ *
+ * Full author contact details are available in file CREDITS
  */
 
 #include <config.h>
-#include <algorithm>
-#include <iomanip>
-#include XPM_H_LOCATION
 
 #ifdef __GNUG__
 #pragma implementation
 #endif
 
 #include "FormMathsBitmap.h"
-
-#include "Dialogs.h"
-#include "LyXView.h"
 #include "bmtable.h"
 #include "debug.h"
-#include "lyx_gui_misc.h" // scex, idex
+#include "forms_gettext.h"
 #include "gettext.h"
 #include "support/LAssert.h"
 
+#include XPM_H_LOCATION
+
+#include <algorithm>
+#include <iomanip>
+
 using std::vector;
 using std::endl;
 using std::setw;
@@ -36,10 +36,10 @@ using std::max;
 extern  "C" void C_FormBaseDeprecatedCancelCB(FL_OBJECT *, long);
 extern  "C" void C_FormBaseDeprecatedInputCB(FL_OBJECT *, long);
 
-FormMathsBitmap::FormMathsBitmap(LyXView * lv, Dialogs * d,   
-                                FormMathsPanel const & p,
+FormMathsBitmap::FormMathsBitmap(LyXView & lv, Dialogs & d,
+                                FormMathsPanel const & p, string const & t,
                                 vector<string> const & l)
-       : FormMathsSub(lv, d, p, _("Maths Bitmaps")),
+       : FormMathsSub(lv, d, p, t, false),
          latex_(l), ww_(0), x_(0), y_(0), w_(0), h_(0)
 {
        ww_ = 2 * FL_abs(FL_BOUND_WIDTH);
@@ -48,9 +48,19 @@ FormMathsBitmap::FormMathsBitmap(LyXView * lv, Dialogs * d,
 }
 
 
+FormMathsBitmap::~FormMathsBitmap()
+{
+       if (!form())
+               return;
+
+       if (form()->visible) fl_hide_form(form());
+       fl_free_form(form());
+}
+
+
 FL_FORM * FormMathsBitmap::form() const
 {
-       return form_;
+       return form_.get();
 }
 
 
@@ -60,48 +70,56 @@ void FormMathsBitmap::build()
 
        h_+= 50; // Allow room for a Close button
 
-       form_ = fl_bgn_form(FL_UP_BOX, w_, h_);
+       form_.reset(fl_bgn_form(FL_UP_BOX, w_, h_), fl_free_form);
        form_->u_vdata = this;
 
-       FL_OBJECT * obj = fl_add_box(FL_UP_BOX, 0, 0, w_, h_, "");
+       fl_add_box(FL_UP_BOX, 0, 0, w_, h_, "");
 
        y_ = 0;
        for (vector<bm_ptr>::const_iterator it = bitmaps_.begin();
             it < bitmaps_.end(); ++it) {
                FL_OBJECT * obj = it->get();
 
-               fl_add_object(form_, obj);
+               fl_add_object(form_.get(), obj);
                bc().addReadOnly(obj);
 
                y_ = max(y_, obj->y + obj->h);
        }
-       char const * const label = N_("Close|^[");
 
+       char const * const label = _("Close|^[");
        x_ = (form_->w - 90) / 2;
        y_ += 10;
-               
-       FL_OBJECT * button_cancel = obj = 
-               fl_add_button(FL_NORMAL_BUTTON, x_, y_, 90, 30, idex(_(label)));
-       fl_set_button_shortcut(obj, scex(_(label)), 1);
 
-       fl_set_object_lsize(obj, FL_NORMAL_SIZE);
-       fl_set_object_callback(obj, C_FormBaseDeprecatedCancelCB, 0);
+       FL_OBJECT * button_close =
+               fl_add_button(FL_NORMAL_BUTTON, x_, y_, 90, 30, idex(_(label)));
+       fl_set_button_shortcut(button_close, scex(_(label)), 1);
+       fl_set_object_lsize(button_close, FL_NORMAL_SIZE);
+       fl_set_object_callback(button_close, C_FormBaseDeprecatedCancelCB, 0);
 
        fl_end_form();
 
-       bc().setCancel(button_cancel);
+       bc().setCancel(button_close);
 }
 
 
 void FormMathsBitmap::addBitmap(int nt, int nx, int ny, int bw, int bh,
                                unsigned char const * data, bool vert)
 {
+       // Add a bitmap to a button panel: one bitmap per panel.
+       // nt is the number of buttons and nx, ny the nr. of buttons
+       // in x and y direction.
+       // bw, bh and data are the bitmap dimensions width, height and
+       // bit pattern; these come directly from an .xbm file included
+       // as source.
+       // vert indicates whether the next button panel within this
+       // window will be below (true, default) or next to this one.
+       //
+       // The scaling of the bitmap on top of the buttons will be
+       // correct if the nx, ny values are given correctly.
        int wx = bw + ww_ / 2;
        int wy = bh + ww_ / 2;
        wx += (wx % nx);
        wy += (wy % ny);
-
        FL_OBJECT * obj = fl_create_bmtable(1, x_, y_, wx, wy, "");
        fl_set_object_lcol(obj, FL_BLUE);
        fl_set_object_boxtype(obj, FL_UP_BOX);
@@ -119,7 +137,7 @@ void FormMathsBitmap::addBitmap(int nt, int nx, int ny, int bw, int bh,
                h_ = max(y_ + wy + ww_, h_);
        }
 
-       bitmaps_.push_back(bm_ptr(obj));
+       bitmaps_.push_back(bm_ptr(obj, fl_free_object));
 }
 
 
@@ -139,7 +157,13 @@ int FormMathsBitmap::GetIndex(FL_OBJECT * ob)
 
 void FormMathsBitmap::apply()
 {
-       parent_.insertSymbol(latex_chosen_);
+       string::size_type const i = latex_chosen_.find(' ');
+       if (i != string::npos) {
+               parent_.dispatchFunc(LFUN_MATH_MODE);
+               parent_.insertSymbol(latex_chosen_.substr(0,i));
+               parent_.insertSymbol(latex_chosen_.substr(i + 1), false);
+       } else
+               parent_.insertSymbol(latex_chosen_);
 }
 
 
@@ -147,7 +171,7 @@ bool FormMathsBitmap::input(FL_OBJECT * ob, long)
 {
        int const i = GetIndex(ob);
 
-       if (i < 0) 
+       if (i < 0)
                return false;
 
        latex_chosen_ = latex_[i];