]> git.lyx.org Git - features.git/commitdiff
More cleanups of the toolbar. The buttons are now toggled/disabled when needed
authorJean-Marc Lasgouttes <lasgouttes@lyx.org>
Thu, 20 Jul 2000 11:39:14 +0000 (11:39 +0000)
committerJean-Marc Lasgouttes <lasgouttes@lyx.org>
Thu, 20 Jul 2000 11:39:14 +0000 (11:39 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@905 a592a061-630c-0410-9148-cb99ea01b6c8

ChangeLog
images/unknown.xpm [deleted file]
lib/images/unknown.xpm [new file with mode: 0644]
src/BufferView_pimpl.C
src/LyXView.C
src/LyXView.h
src/lyxfunc.C
src/toolbar.C
src/toolbar.h

index 5cbbc3482372ceeb09c60c3d102949c9487467e0..a379b83890375a740def25c42e366124c711cbaa 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,24 @@
+2000-07-20  Jean-Marc Lasgouttes  <Jean-Marc.Lasgouttes@inria.fr>
+
+       * src/lyxfunc.C (Dispatch): use LyXView::ShowState instead of
+       setting explicitely the minibuffer.
+       * src/BufferView_pimpl.C (workAreaButtonRelease): ditto.
+
+       * src/LyXView.C (showState): new function. Shows font information
+       in minibuffer and update toolbar state.
+       (LyXView): call Toolbar::update after creating the
+       view. 
+
+       * src/toolbar.C: change toollist to be a vector instead of a
+       linked list.
+       (BubbleTimerCB): get help string directly from the callback
+       argument of the corresponding icon (which is the action) 
+       (set): remove unnecessary ugliness.
+       (update): new function. update the icons (depressed, disabled)
+       depending of the status of the corresponding action.
+       
+       * src/toolbar.h: remove help in toolbarItem
+
 2000-07-19  Dekel Tsur  <dekel@math.tau.ac.il>
 
        * src/Painter.C (text): Added code for using symbol glyphs from
diff --git a/images/unknown.xpm b/images/unknown.xpm
deleted file mode 100644 (file)
index 4771cca..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/* XPM */
-static char const * unknown_xpm[] = {
-/* width height num_colors chars_per_pixel */
-"    20    20        2            1",
-/* colors */
-". c #000000000000",
-"# c #befbbefbbefb",
-/* pixels */
-"####################",
-"####################",
-"####################",
-"####################",
-"####################",
-"########.....#######",
-"#######..##..#######",
-"#######..##..#######",
-"##########..########",
-"########...#########",
-"########..##########",
-"####################",
-"########..##########",
-"########..##########",
-"####################",
-"####################",
-"####################",
-"####################",
-"####################",
-"####################"
-};
-
-
-
diff --git a/lib/images/unknown.xpm b/lib/images/unknown.xpm
new file mode 100644 (file)
index 0000000..4771cca
--- /dev/null
@@ -0,0 +1,32 @@
+/* XPM */
+static char const * unknown_xpm[] = {
+/* width height num_colors chars_per_pixel */
+"    20    20        2            1",
+/* colors */
+". c #000000000000",
+"# c #befbbefbbefb",
+/* pixels */
+"####################",
+"####################",
+"####################",
+"####################",
+"####################",
+"########.....#######",
+"#######..##..#######",
+"#######..##..#######",
+"##########..########",
+"########...#########",
+"########..##########",
+"####################",
+"########..##########",
+"########..##########",
+"####################",
+"####################",
+"####################",
+"####################",
+"####################",
+"####################"
+};
+
+
+
index 18efb50d74a6c991fc528317a259551781f5d1c5..de3c38e4f90832400a83975ede320a612b3a67c2 100644 (file)
@@ -754,7 +754,7 @@ void BufferView::Pimpl::workAreaButtonRelease(int x, int y,
        if (button >= 2) return;
 
        bv_->setState();
-       owner_->getMiniBuffer()->Set(CurrentState(bv_));
+       owner_->showState();
 
        // Did we hit an editable inset?
        if (inset_hit != 0) {
index 4a1c93f5519408c0175eab6c731da62ab0835f5d..d9cdc70bbf09ec2e91b00b036975d0325628b2b9 100644 (file)
@@ -36,6 +36,7 @@
 #include "menus.h"
 #include "frontends/Dialogs.h"
 #include "lyx_gui_misc.h"      // [update,Close]AllBufferRelatedDialogs
+#include "bufferview_funcs.h" // CurrentState()
 
 using std::endl;
 
@@ -63,6 +64,9 @@ LyXView::LyXView(int width, int height)
        lyxfunc = new LyXFunc(this);
        intl = new Intl;
 
+       // Make sure the buttons are disabled if needed.
+       toolbar->update();
+
        dialogs_ = new Dialogs(this);
        // temporary until all dialogs moved into Dialogs.
        dialogs_->updateBufferDependent
@@ -440,3 +444,10 @@ void LyXView::updateWindowTitle()
                last_title = title;
        }
 }
+
+
+void LyXView::showState()
+{
+       getMiniBuffer()->Set(CurrentState(view()));
+       getToolbar()->update();
+}
index 23e2a30e666a01f1a097eef0627d489cb85f0100..eb7a5c5a9b85401282e84a96b69713615866c11f 100644 (file)
@@ -92,6 +92,10 @@ public:
        /// Updates the title of the window
        void updateWindowTitle();
 
+
+       /// Show state (toolbar and font in minibuffer)
+       void showState();
+
        /// Reset autosave timer
        void resetAutosaveTimer();
 private:
index ed4429f003e68247846adc83a97fabe14dfd3f54..4d15da22df895cb183c4446854a1cf52443f3d2e 100644 (file)
@@ -179,7 +179,7 @@ void LyXFunc::moveCursorUpdate(bool selecting)
        
        /* ---> Everytime the cursor is moved, show the current font state. */
        // should this too me moved out of this func?
-       //owner->getMiniBuffer()->Set(CurrentState());
+       //owner->showState();
        owner->view()->setState();
 }
 
@@ -220,7 +220,7 @@ int LyXFunc::processKeyEvent(XEvent * ev)
                        owner->view()->unlockInset(tli);
                        owner->view()->text->CursorRight(owner->view());
                        moveCursorUpdate(false);
-                       owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+                       owner->showState();
                } else {
                        tli->UnlockInsetInInset(owner->view(),
                                                tli->GetLockingInset(),true);
@@ -593,29 +593,26 @@ string LyXFunc::Dispatch(int ac,
                                case LFUN_BREAKLINE:
                                        owner->view()->text->CursorRight(owner->view());
                                        owner->view()->setState();
-                                       owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+                                       owner->showState();
                                        break;
                                case LFUN_RIGHT:
                                        if (!owner->view()->text->cursor.par()->isRightToLeftPar(owner->buffer()->params)) {
                                                owner->view()->text->CursorRight(owner->view());
                                                moveCursorUpdate(false);
-                                               owner->getMiniBuffer()->
-                                                       Set(CurrentState(owner->view()));
+                                               owner->showState();
                                        }
                                        return string();
                                case LFUN_LEFT: 
                                        if (owner->view()->text->cursor.par()->isRightToLeftPar(owner->buffer()->params)) {
                                                owner->view()->text->CursorRight(owner->view());
                                                moveCursorUpdate(false);
-                                               owner->getMiniBuffer()->
-                                                       Set(CurrentState(owner->view()));
+                                               owner->showState();
                                        }
                                        return string();
                                case LFUN_DOWN:
                                        owner->view()->text->CursorDown(owner->view());
                                        moveCursorUpdate(false);
-                                       owner->getMiniBuffer()->
-                                               Set(CurrentState(owner->view()));
+                                       owner->showState();
                                        return string();
                                default:
                                        break;
@@ -999,13 +996,13 @@ string LyXFunc::Dispatch(int ac,
        case LFUN_FREE:
                Free(owner->view());
                owner->view()->setState();
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
                
        case LFUN_TEX:
                Tex(owner->view());
                owner->view()->setState();
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
 #ifndef NEW_INSETS             
        case LFUN_MELT:
@@ -1228,52 +1225,52 @@ string LyXFunc::Dispatch(int ac,
        case LFUN_LANGUAGE:
                Lang(owner->view(), argument);
                owner->view()->setState();
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
 
        case LFUN_EMPH:
                Emph(owner->view());
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
 
        case LFUN_BOLD:
                Bold(owner->view());
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
                
        case LFUN_NOUN:
                Noun(owner->view());
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
                
        case LFUN_CODE:
                Code(owner->view());
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
                
        case LFUN_SANS:
                Sans(owner->view());
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
                
        case LFUN_ROMAN:
                Roman(owner->view());
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
                
        case LFUN_DEFAULT:
                StyleReset(owner->view());
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
                
        case LFUN_UNDERLINE:
                Underline(owner->view());
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
                
        case LFUN_FONT_SIZE:
                FontSize(owner->view(), argument);
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
                
        case LFUN_FONT_STATE:
@@ -1381,7 +1378,7 @@ string LyXFunc::Dispatch(int ac,
                        tmptext->CursorRight(owner->view(), false);
                owner->view()->text->FinishUndo();
                moveCursorUpdate(false);
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
        }
        break;
                
@@ -1417,7 +1414,7 @@ string LyXFunc::Dispatch(int ac,
 
                owner->view()->text->FinishUndo();
                moveCursorUpdate(false);
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
        }
        break;
                
@@ -1427,7 +1424,7 @@ string LyXFunc::Dispatch(int ac,
                owner->view()->text->CursorUp(owner->view());
                owner->view()->text->FinishUndo();
                moveCursorUpdate(false);
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
                
        case LFUN_DOWN:
@@ -1437,7 +1434,7 @@ string LyXFunc::Dispatch(int ac,
                owner->view()->text->CursorDown(owner->view());
                owner->view()->text->FinishUndo();
                moveCursorUpdate(false);
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
 
        case LFUN_UP_PARAGRAPH:
@@ -1447,7 +1444,7 @@ string LyXFunc::Dispatch(int ac,
                owner->view()->text->CursorUpParagraph(owner->view());
                owner->view()->text->FinishUndo();
                moveCursorUpdate(false);
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
                
        case LFUN_DOWN_PARAGRAPH:
@@ -1457,7 +1454,7 @@ string LyXFunc::Dispatch(int ac,
                owner->view()->text->CursorDownParagraph(owner->view());
                owner->view()->text->FinishUndo();
                moveCursorUpdate(false);
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
                
        case LFUN_PRIOR:
@@ -1467,7 +1464,7 @@ string LyXFunc::Dispatch(int ac,
                owner->view()->cursorPrevious();
                owner->view()->text->FinishUndo();
                moveCursorUpdate(false);
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
                
        case LFUN_NEXT:
@@ -1477,7 +1474,7 @@ string LyXFunc::Dispatch(int ac,
                owner->view()->cursorNext();
                owner->view()->text->FinishUndo();
                moveCursorUpdate(false);
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
                
        case LFUN_HOME:
@@ -1487,7 +1484,7 @@ string LyXFunc::Dispatch(int ac,
                owner->view()->text->CursorHome(owner->view());
                owner->view()->text->FinishUndo();
                moveCursorUpdate(false);
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
                
        case LFUN_END:
@@ -1497,7 +1494,7 @@ string LyXFunc::Dispatch(int ac,
                owner->view()->text->CursorEnd(owner->view());
                owner->view()->text->FinishUndo();
                moveCursorUpdate(false);
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
                
        case LFUN_SHIFT_TAB:
@@ -1508,7 +1505,7 @@ string LyXFunc::Dispatch(int ac,
                owner->view()->text->CursorTab(owner->view());
                owner->view()->text->FinishUndo();
                moveCursorUpdate(false);
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
                
        case LFUN_WORDRIGHT:
@@ -1521,7 +1518,7 @@ string LyXFunc::Dispatch(int ac,
                        owner->view()->text->CursorRightOneWord(owner->view());
                owner->view()->text->FinishUndo();
                moveCursorUpdate(false);
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
                
        case LFUN_WORDLEFT:
@@ -1534,7 +1531,7 @@ string LyXFunc::Dispatch(int ac,
                        owner->view()->text->CursorLeftOneWord(owner->view());
                owner->view()->text->FinishUndo();
                moveCursorUpdate(false);
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
                
        case LFUN_BEGINNINGBUF:
@@ -1544,7 +1541,7 @@ string LyXFunc::Dispatch(int ac,
                owner->view()->text->CursorTop(owner->view());
                owner->view()->text->FinishUndo();
                moveCursorUpdate(false);
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
                
        case LFUN_ENDBUF:
@@ -1554,7 +1551,7 @@ string LyXFunc::Dispatch(int ac,
                owner->view()->text->CursorBottom(owner->view());
                owner->view()->text->FinishUndo();
                moveCursorUpdate(false);
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
 
       
@@ -1567,7 +1564,7 @@ string LyXFunc::Dispatch(int ac,
                        owner->view()->text->CursorRight(owner->view());
                owner->view()->text->FinishUndo();
                moveCursorUpdate(true);
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
                
        case LFUN_LEFTSEL:
@@ -1578,7 +1575,7 @@ string LyXFunc::Dispatch(int ac,
                        owner->view()->text->CursorLeft(owner->view());
                owner->view()->text->FinishUndo();
                moveCursorUpdate(true);
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
                
        case LFUN_UPSEL:
@@ -1586,7 +1583,7 @@ string LyXFunc::Dispatch(int ac,
                owner->view()->text->CursorUp(owner->view());
                owner->view()->text->FinishUndo();
                moveCursorUpdate(true);
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
                
        case LFUN_DOWNSEL:
@@ -1594,7 +1591,7 @@ string LyXFunc::Dispatch(int ac,
                owner->view()->text->CursorDown(owner->view());
                owner->view()->text->FinishUndo();
                moveCursorUpdate(true);
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
 
        case LFUN_UP_PARAGRAPHSEL:
@@ -1602,7 +1599,7 @@ string LyXFunc::Dispatch(int ac,
                owner->view()->text->CursorUpParagraph(owner->view());
                owner->view()->text->FinishUndo();
                moveCursorUpdate(true);
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
                
        case LFUN_DOWN_PARAGRAPHSEL:
@@ -1610,7 +1607,7 @@ string LyXFunc::Dispatch(int ac,
                owner->view()->text->CursorDownParagraph(owner->view());
                owner->view()->text->FinishUndo();
                moveCursorUpdate(true);
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
                
        case LFUN_PRIORSEL:
@@ -1618,7 +1615,7 @@ string LyXFunc::Dispatch(int ac,
                owner->view()->cursorPrevious();
                owner->view()->text->FinishUndo();
                moveCursorUpdate(true);
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
                
        case LFUN_NEXTSEL:
@@ -1626,7 +1623,7 @@ string LyXFunc::Dispatch(int ac,
                owner->view()->cursorNext();
                owner->view()->text->FinishUndo();
                moveCursorUpdate(true);
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
                
        case LFUN_HOMESEL:
@@ -1634,7 +1631,7 @@ string LyXFunc::Dispatch(int ac,
                owner->view()->text->CursorHome(owner->view());
                owner->view()->text->FinishUndo();
                moveCursorUpdate(true);
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
                
        case LFUN_ENDSEL:
@@ -1642,7 +1639,7 @@ string LyXFunc::Dispatch(int ac,
                owner->view()->text->CursorEnd(owner->view());
                owner->view()->text->FinishUndo();
                moveCursorUpdate(true);
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
                
        case LFUN_WORDRIGHTSEL:
@@ -1653,7 +1650,7 @@ string LyXFunc::Dispatch(int ac,
                        owner->view()->text->CursorRightOneWord(owner->view());
                owner->view()->text->FinishUndo();
                moveCursorUpdate(true);
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
                
        case LFUN_WORDLEFTSEL:
@@ -1664,7 +1661,7 @@ string LyXFunc::Dispatch(int ac,
                        owner->view()->text->CursorLeftOneWord(owner->view());
                owner->view()->text->FinishUndo();
                moveCursorUpdate(true);
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
                
        case LFUN_BEGINNINGBUFSEL:
@@ -1672,7 +1669,7 @@ string LyXFunc::Dispatch(int ac,
                owner->view()->text->CursorTop(owner->view());
                owner->view()->text->FinishUndo();
                moveCursorUpdate(true);
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
                
        case LFUN_ENDBUFSEL:
@@ -1680,7 +1677,7 @@ string LyXFunc::Dispatch(int ac,
                owner->view()->text->CursorBottom(owner->view());
                owner->view()->text->FinishUndo();
                moveCursorUpdate(true);
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
 
                // --- text changing commands ------------------------
@@ -1735,7 +1732,7 @@ string LyXFunc::Dispatch(int ac,
                        owner->view()->cut();
                }
                moveCursorUpdate(false);
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                owner->view()->setState();
                break;
 
@@ -1789,7 +1786,7 @@ string LyXFunc::Dispatch(int ac,
                owner->view()->text->DeleteWordForward(owner->view());
                owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
                moveCursorUpdate(false);
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
 
                /* -------> Delete word backward. */
@@ -1798,7 +1795,7 @@ string LyXFunc::Dispatch(int ac,
                owner->view()->text->DeleteWordBackward(owner->view());
                owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
                moveCursorUpdate(false);
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
                
                /* -------> Kill to end of line. */
@@ -1843,7 +1840,7 @@ string LyXFunc::Dispatch(int ac,
                } else {
                        owner->view()->cut();
                }
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                owner->view()->setState();
        }
        break;
@@ -1887,7 +1884,7 @@ string LyXFunc::Dispatch(int ac,
                owner->view()->text->sel_cursor = 
                        owner->view()->text->cursor;
                owner->view()->setState();
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
        }
 
@@ -1899,7 +1896,7 @@ string LyXFunc::Dispatch(int ac,
                owner->view()->text->sel_cursor = 
                        owner->view()->text->cursor;
                owner->view()->setState();
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
                break;
        }
        
@@ -1934,7 +1931,7 @@ string LyXFunc::Dispatch(int ac,
                owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
                owner->view()->text->sel_cursor = cursor;
                owner->view()->setState();
-               owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+               owner->showState();
        }
        break;
 
index ab7c9efdfce6805c1e3b0f41894741f361dddaed..fa756910d9c3f91351158d75a6562c78c407ce4c 100644 (file)
@@ -66,8 +66,11 @@ Toolbar::Toolbar(LyXView * o, int x, int y)
 void Toolbar::BubbleTimerCB(FL_OBJECT *, long data)
 {
        FL_OBJECT * ob = reinterpret_cast<FL_OBJECT*>(data);
-       char * help = static_cast<char*>(ob->u_vdata);
-       fl_show_oneliner(help, ob->form->x + ob->x,
+       // The trick we use to get the help text is to read the
+       // argument of the callback that has been registered for
+       // ToolBarCB.  (JMarc)
+       string help = lyxaction.helpText(ob->argument);
+       fl_show_oneliner(help.c_str(), ob->form->x + ob->x,
                         ob->form->y + ob->y + ob->h);
 }
 
@@ -83,10 +86,10 @@ int Toolbar::BubblePost(FL_OBJECT *ob, int event,
                        FL_Coord /*mx*/, FL_Coord /*my*/,
                        int /*key*/, void */*xev*/)
 {
-       string help = static_cast<char *>(ob->u_vdata);
-       Toolbar * t = reinterpret_cast<Toolbar*>(ob->u_ldata);
+       Toolbar * t = reinterpret_cast<Toolbar*>(ob->u_vdata);
        
-       if(event == FL_ENTER && !help.empty()){
+       // We do not test for empty help here, since this can never happen
+       if(event == FL_ENTER){
                fl_set_object_callback(t->bubble_timer,
                                       C_Toolbar_BubbleTimerCB,
                                       reinterpret_cast<long>(ob));
@@ -111,39 +114,58 @@ extern "C" int C_Toolbar_BubblePost(FL_OBJECT * ob, int event,
 
 void Toolbar::activate()
 {
-       toolbarItem * tmp= 0;
-       toolbarItem * item = toollist;
-       while(item){
-               tmp = item->next;
-               if (item->icon) {
-                       fl_activate_object(item->icon);
+       ToolbarList::const_iterator p = toollist.begin();
+       for (; p != toollist.end(); ++p) {
+               if (p->icon) {
+                       fl_activate_object(p->icon);
                }
-               item = tmp;
        }
 }
 
 
 void Toolbar::deactivate()
 {
-       toolbarItem * tmp= 0;
-       toolbarItem * item = toollist;
-       while(item){
-               tmp = item->next;
-               if (item->icon) {
-                       fl_deactivate_object(item->icon);
+       ToolbarList::const_iterator p = toollist.begin();
+       for (; p != toollist.end(); ++p) {
+               if (p->icon) {
+                       fl_deactivate_object(p->icon);
+               }
+       }
+}
+
+void Toolbar::update()
+{
+       ToolbarList::const_iterator p = toollist.begin();
+       for (; p != toollist.end(); ++p) {
+               if (p->icon) {
+                       int status = owner->getLyXFunc()->getStatus(p->action);
+                       if (status & LyXFunc::ToggleOn) {
+                               // I'd like to use a different color
+                               // here, but then the problem is to
+                               // know how to use transparency with
+                               // Xpm library. It seems pretty
+                               // complicated to me (JMarc)
+                               fl_set_object_boxtype(p->icon, FL_DOWN_BOX);
+                       } else {
+                               fl_set_object_boxtype(p->icon, FL_UP_BOX);
+                       }
+
+                       if (status & LyXFunc::Disabled) {
+                               // Is there a way here to specify a
+                               // mask in order to show that the
+                               // button is disabled? (JMarc)
+                               fl_deactivate_object(p->icon);
+                       }
+                       else
+                               fl_activate_object(p->icon);
                }
-               item = tmp;
        }
 }
 
 
 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())
@@ -223,7 +245,6 @@ void Toolbar::set(bool doingmain)
        if (!cleaned) return;
        
        FL_OBJECT * obj;
-       toolbarItem * item = toollist;
        
        if (!doingmain) {
                fl_freeze_form(owner->getForm());
@@ -237,11 +258,11 @@ void Toolbar::set(bool doingmain)
                                            xpos, ypos, 0, 0, "Timer");
 #endif
        
-       while(item != 0) {
+       ToolbarList::iterator item = toollist.begin();
+       for (; item != toollist.end(); ++item) {
                switch(item->action){
                case TOOL_SEPARATOR:
                        xpos += sepspace;
-                       item = item->next;
                        break;
                case TOOL_LAYOUTS:
                        xpos += standardspacing;
@@ -251,7 +272,6 @@ void Toolbar::set(bool doingmain)
                        combox->setcallback(LayoutsCB);
                        combox->resize(FL_RESIZE_ALL);
                        combox->gravity(NorthWestGravity, NorthWestGravity);
-                       item = item->next;
                        xpos += 135;
                        break;
                default:
@@ -261,39 +281,28 @@ void Toolbar::set(bool doingmain)
                                                    xpos, ypos,
                                                    buttonwidth,
                                                    height, "");
-                       fl_set_object_boxtype(obj, FL_UP_BOX);
-                       fl_set_object_color(obj, FL_MCOL, FL_BLUE);
                        fl_set_object_resize(obj, FL_RESIZE_ALL);
                        fl_set_object_gravity(obj,
                                              NorthWestGravity,
                                              NorthWestGravity);
                        fl_set_object_callback(obj, C_Toolbar_ToolbarCB,
                                               static_cast<long>(item->action));
+                       fl_set_object_color(obj, FL_MCOL, FL_BLUE);
                        // Remove the blue feedback rectangle
                        fl_set_pixmapbutton_focus_outline(obj, 0);
 
-                       // 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;
-                       
-                       
+#if FL_REVISION >= 89
+                       string help = lyxaction.helpText(action);
+                       fl_set_object_helper(obj, help.c_str());        
 #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
 
+                       // The toolbar that this object belongs too.
+                       obj->u_vdata = this;
+
                        setPixmap(obj, item->action, buttonwidth, height);
-                       item = item->next;
                        // we must remember to update the positions
                        xpos += buttonwidth;
                        // ypos is constant
@@ -311,7 +320,10 @@ void Toolbar::set(bool doingmain)
                // Should be safe to do this here.
                owner->updateLayoutChoice();
        }
-       
+
+       // set the state of the icons
+       //update();
+
        cleaned = false;
 }
 
@@ -325,21 +337,18 @@ void Toolbar::add(int action, bool doclean)
        if (!doclean && owner) {
                // first "hide" the toolbar buttons. This is not a real hide
                // actually it deletes and frees the button altogether.
-               lyxerr << "Toolbar::add: \"hide\" the toolbar buttons." << endl;
-               toolbarItem * tmp= 0;
-               toolbarItem * item = toollist;
+               lyxerr << "Toolbar::add: \"hide\" the toolbar buttons." 
+                      << endl;
 
                lightReset();
                
                fl_freeze_form(owner->getForm());
-               while(item){
-                       tmp = item->next;
-                       if (item->icon) {
-                               fl_delete_object(item->icon);
-                               fl_free_object(item->icon);
-                       }
-                       item = tmp;
+
+               ToolbarList::iterator p = toollist.begin();
+               for (; p != toollist.end(); ++p) {
+                       p->clean();
                }
+
                if (combox) {
                        delete combox;
                        combox = 0;
@@ -351,44 +360,30 @@ void Toolbar::add(int action, bool doclean)
        // there exist some special actions not part of
        // kb_action: SEPARATOR, LAYOUTS
 
-       toolbarItem * newItem, * tmp;
-
-       // adds an item to the list
-       newItem = new toolbarItem;
-       newItem->action = action;
-       newItem->help = lyxaction.helpText(action);
-       // 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;
+       toolbarItem newItem;
+       newItem.action = action;
+       toollist.push_back(newItem);
 }
 
 
 void Toolbar::clean()
 {
-       toolbarItem * tmp = 0;
-       toolbarItem * item = toollist;
-
-       reset();
+       //reset(); // I do not understand what this reset() is, anyway
 
        //now delete all the objects..
        if (owner)
                fl_freeze_form(owner->getForm());
-       while (item) {
-               tmp = item->next;
-               delete item;
-               item = tmp;
-       }
+
+       // G++ vector does not have clear defined
+       //toollist.clear();
+       toollist.erase(toollist.begin(), toollist.end());
+
        lyxerr[Debug::TOOLBAR] << "Combox: " << combox << endl;
        if (combox) {
                delete combox;
                combox = 0;
        }
+
        if (owner)
                fl_unfreeze_form(owner->getForm());
        lyxerr[Debug::TOOLBAR] << "toolbar cleaned" << endl;
@@ -401,20 +396,13 @@ void Toolbar::push(int nth)
        lyxerr[Debug::TOOLBAR] << "Toolbar::push: trying to trigger no `"
                               << nth << '\'' << endl;
        
-       if (nth == 0) return;
-
-       int count = 0;
-       toolbarItem * tmp = toollist;
-       while (tmp) {
-               ++count;
-               if (count == nth) {
-                       fl_trigger_object(tmp->icon);
-                       return;
-               }
-               tmp = tmp->next;
+       if (nth <= 0 || nth >= int(toollist.size())) {
+               // item nth not found...
+               LyXBell();
+               return;
        }
-       // item nth not found...
-       LyXBell();
+
+       fl_trigger_object(toollist[nth - 1].icon);
 }
 
 
@@ -433,7 +421,7 @@ void Toolbar::add(string const & func, bool doclean)
 
 void Toolbar::reset() 
 {
-       toollist = 0;
+       //toollist = 0; // what is this supposed to do?
        cleaned = false;
        lightReset();
 }
index 71c957a92592bcae0cf7f050ca9395e3745b8e29..1fd54d277271e6e5db134a8448b18f172de739e5 100644 (file)
@@ -18,6 +18,7 @@
 #pragma interface
 #endif
 
+#include <vector>
 #include FORMS_H_LOCATION
 #include "lyxfunc.h"
 #include "combox.h"
@@ -69,7 +70,8 @@ public:
         void activate();
        /// deactivates the toolbar
         void deactivate();
-
+       /// update the state of the icons
+       void update();
        ///
        static void ToolbarCB(FL_OBJECT *, long);
 
@@ -85,32 +87,41 @@ private:
        ///
        struct toolbarItem
        {
-               ///
-               toolbarItem * next;
                ///
                int action;
                ///
-               string help;
-               ///
                FL_OBJECT * icon;
                ///
                toolbarItem() {
-                       next = 0;
                        action = LFUN_NOACTION;
                        icon = 0;
                }
                ///
-               ~toolbarItem() {
+               void clean() {
                        if (icon) {
                                fl_delete_object(icon);
                                fl_free_object(icon);
+                               icon = 0;
                        }
                }
+               ///
+               ~toolbarItem() {
+                       clean();
+               }
                        
+               toolbarItem & operator=(const toolbarItem & ti) {
+                       // do we have to check icon and IsBitmap too?
+                       action = ti.action;
+                       icon = 0; // locally we need to get the icon anew
+
+                       return *this;
+               }
        };
 
-       /// a list containing all the buttons
-       toolbarItem * toollist;
+       /// typedef to simplify things
+       typedef std::vector<toolbarItem> ToolbarList;
+       /// The list containing all the buttons
+       ToolbarList toollist;
        ///
        LyXView * owner;
 #if FL_REVISION < 89