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.
tdeutils/kregexpeditor/KMultiFormListBox/kmultiformlistbox-windowed.cpp

214 lines
5.9 KiB

/*
* Copyright (c) 2002-2003 Jesper K. Pedersen <blackie@kde.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License version 2 as published by the Free Software Foundation.
*
* This library 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
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public License
* along with this library; see the file COPYING.LIB. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
**/
#ifdef TQT_ONLY
#include "compat.h"
#else
#include <kmessagebox.h>
#include <kpushbutton.h>
#include <kstdguiitem.h>
#include "kmultiformlistbox-windowed.moc"
#endif
#include "widgetwindow.h"
#include "windowlistboxitem.h"
KMultiFormListBoxWindowed::KMultiFormListBoxWindowed(KMultiFormListBoxFactory *factory, TQWidget *parent,
bool showUpDownButtons, bool showHelpButton,
TQString addButtonText,const char *name)
: TQWidget( parent, name )
{
_layout = new TQVBoxLayout(this);
TQHBoxLayout *innerLayout = new TQHBoxLayout();
_layout->addLayout(innerLayout);
_listbox = new KListBox(this,"listbox");
_listbox->setSelectionMode(TQListBox::Single);
innerLayout->addWidget(_listbox);
TQVBoxLayout *buttons = new TQVBoxLayout();
innerLayout->addLayout(buttons);
TQPushButton *but = new TQPushButton(addButtonText, this,"Add Button");
buttons->addWidget(but,0);
connect(but, TQT_SIGNAL(clicked()), this, TQT_SLOT(addNewElement()));
but = new TQPushButton(i18n("Edit"), this,"Edit Button");
buttons->addWidget(but,0);
connect(but,TQT_SIGNAL(clicked()), this, TQT_SLOT(slotEditSelected()));
connect(_listbox, TQT_SIGNAL(doubleClicked(TQListBoxItem *)), this, TQT_SLOT(slotEditSelected(TQListBoxItem *)));
_buttonList.append(but);
but = new TQPushButton(i18n("Delete"), this, "Delete Button");
buttons->addWidget(but,0);
connect(but, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotDeleteEntry()));
_buttonList.append(but);
but = new TQPushButton(i18n("Copy"), this, "Copy Button");
buttons->addWidget(but,0);
connect(but, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotCopySelected()));
_buttonList.append(but);
if (showUpDownButtons) {
but = new TQPushButton(i18n("Up"), this, "Up Button");
buttons->addWidget(but, 0);
connect(but, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotMoveItemUp()));
_buttonList.append(but);
but = new TQPushButton(i18n("Down"), this, "Down Button");
buttons->addWidget(but, 0);
connect(but, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotMoveItemDown()));
_buttonList.append(but);
}
if (showHelpButton) {
but = new KPushButton(KStdGuiItem::help(), this, "Help Button");
buttons->addWidget(but, 0);
connect(but, TQT_SIGNAL(clicked()), this, TQT_SIGNAL(showHelp()));
}
buttons->addStretch(1);
_factory = factory;
slotUpdateButtonState();
}
KMultiFormListBoxEntryList KMultiFormListBoxWindowed::elements()
{
KMultiFormListBoxEntryList list;
for (unsigned int i=0; i < _listbox->count(); i++) {
WindowListboxItem *item = (WindowListboxItem *) _listbox->item(i);
list.append(item->entry());
}
return list;
}
void KMultiFormListBoxWindowed::delElement(TQWidget */*elm*/)
{
// kdDebug() << "KMultiFormListBoxWindowed::delElement NOT YET IMPLEMENTED"<<endl;
// TODO
}
void KMultiFormListBoxWindowed::delAnElement()
{
// kdDebug() << "KMultiFormListBoxWindowed::delAnElement NOT YET IMPLEMENTED"<<endl;
// TODO
}
void KMultiFormListBoxWindowed::append(KMultiFormListBoxEntry *elm)
{
(void) new WidgetWindow(_factory, elm, _listbox);
slotUpdateButtonState();
}
void KMultiFormListBoxWindowed::addNewElement()
{
// kdDebug() << "addNewElement " << _factory << "," << _listbox << endl;
TQWidget *widget = new WidgetWindow(_factory, _listbox);
widget->show();
connect(widget, TQT_SIGNAL(finished()), this, TQT_SLOT(slotUpdateButtonState()));
}
void KMultiFormListBoxWindowed::addElement()
{
new WidgetWindow(_factory, _listbox);
slotUpdateButtonState();
}
void KMultiFormListBoxWindowed::slotEditSelected(TQListBoxItem *item)
{
((WindowListboxItem *) item)->displayWidget();
}
void KMultiFormListBoxWindowed::slotEditSelected()
{
WindowListboxItem *item = selected();
if (item) {
slotEditSelected(item);
}
}
void KMultiFormListBoxWindowed::slotDeleteEntry()
{
WindowListboxItem *item = selected();
if (item) {
int answer =
KMessageBox::warningContinueCancel(0, i18n("Delete item \"%1\"?").arg(item->text()),i18n("Delete Item"),KStdGuiItem::del());
if (answer == KMessageBox::Continue) {
delete item;
slotUpdateButtonState();
}
}
}
void KMultiFormListBoxWindowed::slotCopySelected()
{
WindowListboxItem *item = selected();
if (item) {
item->clone();
}
}
WindowListboxItem *KMultiFormListBoxWindowed::selected()
{
int i = _listbox->currentItem();
if (i == -1) {
return 0;
} else {
return (WindowListboxItem *) _listbox->item(i);
}
}
void KMultiFormListBoxWindowed::slotMoveItemUp()
{
WindowListboxItem *item = selected();
if (item == 0)
return;
int index = _listbox->index(item);
if (index != 0) {
_listbox->takeItem(item);
_listbox->insertItem(item, index-1);
_listbox->setCurrentItem(item);
}
}
void KMultiFormListBoxWindowed::slotMoveItemDown()
{
WindowListboxItem *item = selected();
if (item == 0)
return;
unsigned int index = _listbox->index(item);
if (index < _listbox->count()) {
_listbox->takeItem(item);
_listbox->insertItem(item, index+1);
_listbox->setCurrentItem(item);
}
}
void KMultiFormListBoxWindowed::slotUpdateButtonState()
{
bool on = (_listbox->count() != 0);
for (unsigned int i=0; i<_buttonList.count(); i++) {
_buttonList.at(i)->setEnabled(on);
}
}