* LyX, The Document Processor
*
* Copyright 1995 Matthias Ettrich
- * Copyright 1995-1999 The LyX Team.
+ * Copyright 1995-2000 The LyX Team.
*
* This file is Copyright 1996-1998
* Lars Gullik Bjønnes
#include "lyxlex.h"
#include "debug.h"
#include "combox.h"
-#include "lyx_cb.h"
#include "LyXView.h"
#include "LyXAction.h"
#include "support/lstrings.h"
+#include "lyxrc.h"
#ifdef TWO_COLOR_ICONS
#include "cut_bw.xpm"
#include "layout_std.xpm"
#include "build.xpm"
+using std::endl;
+
// this one is not "C" because combox callbacks are really C++ %-|
extern void LayoutsCB(int, void *);
extern char const ** get_pixmap_from_symbol(char const * arg, int, int);
extern LyXAction lyxaction;
-enum _tooltags {
- TO_ADD = 1,
- TO_ENDTOOLBAR,
- TO_SEPARATOR,
- TO_LAYOUTS,
- TO_NEWLINE,
- TO_LAST
-};
-
-
-struct keyword_item toolTags[TO_LAST - 1] = {
- { "\\add", TO_ADD },
- { "\\end_toolbar", TO_ENDTOOLBAR },
- { "\\layouts", TO_LAYOUTS },
- { "\\newline", TO_NEWLINE },
- { "\\separator", TO_SEPARATOR }
-};
-
-
-Toolbar::Toolbar(Toolbar const &rct, LyXView *o, int x, int y)
+Toolbar::Toolbar(LyXView * o, int x, int y)
: owner(o), sxpos(x), sypos(y)
{
combox = 0;
+#if FL_REVISION < 89
bubble_timer = 0;
+#endif
reset();
- // extracts the toolbar struct form rct.
- toolbarItem * tmplist = rct.toollist;
- while (tmplist != 0) {
- add(tmplist->action);
+ // extracts the default toolbar actions from LyXRC
+ for (ToolbarDefaults::const_iterator cit =
+ lyxrc.toolbardefaults.begin();
+ cit != lyxrc.toolbardefaults.end(); ++cit) {
+ add((*cit));
lyxerr[Debug::TOOLBAR] << "tool action: "
- << tmplist->action << endl;
- tmplist= tmplist->next;
+ << (*cit) << endl;
}
}
+#if FL_REVISION < 89
// timer-cb for bubble-help (Matthias)
void Toolbar::BubbleTimerCB(FL_OBJECT *, long data)
{
{
return Toolbar::BubblePost(ob, event, 0, 0, key, xev);
}
+#endif
void Toolbar::activate()
void Toolbar::ToolbarCB(FL_OBJECT * ob, long ac)
{
+#if FL_REVISION >= 89
+ Toolbar * t = static_cast<Toolbar*>(ob->u_vdata);
+#else
Toolbar * t = reinterpret_cast<Toolbar*>(ob->u_ldata);
+#endif
string res = t->owner->getLyXFunc()->Dispatch(int(ac));
if(!res.empty())
}
-void Toolbar::init()
-{
- add(TOOL_LAYOUTS);
- add(LFUN_MENUOPEN);
- //add(LFUN_CLOSEBUFFER);
- add(LFUN_MENUWRITE);
- add(LFUN_MENUPRINT);
- add(TOOL_SEPARATOR);
-
- add(LFUN_CUT);
- add(LFUN_COPY);
- add(LFUN_PASTE);
- add(TOOL_SEPARATOR);
-
- add(LFUN_EMPH);
- add(LFUN_NOUN);
- add(LFUN_FREE);
- add(TOOL_SEPARATOR);
-
- add(LFUN_FOOTMELT);
- add(LFUN_MARGINMELT);
- add(LFUN_DEPTH);
- add(TOOL_SEPARATOR);
-
- add(LFUN_TEX);
- add(LFUN_MATH_MODE);
- add(TOOL_SEPARATOR);
-
- add(LFUN_FIGURE);
- add(LFUN_TABLE);
- //add(LFUN_MELT);
-}
-
-
void Toolbar::set(bool doingmain)
{
// we shouldn't set if we have not cleaned
fl_addto_form(owner->getForm());
}
-#if FL_REVISION < 86
- // Ensure borderwidth is 2 to get visual feedback
- int bw = fl_get_border_width();
- fl_set_border_width(-2);
-#endif
-
+#if FL_REVISION < 89
// add the time if it don't exist
if (bubble_timer == 0)
bubble_timer = fl_add_timer(FL_HIDDEN_TIMER,
xpos, ypos, 0, 0, "Timer");
+#endif
while(item != 0) {
switch(item->action){
xpos += standardspacing;
if (!combox)
combox = new Combox(FL_COMBOX_DROPLIST);
- combox->add(xpos, ypos, 135, height, 300);
+ combox->add(xpos, ypos, 135, height, 400);
combox->setcallback(LayoutsCB);
combox->resize(FL_RESIZE_ALL);
combox->gravity(NorthWestGravity, NorthWestGravity);
NorthWestGravity);
fl_set_object_callback(obj, C_Toolbar_ToolbarCB,
static_cast<long>(item->action));
-#if FL_REVISION >85
// Remove the blue feedback rectangle
fl_set_pixmapbutton_focus_outline(obj, 0);
-#endif
// set the bubble-help (Matthias)
+#if FL_REVISION >= 89
+ // Set the tooltip
+ fl_set_object_helper(obj, item->help.c_str());
+ // The toolbar that this object belongs too.
+ obj->u_vdata = this;
+
+
+#else
#ifdef WITH_WARNINGS
#warning This is dangerous!
#endif
obj->u_ldata = reinterpret_cast<long>(this);
fl_set_object_posthandler(obj, C_Toolbar_BubblePost);
+#endif
fl_set_pixmapbutton_data(obj, const_cast<char**>(item->pixmap));
item = item->next;
break;
}
}
-#if FL_REVISION < 86
- // Reset borderwidth to its default value.
- fl_set_border_width(bw);
-#endif
+
if (!doingmain) {
fl_end_form();
fl_unfreeze_form(owner->getForm());
// adds an item to the list
if (pixmap != 0
|| action == TOOL_SEPARATOR
- || action == TOOL_LAYOUTS)
- {
- newItem = new toolbarItem;
- newItem->action = action;
- newItem->pixmap = pixmap;
- newItem->help = help;
- // the new item is placed at the end of the list
- tmp = toollist;
- if (tmp != 0){
- while(tmp->next != 0)
- tmp = tmp->next;
+ || action == TOOL_LAYOUTS) {
+ newItem = new toolbarItem;
+ newItem->action = action;
+ newItem->pixmap = pixmap;
+ newItem->help = help;
+ // the new item is placed at the end of the list
+ tmp = toollist;
+ if (tmp != 0){
+ while(tmp->next != 0)
+ tmp = tmp->next;
// here is tmp->next == 0
- tmp->next = newItem;
- } else
- toollist = newItem;
- }
- //if (action == TOOL_LAYOUTS) {
- // combox = new Combox(FL_COMBOX_DROPLIST);
- //}
-}
-
-
-void Toolbar::add(string const & func, bool doclean)
-{
- int tf = lyxaction.LookupFunc(func.c_str());
-
- if (tf == -1){
- lyxerr << "Toolbar::add: no LyX command called`"
- << func << "'exists!" << endl;
- } else {
- add(tf, doclean);
+ tmp->next = newItem;
+ } else
+ toollist = newItem;
}
}
}
-void Toolbar::read(LyXLex & lex)
+void Toolbar::add(string const & func, bool doclean)
{
- //consistency check
- if (lex.GetString() != "\\begin_toolbar")
- lyxerr << "Toolbar::read: ERROR wrong token:`"
- << lex.GetString() << '\'' << endl;
-
- clean();
- string func;
- bool quit = false;
-
- lex.pushTable(toolTags, TO_LAST - 1);
+ int tf = lyxaction.LookupFunc(func);
- if (lyxerr.debugging(Debug::PARSER))
- lex.printTable();
-
- while (lex.IsOK() && !quit) {
-
- lyxerr[Debug::TOOLBAR] << "Toolbar::read: current lex text: `"
- << lex.GetString() << '\'' << endl;
-
- switch(lex.lex()) {
- case TO_ADD:
- if (lex.EatLine()) {
- func = lex.GetString();
- lyxerr[Debug::TOOLBAR]
- << "Toolbar::read TO_ADD func: `"
- << func << "'" << endl;
- add(func);
- }
- break;
-
- case TO_SEPARATOR:
- add(TOOL_SEPARATOR);
- break;
-
- case TO_LAYOUTS:
- add(TOOL_LAYOUTS);
- break;
-
- case TO_NEWLINE:
- add(TOOL_NEWLINE);
- break;
-
- case TO_ENDTOOLBAR:
- // should not set automatically
- //set();
- quit = true;
- break;
- default:
- lex.printError("Toolbar::read: "
- "Unknown toolbar tag: `$$Token'");
- break;
- }
+ if (tf == -1) {
+ lyxerr << "Toolbar::add: no LyX command called`"
+ << func << "'exists!" << endl;
+ } else {
+ add(tf, doclean);
}
- lex.popTable();
}
+
+
+void Toolbar::reset()
+{
+ toollist = 0;
+ cleaned = false;
+ lightReset();
+}
+
+// void Toolbar::lightReset()
+// {
+// standardspacing = 2; // the usual space between items
+// sepspace = 6; // extra space
+// xpos = sxpos - standardspacing;
+// ypos = sypos;
+// buttonwidth = 30; // the standard button width
+// height = 30; // the height of all items in the toolbar
+// }