X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiBranches.cpp;h=ab91587098bc2c4f3d28ea2df73d0eb7325df729;hb=b7f6b979d0f889f08e735f35378bb20ba3788b4b;hp=1529a7880d2cc7309311fd0093c5976a52a2dbf8;hpb=a1cec91afaca91968b46e695533c10ad2a3f73d3;p=lyx.git diff --git a/src/frontends/qt4/GuiBranches.cpp b/src/frontends/qt4/GuiBranches.cpp index 1529a7880d..ab91587098 100644 --- a/src/frontends/qt4/GuiBranches.cpp +++ b/src/frontends/qt4/GuiBranches.cpp @@ -13,15 +13,23 @@ #include "GuiBranches.h" +#include "ColorCache.h" #include "GuiApplication.h" #include "Validator.h" #include "qt_helpers.h" +#include "ui_BranchesUnknownUi.h" + +#include "frontends/alert.h" + +#include "Buffer.h" #include "BufferParams.h" -#include "controllers/ControlDocument.h" +#include "support/gettext.h" #include "support/lstrings.h" +#include +#include #include #include #include @@ -29,29 +37,85 @@ #include #include +#ifdef KeyPress +#undef KeyPress +#endif namespace lyx { namespace frontend { -GuiBranches::GuiBranches(QWidget * parent, Qt::WFlags f) - : QWidget(parent, f) +GuiBranches::GuiBranches(QWidget * parent) + : QWidget(parent) { setupUi(this); branchesTW->setColumnCount(3); branchesTW->headerItem()->setText(0, qt_("Branch")); branchesTW->headerItem()->setText(1, qt_("Activated")); branchesTW->headerItem()->setText(2, qt_("Color")); + branchesTW->headerItem()->setText(3, qt_("Filename Suffix")); branchesTW->setSortingEnabled(true); + branchesTW->resizeColumnToContents(1); + branchesTW->resizeColumnToContents(2); + + undef_ = new BranchesUnknownDialog(this); + undef_bc_.setPolicy(ButtonPolicy::OkCancelPolicy); + undef_bc_.setCancel(undef_->cancelPB); + + connect(undef_->branchesLW, SIGNAL(itemSelectionChanged()), + this, SLOT(unknownBranchSelChanged())); + connect(undef_->addSelectedPB, SIGNAL(clicked()), + this, SLOT(addUnknown())); + connect(undef_->addAllPB, SIGNAL(clicked()), + this, SLOT(addAllUnknown())); + connect(undef_->addSelectedPB, SIGNAL(clicked()), + undef_, SLOT(accept())); + connect(undef_->addAllPB, SIGNAL(clicked()), + undef_, SLOT(accept())); + connect(undef_->cancelPB, SIGNAL(clicked()), + undef_, SLOT(reject())); + + newBranchLE->installEventFilter(this); + newBranchLE->setValidator(new NoNewLineValidator(newBranchLE)); } + +bool GuiBranches::eventFilter(QObject * obj, QEvent * event) +{ + QEvent::Type etype = event->type(); + if (etype == QEvent::KeyPress + && obj == newBranchLE + && addBranchPB->isEnabled()) { + QKeyEvent * keyEvent = static_cast(event); + int const keyPressed = keyEvent->key(); + Qt::KeyboardModifiers const keyModifiers = keyEvent->modifiers(); + + if (keyPressed == Qt::Key_Enter || keyPressed == Qt::Key_Return) { + if (!keyModifiers) { + on_addBranchPB_pressed(); + } else if (keyModifiers == Qt::ControlModifier + || keyModifiers == Qt::KeypadModifier + || keyModifiers == (Qt::ControlModifier | Qt::KeypadModifier)) { + on_addBranchPB_pressed(); + newBranchLE->clearFocus(); + okPressed(); + } + event->accept(); + return true; + } + } + return QObject::eventFilter(obj, event); +} + + void GuiBranches::update(BufferParams const & params) { branchlist_ = params.branchlist(); - update(); + updateView(); } -void GuiBranches::update() + +void GuiBranches::updateView() { // store the selected branch QTreeWidgetItem * item = branchesTW->currentItem(); @@ -64,58 +128,108 @@ void GuiBranches::update() BranchList::const_iterator it = branchlist_.begin(); BranchList::const_iterator const end = branchlist_.end(); for (; it != end; ++it) { - QTreeWidgetItem * newItem = - new QTreeWidgetItem(branchesTW); + QTreeWidgetItem * newItem = new QTreeWidgetItem(branchesTW); - QString const bname = toqstr(it->getBranch()); + QString const bname = toqstr(it->branch()); newItem->setText(0, bname); + newItem->setText(1, it->isSelected() ? qt_("Yes") : qt_("No")); - QString const sel = it->getSelected() ? qt_("Yes") : qt_("No"); - newItem->setText(1, sel); - - QColor const itemcolor = rgb2qcolor(it->getColor()); + QColor const itemcolor = rgb2qcolor(it->color()); if (itemcolor.isValid()) { QPixmap coloritem(30, 10); coloritem.fill(itemcolor); newItem->setIcon(2, QIcon(coloritem)); } + newItem->setText(3, it->hasFileNameSuffix() ? qt_("Yes") : qt_("No")); // restore selected branch if (bname == sel_branch) { branchesTW->setCurrentItem(newItem); branchesTW->setItemSelected(newItem, true); } } + unknownPB->setEnabled(!unknown_branches_.isEmpty()); + bool const have_sel = + !branchesTW->selectedItems().isEmpty(); + removePB->setEnabled(have_sel); + renamePB->setEnabled(have_sel); + colorPB->setEnabled(have_sel); + activatePB->setEnabled(have_sel); + suffixPB->setEnabled(have_sel); // emit signal changed(); } + void GuiBranches::apply(BufferParams & params) const { params.branchlist() = branchlist_; } + +void GuiBranches::on_newBranchLE_textChanged(QString) +{ + QString const new_branch = newBranchLE->text(); + addBranchPB->setEnabled(!new_branch.isEmpty()); +} + + void GuiBranches::on_addBranchPB_pressed() { QString const new_branch = newBranchLE->text(); - if (!new_branch.isEmpty()) { - branchlist_.add(qstring_to_ucs4(new_branch)); - newBranchLE->clear(); - update(); - } + branchlist_.add(qstring_to_ucs4(new_branch)); + newBranchLE->clear(); + addBranchPB->setEnabled(false); + updateView(); } void GuiBranches::on_removePB_pressed() { - QTreeWidgetItem * selItem = - branchesTW->currentItem(); + QTreeWidgetItem * selItem = branchesTW->currentItem(); QString sel_branch; if (selItem != 0) sel_branch = selItem->text(0); if (!sel_branch.isEmpty()) { branchlist_.remove(qstring_to_ucs4(sel_branch)); newBranchLE->clear(); - update(); + updateView(); + } +} + + +void GuiBranches::on_renamePB_pressed() +{ + QTreeWidgetItem * selItem = branchesTW->currentItem(); + QString sel_branch; + if (selItem != 0) + sel_branch = selItem->text(0); + if (!sel_branch.isEmpty()) { + docstring newname; + docstring const oldname = qstring_to_ucs4(sel_branch); + if (Alert::askForText(newname, _("Enter new branch name"), oldname)) { + if (newname.empty() || oldname == newname) + return; + bool success = false; + if (branchlist_.find(newname)) { + docstring text = support::bformat( + _("A branch with the name \"%1$s\" already exists.\n" + "Do you want to merge branch \"%2$s\" with that one?"), + newname, oldname); + if (frontend::Alert::prompt(_("Branch already exists"), + text, 0, 1, _("&Merge"), _("&Cancel")) == 0) + success = branchlist_.rename(oldname, newname, true); + } else + success = branchlist_.rename(oldname, newname); + newBranchLE->clear(); + updateView(); + + if (!success) + Alert::error(_("Renaming failed"), + _("The branch could not be renamed.")); + else + // emit signal + renameBranches(oldname, newname); + } } } @@ -126,12 +240,32 @@ void GuiBranches::on_activatePB_pressed() } +void GuiBranches::on_suffixPB_pressed() +{ + toggleSuffix(branchesTW->currentItem()); +} + + void GuiBranches::on_branchesTW_itemDoubleClicked(QTreeWidgetItem * item, int col) { if (col < 2) toggleBranch(item); - else + else if (col == 2) toggleColor(item); + else if (col == 3) + toggleSuffix(item); +} + + +void GuiBranches::on_branchesTW_itemSelectionChanged() +{ + bool const have_sel = + !branchesTW->selectedItems().isEmpty(); + removePB->setEnabled(have_sel); + renamePB->setEnabled(have_sel); + colorPB->setEnabled(have_sel); + activatePB->setEnabled(have_sel); + suffixPB->setEnabled(have_sel); } @@ -141,13 +275,13 @@ void GuiBranches::toggleBranch(QTreeWidgetItem * item) return; QString sel_branch = item->text(0); - if (!sel_branch.isEmpty()) { - bool const selected = item->text(1) == qt_("Yes"); - Branch * branch = branchlist_.find(qstring_to_ucs4(sel_branch)); - if (branch && branch->setSelected(!selected)) { - newBranchLE->clear(); - update(); - } + if (sel_branch.isEmpty()) + return; + + Branch * branch = branchlist_.find(qstring_to_ucs4(sel_branch)); + if (branch && branch->setSelected(!branch->isSelected())) { + newBranchLE->clear(); + updateView(); } } @@ -164,25 +298,87 @@ void GuiBranches::toggleColor(QTreeWidgetItem * item) return; QString sel_branch = item->text(0); - if (!sel_branch.isEmpty()) { - docstring current_branch = qstring_to_ucs4(sel_branch); - Branch * branch = - branchlist_.find(current_branch); - if (!branch) - return; - - QColor const initial = rgb2qcolor(branch->getColor()); - QColor ncol(QColorDialog::getColor(initial, qApp->focusWidget())); - if (ncol.isValid()){ - // add the color to the branchlist - branch->setColor(fromqstr(ncol.name())); - newBranchLE->clear(); - update(); + if (sel_branch.isEmpty()) + return; + + docstring current_branch = qstring_to_ucs4(sel_branch); + Branch * branch = branchlist_.find(current_branch); + if (!branch) + return; + + QColor const initial = rgb2qcolor(branch->color()); + QColor ncol = QColorDialog::getColor(initial, qApp->focusWidget()); + if (!ncol.isValid()) + return; + + // add the color to the branchlist + branch->setColor(fromqstr(ncol.name())); + newBranchLE->clear(); + updateView(); +} + + +void GuiBranches::toggleSuffix(QTreeWidgetItem * item) +{ + if (item == 0) + return; + + QString sel_branch = item->text(0); + if (sel_branch.isEmpty()) + return; + + Branch * branch = branchlist_.find(qstring_to_ucs4(sel_branch)); + if (branch) { + branch->setFileNameSuffix(!branch->hasFileNameSuffix()); + newBranchLE->clear(); + updateView(); + } +} + + +void GuiBranches::on_unknownPB_pressed() +{ + undef_->branchesLW->clear(); + for (int i = 0; i != unknown_branches_.count(); ++i) { + if (branchesTW->findItems(unknown_branches_[i], Qt::MatchExactly, 0).empty()) + undef_->branchesLW->addItem(unknown_branches_[i]); + } + unknownBranchSelChanged(); + undef_->exec(); +} + + +void GuiBranches::addUnknown() +{ + QList selItems = + undef_->branchesLW->selectedItems(); + + QList::const_iterator it = selItems.begin(); + for (; it != selItems.end() ; ++it) { + QListWidgetItem const * new_branch = *it; + if (new_branch) { + branchlist_.add(qstring_to_ucs4(new_branch->text())); + updateView(); } } } + +void GuiBranches::addAllUnknown() +{ + undef_->branchesLW->selectAll(); + addUnknown(); +} + + +void GuiBranches::unknownBranchSelChanged() +{ + undef_->addSelectedPB->setEnabled( + !undef_->branchesLW->selectedItems().isEmpty()); +} + + } // namespace frontend } // namespace lyx -#include "GuiBranches_moc.cpp" +#include "moc_GuiBranches.cpp"