[Kst] extragear/graphics/kst/kst
George Staikos
staikos at kde.org
Thu Dec 8 06:12:25 CET 2005
SVN commit 486524 by staikos:
make plotgroups mostly work again. they're now "non-container" objects since
they actually abuse the notion of containers. There are lots of bugs lurking.
They include:
- clipping of non-plot regions broken in non-transparent mode
- properties are missing (such as colors, borders)
- axis alignment doesn't work?
- conceptual: no way to do graphics in groups (or group contents)
M +48 -45 kstplotgroup.cpp
M +3 -5 kstplotgroup.h
M +28 -1 ksttoplevelview.cpp
--- trunk/extragear/graphics/kst/kst/kstplotgroup.cpp #486523:486524
@@ -29,42 +29,49 @@
#include "kstdoc.h"
#include "kstplotgroup.h"
#include "ksttimers.h"
+#include "kstviewobjectfactory.h"
static int pgcount = 0;
-KstPlotGroup::KstPlotGroup() : KstMetaPlot("KstPlotGroup") {
+KstPlotGroup::KstPlotGroup()
+: KstMetaPlot("PlotGroup") {
_standardActions |= Delete | Raise | Zoom | Lower | RaiseToTop | LowerToBottom;
_layoutActions |= Delete | Copy | Raise | Lower | RaiseToTop | LowerToBottom | Rename | MoveTo;
setTagName(i18n("Plot Group %1").arg(++pgcount));
- _type = "plotgroup";
+ _type = "PlotGroup";
setBorderColor(Qt::blue);
+ _container = false; // plot group is a container that doesn't behave like one
setTransparent(true);
}
-KstPlotGroup::KstPlotGroup(const QDomElement& e) : KstMetaPlot(e) {
+KstPlotGroup::KstPlotGroup(const QDomElement& e)
+: KstMetaPlot(e) {
QDomNode n = e.firstChild();
while (!n.isNull()) {
- QDomElement el = n.toElement();
+ QDomElement el = n.toElement();
if (!el.isNull()) {
if (metaObject()->findProperty(el.tagName().latin1(), true) > -1) {
- setProperty(el.tagName().latin1(), QVariant(el.text()));
- }
+ setProperty(el.tagName().latin1(), QVariant(el.text()));
+ }
}
- n = n.nextSibling();
+ n = n.nextSibling();
}
-
+
// always have these values
_standardActions |= Delete | Raise | Zoom | Lower | RaiseToTop | LowerToBottom;
_layoutActions |= Delete | Copy | Raise | Lower | RaiseToTop | LowerToBottom | Rename | MoveTo;
setTagName(i18n("Plot Group %1").arg(++pgcount));
- _type = "plotgroup";
+ _type = "PlotGroup";
+ _container = false; // plot group is a container that doesn't behave like one
setBorderColor(Qt::blue);
}
-KstPlotGroup::KstPlotGroup(const KstPlotGroup& plotGroup) : KstMetaPlot(plotGroup) {
- _type = "plotgroup";
+KstPlotGroup::KstPlotGroup(const KstPlotGroup& plotGroup)
+: KstMetaPlot(plotGroup) {
+ _type = "PlotGroup";
+ _container = false; // plot group is a container that doesn't behave like one
setTagName(i18n("Plot Group %1").arg(++pgcount));
}
@@ -74,17 +81,6 @@
}
-void KstPlotGroup::setHasFocus(bool hasFocus) {
- _hasFocus = hasFocus;
- forEachChild<bool>(&KstViewObject::setHasFocus, hasFocus);
-}
-
-
-void KstPlotGroup::removeFocus(KstPainter& p) {
- forEachChild<KstPainter&>(&KstViewObject::removeFocus, p);
-}
-
-
void KstPlotGroup::copyObject() {
if (_parent) {
KstApp::inst()->document()->setModified();
@@ -96,7 +92,7 @@
void KstPlotGroup::copyObjectQuietly(KstViewObject& parent, const QString& name) const {
Q_UNUSED(name)
-
+
parent.appendChild(new KstPlotGroup(*this), true);
}
@@ -163,15 +159,7 @@
p.setClipping(hadClipping);
}
-#ifdef BENCHMARK
- QTime t;
- t.start();
-#endif
KstMetaPlot::paint(p, bounds);
-#ifdef BENCHMARK
- int x = t.elapsed();
- kstdDebug() << " -> metaplot parent took " << x << "ms" << endl;
-#endif
p.setClipping(false);
}
@@ -217,30 +205,20 @@
}
-void KstPlotGroup::setTransparent(bool transparent) {
- KstViewObject::setTransparent(transparent);
-}
-
-
-bool KstPlotGroup::transparent() const {
- return KstViewObject::transparent();
-}
-
-
QMap<QString, QVariant> KstPlotGroup::widgetHints(const QString& propertyName) const {
// don't ask for borderedviewobject hints because we don't want to set border color
QMap<QString, QVariant> map = KstViewObject::widgetHints(propertyName);
if (!map.empty()) {
- return map;
+ return map;
}
-
+
if (propertyName == "transparent") {
map.insert(QString("_kst_widgetType"), QString("QCheckBox"));
map.insert(QString("_kst_label"), QString::null);
- map.insert(QString("text"), i18n("Transparent background"));
+ map.insert(QString("text"), i18n("Transparent background"));
} else if (propertyName == "backColor") {
map.insert(QString("_kst_widgetType"), QString("KColorButton"));
- map.insert(QString("_kst_label"), i18n("Background color"));
+ map.insert(QString("_kst_label"), i18n("Background color"));
}
return map;
}
@@ -258,5 +236,30 @@
return KstViewObject::clipRegion();
}
+
+void KstPlotGroup::setTransparent(bool transparent) {
+ KstMetaPlot::setTransparent(transparent);
+}
+
+
+bool KstPlotGroup::transparent() const {
+ return KstMetaPlot::transparent();
+}
+
+
+namespace {
+KstViewObject *create_KstPlotGroup() {
+ return new KstPlotGroup;
+}
+
+
+KstGfxMouseHandler *handler_KstPlotGroup() {
+ return 0L;
+}
+
+KST_REGISTER_VIEW_OBJECT(PlotGroup, create_KstPlotGroup, handler_KstPlotGroup)
+}
+
+
#include "kstplotgroup.moc"
// vim: ts=2 sw=2 et
--- trunk/extragear/graphics/kst/kst/kstplotgroup.h #486523:486524
@@ -34,14 +34,12 @@
bool removeChild(KstViewObjectPtr obj, bool recursive = false);
bool popupMenu(KPopupMenu *menu, const QPoint& pos, KstViewObjectPtr topLevelParent);
bool layoutPopupMenu(KPopupMenu *menu, const QPoint& pos, KstViewObjectPtr topParent);
- void setHasFocus(bool hasFocus);
- void removeFocus(KstPainter& p);
-
+
void setTransparent(bool transparent);
bool transparent() const;
-
+
QRegion clipRegion();
-
+
QMap<QString, QVariant> widgetHints(const QString& propertyName) const;
void paint(KstPainter& p, const QRegion& bounds);
--- trunk/extragear/graphics/kst/kst/ksttoplevelview.cpp #486523:486524
@@ -228,6 +228,15 @@
KstViewObjectPtr p = findDeepestChild(pos, false);
if (p) {
+ KstViewObjectPtr p2 = p;
+ while (p2->_parent && p2->_parent->_container) {
+ p2 = p2->_parent;
+ }
+ if (p2->_parent && !p2->_parent->_container) {
+ p = p2->_parent;
+ }
+ }
+ if (p) {
setCursorFor(pos, p);
if (p->focused()) {
_focusOn = true; // just in case - seems to be false on occasion
@@ -341,7 +350,16 @@
_pressDirection = -1;
_pressTarget = findDeepestChild(pos, false);
-
+ if (_pressTarget) {
+ KstViewObjectPtr p = _pressTarget;
+ while (p->_parent && p->_parent->_container) {
+ p = p->_parent;
+ }
+ if (p->_parent && !p->_parent->_container) {
+ _pressTarget = p->_parent;
+ }
+ }
+
if (_mode != LayoutMode && !_pressTarget) {
_pressTarget = 0L;
return false;
@@ -1060,6 +1078,15 @@
bool rc = false;
// Want to clear focus without repaint
_pressTarget = findDeepestChild(pos, false);
+ if (_pressTarget) {
+ KstViewObjectPtr p = _pressTarget;
+ while (p->_parent && p->_parent->_container) {
+ p = p->_parent;
+ }
+ if (p->_parent && !p->_parent->_container) {
+ _pressTarget = p->_parent;
+ }
+ }
if (_focusOn) {
_pressDirection = -1;
More information about the Kst
mailing list