Mercurial > hg > easyhg
diff src/confirmcommentdialog.cpp @ 370:b9c153e00e84
Move source files to src/
author | Chris Cannam |
---|---|
date | Thu, 24 Mar 2011 10:27:51 +0000 |
parents | confirmcommentdialog.cpp@fd9dc5a457d8 |
children | 69b2338c06e1 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/confirmcommentdialog.cpp Thu Mar 24 10:27:51 2011 +0000 @@ -0,0 +1,257 @@ +/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ + +/* + EasyMercurial + + Based on hgExplorer by Jari Korhonen + Copyright (c) 2010 Jari Korhonen + Copyright (c) 2011 Chris Cannam + Copyright (c) 2011 Queen Mary, University of London + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. See the file + COPYING included with this distribution for more information. +*/ + +#include "confirmcommentdialog.h" +#include "common.h" + +#include <QMessageBox> +#include <QInputDialog> +#include <QGridLayout> +#include <QLabel> +#include <QTextEdit> +#include <QDialogButtonBox> + +ConfirmCommentDialog::ConfirmCommentDialog(QWidget *parent, + QString title, + QString introText, + QString initialComment, + QString okButtonText) : + QDialog(parent) +{ + setWindowTitle(title); + + QGridLayout *layout = new QGridLayout; + setLayout(layout); + QLabel *label = new QLabel(introText); + label->setWordWrap(true); + layout->addWidget(label, 0, 0); + + m_textEdit = new QTextEdit; + m_textEdit->setAcceptRichText(false); + m_textEdit->document()->setPlainText(initialComment); + m_textEdit->setMinimumWidth(360); + connect(m_textEdit, SIGNAL(textChanged()), this, SLOT(commentChanged())); + layout->addWidget(m_textEdit, 1, 0); + + QDialogButtonBox *bbox = new QDialogButtonBox(QDialogButtonBox::Ok | + QDialogButtonBox::Cancel); + layout->addWidget(bbox, 2, 0); + m_ok = bbox->button(QDialogButtonBox::Ok); + m_ok->setDefault(true); + m_ok->setEnabled(initialComment != ""); + m_ok->setText(okButtonText); + bbox->button(QDialogButtonBox::Cancel)->setAutoDefault(false); + + connect(bbox, SIGNAL(accepted()), this, SLOT(accept())); + connect(bbox, SIGNAL(rejected()), this, SLOT(reject())); +} + +void ConfirmCommentDialog::commentChanged() +{ + m_ok->setEnabled(getComment() != ""); +} + +QString ConfirmCommentDialog::getComment() const +{ + return m_textEdit->document()->toPlainText(); +} + +QString ConfirmCommentDialog::buildFilesText(QString intro, QStringList files) +{ + QString text; + + if (intro == "") text = "<qt>"; + else text = "<qt>" + intro + "<p>"; + + text += "<code>"; + foreach (QString file, files) { + text += " " + xmlEncode(file) + "<br>"; + } + text += "</code></qt>"; + + return text; +} + +bool ConfirmCommentDialog::confirm(QWidget *parent, + QString title, + QString head, + QString text, + QString okButtonText) +{ + QMessageBox box(QMessageBox::Question, + title, + head, + QMessageBox::Cancel, + parent); + + box.setInformativeText(text); + + QPushButton *ok = box.addButton(QMessageBox::Ok); + ok->setText(okButtonText); + box.setDefaultButton(QMessageBox::Ok); + if (box.exec() == -1) return false; + return box.standardButton(box.clickedButton()) == QMessageBox::Ok; +} + +bool ConfirmCommentDialog::confirmDangerous(QWidget *parent, + QString title, + QString head, + QString text, + QString okButtonText) +{ + QMessageBox box(QMessageBox::Warning, + title, + head, + QMessageBox::Cancel, + parent); + + box.setInformativeText(text); + + QPushButton *ok = box.addButton(QMessageBox::Ok); + ok->setText(okButtonText); + box.setDefaultButton(QMessageBox::Cancel); + if (box.exec() == -1) return false; + return box.standardButton(box.clickedButton()) == QMessageBox::Ok; +} + +bool ConfirmCommentDialog::confirmFilesAction(QWidget *parent, + QString title, + QString introText, + QString introTextWithCount, + QStringList files, + QString okButtonText) +{ + QString text; + if (files.size() <= 10) { + text = buildFilesText(introText, files); + } else { + text = "<qt>" + introTextWithCount + "</qt>"; + } + return confirm(parent, title, text, "", okButtonText); +} + +bool ConfirmCommentDialog::confirmDangerousFilesAction(QWidget *parent, + QString title, + QString introText, + QString introTextWithCount, + QStringList files, + QString okButtonText) +{ + QString text; + if (files.size() <= 10) { + text = buildFilesText(introText, files); + } else { + text = "<qt>" + introTextWithCount + "</qt>"; + } + return confirmDangerous(parent, title, text, "", okButtonText); +} + +bool ConfirmCommentDialog::confirmAndGetShortComment(QWidget *parent, + QString title, + QString introText, + QString introTextWithCount, + QStringList files, + QString &comment, + QString okButtonText) +{ + return confirmAndComment(parent, title, introText, + introTextWithCount, files, comment, false, + okButtonText); +} + +bool ConfirmCommentDialog::confirmAndGetLongComment(QWidget *parent, + QString title, + QString introText, + QString introTextWithCount, + QStringList files, + QString &comment, + QString okButtonText) +{ + return confirmAndComment(parent, title, introText, + introTextWithCount, files, comment, true, + okButtonText); +} + +bool ConfirmCommentDialog::confirmAndComment(QWidget *parent, + QString title, + QString introText, + QString introTextWithCount, + QStringList files, + QString &comment, + bool longComment, + QString okButtonText) +{ + QString text; + if (files.size() <= 10) { + text = buildFilesText(introText, files); + } else { + text = "<qt>" + introTextWithCount; + } + text += tr("<p>Please enter your comment:</qt>"); + return confirmAndComment(parent, title, text, comment, longComment, + okButtonText); +} + +bool ConfirmCommentDialog::confirmAndGetShortComment(QWidget *parent, + QString title, + QString introText, + QString &comment, + QString okButtonText) +{ + return confirmAndComment(parent, title, introText, comment, false, + okButtonText); +} + +bool ConfirmCommentDialog::confirmAndGetLongComment(QWidget *parent, + QString title, + QString introText, + QString &comment, + QString okButtonText) +{ + return confirmAndComment(parent, title, introText, comment, true, + okButtonText); +} + +bool ConfirmCommentDialog::confirmAndComment(QWidget *parent, + QString title, + QString introText, + QString &comment, + bool longComment, + QString okButtonText) +{ + bool ok = false; + if (!longComment) { + QInputDialog d(parent); + d.setWindowTitle(title); + d.setLabelText(introText); + d.setTextValue(comment); + d.setOkButtonText(okButtonText); + d.setTextEchoMode(QLineEdit::Normal); + if (d.exec() == QDialog::Accepted) { + comment = d.textValue(); + ok = true; + } + } else { + ConfirmCommentDialog d(parent, title, introText, comment, okButtonText); + if (d.exec() == QDialog::Accepted) { + comment = d.getComment(); + ok = true; + } + } + + return ok; +}