mediainfocombobox.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "mediainfocombobox.h"
00021 #include "mediainfocombobox.moc"
00022
00023
00024
00025
00026
00027 #include <kwindowsystem.h>
00028 #include <kwindowinfo.h>
00029 #include <kicon.h>
00030 #include <kdebug.h>
00031
00032 class Blokkal::Ui::MediaInfoComboBox::Private
00033 {
00034 public:
00035 Private( void ) {}
00036 };
00037
00038 Blokkal::Ui::MediaInfoComboBox::MediaInfoComboBox( QWidget * parent ) :
00039 SemiEditableComboBox( parent ),
00040 d( new Private() )
00041 {
00042 setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Minimum );
00043 repopulate();
00044 connect( this, SIGNAL( activated( const QString & ) ),
00045 this, SLOT( repopulate( void ) ) );
00046 }
00047
00048 Blokkal::Ui::MediaInfoComboBox::~MediaInfoComboBox( void )
00049 {
00050 delete d;
00051 }
00052
00053 void Blokkal::Ui::MediaInfoComboBox::repopulate( void )
00054 {
00055 const QList<WId> windowList = KWindowSystem::windows();
00056 QString windowName;
00057 bool boxWasEmpty = FALSE;
00058 int oldCount = count();
00059 int currentListItem = 0;
00060
00061
00062
00063 if( count() <= currentListItem ) {
00064 addItem( QString::null, currentListItem );
00065 boxWasEmpty = TRUE;
00066 }
00067 currentListItem++;
00068
00069
00070
00071 for ( QList<WId>::ConstIterator winListIterator = windowList.begin();
00072 winListIterator != windowList.end() && !windowList.isEmpty();
00073 ++winListIterator )
00074 {
00075 if( !KWindowSystem::hasWId( *winListIterator ) ) {
00076 continue;
00077 }
00078 const KWindowInfo windowInfo = KWindowSystem::windowInfo( *winListIterator, NET::WMVisibleName|NET::WMIconName, NET::WM2StartupId );
00079 if( windowInfo.visibleName().indexOf( "XMMS - " ) == 0) {
00080 int musicInfoStart = windowInfo.visibleName().indexOf( " ", 7 ) + 1;
00081 int musicInfoLength = windowInfo.visibleName().lastIndexOf( " " ) - musicInfoStart;
00082 if( count() <= currentListItem ) {
00083 insertItem( currentListItem,
00084 KWindowSystem::icon( *winListIterator,
00085 fontMetrics().height(),
00086 fontMetrics().height(),
00087 TRUE ),
00088 windowInfo.visibleName().mid( musicInfoStart, musicInfoLength ) );
00089 }
00090 else {
00091 setItemText( currentListItem,
00092 windowInfo.visibleName().mid( musicInfoStart, musicInfoLength ) );
00093 }
00094 currentListItem++;
00095 }
00096 }
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115 if( boxWasEmpty || oldCount < count() ) {
00116 setCurrentIndex( count()-1 );
00117 }
00118
00119 updateEditableState();
00120 }