]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiIndices.cpp
Use <cstdint> instead of <boost/cstdint.hpp>
[lyx.git] / src / frontends / qt4 / GuiIndices.cpp
index d44a377d1317935de709862f651fd3f9d5eeaa7c..7c7a61014af6decd03a700daf2174ba882a99d86 100644 (file)
@@ -44,7 +44,8 @@ namespace frontend {
 
 
 GuiIndices::GuiIndices(QWidget * parent)
-       : QWidget(parent)
+       : QWidget(parent), readonly_(false),
+         use_indices_(false)
 {
        setupUi(this);
        indicesTW->setColumnCount(2);
@@ -52,27 +53,52 @@ GuiIndices::GuiIndices(QWidget * parent)
        indicesTW->headerItem()->setText(1, qt_("Label Color"));
        indicesTW->setSortingEnabled(true);
 
+       // NOTE: we do not provide "custom" here for security reasons!
        indexCO->clear();
        indexCO->addItem(qt_("Default"), QString("default"));
-       for (vector<string>::const_iterator it = lyxrc.index_alternatives.begin();
+       for (set<string>::const_iterator it = lyxrc.index_alternatives.begin();
                             it != lyxrc.index_alternatives.end(); ++it) {
                QString const command = toqstr(*it).left(toqstr(*it).indexOf(" "));
                indexCO->addItem(command, command);
        }
+
+       indexOptionsLE->setValidator(new NoNewLineValidator(indexOptionsLE));
+       newIndexLE->setValidator(new NoNewLineValidator(newIndexLE));
 }
 
-void GuiIndices::update(BufferParams const & params)
+
+void GuiIndices::updateWidgets()
 {
+       bool const have_sel =
+               !indicesTW->selectedItems().isEmpty();
+
+       indexCO->setEnabled(!readonly_);
+       indexOptionsLE->setEnabled(
+               indexCO->itemData(indexCO->currentIndex()).toString() != "default");
+       indexOptionsLE->setReadOnly(readonly_);
+
+       multipleIndicesCB->setEnabled(!readonly_);
+       indicesTW->setEnabled(use_indices_);
+       newIndexLE->setEnabled(use_indices_);
+       newIndexLE->setReadOnly(readonly_);
+       newIndexLA->setEnabled(use_indices_);
+       addIndexPB->setEnabled(use_indices_ && !readonly_
+                              && !newIndexLE->text().isEmpty());
+       availableLA->setEnabled(use_indices_);
+       removePB->setEnabled(use_indices_ && have_sel && !readonly_);
+       colorPB->setEnabled(use_indices_ && have_sel && !readonly_);
+       renamePB->setEnabled(use_indices_ && have_sel && !readonly_);
+}
+
+
+void GuiIndices::update(BufferParams const & params, bool const readonly)
+{
+       use_indices_ = params.use_indices;
+       readonly_ = readonly;
        indiceslist_ = params.indiceslist();
        multipleIndicesCB->setChecked(params.use_indices);
-       bool const state = params.use_indices;
-       indicesTW->setEnabled(state);
-       newIndexLE->setEnabled(state);
-       newIndexLA->setEnabled(state);
-       addIndexPB->setEnabled(state);
-       availableLA->setEnabled(state);
-       removePB->setEnabled(state);
-       colorPB->setEnabled(state);
+
+       updateWidgets();
 
        string command;
        string options =
@@ -81,13 +107,13 @@ void GuiIndices::update(BufferParams const & params)
        int const pos = indexCO->findData(toqstr(command));
        if (pos != -1) {
                indexCO->setCurrentIndex(pos);
-               indexOptionsED->setText(toqstr(options).trimmed());
+               indexOptionsLE->setText(toqstr(options).trimmed());
        } else {
-               indexCO->setCurrentIndex(0);
-               indexOptionsED->clear();
+               // We reset to default if we do not know the specified compiler
+               // This is for security reasons
+               indexCO->setCurrentIndex(indexCO->findData(toqstr("default")));
+               indexOptionsLE->clear();
        }
-       indexOptionsED->setEnabled(
-               indexCO->currentIndex() != 0);
 
        updateView();
 }
@@ -123,6 +149,9 @@ void GuiIndices::updateView()
                        indicesTW->setItemSelected(newItem, true);
                }
        }
+       indicesTW->resizeColumnToContents(0);
+
+       updateWidgets();
        // emit signal
        changed();
 }
@@ -136,22 +165,29 @@ void GuiIndices::apply(BufferParams & params) const
        string const index_command =
                fromqstr(indexCO->itemData(
                        indexCO->currentIndex()).toString());
-       if (index_command == "default")
+       string const index_options = fromqstr(indexOptionsLE->text());
+       if (index_command == "default" || index_options.empty())
                params.index_command = index_command;
        else
-               params.index_command = index_command + " "
-                       + fromqstr(indexOptionsED->text());
+               params.index_command = index_command + " " + index_options;
 }
 
 
-void GuiIndices::on_indexCO_activated(int n)
+void GuiIndices::on_indexCO_activated(int)
 {
-       indexOptionsED->setEnabled(n != 0);
+       updateWidgets();
        changed();
 }
 
 
-void GuiIndices::on_indexOptionsED_textChanged(QString)
+void GuiIndices::on_newIndexLE_textChanged(QString)
+{
+       updateWidgets();
+       changed();
+}
+
+
+void GuiIndices::on_indexOptionsLE_textChanged(QString)
 {
        changed();
 }
@@ -175,9 +211,9 @@ void GuiIndices::on_removePB_pressed()
        if (selItem != 0)
                sel_index = selItem->text(0);
        if (!sel_index.isEmpty()) {
-               if (indiceslist_.find(qstring_to_ucs4(sel_index)) == 
+               if (indiceslist_.find(qstring_to_ucs4(sel_index)) ==
                    indiceslist_.findShortcut(from_ascii("idx"))) {
-                       Alert::error(_("Cannot remove standard index"), 
+                       Alert::error(_("Cannot remove standard index"),
                              _("The default index cannot be removed."));
                              return;
                }
@@ -196,16 +232,18 @@ void GuiIndices::on_renamePB_clicked()
                sel_index = selItem->text(0);
        if (!sel_index.isEmpty()) {
                docstring newname;
-               bool success = false;
-               if (Alert::askForText(newname, _("Enter new index name"))) {
-                       success = indiceslist_.rename(qstring_to_ucs4(sel_index), newname);
+               docstring const oldname = qstring_to_ucs4(sel_index);
+               if (Alert::askForText(newname, _("Enter new index name"), oldname)) {
+                       if (newname.empty() || oldname == newname)
+                               return;
+                       bool success = indiceslist_.rename(qstring_to_ucs4(sel_index), newname);
                        newIndexLE->clear();
                        updateView();
+                       if (!success)
+                               Alert::error(_("Renaming failed"),
+                                     _("The index could not be renamed. "
+                                       "Check if the new name already exists."));
                }
-               if (!success)
-                       Alert::error(_("Renaming failed"), 
-                             _("The index could not be renamed. "
-                               "Check if the new name already exists."));
        }
 }
 
@@ -216,21 +254,22 @@ void GuiIndices::on_indicesTW_itemDoubleClicked(QTreeWidgetItem * item, int /*co
 }
 
 
+void GuiIndices::on_indicesTW_itemSelectionChanged()
+{
+       updateWidgets();
+}
+
+
 void GuiIndices::on_colorPB_clicked()
 {
        toggleColor(indicesTW->currentItem());
 }
 
 
-void GuiIndices::on_multipleIndicesCB_toggled(bool const state)
+void GuiIndices::on_multipleIndicesCB_toggled(bool const b)
 {
-       indicesTW->setEnabled(state);
-       newIndexLE->setEnabled(state);
-       newIndexLA->setEnabled(state);
-       addIndexPB->setEnabled(state);
-       availableLA->setEnabled(state);
-       removePB->setEnabled(state);
-       colorPB->setEnabled(state);
+       use_indices_ = b;
+       updateWidgets();
        // emit signal
        changed();
 }