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.
274 lines
7.9 KiB
274 lines
7.9 KiB
/***************************************************************************
|
|
ksig.cpp - description
|
|
-------------------
|
|
begin : Tue Jul 9 23:14:22 EDT 2002
|
|
copyright : (C) 2002 by Scott Wheeler
|
|
email : wheeler@kde.org
|
|
***************************************************************************/
|
|
|
|
/***************************************************************************
|
|
* *
|
|
* 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. *
|
|
* *
|
|
***************************************************************************/
|
|
|
|
#include <kapplication.h>
|
|
#include <kstdaction.h>
|
|
#include <kaction.h>
|
|
#include <kconfig.h>
|
|
#include <kglobalsettings.h>
|
|
#include <kmessagebox.h>
|
|
#include <kstatusbar.h>
|
|
#include <ktextedit.h>
|
|
#include <klistviewsearchline.h>
|
|
#include <klocale.h>
|
|
|
|
#include <tqsplitter.h>
|
|
|
|
#include "ksig.h"
|
|
#include "siglistviewitem.h"
|
|
#include "standardtext.h"
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// public methods
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
KSig::KSig(TQWidget *parent, const char *name) : KMainWindow(parent, name),
|
|
changed(false)
|
|
{
|
|
setupActions();
|
|
setupLayout();
|
|
setupSearchLine();
|
|
|
|
if (!initialGeometrySet())
|
|
resize(640,480);
|
|
setupGUI(ToolBar | Keys | StatusBar | Create);
|
|
setAutoSaveSettings();
|
|
|
|
readConfig();
|
|
loadData();
|
|
}
|
|
|
|
KSig::~KSig()
|
|
{
|
|
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// private methods
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
void KSig::setupActions()
|
|
{
|
|
KStdAction::openNew(TQT_TQOBJECT(this), TQT_SLOT(add()), actionCollection());
|
|
new KAction(i18n("Remove"), "editdelete", 0, TQT_TQOBJECT(this), TQT_SLOT(remove()), actionCollection(), "remove");
|
|
KStdAction::save(TQT_TQOBJECT(this), TQT_SLOT(save()), actionCollection());
|
|
KStdAction::quit(TQT_TQOBJECT(this), TQT_SLOT(quit()), actionCollection());
|
|
|
|
KStdAction::cut(TQT_TQOBJECT(kapp), TQT_SLOT(cut()), actionCollection());
|
|
KStdAction::copy(TQT_TQOBJECT(kapp), TQT_SLOT(copy()), actionCollection());
|
|
KStdAction::paste(TQT_TQOBJECT(kapp), TQT_SLOT(paste()), actionCollection());
|
|
new KAction(i18n("C&lear"), "editclear", 0, TQT_TQOBJECT(kapp), TQT_SLOT(clear()), actionCollection(), "clear");
|
|
|
|
new KAction(i18n("Edit Standard Header"), 0, 0, TQT_TQOBJECT(this), TQT_SLOT(editHeader()), actionCollection(), "editHeader");
|
|
new KAction(i18n("Edit Standard Footer"), 0, 0, TQT_TQOBJECT(this), TQT_SLOT(editFooter()), actionCollection(), "editFooter");
|
|
}
|
|
|
|
void KSig::setupLayout()
|
|
{
|
|
splitter = new TQSplitter(Qt::Vertical, this);
|
|
|
|
setCentralWidget(splitter);
|
|
|
|
sigList = SigListView::instance(splitter, "sigList");
|
|
|
|
sigEdit = new KTextEdit(splitter, "sigEdit");
|
|
sigEdit->setTextFormat(TQt::PlainText);
|
|
sigEdit->setFont(KGlobalSettings::fixedFont());
|
|
sigEdit->setEnabled(false);
|
|
sigEdit->setCheckSpellingEnabled(true);
|
|
|
|
statusBar()->insertItem(i18n(" Line: %1 ").arg(0), LineNumber, 0, true);
|
|
statusBar()->insertItem(i18n(" Col: %1 ").arg(0), ColumnNumber, 0, true);
|
|
statusBar()->show();
|
|
|
|
updateListLock = false;
|
|
connect(sigEdit, TQT_SIGNAL(textChanged()), TQT_TQOBJECT(this), TQT_SLOT(updateList()));
|
|
connect(sigList, TQT_SIGNAL(selectionChanged()), TQT_TQOBJECT(this), TQT_SLOT(updateEdit()));
|
|
connect(sigEdit, TQT_SIGNAL(cursorPositionChanged(int,int)), TQT_TQOBJECT(this), TQT_SLOT(updateStatus(int,int)));
|
|
}
|
|
|
|
void KSig::setupSearchLine()
|
|
{
|
|
KListViewSearchLineWidget *searchWidget = new KListViewSearchLineWidget(sigList, this);
|
|
new KWidgetAction(searchWidget, i18n("Search"), KShortcut(), 0, 0, actionCollection(), "search");
|
|
}
|
|
|
|
void KSig::loadData()
|
|
{
|
|
if(sigList->childCount() > 0) {
|
|
sigList->setCurrentItem(sigList->firstChild());
|
|
sigList->setSelected(sigList->firstChild(), true);
|
|
|
|
sigEdit->setEnabled(true);
|
|
}
|
|
else {
|
|
updateListLock = true;
|
|
sigEdit->setText(i18n("To get started, first create a new signature by selecting "
|
|
"\"New\" above. You will then be able to edit and save "
|
|
"your collection of signatures."));
|
|
updateListLock = false;
|
|
}
|
|
setDataChanged(false);
|
|
}
|
|
|
|
void KSig::readConfig()
|
|
{
|
|
setAutoSaveSettings();
|
|
KConfig *config = KGlobal::config();
|
|
{
|
|
KConfigGroupSaver saver(config, "Settings");
|
|
if(splitter) {
|
|
TQValueList<int> sizes;
|
|
|
|
sizes.append(config->readNumEntry("ListSize", -1));
|
|
sizes.append(config->readNumEntry("EditSize", -1));
|
|
|
|
if(sizes[0] > 0 && sizes[1] > 0)
|
|
splitter->setSizes(sizes);
|
|
}
|
|
|
|
header = config->readEntry("Header");
|
|
footer = config->readEntry("Footer");
|
|
}
|
|
}
|
|
|
|
void KSig::writeConfig()
|
|
{
|
|
KConfig *config = KGlobal::config();
|
|
{
|
|
KConfigGroupSaver saver(config, "Settings");
|
|
if(splitter) {
|
|
TQValueList<int> sizes = splitter->sizes();
|
|
|
|
config->writeEntry("ListSize", sizes[0]);
|
|
config->writeEntry("EditSize", sizes[1]);
|
|
}
|
|
|
|
config->writeEntry("Header", header);
|
|
config->writeEntry("Footer", footer);
|
|
}
|
|
config->sync();
|
|
}
|
|
|
|
bool KSig::queryClose()
|
|
{
|
|
if(changed) {
|
|
int saveChanges = KMessageBox::questionYesNoCancel(this, i18n("Do you want to save your changes before exiting?"),TQString(),KStdGuiItem::save(),KStdGuiItem::discard());
|
|
if(saveChanges == KMessageBox::Cancel)
|
|
return(false);
|
|
else if(saveChanges == KMessageBox::Yes)
|
|
save();
|
|
}
|
|
|
|
writeConfig();
|
|
return(true);
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// private slots
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
void KSig::add()
|
|
{
|
|
setDataChanged();
|
|
SigListViewItem *sigItem = sigList->createItem();
|
|
sigList->setCurrentItem(sigItem);
|
|
|
|
sigEdit->setEnabled(true);
|
|
sigEdit->setFocus();
|
|
sigEdit->clear();
|
|
}
|
|
|
|
void KSig::remove()
|
|
{
|
|
setDataChanged();
|
|
sigEdit->clear();
|
|
delete(sigList->currentItem());
|
|
}
|
|
|
|
void KSig::save()
|
|
{
|
|
sigList->save();
|
|
setDataChanged(false);
|
|
}
|
|
|
|
void KSig::setDataChanged(bool value)
|
|
{
|
|
changed = value;
|
|
|
|
if(changed)
|
|
setCaption(kapp->makeStdCaption(TQString(), true, true));
|
|
else
|
|
setCaption(kapp->makeStdCaption(TQString(), true, false));
|
|
}
|
|
|
|
void KSig::editHeader()
|
|
{
|
|
StandardText *t = new StandardText(0, 0, true);
|
|
t->setLabel(i18n("Standard signature header:"));
|
|
t->setText(header);
|
|
|
|
connect(t, TQT_SIGNAL(textUpdated(const TQString &)), TQT_TQOBJECT(this), TQT_SLOT(setHeader(const TQString &)));
|
|
|
|
t->exec();
|
|
}
|
|
|
|
void KSig::editFooter()
|
|
{
|
|
StandardText *t = new StandardText(0, 0, true);
|
|
t->setLabel(i18n("Standard signature footer:"));
|
|
t->setText(footer);
|
|
|
|
connect(t, TQT_SIGNAL(textUpdated(const TQString &)), TQT_TQOBJECT(this), TQT_SLOT(setFooter(const TQString &)));
|
|
|
|
t->exec();
|
|
}
|
|
|
|
void KSig::updateList()
|
|
{
|
|
if(!updateListLock) {
|
|
setDataChanged();
|
|
SigListViewItem *item = sigList->currentItem();
|
|
if(item)
|
|
item->setText(sigEdit->text());
|
|
}
|
|
}
|
|
|
|
void KSig::updateEdit()
|
|
{
|
|
updateListLock = true;
|
|
|
|
SigListViewItem *item = sigList->currentItem();
|
|
if(item)
|
|
sigEdit->setText(item->text());
|
|
|
|
updateListLock = false;
|
|
}
|
|
|
|
void KSig::updateStatus(int line, int column)
|
|
{
|
|
statusBar()->changeItem(i18n(" Line: %1 ").arg(line + 1), LineNumber);
|
|
statusBar()->changeItem(i18n(" Col: %1 ").arg(column + 1), ColumnNumber);
|
|
}
|
|
|
|
void KSig::quit()
|
|
{
|
|
close();
|
|
}
|
|
|
|
#include "ksig.moc"
|