|
|
|
/*
|
|
|
|
* This file is part of the KDE libraries
|
|
|
|
* Copyright (c) 2001 Michael Goffioul <kdeprint@swing.be>
|
|
|
|
*
|
|
|
|
* 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.
|
|
|
|
**/
|
|
|
|
|
|
|
|
#include "kxmlcommanddlg.h"
|
|
|
|
#include "driver.h"
|
|
|
|
#include "kxmlcommand.h"
|
|
|
|
|
|
|
|
#include <tqlayout.h>
|
|
|
|
#include <tqheader.h>
|
|
|
|
#include <tqlabel.h>
|
|
|
|
#include <tqlineedit.h>
|
|
|
|
#include <tqcombobox.h>
|
|
|
|
#include <tqgroupbox.h>
|
|
|
|
#include <tqwidgetstack.h>
|
|
|
|
#include <tqtoolbutton.h>
|
|
|
|
#include <kpushbutton.h>
|
|
|
|
#include <tqtooltip.h>
|
|
|
|
#include <tqcheckbox.h>
|
|
|
|
#include <ktextedit.h>
|
|
|
|
#include <tqregexp.h>
|
|
|
|
#include <tqwhatsthis.h>
|
|
|
|
#include <tqapplication.h>
|
|
|
|
|
|
|
|
#include <klistview.h>
|
|
|
|
#include <klocale.h>
|
|
|
|
#include <kiconloader.h>
|
|
|
|
#include <kdialogbase.h>
|
|
|
|
#include <kseparator.h>
|
|
|
|
#include <klistbox.h>
|
|
|
|
#include <kmimetype.h>
|
|
|
|
#include <kmessagebox.h>
|
|
|
|
#include <kapplication.h>
|
|
|
|
#include <kdebug.h>
|
|
|
|
#include <kguiitem.h>
|
|
|
|
|
|
|
|
TQString generateId(const TQMap<TQString, DrBase*>& map)
|
|
|
|
{
|
|
|
|
int index(-1);
|
|
|
|
while (map.contains(TQString::fromLatin1("item%1").arg(++index))) ;
|
|
|
|
return TQString::fromLatin1("item%1").arg(index);
|
|
|
|
}
|
|
|
|
|
|
|
|
TQListViewItem* findPrev(TQListViewItem *item)
|
|
|
|
{
|
|
|
|
QListViewItem *prev = item->itemAbove();
|
|
|
|
while (prev && prev->depth() > item->depth())
|
|
|
|
prev = prev->itemAbove();
|
|
|
|
if (prev && prev->depth() == item->depth())
|
|
|
|
return prev;
|
|
|
|
else
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
TQListViewItem* findNext(TQListViewItem *item)
|
|
|
|
{
|
|
|
|
QListViewItem *next = item->itemBelow();
|
|
|
|
while (next && next->depth() > item->depth())
|
|
|
|
next = next->itemBelow();
|
|
|
|
if (next && next->depth() == item->depth())
|
|
|
|
return next;
|
|
|
|
else
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
KXmlCommandAdvancedDlg::KXmlCommandAdvancedDlg(TQWidget *parent, const char *name)
|
|
|
|
: TQWidget(parent, name)
|
|
|
|
{
|
|
|
|
m_xmlcmd = 0;
|
|
|
|
|
|
|
|
m_command = new TQLineEdit(this);
|
|
|
|
m_view = new KListView(this);
|
|
|
|
m_view->addColumn("");
|
|
|
|
m_view->header()->hide();
|
|
|
|
m_view->setSorting(-1);
|
|
|
|
m_apply = new TQToolButton(this);
|
|
|
|
m_apply->setIconSet( TQApplication::reverseLayout()? SmallIconSet( "forward" ) : SmallIconSet("back"));
|
|
|
|
m_addgrp = new TQToolButton(this);
|
|
|
|
m_addgrp->setIconSet(SmallIconSet("folder"));
|
|
|
|
m_addopt = new TQToolButton(this);
|
|
|
|
m_addopt->setIconSet(SmallIconSet("document"));
|
|
|
|
m_delopt = new TQToolButton(this);
|
|
|
|
m_delopt->setIconSet(SmallIconSet("editdelete"));
|
|
|
|
m_up = new TQToolButton(this);
|
|
|
|
m_up->setIconSet(SmallIconSet("up"));
|
|
|
|
m_down = new TQToolButton(this);
|
|
|
|
m_down->setIconSet(SmallIconSet("down"));
|
|
|
|
m_dummy = new TQWidget(this);
|
|
|
|
m_desc = new TQLineEdit(m_dummy);
|
|
|
|
m_name = new TQLineEdit(m_dummy);
|
|
|
|
m_type = new TQComboBox(m_dummy);
|
|
|
|
m_type->insertItem(i18n("String"));
|
|
|
|
m_type->insertItem(i18n("Integer"));
|
|
|
|
m_type->insertItem(i18n("Float"));
|
|
|
|
m_type->insertItem(i18n("List"));
|
|
|
|
m_type->insertItem(i18n("Boolean"));
|
|
|
|
m_format = new TQLineEdit(m_dummy);
|
|
|
|
m_default = new TQLineEdit(m_dummy);
|
|
|
|
QLabel *m_namelab = new TQLabel(i18n("&Name:"), m_dummy);
|
|
|
|
QLabel *m_desclab = new TQLabel(i18n("&Description:"), m_dummy);
|
|
|
|
QLabel *m_formatlab = new TQLabel(i18n("&Format:"), m_dummy);
|
|
|
|
QLabel *m_typelab = new TQLabel(i18n("&Type:"), m_dummy);
|
|
|
|
QLabel *m_defaultlab = new TQLabel(i18n("Default &value:"), m_dummy);
|
|
|
|
QLabel *m_commandlab = new TQLabel(i18n("Co&mmand:"), this);
|
|
|
|
m_namelab->setBuddy(m_name);
|
|
|
|
m_desclab->setBuddy(m_desc);
|
|
|
|
m_formatlab->setBuddy(m_format);
|
|
|
|
m_typelab->setBuddy(m_type);
|
|
|
|
m_defaultlab->setBuddy(m_default);
|
|
|
|
m_commandlab->setBuddy(m_command);
|
|
|
|
m_persistent = new TQCheckBox( i18n( "&Persistent option" ), m_dummy );
|
|
|
|
|
|
|
|
QGroupBox *gb = new TQGroupBox(0, Qt::Horizontal, i18n("Va&lues"), m_dummy);
|
|
|
|
m_stack = new TQWidgetStack(gb);
|
|
|
|
QWidget *w1 = new TQWidget(m_stack), *w2 = new TQWidget(m_stack), *w3 = new TQWidget(m_stack);
|
|
|
|
m_stack->addWidget(w1, 1);
|
|
|
|
m_stack->addWidget(w2, 2);
|
|
|
|
m_stack->addWidget(w3, 3);
|
|
|
|
m_edit1 = new TQLineEdit(w1);
|
|
|
|
m_edit2 = new TQLineEdit(w1);
|
|
|
|
QLabel *m_editlab1 = new TQLabel(i18n("Minimum v&alue:"), w1);
|
|
|
|
QLabel *m_editlab2 = new TQLabel(i18n("Ma&ximum value:"), w1);
|
|
|
|
m_editlab1->setBuddy(m_edit1);
|
|
|
|
m_editlab2->setBuddy(m_edit2);
|
|
|
|
m_values = new KListView(w2);
|
|
|
|
m_values->addColumn(i18n("Name"));
|
|
|
|
m_values->addColumn(i18n("Description"));
|
|
|
|
m_values->setAllColumnsShowFocus(true);
|
|
|
|
m_values->setSorting(-1);
|
|
|
|
m_values->setMaximumHeight(110);
|
|
|
|
m_addval = new TQToolButton(w2);
|
|
|
|
m_addval->setIconSet(SmallIconSet("editcopy"));
|
|
|
|
m_delval = new TQToolButton(w2);
|
|
|
|
m_delval->setIconSet(SmallIconSet("editdelete"));
|
|
|
|
TQToolTip::add(m_addval, i18n("Add value"));
|
|
|
|
TQToolTip::add(m_delval, i18n("Delete value"));
|
|
|
|
|
|
|
|
TQToolTip::add(m_apply, i18n("Apply changes"));
|
|
|
|
TQToolTip::add(m_addgrp, i18n("Add group"));
|
|
|
|
TQToolTip::add(m_addopt, i18n("Add option"));
|
|
|
|
TQToolTip::add(m_delopt, i18n("Delete item"));
|
|
|
|
TQToolTip::add(m_up, i18n("Move up"));
|
|
|
|
TQToolTip::add(m_down, i18n("Move down"));
|
|
|
|
|
|
|
|
KSeparator *sep1 = new KSeparator(KSeparator::HLine, m_dummy);
|
|
|
|
|
|
|
|
QGroupBox *gb_input = new TQGroupBox(0, Qt::Horizontal, i18n("&Input From"), this);
|
|
|
|
QGroupBox *gb_output = new TQGroupBox(0, Qt::Horizontal, i18n("O&utput To"), this);
|
|
|
|
QLabel *m_inputfilelab = new TQLabel(i18n("File:"), gb_input);
|
|
|
|
QLabel *m_inputpipelab = new TQLabel(i18n("Pipe:"), gb_input);
|
|
|
|
QLabel *m_outputfilelab = new TQLabel(i18n("File:"), gb_output);
|
|
|
|
QLabel *m_outputpipelab = new TQLabel(i18n("Pipe:"), gb_output);
|
|
|
|
m_inputfile = new TQLineEdit(gb_input);
|
|
|
|
m_inputpipe = new TQLineEdit(gb_input);
|
|
|
|
m_outputfile = new TQLineEdit(gb_output);
|
|
|
|
m_outputpipe = new TQLineEdit(gb_output);
|
|
|
|
|
|
|
|
m_comment = new KTextEdit( this );
|
|
|
|
m_comment->setTextFormat(Qt::RichText );
|
|
|
|
m_comment->setReadOnly(true);
|
|
|
|
TQLabel *m_commentlab = new TQLabel( i18n( "Comment:" ), this );
|
|
|
|
|
|
|
|
QVBoxLayout *l2 = new TQVBoxLayout(this, 0, KDialog::spacingHint());
|
|
|
|
QHBoxLayout *l3 = new TQHBoxLayout(0, 0, KDialog::spacingHint());
|
|
|
|
QVBoxLayout *l7 = new TQVBoxLayout(0, 0, 0);
|
|
|
|
l2->addLayout(l3, 0);
|
|
|
|
l3->addWidget(m_commandlab);
|
|
|
|
l3->addWidget(m_command);
|
|
|
|
QHBoxLayout *l0 = new TQHBoxLayout(0, 0, KDialog::spacingHint());
|
|
|
|
QGridLayout *l10 = new TQGridLayout(0, 2, 2, 0, KDialog::spacingHint());
|
|
|
|
l2->addLayout(l0, 1);
|
|
|
|
l0->addLayout(l10);
|
|
|
|
l10->addMultiCellWidget(m_view, 0, 0, 0, 1);
|
|
|
|
l10->addWidget(gb_input, 1, 0);
|
|
|
|
l10->addWidget(gb_output, 1, 1);
|
|
|
|
l10->setRowStretch(0, 1);
|
|
|
|
l0->addLayout(l7);
|
|
|
|
l7->addWidget(m_apply);
|
|
|
|
l7->addSpacing(5);
|
|
|
|
l7->addWidget(m_addgrp);
|
|
|
|
l7->addWidget(m_addopt);
|
|
|
|
l7->addWidget(m_delopt);
|
|
|
|
l7->addSpacing(5);
|
|
|
|
l7->addWidget(m_up);
|
|
|
|
l7->addWidget(m_down);
|
|
|
|
l7->addStretch(1);
|
|
|
|
l0->addWidget(m_dummy, 1);
|
|
|
|
QGridLayout *l1 = new TQGridLayout(m_dummy, 9, 2, 0, KDialog::spacingHint());
|
|
|
|
l1->addWidget(m_desclab, 0, 0, Qt::AlignRight|Qt::AlignVCenter);
|
|
|
|
l1->addWidget(m_desc, 0, 1);
|
|
|
|
l1->addMultiCellWidget(sep1, 1, 1, 0, 1);
|
|
|
|
l1->addWidget(m_namelab, 2, 0, Qt::AlignRight|Qt::AlignVCenter);
|
|
|
|
l1->addWidget(m_name, 2, 1);
|
|
|
|
l1->addWidget(m_typelab, 3, 0, Qt::AlignRight|Qt::AlignVCenter);
|
|
|
|
l1->addWidget(m_type, 3, 1);
|
|
|
|
l1->addWidget(m_formatlab, 4, 0, Qt::AlignRight|Qt::AlignVCenter);
|
|
|
|
l1->addWidget(m_format, 4, 1);
|
|
|
|
l1->addWidget(m_defaultlab, 5, 0, Qt::AlignRight|Qt::AlignVCenter);
|
|
|
|
l1->addWidget(m_default, 5, 1);
|
|
|
|
l1->addWidget( m_persistent, 6, 1 );
|
|
|
|
l1->addMultiCellWidget(gb, 7, 7, 0, 1);
|
|
|
|
l1->setRowStretch(8, 1);
|
|
|
|
|
|
|
|
QHBoxLayout *l4 = new TQHBoxLayout(w2, 0, KDialog::spacingHint());
|
|
|
|
l4->addWidget(m_values);
|
|
|
|
QVBoxLayout *l6 = new TQVBoxLayout(0, 0, 0);
|
|
|
|
l4->addLayout(l6);
|
|
|
|
l6->addWidget(m_addval);
|
|
|
|
l6->addWidget(m_delval);
|
|
|
|
l6->addStretch(1);
|
|
|
|
QGridLayout *l5 = new TQGridLayout(w1, 3, 2, 0, KDialog::spacingHint());
|
|
|
|
l5->setRowStretch(2, 1);
|
|
|
|
l5->addWidget(m_editlab1, 0, 0, Qt::AlignRight|Qt::AlignVCenter);
|
|
|
|
l5->addWidget(m_editlab2, 1, 0, Qt::AlignRight|Qt::AlignVCenter);
|
|
|
|
l5->addWidget(m_edit1, 0, 1);
|
|
|
|
l5->addWidget(m_edit2, 1, 1);
|
|
|
|
|
|
|
|
QGridLayout *l8 = new TQGridLayout(gb_input->layout(), 2, 2,
|
|
|
|
KDialog::spacingHint());
|
|
|
|
QGridLayout *l9 = new TQGridLayout(gb_output->layout(), 2, 2,
|
|
|
|
KDialog::spacingHint());
|
|
|
|
l8->addWidget(m_inputfilelab, 0, 0);
|
|
|
|
l8->addWidget(m_inputpipelab, 1, 0);
|
|
|
|
l8->addWidget(m_inputfile, 0, 1);
|
|
|
|
l8->addWidget(m_inputpipe, 1, 1);
|
|
|
|
l9->addWidget(m_outputfilelab, 0, 0);
|
|
|
|
l9->addWidget(m_outputpipelab, 1, 0);
|
|
|
|
l9->addWidget(m_outputfile, 0, 1);
|
|
|
|
l9->addWidget(m_outputpipe, 1, 1);
|
|
|
|
|
|
|
|
QVBoxLayout *l11 = new TQVBoxLayout(gb->layout());
|
|
|
|
l11->addWidget(m_stack);
|
|
|
|
|
|
|
|
TQVBoxLayout *l12 = new TQVBoxLayout( 0, 0, 0 );
|
|
|
|
l2->addSpacing( 10 );
|
|
|
|
l2->addLayout( l12 );
|
|
|
|
l12->addWidget( m_commentlab );
|
|
|
|
l12->addWidget( m_comment );
|
|
|
|
|
|
|
|
connect(m_view, TQT_SIGNAL(selectionChanged(TQListViewItem*)), TQT_SLOT(slotSelectionChanged(TQListViewItem*)));
|
|
|
|
connect(m_values, TQT_SIGNAL(selectionChanged(TQListViewItem*)), TQT_SLOT(slotValueSelected(TQListViewItem*)));
|
|
|
|
connect(m_type, TQT_SIGNAL(activated(int)), TQT_SLOT(slotTypeChanged(int)));
|
|
|
|
connect(m_addval, TQT_SIGNAL(clicked()), TQT_SLOT(slotAddValue()));
|
|
|
|
connect(m_delval, TQT_SIGNAL(clicked()), TQT_SLOT(slotRemoveValue()));
|
|
|
|
connect(m_apply, TQT_SIGNAL(clicked()), TQT_SLOT(slotApplyChanges()));
|
|
|
|
connect(m_addgrp, TQT_SIGNAL(clicked()), TQT_SLOT(slotAddGroup()));
|
|
|
|
connect(m_addopt, TQT_SIGNAL(clicked()), TQT_SLOT(slotAddOption()));
|
|
|
|
connect(m_delopt, TQT_SIGNAL(clicked()), TQT_SLOT(slotRemoveItem()));
|
|
|
|
connect(m_up, TQT_SIGNAL(clicked()), TQT_SLOT(slotMoveUp()));
|
|
|
|
connect(m_down, TQT_SIGNAL(clicked()), TQT_SLOT(slotMoveDown()));
|
|
|
|
connect(m_command, TQT_SIGNAL(textChanged(const TQString&)), TQT_SLOT(slotCommandChanged(const TQString&)));
|
|
|
|
connect(m_view, TQT_SIGNAL(itemRenamed(TQListViewItem*,int)), TQT_SLOT(slotOptionRenamed(TQListViewItem*,int)));
|
|
|
|
connect(m_desc, TQT_SIGNAL(textChanged(const TQString&)), TQT_SLOT(slotChanged()));
|
|
|
|
connect(m_name, TQT_SIGNAL(textChanged(const TQString&)), TQT_SLOT(slotChanged()));
|
|
|
|
connect(m_format, TQT_SIGNAL(textChanged(const TQString&)), TQT_SLOT(slotChanged()));
|
|
|
|
connect(m_default, TQT_SIGNAL(textChanged(const TQString&)), TQT_SLOT(slotChanged()));
|
|
|
|
connect(m_edit1, TQT_SIGNAL(textChanged(const TQString&)), TQT_SLOT(slotChanged()));
|
|
|
|
connect(m_edit2, TQT_SIGNAL(textChanged(const TQString&)), TQT_SLOT(slotChanged()));
|
|
|
|
connect(m_type, TQT_SIGNAL(activated(int)), TQT_SLOT(slotChanged()));
|
|
|
|
connect(m_addval, TQT_SIGNAL(clicked()), TQT_SLOT(slotChanged()));
|
|
|
|
connect(m_delval, TQT_SIGNAL(clicked()), TQT_SLOT(slotChanged()));
|
|
|
|
connect( m_persistent, TQT_SIGNAL( toggled(bool) ), TQT_SLOT( slotChanged() ) );
|
|
|
|
m_dummy->setEnabled(false);
|
|
|
|
viewItem(0);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Add some short help for the normal (non expert) user
|
|
|
|
*/
|
|
|
|
TQWhatsThis::add( m_name, i18n(
|
|
|
|
"An identification string. Use only alphanumeric characters except spaces. "
|
|
|
|
"The string <b>__root__</b> is reserved for internal use." ) );
|
|
|
|
TQWhatsThis::add( m_namelab, TQWhatsThis::textFor( m_name ) );
|
|
|
|
TQWhatsThis::add( m_desc, i18n(
|
|
|
|
"A description string. This string is shown in the interface, and should "
|
|
|
|
"be explicit enough about the role of the corresponding option." ) );
|
|
|
|
TQWhatsThis::add( m_desclab, TQWhatsThis::textFor( m_desc ) );
|
|
|
|
TQWhatsThis::add( m_type, i18n(
|
|
|
|
"The type of the option. This determines how the option is presented "
|
|
|
|
"graphically to the user." ) );
|
|
|
|
TQWhatsThis::add( m_typelab, TQWhatsThis::textFor( m_type ) );
|
|
|
|
TQWhatsThis::add( m_format, i18n(
|
|
|
|
"The format of the option. This determines how the option is formatted "
|
|
|
|
"for inclusion in the global command line. The tag <b>%value</b> can be used "
|
|
|
|
"to represent the user selection. This tag will be replaced at run-time by a "
|
|
|
|
"string representation of the option value." ) );
|
|
|
|
TQWhatsThis::add( m_formatlab, TQWhatsThis::textFor( m_format ) );
|
|
|
|
TQWhatsThis::add( m_default, i18n(
|
|
|
|
"The default value of the option. For non persistent options, nothing is "
|
|
|
|
"added to the command line if the option has that default value. If this "
|
|
|
|
"value does not correspond to the actual default value of the underlying "
|
|
|
|
"utility, make the option persistent to avoid unwanted effects." ) );
|
|
|
|
TQWhatsThis::add( m_defaultlab, TQWhatsThis::textFor( m_default ) );
|
|
|
|
TQWhatsThis::add( m_persistent, i18n(
|
|
|
|
"Make the option persistent. A persistent option is always written to the "
|
|
|
|
"command line, whatever its value. This is useful when the chosen default "
|
|
|
|
"value does not match with the actual default value of the underlying utility." ) );
|
|
|
|
TQWhatsThis::add( m_command, i18n(
|
|
|
|
"The full command line to execute the associated underlying utility. This "
|
|
|
|
"command line is based on a mechanism of tags that are replaced at run-time. "
|
|
|
|
"The supported tags are:<ul>"
|
|
|
|
"<li><b>%filterargs</b>: command options</li>"
|
|
|
|
"<li><b>%filterinput</b>: input specification</li>"
|
|
|
|
"<li><b>%filteroutput</b>: output specification</li>"
|
|
|
|
"<li><b>%psu</b>: the page size in upper case</li>"
|
|
|
|
"<li><b>%psl</b>: the page size in lower case</li></ul>" ) );
|
|
|
|
TQWhatsThis::add( m_commandlab, TQWhatsThis::textFor( m_command ) );
|
|
|
|
TQWhatsThis::add( m_inputfile, i18n(
|
|
|
|
"Input specification when the underlying utility reads input data from a file. Use "
|
|
|
|
"the tag <b>%in</b> to represent the input filename." ) );
|
|
|
|
TQWhatsThis::add( m_inputfilelab, TQWhatsThis::textFor( m_inputfile ) );
|
|
|
|
TQWhatsThis::add( m_outputfile, i18n(
|
|
|
|
"Output specification when the underlying utility writes output data to a file. Use "
|
|
|
|
"the tag <b>%out</b> to represent the output filename." ) );
|
|
|
|
TQWhatsThis::add( m_outputfilelab, TQWhatsThis::textFor( m_outputfile ) );
|
|
|
|
TQWhatsThis::add( m_inputpipe, i18n(
|
|
|
|
"Input specification when the underlying utility reads input data from its "
|
|
|
|
"standard input." ) );
|
|
|
|
TQWhatsThis::add( m_inputpipelab, TQWhatsThis::textFor( m_inputpipe ) );
|
|
|
|
TQWhatsThis::add( m_outputpipe, i18n(
|
|
|
|
"Output specification when the underlying utility writes output data to its "
|
|
|
|
"standard output." ) );
|
|
|
|
TQWhatsThis::add( m_outputpipelab, TQWhatsThis::textFor( m_outputpipe ) );
|
|
|
|
TQWhatsThis::add( m_comment, i18n(
|
|
|
|
"A comment about the underlying utility, which can be viewed by the user "
|
|
|
|
"from the interface. This comment string supports basic HTML tags like "
|
|
|
|
"<a>, <b> or <i>." ) );
|
|
|
|
TQWhatsThis::add( m_commentlab, TQWhatsThis::textFor( m_comment ) );
|
|
|
|
|
|
|
|
resize(660, 200);
|
|
|
|
}
|
|
|
|
|
|
|
|
KXmlCommandAdvancedDlg::~KXmlCommandAdvancedDlg()
|
|
|
|
{
|
|
|
|
if (m_opts.count() > 0)
|
|
|
|
{
|
|
|
|
kdDebug() << "KXmlCommandAdvancedDlg: " << m_opts.count() << " items remaining" << endl;
|
|
|
|
for (TQMap<TQString,DrBase*>::ConstIterator it=m_opts.begin(); it!=m_opts.end(); ++it)
|
|
|
|
{
|
|
|
|
//kdDebug() << "Item: name=" << (*it)->name() << endl;
|
|
|
|
delete (*it);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void KXmlCommandAdvancedDlg::setCommand(KXmlCommand *xmlcmd)
|
|
|
|
{
|
|
|
|
m_xmlcmd = xmlcmd;
|
|
|
|
if (m_xmlcmd)
|
|
|
|
parseXmlCommand(m_xmlcmd);
|
|
|
|
}
|
|
|
|
|
|
|
|
void KXmlCommandAdvancedDlg::parseXmlCommand(KXmlCommand *xmlcmd)
|
|
|
|
{
|
|
|
|
m_view->clear();
|
|
|
|
QListViewItem *root = new TQListViewItem(m_view, xmlcmd->name(), xmlcmd->name());
|
|
|
|
DrMain *driver = xmlcmd->driver();
|
|
|
|
|
|
|
|
root->setPixmap(0, SmallIcon("fileprint"));
|
|
|
|
root->setOpen(true);
|
|
|
|
if (driver)
|
|
|
|
{
|
|
|
|
DrMain *clone = driver->cloneDriver();
|
|
|
|
if (!clone->get("text").isEmpty())
|
|
|
|
root->setText(0, clone->get("text"));
|
|
|
|
root->setText(1, "__root__");
|
|
|
|
clone->setName("__root__");
|
|
|
|
m_opts["__root__"] = clone;
|
|
|
|
parseGroupItem(clone, root);
|
|
|
|
clone->flatten();
|
|
|
|
}
|
|
|
|
m_command->setText(xmlcmd->command());
|
|
|
|
m_inputfile->setText(xmlcmd->io(true, false));
|
|
|
|
m_inputpipe->setText(xmlcmd->io(true, true));
|
|
|
|
m_outputfile->setText(xmlcmd->io(false, false));
|
|
|
|
m_outputpipe->setText(xmlcmd->io(false, true));
|
|
|
|
m_comment->setText( xmlcmd->comment() );
|
|
|
|
|
|
|
|
viewItem(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
void KXmlCommandAdvancedDlg::parseGroupItem(DrGroup *grp, TQListViewItem *parent)
|
|
|
|
{
|
|
|
|
QListViewItem *item(0);
|
|
|
|
|
|
|
|
TQPtrListIterator<DrGroup> git(grp->groups());
|
|
|
|
for (; git.current(); ++git)
|
|
|
|
{
|
|
|
|
QString namestr = git.current()->name();
|
|
|
|
if (namestr.isEmpty())
|
|
|
|
{
|
|
|
|
namestr = "group_"+kapp->randomString(4);
|
|
|
|
}
|
|
|
|
git.current()->setName(namestr);
|
|
|
|
item = new TQListViewItem(parent, item, git.current()->get("text"), git.current()->name());
|
|
|
|
item->setPixmap(0, SmallIcon("folder"));
|
|
|
|
item->setOpen(true);
|
|
|
|
item->setRenameEnabled(0, true);
|
|
|
|
parseGroupItem(git.current(), item);
|
|
|
|
m_opts[namestr] = git.current();
|
|
|
|
}
|
|
|
|
|
|
|
|
TQPtrListIterator<DrBase> oit(grp->options());
|
|
|
|
for (; oit.current(); ++oit)
|
|
|
|
{
|
|
|
|
QString namestr = oit.current()->name().mid(m_xmlcmd->name().length()+6);
|
|
|
|
if (namestr.isEmpty())
|
|
|
|
{
|
|
|
|
namestr = "option_"+kapp->randomString(4);
|
|
|
|
}
|
|
|
|
oit.current()->setName(namestr);
|
|
|
|
item = new TQListViewItem(parent, item, oit.current()->get("text"), namestr);
|
|
|
|
item->setPixmap(0, SmallIcon("document"));
|
|
|
|
item->setRenameEnabled(0, true);
|
|
|
|
m_opts[namestr] = oit.current();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void KXmlCommandAdvancedDlg::slotSelectionChanged(TQListViewItem *item)
|
|
|
|
{
|
|
|
|
if (item && item->depth() == 0)
|
|
|
|
item = 0;
|
|
|
|
viewItem(item);
|
|
|
|
}
|
|
|
|
|
|
|
|
void KXmlCommandAdvancedDlg::viewItem(TQListViewItem *item)
|
|
|
|
{
|
|
|
|
m_dummy->setEnabled((item != 0));
|
|
|
|
m_name->setText("");
|
|
|
|
m_desc->setText("");
|
|
|
|
m_format->setText("");
|
|
|
|
m_default->setText("");
|
|
|
|
m_values->clear();
|
|
|
|
m_edit1->setText("");
|
|
|
|
m_edit2->setText("");
|
|
|
|
m_persistent->setChecked( false );
|
|
|
|
int typeId(-1);
|
|
|
|
if (item)
|
|
|
|
{
|
|
|
|
m_name->setText(item->text(1));
|
|
|
|
m_desc->setText(item->text(0));
|
|
|
|
|
|
|
|
DrBase *opt = (m_opts.contains(item->text(1)) ? m_opts[item->text(1)] : 0);
|
|
|
|
if (opt)
|
|
|
|
{
|
|
|
|
bool isgroup = (opt->type() < DrBase::String);
|
|
|
|
if (!isgroup)
|
|
|
|
{
|
|
|
|
m_type->setCurrentItem(opt->type() - DrBase::String);
|
|
|
|
typeId = m_type->currentItem();
|
|
|
|
m_format->setText(opt->get("format"));
|
|
|
|
m_default->setText(opt->get("default"));
|
|
|
|
}
|
|
|
|
m_type->setEnabled(!isgroup);
|
|
|
|
m_default->setEnabled(!isgroup);
|
|
|
|
m_format->setEnabled(!isgroup);
|
|
|
|
m_stack->setEnabled(!isgroup);
|
|
|
|
|
|
|
|
switch (opt->type())
|
|
|
|
{
|
|
|
|
case DrBase::Float:
|
|
|
|
case DrBase::Integer:
|
|
|
|
m_edit1->setText(opt->get("minval"));
|
|
|
|
m_edit2->setText(opt->get("maxval"));
|
|
|
|
break;
|
|
|
|
case DrBase::Boolean:
|
|
|
|
case DrBase::List:
|
|
|
|
{
|
|
|
|
TQPtrListIterator<DrBase> it(*(static_cast<DrListOption*>(opt)->choices()));
|
|
|
|
QListViewItem *item(0);
|
|
|
|
for (; it.current(); ++it)
|
|
|
|
{
|
|
|
|
item = new TQListViewItem(m_values, item, it.current()->name(), it.current()->get("text"));
|
|
|
|
item->setRenameEnabled(0, true);
|
|
|
|
item->setRenameEnabled(1, true);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
m_addgrp->setEnabled(isgroup);
|
|
|
|
m_addopt->setEnabled(isgroup);
|
|
|
|
|
|
|
|
QListViewItem *prevItem = findPrev(item), *nextItem = findNext(item);
|
|
|
|
DrBase *prevOpt = (prevItem && m_opts.contains(prevItem->text(1)) ? m_opts[prevItem->text(1)] : 0);
|
|
|
|
DrBase *nextOpt = (nextItem && m_opts.contains(nextItem->text(1)) ? m_opts[nextItem->text(1)] : 0);
|
|
|
|
m_up->setEnabled(prevOpt && !(prevOpt->type() < DrBase::String && opt->type() >= DrBase::String));
|
|
|
|
m_down->setEnabled(nextOpt && !(isgroup && nextOpt->type() >= DrBase::String));
|
|
|
|
|
|
|
|
m_persistent->setChecked( opt->get( "persistent" ) == "1" );
|
|
|
|
}
|
|
|
|
|
|
|
|
m_delopt->setEnabled(true);
|
|
|
|
m_dummy->setEnabled(opt);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
m_delopt->setEnabled(false);
|
|
|
|
m_addopt->setEnabled(m_view->currentItem() && m_view->isEnabled());
|
|
|
|
m_addgrp->setEnabled(m_view->currentItem() && m_view->isEnabled());
|
|
|
|
m_up->setEnabled(false);
|
|
|
|
m_down->setEnabled(false);
|
|
|
|
}
|
|
|
|
slotTypeChanged(typeId);
|
|
|
|
m_apply->setEnabled(false);
|
|
|
|
}
|
|
|
|
|
|
|
|
void KXmlCommandAdvancedDlg::slotTypeChanged(int ID)
|
|
|
|
{
|
|
|
|
int wId(3);
|
|
|
|
ID += DrBase::String;
|
|
|
|
switch (ID)
|
|
|
|
{
|
|
|
|
case DrBase::Float:
|
|
|
|
case DrBase::Integer:
|
|
|
|
wId = 1;
|
|
|
|
break;
|
|
|
|
case DrBase::Boolean:
|
|
|
|
case DrBase::List:
|
|
|
|
wId = 2;
|
|
|
|
slotValueSelected(m_values->currentItem());
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
m_stack->raiseWidget(wId);
|
|
|
|
}
|
|
|
|
|
|
|
|
void KXmlCommandAdvancedDlg::slotAddValue()
|
|
|
|
{
|
|
|
|
QListViewItem *item = new TQListViewItem(m_values, m_values->lastItem(), i18n("Name"), i18n("Description"));
|
|
|
|
item->setRenameEnabled(0, true);
|
|
|
|
item->setRenameEnabled(1, true);
|
|
|
|
m_values->ensureItemVisible(item);
|
|
|
|
slotValueSelected(item);
|
|
|
|
item->startRename(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
void KXmlCommandAdvancedDlg::slotRemoveValue()
|
|
|
|
{
|
|
|
|
QListViewItem *item = m_values->currentItem();
|
|
|
|
if (item)
|
|
|
|
delete item;
|
|
|
|
slotValueSelected(m_values->currentItem());
|
|
|
|
}
|
|
|
|
|
|
|
|
void KXmlCommandAdvancedDlg::slotApplyChanges()
|
|
|
|
{
|
|
|
|
QListViewItem *item = m_view->currentItem();
|
|
|
|
if (item)
|
|
|
|
{
|
|
|
|
if (m_name->text().isEmpty() || m_name->text() == "__root__")
|
|
|
|
{
|
|
|
|
KMessageBox::error(this, i18n("Invalid identification name. Empty strings and \"__root__\" are not allowed."));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
m_apply->setEnabled(false);
|
|
|
|
|
|
|
|
DrBase *opt = (m_opts.contains(item->text(1)) ? m_opts[item->text(1)] : 0);
|
|
|
|
m_opts.remove(item->text(1));
|
|
|
|
delete opt;
|
|
|
|
|
|
|
|
// update tree item
|
|
|
|
item->setText(0, m_desc->text());
|
|
|
|
item->setText(1, m_name->text());
|
|
|
|
|
|
|
|
// recreate option
|
|
|
|
if (m_type->isEnabled())
|
|
|
|
{
|
|
|
|
int type = m_type->currentItem() + DrBase::String;
|
|
|
|
switch (type)
|
|
|
|
{
|
|
|
|
case DrBase::Integer:
|
|
|
|
case DrBase::Float:
|
|
|
|
if (type == DrBase::Integer)
|
|
|
|
opt = new DrIntegerOption;
|
|
|
|
else
|
|
|
|
opt = new DrFloatOption;
|
|
|
|
opt->set("minval", m_edit1->text());
|
|
|
|
opt->set("maxval", m_edit2->text());
|
|
|
|
break;
|
|
|
|
case DrBase::List:
|
|
|
|
case DrBase::Boolean:
|
|
|
|
{
|
|
|
|
if (type == DrBase::List)
|
|
|
|
opt = new DrListOption;
|
|
|
|
else
|
|
|
|
opt = new DrBooleanOption;
|
|
|
|
DrListOption *lopt = static_cast<DrListOption*>(opt);
|
|
|
|
QListViewItem *item = m_values->firstChild();
|
|
|
|
while (item)
|
|
|
|
{
|
|
|
|
DrBase *choice = new DrBase;
|
|
|
|
choice->setName(item->text(0));
|
|
|
|
choice->set("text", item->text(1));
|
|
|
|
lopt->addChoice(choice);
|
|
|
|
item = item->nextSibling();
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case DrBase::String:
|
|
|
|
opt = new DrStringOption;
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
opt->set("format", m_format->text());
|
|
|
|
opt->set("default", m_default->text());
|
|
|
|
opt->setValueText(opt->get("default"));
|
|
|
|
}
|
|
|
|
else
|
|
|
|
opt = new DrGroup;
|
|
|
|
|
|
|
|
opt->setName((m_name->text().isEmpty() ? generateId(m_opts) : m_name->text()));
|
|
|
|
opt->set("text", m_desc->text());
|
|
|
|
opt->set( "persistent", m_persistent->isChecked() ? "1" : "0" );
|
|
|
|
|
|
|
|
m_opts[opt->name()] = opt;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void KXmlCommandAdvancedDlg::slotChanged()
|
|
|
|
{
|
|
|
|
m_apply->setEnabled(true);
|
|
|
|
}
|
|
|
|
|
|
|
|
void KXmlCommandAdvancedDlg::slotAddGroup()
|
|
|
|
{
|
|
|
|
if (m_view->currentItem())
|
|
|
|
{
|
|
|
|
QString ID = generateId(m_opts);
|
|
|
|
|
|
|
|
DrGroup *grp = new DrGroup;
|
|
|
|
grp->setName(ID);
|
|
|
|
grp->set("text", i18n("New Group"));
|
|
|
|
m_opts[ID] = grp;
|
|
|
|
|
|
|
|
QListViewItem *item = new TQListViewItem(m_view->currentItem(), i18n("New Group"), ID);
|
|
|
|
item->setRenameEnabled(0, true);
|
|
|
|
item->setPixmap(0, SmallIcon("folder"));
|
|
|
|
m_view->ensureItemVisible(item);
|
|
|
|
item->startRename(0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void KXmlCommandAdvancedDlg::slotAddOption()
|
|
|
|
{
|
|
|
|
if (m_view->currentItem())
|
|
|
|
{
|
|
|
|
QString ID = generateId(m_opts);
|
|
|
|
|
|
|
|
DrBase *opt = new DrStringOption;
|
|
|
|
opt->setName(ID);
|
|
|
|
opt->set("text", i18n("New Option"));
|
|
|
|
m_opts[ID] = opt;
|
|
|
|
|
|
|
|
QListViewItem *item = new TQListViewItem(m_view->currentItem(), i18n("New Option"), ID);
|
|
|
|
item->setRenameEnabled(0, true);
|
|
|
|
item->setPixmap(0, SmallIcon("document"));
|
|
|
|
m_view->ensureItemVisible(item);
|
|
|
|
item->startRename(0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void KXmlCommandAdvancedDlg::slotRemoveItem()
|
|
|
|
{
|
|
|
|
QListViewItem *item = m_view->currentItem();
|
|
|
|
if (item)
|
|
|
|
{
|
|
|
|
QListViewItem *newCurrent(item->nextSibling());
|
|
|
|
if (!newCurrent)
|
|
|
|
newCurrent = item->parent();
|
|
|
|
removeItem(item);
|
|
|
|
delete item;
|
|
|
|
m_view->setSelected(newCurrent, true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void KXmlCommandAdvancedDlg::removeItem(TQListViewItem *item)
|
|
|
|
{
|
|
|
|
delete m_opts[item->text(1)];
|
|
|
|
m_opts.remove(item->text(1));
|
|
|
|
QListViewItem *child = item->firstChild();
|
|
|
|
while (child && item)
|
|
|
|
{
|
|
|
|
removeItem(child);
|
|
|
|
if ( item )
|
|
|
|
item = item->nextSibling();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void KXmlCommandAdvancedDlg::slotMoveUp()
|
|
|
|
{
|
|
|
|
QListViewItem *item = m_view->currentItem(), *prev = 0;
|
|
|
|
if (item && (prev=findPrev(item)))
|
|
|
|
{
|
|
|
|
QListViewItem *after(0);
|
|
|
|
if ((after=findPrev(prev)) != 0)
|
|
|
|
item->moveItem(after);
|
|
|
|
else
|
|
|
|
{
|
|
|
|
QListViewItem *parent = item->parent();
|
|
|
|
parent->takeItem(item);
|
|
|
|
parent->insertItem(item);
|
|
|
|
}
|
|
|
|
m_view->setSelected(item, true);
|
|
|
|
slotSelectionChanged(item);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void KXmlCommandAdvancedDlg::slotMoveDown()
|
|
|
|
{
|
|
|
|
QListViewItem *item = m_view->currentItem(), *next = 0;
|
|
|
|
if (item && (next=findNext(item)))
|
|
|
|
{
|
|
|
|
item->moveItem(next);
|
|
|
|
m_view->setSelected(item, true);
|
|
|
|
slotSelectionChanged(item);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void KXmlCommandAdvancedDlg::slotCommandChanged(const TQString& cmd)
|
|
|
|
{
|
|
|
|
m_inputfile->parentWidget()->setEnabled(cmd.find("%filterinput") != -1);
|
|
|
|
m_outputfile->parentWidget()->setEnabled(cmd.find("%filteroutput") != -1);
|
|
|
|
m_view->setEnabled(cmd.find("%filterargs") != -1);
|
|
|
|
m_name->parentWidget()->setEnabled(m_view->isEnabled());
|
|
|
|
slotSelectionChanged((m_view->isEnabled() ? m_view->currentItem() : 0));
|
|
|
|
m_view->setOpen(m_view->firstChild(), m_view->isEnabled());
|
|
|
|
}
|
|
|
|
|
|
|
|
void KXmlCommandAdvancedDlg::slotValueSelected(TQListViewItem *item)
|
|
|
|
{
|
|
|
|
m_addval->setEnabled(m_type->currentItem() != 4 || m_values->childCount() < 2);
|
|
|
|
m_delval->setEnabled(item != 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
void KXmlCommandAdvancedDlg::slotOptionRenamed(TQListViewItem *item, int)
|
|
|
|
{
|
|
|
|
if (item && m_opts.contains(item->text(1)))
|
|
|
|
{
|
|
|
|
DrBase *opt = m_opts[item->text(1)];
|
|
|
|
opt->set("text", item->text(0));
|
|
|
|
slotSelectionChanged(item);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void KXmlCommandAdvancedDlg::recreateGroup(TQListViewItem *item, DrGroup *grp)
|
|
|
|
{
|
|
|
|
if (!item)
|
|
|
|
return;
|
|
|
|
|
|
|
|
QListViewItem *child = item->firstChild();
|
|
|
|
while (child)
|
|
|
|
{
|
|
|
|
DrBase *opt = (m_opts.contains(child->text(1)) ? m_opts[child->text(1)] : 0);
|
|
|
|
if (opt)
|
|
|
|
{
|
|
|
|
if (opt->type() == DrBase::Group)
|
|
|
|
{
|
|
|
|
DrGroup *childGroup = static_cast<DrGroup*>(opt);
|
|
|
|
recreateGroup(child, childGroup);
|
|
|
|
grp->addGroup(childGroup);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
opt->setName("_kde-"+m_xmlcmd->name()+"-"+opt->name());
|
|
|
|
grp->addOption(opt);
|
|
|
|
}
|
|
|
|
m_opts.remove(child->text(1));
|
|
|
|
}
|
|
|
|
child = child->nextSibling();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
bool KXmlCommandAdvancedDlg::editCommand(KXmlCommand *xmlcmd, TQWidget *parent)
|
|
|
|
{
|
|
|
|
if (!xmlcmd)
|
|
|
|
return false;
|
|
|
|
|
|
|
|
KDialogBase dlg(parent, 0, true, i18n("Command Edit for %1").arg(xmlcmd->name()), KDialogBase::Ok|KDialogBase::Cancel, KDialogBase::Ok, false);
|
|
|
|
KXmlCommandAdvancedDlg *xmldlg = new KXmlCommandAdvancedDlg(&dlg);
|
|
|
|
dlg.setMainWidget(xmldlg);
|
|
|
|
//dlg.enableButton(KDialogBase::Ok, false);
|
|
|
|
xmldlg->setCommand(xmlcmd);
|
|
|
|
if (dlg.exec())
|
|
|
|
{
|
|
|
|
xmlcmd->setCommand(xmldlg->m_command->text());
|
|
|
|
xmlcmd->setIo(xmldlg->m_inputfile->text(), true, false);
|
|
|
|
xmlcmd->setIo(xmldlg->m_inputpipe->text(), true, true);
|
|
|
|
xmlcmd->setIo(xmldlg->m_outputfile->text(), false, false);
|
|
|
|
xmlcmd->setIo(xmldlg->m_outputpipe->text(), false, true);
|
|
|
|
xmlcmd->setComment( xmldlg->m_comment->text().replace( TQRegExp( "\n" ), " " ) );
|
|
|
|
|
|
|
|
// need to recreate the driver tree structure
|
|
|
|
DrMain *driver = (xmldlg->m_opts.contains("__root__") ? static_cast<DrMain*>(xmldlg->m_opts["__root__"]) : 0);
|
|
|
|
if (!driver && xmldlg->m_opts.count() > 0)
|
|
|
|
{
|
|
|
|
kdDebug() << "KXmlCommandAdvancedDlg: driver structure not found, creating one" << endl;
|
|
|
|
driver = new DrMain;
|
|
|
|
driver->setName(xmlcmd->name());
|
|
|
|
}
|
|
|
|
xmldlg->recreateGroup(xmldlg->m_view->firstChild(), driver);
|
|
|
|
xmldlg->m_opts.remove("__root__");
|
|
|
|
xmlcmd->setDriver(driver);
|
|
|
|
|
|
|
|
// remaining options will be removed in destructor
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
KXmlCommandDlg::KXmlCommandDlg(TQWidget *parent, const char *name)
|
|
|
|
: KDialogBase(parent, name, true, TQString::null, Ok|Cancel|Details, Ok, true)
|
|
|
|
{
|
|
|
|
setButtonText(Details, i18n("&Mime Type Settings"));
|
|
|
|
m_cmd = 0;
|
|
|
|
|
|
|
|
QWidget *dummy = new TQWidget(this, "TopDetail");
|
|
|
|
QWidget *topmain = new TQWidget(this, "TopMain");
|
|
|
|
|
|
|
|
QGroupBox *m_gb1 = new TQGroupBox(0, Qt::Horizontal, i18n("Supported &Input Formats"), dummy);
|
|
|
|
QGroupBox *m_gb2 = new TQGroupBox(0, Qt::Horizontal, i18n("Requirements"), topmain);
|
|
|
|
|
|
|
|
m_description = new TQLineEdit(topmain);
|
|
|
|
m_idname = new TQLabel(topmain);
|
|
|
|
m_requirements = new KListView(m_gb2);
|
|
|
|
m_requirements->addColumn("");
|
|
|
|
m_requirements->header()->hide();
|
|
|
|
m_addreq = new TQToolButton(m_gb2);
|
|
|
|
m_addreq->setIconSet(SmallIconSet("filenew"));
|
|
|
|
m_removereq = new TQToolButton(m_gb2);
|
|
|
|
m_removereq->setIconSet(SmallIconSet("editdelete"));
|
|
|
|
QPushButton *m_edit = new KPushButton(KGuiItem(i18n("&Edit Command..."), "edit"), topmain);
|
|
|
|
m_mimetype = new TQComboBox(dummy);
|
|
|
|
m_availablemime = new KListBox(m_gb1);
|
|
|
|
m_selectedmime = new KListBox(m_gb1);
|
|
|
|
m_addmime = new TQToolButton(m_gb1);
|
|
|
|
m_addmime->setIconSet(TQApplication::reverseLayout()? SmallIconSet("forward") : SmallIconSet("back"));
|
|
|
|
m_removemime = new TQToolButton(m_gb1);
|
|
|
|
m_removemime->setIconSet(TQApplication::reverseLayout()? SmallIconSet("back" ) : SmallIconSet("forward"));
|
|
|
|
m_gb2->setMinimumWidth(380);
|
|
|
|
m_gb1->setMinimumHeight(180);
|
|
|
|
m_requirements->setMaximumHeight(80);
|
|
|
|
m_removereq->setEnabled(false);
|
|
|
|
m_addmime->setEnabled(false);
|
|
|
|
m_removemime->setEnabled(false);
|
|
|
|
|
|
|
|
QLabel *m_desclab = new TQLabel(i18n("&Description:"), topmain);
|
|
|
|
m_desclab->setBuddy(m_description);
|
|
|
|
QLabel *m_mimetypelab = new TQLabel(i18n("Output &format:"), dummy);
|
|
|
|
m_mimetypelab->setBuddy(m_mimetype);
|
|
|
|
QLabel *m_idnamelab = new TQLabel(i18n("ID name:"), topmain);
|
|
|
|
|
|
|
|
QFont f(m_idname->font());
|
|
|
|
f.setBold(true);
|
|
|
|
m_idname->setFont(f);
|
|
|
|
|
|
|
|
KSeparator *sep1 = new KSeparator(TQFrame::HLine, dummy);
|
|
|
|
|
|
|
|
QVBoxLayout *l0 = new TQVBoxLayout(topmain, 0, 10);
|
|
|
|
QGridLayout *l5 = new TQGridLayout(0, 2, 2, 0, 5);
|
|
|
|
l0->addLayout(l5);
|
|
|
|
l5->addWidget(m_idnamelab, 0, 0);
|
|
|
|
l5->addWidget(m_idname, 0, 1);
|
|
|
|
l5->addWidget(m_desclab, 1, 0);
|
|
|
|
l5->addWidget(m_description, 1, 1);
|
|
|
|
l0->addWidget(m_gb2);
|
|
|
|
QHBoxLayout *l3 = new TQHBoxLayout(0, 0, 0);
|
|
|
|
l0->addLayout(l3);
|
|
|
|
l3->addWidget(m_edit);
|
|
|
|
l3->addStretch(1);
|
|
|
|
|
|
|
|
QVBoxLayout *l7 = new TQVBoxLayout(dummy, 0, 10);
|
|
|
|
QHBoxLayout *l6 = new TQHBoxLayout(0, 0, 5);
|
|
|
|
l7->addWidget(sep1);
|
|
|
|
l7->addLayout(l6);
|
|
|
|
l6->addWidget(m_mimetypelab, 0);
|
|
|
|
l6->addWidget(m_mimetype, 1);
|
|
|
|
l7->addWidget(m_gb1);
|
|
|
|
QGridLayout *l2 = new TQGridLayout(m_gb1->layout(), 4, 3, 10);
|
|
|
|
l2->addMultiCellWidget(m_availablemime, 0, 3, 2, 2);
|
|
|
|
l2->addMultiCellWidget(m_selectedmime, 0, 3, 0, 0);
|
|
|
|
l2->addWidget(m_addmime, 1, 1);
|
|
|
|
l2->addWidget(m_removemime, 2, 1);
|
|
|
|
l2->setRowStretch(0, 1);
|
|
|
|
l2->setRowStretch(3, 1);
|
|
|
|
QHBoxLayout *l4 = new TQHBoxLayout(m_gb2->layout(), 10);
|
|
|
|
l4->addWidget(m_requirements);
|
|
|
|
QVBoxLayout *l8 = new TQVBoxLayout(0, 0, 0);
|
|
|
|
l4->addLayout(l8);
|
|
|
|
l8->addWidget(m_addreq);
|
|
|
|
l8->addWidget(m_removereq);
|
|
|
|
l8->addStretch(1);
|
|
|
|
|
|
|
|
connect(m_addmime, TQT_SIGNAL(clicked()), TQT_SLOT(slotAddMime()));
|
|
|
|
connect(m_removemime, TQT_SIGNAL(clicked()), TQT_SLOT(slotRemoveMime()));
|
|
|
|
connect(m_edit, TQT_SIGNAL(clicked()), TQT_SLOT(slotEditCommand()));
|
|
|
|
connect(m_requirements, TQT_SIGNAL(selectionChanged(TQListViewItem*)), TQT_SLOT(slotReqSelected(TQListViewItem*)));
|
|
|
|
connect(m_availablemime, TQT_SIGNAL(selectionChanged(TQListBoxItem*)), TQT_SLOT(slotAvailableSelected(TQListBoxItem*)));
|
|
|
|
connect(m_selectedmime, TQT_SIGNAL(selectionChanged(TQListBoxItem*)), TQT_SLOT(slotSelectedSelected(TQListBoxItem*)));
|
|
|
|
connect(m_addreq, TQT_SIGNAL(clicked()), TQT_SLOT(slotAddReq()));
|
|
|
|
connect(m_removereq, TQT_SIGNAL(clicked()), TQT_SLOT(slotRemoveReq()));
|
|
|
|
|
|
|
|
KMimeType::List list = KMimeType::allMimeTypes();
|
|
|
|
for (TQValueList<KMimeType::Ptr>::ConstIterator it=list.begin(); it!=list.end(); ++it)
|
|
|
|
{
|
|
|
|
QString mimetype = (*it)->name();
|
|
|
|
m_mimelist << mimetype;
|
|
|
|
}
|
|
|
|
|
|
|
|
m_mimelist.sort();
|
|
|
|
m_mimetype->insertStringList(m_mimelist);
|
|
|
|
m_availablemime->insertStringList(m_mimelist);
|
|
|
|
|
|
|
|
setMainWidget(topmain);
|
|
|
|
setDetailsWidget(dummy);
|
|
|
|
}
|
|
|
|
|
|
|
|
void KXmlCommandDlg::setCommand(KXmlCommand *xmlCmd)
|
|
|
|
{
|
|
|
|
setCaption(i18n("Command Edit for %1").arg(xmlCmd->name()));
|
|
|
|
|
|
|
|
m_cmd = xmlCmd;
|
|
|
|
m_description->setText(i18n(xmlCmd->description().utf8()));
|
|
|
|
m_idname->setText(xmlCmd->name());
|
|
|
|
|
|
|
|
m_requirements->clear();
|
|
|
|
QStringList list = xmlCmd->requirements();
|
|
|
|
QListViewItem *item(0);
|
|
|
|
for (TQStringList::ConstIterator it=list.begin(); it!=list.end(); ++it)
|
|
|
|
{
|
|
|
|
item = new TQListViewItem(m_requirements, item, *it);
|
|
|
|
item->setRenameEnabled(0, true);
|
|
|
|
}
|
|
|
|
|
|
|
|
int index = m_mimelist.findIndex(xmlCmd->mimeType());
|
|
|
|
if (index != -1)
|
|
|
|
m_mimetype->setCurrentItem(index);
|
|
|
|
else
|
|
|
|
m_mimetype->setCurrentItem(0);
|
|
|
|
|
|
|
|
list = xmlCmd->inputMimeTypes();
|
|
|
|
m_selectedmime->clear();
|
|
|
|
m_availablemime->clear();
|
|
|
|
m_availablemime->insertStringList(m_mimelist);
|
|
|
|
for (TQStringList::ConstIterator it=list.begin(); it!=list.end(); ++it)
|
|
|
|
{
|
|
|
|
m_selectedmime->insertItem(*it);
|
|
|
|
delete m_availablemime->findItem(*it, Qt::ExactMatch);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void KXmlCommandDlg::slotOk()
|
|
|
|
{
|
|
|
|
if (m_cmd)
|
|
|
|
{
|
|
|
|
m_cmd->setMimeType((m_mimetype->currentText() == "all/all" ? TQString::null : m_mimetype->currentText()));
|
|
|
|
m_cmd->setDescription(m_description->text());
|
|
|
|
QStringList l;
|
|
|
|
QListViewItem *item = m_requirements->firstChild();
|
|
|
|
while (item)
|
|
|
|
{
|
|
|
|
l << item->text(0);
|
|
|
|
item = item->nextSibling();
|
|
|
|
}
|
|
|
|
m_cmd->setRequirements(l);
|
|
|
|
l.clear();
|
|
|
|
for (uint i=0; i<m_selectedmime->count(); i++)
|
|
|
|
l << m_selectedmime->text(i);
|
|
|
|
m_cmd->setInputMimeTypes(l);
|
|
|
|
}
|
|
|
|
KDialogBase::slotOk();
|
|
|
|
}
|
|
|
|
|
|
|
|
bool KXmlCommandDlg::editCommand(KXmlCommand *xmlCmd, TQWidget *parent)
|
|
|
|
{
|
|
|
|
if (!xmlCmd)
|
|
|
|
return false;
|
|
|
|
|
|
|
|
KXmlCommandDlg xmldlg(parent, 0);
|
|
|
|
xmldlg.setCommand(xmlCmd);
|
|
|
|
|
|
|
|
return (xmldlg.exec() == Accepted);
|
|
|
|
}
|
|
|
|
|
|
|
|
void KXmlCommandDlg::slotAddMime()
|
|
|
|
{
|
|
|
|
int index = m_availablemime->currentItem();
|
|
|
|
if (index != -1)
|
|
|
|
{
|
|
|
|
m_selectedmime->insertItem(m_availablemime->currentText());
|
|
|
|
m_availablemime->removeItem(index);
|
|
|
|
m_selectedmime->sort();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void KXmlCommandDlg::slotRemoveMime()
|
|
|
|
{
|
|
|
|
int index = m_selectedmime->currentItem();
|
|
|
|
if (index != -1)
|
|
|
|
{
|
|
|
|
m_availablemime->insertItem(m_selectedmime->currentText());
|
|
|
|
m_selectedmime->removeItem(index);
|
|
|
|
m_availablemime->sort();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void KXmlCommandDlg::slotEditCommand()
|
|
|
|
{
|
|
|
|
KXmlCommandAdvancedDlg::editCommand(m_cmd, parentWidget());
|
|
|
|
}
|
|
|
|
|
|
|
|
void KXmlCommandDlg::slotAddReq()
|
|
|
|
{
|
|
|
|
QListViewItem *item = new TQListViewItem(m_requirements, m_requirements->lastItem(), i18n("exec:/"));
|
|
|
|
item->setRenameEnabled(0, true);
|
|
|
|
m_requirements->ensureItemVisible(item);
|
|
|
|
item->startRename(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
void KXmlCommandDlg::slotRemoveReq()
|
|
|
|
{
|
|
|
|
delete m_requirements->currentItem();
|
|
|
|
}
|
|
|
|
|
|
|
|
void KXmlCommandDlg::slotReqSelected(TQListViewItem *item)
|
|
|
|
{
|
|
|
|
m_removereq->setEnabled(item);
|
|
|
|
}
|
|
|
|
|
|
|
|
void KXmlCommandDlg::slotAvailableSelected(TQListBoxItem *item)
|
|
|
|
{
|
|
|
|
m_addmime->setEnabled(item);
|
|
|
|
}
|
|
|
|
|
|
|
|
void KXmlCommandDlg::slotSelectedSelected(TQListBoxItem *item)
|
|
|
|
{
|
|
|
|
m_removemime->setEnabled(item);
|
|
|
|
}
|
|
|
|
|
|
|
|
#include "kxmlcommanddlg.moc"
|