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

List:       kde-commits
Subject:    koffice
From:       Sven Langkamp <sven.langkamp () gmail ! com>
Date:       2007-10-31 21:54:37
Message-ID: 1193867677.716405.11050.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 731515 by langkamp:

ported Karbon to the gradient resource server and fixed some casting problems

 M  +1 -1      karbon/plugins/tools/CMakeLists.txt  
 M  +2 -3      karbon/plugins/tools/KarbonGradientTool.cpp  
 M  +9 -11     karbon/plugins/tools/KarbonPatternTool.cpp  
 M  +20 -18    karbon/widgets/vgradienttabwidget.cc  
 M  +5 -3      karbon/widgets/vgradienttabwidget.h  
 M  +1 -2      libs/resources/CMakeLists.txt  
 M  +3 -3      libs/resources/KoAbstractGradient.h  
 D             libs/resources/KoResourceServer.cpp  
 M  +81 -27    libs/resources/KoResourceServer.h  
 A             libs/resources/KoResourceServerProvider.cpp   \
libs/resources/KoResourceServerRegistry.cpp#731222 [License: LGPL (v2+)]  A           \
libs/resources/KoResourceServerProvider.h   \
libs/resources/KoResourceServerRegistry.h#731222 [License: LGPL (v2+)]  D             \
libs/resources/KoResourceServerRegistry.cpp    D             \
libs/resources/KoResourceServerRegistry.h  


--- trunk/koffice/karbon/plugins/tools/CMakeLists.txt #731514:731515
@@ -19,7 +19,7 @@
 
 kde4_add_plugin(karbontools ${karbon_tools_PART_SRCS})
 
-target_link_libraries(karbontools ${KDE4_KPARTS_LIBS} koguiutils kopainter \
karboncommon ) +target_link_libraries(karbontools ${KDE4_KPARTS_LIBS} koguiutils \
karboncommon )  
 install(TARGETS karbontools DESTINATION ${PLUGIN_INSTALL_DIR})
 
--- trunk/koffice/karbon/plugins/tools/KarbonGradientTool.cpp #731514:731515
@@ -21,8 +21,6 @@
 #include "KarbonGradientTool.h"
 #include "KarbonGradientEditStrategy.h"
 
-#include <karbon_factory.h>
-#include <karbon_resourceserver.h>
 #include <vgradienttabwidget.h>
 
 #include <KoShape.h>
@@ -32,6 +30,7 @@
 #include <KoSelection.h>
 #include <KoPointerEvent.h>
 #include <KoShapeBackgroundCommand.h>
+#include <KoResourceServerProvider.h>
 
 #include <QGridLayout>
 
@@ -234,7 +233,7 @@
 
     m_gradientWidget = new VGradientTabWidget( optionWidget );
     m_gradientWidget->setGradient( m_gradient );
-    m_gradientWidget->setResourceServer( KarbonFactory::rServer() );
+    m_gradientWidget->setResourceServer( \
KoResourceServerProvider::instance()->gradientServer() );  layout->addWidget( \
                m_gradientWidget );
     layout->addItem(new QSpacerItem(1, 1, QSizePolicy::Minimum, \
QSizePolicy::MinimumExpanding));  
--- trunk/koffice/karbon/plugins/tools/KarbonPatternTool.cpp #731514:731515
@@ -31,7 +31,7 @@
 #include <KoPointerEvent.h>
 #include <KoPattern.h>
 #include <KoResourceServer.h>
-#include <KoResourceServerRegistry.h>
+#include <KoResourceServerProvider.h>
 
 #include <klocale.h>
 #include <kiconloader.h>
@@ -224,15 +224,13 @@
     QWidget *optionWidget = new QWidget();
     QGridLayout* layout = new QGridLayout( optionWidget );
 
-    KoResourceServerBase* srv = \
                KoResourceServerRegistry::instance()->value("PatternServer");
-    QList<KoResource*> patterns = srv->resources();
+    KoResourceServer<KoPattern>* srv = \
KoResourceServerProvider::instance()->patternServer(); +    QList<KoPattern*> \
patterns = srv->resources();  
-    QList<QTableWidgetItem*> items;
-    foreach( KoResource* resource, patterns ) {
-        KoPattern* pat = dynamic_cast<KoPattern*>(resource);
-        if(pat)
-            items.append( static_cast<QTableWidgetItem*>( new KarbonPatternItem( pat \
                ) ) );
-    }
+     QList<QTableWidgetItem*> items;
+     foreach( KoPattern* pat, patterns ) {
+             items.append( static_cast<QTableWidgetItem*>( new KarbonPatternItem( \
pat ) ) ); +     }
 
     m_patternChooser = new KoPatternChooser( items, optionWidget );
     //m_patternChooser->setFixedSize( 180, 120 );
@@ -311,7 +309,7 @@
     QString newFilename = \
KGlobal::mainComponent().dirs()->saveLocation("ko_patterns" ) + fi.baseName() + \
".pat";  pattern->setFilename(newFilename);
 
-    KoResourceServerBase* srv = \
KoResourceServerRegistry::instance()->value("PatternServer"); +    \
KoResourceServer<KoPattern>* srv = \
KoResourceServerProvider::instance()->patternServer();;  srv->addResource(pattern);
 
     if( pattern )
@@ -322,7 +320,7 @@
 {
     KoPattern * pattern = m_currentPattern->pattern();
     m_patternChooser->removePattern( m_currentPattern );
-    KoResourceServerRegistry::instance()->value("PatternServer")->removeResource(pattern);
 +    KoResourceServerProvider::instance()->patternServer()->removeResource(pattern);
     m_currentPattern = static_cast<KarbonPatternItem*>( \
m_patternChooser->currentPattern() );  }
 
--- trunk/koffice/karbon/widgets/vgradienttabwidget.cc #731514:731515
@@ -21,12 +21,12 @@
 
 #include "vgradientwidget.h"
 #include "vgradienttabwidget.h"
-#include "karbon_resourceserver.h"
 #include "KarbonGradientItem.h"
 
 #include <KoAbstractGradient.h>
-#include <KoStopGradient.h>
 #include <KoResourceChooser.h>
+#include <KoResourceServer.h>
+#include <KoResourceServerProvider.h>
 
 #include <knuminput.h>
 #include <kcombobox.h>
@@ -408,11 +408,12 @@
     if( ! m_resourceServer )
         return;
 
-    QList<KoAbstractGradient*> gradients = m_resourceServer->gradients();
+    QList<KoAbstractGradient*> gradients = m_resourceServer->resources();
     if( gradients.count() > 0 )
     {
-        foreach( KoAbstractGradient * gradient, gradients )
-            m_predefGradientsView->addItem( new KarbonGradientItem( gradient ) );
+        foreach( KoAbstractGradient * gradient, gradients ) {
+                m_predefGradientsView->addItem( new KarbonGradientItem( gradient ) \
); +        }
     }
 }
 
@@ -453,7 +454,7 @@
     m_gradientTarget->setCurrentIndex( target );
 }
 
-void VGradientTabWidget::setResourceServer( KarbonResourceServer* server )
+void VGradientTabWidget::setResourceServer( KoResourceServer<KoAbstractGradient>* \
server )  {
     m_resourceServer = server;
     updatePredefGradients();
@@ -543,9 +544,10 @@
 
 void VGradientTabWidget::addGradientToPredefs()
 {
-    KoAbstractGradient * g = m_resourceServer->addGradient( cloneGradient( \
                m_gradient ) );
-    if( g )
-        m_predefGradientsView->addItem( new KarbonGradientItem( g ) );
+//     KoStopGradient * g; = cloneGradient( m_gradient );
+//     m_resourceServer->addResource( g );
+//     if( g )
+//         m_predefGradientsView->addItem( new KarbonGradientItem( g ) );
 }
 
 void VGradientTabWidget::predefSelected( QTableWidgetItem * item )
@@ -585,15 +587,15 @@
 
 void VGradientTabWidget::deletePredef()
 {
-    KarbonGradientItem * item = dynamic_cast<KarbonGradientItem*>( \
                m_predefGradientsView->currentItem() );
-    if( ! item )
-        return;
-
-    m_resourceServer->removeGradient( item->gradient() );
-    int row = m_predefGradientsView->row( item );
-    int col = m_predefGradientsView->column( item );
-    m_predefGradientsView->takeItem( row, col );
-    delete item;
+//     KarbonGradientItem * item = dynamic_cast<KarbonGradientItem*>( \
m_predefGradientsView->currentItem() ); +//     if( ! item )
+//         return;
+// 
+//     m_resourceServer->removeResource( item->gradient() );
+//     int row = m_predefGradientsView->row( item );
+//     int col = m_predefGradientsView->column( item );
+//     m_predefGradientsView->takeItem( row, col );
+//     delete item;
 }
 
 void VGradientTabWidget::stopsChanged()
--- trunk/koffice/karbon/widgets/vgradienttabwidget.h #731514:731515
@@ -29,12 +29,14 @@
 #include <QPixmap>
 #include <QtGui/QTableWidgetItem>
 
+#include <KoResourceServer.h>
+#include <KoAbstractGradient.h>
+
 class KComboBox;
 class VGradientWidget;
 class KListWidget;
 class KIntNumInput;
 class QPushButton;
-class KarbonResourceServer;
 class KoResourceChooser;
 
 /// A widget to preview a gradient
@@ -117,7 +119,7 @@
      * Sets the resource server to get the predefined gradients from.
      * @param server the new resource server to use
      */
-    void setResourceServer( KarbonResourceServer* server );
+    void setResourceServer( KoResourceServer<KoAbstractGradient>* server );
 
 Q_SIGNALS:
     /// Is emmited a soon as the gradient changes
@@ -153,7 +155,7 @@
     KIntNumInput     *m_opacity;
 
     QGradient * m_gradient; /// the actual edited gradient
-    KarbonResourceServer* m_resourceServer; ///< the predefined gradients list.
+    KoResourceServer<KoAbstractGradient>* m_resourceServer; ///< the predefined \
gradients list.  double m_gradOpacity;    ///< the gradient opacity
 };
 
--- trunk/koffice/libs/resources/CMakeLists.txt #731514:731515
@@ -10,8 +10,7 @@
    KoStopGradient.cpp
    KoSegmentGradient.cc
    KoResource.cpp
-   KoResourceServer.cpp
-   KoResourceServerRegistry.cpp
+   KoResourceServerProvider.cpp
 )
 
 kde4_add_library(koresources SHARED ${koresources_LIB_SRCS})
--- trunk/koffice/libs/resources/KoAbstractGradient.h #731514:731515
@@ -32,10 +32,10 @@
     KoAbstractGradient(const QString& filename);
     virtual ~KoAbstractGradient();
 
-    virtual bool load() = 0;
-    virtual bool save() = 0;
+    virtual bool load() { return false; }
+    virtual bool save() { return false; }
 
-    virtual QGradient* toQGradient() const = 0;
+    virtual QGradient* toQGradient() const { return new QGradient(); }
 
     void setColorSpace(KoColorSpace* colorSpace);
     KoColorSpace * colorSpace() const;
--- trunk/koffice/libs/resources/KoResourceServer.h #731514:731515
@@ -25,50 +25,104 @@
 #include <QString>
 #include <QStringList>
 #include <QList>
+#include <QFileInfo>
 
-#include "KoGenericRegistry.h"
+#include <kdebug.h>
+
+#include "KoResource.h"
+
 #include <koresource_export.h>
 
 class KoResource;
 
-class KORESOURCES_EXPORT KoResourceServerBase : public QObject {
-    Q_OBJECT
+class KoResource;
+
+class KORESOURCES_EXPORT KoResourceServerBase {
+
 public:
-    KoResourceServerBase(const QString & type);
-    virtual ~KoResourceServerBase();
+    KoResourceServerBase() {}
+    virtual ~KoResourceServerBase() {}
 
-    void loadResources(QStringList filenames);
+    virtual void loadResources(QStringList filenames) = 0;
+};
+
+template <class T> class KoResourceServer : public KoResourceServerBase {
+
+public:
+    KoResourceServer() : m_loaded(false) {}
+    virtual ~KoResourceServer() {}
+
+    void loadResources(QStringList filenames) {
+        QStringList uniqueFiles;
+
+        while (!filenames.empty())
+        {
+            QString front = filenames.first();
+            filenames.pop_front();
+
+            QString fname = QFileInfo(front).fileName();
+            //ebug() << "Loading " << fname << "\n";
+            // XXX: Don't load resources with the same filename. Actually, we should \
look inside +            //      the resource to find out whether they are really the \
same, but for now this +            //      will prevent the same brush etc. showing \
up twice. +            if (uniqueFiles.empty() || uniqueFiles.indexOf(fname) == -1) {
+                uniqueFiles.append(fname);
+                T* resource = createResource(front);
+                if (resource->load() && resource->valid())
+                {
+                    m_resources.append(resource);
+                    Q_CHECK_PTR(resource);
+                }
+                else {
+                    delete resource;
+                }
+            }
+        }
+        m_loaded = true;
+}
+
+
     /// Adds an already loaded resource to the server
-    void addResource(KoResource* resource);
+    void addResource(T* resource) {
+        if (!resource->valid()) {
+            kWarning(41001) << "Tried to add an invalid resource!";
+            return;
+        }
+        resource->save();
+
+        m_resources.append(resource);
+    }
+
     /// Remove a resource from resourceserver and hard disk
-    void removeResource(KoResource* resource);
-    QList<KoResource*> resources();
-    QString type() { return m_type; }
-    QString id() const { return QString(); }
-    QString name() const { return QString(); }
+    void removeResource(T* resource) {
+        int index = m_resources.indexOf( resource );
+        if( index < 0 )
+            return;
 
-signals:
-    void resourceAdded(KoResource*);
+        QFile file( resource->filename() );
 
+        if( file.remove() )
+        {
+            m_resources.removeAt( index );
+            delete resource;
+        }
+    }
+
+    QList<T*> resources() {
+        if(!m_loaded) {
+            return QList<T*>();
+        }
+        return m_resources;
+    }
+
 protected:
-    virtual KoResource* createResource( const QString & filename ) = 0;
+    virtual T* createResource( const QString & filename ) { return new T(filename); \
}  
 private:
-    QList<KoResource*> m_resources;
-    QString m_type;
+    QList<T*> m_resources;
 
     bool m_loaded;
 
 };
 
-template <class T> class KoResourceServer : public KoResourceServerBase {
-
-public:
-    KoResourceServer(const QString & type) : KoResourceServerBase(type) {}
-    virtual ~KoResourceServer() {}
-
-private:
-    KoResource* createResource(const QString & filename) { return new T(filename); }
-};
-
 #endif // KORESOURCESERVER_H


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

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