Merged Tile Editor branch.
--HG-- branch : gsoc2014-dfighter
|
@ -13,6 +13,7 @@ IF(WITH_GUI)
|
|||
ENDIF(WITH_GUI)
|
||||
|
||||
ADD_SUBDIRECTORY(translation_manager)
|
||||
ADD_SUBDIRECTORY(tile_editor)
|
||||
ADD_SUBDIRECTORY(bnp_manager)
|
||||
# Note: Temporarily disabled until development continues.
|
||||
#ADD_SUBDIRECTORY(zone_painter)
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_BINARY_DIR}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${LIBXML2_INCLUDE_DIR}
|
||||
${QT_INCLUDES})
|
||||
|
||||
FILE(GLOB SRC *.cpp *.h)
|
||||
SET(OVQT_EXT_SYS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin_manager.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin_spec.h)
|
||||
|
||||
SET(OVQT_TILE_EDITOR_PLUGIN_HDR
|
||||
tile_model.h
|
||||
tile_editor_main_window.h
|
||||
tile_editor_plugin.h)
|
||||
|
||||
SET(OVQT_TILE_EDITOR_PLUGIN_UIS
|
||||
tile_editor_main_window.ui)
|
||||
|
||||
SET(OVQT_PLUG_TILE_EDITOR_RCS tile_editor.qrc)
|
||||
|
||||
SET(QT_USE_QTGUI TRUE)
|
||||
SET(QT_USE_QTOPENGL TRUE)
|
||||
|
||||
QT4_WRAP_CPP(OVQT_TILE_EDITOR_PLUGIN_MOC_SRC ${OVQT_TILE_EDITOR_PLUGIN_HDR})
|
||||
QT4_ADD_RESOURCES( OVQT_PLUG_TILE_EDITOR_RC_SRCS ${OVQT_PLUG_TILE_EDITOR_RCS})
|
||||
QT4_WRAP_UI(OVQT_TILE_EDITOR_PLUGIN_UI_HDRS ${OVQT_TILE_EDITOR_PLUGIN_UIS})
|
||||
|
||||
SOURCE_GROUP(QtGeneratedUiHdr FILES ${OVQT_TILE_EDITOR_PLUGIN_UI_HDRS})
|
||||
SOURCE_GROUP(QtGeneratedMocSrc FILES ${OVQT_TILE_EDITOR_PLUGIN_MOC_SRC} ${OVQT_PLUG_TILE_EDITOR_RC_SRCS})
|
||||
SOURCE_GROUP("Tile Editor Plugin" FILES ${SRC})
|
||||
SOURCE_GROUP("OVQT Extension System" FILES ${OVQT_EXT_SYS_SRC})
|
||||
|
||||
ADD_LIBRARY(ovqt_plugin_tile_editor MODULE ${SRC} ${OVQT_TILE_EDITOR_PLUGIN_MOC_SRC} ${OVQT_PLUG_TILE_EDITOR_RC_SRCS} ${OVQT_EXT_SYS_SRC} ${OVQT_TILE_EDITOR_PLUGIN_UI_HDRS})
|
||||
|
||||
TARGET_LINK_LIBRARIES(ovqt_plugin_tile_editor ovqt_plugin_core nelmisc ${QT_LIBRARIES})
|
||||
|
||||
IF(WITH_STLPORT)
|
||||
TARGET_LINK_LIBRARIES(ovqt_plugin_tile_editor ${CMAKE_THREAD_LIBS_INIT})
|
||||
ENDIF(WITH_STLPORT)
|
||||
|
||||
NL_DEFAULT_PROPS(ovqt_plugin_tile_editor "NeL, Tools, 3D: Object Viewer Qt Plugin: Tile Editor")
|
||||
NL_ADD_RUNTIME_FLAGS(ovqt_plugin_tile_editor)
|
||||
NL_ADD_LIB_SUFFIX(ovqt_plugin_tile_editor)
|
||||
|
||||
ADD_DEFINITIONS(${LIBXML2_DEFINITIONS} -DQT_PLUGIN -DQT_SHARED ${QT_DEFINITIONS})
|
||||
|
||||
INSTALL(TARGETS ovqt_plugin_tile_editor LIBRARY DESTINATION lib RUNTIME DESTINATION bin ARCHIVE DESTINATION lib COMPONENT tools3d)
|
After Width: | Height: | Size: 7.1 KiB |
After Width: | Height: | Size: 4 KiB |
After Width: | Height: | Size: 7.4 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 6.3 KiB |
After Width: | Height: | Size: 7.6 KiB |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 4.4 KiB |
After Width: | Height: | Size: 4.4 KiB |
After Width: | Height: | Size: 4.4 KiB |
After Width: | Height: | Size: 4.5 KiB |
|
@ -0,0 +1,10 @@
|
|||
<plugin-spec>
|
||||
<library-name>ovqt_plugin_tile_editor</library-name>
|
||||
<name>TileEditor</name>
|
||||
<version>1.0</version>
|
||||
<vendor>Ryzom Core</vendor>
|
||||
<description>Tile bank editing plugin.</description>
|
||||
<dependencies>
|
||||
<dependency plugin-name="Core" version="0.8"/>
|
||||
</dependencies>
|
||||
</plugin-spec>
|
|
@ -0,0 +1,29 @@
|
|||
<RCC>
|
||||
<qresource prefix="tileTools">
|
||||
<file>images/add_tile.png</file>
|
||||
<file>images/delete_image.png</file>
|
||||
<file>images/delete_tile.png</file>
|
||||
<file>images/replace_image.png</file>
|
||||
</qresource>
|
||||
<qresource prefix="movementIcons">
|
||||
<file>images/ic_nel_add_item.png</file>
|
||||
<file>images/ic_nel_new.png</file>
|
||||
<file>images/ic_nel_open.png</file>
|
||||
<file>images/ic_nel_save.png</file>
|
||||
<file>images/ic_nel_save_as.png</file>
|
||||
<file>images/down.png</file>
|
||||
<file>images/left.png</file>
|
||||
<file>images/reset.png</file>
|
||||
<file>images/right.png</file>
|
||||
<file>images/up.png</file>
|
||||
</qresource>
|
||||
<qresource prefix="tileRotation">
|
||||
<file>images/rotation0.png</file>
|
||||
<file>images/rotation90.png</file>
|
||||
<file>images/rotation180.png</file>
|
||||
<file>images/rotation270.png</file>
|
||||
</qresource>
|
||||
<qresource prefix="placeHolder">
|
||||
<file>images/empty_image.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
|
@ -0,0 +1,299 @@
|
|||
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||
// Copyright (C) 2010 Winch Gate Property Limited
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero 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 Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include "tile_editor_main_window.h"
|
||||
|
||||
#include "nel/misc/path.h"
|
||||
|
||||
#include <QtGui/QMessageBox>
|
||||
#include <QtGui/QApplication>
|
||||
#include <QtGui/QMenu>
|
||||
#include <QFileDialog>
|
||||
#include <QInputDialog>
|
||||
|
||||
#include "../core/icore.h"
|
||||
#include "../core/core_constants.h"
|
||||
#include "../core/menu_manager.h"
|
||||
|
||||
#include "tile_model.h"
|
||||
#include "tile_item.h"
|
||||
#include "tile_item_delegate.h"
|
||||
|
||||
TileEditorMainWindow::TileEditorMainWindow(QWidget *parent)
|
||||
: QMainWindow(parent),
|
||||
m_ui(new Ui::TileEditorMainWindow)
|
||||
{
|
||||
m_ui->setupUi(this);
|
||||
m_undoStack = new QUndoStack(this);
|
||||
|
||||
// Retrieve the menu manager
|
||||
Core::ICore *core = Core::ICore::instance();
|
||||
Core::MenuManager *menuManager = core->menuManager();
|
||||
|
||||
// Create tile rotation drop down toolbar menu.
|
||||
m_rotationMenu = new QMenu(tr("Rotate Tile"), m_ui->toolBar);
|
||||
m_rotationMenu->setIcon(QIcon(":/tileRotation/images/rotation0.png"));
|
||||
QList<QAction*> rotateActions;
|
||||
rotateActions.push_back(m_ui->actionRotateTile0);
|
||||
rotateActions.push_back(m_ui->actionRotateTile90);
|
||||
rotateActions.push_back(m_ui->actionRotateTile180);
|
||||
rotateActions.push_back(m_ui->actionRotateTile270);
|
||||
m_rotationMenu->addActions(rotateActions);
|
||||
m_ui->toolBar->addAction(m_rotationMenu->menuAction());
|
||||
|
||||
// Create the tile zoom menu.
|
||||
m_zoomMenu = new QMenu(tr("Zoom"), m_ui->toolBar);
|
||||
m_zoomActionGroup = new QActionGroup(this);
|
||||
m_zoomSignalMapper = new QSignalMapper(this);
|
||||
QList<QAction*> zoomActions;
|
||||
zoomActions.push_back(m_ui->actionZoom50);
|
||||
zoomActions.push_back(m_ui->actionZoom100);
|
||||
zoomActions.push_back(m_ui->actionZoom200);
|
||||
m_zoomActionGroup->addAction(m_ui->actionZoom50);
|
||||
m_zoomActionGroup->addAction(m_ui->actionZoom100);
|
||||
m_zoomActionGroup->addAction(m_ui->actionZoom200);
|
||||
m_zoomMenu->addActions(zoomActions);
|
||||
m_ui->toolBar->addAction(m_zoomMenu->menuAction());
|
||||
|
||||
m_tileEditorMenu = new QMenu(tr("Tile Editor"), core->menuManager()->menuBar());
|
||||
m_tileDisplayMenu = new QMenu(tr("Tile Display"), m_ui->toolBar);
|
||||
QList<QAction*> displayActions;
|
||||
displayActions.push_back(m_ui->actionTileDisplayFilename);
|
||||
displayActions.push_back(m_ui->actionTileDisplayIndex);
|
||||
m_ui->actionTileDisplayIndex->setChecked(true);
|
||||
m_tileDisplayMenu->addActions(displayActions);
|
||||
m_tileEditorMenu->addMenu(m_tileDisplayMenu);
|
||||
core->menuManager()->menuBar()->addMenu(m_tileEditorMenu);
|
||||
|
||||
// Set up the list views.
|
||||
QStringList headers;
|
||||
headers << "Tile Set";
|
||||
m_model = new TileModel(headers, this);
|
||||
m_tileItemDelegate = new TileItemDelegate();
|
||||
|
||||
// Set up the tile set list view.
|
||||
m_ui->tileSetLV->setModel(m_model);
|
||||
//m_ui->tileSetLV->setRootIndex(m_model->index(0,0));
|
||||
connect(m_ui->tileSetAddTB, SIGNAL(clicked()), this, SLOT(onTileSetAdd()));
|
||||
connect(m_ui->tileSetLV->selectionModel(),
|
||||
SIGNAL(currentChanged(const QModelIndex &, const QModelIndex &)),
|
||||
this, SLOT(changeActiveTileSet(const QModelIndex &, const QModelIndex &)));
|
||||
|
||||
// 128x128 List View
|
||||
//m_ui->listView128->setItemDelegate(m_tileItemDelegate);
|
||||
m_ui->listView128->setModel(m_model);
|
||||
m_ui->listView128->addAction(m_ui->actionAddTile);
|
||||
m_ui->listView128->addAction(m_ui->actionDeleteTile);
|
||||
m_ui->listView128->addAction(m_ui->actionReplaceImage);
|
||||
m_ui->listView128->addAction(m_ui->actionDeleteImage);
|
||||
|
||||
// 256x256 List View
|
||||
//m_ui->listView256->setItemDelegate(m_tileItemDelegate);
|
||||
m_ui->listView256->setModel(m_model);
|
||||
m_ui->listView256->addAction(m_ui->actionAddTile);
|
||||
m_ui->listView256->addAction(m_ui->actionDeleteTile);
|
||||
m_ui->listView256->addAction(m_ui->actionReplaceImage);
|
||||
m_ui->listView256->addAction(m_ui->actionDeleteImage);
|
||||
|
||||
// Transition List View
|
||||
//m_ui->listViewTransition->setItemDelegate(m_tileItemDelegate);
|
||||
m_ui->listViewTransition->setModel(m_model);
|
||||
m_ui->listViewTransition->addAction(m_ui->actionReplaceImage);
|
||||
m_ui->listViewTransition->addAction(m_ui->actionDeleteImage);
|
||||
|
||||
// Displacement List View
|
||||
//m_ui->listViewDisplacement->setItemDelegate(m_tileItemDelegate);
|
||||
m_ui->listViewDisplacement->setModel(m_model);
|
||||
m_ui->listViewDisplacement->addAction(m_ui->actionReplaceImage);
|
||||
m_ui->listViewDisplacement->addAction(m_ui->actionDeleteImage);
|
||||
|
||||
|
||||
// Connect context menu actions up.
|
||||
connect(m_ui->actionAddTile, SIGNAL(triggered(bool)), this, SLOT(onActionAddTile(bool)));
|
||||
connect(m_ui->actionDeleteTile, SIGNAL(triggered(bool)), this, SLOT(onActionDeleteTile(bool)));
|
||||
connect(m_ui->actionReplaceImage, SIGNAL(triggered(bool)), this, SLOT(onActionReplaceImage(bool)));
|
||||
connect(m_ui->actionDeleteImage, SIGNAL(triggered(bool)), this, SLOT(onActioneleteImage(bool)));
|
||||
|
||||
connect(m_ui->actionTileDisplayFilename, SIGNAL(toggled(bool)), m_model, SLOT(selectFilenameDisplay(bool)));
|
||||
connect(m_ui->actionTileDisplayIndex, SIGNAL(toggled(bool)), m_model, SLOT(selectIndexDisplay(bool)));
|
||||
|
||||
//connect(m_ui->tileViewTabWidget, SIGNAL(currentChanged(int)), m_tileItemDelegate, SLOT(currentTab(int)));
|
||||
|
||||
// Connect the zoom buttons.
|
||||
connect(m_ui->actionZoom50, SIGNAL(triggered()), m_zoomSignalMapper, SLOT(map()));
|
||||
m_zoomSignalMapper->setMapping(m_ui->actionZoom50, 0);
|
||||
connect(m_ui->actionZoom100, SIGNAL(triggered()), m_zoomSignalMapper, SLOT(map()));
|
||||
m_zoomSignalMapper->setMapping(m_ui->actionZoom100, 1);
|
||||
connect(m_ui->actionZoom200, SIGNAL(triggered()), m_zoomSignalMapper, SLOT(map()));
|
||||
m_zoomSignalMapper->setMapping(m_ui->actionZoom200, 2);
|
||||
connect(m_zoomSignalMapper, SIGNAL(mapped(int)), this, SLOT(onZoomFactor(int)));
|
||||
}
|
||||
|
||||
TileEditorMainWindow::~TileEditorMainWindow()
|
||||
{
|
||||
delete m_ui;
|
||||
delete m_undoStack;
|
||||
delete m_rotationMenu;
|
||||
delete m_zoomMenu;
|
||||
|
||||
|
||||
delete m_tileDisplayMenu;
|
||||
delete m_tileEditorMenu;
|
||||
|
||||
delete m_zoomMenu;
|
||||
delete m_zoomActionGroup;
|
||||
delete m_zoomSignalMapper;
|
||||
}
|
||||
|
||||
void TileEditorMainWindow::onZoomFactor(int level)
|
||||
{
|
||||
int tile128Scaled=TileModel::TILE_128_BASE_SIZE;
|
||||
int tile256Scaled=TileModel::TILE_256_BASE_SIZE;
|
||||
int tileTransScaled=TileModel::TILE_TRANSITION_BASE_SIZE;
|
||||
int tileDispScaled=TileModel::TILE_DISPLACE_BASE_SIZE;
|
||||
switch(level)
|
||||
{
|
||||
// Zoom Level 50%
|
||||
case 0:
|
||||
nlinfo("zooming to 50%");
|
||||
TileModel::CurrentZoomFactor = TileModel::TileZoom50;
|
||||
tile128Scaled /= 2;
|
||||
tile256Scaled /= 2;
|
||||
tileTransScaled /= 2;
|
||||
tileDispScaled /= 2;
|
||||
break;
|
||||
case 1:
|
||||
nlinfo("zooming to 100%");
|
||||
TileModel::CurrentZoomFactor = TileModel::TileZoom100;
|
||||
break;
|
||||
case 2:
|
||||
nlinfo("zooming to 200%");
|
||||
TileModel::CurrentZoomFactor = TileModel::TileZoom200;
|
||||
tile128Scaled *= 2;
|
||||
tile256Scaled *= 2;
|
||||
tileTransScaled *= 2;
|
||||
tileDispScaled *= 2;
|
||||
break;
|
||||
default:
|
||||
nlwarning("Invalid Time Zoom Factor passed.");
|
||||
break;
|
||||
};
|
||||
|
||||
nlinfo("resizing transition view. base size: %d factor %d to: %d", TileModel::TILE_TRANSITION_BASE_SIZE, level, tileTransScaled);
|
||||
|
||||
m_ui->listView128->setIconSize(QSize(tile128Scaled, tile128Scaled));
|
||||
m_ui->listView128->setCurrentIndex(m_ui->listView128->model()->index(0, 0, m_ui->listView128->rootIndex()));
|
||||
m_ui->listView256->setIconSize(QSize(tile256Scaled, tile256Scaled));
|
||||
m_ui->listView256->setCurrentIndex(m_ui->listView256->model()->index(0, 0, m_ui->listView256->rootIndex()));
|
||||
m_ui->listViewTransition->setIconSize(QSize(tileTransScaled, tileTransScaled));
|
||||
m_ui->listViewTransition->setCurrentIndex(m_ui->listViewTransition->model()->index(0, 0, m_ui->listViewTransition->rootIndex()));
|
||||
m_ui->listViewDisplacement->setIconSize(QSize(tileDispScaled, tileDispScaled));
|
||||
m_ui->listViewDisplacement->setCurrentIndex(m_ui->listViewDisplacement->model()->index(0, 0, m_ui->listViewDisplacement->rootIndex()));
|
||||
m_ui->listViewTransition->repaint();
|
||||
}
|
||||
|
||||
void TileEditorMainWindow::onActionAddTile(bool triggered)
|
||||
{
|
||||
onActionAddTile(m_ui->tileViewTabWidget->currentIndex());
|
||||
}
|
||||
|
||||
void TileEditorMainWindow::onActionDeleteTile(bool triggered)
|
||||
{
|
||||
}
|
||||
|
||||
void TileEditorMainWindow::onActionReplaceImage(bool triggered)
|
||||
{
|
||||
}
|
||||
|
||||
void TileEditorMainWindow::onActionDeleteImage(bool triggered)
|
||||
{
|
||||
}
|
||||
|
||||
void TileEditorMainWindow::onTileSetAdd()
|
||||
{
|
||||
bool ok;
|
||||
QString text = QInputDialog::getText(this, tr("Add Tile Set"), tr("Enter Tile Set name:"), QLineEdit::Normal, "", &ok);
|
||||
if (ok && !text.isEmpty())
|
||||
{
|
||||
//if (ui.tileSetListWidget->findItems(text, Qt::MatchExactly).count() > 0)
|
||||
//{
|
||||
// QMessageBox::information( this, tr("Error Adding Tile Set"), tr("This name already exists") );
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
|
||||
//QModelIndex index = m_ui->tileSetLV->selectionModel()->currentIndex();
|
||||
TileModel *model = static_cast<TileModel*>(m_ui->tileSetLV->model());
|
||||
|
||||
//if(index.isValid())
|
||||
//{
|
||||
// if(!model->insertRow(index.row()+1, index.parent()))
|
||||
// return;
|
||||
|
||||
// //updateActions()
|
||||
|
||||
// for(int column=0; column<model->columnCount(index.parent()); column++)
|
||||
// {
|
||||
// QModelIndex child = model->index(index.row()+1, column, index.parent());
|
||||
// model->setData(child, QVariant(text), Qt::EditRole);
|
||||
// }
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
|
||||
|
||||
// Create and append the new tile set to the model.
|
||||
TileSetNode *tileSet = model->createTileSetNode(text);
|
||||
|
||||
// Retrieve how many rows there currently are and set the current index using that.
|
||||
m_ui->tileSetLV->reset();
|
||||
uint32 rows = model->rowCount();
|
||||
m_ui->tileSetLV->setCurrentIndex(model->index(rows-1, 0));
|
||||
}
|
||||
}
|
||||
|
||||
void TileEditorMainWindow::onActionAddTile(int tabId)
|
||||
{
|
||||
QFileDialog::Options options;
|
||||
QString selectedFilter;
|
||||
QStringList fileNames = QFileDialog::getOpenFileNames(this, "Choose Tile Texture", "." , "Images (*.png);;All Files (*.*)", &selectedFilter, options);
|
||||
}
|
||||
|
||||
void TileEditorMainWindow::changeActiveTileSet(const QModelIndex &newIndex, const QModelIndex &oldIndex)
|
||||
{
|
||||
TileModel *model = static_cast<TileModel*>(m_ui->tileSetLV->model());
|
||||
|
||||
QModelIndex tile128Idx = model->index(0, 0, newIndex);
|
||||
QModelIndex tile256Idx = model->index(1, 0, newIndex);
|
||||
QModelIndex tileTransIdx = model->index(2, 0, newIndex);
|
||||
QModelIndex tileDispIdx = model->index(3, 0, newIndex);
|
||||
|
||||
m_ui->listView128->setRootIndex(tile128Idx);
|
||||
m_ui->listView128->setCurrentIndex(m_ui->listView128->model()->index(0, 0, m_ui->listView128->rootIndex()));
|
||||
m_ui->listView256->setRootIndex(tile256Idx);
|
||||
m_ui->listView256->setCurrentIndex(m_ui->listView256->model()->index(0, 0, m_ui->listView256->rootIndex()));
|
||||
m_ui->listViewTransition->setRootIndex(tileTransIdx);
|
||||
m_ui->listViewTransition->setCurrentIndex(m_ui->listViewTransition->model()->index(0, 0, m_ui->listViewTransition->rootIndex()));
|
||||
m_ui->listViewDisplacement->setRootIndex(tileDispIdx);
|
||||
m_ui->listViewDisplacement->setCurrentIndex(m_ui->listViewDisplacement->model()->index(0, 0, m_ui->listViewDisplacement->rootIndex()));
|
||||
|
||||
//nlinfo("number of rows in displacement: %d", tileDispIdx.model()->rowCount(tileDispIdx));
|
||||
|
||||
//m_ui->listView128->reset();
|
||||
//m_ui->listView256->reset();
|
||||
//m_ui->listViewTransition->reset();
|
||||
//m_ui->listViewDisplacement->reset();
|
||||
}
|
|
@ -0,0 +1,72 @@
|
|||
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||
// Copyright (C) 2010 Winch Gate Property Limited
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero 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 Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#ifndef TILE_EDITOR_MAIN_WINDOW_H
|
||||
#define TILE_EDITOR_MAIN_WINDOW_H
|
||||
|
||||
#include "ui_tile_editor_main_window.h"
|
||||
|
||||
#include "nel/misc/types_nl.h"
|
||||
#include "nel/misc/sheet_id.h"
|
||||
|
||||
#include <QtGui/QUndoStack>
|
||||
#include <QSignalMapper>
|
||||
|
||||
namespace Ui {
|
||||
class TileEditorMainWindow;
|
||||
}
|
||||
|
||||
class TileModel;
|
||||
class TileItemDelegate;
|
||||
|
||||
class TileEditorMainWindow : public QMainWindow
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit TileEditorMainWindow(QWidget *parent = 0);
|
||||
~TileEditorMainWindow();
|
||||
|
||||
QUndoStack *getUndoStack() { return m_undoStack; }
|
||||
|
||||
public Q_SLOTS:
|
||||
void onActionAddTile(bool triggered);
|
||||
void onActionDeleteTile(bool triggered);
|
||||
void onActionReplaceImage(bool triggered);
|
||||
void onActionDeleteImage(bool triggered);
|
||||
void onTileSetAdd();
|
||||
void changeActiveTileSet(const QModelIndex &newIndex, const QModelIndex &oldIndex);
|
||||
void onZoomFactor(int level);
|
||||
|
||||
private:
|
||||
void onActionAddTile(int tabId);
|
||||
|
||||
Ui::TileEditorMainWindow *m_ui;
|
||||
QUndoStack *m_undoStack;
|
||||
QMenu *m_rotationMenu;
|
||||
|
||||
QMenu *m_tileDisplayMenu;
|
||||
QMenu *m_tileEditorMenu;
|
||||
|
||||
QMenu *m_zoomMenu;
|
||||
QActionGroup *m_zoomActionGroup;
|
||||
QSignalMapper *m_zoomSignalMapper;
|
||||
|
||||
TileModel *m_model;
|
||||
TileItemDelegate *m_tileItemDelegate;
|
||||
};
|
||||
|
||||
#endif // TILE_EDITOR_MAIN_WINDOW_H
|
|
@ -0,0 +1,795 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>TileEditorMainWindow</class>
|
||||
<widget class="QMainWindow" name="TileEditorMainWindow">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>800</width>
|
||||
<height>600</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>MainWindow</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralwidget">
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QTabWidget" name="tileViewTabWidget">
|
||||
<property name="currentIndex">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="tab128">
|
||||
<attribute name="title">
|
||||
<string>128x128</string>
|
||||
</attribute>
|
||||
<layout class="QGridLayout" name="gridLayout_10">
|
||||
<item row="0" column="0">
|
||||
<widget class="QListView" name="listView128">
|
||||
<property name="contextMenuPolicy">
|
||||
<enum>Qt::ActionsContextMenu</enum>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>128</width>
|
||||
<height>128</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="flow">
|
||||
<enum>QListView::LeftToRight</enum>
|
||||
</property>
|
||||
<property name="isWrapping" stdset="0">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="viewMode">
|
||||
<enum>QListView::IconMode</enum>
|
||||
</property>
|
||||
<property name="uniformItemSizes">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QGroupBox" name="editChannel128GB">
|
||||
<property name="title">
|
||||
<string>Edit Channel</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButton_5">
|
||||
<property name="text">
|
||||
<string>Diffuse</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButton_6">
|
||||
<property name="text">
|
||||
<string>Additive</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="tab256">
|
||||
<attribute name="title">
|
||||
<string>256x256</string>
|
||||
</attribute>
|
||||
<layout class="QGridLayout" name="gridLayout_11">
|
||||
<item row="0" column="0">
|
||||
<widget class="QListView" name="listView256">
|
||||
<property name="contextMenuPolicy">
|
||||
<enum>Qt::ActionsContextMenu</enum>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>256</width>
|
||||
<height>256</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="flow">
|
||||
<enum>QListView::LeftToRight</enum>
|
||||
</property>
|
||||
<property name="isWrapping" stdset="0">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="viewMode">
|
||||
<enum>QListView::IconMode</enum>
|
||||
</property>
|
||||
<property name="uniformItemSizes">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QGroupBox" name="editChannel256GB">
|
||||
<property name="title">
|
||||
<string>Edit Channel</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButton_10">
|
||||
<property name="text">
|
||||
<string>Diffuse</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="autoExclusive">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButton_9">
|
||||
<property name="text">
|
||||
<string>Additive</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="tabTransition">
|
||||
<attribute name="title">
|
||||
<string>Transition</string>
|
||||
</attribute>
|
||||
<layout class="QGridLayout" name="gridLayout_12">
|
||||
<item row="0" column="0">
|
||||
<widget class="QListView" name="listViewTransition">
|
||||
<property name="contextMenuPolicy">
|
||||
<enum>Qt::ActionsContextMenu</enum>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>64</width>
|
||||
<height>64</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="movement">
|
||||
<enum>QListView::Static</enum>
|
||||
</property>
|
||||
<property name="flow">
|
||||
<enum>QListView::LeftToRight</enum>
|
||||
</property>
|
||||
<property name="isWrapping" stdset="0">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="resizeMode">
|
||||
<enum>QListView::Adjust</enum>
|
||||
</property>
|
||||
<property name="layoutMode">
|
||||
<enum>QListView::SinglePass</enum>
|
||||
</property>
|
||||
<property name="viewMode">
|
||||
<enum>QListView::IconMode</enum>
|
||||
</property>
|
||||
<property name="uniformItemSizes">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QGroupBox" name="editChannelTransitionGB">
|
||||
<property name="title">
|
||||
<string>Edit Channel</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_5">
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButton_13">
|
||||
<property name="text">
|
||||
<string>Diffuse</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButton_12">
|
||||
<property name="text">
|
||||
<string>Additive</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButton_11">
|
||||
<property name="text">
|
||||
<string>Alpha</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="tabDisplacement">
|
||||
<attribute name="title">
|
||||
<string>Displacement</string>
|
||||
</attribute>
|
||||
<layout class="QGridLayout" name="gridLayout_13">
|
||||
<item row="0" column="0">
|
||||
<widget class="QListView" name="listViewDisplacement">
|
||||
<property name="contextMenuPolicy">
|
||||
<enum>Qt::ActionsContextMenu</enum>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>32</width>
|
||||
<height>32</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="movement">
|
||||
<enum>QListView::Static</enum>
|
||||
</property>
|
||||
<property name="flow">
|
||||
<enum>QListView::LeftToRight</enum>
|
||||
</property>
|
||||
<property name="isWrapping" stdset="0">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="resizeMode">
|
||||
<enum>QListView::Fixed</enum>
|
||||
</property>
|
||||
<property name="viewMode">
|
||||
<enum>QListView::IconMode</enum>
|
||||
</property>
|
||||
<property name="uniformItemSizes">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="tabTileSetDetails">
|
||||
<attribute name="title">
|
||||
<string>Tile Set Details</string>
|
||||
</attribute>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="6" column="0">
|
||||
<widget class="QCheckBox" name="orientedCheckBox">
|
||||
<property name="layoutDirection">
|
||||
<enum>Qt::LeftToRight</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Oriented</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLineEdit" name="surfaceDataLineEdit"/>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Surface Data:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>Vegetation Set:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="0">
|
||||
<spacer name="verticalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QPushButton" name="chooseVegetPushButton">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QPushButton" name="resetVegetPushButton">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../../../tile_edit_qt/tile_edit_qt.qrc">
|
||||
<normaloff>:/newPrefix/reset.png</normaloff>:/newPrefix/reset.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QStatusBar" name="statusbar"/>
|
||||
<widget class="QToolBar" name="toolBar">
|
||||
<property name="windowTitle">
|
||||
<string>Tile Editor Tool Bar</string>
|
||||
</property>
|
||||
<attribute name="toolBarArea">
|
||||
<enum>TopToolBarArea</enum>
|
||||
</attribute>
|
||||
<attribute name="toolBarBreak">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<addaction name="actionOpenTileBank"/>
|
||||
<addaction name="actionSaveTileBank"/>
|
||||
<addaction name="actionSaveTileBankAs"/>
|
||||
<addaction name="separator"/>
|
||||
</widget>
|
||||
<widget class="QDockWidget" name="tileBankDockWidget">
|
||||
<property name="windowTitle">
|
||||
<string>Tile Bank</string>
|
||||
</property>
|
||||
<attribute name="dockWidgetArea">
|
||||
<number>1</number>
|
||||
</attribute>
|
||||
<widget class="QWidget" name="dockWidgetContents">
|
||||
<layout class="QGridLayout" name="gridLayout_3">
|
||||
<item row="0" column="0">
|
||||
<widget class="QGroupBox" name="groupBox_2">
|
||||
<property name="title">
|
||||
<string>Lands</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_4">
|
||||
<item row="0" column="0">
|
||||
<widget class="QListWidget" name="listWidget"/>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="toolButton_3">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="tile_editor.qrc">
|
||||
<normaloff>:/movementIcons/images/ic_nel_add_item.png</normaloff>:/movementIcons/images/ic_nel_add_item.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="toolButton_2">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="tile_editor.qrc">
|
||||
<normaloff>:/movementIcons/images/reset.png</normaloff>:/movementIcons/images/reset.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="toolButton">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="tile_editor.qrc">
|
||||
<normaloff>:/movementIcons/images/ic_nel_open.png</normaloff>:/movementIcons/images/ic_nel_open.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QGroupBox" name="groupBox_3">
|
||||
<property name="title">
|
||||
<string>Tile Sets</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_5">
|
||||
<item row="0" column="1">
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="toolButton_5">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="tile_editor.qrc">
|
||||
<normaloff>:/movementIcons/images/up.png</normaloff>:/movementIcons/images/up.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="toolButton_4">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="tile_editor.qrc">
|
||||
<normaloff>:/movementIcons/images/down.png</normaloff>:/movementIcons/images/down.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="2">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="tileSetAddTB">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="tile_editor.qrc">
|
||||
<normaloff>:/movementIcons/images/ic_nel_add_item.png</normaloff>:/movementIcons/images/ic_nel_add_item.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="toolButton_7">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="tile_editor.qrc">
|
||||
<normaloff>:/movementIcons/images/reset.png</normaloff>:/movementIcons/images/reset.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="toolButton_6">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="tile_editor.qrc">
|
||||
<normaloff>:/movementIcons/images/ic_nel_open.png</normaloff>:/movementIcons/images/ic_nel_open.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_4">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="3" column="0" colspan="2">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_6">
|
||||
<item>
|
||||
<widget class="QPushButton" name="tileBankTexturePathPB">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="tileBankTexturePathTB">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="2" column="0" colspan="2">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>Tile Bank Texture Path</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QListView" name="tileSetLV"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<action name="actionOpenTileBank">
|
||||
<property name="icon">
|
||||
<iconset resource="tile_editor.qrc">
|
||||
<normaloff>:/movementIcons/images/ic_nel_open.png</normaloff>:/movementIcons/images/ic_nel_open.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Open Tile Bank</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Open Tile Bank</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionRotateTile0">
|
||||
<property name="icon">
|
||||
<iconset resource="tile_editor.qrc">
|
||||
<normaloff>:/tileRotation/images/rotation0.png</normaloff>:/tileRotation/images/rotation0.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>0</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Rotate Tile 0 Degrees</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionSaveTileBank">
|
||||
<property name="icon">
|
||||
<iconset resource="tile_editor.qrc">
|
||||
<normaloff>:/movementIcons/images/ic_nel_save.png</normaloff>:/movementIcons/images/ic_nel_save.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Save Tile Bank</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Save Tile Bank</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionSaveTileBankAs">
|
||||
<property name="icon">
|
||||
<iconset resource="tile_editor.qrc">
|
||||
<normaloff>:/movementIcons/images/ic_nel_save_as.png</normaloff>:/movementIcons/images/ic_nel_save_as.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Save Tile Bank As...</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Save Tile Bank As...</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionRotateTile90">
|
||||
<property name="icon">
|
||||
<iconset resource="tile_editor.qrc">
|
||||
<normaloff>:/tileRotation/images/rotation90.png</normaloff>:/tileRotation/images/rotation90.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>90</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Rotate Tile 90 Degrees</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionRotateTile180">
|
||||
<property name="icon">
|
||||
<iconset resource="tile_editor.qrc">
|
||||
<normaloff>:/tileRotation/images/rotation180.png</normaloff>:/tileRotation/images/rotation180.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>180</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Rotate Tile180 Degrees</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionRotateTile270">
|
||||
<property name="icon">
|
||||
<iconset resource="tile_editor.qrc">
|
||||
<normaloff>:/tileRotation/images/rotation270.png</normaloff>:/tileRotation/images/rotation270.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>270</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Rotate Tile 270 Degrees</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionBatchLoad">
|
||||
<property name="text">
|
||||
<string>Batch Load</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Batch Load</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionImportBorder">
|
||||
<property name="text">
|
||||
<string>Import Border</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Import Border</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionExportBorder">
|
||||
<property name="text">
|
||||
<string>Export Border</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Export Border</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionTileDisplayIndex">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Index</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Display Tile Index</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionTileDisplayFilename">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Filename</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Display Tile Filename</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionAddTile">
|
||||
<property name="icon">
|
||||
<iconset resource="tile_editor.qrc">
|
||||
<normaloff>:/tileTools/images/add_tile.png</normaloff>:/tileTools/images/add_tile.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Add Tile</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Add Tile</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionDeleteTile">
|
||||
<property name="icon">
|
||||
<iconset resource="tile_editor.qrc">
|
||||
<normaloff>:/tileTools/images/delete_tile.png</normaloff>:/tileTools/images/delete_tile.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Delete Tile</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Delete Tile</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionReplaceImage">
|
||||
<property name="icon">
|
||||
<iconset resource="tile_editor.qrc">
|
||||
<normaloff>:/tileTools/images/replace_image.png</normaloff>:/tileTools/images/replace_image.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Replace Image</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Replace Image</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionDeleteImage">
|
||||
<property name="icon">
|
||||
<iconset resource="tile_editor.qrc">
|
||||
<normaloff>:/tileTools/images/delete_image.png</normaloff>:/tileTools/images/delete_image.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Delete Image</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Delete Image</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionZoom50">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Zoom 50%</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionZoom100">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Zoom 100%</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionZoom200">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Zoom 200%</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<resources>
|
||||
<include location="tile_editor.qrc"/>
|
||||
<include location="../../../../tile_edit_qt/tile_edit_qt.qrc"/>
|
||||
</resources>
|
||||
<connections/>
|
||||
</ui>
|
|
@ -0,0 +1,75 @@
|
|||
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||
// Copyright (C) 2010 Winch Gate Property Limited
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero 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 Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
// Project includes
|
||||
#include "tile_editor_plugin.h"
|
||||
#include "tile_editor_main_window.h"
|
||||
#include "../core/icore.h"
|
||||
#include "../core/menu_manager.h"
|
||||
#include "../core/core_constants.h"
|
||||
|
||||
// Qt includes
|
||||
#include <QtCore/QObject>
|
||||
#include <QtGui/QMessageBox>
|
||||
#include <QtGui/QMainWindow>
|
||||
#include <QtGui/QMenu>
|
||||
#include <QtGui/QAction>
|
||||
#include <QtGui/QMenuBar>
|
||||
|
||||
// NeL includes
|
||||
#include "nel/misc/debug.h"
|
||||
|
||||
using namespace TileEditorPluginQt;
|
||||
|
||||
TileEditorPlugin::~TileEditorPlugin()
|
||||
{
|
||||
Q_FOREACH(QObject *obj, m_autoReleaseObjects)
|
||||
{
|
||||
m_plugMan->removeObject(obj);
|
||||
}
|
||||
qDeleteAll(m_autoReleaseObjects);
|
||||
m_autoReleaseObjects.clear();
|
||||
}
|
||||
|
||||
bool TileEditorPlugin::initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString)
|
||||
{
|
||||
Q_UNUSED(errorString);
|
||||
m_plugMan = pluginManager;
|
||||
addAutoReleasedObject(new TileEditorContext());
|
||||
return true;
|
||||
}
|
||||
|
||||
void TileEditorPlugin::extensionsInitialized()
|
||||
{
|
||||
}
|
||||
|
||||
void TileEditorPlugin::setNelContext(NLMISC::INelContext *nelContext)
|
||||
{
|
||||
#ifdef NL_OS_WINDOWS
|
||||
// Ensure that a context doesn't exist yet.
|
||||
// This only applies to platforms without PIC, e.g. Windows.
|
||||
nlassert(!NLMISC::INelContext::isContextInitialised());
|
||||
#endif // NL_OS_WINDOWS
|
||||
m_LibContext = new NLMISC::CLibraryContext(*nelContext);
|
||||
}
|
||||
|
||||
void TileEditorPlugin::addAutoReleasedObject(QObject *obj)
|
||||
{
|
||||
m_plugMan->addObject(obj);
|
||||
m_autoReleaseObjects.prepend(obj);
|
||||
}
|
||||
|
||||
Q_EXPORT_PLUGIN(TileEditorPlugin)
|
|
@ -0,0 +1,109 @@
|
|||
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||
// Copyright (C) 2010 Winch Gate Property Limited
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero 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 Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#ifndef TILE_EDITOR_PLUGIN_H
|
||||
#define TILE_EDITOR_PLUGIN_H
|
||||
|
||||
#include "../../extension_system/iplugin.h"
|
||||
#include "../core/icontext.h"
|
||||
|
||||
#include "nel/misc/app_context.h"
|
||||
|
||||
#include "tile_editor_main_window.h"
|
||||
|
||||
#include <QtCore/QObject>
|
||||
|
||||
namespace NLMISC
|
||||
{
|
||||
class CLibraryContext;
|
||||
}
|
||||
|
||||
namespace TileEditorPluginQt
|
||||
{
|
||||
|
||||
class TileEditorPlugin : public QObject, public ExtensionSystem::IPlugin
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_INTERFACES(ExtensionSystem::IPlugin)
|
||||
public:
|
||||
|
||||
~TileEditorPlugin();
|
||||
|
||||
bool initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString);
|
||||
void extensionsInitialized();
|
||||
void setNelContext(NLMISC::INelContext *nelContext);
|
||||
|
||||
void addAutoReleasedObject(QObject *obj);
|
||||
|
||||
protected:
|
||||
NLMISC::CLibraryContext *m_LibContext;
|
||||
|
||||
private:
|
||||
ExtensionSystem::IPluginManager *m_plugMan;
|
||||
QList<QObject *> m_autoReleaseObjects;
|
||||
|
||||
};
|
||||
|
||||
class TileEditorContext: public Core::IContext
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
TileEditorContext(QObject *parent = 0) : IContext(parent)
|
||||
{
|
||||
m_tileEditorMainWindow = new TileEditorMainWindow();
|
||||
}
|
||||
|
||||
virtual ~TileEditorContext()
|
||||
{
|
||||
delete m_tileEditorMainWindow;
|
||||
}
|
||||
|
||||
virtual QString id() const
|
||||
{
|
||||
return QLatin1String("TileEditor");
|
||||
}
|
||||
|
||||
virtual QString trName() const
|
||||
{
|
||||
return tr("Tile Editor");
|
||||
}
|
||||
|
||||
virtual QIcon icon() const
|
||||
{
|
||||
return QIcon(":/tileRotation/images/rotation0.png");
|
||||
}
|
||||
|
||||
virtual QUndoStack *undoStack()
|
||||
{
|
||||
return m_tileEditorMainWindow->getUndoStack();
|
||||
}
|
||||
|
||||
virtual void open()
|
||||
{
|
||||
}
|
||||
|
||||
virtual QWidget *widget()
|
||||
{
|
||||
return m_tileEditorMainWindow;
|
||||
}
|
||||
|
||||
private:
|
||||
TileEditorMainWindow *m_tileEditorMainWindow;
|
||||
};
|
||||
|
||||
} // namespace TileEditorPluginQt
|
||||
|
||||
#endif // TILE_EDITOR_PLUGIN_H
|
|
@ -0,0 +1,292 @@
|
|||
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||
// Copyright (C) 2010 Winch Gate Property Limited
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero 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 Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <QPixmap>
|
||||
|
||||
#include "tile_item.h"
|
||||
|
||||
//#include "tile_widget.h"
|
||||
|
||||
#include <nel/misc/debug.h>
|
||||
|
||||
Node::Node() : m_parentItem(0)
|
||||
{
|
||||
}
|
||||
|
||||
Node::Node(const QVector<QVariant> &data, Node *parent)
|
||||
{
|
||||
m_parentItem = parent;
|
||||
m_itemData = data;
|
||||
}
|
||||
|
||||
Node::~Node()
|
||||
{
|
||||
qDeleteAll(m_childItems);
|
||||
}
|
||||
|
||||
void Node::appendChild(Node *item)
|
||||
{
|
||||
m_childItems.append(item);
|
||||
}
|
||||
|
||||
Node *Node::child(int row)
|
||||
{
|
||||
//nlinfo("row %d and size %d", row, childItems.size());
|
||||
return m_childItems.value(row);
|
||||
}
|
||||
|
||||
int Node::childCount() const
|
||||
{
|
||||
return m_childItems.count();
|
||||
}
|
||||
|
||||
int Node::childNumber() const
|
||||
{
|
||||
if(m_parentItem)
|
||||
return m_parentItem->m_childItems.indexOf(const_cast<Node*>(this));
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool Node::insertChildren(int position, int count, int columns)
|
||||
{
|
||||
if(position<0 || position>m_childItems.size())
|
||||
return false;
|
||||
|
||||
for(int row = 0; row < count; row++)
|
||||
{
|
||||
QVector<QVariant> data(columns);
|
||||
Node *item = new Node(data, this);
|
||||
m_childItems.insert(position, item);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Node::removeChildren(int position, int count)
|
||||
{
|
||||
if(position<0 || position+count>m_childItems.size())
|
||||
return false;
|
||||
|
||||
for(int row=0; row<count; row++)
|
||||
delete m_childItems.takeAt(position);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Node::insertColumns(int position, int columns)
|
||||
{
|
||||
if(position<0 || position > m_itemData.size())
|
||||
return false;
|
||||
|
||||
for(int column=0; column<columns; column++)
|
||||
m_itemData.insert(position, columns);
|
||||
|
||||
Q_FOREACH(Node *child, m_childItems)
|
||||
child->insertColumns(position, columns);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int Node::row() const
|
||||
{
|
||||
if(m_parentItem)
|
||||
return m_parentItem->m_childItems.indexOf(const_cast<Node*>(this));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Node::columnCount() const
|
||||
{
|
||||
return m_itemData.count();
|
||||
}
|
||||
|
||||
QVariant Node::data(int column, int role) const
|
||||
{
|
||||
if(role == Qt::DisplayRole ||
|
||||
role == TileModel::TileFilenameIndexRole ||
|
||||
role == TileModel::TileFilenameRole ||
|
||||
role == TileModel::TileIndexRole)
|
||||
return m_itemData.value(column);
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
bool Node::setData(int column, const QVariant &value)
|
||||
{
|
||||
if(column < 0 || column >= m_itemData.size())
|
||||
return false;
|
||||
|
||||
m_itemData[column] = value;
|
||||
return true;
|
||||
}
|
||||
|
||||
Node *Node::parent()
|
||||
{
|
||||
return m_parentItem;
|
||||
}
|
||||
|
||||
void Node::setParent(Node *parent)
|
||||
{
|
||||
m_parentItem = parent;
|
||||
}
|
||||
|
||||
void Node::appendRow(const QList<Node*> &items)
|
||||
{
|
||||
Q_FOREACH(Node *item, items)
|
||||
appendRow(item);
|
||||
}
|
||||
|
||||
void Node::appendRow(Node *item)
|
||||
{
|
||||
item->setParent(this);
|
||||
m_childItems.append(item);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////
|
||||
|
||||
TileSetNode::TileSetNode(QString tileSetName, Node *parent) : m_tileSetName(tileSetName)
|
||||
{
|
||||
m_parentItem = parent;
|
||||
}
|
||||
|
||||
TileSetNode::~TileSetNode()
|
||||
{
|
||||
qDeleteAll(m_childItems);
|
||||
}
|
||||
|
||||
QVariant TileSetNode::data(int column, int role) const
|
||||
{
|
||||
if(role == Qt::DisplayRole ||
|
||||
role == TileModel::TileFilenameIndexRole ||
|
||||
role == TileModel::TileFilenameRole ||
|
||||
role == TileModel::TileIndexRole)
|
||||
return QVariant(m_tileSetName);
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
int TileSetNode::columnCount() const
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////
|
||||
|
||||
TileTypeNode::TileTypeNode(TileModel::TNodeTileType type, Node *parent) : m_nodeTileType(type)
|
||||
{
|
||||
m_parentItem = parent;
|
||||
}
|
||||
|
||||
TileTypeNode::~TileTypeNode()
|
||||
{
|
||||
qDeleteAll(m_childItems);
|
||||
}
|
||||
|
||||
QVariant TileTypeNode::data(int column, int role) const
|
||||
{
|
||||
if(role == Qt::DisplayRole ||
|
||||
role == TileModel::TileFilenameIndexRole ||
|
||||
role == TileModel::TileFilenameRole ||
|
||||
role == TileModel::TileIndexRole)
|
||||
return QVariant(TileModel::getTileTypeName(m_nodeTileType));
|
||||
return QVariant();
|
||||
|
||||
}
|
||||
|
||||
int TileTypeNode::columnCount() const
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
TileModel::TNodeTileType TileTypeNode::getTileType()
|
||||
{
|
||||
return m_nodeTileType;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
///////////////////////////////////////////////////
|
||||
|
||||
TileItemNode::TileItemNode(int tileId, TileModel::TTileChannel channel, QString filename, Node *parent) : m_tileId(tileId)
|
||||
{
|
||||
m_tileFilename[channel] = filename;
|
||||
m_parentItem = parent;
|
||||
//nlinfo("dispalying tile %d - %s", m_tileId, m_tileFilename[TileModel::TileDiffuse].toStdString().c_str());
|
||||
}
|
||||
|
||||
TileItemNode::~TileItemNode()
|
||||
{
|
||||
qDeleteAll(m_childItems);
|
||||
}
|
||||
|
||||
void TileItemNode::setTileFilename(TileModel::TTileChannel channel, QString filename)
|
||||
{
|
||||
m_tileFilename[channel] = filename;
|
||||
}
|
||||
|
||||
QVariant TileItemNode::data(int column, int role) const
|
||||
{
|
||||
// find some way to know which file/bitmap to display
|
||||
QString tileFilename = m_tileFilename[TileModel::TileDiffuse];
|
||||
|
||||
if(role == TileModel::TilePixmapRole || role == Qt::DecorationRole)
|
||||
{
|
||||
TileTypeNode *parent = dynamic_cast<TileTypeNode*>(m_parentItem);
|
||||
if(parent == NULL)
|
||||
return QVariant();
|
||||
|
||||
// Retrieve the target tile size.
|
||||
uint32 tileSize = TileModel::getTileTypeSize(parent->getTileType());
|
||||
|
||||
if(tileFilename.isEmpty() || tileFilename == "empty")
|
||||
tileFilename = ":/placeHolder/images/empty_image.png";
|
||||
|
||||
QPixmap pixmap;// = new QPixmap();
|
||||
if(!pixmap.load(tileFilename))
|
||||
nlinfo("failed to load %s", tileFilename.toStdString().c_str());
|
||||
|
||||
if(TileModel::CurrentZoomFactor == TileModel::TileZoom200)
|
||||
tileSize *= 2;
|
||||
else if(TileModel::CurrentZoomFactor == TileModel::TileZoom50)
|
||||
tileSize /= 2;
|
||||
|
||||
pixmap.scaled(tileSize, tileSize);
|
||||
|
||||
return pixmap;
|
||||
}
|
||||
else if(role == Qt::DisplayRole)
|
||||
{
|
||||
return QVariant(tileFilename);
|
||||
}
|
||||
else if(role == TileModel::TileFilenameRole)
|
||||
{
|
||||
return QVariant(tileFilename);
|
||||
}
|
||||
else if(role == TileModel::TileIndexRole)
|
||||
{
|
||||
return QVariant("("+QString::number(m_tileId)+")");
|
||||
}
|
||||
else if(role == TileModel::TileFilenameIndexRole)
|
||||
{
|
||||
return QVariant(tileFilename + " ("+QString::number(m_tileId)+")");
|
||||
}
|
||||
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
int TileItemNode::columnCount() const
|
||||
{
|
||||
return 1;
|
||||
}
|
|
@ -0,0 +1,103 @@
|
|||
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||
// Copyright (C) 2010 Winch Gate Property Limited
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero 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 Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#ifndef TILE_ITEM_H
|
||||
#define TILE_ITEM_H
|
||||
|
||||
#include "nel/misc/types_nl.h"
|
||||
|
||||
#include <QAbstractListModel>
|
||||
#include <QVector>
|
||||
|
||||
#include "tile_model.h"
|
||||
|
||||
class TileWidget;
|
||||
|
||||
class Node
|
||||
{
|
||||
public:
|
||||
Node();
|
||||
Node(const QVector<QVariant> &data, Node *parent=0);
|
||||
virtual ~Node();
|
||||
|
||||
void appendChild(Node *child);
|
||||
|
||||
Node *child(int row);
|
||||
int childCount() const;
|
||||
int childNumber() const;
|
||||
virtual int columnCount() const;
|
||||
bool setData(int column, const QVariant &value);
|
||||
virtual QVariant data(int column, int role) const;
|
||||
|
||||
bool insertChildren(int position, int count, int columns);
|
||||
bool removeChildren(int position, int count);
|
||||
bool insertColumns(int position, int columns);
|
||||
|
||||
int row() const;
|
||||
Node *parent();
|
||||
void setParent(Node *parent);
|
||||
|
||||
void appendRow(const QList<Node*> &items);
|
||||
void appendRow(Node *item);
|
||||
|
||||
protected:
|
||||
QList<Node*> m_childItems;
|
||||
QVector<QVariant> m_itemData;
|
||||
Node *m_parentItem;
|
||||
};
|
||||
|
||||
class TileSetNode : public Node
|
||||
{
|
||||
public:
|
||||
TileSetNode(QString tileSetName, Node *parent=0);
|
||||
virtual ~TileSetNode();
|
||||
QVariant data(int column, int role) const;
|
||||
int columnCount() const;
|
||||
|
||||
const QString &getTileSetName();
|
||||
private:
|
||||
QString m_tileSetName;
|
||||
};
|
||||
|
||||
class TileTypeNode : public Node
|
||||
{
|
||||
public:
|
||||
|
||||
TileTypeNode(TileModel::TNodeTileType type, Node *parent=0);
|
||||
virtual ~TileTypeNode();
|
||||
QVariant data(int column, int role) const;
|
||||
int columnCount() const;
|
||||
|
||||
TileModel::TNodeTileType getTileType();
|
||||
private:
|
||||
TileModel::TNodeTileType m_nodeTileType;
|
||||
};
|
||||
|
||||
class TileItemNode : public Node
|
||||
{
|
||||
public:
|
||||
TileItemNode(int tileId, TileModel::TTileChannel channel, QString filename, Node *parent=0);
|
||||
virtual ~TileItemNode();
|
||||
QVariant data(int column, int role) const;
|
||||
int columnCount() const;
|
||||
void setTileFilename(TileModel::TTileChannel channel, QString filename);
|
||||
private:
|
||||
int m_tileId;
|
||||
QMap<TileModel::TTileChannel, QString> m_tileFilename;
|
||||
QMap<TileModel::TTileChannel, TileWidget*> m_tileWidget;
|
||||
};
|
||||
|
||||
#endif // TILE_ITEM_H
|
|
@ -0,0 +1,122 @@
|
|||
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||
// Copyright (C) 2010 Winch Gate Property Limited
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero 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 Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <QtGui/QtGui>
|
||||
|
||||
#include <nel/misc/debug.h>
|
||||
|
||||
#include "tile_item_delegate.h"
|
||||
|
||||
#include "tile_model.h"
|
||||
|
||||
TileItemDelegate::TileItemDelegate()
|
||||
{
|
||||
m_zoomFactor = ZoomNormal;
|
||||
m_imageHint = 128;
|
||||
}
|
||||
|
||||
TileItemDelegate::~TileItemDelegate()
|
||||
{
|
||||
}
|
||||
|
||||
void TileItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
|
||||
{
|
||||
QStyledItemDelegate::paint(painter,option,index);
|
||||
|
||||
painter->save();
|
||||
|
||||
QFont font = QApplication::font();
|
||||
|
||||
//font.setBold(true);
|
||||
//SubFont.setWeight(SubFont.weight()-2);
|
||||
QFontMetrics fm(font);
|
||||
|
||||
QPixmap tile = qvariant_cast<QPixmap>(index.data(TileModel::TilePixmapRole));
|
||||
QString tileFileText = qvariant_cast<QString>(index.data(TileModel::TileFilenameRole));
|
||||
QString tileIdText = qvariant_cast<QString>(index.data(TileModel::TileIndexRole));
|
||||
|
||||
QSize tileSize = tile.size();
|
||||
|
||||
//QRect headerRect = option.rect;
|
||||
QRect rect(option.rect);
|
||||
//QRect tileRect(option.rect);
|
||||
int textHeight = fm.height();
|
||||
int iconPosModX = PIXMAP_MARGIN + (tile.width() / 2);
|
||||
int iconPosModY = (option.rect.height() - tile.height()) / 2;
|
||||
|
||||
painter->drawPixmap(rect.adjusted(iconPosModX, iconPosModY, iconPosModX, iconPosModY).topLeft(), tile);
|
||||
|
||||
|
||||
|
||||
//tileRect.setRight(tileSize.width()+30);
|
||||
//tileRect.setTop(tileRect.top()+5);
|
||||
//headerRect.setLeft(tileRect.right());
|
||||
//subheaderRect.setLeft(tileRect.right());
|
||||
//headerRect.setTop(headerRect.top()+5);
|
||||
//headerRect.setBottom(headerRect.top()+fm.height());
|
||||
|
||||
//subheaderRect.setTop(headerRect.bottom()+2);
|
||||
|
||||
//painter->drawPixmap(targetrect, pixmap, sourcerect)
|
||||
|
||||
//painter->drawPixmap(QPoint(iconRect.right()/2,iconRect.top()/2),icon.pixmap(iconsize.width(),iconsize.height()));
|
||||
//painter->drawPixmap(QPoint(tileRect.left()+tileSize.width()/2+2,tileRect.top()+tileSize.height()/2+3),tile);
|
||||
|
||||
//painter->setFont(font);
|
||||
//painter->drawText(headerRect,headerText);
|
||||
|
||||
|
||||
//painter->setFont(SubFont);
|
||||
//painter->drawText(subheaderRect.left(),subheaderRect.top()+17,subText);
|
||||
|
||||
painter->restore();
|
||||
}
|
||||
|
||||
QSize TileItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index ) const
|
||||
{
|
||||
QPixmap tile = qvariant_cast<QPixmap>(index.data(TileModel::TilePixmapRole));
|
||||
QSize tileSize = tile.size();
|
||||
QFont font = QApplication::font();
|
||||
QFontMetrics fm(font);
|
||||
|
||||
return(QSize(tileSize.width()+(2*PIXMAP_MARGIN), tileSize.height()+fm.height()+(2*PIXMAP_MARGIN)));
|
||||
}
|
||||
|
||||
TileItemDelegate::TZoomFactor TileItemDelegate::getZoomFactor()
|
||||
{
|
||||
return m_zoomFactor;
|
||||
}
|
||||
|
||||
void TileItemDelegate::setZoomFactor(TileItemDelegate::TZoomFactor zoomFactor)
|
||||
{
|
||||
m_zoomFactor = zoomFactor;
|
||||
}
|
||||
|
||||
// SLOTS
|
||||
|
||||
void TileItemDelegate::currentTab(int index)
|
||||
{
|
||||
if(index == 1)
|
||||
{
|
||||
nlinfo("switching delegate to 1 or 256");
|
||||
m_imageHint = 256;
|
||||
}
|
||||
else
|
||||
{
|
||||
nlinfo("switching delegate to 0,2,3 or 128");
|
||||
m_imageHint = 128;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,57 @@
|
|||
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||
// Copyright (C) 2010 Winch Gate Property Limited
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero 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 Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#ifndef TILE_ITEM_DELEGATE_H
|
||||
#define TILE_ITEM_DELEGATE_H
|
||||
|
||||
#include <QtGui/QWidget>
|
||||
#include <QPixmap>
|
||||
#include <QStyledItemDelegate>
|
||||
|
||||
#include "ui_tile_widget.h"
|
||||
|
||||
#include <nel/misc/types_nl.h>
|
||||
|
||||
class TileItemDelegate : public QStyledItemDelegate
|
||||
{
|
||||
public:
|
||||
|
||||
enum TZoomFactor
|
||||
{
|
||||
ZoomSmall = 0,
|
||||
ZoomNormal = 1,
|
||||
ZoomLarge = 2
|
||||
};
|
||||
|
||||
static const int PIXMAP_MARGIN = 5;
|
||||
|
||||
TileItemDelegate();
|
||||
virtual ~TileItemDelegate();
|
||||
|
||||
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
|
||||
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index ) const;
|
||||
|
||||
TZoomFactor getZoomFactor();
|
||||
void setZoomFactor(TZoomFactor zoomFactor);
|
||||
|
||||
public Q_SLOTS:
|
||||
void currentTab(int index);
|
||||
|
||||
private:
|
||||
TZoomFactor m_zoomFactor;
|
||||
int m_imageHint;
|
||||
};
|
||||
|
||||
#endif // TILE_ITEM_DELEGATE_H
|
|
@ -0,0 +1,230 @@
|
|||
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||
// Copyright (C) 2010 Winch Gate Property Limited
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero 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 Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include "tile_model.h"
|
||||
#include "tile_item.h"
|
||||
|
||||
#include <QStringList>
|
||||
|
||||
#include <nel/misc/debug.h>
|
||||
|
||||
// Initialize the static members
|
||||
TileModel::TTileZoomFactor TileModel::CurrentZoomFactor;
|
||||
|
||||
TileModel::TileModel(const QStringList &headers, QObject *parent) : QAbstractItemModel(parent)
|
||||
{
|
||||
QVector<QVariant> rootData;
|
||||
Q_FOREACH(QString header, headers)
|
||||
rootData << header;
|
||||
|
||||
rootItem = new Node(rootData);
|
||||
|
||||
TileModel::CurrentZoomFactor = TileModel::TileZoom100;
|
||||
m_indexDisplay = true;
|
||||
m_fileDisplay = true;
|
||||
}
|
||||
|
||||
TileModel::~TileModel()
|
||||
{
|
||||
delete rootItem;
|
||||
}
|
||||
|
||||
Node *TileModel::getItem(const QModelIndex &index) const
|
||||
{
|
||||
if(index.isValid())
|
||||
{
|
||||
Node *item = static_cast<Node*>(index.internalPointer());
|
||||
if(item) return item;
|
||||
}
|
||||
return rootItem;
|
||||
}
|
||||
|
||||
QModelIndex TileModel::index(int row, int column, const QModelIndex &parent) const
|
||||
{
|
||||
if(parent.isValid() && parent.column() != 0)
|
||||
return QModelIndex();
|
||||
|
||||
Node *parentItem = getItem(parent);
|
||||
|
||||
Node *childItem = parentItem->child(row);
|
||||
if(childItem)
|
||||
return createIndex(row, column, childItem);
|
||||
else
|
||||
return QModelIndex();
|
||||
}
|
||||
|
||||
QModelIndex TileModel::parent(const QModelIndex &index) const
|
||||
{
|
||||
if(!index.isValid())
|
||||
return QModelIndex();
|
||||
|
||||
Node *childItem = getItem(index);
|
||||
Node *parentItem = childItem->parent();
|
||||
|
||||
if(parentItem == rootItem)
|
||||
return QModelIndex();
|
||||
|
||||
return createIndex(parentItem->childNumber(), 0, parentItem);
|
||||
}
|
||||
|
||||
int TileModel::rowCount(const QModelIndex &parent) const
|
||||
{
|
||||
Node *parentItem = getItem(parent);
|
||||
return parentItem->childCount();
|
||||
}
|
||||
|
||||
int TileModel::columnCount(const QModelIndex &parent) const
|
||||
{
|
||||
Node *parentItem = getItem(parent);
|
||||
return parentItem->columnCount();
|
||||
}
|
||||
|
||||
QVariant TileModel::data(const QModelIndex &index, int role) const
|
||||
{
|
||||
if(!index.isValid())
|
||||
return QVariant();
|
||||
|
||||
Node *item = static_cast<Node*>(index.internalPointer());
|
||||
|
||||
// Translate the display role to the settings-specific role.
|
||||
|
||||
if(role == Qt::DisplayRole)
|
||||
{
|
||||
if(m_indexDisplay && m_fileDisplay)
|
||||
role = TileFilenameIndexRole;
|
||||
else if(m_fileDisplay)
|
||||
role = TileFilenameRole;
|
||||
else if(m_indexDisplay)
|
||||
role = TileIndexRole;
|
||||
}
|
||||
return item->data(index.column(), role);
|
||||
}
|
||||
|
||||
Qt::ItemFlags TileModel::flags(const QModelIndex &index) const
|
||||
{
|
||||
if(!index.isValid())
|
||||
return Qt::ItemIsEnabled;
|
||||
|
||||
return Qt::ItemIsEnabled|Qt::ItemIsSelectable;
|
||||
}
|
||||
|
||||
QVariant TileModel::headerData(int section, Qt::Orientation orientation, int role) const
|
||||
{
|
||||
if(orientation == Qt::Horizontal && role == Qt::DisplayRole)
|
||||
return rootItem->data(section,role);
|
||||
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
void TileModel::appendRow(const QList<Node*> &items)
|
||||
{
|
||||
rootItem->appendRow(items);
|
||||
}
|
||||
|
||||
|
||||
void TileModel::appendRow(Node *item)
|
||||
{
|
||||
rootItem->appendRow(item);
|
||||
}
|
||||
|
||||
TileSetNode *TileModel::createTileSetNode(QString tileSetName)
|
||||
{
|
||||
// Create the new tile set.
|
||||
TileSetNode *tileSet = new TileSetNode(tileSetName);
|
||||
|
||||
// child for 128x128 tiles
|
||||
TileTypeNode *tile128= new TileTypeNode(Tile128);
|
||||
tileSet->appendRow(tile128);
|
||||
|
||||
// child for 256x256 tiles
|
||||
TileTypeNode *tile256= new TileTypeNode(Tile256);
|
||||
tileSet->appendRow(tile256);
|
||||
|
||||
// child for transition tiles.
|
||||
TileTypeNode *tileTrans= new TileTypeNode(TileTransition);
|
||||
tileSet->appendRow(tileTrans);
|
||||
|
||||
// Add the default transition tiles.
|
||||
// TODO tie this to CTileSet::count from NeL
|
||||
for(int transPos=0; transPos<48; transPos++)
|
||||
{
|
||||
TileItemNode *transTile= new TileItemNode(transPos, TileDiffuse, QString("empty"));
|
||||
tileTrans->appendRow(transTile);
|
||||
}
|
||||
|
||||
// child for displacement tiles
|
||||
TileTypeNode *tileDisp= new TileTypeNode(TileDisplacement);
|
||||
tileSet->appendRow(tileDisp);
|
||||
|
||||
// Add the default displacement tiles.
|
||||
// TODO tie this to CTileSet::CountDisplace from NeL
|
||||
for(int dispPos=0; dispPos<16; dispPos++)
|
||||
{
|
||||
TileItemNode *dispTile= new TileItemNode(dispPos, TileDiffuse, QString("empty"));
|
||||
tileDisp->appendRow(dispTile);
|
||||
}
|
||||
|
||||
// Append them in the correct order to the tile set.
|
||||
this->appendRow(tileSet);
|
||||
|
||||
return tileSet;
|
||||
}
|
||||
|
||||
const char *TileModel::getTileTypeName(TileModel::TNodeTileType type)
|
||||
{
|
||||
switch(type)
|
||||
{
|
||||
case Tile128:
|
||||
return "128";
|
||||
case Tile256:
|
||||
return "256";
|
||||
case TileTransition:
|
||||
return "Transition";
|
||||
case TileDisplacement:
|
||||
return "Displacement";
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return "UNKNOWN";
|
||||
}
|
||||
|
||||
uint32 TileModel::getTileTypeSize(TileModel::TNodeTileType type)
|
||||
{
|
||||
switch(type)
|
||||
{
|
||||
case Tile128:
|
||||
return 128;
|
||||
case Tile256:
|
||||
return 256;
|
||||
case TileTransition:
|
||||
return 64;
|
||||
case TileDisplacement:
|
||||
return 32;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void TileModel::selectFilenameDisplay(bool selected)
|
||||
{
|
||||
m_fileDisplay = selected;
|
||||
}
|
||||
|
||||
void TileModel::selectIndexDisplay(bool selected)
|
||||
{
|
||||
m_indexDisplay = selected;
|
||||
}
|
|
@ -0,0 +1,106 @@
|
|||
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||
// Copyright (C) 2010 Winch Gate Property Limited
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero 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 Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#ifndef TILE_MODEL_H
|
||||
#define TILE_MODEL_H
|
||||
|
||||
#include "nel/misc/types_nl.h"
|
||||
|
||||
#include <QAbstractListModel>
|
||||
|
||||
class Node;
|
||||
class TileSetNode;
|
||||
|
||||
class TileModel : public QAbstractItemModel
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
enum TTileChannel
|
||||
{
|
||||
TileDiffuse = 0,
|
||||
TileAdditive = 1,
|
||||
TileAlpha = 2,
|
||||
};
|
||||
|
||||
enum TNodeTileType
|
||||
{
|
||||
Tile128 = 0,
|
||||
Tile256 = 1,
|
||||
TileTransition = 2,
|
||||
TileDisplacement = 3
|
||||
};
|
||||
|
||||
enum TTileItemRole
|
||||
{
|
||||
TilePixmapRole = Qt::UserRole+1,
|
||||
TileFilenameRole = Qt::UserRole+2,
|
||||
TileIndexRole = Qt::UserRole+3,
|
||||
TileFilenameIndexRole = Qt::UserRole+4
|
||||
};
|
||||
|
||||
enum TTileZoomFactor
|
||||
{
|
||||
TileZoom50 = 0,
|
||||
TileZoom100 = 1,
|
||||
TileZoom200 = 2
|
||||
};
|
||||
|
||||
static const int TILE_DISPLACE_BASE_SIZE = 32;
|
||||
static const int TILE_TRANSITION_BASE_SIZE = 64;
|
||||
static const int TILE_128_BASE_SIZE = 128;
|
||||
static const int TILE_256_BASE_SIZE = 256;
|
||||
|
||||
|
||||
TileModel(const QStringList &headers, QObject *parent);
|
||||
~TileModel();
|
||||
|
||||
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
|
||||
Qt::ItemFlags flags(const QModelIndex &index) const;
|
||||
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
|
||||
QModelIndex index(int row, int column, const QModelIndex &parent= QModelIndex()) const;
|
||||
QModelIndex parent(const QModelIndex &index) const;
|
||||
int rowCount(const QModelIndex &parent = QModelIndex()) const;
|
||||
int columnCount(const QModelIndex &parent = QModelIndex()) const;
|
||||
|
||||
// Tile Model specific functions
|
||||
void appendRow(const QList<Node*> &items);
|
||||
void appendRow(Node *item);
|
||||
|
||||
TileSetNode *createTileSetNode(QString tileSetName);
|
||||
|
||||
static const char *getTileTypeName(TNodeTileType type);
|
||||
static uint32 getTileTypeSize(TileModel::TNodeTileType type);
|
||||
|
||||
static TTileZoomFactor CurrentZoomFactor;
|
||||
|
||||
public Q_SLOTS:
|
||||
void selectFilenameDisplay(bool selected);
|
||||
void selectIndexDisplay(bool selected);
|
||||
|
||||
private:
|
||||
Node *getItem(const QModelIndex &index) const;
|
||||
|
||||
bool m_fileDisplay;
|
||||
bool m_indexDisplay;
|
||||
//TTileZoomFactor m_tileZoomFactor;
|
||||
|
||||
//QList<TileItem*> m_tiles;
|
||||
//int m_activeEditChannel;
|
||||
Node *rootItem;
|
||||
};
|
||||
|
||||
#endif // TILE_MODEL_H
|