]> git.lyx.org Git - lyx.git/blobdiff - src/toolbar.C
more changes, read the Changelog
[lyx.git] / src / toolbar.C
index 5b9784cca87da0aac6e2f54ced0cb232acef596c..db68e6c949af13e935bfec30d0d0c6f38971eadf 100644 (file)
@@ -4,7 +4,7 @@
  *           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)
 {
@@ -180,6 +166,7 @@ extern "C" int C_Toolbar_BubblePost(FL_OBJECT * ob, int event,
 {
        return Toolbar::BubblePost(ob, event, 0, 0, key, xev);
 }
+#endif
 
 
 void Toolbar::activate()
@@ -212,7 +199,11 @@ void Toolbar::deactivate()
 
 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())
@@ -240,40 +231,6 @@ int Toolbar::get_toolbar_func(string const & func)
 }
 
 
-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
@@ -287,16 +244,12 @@ void Toolbar::set(bool doingmain)
                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){
@@ -308,7 +261,7 @@ void Toolbar::set(bool doingmain)
                        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);
@@ -330,19 +283,28 @@ void Toolbar::set(bool doingmain)
                                              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_vdata = const_cast<char*>(item->help.c_str());
                        // we need to know what toolbar this item
                        // belongs too. (Lgb)
                        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;
@@ -356,10 +318,7 @@ void Toolbar::set(bool doingmain)
                        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());
@@ -496,37 +455,20 @@ void Toolbar::add(int action, bool doclean)
        // 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;
        }
 }
 
@@ -580,60 +522,32 @@ void Toolbar::push(int nth)
 }
 
 
-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
+//  }