summaryrefslogtreecommitdiffstats
path: root/tdeprint/management/kxmlcommandselector.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tdeprint/management/kxmlcommandselector.cpp')
-rw-r--r--tdeprint/management/kxmlcommandselector.cpp285
1 files changed, 285 insertions, 0 deletions
diff --git a/tdeprint/management/kxmlcommandselector.cpp b/tdeprint/management/kxmlcommandselector.cpp
new file mode 100644
index 000000000..dfefe0a8b
--- /dev/null
+++ b/tdeprint/management/kxmlcommandselector.cpp
@@ -0,0 +1,285 @@
+/*
+ * This file is part of the KDE libraries
+ * Copyright (c) 2001 Michael Goffioul <tdeprint@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 "kxmlcommandselector.h"
+#include "kxmlcommand.h"
+#include "kxmlcommanddlg.h"
+#include "tdeprintcheck.h"
+
+#include <tqcombobox.h>
+#include <kpushbutton.h>
+#include <tqlabel.h>
+#include <tqcheckbox.h>
+#include <tqlayout.h>
+#include <tqtooltip.h>
+#include <tqlineedit.h>
+#include <kinputdialog.h>
+#include <klocale.h>
+#include <kiconloader.h>
+#include <kmessagebox.h>
+#include <kfiledialog.h>
+#include <kseparator.h>
+#include <kguiitem.h>
+#include <kactivelabel.h>
+#include <kdatetbl.h>
+#include <kdialogbase.h>
+
+KXmlCommandSelector::KXmlCommandSelector(bool canBeNull, TQWidget *parent, const char *name, KDialogBase *dlg)
+: TQWidget(parent, name)
+{
+ m_cmd = new TQComboBox(this);
+ connect(m_cmd, TQT_SIGNAL(activated(int)), TQT_SLOT(slotCommandSelected(int)));
+ TQPushButton *m_add = new KPushButton(this);
+ TQPushButton *m_edit = new KPushButton(this);
+ m_add->setPixmap(SmallIcon("filenew"));
+ m_edit->setPixmap(SmallIcon("configure"));
+ connect(m_add, TQT_SIGNAL(clicked()), TQT_SLOT(slotAddCommand()));
+ connect(m_edit, TQT_SIGNAL(clicked()), TQT_SLOT(slotEditCommand()));
+ TQToolTip::add(m_add, i18n("New command"));
+ TQToolTip::add(m_edit, i18n("Edit command"));
+ m_shortinfo = new TQLabel(this);
+ m_helpbtn = new KPushButton( this );
+ m_helpbtn->setIconSet( SmallIconSet( "help" ) );
+ connect( m_helpbtn, TQT_SIGNAL( clicked() ), TQT_SLOT( slotHelpCommand() ) );
+ TQToolTip::add( m_helpbtn, i18n( "Information" ) );
+ m_helpbtn->setEnabled( false );
+
+ m_line = 0;
+ m_usefilter = 0;
+ TQPushButton *m_browse = 0;
+
+ TQVBoxLayout *l0 = new TQVBoxLayout(this, 0, 10);
+
+ if (canBeNull)
+ {
+ m_line = new TQLineEdit(this);
+ m_browse = new KPushButton(KGuiItem(i18n("&Browse..."), "fileopen"), this);
+ m_usefilter = new TQCheckBox(i18n("Use co&mmand:"), this);
+ connect(m_browse, TQT_SIGNAL(clicked()), TQT_SLOT(slotBrowse()));
+ connect(m_usefilter, TQT_SIGNAL(toggled(bool)), m_line, TQT_SLOT(setDisabled(bool)));
+ connect(m_usefilter, TQT_SIGNAL(toggled(bool)), m_browse, TQT_SLOT(setDisabled(bool)));
+ connect(m_usefilter, TQT_SIGNAL(toggled(bool)), m_cmd, TQT_SLOT(setEnabled(bool)));
+ connect(m_usefilter, TQT_SIGNAL(toggled(bool)), m_add, TQT_SLOT(setEnabled(bool)));
+ connect(m_usefilter, TQT_SIGNAL(toggled(bool)), m_edit, TQT_SLOT(setEnabled(bool)));
+ connect(m_usefilter, TQT_SIGNAL(toggled(bool)), m_shortinfo, TQT_SLOT(setEnabled(bool)));
+ connect( m_usefilter, TQT_SIGNAL( toggled( bool ) ), TQT_SLOT( slotXmlCommandToggled( bool ) ) );
+ m_usefilter->setChecked(true);
+ m_usefilter->setChecked(false);
+ //setFocusProxy(m_line);
+ setTabOrder(m_usefilter, m_cmd);
+ setTabOrder(m_cmd, m_add);
+ setTabOrder(m_add, m_edit);
+
+ TQHBoxLayout *l1 = new TQHBoxLayout(0, 0, 10);
+ l0->addLayout(l1);
+ l1->addWidget(m_line);
+ l1->addWidget(m_browse);
+
+ KSeparator *sep = new KSeparator(Qt::Horizontal, this);
+ l0->addWidget(sep);
+ }
+ else
+ setFocusProxy(m_cmd);
+
+ TQGridLayout *l2 = new TQGridLayout(0, 2, (m_usefilter?3:2), 0, 5);
+ int c(0);
+ l0->addLayout(TQT_TQLAYOUT(l2));
+ if (m_usefilter)
+ {
+ l2->addWidget(m_usefilter, 0, c++);
+ }
+ l2->addWidget(m_cmd, 0, c);
+ TQHBoxLayout *l4 = new TQHBoxLayout( 0, 0, 5 );
+ l2->addLayout( l4, 1, c );
+ l4->addWidget( m_helpbtn, 0 );
+ l4->addWidget( m_shortinfo, 1 );
+ TQHBoxLayout *l3 = new TQHBoxLayout(0, 0, 0);
+ l2->addLayout(l3, 0, c+1);
+ l3->addWidget(m_add);
+ l3->addWidget(m_edit);
+
+ if ( dlg )
+ connect( this, TQT_SIGNAL( commandValid( bool ) ), dlg, TQT_SLOT( enableButtonOK( bool ) ) );
+
+ loadCommands();
+}
+
+void KXmlCommandSelector::loadCommands()
+{
+ TQString thisCmd = (m_cmd->currentItem() != -1 ? m_cmdlist[m_cmd->currentItem()] : TQString::null);
+
+ m_cmd->clear();
+ m_cmdlist.clear();
+
+ TQStringList list = KXmlCommandManager::self()->commandListWithDescription();
+ TQStringList desclist;
+ for (TQStringList::Iterator it=list.begin(); it!=list.end(); ++it)
+ {
+ m_cmdlist << (*it);
+ ++it;
+ desclist << (*it);
+ }
+ m_cmd->insertStringList(desclist);
+
+ int index = m_cmdlist.findIndex(thisCmd);
+ if (index != -1)
+ m_cmd->setCurrentItem(index);
+ if (m_cmd->currentItem() != -1 && m_cmd->isEnabled())
+ slotCommandSelected(m_cmd->currentItem());
+}
+
+TQString KXmlCommandSelector::command() const
+{
+ TQString cmd;
+ if (m_line && !m_usefilter->isChecked())
+ cmd = m_line->text();
+ else
+ cmd = m_cmdlist[m_cmd->currentItem()];
+ return cmd;
+}
+
+void KXmlCommandSelector::setCommand(const TQString& cmd)
+{
+ int index = m_cmdlist.findIndex(cmd);
+
+ if (m_usefilter)
+ m_usefilter->setChecked(index != -1);
+ if (m_line)
+ m_line->setText((index == -1 ? cmd : TQString::null));
+ if (index != -1)
+ m_cmd->setCurrentItem(index);
+ if (m_cmd->currentItem() != -1 && m_cmd->isEnabled())
+ slotCommandSelected(m_cmd->currentItem());
+}
+
+void KXmlCommandSelector::slotAddCommand()
+{
+ bool ok(false);
+ TQString cmdId = KInputDialog::getText(i18n("Command Name"), i18n("Enter an identification name for the new command:"), TQString::null, &ok, this);
+ if (ok)
+ {
+ bool added(true);
+
+ if (m_cmdlist.findIndex(cmdId) != -1)
+ {
+ if (KMessageBox::warningContinueCancel(
+ this,
+ i18n("A command named %1 already exists. Do you want "
+ "to continue and edit the existing one?").arg(cmdId),
+ TQString::null,
+ KStdGuiItem::cont()) == KMessageBox::Cancel)
+ {
+ return;
+ }
+ else
+ added = false;
+ }
+
+ KXmlCommand *xmlCmd = KXmlCommandManager::self()->loadCommand(cmdId);
+ if (KXmlCommandDlg::editCommand(xmlCmd, this))
+ KXmlCommandManager::self()->saveCommand(xmlCmd);
+
+ if (added)
+ loadCommands();
+ }
+}
+
+void KXmlCommandSelector::slotEditCommand()
+{
+ TQString xmlId = m_cmdlist[m_cmd->currentItem()];
+ KXmlCommand *xmlCmd = KXmlCommandManager::self()->loadCommand(xmlId);
+ if (xmlCmd)
+ {
+ if (KXmlCommandDlg::editCommand(xmlCmd, this))
+ {
+ // force to load the driver if not already done
+ xmlCmd->driver();
+ KXmlCommandManager::self()->saveCommand(xmlCmd);
+ }
+ m_cmd->changeItem(xmlCmd->description(), m_cmd->currentItem());
+ delete xmlCmd;
+ slotCommandSelected(m_cmd->currentItem());
+ }
+ else
+ KMessageBox::error(this, i18n("Internal error. The XML driver for the command %1 could not be found.").arg(xmlId));
+}
+
+void KXmlCommandSelector::slotBrowse()
+{
+ TQString filename = KFileDialog::getOpenFileName(TQString::null, TQString::null, this);
+ if (!filename.isEmpty() && m_line)
+ m_line->setText(filename);
+}
+
+void KXmlCommandSelector::slotCommandSelected(int ID)
+{
+ KXmlCommand *xmlCmd = KXmlCommandManager::self()->loadCommand(m_cmdlist[ID], true);
+ if (xmlCmd)
+ {
+ TQString msg;
+ if ( xmlCmd->isValid() && KdeprintChecker::check( xmlCmd->requirements() ) )
+ {
+ msg = TQString::fromLocal8Bit("(ID = %1, %2 = ").arg(xmlCmd->name()).arg(i18n("output"));
+ if (KXmlCommandManager::self()->checkCommand(xmlCmd->name(), KXmlCommandManager::None, KXmlCommandManager::Basic))
+ {
+ if (xmlCmd->mimeType() == "all/all")
+ msg.append(i18n("undefined"));
+ else
+ msg.append(xmlCmd->mimeType());
+ }
+ else
+ msg.append(i18n("not allowed"));
+ msg.append(")");
+ emit commandValid( true );
+ }
+ else
+ {
+ msg = "<font color=\"red\">" + i18n( "(Unavailable: requirements not satisfied)" ) + "</font>";
+ emit commandValid( false );
+ }
+ m_shortinfo->setText(msg);
+ m_help = xmlCmd->comment();
+ m_helpbtn->setEnabled( !m_help.isEmpty() );
+ }
+ delete xmlCmd;
+}
+
+void KXmlCommandSelector::slotXmlCommandToggled( bool on )
+{
+ if ( on )
+ slotCommandSelected( m_cmd->currentItem() );
+ else
+ {
+ emit commandValid( true );
+ m_shortinfo->setText( TQString::null );
+ }
+}
+
+void KXmlCommandSelector::slotHelpCommand()
+{
+ KPopupFrame *pop = new KPopupFrame( m_helpbtn );
+ KActiveLabel *lab = new KActiveLabel( m_help, pop );
+ lab->resize( lab->tqsizeHint() );
+ pop->setMainWidget( lab );
+ pop->exec( m_helpbtn->mapToGlobal( TQPoint( m_helpbtn->width(), 0 ) ) );
+ pop->close( 0 );
+ delete pop;
+}
+
+#include "kxmlcommandselector.moc"