annotate src/confirmcommentdialog.cpp @ 419:69b2338c06e1 ignore

Add "Ignore this directory"; some fixes to ignore logic (though not yet enough)
author Chris Cannam
date Thu, 16 Jun 2011 20:35:05 +0100
parents b9c153e00e84
children 50920723dd16
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@419 20 #include "debug.h"
Chris@102 21
Chris@102 22 #include <QMessageBox>
Chris@102 23 #include <QInputDialog>
Chris@104 24 #include <QGridLayout>
Chris@104 25 #include <QLabel>
Chris@104 26 #include <QTextEdit>
Chris@104 27 #include <QDialogButtonBox>
Chris@102 28
Chris@105 29 ConfirmCommentDialog::ConfirmCommentDialog(QWidget *parent,
Chris@105 30 QString title,
Chris@105 31 QString introText,
Chris@193 32 QString initialComment,
Chris@193 33 QString okButtonText) :
Chris@105 34 QDialog(parent)
Chris@105 35 {
Chris@105 36 setWindowTitle(title);
Chris@105 37
Chris@105 38 QGridLayout *layout = new QGridLayout;
Chris@105 39 setLayout(layout);
Chris@105 40 QLabel *label = new QLabel(introText);
Chris@237 41 label->setWordWrap(true);
Chris@105 42 layout->addWidget(label, 0, 0);
Chris@105 43
Chris@105 44 m_textEdit = new QTextEdit;
Chris@105 45 m_textEdit->setAcceptRichText(false);
Chris@105 46 m_textEdit->document()->setPlainText(initialComment);
Chris@105 47 m_textEdit->setMinimumWidth(360);
Chris@105 48 connect(m_textEdit, SIGNAL(textChanged()), this, SLOT(commentChanged()));
Chris@105 49 layout->addWidget(m_textEdit, 1, 0);
Chris@105 50
Chris@105 51 QDialogButtonBox *bbox = new QDialogButtonBox(QDialogButtonBox::Ok |
Chris@105 52 QDialogButtonBox::Cancel);
Chris@105 53 layout->addWidget(bbox, 2, 0);
Chris@105 54 m_ok = bbox->button(QDialogButtonBox::Ok);
Chris@275 55 m_ok->setDefault(true);
Chris@105 56 m_ok->setEnabled(initialComment != "");
Chris@193 57 m_ok->setText(okButtonText);
Chris@275 58 bbox->button(QDialogButtonBox::Cancel)->setAutoDefault(false);
Chris@105 59
Chris@105 60 connect(bbox, SIGNAL(accepted()), this, SLOT(accept()));
Chris@105 61 connect(bbox, SIGNAL(rejected()), this, SLOT(reject()));
Chris@105 62 }
Chris@105 63
Chris@105 64 void ConfirmCommentDialog::commentChanged()
Chris@105 65 {
Chris@105 66 m_ok->setEnabled(getComment() != "");
Chris@105 67 }
Chris@105 68
Chris@105 69 QString ConfirmCommentDialog::getComment() const
Chris@105 70 {
Chris@419 71 /*
Chris@419 72 DEBUG << "ConfirmCommentDialog: as html is:" << endl;
Chris@419 73 DEBUG << m_textEdit->document()->toHtml() << endl;
Chris@419 74 DEBUG << "ConfirmCommentDialog: as plain text is:" << endl;
Chris@419 75 QString t = m_textEdit->document()->toPlainText();
Chris@419 76 DEBUG << t << endl;
Chris@419 77 DEBUG << "Characters: " << endl;
Chris@419 78 for (int i = 0; i < t.length(); ++i) DEBUG << t[i].unicode();
Chris@419 79 DEBUG << endl;
Chris@419 80 return t;
Chris@419 81 */
Chris@105 82 }
Chris@105 83
Chris@109 84 QString ConfirmCommentDialog::buildFilesText(QString intro, QStringList files)
Chris@109 85 {
Chris@109 86 QString text;
Chris@298 87
Chris@298 88 if (intro == "") text = "<qt>";
Chris@298 89 else text = "<qt>" + intro + "<p>";
Chris@298 90
Chris@298 91 text += "<code>";
Chris@109 92 foreach (QString file, files) {
Chris@109 93 text += "&nbsp;&nbsp;&nbsp;" + xmlEncode(file) + "<br>";
Chris@109 94 }
Chris@109 95 text += "</code></qt>";
Chris@298 96
Chris@109 97 return text;
Chris@109 98 }
Chris@109 99
Chris@193 100 bool ConfirmCommentDialog::confirm(QWidget *parent,
Chris@193 101 QString title,
Chris@298 102 QString head,
Chris@193 103 QString text,
Chris@193 104 QString okButtonText)
Chris@193 105 {
Chris@193 106 QMessageBox box(QMessageBox::Question,
Chris@193 107 title,
Chris@298 108 head,
Chris@193 109 QMessageBox::Cancel,
Chris@193 110 parent);
Chris@193 111
Chris@298 112 box.setInformativeText(text);
Chris@298 113
Chris@193 114 QPushButton *ok = box.addButton(QMessageBox::Ok);
Chris@193 115 ok->setText(okButtonText);
Chris@275 116 box.setDefaultButton(QMessageBox::Ok);
Chris@194 117 if (box.exec() == -1) return false;
Chris@194 118 return box.standardButton(box.clickedButton()) == QMessageBox::Ok;
Chris@193 119 }
Chris@193 120
Chris@193 121 bool ConfirmCommentDialog::confirmDangerous(QWidget *parent,
Chris@193 122 QString title,
Chris@298 123 QString head,
Chris@193 124 QString text,
Chris@193 125 QString okButtonText)
Chris@193 126 {
Chris@193 127 QMessageBox box(QMessageBox::Warning,
Chris@193 128 title,
Chris@298 129 head,
Chris@193 130 QMessageBox::Cancel,
Chris@193 131 parent);
Chris@193 132
Chris@298 133 box.setInformativeText(text);
Chris@298 134
Chris@193 135 QPushButton *ok = box.addButton(QMessageBox::Ok);
Chris@193 136 ok->setText(okButtonText);
Chris@275 137 box.setDefaultButton(QMessageBox::Cancel);
Chris@194 138 if (box.exec() == -1) return false;
Chris@194 139 return box.standardButton(box.clickedButton()) == QMessageBox::Ok;
Chris@193 140 }
Chris@193 141
Chris@102 142 bool ConfirmCommentDialog::confirmFilesAction(QWidget *parent,
Chris@102 143 QString title,
Chris@102 144 QString introText,
Chris@102 145 QString introTextWithCount,
Chris@193 146 QStringList files,
Chris@193 147 QString okButtonText)
Chris@102 148 {
Chris@102 149 QString text;
Chris@102 150 if (files.size() <= 10) {
Chris@109 151 text = buildFilesText(introText, files);
Chris@102 152 } else {
Chris@155 153 text = "<qt>" + introTextWithCount + "</qt>";
Chris@102 154 }
Chris@298 155 return confirm(parent, title, text, "", okButtonText);
Chris@102 156 }
Chris@102 157
Chris@109 158 bool ConfirmCommentDialog::confirmDangerousFilesAction(QWidget *parent,
Chris@109 159 QString title,
Chris@109 160 QString introText,
Chris@109 161 QString introTextWithCount,
Chris@193 162 QStringList files,
Chris@193 163 QString okButtonText)
Chris@109 164 {
Chris@109 165 QString text;
Chris@109 166 if (files.size() <= 10) {
Chris@109 167 text = buildFilesText(introText, files);
Chris@109 168 } else {
Chris@155 169 text = "<qt>" + introTextWithCount + "</qt>";
Chris@109 170 }
Chris@298 171 return confirmDangerous(parent, title, text, "", okButtonText);
Chris@109 172 }
Chris@109 173
Chris@109 174 bool ConfirmCommentDialog::confirmAndGetShortComment(QWidget *parent,
Chris@109 175 QString title,
Chris@109 176 QString introText,
Chris@109 177 QString introTextWithCount,
Chris@109 178 QStringList files,
Chris@193 179 QString &comment,
Chris@193 180 QString okButtonText)
Chris@109 181 {
Chris@109 182 return confirmAndComment(parent, title, introText,
Chris@193 183 introTextWithCount, files, comment, false,
Chris@193 184 okButtonText);
Chris@109 185 }
Chris@109 186
Chris@109 187 bool ConfirmCommentDialog::confirmAndGetLongComment(QWidget *parent,
Chris@109 188 QString title,
Chris@109 189 QString introText,
Chris@109 190 QString introTextWithCount,
Chris@109 191 QStringList files,
Chris@193 192 QString &comment,
Chris@193 193 QString okButtonText)
Chris@109 194 {
Chris@109 195 return confirmAndComment(parent, title, introText,
Chris@193 196 introTextWithCount, files, comment, true,
Chris@193 197 okButtonText);
Chris@109 198 }
Chris@109 199
Chris@102 200 bool ConfirmCommentDialog::confirmAndComment(QWidget *parent,
Chris@102 201 QString title,
Chris@102 202 QString introText,
Chris@102 203 QString introTextWithCount,
Chris@102 204 QStringList files,
Chris@104 205 QString &comment,
Chris@193 206 bool longComment,
Chris@193 207 QString okButtonText)
Chris@102 208 {
Chris@102 209 QString text;
Chris@102 210 if (files.size() <= 10) {
Chris@109 211 text = buildFilesText(introText, files);
Chris@102 212 } else {
Chris@155 213 text = "<qt>" + introTextWithCount;
Chris@102 214 }
Chris@109 215 text += tr("<p>Please enter your comment:</qt>");
Chris@193 216 return confirmAndComment(parent, title, text, comment, longComment,
Chris@193 217 okButtonText);
Chris@102 218 }
Chris@102 219
Chris@109 220 bool ConfirmCommentDialog::confirmAndGetShortComment(QWidget *parent,
Chris@109 221 QString title,
Chris@109 222 QString introText,
Chris@193 223 QString &comment,
Chris@193 224 QString okButtonText)
Chris@109 225 {
Chris@193 226 return confirmAndComment(parent, title, introText, comment, false,
Chris@193 227 okButtonText);
Chris@109 228 }
Chris@109 229
Chris@109 230 bool ConfirmCommentDialog::confirmAndGetLongComment(QWidget *parent,
Chris@109 231 QString title,
Chris@109 232 QString introText,
Chris@193 233 QString &comment,
Chris@193 234 QString okButtonText)
Chris@109 235 {
Chris@193 236 return confirmAndComment(parent, title, introText, comment, true,
Chris@193 237 okButtonText);
Chris@109 238 }
Chris@109 239
Chris@102 240 bool ConfirmCommentDialog::confirmAndComment(QWidget *parent,
Chris@102 241 QString title,
Chris@102 242 QString introText,
Chris@104 243 QString &comment,
Chris@193 244 bool longComment,
Chris@193 245 QString okButtonText)
Chris@102 246 {
Chris@102 247 bool ok = false;
Chris@104 248 if (!longComment) {
Chris@193 249 QInputDialog d(parent);
Chris@193 250 d.setWindowTitle(title);
Chris@193 251 d.setLabelText(introText);
Chris@193 252 d.setTextValue(comment);
Chris@193 253 d.setOkButtonText(okButtonText);
Chris@193 254 d.setTextEchoMode(QLineEdit::Normal);
Chris@193 255 if (d.exec() == QDialog::Accepted) {
Chris@193 256 comment = d.textValue();
Chris@193 257 ok = true;
Chris@193 258 }
Chris@104 259 } else {
Chris@193 260 ConfirmCommentDialog d(parent, title, introText, comment, okButtonText);
Chris@193 261 if (d.exec() == QDialog::Accepted) {
Chris@193 262 comment = d.getComment();
Chris@104 263 ok = true;
Chris@104 264 }
Chris@104 265 }
Chris@193 266
Chris@102 267 return ok;
Chris@102 268 }