You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdesdk/cervisia/changelogdlg.cpp

184 lines
5.1 KiB

/*
* Copyright (C) 1999-2002 Bernd Gehrmann
* bernd@mail.berlios.de
* Copyright (c) 2002-2003 Christian Loose <christian.loose@hamburg.de>
*
* 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 <tqfile.h>
#include <tqtextstream.h>
#include <tdeconfig.h>
#include <tdeglobalsettings.h>
#include <tdelocale.h>
#include <tdemessagebox.h>
#include <ktextedit.h>
#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;
}