/* * Copyright (C) 1999-2002 Bernd Gehrmann * bernd@mail.berlios.de * Copyright (c) 2002-2003 Christian Loose * * 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. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "changelogdlg.h" #include #include #include #include #include #include #include #include "misc.h" static inline TQString DateStringISO8601() { return TQDate::currentDate().toString(TQt::ISODate); } ChangeLogDialog::Options *ChangeLogDialog::options = 0; ChangeLogDialog::ChangeLogDialog(TDEConfig& cfg, TQWidget *parent, const char *name) : KDialogBase(parent, name, true, i18n("Edit ChangeLog"), Ok | Cancel, Ok, true) , partConfig(cfg) { edit = new KTextEdit(this); cfg.setGroup("LookAndFeel"); edit->setFont(cfg.readFontEntry("ChangeLogFont")); edit->setFocus(); edit->setWordWrap(TQTextEdit::NoWrap); edit->setTextFormat(TQTextEdit::PlainText); edit->setCheckSpellingEnabled(true); TQFontMetrics const fm(edit->fontMetrics()); edit->setMinimumSize(fm.width('0') * 80, fm.lineSpacing() * 20); setMainWidget(edit); TQSize size = configDialogSize(partConfig, "ChangeLogDialog"); resize(size); } ChangeLogDialog::~ChangeLogDialog() { saveDialogSize(partConfig, "ChangeLogDialog"); } void ChangeLogDialog::slotOk() { // Write changelog TQFile f(fname); if (!f.open(IO_ReadWrite)) { KMessageBox::sorry(this, i18n("The ChangeLog file could not be written."), "Cervisia"); return; } TQTextStream stream(&f); stream << edit->text(); f.close(); KDialogBase::slotOk(); } bool ChangeLogDialog::readFile(const TQString &filename) { fname = filename; if (!TQFile::exists(filename)) { if (KMessageBox::warningContinueCancel(this, i18n("A ChangeLog file does not exist. Create one?"), "Cervisia", i18n("Create")) != KMessageBox::Continue) return false; } else { TQFile f(filename); if (!f.open(IO_ReadWrite)) { KMessageBox::sorry(this, i18n("The ChangeLog file could not be read."), "Cervisia"); return false; } TQTextStream stream(&f); edit->setText(stream.read()); f.close(); } TDEConfigGroupSaver cs(&partConfig, "General"); const TQString username = partConfig.readEntry("Username", Cervisia::UserName()); edit->insertParagraph("", 0); edit->insertParagraph("\t* ", 0); edit->insertParagraph("", 0); edit->insertParagraph(DateStringISO8601() + " " + username, 0); edit->setCursorPosition(2, 10); return true; } TQString ChangeLogDialog::message() { int no = 0; // Find first line which begins with non-whitespace while (no < edit->lines()) { TQString str = edit->text(no); if (!str.isEmpty() && !str[0].isSpace()) break; ++no; } ++no; // Skip empty lines while (no < edit->lines()) { TQString str = edit->text(no); if( str.isEmpty() || str == " " ) break; ++no; } TQString res; // Use all lines until one which begins with non-whitespace // Remove tabs or 8 whitespace at beginning of each line while (no < edit->lines()) { TQString str = edit->text(no); if (!str.isEmpty() && !str[0].isSpace()) break; if (!str.isEmpty() && str[0] == '\t') str.remove(0, 1); else { int j; for (j = 0; j < (int)str.length(); ++j) if (!str[j].isSpace()) break; str.remove(0, TQMIN(j, 8)); } res += str; res += '\n'; ++no; } // Remove newlines at end int l; for (l = res.length()-1; l > 0; --l) if (res[l] != '\n') break; res.truncate(l+1); return res; }