[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    branches/work/amarok-plasmify/src
From:       Leo Franchi <angel666 () myrealbox ! com>
Date:       2007-07-21 10:26:59
Message-ID: 1185013619.489547.15614.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 690517 by lfranchi:

working on snazzing up the last.fm events applet. vboxlayout class needs more work so \
it collapses properly, but looks waay better than before :)


 M  +2 -0      CMakeLists.txt  
 M  +5 -4      context/applets/lastfmevents/CMakeLists.txt  
 M  +160 -19   context/applets/lastfmevents/LastFmEvents.cpp  
 M  +27 -2     context/applets/lastfmevents/LastFmEvents.h  
 A             context/widgets (directory)  
 A             context/widgets/TextWidget.cpp   [License: GPL (v2+)]
 A             context/widgets/TextWidget.h   [License: GPL (v2+)]
 A             context/widgets/VBoxLayout.cpp   [License: LGPL (v2)]
 A             context/widgets/VBoxLayout.h   [License: LGPL (v2)]


--- branches/work/amarok-plasmify/src/CMakeLists.txt #690516:690517
@@ -276,6 +276,8 @@
     context/ContextScene.cpp
     context/ControlBox.cpp
     context/DataEngineManager.cpp
+    context/widgets/TextWidget.cpp
+    context/widgets/VBoxLayout.cpp
 )
 
 #####################################################################
--- branches/work/amarok-plasmify/src/context/applets/lastfmevents/CMakeLists.txt \
#690516:690517 @@ -10,10 +10,11 @@
 add_definitions (${QT_DEFINITIONS} ${KDE4_DEFINITIONS})
 
 include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/../../../
-${CMAKE_BINARY_DIR} 
-${KDE4_INCLUDES} 
-${QT_INCLUDES}
-${KDE4_INCLUDE_DIR}/amarok ) # this way we don't need to prefix it with amarok/ (and \
it compiles this way too :) +                    ${CMAKE_CURRENT_SOURCE_DIR}/../../
+                    ${CMAKE_BINARY_DIR} 
+                    ${KDE4_INCLUDES} 
+                    ${QT_INCLUDES}
+                    ${KDE4_INCLUDE_DIR}/amarok ) # this way we don't need to prefix \
it with amarok/ (and it compiles this way too :)  
 kde4_add_plugin(amarok_context_applet_lastfmevents ${lastfmevents_SRCS})
 target_link_libraries(amarok_context_applet_lastfmevents amaroklib ${KDE4_KIO_LIBS})
--- branches/work/amarok-plasmify/src/context/applets/lastfmevents/LastFmEvents.cpp \
#690516:690517 @@ -15,66 +15,207 @@
 
 #include "debug.h"
 
+#include <QGraphicsTextItem>
+#include <QTextDocument>
+#include <QVBoxLayout>
+#include <QCheckBox>
+
+#include <KDialog>
+#include <KLocale>
+
 LastFmEvents::LastFmEvents( QObject* parent, const QStringList& args )
     : Context::Applet( parent, args )
-    , m_item( 0 )
-    , m_text( 0 )
+    , m_config( 0 )
+    , m_configLayout( 0 )
+    , m_friendItem( 0 )
+    , m_sysItem( 0 )
+    , m_userItem( 0 )
+    , m_userEnabled( false )
+    , m_friendEnabled( false )
+    , m_sysEnabled( false )
+    , m_layout( 0 )
+    , m_friendBox( 0 )
+    , m_userBox( 0 )
+    , m_sysBox( 0 )
 {
     
     debug() << "Loading LastFmEvents applet" << endl;
     setAcceptDrops( false );
     
-    setHasConfigurationInterface( false );
+    setHasConfigurationInterface( true );
     setDrawStandardBackground( true );
     
+    KConfigGroup conf = config();
+    m_userEnabled = conf.readEntry( "user", false );
+    m_sysEnabled = conf.readEntry( "sys", false );
+    m_friendEnabled = conf.readEntry( "friend", false );
+    
+    if( !m_userEnabled && !m_friendEnabled && m_sysEnabled )
+        showConfigurationInterface();
+    
     if( args.size() > 0 ) // we are being told what position to start at
         setPos( (qreal)args[0].toInt(), (qreal)args[1].toInt() );
     
-    dataEngine( "amarok-lastfm" )->connectSource( I18N_NOOP( "sysevents" ), m_text \
                );
     dataEngine( "amarok-lastfm" )->connectSource( I18N_NOOP( "sysevents" ), this );
+    dataEngine( "amarok-lastfm" )->connectSource( I18N_NOOP( "userevents" ), this );
     dataEngine( "amarok-lastfm" )->connectSource( I18N_NOOP( "friendevents" ), this \
);  
-    m_item = new QGraphicsTextItem( this );
-    m_item->setPos( 15.0, 10.0 );
-    m_text = m_item->document();
+    hide(); // we have no data to show, so lets not show an empty widget
     
+    m_layout = new Context::VBoxLayout( 0 );
+    m_layout->setGeometry( QRectF( 0, 0, 300, 300 ) );
+    m_layout->setMargin( 8 );
+    m_layout->setSpacing( 4 );
+    
+    m_friendItem = new Context::TextWidget( this );
+    
+    m_sysItem = new Context::TextWidget( this );
+    m_layout->addItem( m_sysItem );
+    
+    m_userItem = new Context::TextWidget( this );
+    m_layout->addItem( m_userItem );
+    
 }
 
 LastFmEvents::~LastFmEvents()
 {
     DEBUG_BLOCK
-    if( m_text ) delete m_text;
-    if( m_item ) delete m_item;
+    if( m_friendItem ) delete m_friendItem;
+    if( m_sysItem ) delete m_sysItem;
+    if( m_userItem ) delete m_userItem;
 }
 
 void LastFmEvents::updated( const QString& name, const Context::DataEngine::Data& \
data )  {
-    debug() << "got data from : " << name << endl;
+    DEBUG_BLOCK
+        
+    show();
+    // now we want to show the rect
+    
     Context::DataEngine::DataIterator iter( data );
-    QString text;
-    while( iter.hasNext() )
+    if( m_sysEnabled && name == QString( "sysevents" ) )
     {
-        iter.next();
-        if( name == QString( "sysevents" ) )
+        QString text = QString( "<b>%1</b><br>" ).arg( i18n( "Recommended Events" ) \
); +        int count = 0;
+        while( iter.hasNext() )
         {
+            count++;
+            if( count > 5 ) break;
+            iter.next();
             const QVariantList event = iter.value().toList();
-            if( event.size() == 0 ) continue;
-            text.append( QString( "%1 - %2<br>" ).arg( iter.key(), ( event[ 1 ] \
).toString() ) );  +            if( event.size() == 0 ) continue; // empty event
+            
+            text.append( QString( "%1 - %2<br>" ).arg( iter.key(), ( event[ 1 ] \
).toString() ) );  }
+        debug() << "trying to show text: " << text << endl;
+        m_sysItem->setText( text );
+         if( m_layout->indexOf( m_sysItem ) == -1 )
+             m_layout->addItem( m_sysItem );
+        
     }
-    m_text->setHtml( text );
-    
+    if( m_friendEnabled && name == QString( "friendevents" ) )
+    {
+        QString text = QString( "<b>%1</b><br>" ).arg( i18n( "Friend Events" ) );
+        int count = 0;
+        while( iter.hasNext() )
+        {
+            count++;
+            if( count > 5 ) break;
+            iter.next();
+            const QVariantList event = iter.value().toList();
+            if( event.size() == 0 ) continue; // empty event
+            
+            text.append( QString( "%1 - %2<br>" ).arg( iter.key(), ( event[ 1 ] \
).toString() ) ); +        }
+        debug() << "trying to show text: " << text << endl;
+        m_friendItem->setText( text );
+         if( m_layout->indexOf( m_friendItem ) == -1 )
+             m_layout->addItem( m_friendItem );
+        
+    }
+    if( m_userEnabled && name == QString( "sysevents" ) )
+    {
+        QString text = QString( "<b>%1</b><br>" ).arg( i18n( "Your Events" ) );
+        int count = 0;
+        while( iter.hasNext() )
+        {
+            count++;
+            if( count > 5 ) return;
+            iter.next();
+            const QVariantList event = iter.value().toList();
+            if( event.size() == 0 ) continue; // empty event
+            
+            text.append( QString( "%1 - %2<br>" ).arg( iter.key(), ( event[ 1 ] \
).toString() ) ); +        }
+        debug() << "trying to show text: " << text << endl;
+        m_userItem->setText( text );
+        if( m_layout->indexOf( m_userItem ) == -1 )
+            m_layout->addItem( m_userItem );
+        
+    }
+    m_layout->setGeometry( m_layout->geometry() ); // recalculate item sizes
+    // since we added text to them
 }
 
 QRectF LastFmEvents::boundingRect() const
 {
 //    kDebug() << "boundingRect is " << m_icon->boundingRect() << endl;
 //     return m_icon->boundingRect();
-    return m_item->boundingRect();
+    return m_layout->geometry();
 }
 
 
 void LastFmEvents::constraintsUpdated()
 {
+    prepareGeometryChange();
 }
+
+void LastFmEvents::showConfigurationInterface()
+{
+    if (m_config == 0) 
+    {
+        m_config = new KDialog;
+        m_config->setCaption( i18n( "Configure Last.Fm Events" ) );
+        
+        QWidget* widget = new QWidget( m_config );
+        m_config->setButtons( KDialog::Ok | KDialog::Cancel | KDialog::Apply );
+        connect( m_config, SIGNAL(applyClicked()), this, SLOT(configAccepted()) );
+        connect( m_config, SIGNAL(okClicked()), this, SLOT(configAccepted()) );
+        
+        m_configLayout = new QVBoxLayout( widget );
+        m_friendBox = new QCheckBox();
+        m_friendBox->setText( i18n( "Show Friend Events" ) );
+        m_sysBox = new QCheckBox();
+        m_sysBox->setText( i18n( "Show Recommended Events" ) );
+        m_userBox = new QCheckBox();
+        m_userBox->setText( i18n( "Show Your Future Events" ) );
+        
+        m_configLayout->addWidget( m_friendBox );
+        m_configLayout->addWidget( m_sysBox );
+        m_configLayout->addWidget( m_userBox );
+        
+        m_config->setMainWidget( widget );
+    }
+    
+    m_config->show();
+}
+
+void LastFmEvents::configAccepted() // SLOT
+{
+    debug() << "saving config" << endl;
+    KConfigGroup cg = config();
+
+    m_friendBox->checkState() ? m_friendEnabled = true : m_friendEnabled = false;
+    m_sysBox->checkState() ? m_sysEnabled = true : m_sysEnabled = false;
+    m_userBox->checkState() ? m_userEnabled = true : m_userEnabled = false;
+    
+    cg.writeEntry( "friend" , m_friendEnabled );
+    cg.writeEntry( "sys" , m_sysEnabled );
+    cg.writeEntry( "user" , m_userEnabled );
+    
+    cg.sync();
+    
+    constraintsUpdated();
+}
+
 #include "LastFmEvents.moc"
--- branches/work/amarok-plasmify/src/context/applets/lastfmevents/LastFmEvents.h \
#690516:690517 @@ -16,10 +16,17 @@
 
 #include <context/Applet.h>
 #include <context/DataEngine.h>
+#include <context/widgets/TextWidget.h>
 
+#include <widgets/VBoxLayout.h>
+
 #include <QGraphicsTextItem>
 #include <QTextDocument>
+#include <QVBoxLayout>
+#include <QCheckBox>
 
+#include <KDialog>
+
 class LastFmEvents : public Context::Applet
 {
     Q_OBJECT
@@ -29,14 +36,32 @@
     
     QRectF boundingRect() const;
     void constraintsUpdated();
+    void showConfigurationInterface();
     
 public slots:
     void updated( const QString& name, const Plasma::DataEngine::Data& data );
     
+private slots:
+    void configAccepted();
+    
 private:
     
-    QGraphicsTextItem* m_item;
-    QTextDocument* m_text;
+    KDialog* m_config;
+    QVBoxLayout* m_configLayout;
+    QCheckBox* m_friendBox;
+    QCheckBox* m_sysBox;
+    QCheckBox* m_userBox;
+    
+    Context::VBoxLayout* m_layout;
+    
+    bool m_friendEnabled;
+    Context::TextWidget* m_friendItem;
+    
+    bool m_sysEnabled;
+    Context::TextWidget* m_sysItem;
+    
+    bool m_userEnabled;
+    Context::TextWidget* m_userItem;
 };
 
 K_EXPORT_AMAROK_APPLET( lastfmevents, LastFmEvents )


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic