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

List:       kde-commits
Subject:    [calligra] karbon/ui: Fix layerdocker broken by document part split
From:       Thorsten Zachmann <t.zachmann () zagge ! de>
Date:       2012-09-01 4:52:47
Message-ID: 20120901045247.37322A6094 () git ! kde ! org
[Download RAW message or body]

Git commit bbfda532bc81307c56aa91faa91cd5f3357194b2 by Thorsten Zachmann.
Committed on 01/09/2012 at 06:44.
Pushed by zachmann into branch 'master'.

Fix layerdocker broken by document part split

Make the docker a KoCanvasObserver so it gets triggered when the canvas changes and \
can update the used data.

BUG: 305259
REVIEW: 106210

M  +1    -4    karbon/ui/KarbonView.cpp
M  +27   -20   karbon/ui/dockers/KarbonLayerDocker.cpp
M  +5    -3    karbon/ui/dockers/KarbonLayerDocker.h
M  +5    -0    karbon/ui/widgets/KarbonCanvas.cpp
M  +3    -0    karbon/ui/widgets/KarbonCanvas.h

http://commits.kde.org/calligra/bbfda532bc81307c56aa91faa91cd5f3357194b2

diff --git a/karbon/ui/KarbonView.cpp b/karbon/ui/KarbonView.cpp
index 620626e..6f8bf72 100644
--- a/karbon/ui/KarbonView.cpp
+++ b/karbon/ui/KarbonView.cpp
@@ -1417,15 +1417,12 @@ void KarbonView::createLayersTabDock()
     {
         KarbonLayerDockerFactory layerFactory;
         KarbonLayerDocker * layerDocker = \
                qobject_cast<KarbonLayerDocker*>(shell()->createDockWidget(&layerFactory));
                
-        layerDocker->setPart(d->karbonPart);
+        layerDocker->setCanvas(d->canvas);
         connect(d->canvas->shapeManager(), SIGNAL(selectionChanged()),
                 layerDocker, SLOT(updateView()));
         connect(d->canvas->shapeManager(), SIGNAL(selectionContentChanged()),
                 layerDocker, SLOT(updateView()));
         connect(d->part, SIGNAL(shapeCountChanged()), layerDocker, \
                SLOT(updateView()));
-// XXX: reenable once we figure out what the this is for, and if it's still useful
-//        connect(shell()->partManager(), SIGNAL(activePartChanged(KParts::Part*)),
-//                layerDocker, SLOT(setPart(KParts::Part*)));
     }
 }
 
diff --git a/karbon/ui/dockers/KarbonLayerDocker.cpp \
b/karbon/ui/dockers/KarbonLayerDocker.cpp index 6831bf9..9a1daca 100644
--- a/karbon/ui/dockers/KarbonLayerDocker.cpp
+++ b/karbon/ui/dockers/KarbonLayerDocker.cpp
@@ -22,6 +22,7 @@
 #include "KarbonLayerSortingModel.h"
 #include "KarbonFactory.h"
 
+#include <KarbonCanvas.h>
 #include <KarbonDocument.h>
 #include <KarbonPart.h>
 #include <KarbonKoDocument.h>
@@ -79,7 +80,7 @@ QDockWidget* KarbonLayerDockerFactory::createDockWidget()
 }
 
 KarbonLayerDocker::KarbonLayerDocker()
-        : m_part(0), m_model(0), m_updateTimer(this)
+        : m_doc(0), m_model(0), m_updateTimer(this)
 {
     setWindowTitle(i18n("Layer view"));
 
@@ -143,9 +144,9 @@ KarbonLayerDocker::KarbonLayerDocker()
     connect(buttonGroup, SIGNAL(buttonClicked(int)), this, \
SLOT(slotButtonClicked(int)));  
     m_model = new KarbonLayerModel(this);
-    m_model->setDocument(m_part ? &m_part->document() : 0);
+    m_model->setDocument(m_doc ? &m_doc->document() : 0);
     m_sortModel = new KarbonLayerSortingModel(this);
-    m_sortModel->setDocument(m_part ? &m_part->document() : 0);
+    m_sortModel->setDocument(m_doc ? &m_doc->document() : 0);
     m_sortModel->setSourceModel(m_model);
 
     m_layerView->setItemsExpandable(true);
@@ -200,16 +201,22 @@ void KarbonLayerDocker::updateView()
     m_updateTimer.start();
 }
 
-void KarbonLayerDocker::setPart(KParts::Part * part)
+void KarbonLayerDocker::setCanvas(KoCanvasBase* canvas)
 {
-    m_part = dynamic_cast<KarbonKoDocument*>(part);
-    if (! m_part) {
-        m_sortModel->setDocument(0);
-        m_model->setDocument(0);
-    } else {
-        m_sortModel->setDocument(&m_part->document());
-        m_model->setDocument(&m_part->document());
+    KarbonCanvas *c = dynamic_cast<KarbonCanvas*>(canvas);
+    if (c) {
+        m_doc = c->document();
+        m_sortModel->setDocument(m_doc ? &m_doc->document() : 0);
+        m_model->setDocument(m_doc ? &m_doc->document() : 0);
+        m_model->update();
     }
+}
+
+void KarbonLayerDocker::unsetCanvas()
+{
+    m_doc = 0;
+    m_sortModel->setDocument(0);
+    m_model->setDocument(0);
     m_model->update();
 }
 
@@ -280,7 +287,7 @@ void KarbonLayerDocker::addLayer()
         KoShapeLayer* layer = new KoShapeLayer();
         layer->setName(name);
         KoCanvasController* canvasController = \
                KoToolManager::instance()->activeCanvasController();
-        KUndo2Command *cmd = new KoShapeCreateCommand(m_part, layer, 0);
+        KUndo2Command *cmd = new KoShapeCreateCommand(m_doc, layer, 0);
         cmd->setText(i18nc("(qtundo-format)", "Create Layer"));
         canvasController->canvas()->addCommand(cmd);
         m_model->update();
@@ -298,19 +305,19 @@ void KarbonLayerDocker::deleteItem()
     KUndo2Command *cmd = 0;
 
     if (selectedLayers.count()) {
-        if (m_part->document().layers().count() > selectedLayers.count()) {
+        if (m_doc->document().layers().count() > selectedLayers.count()) {
             QList<KoShape*> deleteShapes;
             foreach(KoShapeLayer* layer, selectedLayers) {
                 deleteShapes += layer->shapes();
                 deleteShapes.append(layer);
             }
-            cmd = new KoShapeDeleteCommand(m_part, deleteShapes);
+            cmd = new KoShapeDeleteCommand(m_doc, deleteShapes);
             cmd->setText(i18nc("(qtundo-format)", "Delete Layer"));
         } else {
             KMessageBox::error(0L, i18n("Could not delete all layers. At least one \
layer is required."), i18n("Error deleting layers"));  }
     } else if (selectedShapes.count()) {
-        cmd = new KoShapeDeleteCommand(m_part, selectedShapes);
+        cmd = new KoShapeDeleteCommand(m_doc, selectedShapes);
     }
 
     if (cmd) {
@@ -335,10 +342,10 @@ void KarbonLayerDocker::raiseItem()
     if (selectedLayers.count()) {
         // check if all layers could be raised
         foreach(KoShapeLayer* layer, selectedLayers)
-        if (! m_part->document().canRaiseLayer(layer))
+        if (! m_doc->document().canRaiseLayer(layer))
             return;
 
-        cmd = new KarbonLayerReorderCommand(&m_part->document(), selectedLayers, \
KarbonLayerReorderCommand::RaiseLayer); +        cmd = new \
KarbonLayerReorderCommand(&m_doc->document(), selectedLayers, \
KarbonLayerReorderCommand::RaiseLayer);  } else if (selectedShapes.count()) {
         cmd = KoShapeReorderCommand::createCommand(selectedShapes, \
canvas->shapeManager(), KoShapeReorderCommand::RaiseShape);  }
@@ -369,10 +376,10 @@ void KarbonLayerDocker::lowerItem()
     if (selectedLayers.count()) {
         // check if all layers could be raised
         foreach(KoShapeLayer* layer, selectedLayers)
-        if (! m_part->document().canLowerLayer(layer))
+        if (! m_doc->document().canLowerLayer(layer))
             return;
 
-        cmd = new KarbonLayerReorderCommand(&m_part->document(), selectedLayers, \
KarbonLayerReorderCommand::LowerLayer); +        cmd = new \
KarbonLayerReorderCommand(&m_doc->document(), selectedLayers, \
KarbonLayerReorderCommand::LowerLayer);  } else if (selectedShapes.count()) {
         cmd = KoShapeReorderCommand::createCommand(selectedShapes, \
canvas->shapeManager(), KoShapeReorderCommand::LowerShape);  }
@@ -394,7 +401,7 @@ void KarbonLayerDocker::selectLayers(QList<KoShapeLayer*> layers)
     QItemSelectionModel * selModel = m_layerView->selectionModel();
     selModel->clearSelection();
     foreach(KoShapeLayer * layer, layers) {
-        int layerPos = m_part->document().layerPos(layer);
+        int layerPos = m_doc->document().layerPos(layer);
         QModelIndex child = m_model->index(layerPos, 0);
         selModel->select(m_sortModel->mapFromSource(child), \
QItemSelectionModel::Select);  }
diff --git a/karbon/ui/dockers/KarbonLayerDocker.h \
b/karbon/ui/dockers/KarbonLayerDocker.h index df349d4..37547c4 100644
--- a/karbon/ui/dockers/KarbonLayerDocker.h
+++ b/karbon/ui/dockers/KarbonLayerDocker.h
@@ -23,6 +23,7 @@
 #include <QTimer>
 #include <KoDockFactoryBase.h>
 #include <KoDocumentSectionView.h>
+#include <KoCanvasObserverBase.h>
 
 class KoShapeBasedDocumentBase;
 class KoShape;
@@ -50,7 +51,7 @@ public:
     }
 };
 
-class KarbonLayerDocker : public QDockWidget
+class KarbonLayerDocker : public QDockWidget, public KoCanvasObserverBase
 {
     Q_OBJECT
 
@@ -59,7 +60,8 @@ public:
     virtual ~KarbonLayerDocker();
 public slots:
     void updateView();
-    void setPart(KParts::Part * part);
+    virtual void setCanvas(KoCanvasBase* canvas);
+    virtual void unsetCanvas();
 private slots:
     void slotButtonClicked(int buttonId);
     void addLayer();
@@ -79,7 +81,7 @@ private:
     void setViewMode(KoDocumentSectionView::DisplayMode mode);
     void selectLayers(QList<KoShapeLayer*> layers);
 
-    KarbonKoDocument * m_part;
+    KarbonKoDocument * m_doc;
     KarbonLayerModel * m_model;
     KarbonLayerSortingModel * m_sortModel;
     KoDocumentSectionView * m_layerView;
diff --git a/karbon/ui/widgets/KarbonCanvas.cpp b/karbon/ui/widgets/KarbonCanvas.cpp
index 6371f5a..dcb588b 100644
--- a/karbon/ui/widgets/KarbonCanvas.cpp
+++ b/karbon/ui/widgets/KarbonCanvas.cpp
@@ -374,6 +374,11 @@ const QPoint &KarbonCanvas::documentOffset() const
     return d->documentOffset;
 }
 
+KarbonKoDocument *KarbonCanvas::document() const
+{
+    return d->part;
+}
+
 void KarbonCanvas::enableOutlineMode(bool on)
 {
     if (on)
diff --git a/karbon/ui/widgets/KarbonCanvas.h b/karbon/ui/widgets/KarbonCanvas.h
index 790fcdb..4b59ced 100644
--- a/karbon/ui/widgets/KarbonCanvas.h
+++ b/karbon/ui/widgets/KarbonCanvas.h
@@ -111,6 +111,9 @@ public:
     /// @return the offset of the document in canvas position.
     const QPoint &documentOffset() const;
 
+    /// @return the document used by the canvas.
+    KarbonKoDocument *document() const;
+
 public slots:
 
     /**


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

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