annotate confirmcommentdialog.cpp @ 281:9162f14c5ab7

* Change "diff to parent <id>" menu entries in changeset item right-button menu to "diff to left parent" and "diff to right parent"
author Chris Cannam
date Fri, 18 Feb 2011 13:38:31 +0000
parents 8fd71f570884
children 1244dc3107cb
rev   line source
Chris@102 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@102 2
Chris@102 3 /*
Chris@102 4 EasyMercurial
Chris@102 5
Chris@102 6 Based on hgExplorer by Jari Korhonen
Chris@102 7 Copyright (c) 2010 Jari Korhonen
Chris@244 8 Copyright (c) 2011 Chris Cannam
Chris@244 9 Copyright (c) 2011 Queen Mary, University of London
Chris@102 10
Chris@102 11 This program is free software; you can redistribute it and/or
Chris@102 12 modify it under the terms of the GNU General Public License as
Chris@102 13 published by the Free Software Foundation; either version 2 of the
Chris@102 14 License, or (at your option) any later version. See the file
Chris@102 15 COPYING included with this distribution for more information.
Chris@102 16 */
Chris@102 17
Chris@102 18 #include "confirmcommentdialog.h"
Chris@109 19 #include "common.h"
Chris@102 20
Chris@102 21 #include <QMessageBox>
Chris@102 22 #include <QInputDialog>
Chris@104 23 #include <QGridLayout>
Chris@104 24 #include <QLabel>
Chris@104 25 #include <QTextEdit>
Chris@104 26 #include <QDialogButtonBox>
Chris@102 27
Chris@105 28 ConfirmCommentDialog::ConfirmCommentDialog(QWidget *parent,
Chris@105 29 QString title,
Chris@105 30 QString introText,
Chris@193 31 QString initialComment,
Chris@193 32 QString okButtonText) :
Chris@105 33 QDialog(parent)
Chris@105 34 {
Chris@105 35 setWindowTitle(title);
Chris@105 36
Chris@105 37 QGridLayout *layout = new QGridLayout;
Chris@105 38 setLayout(layout);
Chris@105 39 QLabel *label = new QLabel(introText);
Chris@237 40 label->setWordWrap(true);
Chris@105 41 layout->addWidget(label, 0, 0);
Chris@105 42
Chris@105 43 m_textEdit = new QTextEdit;
Chris@105 44 m_textEdit->setAcceptRichText(false);
Chris@105 45 m_textEdit->document()->setPlainText(initialComment);
Chris@105 46 m_textEdit->setMinimumWidth(360);
Chris@105 47 connect(m_textEdit, SIGNAL(textChanged()), this, SLOT(commentChanged()));
Chris@105 48 layout->addWidget(m_textEdit, 1, 0);
Chris@105 49
Chris@105 50 QDialogButtonBox *bbox = new QDialogButtonBox(QDialogButtonBox::Ok |
Chris@105 51 QDialogButtonBox::Cancel);
Chris@105 52 layout->addWidget(bbox, 2, 0);
Chris@105 53 m_ok = bbox->button(QDialogButtonBox::Ok);
Chris@105 54 m_ok->setEnabled(initialComment != "");
Chris@193 55 m_ok->setText(okButtonText);
Chris@105 56
Chris@105 57 connect(bbox, SIGNAL(accepted()), this, SLOT(accept()));
Chris@105 58 connect(bbox, SIGNAL(rejected()), this, SLOT(reject()));
Chris@105 59 }
Chris@105 60
Chris@105 61 void ConfirmCommentDialog::commentChanged()
Chris@105 62 {
Chris@105 63 m_ok->setEnabled(getComment() != "");
Chris@105 64 }
Chris@105 65
Chris@105 66 QString ConfirmCommentDialog::getComment() const
Chris@105 67 {
Chris@105 68 return m_textEdit->document()->toPlainText();
Chris@105 69 }
Chris@105 70
Chris@109 71 QString ConfirmCommentDialog::buildFilesText(QString intro, QStringList files)
Chris@109 72 {
Chris@109 73 QString text;
Chris@109 74 text = "<qt>" + intro;
Chris@109 75 text += "<p><code>";
Chris@109 76 foreach (QString file, files) {
Chris@109 77 text += "&nbsp;&nbsp;&nbsp;" + xmlEncode(file) + "<br>";
Chris@109 78 }
Chris@109 79 text += "</code></qt>";
Chris@109 80 return text;
Chris@109 81 }
Chris@109 82
Chris@193 83 bool ConfirmCommentDialog::confirm(QWidget *parent,
Chris@193 84 QString title,
Chris@193 85 QString text,
Chris@193 86 QString okButtonText)
Chris@193 87 {
Chris@193 88 QMessageBox box(QMessageBox::Question,
Chris@193 89 title,
Chris@193 90 text,
Chris@193 91 QMessageBox::Cancel,
Chris@193 92 parent);
Chris@193 93
Chris@193 94 QPushButton *ok = box.addButton(QMessageBox::Ok);
Chris@193 95 ok->setText(okButtonText);
Chris@194 96 if (box.exec() == -1) return false;
Chris@194 97 return box.standardButton(box.clickedButton()) == QMessageBox::Ok;
Chris@193 98 }
Chris@193 99
Chris@193 100 bool ConfirmCommentDialog::confirmDangerous(QWidget *parent,
Chris@193 101 QString title,
Chris@193 102 QString text,
Chris@193 103 QString okButtonText)
Chris@193 104 {
Chris@193 105 QMessageBox box(QMessageBox::Warning,
Chris@193 106 title,
Chris@193 107 text,
Chris@193 108 QMessageBox::Cancel,
Chris@193 109 parent);
Chris@193 110
Chris@193 111 QPushButton *ok = box.addButton(QMessageBox::Ok);
Chris@193 112 ok->setText(okButtonText);
Chris@194 113 if (box.exec() == -1) return false;
Chris@194 114 return box.standardButton(box.clickedButton()) == QMessageBox::Ok;
Chris@193 115 }
Chris@193 116
Chris@102 117 bool ConfirmCommentDialog::confirmFilesAction(QWidget *parent,
Chris@102 118 QString title,
Chris@102 119 QString introText,
Chris@102 120 QString introTextWithCount,
Chris@193 121 QStringList files,
Chris@193 122 QString okButtonText)
Chris@102 123 {
Chris@102 124 QString text;
Chris@102 125 if (files.size() <= 10) {
Chris@109 126 text = buildFilesText(introText, files);
Chris@102 127 } else {
Chris@155 128 text = "<qt>" + introTextWithCount + "</qt>";
Chris@102 129 }
Chris@193 130 return confirm(parent, title, text, okButtonText);
Chris@102 131 }
Chris@102 132
Chris@109 133 bool ConfirmCommentDialog::confirmDangerousFilesAction(QWidget *parent,
Chris@109 134 QString title,
Chris@109 135 QString introText,
Chris@109 136 QString introTextWithCount,
Chris@193 137 QStringList files,
Chris@193 138 QString okButtonText)
Chris@109 139 {
Chris@109 140 QString text;
Chris@109 141 if (files.size() <= 10) {
Chris@109 142 text = buildFilesText(introText, files);
Chris@109 143 } else {
Chris@155 144 text = "<qt>" + introTextWithCount + "</qt>";
Chris@109 145 }
Chris@193 146 return confirmDangerous(parent, title, text, okButtonText);
Chris@109 147 }
Chris@109 148
Chris@109 149 bool ConfirmCommentDialog::confirmAndGetShortComment(QWidget *parent,
Chris@109 150 QString title,
Chris@109 151 QString introText,
Chris@109 152 QString introTextWithCount,
Chris@109 153 QStringList files,
Chris@193 154 QString &comment,
Chris@193 155 QString okButtonText)
Chris@109 156 {
Chris@109 157 return confirmAndComment(parent, title, introText,
Chris@193 158 introTextWithCount, files, comment, false,
Chris@193 159 okButtonText);
Chris@109 160 }
Chris@109 161
Chris@109 162 bool ConfirmCommentDialog::confirmAndGetLongComment(QWidget *parent,
Chris@109 163 QString title,
Chris@109 164 QString introText,
Chris@109 165 QString introTextWithCount,
Chris@109 166 QStringList files,
Chris@193 167 QString &comment,
Chris@193 168 QString okButtonText)
Chris@109 169 {
Chris@109 170 return confirmAndComment(parent, title, introText,
Chris@193 171 introTextWithCount, files, comment, true,
Chris@193 172 okButtonText);
Chris@109 173 }
Chris@109 174
Chris@102 175 bool ConfirmCommentDialog::confirmAndComment(QWidget *parent,
Chris@102 176 QString title,
Chris@102 177 QString introText,
Chris@102 178 QString introTextWithCount,
Chris@102 179 QStringList files,
Chris@104 180 QString &comment,
Chris@193 181 bool longComment,
Chris@193 182 QString okButtonText)
Chris@102 183 {
Chris@102 184 QString text;
Chris@102 185 if (files.size() <= 10) {
Chris@109 186 text = buildFilesText(introText, files);
Chris@102 187 } else {
Chris@155 188 text = "<qt>" + introTextWithCount;
Chris@102 189 }
Chris@109 190 text += tr("<p>Please enter your comment:</qt>");
Chris@193 191 return confirmAndComment(parent, title, text, comment, longComment,
Chris@193 192 okButtonText);
Chris@102 193 }
Chris@102 194
Chris@109 195 bool ConfirmCommentDialog::confirmAndGetShortComment(QWidget *parent,
Chris@109 196 QString title,
Chris@109 197 QString introText,
Chris@193 198 QString &comment,
Chris@193 199 QString okButtonText)
Chris@109 200 {
Chris@193 201 return confirmAndComment(parent, title, introText, comment, false,
Chris@193 202 okButtonText);
Chris@109 203 }
Chris@109 204
Chris@109 205 bool ConfirmCommentDialog::confirmAndGetLongComment(QWidget *parent,
Chris@109 206 QString title,
Chris@109 207 QString introText,
Chris@193 208 QString &comment,
Chris@193 209 QString okButtonText)
Chris@109 210 {
Chris@193 211 return confirmAndComment(parent, title, introText, comment, true,
Chris@193 212 okButtonText);
Chris@109 213 }
Chris@109 214
Chris@102 215 bool ConfirmCommentDialog::confirmAndComment(QWidget *parent,
Chris@102 216 QString title,
Chris@102 217 QString introText,
Chris@104 218 QString &comment,
Chris@193 219 bool longComment,
Chris@193 220 QString okButtonText)
Chris@102 221 {
Chris@102 222 bool ok = false;
Chris@104 223 if (!longComment) {
Chris@193 224 QInputDialog d(parent);
Chris@193 225 d.setWindowTitle(title);
Chris@193 226 d.setLabelText(introText);
Chris@193 227 d.setTextValue(comment);
Chris@193 228 d.setOkButtonText(okButtonText);
Chris@193 229 d.setTextEchoMode(QLineEdit::Normal);
Chris@193 230 if (d.exec() == QDialog::Accepted) {
Chris@193 231 comment = d.textValue();
Chris@193 232 ok = true;
Chris@193 233 }
Chris@104 234 } else {
Chris@193 235 ConfirmCommentDialog d(parent, title, introText, comment, okButtonText);
Chris@193 236 if (d.exec() == QDialog::Accepted) {
Chris@193 237 comment = d.getComment();
Chris@104 238 ok = true;
Chris@104 239 }
Chris@104 240 }
Chris@193 241
Chris@102 242 return ok;
Chris@102 243 }