# HG changeset patch # User sheepluva # Date 1315757945 -7200 # Node ID 1f4a8cf9efcbce902228475d70c3de83846be6a6 # Parent 63276513b7b3c2893fa02088ee6101f695e6c7dd hand drawn map editor: allow "undo" after "clear" diff -r 63276513b7b3 -r 1f4a8cf9efcb QTfrontend/drawmapscene.cpp --- a/QTfrontend/drawmapscene.cpp Sun Sep 11 11:09:28 2011 -0400 +++ b/QTfrontend/drawmapscene.cpp Sun Sep 11 18:19:05 2011 +0200 @@ -108,11 +108,32 @@ emit pathChanged(); } + else if(oldItems.size()) + { + while(oldItems.size()) + addItem(oldItems.takeFirst()); + paths = oldPaths; + + emit pathChanged(); + } } void DrawMapScene::clearMap() { - clear(); + // don't clear if already cleared + if(!items().size()) + return; + + oldItems.clear(); + + // do this since clear() would _destroy_ all items + while(items().size()) { + oldItems.push_front(items().first()); + removeItem(items().first()); + } + + oldPaths = paths; + paths.clear(); emit pathChanged(); @@ -146,6 +167,8 @@ void DrawMapScene::decode(QByteArray data) { + oldItems.clear(); + oldPaths.clear(); clear(); paths.clear(); diff -r 63276513b7b3 -r 1f4a8cf9efcb QTfrontend/drawmapscene.h --- a/QTfrontend/drawmapscene.h Sun Sep 11 11:09:28 2011 -0400 +++ b/QTfrontend/drawmapscene.h Sun Sep 11 18:19:05 2011 +0200 @@ -48,6 +48,8 @@ QBrush m_brush; QGraphicsPathItem * m_currPath; Paths paths; + Paths oldPaths; + QList oldItems; virtual void mouseMoveEvent(QGraphicsSceneMouseEvent * mouseEvent); virtual void mousePressEvent(QGraphicsSceneMouseEvent * mouseEvent);