/* * Copyright 2008-2009 Ben Boeckel * * 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 * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ // Header include #include "SigmodrTree.h" // Sigmodr tree includes #include "BaseModel.h" #include "SigmodrTreeModel.h" // Sigmodr widget includes #include // Sigmod includes #include #include // Qt includes #include using namespace Sigmod; using namespace Sigmodr::Widgets; using namespace Sigmodr::Tree; SigmodrTree::SigmodrTree(QWidget* parent) : QTreeView(parent) { SigmodrTreeModel* model = new SigmodrTreeModel(this); connect(model, SIGNAL(dirty(const Sigmod::Game*, bool)), this, SLOT(setDirty(const Sigmod::Game*, bool))); header()->hide(); setModel(model); setRootIndex(model->index(-1, 0, QModelIndex())); } QString SigmodrTree::description(const QModelIndex& index) { QString type = model()->data(index, BaseModel::TypeRole).toString(); QString name = model()->data(index, Qt::DisplayRole).toString(); if (type.isEmpty() && name.isEmpty()) return ""; return QString("%1: %2").arg(type).arg(name); } ObjectUI* SigmodrTree::editorWidget(const QModelIndex& index) { ObjectUI* widget = qobject_cast(model()->data(index, BaseModel::WidgetRole).value()); return widget; } KMenu* SigmodrTree::contextMenu(const QModelIndex& index) { return model()->data(index, BaseModel::ContextMenuRole).value(); } const Game* SigmodrTree::currentGame() const { QModelIndex index = currentIndex(); if (index.isValid()) { const Object* object = static_cast(index.internalPointer())->object(); if (object) return object->game(); } return NULL; } QDomDocument SigmodrTree::copy(const QModelIndex& index) { QDomDocument xml; xml.setContent(model()->data(index, BaseModel::XmlRole).toString()); return xml; } void SigmodrTree::paste(const QModelIndex& index, const QDomDocument& data) { model()->setData(index, data.toString(), BaseModel::XmlRole); } QList SigmodrTree::openedGames() const { return m_games.keys(); } void SigmodrTree::addGame(Game* game, const KUrl& url) { qobject_cast(model())->addGame(game); m_games[game] = UrlDirty(url, false); } void SigmodrTree::deleteGame(const Game* game) { if (m_games.contains(game)) { qobject_cast(model())->deleteGame(game); m_games.remove(game); } } bool SigmodrTree::isOpen(const KUrl& url) const { foreach (const UrlDirty& pair, m_games.values()) { if (url == pair.first) return true; } return false; } KUrl SigmodrTree::url(const Game* game) const { if (m_games.contains(game)) return m_games[game].first; return KUrl(); } QStringList SigmodrTree::urls() const { QStringList urls; foreach (const UrlDirty& pair, m_games.values()) urls << pair.first.prettyUrl(); return urls; } void SigmodrTree::setUrl(const Game* game, const KUrl& url) { if (m_games.contains(game)) m_games[game] = UrlDirty(url, false); } bool SigmodrTree::dirty(const Game* game) const { if (m_games.contains(game)) return m_games[game].second; return false; } bool SigmodrTree::dirty() const { return dirty(currentGame()); } void SigmodrTree::setDirty(const Game* game, const bool dirty) { if (m_games.contains(game)) m_games[game].second = dirty; } void SigmodrTree::setDirty() { setDirty(currentGame(), true); }