[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