]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiDelimiter.cpp
Revert "Mark some intentional fall-throughs (in a way understandable to gcc)"
[lyx.git] / src / frontends / qt4 / GuiDelimiter.cpp
index 18937d017ace7723112a73bc6b1d1bd3e8365309..683168c38a41c87f528aea61593ac7efa4379cb1 100644 (file)
@@ -177,7 +177,7 @@ string getDelimiterName(QListWidgetItem const * lwi)
 }
 
 
-} // anon namespace
+} // namespace
 
 
 GuiDelimiter::GuiDelimiter(GuiView & lv)
@@ -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,6 +324,12 @@ 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);
 }
 
 
@@ -405,6 +411,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); }