summaryrefslogtreecommitdiffstats
path: root/parts/partexplorer/partexplorerform.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'parts/partexplorer/partexplorerform.cpp')
-rw-r--r--parts/partexplorer/partexplorerform.cpp231
1 files changed, 231 insertions, 0 deletions
diff --git a/parts/partexplorer/partexplorerform.cpp b/parts/partexplorer/partexplorerform.cpp
new file mode 100644
index 00000000..f3a1caad
--- /dev/null
+++ b/parts/partexplorer/partexplorerform.cpp
@@ -0,0 +1,231 @@
+/***************************************************************************
+ * Copyright (C) 2003 by Mario Scalas *
+ * *
+ * 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 <qlineedit.h>
+#include <qtextedit.h>
+#include <qpushbutton.h>
+#include <qtooltip.h>
+#include <qlayout.h>
+#include <qwhatsthis.h>
+#include <qlabel.h>
+
+#include <klistview.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kdebug.h>
+#include <kcombobox.h>
+#include <kservicetype.h>
+
+#include "partexplorerformbase.h"
+#include "partexplorerform.h"
+
+///////////////////////////////////////////////////////////////////////////////
+// class PropertyItem
+///////////////////////////////////////////////////////////////////////////////
+namespace PartExplorer{
+
+class PropertyItem : public KListViewItem
+{
+public:
+ PropertyItem( KListViewItem *parent, const QString &propertyName,
+ const QString &propertyType, const QString &propertyValue )
+ : KListViewItem( parent )
+ {
+ setText( 0, propertyName );
+ setText( 1, propertyType );
+ setText( 2, propertyValue );
+ }
+
+ QString tipText() const
+ {
+ QString tip = i18n("Name: %1 | Type: %2 | Value: %3");
+ return tip.arg( text(0) ).arg( text(1) ).arg( text(2) );
+ }
+};
+
+}
+///////////////////////////////////////////////////////////////////////////////
+// class ResultsList
+///////////////////////////////////////////////////////////////////////////////
+
+class ResultList;
+
+class ResultsToolTip: public QToolTip
+{
+public:
+ ResultsToolTip( ResultsList* parent );
+ virtual void maybeTip( const QPoint& p );
+
+private:
+ ResultsList* m_resultsList;
+};
+
+class ResultsList : public KListView
+{
+public:
+ ResultsList( QWidget *parent )
+ : KListView( parent, "resultslist" )
+ {
+ this->setShowToolTips( false );
+ new ResultsToolTip( this );
+ }
+
+ virtual ~ResultsList() {}
+
+ void clear()
+ {
+ KListView::clear();
+ }
+};
+
+ResultsToolTip::ResultsToolTip( ResultsList* parent )
+ : QToolTip( parent->viewport() ), m_resultsList( parent )
+{
+}
+
+void ResultsToolTip::maybeTip( const QPoint& p )
+{
+ PartExplorer::PropertyItem *item = dynamic_cast<PartExplorer::PropertyItem*>( m_resultsList->itemAt( p ) );
+ if ( item )
+ {
+ QRect r = m_resultsList->itemRect( item );
+ if ( r.isValid() )
+ tip( r, item->tipText() );
+ }
+}
+
+
+///////////////////////////////////////////////////////////////////////////////
+// class PartExplorerForm
+///////////////////////////////////////////////////////////////////////////////
+
+PartExplorerForm::PartExplorerForm( QWidget *parent )
+ : KDialogBase( parent, "parteplorerform", false,
+ i18n("Part Explorer - A Services Lister"), User1 | Close, User1, true )
+{
+ m_base = new PartExplorerFormBase( this, "partexplorerformbase", 0 );
+ m_resultsList = new ResultsList( m_base );
+ m_resultsList->addColumn( i18n( "Property" ) );
+ m_resultsList->addColumn( i18n( "Type" ) );
+ m_resultsList->addColumn( i18n( "Value" ) );
+ m_resultsList->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)3,
+ (QSizePolicy::SizeType)3, 0, 0,
+ m_resultsList->sizePolicy().hasHeightForWidth() ) );
+ QWhatsThis::add( m_resultsList, i18n("<b>Matching services</b><p>Results (if any) are shown grouped by matching service name.") );
+ m_base->resultsLabel->setBuddy(m_resultsList);
+ m_base->layout()->add( m_resultsList );
+ setMainWidget( m_base );
+ m_base->typeCombo->lineEdit()->setFocus();
+
+ // User1 button text
+ setButtonText( User1, i18n("&Search") );
+
+ // Resize dialog
+ resize( 480, 512 );
+
+// connect( m_base->typeCombo->lineEdit(), SIGNAL(returnPressed()), this, SLOT(slotSearchRequested()) );
+// connect( m_base->constraintsText, SIGNAL(returnPressed()), this, SLOT(slotSearchRequested()) );
+
+ connect( actionButton(User1), SIGNAL(clicked()), this, SLOT(slotSearchRequested()) );
+// connect( m_base->typeCombo->lineEdit(), SIGNAL( textChanged ( const QString & ) ), this, SLOT( slotServicetypeChanged( const QString& ) ) );
+// slotServicetypeChanged( m_base->typeCombo->lineEdit()->text() );
+
+ // populating with all known servicetypes
+ KServiceType::List serviceList = KServiceType::allServiceTypes();
+ QStringList list;
+ KServiceType::List::Iterator it = serviceList.begin();
+ while( it != serviceList.end() )
+ {
+ list << (*it)->name();
+ ++it;
+ }
+ list.sort();
+ m_base->typeCombo->insertStringList( list );
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+PartExplorerForm::~PartExplorerForm()
+{
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+void PartExplorerForm::slotSearchRequested()
+{
+ QString serviceType = m_base->typeCombo->lineEdit()->text();
+ QString constraints = m_base->constraintsText->text();
+
+ kdDebug(9000) << "===> PartExplorerForm::slotSearchRequested(): " <<
+ " serviceType = " << serviceType << ", constraints = " << constraints << endl;
+
+ // Query for requested services
+ KTrader::OfferList foundServices = KTrader::self()->query( serviceType, constraints );
+ fillServiceList( foundServices );
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+void PartExplorerForm::slotDisplayError( QString errorMessage )
+{
+ if (errorMessage.isEmpty())
+ {
+ errorMessage = i18n("Unknown error.");
+ }
+ KMessageBox::error( this, errorMessage );
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+void PartExplorerForm::fillServiceList( const KTrader::OfferList &services )
+{
+ this->m_resultsList->clear();
+
+ if ( services.isEmpty())
+ {
+ slotDisplayError( i18n("No service found matching the criteria.") );
+ return;
+ }
+
+ this->m_resultsList->setRootIsDecorated( true );
+
+ KListViewItem *rootItem = 0;
+
+ KTrader::OfferList::ConstIterator it = services.begin();
+ for ( ; it != services.end(); ++it )
+ {
+ KService::Ptr service = (*it);
+ KListViewItem *serviceItem = new KListViewItem( this->m_resultsList, rootItem, service->name() );
+
+ QStringList propertyNames = service->propertyNames();
+ for ( QStringList::const_iterator it = propertyNames.begin(); it != propertyNames.end(); ++it )
+ {
+ QString propertyName = (*it);
+ QVariant property = service->property( propertyName );
+ QString propertyType = property.typeName();
+ QString propertyValue;
+ if (propertyType == "QStringList") {
+ propertyValue = property.toStringList().join(", ");
+ }
+ else {
+ propertyValue = property.toString();
+ }
+
+ QString dProperty = " *** Found property < %1, %2, %3 >";
+ dProperty = dProperty.arg( propertyName ).arg( propertyType ).arg( propertyValue );
+ kdDebug( 9000 ) << dProperty << endl;
+
+ new PartExplorer::PropertyItem( serviceItem, propertyName, propertyType, propertyValue );
+ }
+ }
+}
+
+#include "partexplorerform.moc"