#pragma implementation "math_panel.h"
#endif
+#include <algorithm>
+using std::max;
+
#include "lyx_main.h"
#include "buffer.h"
#include "BufferView.h"
#include "minibuffer.h"
#include "lyxrc.h"
-#include "lyxlib.h"
#include "LyXView.h"
-#include "error.h"
+#include "support/lstrings.h"
+#include "debug.h"
#include "formula.h"
#include "math_panel.h"
#include "math_parser.h"
-// $Id: math_symbols.C,v 1.1 1999/09/27 18:44:40 larsbj Exp $
-
-#if !defined(lint) && !defined(WITH_WARNINGS)
-static char vcid[] = "$Id: math_symbols.C,v 1.1 1999/09/27 18:44:40 larsbj Exp $";
-#endif /* lint */
-
-extern void SmallUpdate(signed char);
extern void BeforeChange();
extern void Update(signed char);
-extern int UnlockInset(UpdatableInset*);
+extern int UnlockInset(UpdatableInset *);
extern short greek_kb_flag;
-extern MiniBuffer *minibuffer;
-extern BufferView *current_view;
+extern BufferView * current_view;
/* Bitmaps */
#include "greek.xbm"
#include "dots.xbm"
/* Latex code for those bitmaps */
-static char const *latex_greek[] = {
+static char const * latex_greek[] = {
"Gamma", "Delta", "Theta", "Lambda", "Xi", "Pi",
"Sigma", "Upsilon", "Phi", "Psi", "Omega",
"alpha", "beta", "gamma", "delta", "epsilon", "varepsilon", "zeta",
"tau", "upsilon", "phi", "varphi", "chi", "psi", "omega", ""
};
-static char const *latex_brel[] = {
+static char const * latex_brel[] = {
"leq", "geq", "equiv", "models",
"prec", "succ", "sim", "perp",
"preceq", "succeq", "simeq", "mid",
"vdash", "dashv", "bowtie", ""
};
-static char const* latex_arrow[] = {
+static char const * latex_arrow[] = {
"downarrow", "leftarrow", "Downarrow", "Leftarrow",
"hookleftarrow", "rightarrow", "uparrow", "Rightarrow", "Uparrow",
- "hookrightarrow","updownarrow", "Leftrightarrow", "leftharpoonup",
+ "hookrightarrow", "updownarrow", "Leftrightarrow", "leftharpoonup",
"rightharpoonup", "rightleftharpoons", "leftrightarrow", "Updownarrow",
"leftharpoondown", "rightharpoondown", "mapsto",
"Longleftarrow", "Longrightarrow", "Longleftrightarrow",
"nwarrow", "nearrow", "swarrow", "searrow", "",
};
-char const* latex_varsz[] = {
+char const * latex_varsz[] = {
"sum", "int", "oint",
"prod", "coprod", "bigsqcup",
"bigotimes", "bigodot", "bigoplus",
"bigvee", "bigwedge", ""
};
-static char const* latex_bop[] = {
+static char const * latex_bop[] = {
"pm", "cap", "diamond", "oplus",
"mp", "cup", "bigtriangleup", "ominus",
"times", "uplus", "bigtriangledown", "otimes",
"bullet", "wr", "ddagger", ""
};
-static char const* latex_misc[] = {
+static char const * latex_misc[] = {
"nabla", "partial", "infty", "prime", "ell",
"emptyset", "exists", "forall", "imath", "jmath",
"Re", "Im", "aleph", "wp", "hbar",
"diamondsuit", "heartsuit", "clubsuit", "spadesuit", ""
};
-static char const* latex_dots[] = {
+static char const * latex_dots[] = {
"ldots", "cdots", "vdots", "ddots"
};
5, 2, -1, 6, -1, 7, -1, 10, 4, 9, -1
};
-extern char** mathed_get_pixmap_from_icon(int d);
-static void math_cb(FL_OBJECT*, long);
-static char** pixmapFromBitmapData(char const *, int, int);
-void math_insert_symbol(char const* s);
+extern char const ** mathed_get_pixmap_from_icon(int d);
+extern "C" void math_cb(FL_OBJECT*, long);
+static char const ** pixmapFromBitmapData(char const *, int, int);
+void math_insert_symbol(char const * s);
Bool math_insert_greek(char const c);
-BitmapMenu *BitmapMenu::active = NULL;
+BitmapMenu * BitmapMenu::active = 0;
-BitmapMenu::BitmapMenu(int n, FL_OBJECT* bt, BitmapMenu* prevx): nb(n) {
+BitmapMenu::BitmapMenu(int n, FL_OBJECT * bt, BitmapMenu * prevx): nb(n)
+{
w = h = 0;
form = 0;
i = 0;
- ww = 2*FL_abs(FL_BOUND_WIDTH);
+ ww = 2 * FL_abs(FL_BOUND_WIDTH);
x = y = ww;
y += 8;
bitmap = new FL_OBJECTP[nb];
button = bt;
button->u_vdata = this;
prev = prevx;
- next = NULL;
+ next = 0;
if (prev)
prev->next = this;
}
-BitmapMenu::~BitmapMenu() {
+
+BitmapMenu::~BitmapMenu()
+{
if (next) delete next;
if (form->visible) Hide();
fl_free_form(form);
delete[] bitmap;
}
-void BitmapMenu::Hide() {
+
+void BitmapMenu::Hide()
+{
fl_hide_form(form);
fl_set_button(button, 0);
- active = NULL;
+ active = 0;
}
-void BitmapMenu::Show() {
+
+void BitmapMenu::Show()
+{
if (active)
active->Hide();
active = this;
fl_show_form(form, FL_PLACE_MOUSE, FL_NOBORDER, "");
}
-FL_OBJECT*
-BitmapMenu::AddBitmap(int id, int nx, int ny, int bw, int bh, char* data, Bool vert)
+FL_OBJECT *
+BitmapMenu::AddBitmap(int id, int nx, int ny, int bw, int bh, unsigned char const * data, Bool vert)
{
- if (i>=nb)
- return NULL;
- int wx=bw+ww/2, wy=bh+ww/2;
+ if (i >= nb)
+ return 0;
+ int wx = bw+ww/2, wy = bh+ww/2;
wx += (wx % nx);
wy += (wy % ny);
- FL_OBJECT *obj = fl_create_bmtable(1, x, y, wx, wy, "");
+ FL_OBJECT * obj = fl_create_bmtable(1, x, y, wx, wy, "");
fl_set_object_callback(obj, math_cb, id);
fl_set_object_lcol(obj, FL_BLUE);
fl_set_object_boxtype(obj, FL_UP_BOX);
fl_set_bmtable_data(obj, nx, ny, bw, bh, data);
if (vert) {
y += wy + 8;
- h = Maximum(y, h);
- w = Maximum(x + wx + ww, w);
+ h = max(y, h);
+ w = max(x + wx + ww, w);
} else {
x += wx + 8;
- w = Maximum(x, w);
- h = Maximum(y + wy + ww, h);
+ w = max(x, w);
+ h = max(y + wy + ww, h);
}
bitmap[i++] = obj;
return obj;
void BitmapMenu::Create()
{
if (i<nb) {
- fprintf(stderr, "Error: Bitmaps not created!");
+ lyxerr << "Error: Bitmaps not created!" << endl;
return;
}
form = fl_bgn_form(FL_UP_BOX, w, h);
- for (i=0; i<nb; i++) {
+ for (i= 0; i<nb; i++) {
fl_add_object(form, bitmap[i]);
bitmap[i]->u_vdata = this;
}
fl_end_form();
- fl_register_raw_callback(form, KeyPressMask, peek_event);
+ fl_register_raw_callback(form, KeyPressMask, C_peek_event);
}
int BitmapMenu::GetIndex(FL_OBJECT* ob)
{
- if (active==this) {
+ if (active == this) {
int k = 0;
- for (i=0; i<nb; i++) {
- if (bitmap[i]==ob)
+ for (i= 0; i<nb; i++) {
+ if (bitmap[i] == ob)
return k+fl_get_bmtable(ob);
k += fl_get_bmtable_maxitems(bitmap[i]);
}
int peek_event(FL_FORM * /*form*/, void *xev)
{
- if (BitmapMenu::active==NULL)
+ if (BitmapMenu::active == 0)
return 0;
- if(((XEvent *)xev)->type == ButtonPress)
+ if(static_cast<XEvent *>(xev)->type == ButtonPress)
{
BitmapMenu::active->Hide();
return 1;
}
- if(((XEvent *)xev)->type == KeyPress)
+ if(static_cast<XEvent *>(xev)->type == KeyPress)
{
char c[5];
KeySym keysym;
- XLookupString(&((XEvent *)xev)->xkey, &c[0], 5, &keysym, NULL);
- if (keysym==XK_Left)
+ XLookupString(&static_cast<XEvent *>(xev)->xkey, &c[0], 5, &keysym, 0);
+ if (keysym == XK_Left)
BitmapMenu::active->Prev(); else
- if (keysym==XK_Right)
+ if (keysym == XK_Right)
BitmapMenu::active->Next();
else
BitmapMenu::active->Hide();
return 0;
}
-static void math_cb(FL_OBJECT* ob, long data)
+// This is just a wrapper.
+extern "C" int C_peek_event(FL_FORM *form, void *ptr) {
+ return peek_event(form, ptr);
+}
+
+
+extern "C" void math_cb(FL_OBJECT* ob, long data)
{
BitmapMenu* menu = (BitmapMenu*)ob->u_vdata;
int i = menu->GetIndex(ob);
char const *s = 0;
-// fprintf(stderr, "data[%d]", data);
+// lyxerr << "data[" << data << "]";
if (i<0) return;
switch (data) {
case MM_GREEK:
s = latex_misc[i];
break;
case MM_DOTS:
-// fprintf(stderr, "dots[%s %d]", latex_dots[i], i);
+// lyxerr << "dots[" << latex_dots[i] << " " << i << "]";
s = latex_dots[i-29];
break;
}
if (s) {
if (current_view->available() && lyxrc->display_shortcuts) {
- minibuffer->Set("Inserting symbol ", s);
+ current_view->owner()->getMiniBuffer()->Set("Inserting symbol ", s);
}
- current_view->getOwner()->getLyXFunc()->Dispatch(LFUN_INSERT_MATH, s);
+ current_view->owner()->getLyXFunc()->Dispatch(LFUN_INSERT_MATH, s);
}
if (menu)
menu->Hide();
}
-char** get_pixmap_from_symbol(char const *arg, int wx, int hx)
+char const ** get_pixmap_from_symbol(char const * arg, int wx, int hx)
{
- char** data=NULL;
- latexkeys *l = in_word_set (arg, strlen(arg));
+ char const ** data = 0;
+ latexkeys * l = in_word_set (arg, strlen(arg));
if (!l)
- return NULL;
+ return 0;
switch (l->token) {
case LM_TK_FRAC:
Bool math_insert_greek(char const c)
{
int i;
- char const *s=NULL;
+ char const * s= 0;
- if ('A'<=c && c<='Z') {
- if ((i=Latin2Greek[c - 'A'])>=0)
+ if ('A' <= c && c <= 'Z') {
+ if ((i = Latin2Greek[c - 'A']) >= 0)
s = latex_greek[i];
}
- if ('a'<=c && c<='z') {
- if ((i=latin2greek[c - 'a'])>=0)
+ if ('a'<= c && c<= 'z') {
+ if ((i= latin2greek[c - 'a'])>= 0)
s = latex_greek[i+11];
}
if (s) {
math_insert_symbol(s);
if (greek_kb_flag<2) {
greek_kb_flag = 0;
- UnlockInset(current_view->currentBuffer()->the_locking_inset);
+ UnlockInset(current_view->buffer()->the_locking_inset);
}
return True;
} else
void math_insert_symbol(char const* s)
{
if (current_view->available()) {
- if (!current_view->currentBuffer()->the_locking_inset) {
- InsetFormula* new_inset = new InsetFormula();
+ if (!current_view->buffer()->the_locking_inset) {
+ InsetFormula * new_inset = new InsetFormula();
BeforeChange();
- current_view->currentBuffer()->insertInset(new_inset);
+ current_view->buffer()->insertInset(new_inset);
// Update(1);//BUG
- new_inset->Edit(0,0);
+ new_inset->Edit(0, 0);
new_inset->InsertSymbol(s);
} else
- if (current_view->currentBuffer()->the_locking_inset->LyxCode()==Inset::MATH_CODE)
- ((InsetFormula*)current_view->currentBuffer()->the_locking_inset)->InsertSymbol(s);
+ if (current_view->buffer()->the_locking_inset->LyxCode() == Inset::MATH_CODE)
+ static_cast<InsetFormula*>(current_view->buffer()->the_locking_inset)->InsertSymbol(s);
else
- fprintf(stderr, "Math error: attempt to write on a wrong class of inset.\n");
+ lyxerr << "Math error: attempt to write on a wrong "
+ "class of inset." << endl;
}
}
-BitmapMenu* sym_menu=0;
+BitmapMenu * sym_menu= 0;
-void create_symbol_menues(FD_panel *symb_form)
+void create_symbol_menues(FD_panel * symb_form)
{
- FL_OBJECT* obj;
- BitmapMenu* menu;
+ FL_OBJECT * obj;
+ BitmapMenu * menu;
sym_menu = menu = new BitmapMenu(2, symb_form->greek);
obj = menu->AddBitmap(MM_GREEK, 6, 2, Greek_width, Greek_height,
}
static
-char** pixmapFromBitmapData(char const *s, int wx, int hx)
+char const ** pixmapFromBitmapData(char const * s, int wx, int hx)
{
- int i, id;
- char** data=0;
+ int i;
+ char const ** data = 0;
- id=-1;
+ int id = -1;
- for (i=0; i<6; i++) {
- char const **latex_str = 0;
+ for (i = 0; i < 6; ++i) {
+ char const ** latex_str = 0;
switch (i) {
case 0: latex_str = latex_greek; break;
case 1: latex_str = latex_bop; break;
}
for (int k = 0; latex_str[k][0]>' '; k++) {
- if (strcmp(latex_str[k], s)==0) {
+ if (strcmp(latex_str[k], s) == 0) {
id = k;
break;
}
}
- if (id>=0) break;
+ if (id >= 0) break;
}
- if (i<6 && id>=0) {
- char *bdata = 0;
+ if (i < 6 && id >= 0) {
+ unsigned char const * bdata = 0;
int w = 0, h = 0, dw = 0, dh = 0;
- lyxerr.debug(LString("Imando ") + int(i) + ", " + int(id), Error::MATHED);
+ lyxerr[Debug::MATHED] << "Imando " << i << ", " << id << endl;
switch (i) {
case 0:
- if (id<=10) {
+ if (id<= 10) {
w = Greek_width;
h = Greek_height;
bdata = Greek_bits;
}
int ww = w/dw, hh = h/dh, x, y;
- XImage *xima = XCreateImage(fl_display, NULL, 1, XYBitmap, 0,
- bdata, w, h, 8, 0);
+ XImage * xima = XCreateImage(fl_display, 0, 1, XYBitmap, 0,
+ const_cast<char*>(reinterpret_cast<char const *>(bdata)), w, h, 8, 0);
xima->byte_order = LSBFirst;
xima->bitmap_bit_order = LSBFirst;
x = (id % dw)*ww;
y = (id/dw)*hh;
- if (ww>wx) ww = wx;
- if (hh>hx) hh = hx;
- XImage *sbima = XSubImage(xima, x, y, ww, hh);
- XpmCreateDataFromImage(fl_display, &data, sbima, sbima, 0);
+ if (ww > wx) ww = wx;
+ if (hh > hx) hh = hx;
+ XImage * sbima = XSubImage(xima, x, y, ww, hh);
+ XpmCreateDataFromImage(fl_display, const_cast<char***>(&data), sbima, sbima, 0);
// Dirty hack to get blue symbols quickly
- char *sx = strstr(data[2], "FFFFFFFF");
+ char * sx = strstr(data[2], "FFFFFFFF");
if (sx) {
- for (int k=0; k<8; k++) sx[k] = '0';
+ for (int k = 0; k < 8; ++k) sx[k] = '0';
}
// XDestroyImage(xima);