20 #include "ktraderparsetree.h"
25 #include <kuserprofile.h>
26 #include <kstandarddirs.h>
27 #include <kstaticdeleter.h>
30 template class KStaticDeleter<TDETrader>;
32 using namespace TDEIO;
37 TDETraderSorter() { m_pService = 0; };
38 TDETraderSorter(
const TDETraderSorter& s ) : m_userPreference( s.m_userPreference ),
39 m_bAllowAsDefault( s.m_bAllowAsDefault ),
40 m_traderPreference( s.m_traderPreference ), m_pService( s.m_pService ) { }
41 TDETraderSorter(
const KService::Ptr &_service,
double _pref1,
int _pref2,
bool _default )
42 { m_pService = _service;
43 m_userPreference = _pref2;
44 m_traderPreference = _pref1;
45 m_bAllowAsDefault = _default;
48 KService::Ptr service()
const {
return m_pService; }
50 bool operator< (
const TDETraderSorter& )
const;
61 bool m_bAllowAsDefault;
67 double m_traderPreference;
69 KService::Ptr m_pService;
72 bool TDETraderSorter::operator< (
const TDETraderSorter& _o )
const
74 if ( _o.m_bAllowAsDefault && !m_bAllowAsDefault )
76 if ( _o.m_userPreference > m_userPreference )
78 if ( _o.m_userPreference < m_userPreference )
80 if ( _o.m_traderPreference > m_traderPreference )
88 static KStaticDeleter<TDETrader> ktradersd;
93 ktradersd.setObject( s_self,
new TDETrader );
98 TDETrader::TDETrader()
107 const TQString& _preferences )
const
109 return query( _servicetype, TQString::null, _constraint, _preferences );
113 const TQString& _constraint,
114 const TQString& _preferences )
const
117 ParseTreeBase::Ptr constr;
118 ParseTreeBase::Ptr prefs;
120 if ( !_constraint.isEmpty() )
121 constr = TDEIO::parseConstraints( _constraint );
123 if ( !_preferences.isEmpty() )
124 prefs = TDEIO::parsePreferences( _preferences );
126 KServiceTypeProfile::OfferList lst;
131 if ( lst.count() == 0 )
138 KServiceTypeProfile::OfferList::Iterator it = lst.begin();
139 while( it != lst.end() )
141 if ( matchConstraint( constr, (*it).service(), lst ) != 1 )
142 it = lst.remove( it );
150 TQValueList<TDETraderSorter> sorter;
151 KServiceTypeProfile::OfferList::Iterator it = lst.begin();
152 for( ; it != lst.end(); ++it )
154 PreferencesReturn p = matchPreferences( prefs, (*it).service(), lst );
155 if ( p.type == PreferencesReturn::PRT_DOUBLE )
156 sorter.append( TDETraderSorter( (*it).service(), p.f, (*it).preference(), (*it).allowAsDefault() ) );
158 qBubbleSort( sorter );
160 TQValueList<TDETraderSorter>::Iterator it2 = sorter.begin();
161 for( ; it2 != sorter.end(); ++it2 )
162 ret.prepend( (*it2).service() );
166 KServiceTypeProfile::OfferList::Iterator it = lst.begin();
167 for( ; it != lst.end(); ++it )
168 ret.append( (*it).service() );
172 TQString query = _servicetype;
173 if ( !_genericServiceType.isEmpty() ) {
175 query += _genericServiceType;
177 kdDebug(7014) <<
"query for " << query
178 <<
" : returning " << ret.count() <<
" offers" << endl;
183 void TDETrader::virtual_hook(
int,
void* )
186 #include "ktrader.moc"
OfferList offers() const
Returns the list of all service offers for the service types that are represented by this profile.
A Trader interface, similar to the CORBA Trader.
virtual OfferList query(const TQString &servicetype, const TQString &constraint=TQString::null, const TQString &preferences=TQString::null) const
The main function in the TDETrader class.
virtual ~TDETrader()
Standard destructor.
static TDETrader * self()
This is a static pointer to a TDETrader instance.
TQValueList< KService::Ptr > OfferList
A list of services.
A namespace for TDEIO globals.