]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiToolbar.cpp
Fix the tab ordering of GuiDocument components.
[lyx.git] / src / frontends / qt4 / GuiToolbar.cpp
index b813d4647fcd66a9df2cf125d5cb527442389750..5a0edfa335419e3fe1557a0411f677517c498614 100644 (file)
@@ -30,7 +30,7 @@
 #include "FuncRequest.h"
 #include "FuncStatus.h"
 #include "KeyMap.h"
-#include "LyXFunc.h"
+#include "LyX.h"
 #include "LyXRC.h"
 
 #include "support/debug.h"
@@ -53,8 +53,7 @@ namespace frontend {
 
 GuiToolbar::GuiToolbar(ToolbarInfo const & tbinfo, GuiView & owner)
        : QToolBar(toqstr(tbinfo.gui_name), &owner), visibility_(0),
-         allowauto_(false), owner_(owner), layout_(0), command_buffer_(0),
-         tbinfo_(tbinfo), filled_(false)
+         owner_(owner), command_buffer_(0), tbinfo_(tbinfo), filled_(false)
 {
        setIconSize(owner.iconSize());
        connect(&owner, SIGNAL(iconSizeChanged(QSize)), this,
@@ -91,7 +90,6 @@ void GuiToolbar::showEvent(QShowEvent * ev)
 void GuiToolbar::setVisibility(int visibility)
 {
        visibility_ = visibility;
-       allowauto_ = visibility_ >= Toolbars::MATH;
 }
 
 
@@ -175,7 +173,16 @@ MenuButton::MenuButton(GuiToolbar * bar, ToolbarItem const & item, bool const st
        setToolTip(label);
        setStatusTip(label);
        setText(label);
-       setIcon(QIcon(getPixmap("images/math/", toqstr(tbitem_.name_), "png")));
+       QString const name = toqstr(tbitem_.name_);
+       QString imagedir = "images/math/";
+       FileName const fname = imageLibFileSearch(imagedir, name, "png");
+       if (fname.exists()) {
+               setIcon(QIcon(getPixmap(imagedir, name, "png")));
+       } else {
+               imagedir = "images/";
+               imageLibFileSearch(imagedir, name, "png");
+               setIcon(QIcon(getPixmap(imagedir, name, "png")));
+       }
        if (sticky)
                connect(this, SIGNAL(triggered(QAction *)),
                        this, SLOT(actionTriggered(QAction *)));
@@ -226,10 +233,14 @@ void GuiToolbar::add(ToolbarItem const & item)
        case ToolbarItem::SEPARATOR:
                addSeparator();
                break;
-       case ToolbarItem::LAYOUTS:
-               layout_ = new LayoutBox(this, owner_);
-               addWidget(layout_);
+       case ToolbarItem::LAYOUTS: {
+               LayoutBox * layout = owner_.getLayoutDialog();
+               QObject::connect(this, SIGNAL(iconSizeChanged(QSize)),
+                       layout, SLOT(setIconSize(QSize)));
+               QAction * action = addWidget(layout);
+               action->setVisible(true);
                break;
+       }
        case ToolbarItem::MINIBUFFER:
                command_buffer_ = new GuiCommandBuffer(&owner_);
                addWidget(command_buffer_);
@@ -294,8 +305,9 @@ void GuiToolbar::update(bool in_math, bool in_table, bool in_review,
        for (int i = 0; i < actions_.size(); ++i)
                actions_[i]->update();
 
-       if (layout_)
-               layout_->setEnabled(lyx::getStatus(FuncRequest(LFUN_LAYOUT)).enabled());
+       LayoutBox * layout = owner_.getLayoutDialog();
+       if (layout)
+               layout->setEnabled(lyx::getStatus(FuncRequest(LFUN_LAYOUT)).enabled());
 
        // emit signal
        updated();
@@ -318,14 +330,23 @@ void GuiToolbar::saveSession() const
 void GuiToolbar::restoreSession()
 {
        QSettings settings;
-       setVisibility(settings.value(sessionKey() + "/visibility").toInt());
+       int const error_val = -1;
+       int visibility =
+               settings.value(sessionKey() + "/visibility", error_val).toInt();
+       if (visibility == error_val || visibility == 0) {
+               // This should not happen, but in case we use the defaults
+               LYXERR0("Session settings could not be found! Defaults are used instead.");
+               visibility = 
+                       guiApp->toolbars().defaultVisibility(fromqstr(objectName()));
+       }
+       setVisibility(visibility);
 }
 
 
 void GuiToolbar::toggle()
 {
        docstring state;
-       if (allowauto_) {
+       if (visibility_ & Toolbars::ALLOWAUTO) {
                if (!(visibility_ & Toolbars::AUTO)) {
                        visibility_ |= Toolbars::AUTO;
                        hide();