]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt2/Toolbar_pimpl.C
better selection and scrolling behaviour
[lyx.git] / src / frontends / qt2 / Toolbar_pimpl.C
index cdf023d770d8a60c0b783baaaf40decfe5801510..330b49cbf3d944416f77852331197b54def55bba 100644 (file)
@@ -1,9 +1,12 @@
 /**
- * \file Toolbar_pimpl.C
- * See the file COPYING.
+ * \file qt2/Toolbar_pimpl.C
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
  *
- * \author Lars Gullik Bjønnes, larsbj@lyx.org
- * \uathor John Levon <moz@compsoc.man.ac.uk>
+ * \author Lars Gullik Bjønnes
+ * \author John Levon
+ *
+ * Full author contact details are available in file CREDITS
  */
 
 #include <config.h>
 
 #include "support/LAssert.h"
 #include "support/filetools.h"
-#include "support/lstrings.h" 
+#include "support/lstrings.h"
+
+#include "ControlMath.h"
+
+#include <boost/tuple/tuple.hpp>
 
 #include "QtView.h"
 #include "Toolbar_pimpl.h"
+
 #include <qtoolbar.h>
 #include <qcombobox.h>
 #include <qtooltip.h>
 #include <qsizepolicy.h>
-using std::endl;
 
-extern LyXAction lyxaction;
+using std::endl;
 
 namespace {
+
 QPixmap getIconPixmap(int action)
 {
-       string arg;
-       string xpm_name;
+       FuncRequest f = lyxaction.retrieveActionArg(action);
+
+       string fullname;
 
-       const kb_action act = lyxaction.retrieveActionArg(action, arg);
-       string const name = lyxaction.getActionName(act);
-       if (!arg.empty())
-               xpm_name = subst(name + ' ' + arg, ' ','_');
-       else 
-               xpm_name = name;
+       if (f.action == LFUN_INSERT_MATH && !f.argument.empty()) {
+               fullname = find_xpm(f.argument.substr(1));
+       } else {
+               string const name = lyxaction.getActionName(f.action);
+               string xpm_name(name);
+
+               if (!f.argument.empty())
+                       xpm_name = subst(name + ' ' + f.argument, ' ','_');
+
+               fullname = LibFileSearch("images", xpm_name, "xpm");
+       }
 
-       string fullname = LibFileSearch("images", xpm_name, "xpm");
 
        if (!fullname.empty()) {
-               lyxerr[Debug::GUI] << "Full icon name is `" 
-                                      << fullname << "'" << endl;
+               lyxerr[Debug::GUI] << "Full icon name is `"
+                                  << fullname << '\'' << endl;
                return QPixmap(fullname.c_str());
        }
 
-       if (act == LFUN_INSERT_MATH && !arg.empty()) {
-#if 0 // FIXME: GUII
-               char const ** pixmap =
-                       get_pixmap_from_symbol(arg.c_str(), 30, 30);
-               if (pixmap) {
-                       lyxerr[Debug::GUI] << "Using mathed-provided icon"
-                                          << endl;
-                       return QPixmap(pixmap);
-               }
-#endif
-       }
-       
-       lyxerr << "Unable to find icon `" << xpm_name << "'" << endl;
+       lyxerr << "Unable to find icon `" << fullname << '\'' << endl;
        fullname = LibFileSearch("images", "unknown", "xpm");
        if (!fullname.empty()) {
-               lyxerr[Debug::GUI] << "Using default `unknown' icon" 
-                                      << endl;
+               lyxerr[Debug::GUI] << "Using default `unknown' icon"
+                                  << endl;
        }
        return QPixmap(fullname.c_str());
 }
 
 } // namespace anon
 
+
 class QLComboBox : public QComboBox {
 public:
        QLComboBox(QWidget * parent) : QComboBox(parent) {}
        void popup() { QComboBox::popup(); }
 };
 
-Toolbar::Pimpl::Pimpl(LyXView * o, Dialogs &, int, int)
-       : owner_(static_cast<QtView *>(o)), 
+
+Toolbar::Pimpl::Pimpl(LyXView * o, int, int)
+       : owner_(static_cast<QtView *>(o)),
        combo_(0)
 {
        proxy_.reset(new ToolbarProxy(*this));
@@ -108,21 +105,21 @@ void Toolbar::Pimpl::update()
 {
        ButtonMap::const_iterator p = map_.begin();
        ButtonMap::const_iterator end = map_.end();
+
        for (; p != end; ++p) {
                QToolButton * button = p->first;
                int action = p->second;
-               FuncStatus const status = 
-                       owner_->getLyXFunc()->getStatus(action);
+
+               FuncStatus const status =
+                       owner_->getLyXFunc().getStatus(action);
+
                button->setToggleButton(true);
                button->setOn(status.onoff(true));
                button->setEnabled(!status.disabled());
        }
 
        if (combo_)
-               combo_->setEnabled(!owner_->getLyXFunc()->getStatus(LFUN_LAYOUT).disabled());
+               combo_->setEnabled(!owner_->getLyXFunc().getStatus(LFUN_LAYOUT).disabled());
 }
 
 
@@ -135,38 +132,39 @@ void Toolbar::Pimpl::button_selected(QToolButton * button)
                return;
        }
 
-       owner_->getLyXFunc()->dispatch(cit->second, true);
+       owner_->getLyXFunc().dispatch(cit->second, true);
 }
+
 
 void Toolbar::Pimpl::changed_layout(string const & sel)
 {
+       owner_->centralWidget()->setFocus();
+
        LyXTextClass const & tc =
                owner_->buffer()->params.getLyXTextClass();
-       
+
        LyXTextClass::const_iterator end = tc.end();
        for (LyXTextClass::const_iterator cit = tc.begin();
             cit != end; ++cit) {
                if (_((*cit)->name()) == sel) {
-                       owner_->getLyXFunc()->dispatch(LFUN_LAYOUT, (*cit)->name());
+                       owner_->getLyXFunc().dispatch(FuncRequest(LFUN_LAYOUT, (*cit)->name()), true);
                        return;
                }
        }
        lyxerr << "ERROR (Toolbar::Pimpl::layoutSelected): layout not found!"
               << endl;
 }
+
 
 void Toolbar::Pimpl::setLayout(string const & layout)
 {
        LyXTextClass const & tc =
                owner_->buffer()->params.getLyXTextClass();
+
        string const & name = _(tc[layout]->name());
-       int i;
-       for (i = 0; i < combo_->count(); ++i) {
+
+       int i = 0;
+       for (; i < combo_->count(); ++i) {
                if (name == combo_->text(i).latin1())
                        break;
        }
@@ -183,17 +181,17 @@ void Toolbar::Pimpl::setLayout(string const & layout)
 
 void Toolbar::Pimpl::updateLayoutList(bool force)
 {
-       // if we don't need an update, don't ... 
+       // if we don't need an update, don't ...
        if (combo_->count() && !force)
                return;
+
        LyXTextClass const & tc =
                owner_->buffer()->params.getLyXTextClass();
-       combo_->setUpdatesEnabled(false); 
+
+       combo_->setUpdatesEnabled(false);
+
        combo_->clear();
+
        LyXTextClass::const_iterator cit = tc.begin();
        LyXTextClass::const_iterator end = tc.end();
        for (; cit != end; ++cit) {
@@ -229,7 +227,7 @@ void Toolbar::Pimpl::add(int action)
        if (!toolbars_.size()) {
                toolbars_.push_back(new QToolBar(owner_));
        }
+
        switch (action) {
        case ToolbarDefaults::SEPARATOR:
                toolbars_.back()->addSeparator();
@@ -241,24 +239,20 @@ void Toolbar::Pimpl::add(int action)
                combo_ = new QLComboBox(toolbars_.back());
                QSizePolicy p(QSizePolicy::Minimum, QSizePolicy::Fixed);
                combo_->setSizePolicy(p);
-               combo_->setFocusPolicy(QWidget::TabFocus);
+               combo_->setFocusPolicy(QWidget::ClickFocus);
                combo_->setMinimumWidth(combo_->sizeHint().width());
+
                QObject::connect(combo_, SIGNAL(activated(const QString &)),
                        proxy_.get(), SLOT(layout_selected(const QString &)));
                break;
        }
        default: {
-               char const * tooltip = _(lyxaction.helpText(action)).c_str();
-               QToolButton * tb = 
+               QToolButton * tb =
                        new QToolButton(getIconPixmap(action),
-                       tooltip, tooltip,
+                       _(lyxaction.helpText(action)).c_str(), "",
                        proxy_.get(), SLOT(button_selected()), toolbars_.back());
 
                map_[tb] = action;
-               QToolTip::add(tb, tooltip);
                break;
        }
        }