diff --git a/code/studio/src/plugins/tile_editor/tile_editor_main_window.cpp b/code/studio/src/plugins/tile_editor/tile_editor_main_window.cpp index 11f5d79b0..2f3127c8e 100644 --- a/code/studio/src/plugins/tile_editor/tile_editor_main_window.cpp +++ b/code/studio/src/plugins/tile_editor/tile_editor_main_window.cpp @@ -79,13 +79,10 @@ TileEditorMainWindow::TileEditorMainWindow(QWidget *parent) 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->setModel(m_model); //m_ui->tileSetLV->setRootIndex(m_model->index(0,0)); 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->landRemoveTB, SIGNAL(clicked()), this, SLOT(onLandRemove())); 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(), SIGNAL(currentChanged(const QModelIndex &, const QModelIndex &)), @@ -104,7 +102,6 @@ TileEditorMainWindow::TileEditorMainWindow(QWidget *parent) // 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); @@ -112,7 +109,6 @@ TileEditorMainWindow::TileEditorMainWindow(QWidget *parent) // 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); @@ -120,13 +116,11 @@ TileEditorMainWindow::TileEditorMainWindow(QWidget *parent) // 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); @@ -137,9 +131,6 @@ TileEditorMainWindow::TileEditorMainWindow(QWidget *parent) 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. @@ -164,6 +155,9 @@ TileEditorMainWindow::~TileEditorMainWindow() delete m_zoomMenu; delete m_zoomActionGroup; delete m_zoomSignalMapper; + + qDeleteAll( m_tileModels ); + m_tileModels.clear(); } void TileEditorMainWindow::onZoomFactor(int level) @@ -232,6 +226,14 @@ void TileEditorMainWindow::onActionDeleteImage(bool triggered) 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; QString text = QInputDialog::getText(this, tr("Add Tile Set"), tr("Enter Tile Set name:"), QLineEdit::Normal, "", &ok); if (ok && !text.isEmpty()) @@ -260,6 +262,14 @@ void TileEditorMainWindow::onTileSetDelete() if( !idx.isValid() ) 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(m_ui->tileSetLV->model()); bool ok = model->removeRow( idx.row() ); } @@ -359,6 +369,13 @@ void TileEditorMainWindow::onLandAdd() } 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() @@ -367,6 +384,21 @@ void TileEditorMainWindow::onLandRemove() if( item == NULL ) 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; } @@ -391,6 +423,28 @@ void TileEditorMainWindow::onLandEdit() 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) { 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); } +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) { TileModel *model = static_cast(m_ui->tileSetLV->model()); diff --git a/code/studio/src/plugins/tile_editor/tile_editor_main_window.h b/code/studio/src/plugins/tile_editor/tile_editor_main_window.h index 31e65df27..58f546ea9 100644 --- a/code/studio/src/plugins/tile_editor/tile_editor_main_window.h +++ b/code/studio/src/plugins/tile_editor/tile_editor_main_window.h @@ -57,6 +57,7 @@ public Q_SLOTS: void onLandAdd(); void onLandRemove(); void onLandEdit(); + void onLandRowChanged( int row ); void changeActiveTileSet(const QModelIndex &newIndex, const QModelIndex &oldIndex); void onZoomFactor(int level); @@ -64,6 +65,8 @@ public Q_SLOTS: private: void onActionAddTile(int tabId); + TileModel* createTileModel(); + Ui::TileEditorMainWindow *m_ui; QUndoStack *m_undoStack; QMenu *m_rotationMenu; @@ -75,8 +78,9 @@ private: QActionGroup *m_zoomActionGroup; QSignalMapper *m_zoomSignalMapper; - TileModel *m_model; TileItemDelegate *m_tileItemDelegate; + + QList< TileModel* > m_tileModels; }; #endif // TILE_EDITOR_MAIN_WINDOW_H diff --git a/code/studio/src/plugins/tile_editor/tile_model.h b/code/studio/src/plugins/tile_editor/tile_model.h index 239c423cb..e2be8da57 100644 --- a/code/studio/src/plugins/tile_editor/tile_model.h +++ b/code/studio/src/plugins/tile_editor/tile_model.h @@ -64,8 +64,7 @@ public: static const int TILE_128_BASE_SIZE = 128; static const int TILE_256_BASE_SIZE = 256; - - TileModel(const QStringList &headers, QObject *parent); + TileModel(const QStringList &headers, QObject *parent = NULL); ~TileModel(); QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;