]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiDelimiter.cpp
Use <cstdint> instead of <boost/cstdint.hpp>
[lyx.git] / src / frontends / qt4 / GuiDelimiter.cpp
index 18937d017ace7723112a73bc6b1d1bd3e8365309..8dc97ffe17bdf186d1aeb3214a8b975032546fdf 100644 (file)
@@ -177,7 +177,7 @@ string getDelimiterName(QListWidgetItem const * lwi)
 }
 
 
-} // anon namespace
+} // namespace
 
 
 GuiDelimiter::GuiDelimiter(GuiView & lv)
@@ -185,7 +185,7 @@ GuiDelimiter::GuiDelimiter(GuiView & lv)
 {
        setupUi(this);
 
-       connect(closePB, SIGNAL(clicked()), this, SLOT(accept()));
+       connect(buttonBox, SIGNAL(rejected()), this, SLOT(accept()));
 
        setFocusProxy(leftLW);
 
@@ -211,7 +211,7 @@ GuiDelimiter::GuiDelimiter(GuiView & lv)
        int const end = nr_latex_delimiters - 1;
        for (int i = 0; i < end; ++i) {
                string const delim = latex_delimiters[i];
-               MathSymbol const & ms = mathSymbol(delim);
+               MathSymbol const & ms = mathSymbol(delim);
                QString symbol(ms.fontcode?
                        QChar(ms.fontcode) : toqstr(docstring(1, ms.unicode)));
                QListWidgetItem * lwi = new QListWidgetItem(symbol);
@@ -236,7 +236,7 @@ GuiDelimiter::GuiDelimiter(GuiView & lv)
        }
 
        for (int i = 0; i != leftLW->count(); ++i) {
-               MathSymbol const & ms = mathSymbol(getDelimiterName(leftLW->item(i)));
+               MathSymbol const & ms = mathSymbol(getDelimiterName(leftLW->item(i)));
                rightLW->addItem(list_items[doMatch(ms.unicode)]->clone());
        }
 
@@ -324,10 +324,34 @@ void GuiDelimiter::updateTeXCode(int size)
        }
 
        texCodeL->setText(qt_("TeX Code: ") + toqstr(code_str));
+
+       // Enable the Swap button with non-matched pairs
+       bool const allow_swap =
+               (doMatch(mathSymbol(getDelimiterName(leftLW->currentItem())).unicode)
+                != mathSymbol(getDelimiterName(rightLW->currentItem())).unicode);
+       swapPB->setEnabled(allow_swap);
+}
+
+
+void  GuiDelimiter::on_buttonBox_clicked(QAbstractButton * button)
+{
+       switch (buttonBox->standardButton(button)) {
+       case QDialogButtonBox::Apply:
+               insert();
+               break;
+       case QDialogButtonBox::Ok:
+               insert();
+       // fall through
+       case QDialogButtonBox::Cancel:
+               accept();
+               break;
+       default:
+               break;
+       }
 }
 
 
-void GuiDelimiter::on_insertPB_clicked()
+void GuiDelimiter::insert()
 {
        if (sizeCO->currentIndex() == 0)
                dispatch(FuncRequest(LFUN_MATH_DELIM, tex_code_));
@@ -336,6 +360,7 @@ void GuiDelimiter::on_insertPB_clicked()
                command = support::subst(command, from_ascii(" "), from_ascii("\" \""));
                dispatch(FuncRequest(LFUN_MATH_BIGDELIM, command));
        }
+       buttonBox->button(QDialogButtonBox::Cancel)->setText(qt_("Close"));
 }
 
 
@@ -350,7 +375,7 @@ void GuiDelimiter::on_leftLW_itemActivated(QListWidgetItem *)
        // do not auto-apply if !matchCB->isChecked()
        if (!matchCB->isChecked())
                return;
-       on_insertPB_clicked();
+       insert();
        accept();
 }
 
@@ -360,7 +385,7 @@ void GuiDelimiter::on_rightLW_itemActivated(QListWidgetItem *)
        // do not auto-apply if !matchCB->isChecked()
        if (!matchCB->isChecked())
                return;
-       on_insertPB_clicked();
+       insert();
        accept();
 }
 
@@ -405,6 +430,43 @@ void GuiDelimiter::on_matchCB_stateChanged(int state)
        updateTeXCode(sizeCO->currentIndex());
 }
 
+void GuiDelimiter::on_swapPB_clicked()
+{
+       // Get current math symbol for each side.
+       MathSymbol const & lms =
+               mathSymbol(getDelimiterName(leftLW->currentItem()));
+       MathSymbol const & rms =
+               mathSymbol(getDelimiterName(rightLW->currentItem()));
+
+       // Swap and match.
+       char_type const lc = doMatch(rms.unicode);
+       char_type const rc = doMatch(lms.unicode);
+
+       // Convert back to QString to locate them in the widget.
+       MathSymbol const & nlms = mathSymbol(texName(lc));
+       MathSymbol const & nrms = mathSymbol(texName(rc));
+       QString lqs(nlms.fontcode ?
+               QChar(nlms.fontcode) : toqstr(docstring(1, nlms.unicode)));
+       QString rqs(nrms.fontcode ?
+               QChar(nrms.fontcode) : toqstr(docstring(1, nrms.unicode)));
+
+       // Handle unencoded "symbol" of "(None)".
+       if (lqs == "?")
+               lqs = qt_("(None)");
+       if(rqs == "?")
+               rqs = qt_("(None)");
+
+       // Locate matching QListWidgetItem.
+       QList<QListWidgetItem *> lwi = leftLW->findItems(lqs, Qt::MatchExactly);
+       QList<QListWidgetItem *> rwi = rightLW->findItems(rqs, Qt::MatchExactly);
+
+       // Select.
+       leftLW->setCurrentItem(lwi.first());
+       rightLW->setCurrentItem(rwi.first());
+
+       updateTeXCode(sizeCO->currentIndex());
+}
+
 
 Dialog * createGuiDelimiter(GuiView & lv) { return new GuiDelimiter(lv); }