Each land has it's own TilesetModel now. When changing the land the model also changes.

This commit is contained in:
dfighter1985 2014-07-24 18:31:07 +02:00
parent c1d6ada9c6
commit 25dba4695d
3 changed files with 83 additions and 14 deletions

View file

@ -79,13 +79,10 @@ TileEditorMainWindow::TileEditorMainWindow(QWidget *parent)
core->menuManager()->menuBar()->addMenu(m_tileEditorMenu); core->menuManager()->menuBar()->addMenu(m_tileEditorMenu);
// Set up the list views. // Set up the list views.
QStringList headers;
headers << "Tile Set";
m_model = new TileModel(headers, this);
m_tileItemDelegate = new TileItemDelegate(); m_tileItemDelegate = new TileItemDelegate();
// Set up the tile set list view. // Set up the tile set list view.
m_ui->tileSetLV->setModel(m_model); //m_ui->tileSetLV->setModel(m_model);
//m_ui->tileSetLV->setRootIndex(m_model->index(0,0)); //m_ui->tileSetLV->setRootIndex(m_model->index(0,0));
connect(m_ui->tileSetAddTB, SIGNAL(clicked()), this, SLOT(onTileSetAdd())); connect(m_ui->tileSetAddTB, SIGNAL(clicked()), this, SLOT(onTileSetAdd()));
@ -97,6 +94,7 @@ TileEditorMainWindow::TileEditorMainWindow(QWidget *parent)
connect(m_ui->landAddTB, SIGNAL(clicked()), this, SLOT(onLandAdd())); connect(m_ui->landAddTB, SIGNAL(clicked()), this, SLOT(onLandAdd()));
connect(m_ui->landRemoveTB, SIGNAL(clicked()), this, SLOT(onLandRemove())); connect(m_ui->landRemoveTB, SIGNAL(clicked()), this, SLOT(onLandRemove()));
connect(m_ui->landEditTB, SIGNAL(clicked()), this, SLOT(onLandEdit())); connect(m_ui->landEditTB, SIGNAL(clicked()), this, SLOT(onLandEdit()));
connect(m_ui->landLW, SIGNAL(currentRowChanged(int)), this, SLOT(onLandRowChanged(int)));
connect(m_ui->tileSetLV->selectionModel(), connect(m_ui->tileSetLV->selectionModel(),
SIGNAL(currentChanged(const QModelIndex &, const QModelIndex &)), SIGNAL(currentChanged(const QModelIndex &, const QModelIndex &)),
@ -104,7 +102,6 @@ TileEditorMainWindow::TileEditorMainWindow(QWidget *parent)
// 128x128 List View // 128x128 List View
//m_ui->listView128->setItemDelegate(m_tileItemDelegate); //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->actionAddTile);
m_ui->listView128->addAction(m_ui->actionDeleteTile); m_ui->listView128->addAction(m_ui->actionDeleteTile);
m_ui->listView128->addAction(m_ui->actionReplaceImage); m_ui->listView128->addAction(m_ui->actionReplaceImage);
@ -112,7 +109,6 @@ TileEditorMainWindow::TileEditorMainWindow(QWidget *parent)
// 256x256 List View // 256x256 List View
//m_ui->listView256->setItemDelegate(m_tileItemDelegate); //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->actionAddTile);
m_ui->listView256->addAction(m_ui->actionDeleteTile); m_ui->listView256->addAction(m_ui->actionDeleteTile);
m_ui->listView256->addAction(m_ui->actionReplaceImage); m_ui->listView256->addAction(m_ui->actionReplaceImage);
@ -120,13 +116,11 @@ TileEditorMainWindow::TileEditorMainWindow(QWidget *parent)
// Transition List View // Transition List View
//m_ui->listViewTransition->setItemDelegate(m_tileItemDelegate); //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->actionReplaceImage);
m_ui->listViewTransition->addAction(m_ui->actionDeleteImage); m_ui->listViewTransition->addAction(m_ui->actionDeleteImage);
// Displacement List View // Displacement List View
//m_ui->listViewDisplacement->setItemDelegate(m_tileItemDelegate); //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->actionReplaceImage);
m_ui->listViewDisplacement->addAction(m_ui->actionDeleteImage); m_ui->listViewDisplacement->addAction(m_ui->actionDeleteImage);
@ -137,9 +131,6 @@ TileEditorMainWindow::TileEditorMainWindow(QWidget *parent)
connect(m_ui->actionReplaceImage, SIGNAL(triggered(bool)), this, SLOT(onActionReplaceImage(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->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(m_ui->tileViewTabWidget, SIGNAL(currentChanged(int)), m_tileItemDelegate, SLOT(currentTab(int)));
// Connect the zoom buttons. // Connect the zoom buttons.
@ -164,6 +155,9 @@ TileEditorMainWindow::~TileEditorMainWindow()
delete m_zoomMenu; delete m_zoomMenu;
delete m_zoomActionGroup; delete m_zoomActionGroup;
delete m_zoomSignalMapper; delete m_zoomSignalMapper;
qDeleteAll( m_tileModels );
m_tileModels.clear();
} }
void TileEditorMainWindow::onZoomFactor(int level) void TileEditorMainWindow::onZoomFactor(int level)
@ -232,6 +226,14 @@ void TileEditorMainWindow::onActionDeleteImage(bool triggered)
void TileEditorMainWindow::onTileSetAdd() void TileEditorMainWindow::onTileSetAdd()
{ {
if( m_ui->landLW->count() == 0 )
{
QMessageBox::information( this,
tr( "Error adding tile set" ),
tr( "You need to add a land before adding a tileset!" ) );
return;
}
bool ok; bool ok;
QString text = QInputDialog::getText(this, tr("Add Tile Set"), tr("Enter Tile Set name:"), QLineEdit::Normal, "", &ok); QString text = QInputDialog::getText(this, tr("Add Tile Set"), tr("Enter Tile Set name:"), QLineEdit::Normal, "", &ok);
if (ok && !text.isEmpty()) if (ok && !text.isEmpty())
@ -260,6 +262,14 @@ void TileEditorMainWindow::onTileSetDelete()
if( !idx.isValid() ) if( !idx.isValid() )
return; return;
int reply = QMessageBox::question( this,
tr( "Removing tile set" ),
tr( "Are you sure you want to remove this tile set?" ),
QMessageBox::Yes | QMessageBox::Cancel );
if( reply != QMessageBox::Yes )
return;
TileModel *model = static_cast<TileModel*>(m_ui->tileSetLV->model()); TileModel *model = static_cast<TileModel*>(m_ui->tileSetLV->model());
bool ok = model->removeRow( idx.row() ); bool ok = model->removeRow( idx.row() );
} }
@ -359,6 +369,13 @@ void TileEditorMainWindow::onLandAdd()
} }
m_ui->landLW->addItem( name ); m_ui->landLW->addItem( name );
TileModel *m = createTileModel();
m_tileModels.push_back( m );
if( m_tileModels.count() == 1 )
m_ui->landLW->setCurrentRow( 0 );
} }
void TileEditorMainWindow::onLandRemove() void TileEditorMainWindow::onLandRemove()
@ -367,6 +384,21 @@ void TileEditorMainWindow::onLandRemove()
if( item == NULL ) if( item == NULL )
return; return;
int idx = m_ui->landLW->currentRow();
int reply = QMessageBox::question( this,
tr( "Removing land" ),
tr( "Are you sure you want to remove this land?" ),
QMessageBox::Yes | QMessageBox::Cancel );
if( reply != QMessageBox::Yes )
return;
QList< TileModel* >::iterator itr = m_tileModels.begin() + idx;
delete m_tileModels[ idx ];
m_tileModels[ idx ] = NULL;
m_tileModels.erase( itr );
delete item; delete item;
} }
@ -391,6 +423,28 @@ void TileEditorMainWindow::onLandEdit()
item->setText( newName ); item->setText( newName );
} }
void TileEditorMainWindow::onLandRowChanged( int row )
{
if( row == -1 )
{
m_ui->tileSetLV->setModel( NULL );
m_ui->listView128->setModel( NULL );
m_ui->listView256->setModel( NULL );
m_ui->listViewTransition->setModel( NULL );
m_ui->listViewDisplacement->setModel( NULL );
}
else
{
m_ui->tileSetLV->setModel( m_tileModels[ row ] );
m_ui->listView128->setModel( m_tileModels[ row ] );
m_ui->listView256->setModel( m_tileModels[ row ] );
m_ui->listViewTransition->setModel( m_tileModels[ row ] );
m_ui->listViewDisplacement->setModel( m_tileModels[ row ] );
}
m_ui->tileSetLV->reset();
}
void TileEditorMainWindow::onActionAddTile(int tabId) void TileEditorMainWindow::onActionAddTile(int tabId)
{ {
QFileDialog::Options options; QFileDialog::Options options;
@ -398,6 +452,18 @@ void TileEditorMainWindow::onActionAddTile(int tabId)
QStringList fileNames = QFileDialog::getOpenFileNames(this, "Choose Tile Texture", "." , "Images (*.png);;All Files (*.*)", &selectedFilter, options); QStringList fileNames = QFileDialog::getOpenFileNames(this, "Choose Tile Texture", "." , "Images (*.png);;All Files (*.*)", &selectedFilter, options);
} }
TileModel* TileEditorMainWindow::createTileModel()
{
QStringList headers;
headers << "Tile Set";
TileModel *m = new TileModel( headers );
connect( m_ui->actionTileDisplayFilename, SIGNAL( toggled( bool )), m, SLOT( selectFilenameDisplay( bool ) ) );
connect( m_ui->actionTileDisplayIndex, SIGNAL( toggled( bool )), m, SLOT( selectIndexDisplay( bool ) ) );
return m;
}
void TileEditorMainWindow::changeActiveTileSet(const QModelIndex &newIndex, const QModelIndex &oldIndex) void TileEditorMainWindow::changeActiveTileSet(const QModelIndex &newIndex, const QModelIndex &oldIndex)
{ {
TileModel *model = static_cast<TileModel*>(m_ui->tileSetLV->model()); TileModel *model = static_cast<TileModel*>(m_ui->tileSetLV->model());

View file

@ -57,6 +57,7 @@ public Q_SLOTS:
void onLandAdd(); void onLandAdd();
void onLandRemove(); void onLandRemove();
void onLandEdit(); void onLandEdit();
void onLandRowChanged( int row );
void changeActiveTileSet(const QModelIndex &newIndex, const QModelIndex &oldIndex); void changeActiveTileSet(const QModelIndex &newIndex, const QModelIndex &oldIndex);
void onZoomFactor(int level); void onZoomFactor(int level);
@ -64,6 +65,8 @@ public Q_SLOTS:
private: private:
void onActionAddTile(int tabId); void onActionAddTile(int tabId);
TileModel* createTileModel();
Ui::TileEditorMainWindow *m_ui; Ui::TileEditorMainWindow *m_ui;
QUndoStack *m_undoStack; QUndoStack *m_undoStack;
QMenu *m_rotationMenu; QMenu *m_rotationMenu;
@ -75,8 +78,9 @@ private:
QActionGroup *m_zoomActionGroup; QActionGroup *m_zoomActionGroup;
QSignalMapper *m_zoomSignalMapper; QSignalMapper *m_zoomSignalMapper;
TileModel *m_model;
TileItemDelegate *m_tileItemDelegate; TileItemDelegate *m_tileItemDelegate;
QList< TileModel* > m_tileModels;
}; };
#endif // TILE_EDITOR_MAIN_WINDOW_H #endif // TILE_EDITOR_MAIN_WINDOW_H

View file

@ -64,8 +64,7 @@ public:
static const int TILE_128_BASE_SIZE = 128; static const int TILE_128_BASE_SIZE = 128;
static const int TILE_256_BASE_SIZE = 256; static const int TILE_256_BASE_SIZE = 256;
TileModel(const QStringList &headers, QObject *parent = NULL);
TileModel(const QStringList &headers, QObject *parent);
~TileModel(); ~TileModel();
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;