summaryrefslogtreecommitdiffstats
path: root/sigmodr
diff options
context:
space:
mode:
authorBen Boeckel <MathStuf@gmail.com>2009-03-19 01:45:10 -0400
committerBen Boeckel <MathStuf@gmail.com>2009-03-19 01:45:10 -0400
commit5700e482e7ca6be75cbd4131d6bc065a793c84d1 (patch)
tree5524cc68a8c41f25b8f819cca88df159d6b2089f /sigmodr
parenta1feed759e2a47b675767ae74b25550f8be1d873 (diff)
downloadsigen-5700e482e7ca6be75cbd4131d6bc065a793c84d1.tar.gz
sigen-5700e482e7ca6be75cbd4131d6bc065a793c84d1.tar.xz
sigen-5700e482e7ca6be75cbd4131d6bc065a793c84d1.zip
Update the MapScene
Diffstat (limited to 'sigmodr')
-rw-r--r--sigmodr/widgets/CMakeLists.txt2
-rw-r--r--sigmodr/widgets/MapScene.cpp205
-rw-r--r--sigmodr/widgets/MapScene.h28
3 files changed, 169 insertions, 66 deletions
diff --git a/sigmodr/widgets/CMakeLists.txt b/sigmodr/widgets/CMakeLists.txt
index 52aab650..e448ea1a 100644
--- a/sigmodr/widgets/CMakeLists.txt
+++ b/sigmodr/widgets/CMakeLists.txt
@@ -19,6 +19,7 @@ set(sigmodrwidgets_HEADERS
ItemTypeUI.h
MapUI.h
MapItem.h
+ MapScene.h
MapEffectUI.h
MapTrainerUI.h
MapTrainerTeamMemberUI.h
@@ -62,6 +63,7 @@ set(sigmodrwidgets_SRCS
ItemTypeUI.cpp
MapUI.cpp
MapItem.cpp
+ MapScene.cpp
MapEffectUI.cpp
MapTrainerUI.cpp
MapTrainerTeamMemberUI.cpp
diff --git a/sigmodr/widgets/MapScene.cpp b/sigmodr/widgets/MapScene.cpp
index c250deae..18563a0c 100644
--- a/sigmodr/widgets/MapScene.cpp
+++ b/sigmodr/widgets/MapScene.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright 2008 Ben Boeckel <MathStuf@gmail.com>
+ * Copyright 2008-2009 Ben Boeckel <MathStuf@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -18,25 +18,31 @@
// Header include
#include "MapScene.h"
-// Sigmodr includes
+// Sigmodr widget includes
#include "EffectItem.h"
#include "TileItem.h"
#include "TrainerItem.h"
#include "WarpItem.h"
// Sigmod includes
-#include "../sigmod/Map.h"
-#include "../sigmod/MapEffect.h"
-#include "../sigmod/MapTile.h"
-#include "../sigmod/MapTrainer.h"
-#include "../sigmod/MapWarp.h"
-#include "../sigmod/Tile.h"
+#include <sigmod/Map.h>
+#include <sigmod/MapEffect.h>
+#include <sigmod/MapTile.h>
+#include <sigmod/MapTrainer.h>
+#include <sigmod/MapWarp.h>
+#include <sigmod/Tile.h>
// KDE includes
#include <KComboBox>
#include <KDialog>
-Sigmodr::MapScene::MapScene(Sigmod::Map* map, QObject* parent) :
+// Qt includes
+#include <QtGui/QGraphicsView>
+
+using namespace Sigmod;
+using namespace Sigmodr::Widgets;
+
+MapScene::MapScene(Map* map, QObject* parent) :
QGraphicsScene(parent),
m_map(map)
{
@@ -49,84 +55,163 @@ Sigmodr::MapScene::MapScene(Sigmod::Map* map, QObject* parent) :
addItem(new TrainerItem(m_map->trainer(i), this));
for (int i = 0; i < m_map->warpCount(); ++i)
addItem(new WarpItem(m_map->warp(i), this));
- typeChanged("Warps");
}
-void Sigmodr::MapScene::addTile()
+void MapScene::addTile()
{
- KDialog* dialog = new KDialog;
- dialog->setCaption("New Tile");
- KComboBox* combo = new KComboBox;
- for (int i = 0; i < m_map->sigmod()->tileCount(); ++i)
- combo->addItem(m_map->sigmod()->tile(i)->name());
- dialog->setMainWidget(combo);
- if (dialog->exec() == KDialog::Ok)
- {
- Sigmod::MapTile* tile = m_map->newTile();
- tile->setTile(m_map->sigmod()->tile(combo->currentIndex())->id());
- TileItem* item = new TileItem(tile, this);
- addItem(item);
- m_tiles[tile] = item;
- }
- delete dialog;
+ MapTile* tile = m_map->newTile();
+ QList<QGraphicsView*> viewList = views();
+ if (viewList.size())
+ tile->setPosition(viewList[0]->mapToScene(QPoint(0, 0)).toPoint());
+ m_tiles[tile] = new TileItem(tile, this);
}
-void Sigmodr::MapScene::removeTiles()
+void MapScene::removeSelected()
{
QList<QGraphicsItem*> items = selectedItems();
foreach (QGraphicsItem* item, items)
{
- if (m_effects.key(static_cast<EffectItem*>(item)))
+ EffectItem* effectItem = qgraphicsitem_cast<EffectItem*>(item);
+ TileItem* tileItem = qgraphicsitem_cast<TileItem*>(item);
+ TrainerItem* trainerItem = qgraphicsitem_cast<TrainerItem*>(item);
+ WarpItem* warpItem = qgraphicsitem_cast<WarpItem*>(item);
+ if (effectItem)
{
- Sigmod::MapEffect* effect = m_effects.key(static_cast<EffectItem*>(item));
+ MapEffect* effect = m_effects.key(effectItem);
m_map->deleteEffectById(effect->id());
- delete m_effects[effect];
+ delete effectItem;
m_effects.remove(effect);
}
- else if (m_tiles.key(static_cast<TileItem*>(item)))
+ else if (tileItem)
{
- Sigmod::MapTile* tile = m_tiles.key(static_cast<TileItem*>(item));
+ MapTile* tile = m_tiles.key(tileItem);
m_map->deleteTileById(tile->id());
- delete m_tiles[tile];
+ delete tileItem;
m_tiles.remove(tile);
}
- else if (m_trainers.key(static_cast<TrainerItem*>(item)))
+ else if (trainerItem)
{
- Sigmod::MapTrainer* trainer = m_trainers.key(static_cast<TrainerItem*>(item));
+ MapTrainer* trainer = m_trainers.key(trainerItem);
m_map->deleteTrainerById(trainer->id());
- delete m_trainers[trainer];
+ delete trainerItem;
m_trainers.remove(trainer);
}
- else if (m_warps.key(static_cast<WarpItem*>(item)))
+ else if (warpItem)
{
- Sigmod::MapWarp* warp = m_warps.key(static_cast<WarpItem*>(item));
+ MapWarp* warp = m_warps.key(warpItem);
m_map->deleteWarpById(warp->id());
- delete m_warps[warp];
+ delete warpItem;
m_warps.remove(warp);
}
}
}
-void Sigmodr::MapScene::typeChanged(const QString& type)
+void MapScene::moveToTop()
+{
+ QList<QGraphicsItem*> items = selectedItems();
+ foreach (QGraphicsItem* item, items)
+ {
+ TileItem* tileItem = qgraphicsitem_cast<TileItem*>(item);
+ if (tileItem)
+ tileItem->setZIndex(INT_MAX - 1);
+ }
+}
+
+void MapScene::moveUp()
+{
+ QList<QGraphicsItem*> items = selectedItems();
+ foreach (QGraphicsItem* item, items)
+ {
+ TileItem* tileItem = qgraphicsitem_cast<TileItem*>(item);
+ const int zValue = tileItem->zValue();
+ if (tileItem && (zValue < (INT_MAX - 1)))
+ tileItem->setZIndex(zValue + 1);
+ }
+}
+
+void MapScene::moveDown()
+{
+ QList<QGraphicsItem*> items = selectedItems();
+ foreach (QGraphicsItem* item, items)
+ {
+ TileItem* tileItem = qgraphicsitem_cast<TileItem*>(item);
+ const int zValue = tileItem->zValue();
+ if (tileItem && (INT_MIN < zValue))
+ tileItem->setZIndex(zValue - 1);
+ }
+}
+
+void MapScene::moveToBottom()
{
- QGraphicsItem::GraphicsItemFlags effectFlags = 0;
- QGraphicsItem::GraphicsItemFlags tileFlags = 0;
- QGraphicsItem::GraphicsItemFlags trainerFlags = 0;
- QGraphicsItem::GraphicsItemFlags warpFlags = 0;
- if (type == "Effects")
- effectFlags = QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsFocusable;
- else if (type == "Tiles")
- tileFlags = QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsFocusable;
- else if (type == "Trainers")
- trainerFlags = QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsFocusable;
- else if (type == "Warps")
- warpFlags = QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsFocusable;
- foreach (EffectItem* effect, m_effects)
- effect->setFlags(effectFlags);
- foreach (TileItem* tile, m_tiles)
- tile->setFlags(tileFlags);
- foreach (TrainerItem* trainer, m_trainers)
- trainer->setFlags(trainerFlags);
- foreach (WarpItem* warp, m_warps)
- warp->setFlags(warpFlags);
+ QList<QGraphicsItem*> items = selectedItems();
+ foreach (QGraphicsItem* item, items)
+ {
+ TileItem* tileItem = qgraphicsitem_cast<TileItem*>(item);
+ if (tileItem)
+ tileItem->setZIndex(INT_MIN);
+ }
+}
+
+void MapScene::showEffects(const int state)
+{
+ QList<EffectItem*> effects = m_effects.values();
+ foreach (EffectItem* effect, effects)
+ {
+ if (state < Qt::PartiallyChecked)
+ effect->hide();
+ else
+ effect->show();
+ if (Qt::PartiallyChecked < state)
+ effect->setFlags(0);
+ else
+ effect->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
+ }
+}
+
+void MapScene::showTiles(const int state)
+{
+ QList<TileItem*> tiles = m_tiles.values();
+ foreach (TileItem* tile, tiles)
+ {
+ if (state < Qt::PartiallyChecked)
+ tile->hide();
+ else
+ tile->show();
+ if (Qt::PartiallyChecked < state)
+ tile->setFlags(0);
+ else
+ tile->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
+ }
+}
+
+void MapScene::showTrainers(const int state)
+{
+ QList<TrainerItem*> trainers = m_trainers.values();
+ foreach (TrainerItem* trainer, trainers)
+ {
+ if (state < Qt::PartiallyChecked)
+ trainer->hide();
+ else
+ trainer->show();
+ if (Qt::PartiallyChecked < state)
+ trainer->setFlags(0);
+ else
+ trainer->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
+ }
+}
+
+void MapScene::showWarps(const int state)
+{
+ QList<WarpItem*> warps = m_warps.values();
+ foreach (WarpItem* warp, warps)
+ {
+ if (state < Qt::PartiallyChecked)
+ warp->hide();
+ else
+ warp->show();
+ if (Qt::PartiallyChecked < state)
+ warp->setFlags(0);
+ else
+ warp->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
+ }
}
diff --git a/sigmodr/widgets/MapScene.h b/sigmodr/widgets/MapScene.h
index e517183f..078b1f6c 100644
--- a/sigmodr/widgets/MapScene.h
+++ b/sigmodr/widgets/MapScene.h
@@ -1,5 +1,5 @@
/*
- * Copyright 2008 Ben Boeckel <MathStuf@gmail.com>
+ * Copyright 2008-2009 Ben Boeckel <MathStuf@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -15,8 +15,11 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef SIGMODR_MAPSCENE
-#define SIGMODR_MAPSCENE
+#ifndef SIGMODRWIDGETS_MAPSCENE
+#define SIGMODRWIDGETS_MAPSCENE
+
+// Sigmodr widget includes
+#include "Global.h"
// Qt includes
#include <QtCore/QMap>
@@ -34,12 +37,14 @@ class MapWarp;
namespace Sigmodr
{
+namespace Widgets
+{
class EffectItem;
class TileItem;
class TrainerItem;
class WarpItem;
-class MapScene : public QGraphicsScene
+class SIGMODRWIDGETS_NO_EXPORT MapScene : public QGraphicsScene
{
Q_OBJECT
@@ -47,11 +52,21 @@ class MapScene : public QGraphicsScene
MapScene(Sigmod::Map* map, QObject* parent);
public slots:
void addTile();
- void removeTiles();
+ void removeSelected();
+
+ void moveToTop();
+ void moveUp();
+ void moveDown();
+ void moveToBottom();
- void typeChanged(const QString& type);
+ void showEffects(const int state);
+ void showTiles(const int state);
+ void showTrainers(const int state);
+ void showWarps(const int state);
signals:
void changed();
+
+ void tilesSelected(const bool selected);
private:
Sigmod::Map* m_map;
QMap<Sigmod::MapEffect*, EffectItem*> m_effects;
@@ -60,5 +75,6 @@ class MapScene : public QGraphicsScene
QMap<Sigmod::MapWarp*, WarpItem*> m_warps;
};
}
+}
#endif