From 4f135f2dd6d9240d5336fe477f5f770a42b1bb0d Mon Sep 17 00:00:00 2001 From: Abdelrazak Younes Date: Thu, 5 Apr 2007 12:12:07 +0000 Subject: [PATCH] Rework the delimiter dialog: - ListWidget instead of combo, - matched delimiters on the same row, - immediate insertion on "enter" or "double-click" if the 'match' option is checked. - simplification of the code. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@17731 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/frontends/qt4/QDelimiterDialog.C | 65 +++++++++++++++------------- src/frontends/qt4/QDelimiterDialog.h | 11 +++-- src/frontends/qt4/ui/QDelimiterUi.ui | 59 ++++++++++++------------- 3 files changed, 71 insertions(+), 64 deletions(-) diff --git a/src/frontends/qt4/QDelimiterDialog.C b/src/frontends/qt4/QDelimiterDialog.C index 997c749540..e9abd5def4 100644 --- a/src/frontends/qt4/QDelimiterDialog.C +++ b/src/frontends/qt4/QDelimiterDialog.C @@ -20,7 +20,7 @@ #include #include - +#include #include @@ -31,7 +31,7 @@ namespace frontend { namespace { -char const * delim[] = { +string const delim[] = { "(", ")", "{", "}", "[", "]", "lceil", "rceil", "lfloor", "rfloor", "langle", "rangle", "uparrow", "Uparrow", "downarrow", "Downarrow", @@ -96,39 +96,41 @@ QDelimiterDialog::QDelimiterDialog(QMathDelimiter * form) connect(insertPB, SIGNAL(clicked()), this, SLOT(insertClicked())); setWindowTitle(qt_("LyX: Delimiters")); - - for (size_t i = 0; i != 21; ++i) - delimiters_.append(toqstr(delim[i])); + setFocusProxy(leftLW); // The last element is the empty one. - size_t end = delimiters_.size() - 1; - for (size_t i = 0; i != end; ++i) { - if (delimiters_[i].size() == 1) { - leftCO->addItem(delimiters_[i]); - rightCO->addItem(delimiters_[i]); + for (size_t i = 0; !delim[i].empty(); ++i) { + QString const left_d = toqstr(delim[i]); + QString const right_d = do_match(left_d); + if (left_d.size() == 1) { + leftLW->addItem(left_d); + rightLW->addItem(right_d); } else { - QPixmap pm = QPixmap(toqstr(find_xpm(fromqstr(delimiters_[i])))); - leftCO->addItem(QIcon(pm), delimiters_[i]); - rightCO->addItem(QIcon(pm), delimiters_[i]); + QPixmap left_pm = QPixmap(toqstr(find_xpm(fromqstr(left_d)))); + leftLW->addItem(new QListWidgetItem(QIcon(left_pm), left_d)); + QPixmap right_pm = QPixmap(toqstr(find_xpm(fromqstr(right_d)))); + rightLW->addItem(new QListWidgetItem(QIcon(right_pm), right_d)); } } - leftCO->addItem(qt_("(None)")); - rightCO->addItem(qt_("(None)")); + leftLW->addItem(qt_("(None)")); + rightLW->addItem(qt_("(None)")); sizeCO->addItem(qt_("Variable")); for (int i = 0; *biggui[i]; ++i) sizeCO->addItem(qt_(biggui[i])); - on_leftCO_activated(0); + on_leftLW_currentRowChanged(0); } void QDelimiterDialog::insertClicked() { - QString const left_ = delimiters_[leftCO->currentIndex()]; - QString const right_ = delimiters_[rightCO->currentIndex()]; + QString const left_ = (leftLW->currentRow() < leftLW->count() - 1)? + leftLW->currentItem()->text(): QString(); + QString const right_ = (rightLW->currentRow() < rightLW->count() - 1)? + rightLW->currentItem()->text(): QString(); int const size_ = sizeCO->currentIndex(); if (size_ == 0) { @@ -143,32 +145,37 @@ void QDelimiterDialog::insertClicked() << fix_name(right_, true) << '"'; form_->controller().dispatchBigDelim(os.str()); } +} + +void QDelimiterDialog::on_leftLW_itemActivated(QListWidgetItem *) +{ + if (!matchCB->isChecked()) + return; + + insertClicked(); + accept(); } -void QDelimiterDialog::on_leftCO_activated(int item) +void QDelimiterDialog::on_leftLW_currentRowChanged(int item) { - if (matchCB->isChecked()) { - QString const match = do_match(delimiters_[item]); - rightCO->setCurrentIndex(delimiters_.indexOf(match)); - } + if (matchCB->isChecked()) + rightLW->setCurrentRow(item); } -void QDelimiterDialog::on_rightCO_activated(int item) +void QDelimiterDialog::on_rightLW_currentRowChanged(int item) { - if (matchCB->isChecked()) { - QString const match = do_match(delimiters_[item]); - leftCO->setCurrentIndex(delimiters_.indexOf(match)); - } + if (matchCB->isChecked()) + leftLW->setCurrentRow(item); } void QDelimiterDialog::on_matchCB_stateChanged(int state) { if (state == Qt::Checked) - on_leftCO_activated(leftCO->currentIndex()); + on_leftLW_currentRowChanged(leftLW->currentRow()); } diff --git a/src/frontends/qt4/QDelimiterDialog.h b/src/frontends/qt4/QDelimiterDialog.h index 013a8e3ed1..3a32e7dea0 100644 --- a/src/frontends/qt4/QDelimiterDialog.h +++ b/src/frontends/qt4/QDelimiterDialog.h @@ -14,10 +14,10 @@ #include "ui/QDelimiterUi.h" -#include - #include +class QListWidgetItem; + namespace lyx { namespace frontend { @@ -28,15 +28,14 @@ class QDelimiterDialog : public QDialog, public Ui::QDelimiterUi { public: QDelimiterDialog(QMathDelimiter * form); public Q_SLOTS: - void on_leftCO_activated(int); - void on_rightCO_activated(int); + void on_leftLW_itemActivated(QListWidgetItem *); + void on_leftLW_currentRowChanged(int); + void on_rightLW_currentRowChanged(int); void on_matchCB_stateChanged(int); void insertClicked(); private: /// owning form QMathDelimiter * form_; - /// - QStringList delimiters_; }; } // namespace frontend diff --git a/src/frontends/qt4/ui/QDelimiterUi.ui b/src/frontends/qt4/ui/QDelimiterUi.ui index a2598a6c44..2e8f8b2a45 100644 --- a/src/frontends/qt4/ui/QDelimiterUi.ui +++ b/src/frontends/qt4/ui/QDelimiterUi.ui @@ -5,8 +5,8 @@ 0 0 - 206 - 153 + 193 + 430 @@ -62,60 +62,63 @@ 6 - + - 4 - 4 + 0 + 7 0 0 - + - 42 - 42 + 110 + 16777215 - - 100 - - - QComboBox::AdjustToContents - - 32 - 32 + 16 + 16 + + QListView::Adjust + + + 1 + + + -1 + - + - 4 - 4 + 0 + 7 0 0 - + - 42 - 42 + 110 + 16777215 - - 100 - - 32 - 32 + 16 + 16 + + 1 + @@ -176,8 +179,6 @@ - leftCO - rightCO matchCB sizeCO insertPB -- 2.39.2