The branch, master, has been updated.

- Log -----------------------------------------------------------------

commit e53b5972c39152b5e138e2a0b4c8941dc4d7b998
Author: Juergen Spitzmueller <[email protected]>
Date:   Fri Mar 1 15:59:37 2013 +0100

    Improve math packages GUI

diff --git a/src/BufferParams.cpp b/src/BufferParams.cpp
index 52ba206..b5aafa8 100644
--- a/src/BufferParams.cpp
+++ b/src/BufferParams.cpp
@@ -443,21 +443,31 @@ void BufferParams::use_package(std::string const & p, 
BufferParams::Package u)
 }
 
 
-vector<string> const & BufferParams::auto_packages()
+map<string, string> const & BufferParams::auto_packages()
 {
-       static vector<string> packages;
+       static map<string, string> packages;
        if (packages.empty()) {
                // adding a package here implies a file format change!
-               packages.push_back("amsmath");
-               packages.push_back("amssymb");
-               packages.push_back("cancel");
-               packages.push_back("esint");
-               packages.push_back("mathdots");
-               packages.push_back("mathtools");
-               packages.push_back("mhchem");
-               packages.push_back("stackrel");
-               packages.push_back("stmaryrd");
-               packages.push_back("undertilde");
+               packages["amsmath"] =
+                       N_("The LaTeX package amsmath is only used if AMS 
formula types or symbols from the AMS math toolbars are inserted into 
formulas");
+               packages["amssymb"] =
+                       N_("The LaTeX package amssymb is only used if symbols 
from the AMS math toolbars are inserted into formulas");
+               packages["cancel"] =
+                       N_("The LaTeX package cancel is only used if \\cancel 
commands are used in formulas");
+               packages["esint"] =
+                       N_("The LaTeX package esint is only used if special 
integral symbols are inserted into formulas");
+               packages["mathdots"] =
+                       N_("The LaTeX package mathdots is only used if the 
command \\iddots is inserted into formulas");
+               packages["mathtools"] =
+                       N_("The LaTeX package mathtools is only used if some 
mathematical relations are inserted into formulas");
+               packages["mhchem"] =
+                       N_("The LaTeX package mhchem is only used if either the 
command \\ce or \\cf is inserted into formulas");
+               packages["stackrel"] =
+                       N_("The LaTeX package stackrel is only used if the 
command \\stackrel with subscript is inserted into formulas");
+               packages["stmaryrd"] =
+                       N_("The LaTeX package stmaryrd is only used if symbols 
from the St Mary's Road symbol font for theoretical computer science are 
inserted into formulas");
+               packages["undertilde"] =
+                       N_("The LaTeX package undertilde is only used if you 
use the math frame decoration 'utilde'");
        }
        return packages;
 }
@@ -1026,10 +1036,11 @@ void BufferParams::writeFile(ostream & os) const
 
        os << "\\papersize " << string_papersize[papersize]
           << "\n\\use_geometry " << convert<string>(use_geometry);
-       vector<string> const & packages = auto_packages();
-       for (size_t i = 0; i < packages.size(); ++i)
-               os << "\n\\use_package " << packages[i] << ' '
-                  << use_package(packages[i]);
+       map<string, string> const & packages = auto_packages();
+       for (map<string, string>::const_iterator it = packages.begin();
+            it != packages.end(); ++it)
+               os << "\n\\use_package " << it->first << ' '
+                  << use_package(it->first);
 
        os << "\n\\cite_engine ";
 
diff --git a/src/BufferParams.h b/src/BufferParams.h
index b9e3751..2a669d0 100644
--- a/src/BufferParams.h
+++ b/src/BufferParams.h
@@ -361,7 +361,7 @@ public:
        /// Set whether to load a package such as amsmath or esint.
        void use_package(std::string const & p, Package u);
        /// All packages that can be switched on or off
-       static std::vector<std::string> const & auto_packages();
+       static std::map<std::string, std::string> const & auto_packages();
        /// Split bibliography?
        bool use_bibtopic;
        /// Split the index?
diff --git a/src/frontends/qt4/GuiDocument.cpp 
b/src/frontends/qt4/GuiDocument.cpp
index 40b8dd8..5520826 100644
--- a/src/frontends/qt4/GuiDocument.cpp
+++ b/src/frontends/qt4/GuiDocument.cpp
@@ -130,52 +130,6 @@ char const * backref_opts_gui[] =
 };
 
 
-char const * packages_gui[][4] =
-{
-       {"amsmath",
-        N_("&Use amsmath package automatically"),
-        N_("Use ams&math package"),
-        N_("The LaTeX package amsmath is only used if AMS formula types or 
symbols from the AMS math toolbars are inserted into formulas")},
-       {"amssymb",
-        N_("&Use amssymb package automatically"),
-        N_("Use amssymb package"),
-        N_("The LaTeX package amssymb is only used if symbols from the AMS 
math toolbars are inserted into formulas")},
-       {"cancel",
-        N_("Use cancel package automatically"),
-        N_("Use cancel package"),
-        N_("The LaTeX package cancel is only used if \\cancel commands are 
used in formulas")},
-       {"esint",
-        N_("Use esint package &automatically"),
-        N_("Use &esint package"),
-        N_("The LaTeX package esint is only used if special integral symbols 
are inserted into formulas")},
-       {"mathdots",
-        N_("Use math&dots package automatically"),
-        N_("Use mathdo&ts package"),
-        N_("The LaTeX package mathdots is only used if the command \\iddots is 
inserted into formulas")},
-       {"mathtools",
-        N_("Use mathtools package automatically"),
-        N_("Use mathtools package"),
-        N_("The LaTeX package mathtools is only used if some mathematical 
relations are inserted into formulas")},
-       {"mhchem",
-        N_("Use mhchem &package automatically"),
-        N_("Use mh&chem package"),
-        N_("The LaTeX package mhchem is only used if either the command \\ce 
or \\cf is inserted into formulas")},
-       {"stackrel",
-        N_("Use stackrel package automatically"),
-        N_("Use stackrel package"),
-        N_("The LaTeX package stackrel is only used if the command \\stackrel 
with subscript is inserted into formulas")},
-       {"stmaryrd",
-        N_("Use stmaryrd package automatically"),
-        N_("Use stmaryrd package"),
-        N_("The LaTeX package stmaryrd is only used if symbols from the St 
Mary's Road symbol font for theoretical computer science are inserted into 
formulas")},
-       {"undertilde",
-        N_("Use u&ndertilde package automatically"),
-        N_("Use undertilde pac&kage"),
-        N_("The LaTeX package undertilde is only used if you use the math 
frame decoration 'utilde'")},
-       {"", "", "", ""}
-};
-
-
 vector<string> engine_types_;
 vector<pair<string, QString> > pagestyles;
 
@@ -1195,49 +1149,59 @@ GuiDocument::GuiDocument(GuiView & lv)
 
 
        // maths
-       // FIXME This UI has problems:
-       //       1) It is not generic, packages_gui needs to be changed for 
each new package
-       //       2) Two checkboxes have 4 states, but one is invalid (both 
pressed)
-       //       3) The auto cb is not disabled if the use cb is checked
        mathsModule = new UiWidget<Ui::MathsUi>;
-       vector<string> const & packages = BufferParams::auto_packages();
-        for (size_t i = 0; i < packages.size(); ++i) {
-               // Use the order of BufferParams::auto_packages() for easier
-               // access in applyView() and paramsToDialog()
-               int n = 0;
-               for (n = 0; packages_gui[n][0][0]; n++)
-                       if (packages_gui[n][0] == packages[i])
-                               break;
-               // If this fires somebody changed
-               // BufferParams::auto_packages() without adjusting packages_gui
-               LASSERT(packages_gui[n][0][0], /**/);
-               QString autoText = qt_(packages_gui[n][1]);
-               QString alwaysText = qt_(packages_gui[n][2]);
-               QString autoTooltip = qt_(packages_gui[n][3]);
+       QStringList headers;
+       headers << qt_("Package") << qt_("Load automatically")
+               << qt_("Load always") << qt_("Do not load");
+       mathsModule->packagesTW->setHorizontalHeaderLabels(headers);
+       
mathsModule->packagesTW->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
+       map<string, string> const & packages = BufferParams::auto_packages();
+       mathsModule->packagesTW->setRowCount(packages.size());
+       int i = 0;
+       for (map<string, string>::const_iterator it = packages.begin();
+            it != packages.end(); ++it) {
+               docstring const package = from_ascii(it->first);
+               QString autoTooltip = qt_(it->second);
                QString alwaysTooltip;
-               if (packages[i] == "amsmath")
+               if (package == "amsmath")
                        alwaysTooltip =
                                qt_("The AMS LaTeX packages are always used");
                else
                        alwaysTooltip = toqstr(bformat(
                                _("The LaTeX package %1$s is always used"),
-                               from_ascii(packages[i])));
-               QCheckBox * autoCB = new QCheckBox(autoText, mathsModule);
-               QCheckBox * alwaysCB = new QCheckBox(alwaysText, mathsModule);
-               mathsModule->gridLayout->addWidget(autoCB, 2 * i, 0);
-               mathsModule->gridLayout->addWidget(alwaysCB, 2 * i + 1, 0);
-               autoCB->setToolTip(autoTooltip);
-               alwaysCB->setToolTip(alwaysTooltip);
-               connect(autoCB, SIGNAL(toggled(bool)),
-                       alwaysCB, SLOT(setDisabled(bool)));
-               connect(autoCB, SIGNAL(clicked()),
+                               package));
+               QString neverTooltip;
+               if (package == "amsmath")
+                       neverTooltip =
+                               qt_("The AMS LaTeX packages are never used");
+               else
+                       neverTooltip = toqstr(bformat(
+                               _("The LaTeX package %1$s is never used"),
+                               package));
+               QRadioButton * autoRB = new QRadioButton(mathsModule);
+               QRadioButton * alwaysRB = new QRadioButton(mathsModule);
+               QRadioButton * neverRB = new QRadioButton(mathsModule);
+               QButtonGroup * packageGroup = new QButtonGroup(mathsModule);
+               packageGroup->addButton(autoRB);
+               packageGroup->addButton(alwaysRB);
+               packageGroup->addButton(neverRB);
+               autoRB->setToolTip(autoTooltip);
+               alwaysRB->setToolTip(alwaysTooltip);
+               neverRB->setToolTip(neverTooltip);
+               QTableWidgetItem * pack = new QTableWidgetItem(toqstr(package));
+               mathsModule->packagesTW->setItem(i, 0, pack);
+               mathsModule->packagesTW->setCellWidget(i, 1, autoRB);
+               mathsModule->packagesTW->setCellWidget(i, 2, alwaysRB);
+               mathsModule->packagesTW->setCellWidget(i, 3, neverRB);
+
+               connect(autoRB, SIGNAL(clicked()),
                        this, SLOT(change_adaptor()));
-               connect(alwaysCB, SIGNAL(clicked()),
+               connect(alwaysRB, SIGNAL(clicked()),
                        this, SLOT(change_adaptor()));
+               connect(neverRB, SIGNAL(clicked()),
+                       this, SLOT(change_adaptor()));
+               ++i;
        }
-       QSpacerItem * spacer = new QSpacerItem(20, 20, QSizePolicy::Minimum,
-                                              QSizePolicy::Expanding);
-       mathsModule->gridLayout->addItem(spacer, 2 * packages.size(), 0);
 
 
        // latex class
@@ -2653,20 +2617,26 @@ void GuiDocument::applyView()
        modulesToParams(bp_);
 
        // Math
-       vector<string> const & packages = BufferParams::auto_packages();
-        for (size_t n = 0; n < packages.size(); ++n) {
-               QCheckBox * autoCB = static_cast<QCheckBox *>(
-                       mathsModule->gridLayout->itemAtPosition(2 * n, 
0)->widget());
-               if (autoCB->isChecked())
-                       bp_.use_package(packages[n], 
BufferParams::package_auto);
-               else {
-                       QCheckBox * alwaysCB = static_cast<QCheckBox *>(
-                               mathsModule->gridLayout->itemAtPosition(2 * n + 
1, 0)->widget());
-                       if (alwaysCB->isChecked())
-                               bp_.use_package(packages[n], 
BufferParams::package_on);
-                       else
-                               bp_.use_package(packages[n], 
BufferParams::package_off);
+       map<string, string> const & packages = BufferParams::auto_packages();
+       for (map<string, string>::const_iterator it = packages.begin();
+            it != packages.end(); ++it) {
+               QTableWidgetItem * item = 
mathsModule->packagesTW->findItems(toqstr(it->first), Qt::MatchExactly)[0];
+               if (!item)
+                       continue;
+               int row = mathsModule->packagesTW->row(item);
+               QRadioButton * rb = 
(QRadioButton*)mathsModule->packagesTW->cellWidget(row, 1);
+               if (rb->isChecked()) {
+                       bp_.use_package(it->first, BufferParams::package_auto);
+                       continue;
                }
+               rb = (QRadioButton*)mathsModule->packagesTW->cellWidget(row, 2);
+               if (rb->isChecked()) {
+                       bp_.use_package(it->first, BufferParams::package_on);
+                       continue;
+               }
+               rb = (QRadioButton*)mathsModule->packagesTW->cellWidget(row, 3);
+               if (rb->isChecked())
+                       bp_.use_package(it->first, BufferParams::package_off);
        }
 
        // Page Layout
@@ -3078,14 +3048,30 @@ void GuiDocument::paramsToDialog()
                latexModule->psdriverCO->setCurrentIndex(nitem);
        updateModuleInfo();
 
-       vector<string> const & packages = BufferParams::auto_packages();
-        for (size_t n = 0; n < packages.size(); ++n) {
-               QCheckBox * alwaysCB = static_cast<QCheckBox *>(
-                       mathsModule->gridLayout->itemAtPosition(2 * n + 1, 
0)->widget());
-               alwaysCB->setChecked(bp_.use_package(packages[n]) == 
BufferParams::package_on);
-               QCheckBox * autoCB = static_cast<QCheckBox *>(
-                       mathsModule->gridLayout->itemAtPosition(2 * n, 
0)->widget());
-               autoCB->setChecked(bp_.use_package(packages[n]) == 
BufferParams::package_auto);
+       map<string, string> const & packages = BufferParams::auto_packages();
+       for (map<string, string>::const_iterator it = packages.begin();
+            it != packages.end(); ++it) {
+               QTableWidgetItem * item = 
mathsModule->packagesTW->findItems(toqstr(it->first), Qt::MatchExactly)[0];
+               if (!item)
+                       continue;
+               int row = mathsModule->packagesTW->row(item);
+               switch (bp_.use_package(it->first)) {
+                       case BufferParams::package_off: {
+                               QRadioButton * rb = 
(QRadioButton*)mathsModule->packagesTW->cellWidget(row, 3);
+                               rb->setChecked(true);
+                               break;
+                       }
+                       case BufferParams::package_on: {
+                               QRadioButton * rb = 
(QRadioButton*)mathsModule->packagesTW->cellWidget(row, 2);
+                               rb->setChecked(true);
+                               break;
+                       }
+                       case BufferParams::package_auto: {
+                               QRadioButton * rb = 
(QRadioButton*)mathsModule->packagesTW->cellWidget(row, 1);
+                               rb->setChecked(true);
+                               break;
+                       }
+               }
        }
 
        switch (bp_.spacing().getSpace()) {
diff --git a/src/frontends/qt4/ui/MathsUi.ui b/src/frontends/qt4/ui/MathsUi.ui
index 4c0f116..2d132a1 100644
--- a/src/frontends/qt4/ui/MathsUi.ui
+++ b/src/frontends/qt4/ui/MathsUi.ui
@@ -6,14 +6,37 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>351</width>
-    <height>261</height>
+    <width>432</width>
+    <height>291</height>
    </rect>
   </property>
   <property name="windowTitle">
    <string/>
   </property>
   <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0">
+    <widget class="QTableWidget" name="packagesTW">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="columnCount">
+      <number>4</number>
+     </property>
+     <attribute name="horizontalHeaderStretchLastSection">
+      <bool>false</bool>
+     </attribute>
+     <attribute name="verticalHeaderVisible">
+      <bool>false</bool>
+     </attribute>
+     <column/>
+     <column/>
+     <column/>
+     <column/>
+    </widget>
+   </item>
   </layout>
  </widget>
  <includes>

-----------------------------------------------------------------------

Summary of changes:
 src/BufferParams.cpp              |   43 ++++++---
 src/BufferParams.h                |    2 +-
 src/frontends/qt4/GuiDocument.cpp |  186 +++++++++++++++++--------------------
 src/frontends/qt4/ui/MathsUi.ui   |   27 +++++-
 4 files changed, 139 insertions(+), 119 deletions(-)


hooks/post-receive
-- 
The LyX Source Repository

Reply via email to