diff options
author | Ben Boeckel <MathStuf@gmail.com> | 2009-03-19 01:45:10 -0400 |
---|---|---|
committer | Ben Boeckel <MathStuf@gmail.com> | 2009-03-19 01:45:10 -0400 |
commit | 5700e482e7ca6be75cbd4131d6bc065a793c84d1 (patch) | |
tree | 5524cc68a8c41f25b8f819cca88df159d6b2089f | |
parent | a1feed759e2a47b675767ae74b25550f8be1d873 (diff) | |
download | sigen-5700e482e7ca6be75cbd4131d6bc065a793c84d1.tar.gz sigen-5700e482e7ca6be75cbd4131d6bc065a793c84d1.tar.xz sigen-5700e482e7ca6be75cbd4131d6bc065a793c84d1.zip |
Update the MapScene
-rw-r--r-- | sigmodr/widgets/CMakeLists.txt | 2 | ||||
-rw-r--r-- | sigmodr/widgets/MapScene.cpp | 205 | ||||
-rw-r--r-- | sigmodr/widgets/MapScene.h | 28 |
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 |