]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiToolbar.cpp
Compil fix.
[lyx.git] / src / frontends / qt4 / GuiToolbar.cpp
index 1c7c644cc795ad37ff074ae81412508dc594bd35..6fc2d1ae7912ac43b3f9ca496a6fe88778f5630a 100644 (file)
 
 #include <config.h>
 
-#include "GuiView.h"
-#include "GuiCommandBuffer.h"
 #include "GuiToolbar.h"
-#include "LyXAction.h"
+
 #include "Action.h"
-#include "qt_helpers.h"
+#include "GuiApplication.h"
+#include "GuiCommandBuffer.h"
+#include "GuiView.h"
+#include "IconPalette.h"
 #include "InsertTableWidget.h"
+#include "qt_helpers.h"
+#include "Toolbars.h"
 
 #include "Buffer.h"
 #include "BufferParams.h"
 #include "Cursor.h"
 #include "FuncRequest.h"
 #include "FuncStatus.h"
-#include "IconPalette.h"
 #include "Layout.h"
+#include "LyXAction.h"
 #include "LyXFunc.h"
 #include "LyXRC.h"
 #include "Paragraph.h"
 #include "TextClass.h"
-#include "ToolbarBackend.h"
 
 #include "support/debug.h"
 #include "support/filetools.h"
 #include <QListView>
 #include <QPainter>
 #include <QPixmap>
+#include <QSettings>
 #include <QSortFilterProxyModel>
 #include <QStandardItem>
 #include <QStandardItemModel>
+#include <QString>
 #include <QTextDocument>
 #include <QTextFrame>
 #include <QToolBar>
 #include <QToolButton>
 #include <QVariant>
 
-#include <boost/assert.hpp>
+#include "support/lassert.h"
 
 #include <map>
 #include <vector>
@@ -155,7 +159,7 @@ QString findPng(QString const & name)
 {
        PngMap const * const begin = sorted_png_map;
        PngMap const * const end = begin + nr_sorted_png_map;
-       BOOST_ASSERT(sorted(begin, end));
+       LASSERT(sorted(begin, end), /**/);
 
        PngMap const * const it = find_if(begin, end, CompareKey(name));
 
@@ -181,8 +185,8 @@ QString findPng(QString const & name)
                png_name.replace('!', "negthinspace");
        }
 
-       LYXERR(Debug::GUI, "findPng(" << fromqstr(name) << ")\n"
-               << "Looking for math PNG called \"" << fromqstr(png_name) << '"');
+       LYXERR(Debug::GUI, "findPng(" << name << ")\n"
+               << "Looking for math PNG called \"" << png_name << '"');
        return png_name;
 }
 
@@ -434,7 +438,7 @@ private:
                p->filter();
                for (int i = 0; i < f.length(); ++i) {
                        int p = s.indexOf(f[i], lastp + 1, Qt::CaseInsensitive);
-                       BOOST_ASSERT(p != -1);
+                       LASSERT(p != -1, /**/);
                        if (lastp == p - 1 && lastp != -1) {
                                // remove ")" and append "x)"
                                r = r.left(r.length() - 4) + s[p] + "</u>";
@@ -529,7 +533,7 @@ void GuiLayoutBox::setFilter(QString const & s)
                // We do not call our implementation of showPopup because that
                // would reset the filter again. This is only needed if the user clicks
                // on the QComboBox.
-               BOOST_ASSERT(!inShowPopup_);
+               LASSERT(!inShowPopup_, /**/);
                inShowPopup_ = true;
                QComboBox::showPopup();
                inShowPopup_ = false;
@@ -599,7 +603,7 @@ void GuiLayoutBox::showPopup()
 
        // call QComboBox::showPopup. But set the inShowPopup_ flag to switch on
        // the hack in the item delegate to make space for the headers.
-       BOOST_ASSERT(!inShowPopup_);
+       LASSERT(!inShowPopup_, /**/);
        inShowPopup_ = true;
        QComboBox::showPopup();
        inShowPopup_ = false;
@@ -683,8 +687,7 @@ void GuiLayoutBox::set(docstring const & layout)
 
        QList<QStandardItem *> r = model_->findItems(name, Qt::MatchExactly, 1);
        if (r.empty()) {
-               lyxerr << "Trying to select non existent layout type "
-                       << fromqstr(name) << endl;
+               LYXERR0("Trying to select non existent layout type " << name);
                return;
        }
 
@@ -738,7 +741,7 @@ void GuiLayoutBox::addItemSort(docstring const & item, docstring const & categor
        if (i < end) {
                // find alphabetic position
                while (i != end
-                      && model_->item(i, 0)->text().compare(titem) < 0 
+                      && model_->item(i, 0)->text().localeAwareCompare(titem) < 0 
                       && (!sortedByCat || model_->item(i, 2)->text() == qcat))
                        ++i;
        }
@@ -838,8 +841,8 @@ void GuiLayoutBox::selected(int index)
 
 
 GuiToolbar::GuiToolbar(ToolbarInfo const & tbinfo, GuiView & owner)
-       : QToolBar(qt_(tbinfo.gui_name), &owner), owner_(owner),
-         layout_(0), command_buffer_(0)
+       : QToolBar(qt_(tbinfo.gui_name), &owner), visibility_(0),
+         allowauto_(false), owner_(owner), layout_(0), command_buffer_(0)
 {
        // give visual separation between adjacent toolbars
        addSeparator();
@@ -847,10 +850,22 @@ GuiToolbar::GuiToolbar(ToolbarInfo const & tbinfo, GuiView & owner)
        // TODO: save toolbar position
        setMovable(true);
 
+       //
+       setObjectName(toqstr(tbinfo.name));
+
        ToolbarInfo::item_iterator it = tbinfo.items.begin();
        ToolbarInfo::item_iterator end = tbinfo.items.end();
        for (; it != end; ++it)
                add(*it);
+       
+       restoreSession();
+}
+
+
+void GuiToolbar::setVisibility(int visibility)
+{
+       visibility_ = visibility;
+       allowauto_ = visibility_ >= Toolbars::MATH;
 }
 
 
@@ -881,8 +896,7 @@ public:
                connect(bar_, SIGNAL(iconSizeChanged(QSize)),
                        this, SLOT(setIconSize(QSize)));
                setCheckable(true);
-               ToolbarInfo const * tbinfo = 
-                       toolbarbackend.getDefinedToolbarInfo(tbitem_.name_);
+               ToolbarInfo const * tbinfo = guiApp->toolbars().info(tbitem_.name_);
                if (tbinfo)
                        // use the icon of first action for the toolbar button
                        setIcon(getIcon(tbinfo->items.begin()->func_, true));
@@ -897,8 +911,7 @@ public:
 
                initialized_ = true;
 
-               ToolbarInfo const * tbinfo = 
-                       toolbarbackend.getDefinedToolbarInfo(tbitem_.name_);
+               ToolbarInfo const * tbinfo = guiApp->toolbars().info(tbitem_.name_);
                if (!tbinfo) {
                        lyxerr << "Unknown toolbar " << tbitem_.name_ << endl;
                        return;
@@ -952,8 +965,7 @@ public:
                m->setWindowTitle(label);
                m->setTearOffEnabled(true);
                connect(bar_, SIGNAL(updated()), m, SLOT(updateParent()));
-               ToolbarInfo const * tbinfo = 
-                       toolbarbackend.getDefinedToolbarInfo(tbitem_.name_);
+               ToolbarInfo const * tbinfo = guiApp->toolbars().info(tbitem_.name_);
                if (!tbinfo) {
                        lyxerr << "Unknown toolbar " << tbitem_.name_ << endl;
                        return;
@@ -1022,42 +1034,21 @@ void GuiToolbar::add(ToolbarItem const & item)
 }
 
 
-void GuiToolbar::saveInfo(ToolbarSection::ToolbarInfo & tbinfo)
+void GuiToolbar::update(bool in_math, bool in_table, bool in_review, 
+       bool in_mathmacrotemplate)
 {
-       // if tbinfo.state == auto *do not* set on/off
-       if (tbinfo.state != ToolbarSection::ToolbarInfo::AUTO) {
-               if (GuiToolbar::isVisible())
-                       tbinfo.state = ToolbarSection::ToolbarInfo::ON;
-               else
-                       tbinfo.state = ToolbarSection::ToolbarInfo::OFF;
+       if (visibility_ & Toolbars::AUTO) {
+               bool show_it = in_math && (visibility_ & Toolbars::MATH)
+                       || in_table && (visibility_ & Toolbars::TABLE)
+                       || in_review && (visibility_ & Toolbars::REVIEW)
+                       || in_mathmacrotemplate && (visibility_ & Toolbars::MATHMACROTEMPLATE);
+               setVisible(show_it);
        }
-       //
-       // no need to save it here.
-       Qt::ToolBarArea loc = owner_.toolBarArea(this);
-
-       if (loc == Qt::TopToolBarArea)
-               tbinfo.location = ToolbarSection::ToolbarInfo::TOP;
-       else if (loc == Qt::BottomToolBarArea)
-               tbinfo.location = ToolbarSection::ToolbarInfo::BOTTOM;
-       else if (loc == Qt::RightToolBarArea)
-               tbinfo.location = ToolbarSection::ToolbarInfo::RIGHT;
-       else if (loc == Qt::LeftToolBarArea)
-               tbinfo.location = ToolbarSection::ToolbarInfo::LEFT;
-       else
-               tbinfo.location = ToolbarSection::ToolbarInfo::NOTSET;
-
-       // save toolbar position. They are not used to restore toolbar position
-       // now because move(x,y) does not work for toolbar.
-       tbinfo.posx = pos().x();
-       tbinfo.posy = pos().y();
-}
 
-
-void GuiToolbar::updateContents()
-{
        // update visible toolbars only
        if (!isVisible())
                return;
+
        // This is a speed bottleneck because this is called on every keypress
        // and update calls getStatus, which copies the cursor at least two times
        for (int i = 0; i < actions_.size(); ++i)
@@ -1071,6 +1062,58 @@ void GuiToolbar::updateContents()
 }
 
 
+QString GuiToolbar::sessionKey() const
+{
+       return "view-" + QString::number(owner_.id()) + "/" + objectName();
+}
+
+
+void GuiToolbar::saveSession() const
+{
+       QSettings settings;
+       settings.setValue(sessionKey() + "/visibility", visibility_);
+}
+
+
+void GuiToolbar::restoreSession()
+{
+       QSettings settings;
+       setVisibility(settings.value(sessionKey() + "/visibility").toInt());
+}
+
+
+void GuiToolbar::toggle()
+{
+       docstring state;
+       if (allowauto_) {
+               if (!(visibility_ & Toolbars::AUTO)) {
+                       visibility_ |= Toolbars::AUTO;
+                       hide();
+                       state = _("auto");
+               } else {
+                       visibility_ &= ~Toolbars::AUTO;
+                       if (isVisible()) {
+                               hide();
+                               state = _("off");
+                       } else {
+                               show();
+                               state = _("on");
+                       }
+               }
+       } else {
+               if (isVisible()) {
+                       hide();
+                       state = _("off");
+               } else {
+                       show();
+                       state = _("on");
+               }
+       }
+
+       owner_.message(bformat(_("Toolbar \"%1$s\" state set to %2$s"),
+               qstring_to_ucs4(windowTitle()), state));
+}
+
 } // namespace frontend
 } // namespace lyx