]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiToolbar.cpp
reduce line noise
[lyx.git] / src / frontends / qt4 / GuiToolbar.cpp
index 9c58a2cab3bb5573f2a123253d06d4e932c39aa9..a7e1301a6473ebf1d57942870085002653162a2f 100644 (file)
@@ -23,6 +23,7 @@
 #include "IconPalette.h"
 #include "Layout.h"
 #include "LyXFunc.h"
+#include "TextClass.h"
 #include "ToolbarBackend.h"
 
 #include "GuiView.h"
@@ -32,7 +33,9 @@
 #include "Action.h"
 #include "qt_helpers.h"
 #include "InsertTableWidget.h"
+#include "LyXRC.h"
 
+#include "support/filetools.h"
 #include "support/lstrings.h"
 #include "support/lyxalgo.h" // sorted
 
 #include <QAction>
 #include <QPixmap>
 
+#include <boost/assert.hpp>
+
 
 static void initializeResources()
 {
-       extern void qInitResources();
        static bool initialized = false;
        if (!initialized) {
-               qInitResources();
+               Q_INIT_RESOURCE(Resources); 
                initialized = true;
        }
 }
@@ -60,6 +64,7 @@ namespace frontend {
 using std::string;
 using std::endl;
 
+using support::libFileSearch;
 using support::subst;
 using support::compare;
 
@@ -156,9 +161,8 @@ string const find_png(string const & name)
                png_name = subst(png_name, "!", "negthinspace");
        }
 
-       LYXERR(Debug::GUI) << "find_png(" << name << ")\n"
-                          << "Looking for math PNG called \""
-                          << png_name << '"' << std::endl;
+       LYXERR(Debug::GUI, "find_png(" << name << ")\n"
+               << "Looking for math PNG called \"" << png_name << '"');
        return png_name;
 }
 
@@ -172,15 +176,24 @@ static QIcon getIcon(FuncRequest const & f, bool unknown)
        QPixmap pm;
        string name1;
        string name2;
+       string path;
+       string fullname;
 
        switch (f.action) {
        case LFUN_MATH_INSERT:
-               if (!f.argument().empty())
-                       name1 = "math/" + find_png(to_utf8(f.argument()).substr(1));
+               if (!f.argument().empty()) {
+                       path = "math/";
+                       name1 = find_png(to_utf8(f.argument()).substr(1));
+               }
                break;
        case LFUN_MATH_DELIM:
        case LFUN_MATH_BIGDELIM:
-               name1 = "math/" + find_png(to_utf8(f.argument()));
+               path = "math/";
+               name1 = find_png(to_utf8(f.argument()));
+               break;
+       case LFUN_CALL:
+               path = "commands/";
+               name1 = to_utf8(f.argument());
                break;
        default:
                name2 = lyxaction.getActionName(f.action);
@@ -190,15 +203,23 @@ static QIcon getIcon(FuncRequest const & f, bool unknown)
                        name1 = subst(name2 + ' ' + to_utf8(f.argument()), ' ', '_');
        }
 
-       if (pm.load(":/images/" + toqstr(name1) + ".png"))
+       fullname = libFileSearch("images/" + path, name1, "png").absFilename();
+       if (pm.load(toqstr(fullname)))
+               return pm;
+
+       fullname = libFileSearch("images/" + path, name2, "png").absFilename();
+       if (pm.load(toqstr(fullname)))
+               return pm;
+
+       if (pm.load(":/images/" + toqstr(path + name1) + ".png"))
                return pm;
 
-       if (pm.load(":/images/" + toqstr(name2) + ".png"))
+       if (pm.load(":/images/" + toqstr(path + name2) + ".png"))
                return pm;
 
-       LYXERR(Debug::GUI) << "Cannot find icon for command \""
+       LYXERR(Debug::GUI, "Cannot find icon for command \""
                           << lyxaction.getActionName(f.action)
-                          << '(' << to_utf8(f.argument()) << ")\"" << endl;
+                          << '(' << to_utf8(f.argument()) << ")\"");
        if (unknown)
                pm.load(":/images/unknown.png");
 
@@ -218,7 +239,7 @@ static TextClass const & textClass(LyXView const & lv)
 //
 /////////////////////////////////////////////////////////////////////
 
-GuiLayoutBox::GuiLayoutBox(GuiViewBase & owner)
+GuiLayoutBox::GuiLayoutBox(GuiView & owner)
        : owner_(owner)
 {
        setSizeAdjustPolicy(QComboBox::AdjustToContents);
@@ -253,6 +274,29 @@ void GuiLayoutBox::set(docstring const & layout)
 }
 
 
+void GuiLayoutBox::addItemSort(QString const & item, bool sorted)
+{
+       int const end = count();
+       if (!sorted || end < 2 || item[0].category() != QChar::Letter_Uppercase) {
+               addItem(item);
+               return;
+       }
+
+       // Let the default one be at the beginning
+       int i = 1;
+       for (setCurrentIndex(i); currentText() < item;) {
+               // e.g. --Separator--
+               if (currentText()[0].category() != QChar::Letter_Uppercase)
+                       break;
+               if (++i == end)
+                       break;
+               setCurrentIndex(i);
+       }
+
+       insertItem(i, item);
+}
+
+
 void GuiLayoutBox::updateContents()
 {
        TextClass const & tc = textClass(owner_);
@@ -264,9 +308,11 @@ void GuiLayoutBox::updateContents()
        TextClass::const_iterator const end = tc.end();
        for (; it != end; ++it) {
                // ignore obsolete entries
-               addItem(toqstr(translateIfPossible((*it)->name())));
+               addItemSort(toqstr(translateIfPossible((*it)->name())), lyxrc.sort_layouts);
        }
 
+       setCurrentIndex(0);
+
        // needed to recalculate size hint
        hide();
        setMinimumWidth(sizeHint().width());
@@ -304,7 +350,7 @@ void GuiLayoutBox::selected(const QString & str)
 /////////////////////////////////////////////////////////////////////
 
 
-GuiToolbar::GuiToolbar(ToolbarInfo const & tbinfo, GuiViewBase & owner)
+GuiToolbar::GuiToolbar(ToolbarInfo const & tbinfo, GuiView & owner)
        : QToolBar(qt_(tbinfo.gui_name), &owner), owner_(owner),
          layout_(0), command_buffer_(0)
 {