Statically load the empty tile image so that we don't need to have over 9000 instances of it. Also display an error message if loading fails on startup.

--HG--
branch : gsoc2014-dfighter
hg/feature/cdb-packed
dfighter1985 10 years ago
parent 669c15eda9
commit 9bb62a3ada

@ -37,6 +37,8 @@
#include "land_edit_dialog.h" #include "land_edit_dialog.h"
#include <QTimer>
TileEditorMainWindow::TileEditorMainWindow(QWidget *parent) TileEditorMainWindow::TileEditorMainWindow(QWidget *parent)
: QMainWindow(parent), : QMainWindow(parent),
m_ui(new Ui::TileEditorMainWindow) m_ui(new Ui::TileEditorMainWindow)
@ -44,6 +46,11 @@ TileEditorMainWindow::TileEditorMainWindow(QWidget *parent)
m_ui->setupUi(this); m_ui->setupUi(this);
m_undoStack = new QUndoStack(this); m_undoStack = new QUndoStack(this);
if( !TileItemNode::loadEmptyPixmap() )
{
QTimer::singleShot( 0, this, SLOT( onEmptyImageLoadFailed() ) );
}
// Retrieve the menu manager // Retrieve the menu manager
Core::ICore *core = Core::ICore::instance(); Core::ICore *core = Core::ICore::instance();
Core::MenuManager *menuManager = core->menuManager(); Core::MenuManager *menuManager = core->menuManager();
@ -341,6 +348,13 @@ void TileEditorMainWindow::onRotate( int id )
m_tileModel->setAlphaRot( id ); m_tileModel->setAlphaRot( id );
} }
void TileEditorMainWindow::onEmptyImageLoadFailed()
{
QMessageBox::critical( this,
tr( "Empty image load failed" ),
tr( "Couldn't load the image for empty tiles :(" ) );
}
void TileEditorMainWindow::onActionAddTile(bool triggered) void TileEditorMainWindow::onActionAddTile(bool triggered)
{ {
onActionAddTile(m_ui->tileViewTabWidget->currentIndex()); onActionAddTile(m_ui->tileViewTabWidget->currentIndex());

@ -80,6 +80,8 @@ private Q_SLOTS:
void onZoomFactor(int level); void onZoomFactor(int level);
void onRotate(int id); void onRotate(int id);
void onEmptyImageLoadFailed();
private: private:
void onActionAddTile(int tabId); void onActionAddTile(int tabId);
void onActionDeleteTile(int tabId); void onActionDeleteTile(int tabId);

@ -271,6 +271,12 @@ public:
bool loadImage( TileConstants::TTileChannel channel, const QString &fn ) bool loadImage( TileConstants::TTileChannel channel, const QString &fn )
{ {
if( fn.isEmpty() )
{
pixmaps[ channel ] = TileItemNodePvt::emptyPm();
return true;
}
QPixmap temp; QPixmap temp;
bool b = temp.load( fn ); bool b = temp.load( fn );
@ -284,6 +290,17 @@ public:
return true; return true;
} }
static bool loadEmptyImage()
{
bool b = empty.load( ":/placeHolder/images/empty_image.png" );
if( !b )
{
empty = QPixmap();
}
return b;
}
void clearImage( TileConstants::TTileChannel channel ) void clearImage( TileConstants::TTileChannel channel )
{ {
pixmaps[ channel ] = QPixmap(); pixmaps[ channel ] = QPixmap();
@ -293,10 +310,15 @@ public:
return pixmaps[ channel ]; return pixmaps[ channel ];
} }
static QPixmap& emptyPm(){ return empty; }
private: private:
QPixmap pixmaps[ TileConstants::TileChannelCount ]; QPixmap pixmaps[ TileConstants::TileChannelCount ];
static QPixmap empty;
}; };
QPixmap TileItemNodePvt::empty = QPixmap();
TileConstants::TTileChannel TileItemNode::s_displayChannel = TileConstants::TileDiffuse; TileConstants::TTileChannel TileItemNode::s_displayChannel = TileConstants::TileDiffuse;
TileItemNode::TileItemNode( TileConstants::TNodeTileType type, int tileId, Node *parent ) TileItemNode::TileItemNode( TileConstants::TNodeTileType type, int tileId, Node *parent )
@ -321,14 +343,7 @@ TileItemNode::~TileItemNode()
bool TileItemNode::setTileFilename(TileConstants::TTileChannel channel, QString filename) bool TileItemNode::setTileFilename(TileConstants::TTileChannel channel, QString filename)
{ {
QString fn = filename; bool b = pvt->loadImage( channel, filename );
if( filename.isEmpty() || ( filename == "empty" ) )
{
fn = ":/placeHolder/images/empty_image.png";
}
bool b = pvt->loadImage( channel, fn );
if( !b ) if( !b )
return false; return false;
@ -346,6 +361,11 @@ QString TileItemNode::getTileFilename(TileConstants::TTileChannel channel)
return itr.value(); return itr.value();
} }
bool TileItemNode::loadEmptyPixmap()
{
return TileItemNodePvt::loadEmptyImage();
}
QVariant TileItemNode::data(int column, int role) const QVariant TileItemNode::data(int column, int role) const
{ {
QString tileFilename = m_tileFilename[ TileItemNode::s_displayChannel ]; QString tileFilename = m_tileFilename[ TileItemNode::s_displayChannel ];

@ -117,6 +117,7 @@ public:
static void setDisplayChannel( TileConstants::TTileChannel channel ){ s_displayChannel = channel; } static void setDisplayChannel( TileConstants::TTileChannel channel ){ s_displayChannel = channel; }
static TileConstants::TTileChannel displayChannel(){ return s_displayChannel; } static TileConstants::TTileChannel displayChannel(){ return s_displayChannel; }
static bool loadEmptyPixmap();
QVariant pixmap( TileConstants::TTileChannel channel ) const; QVariant pixmap( TileConstants::TTileChannel channel ) const;

Loading…
Cancel
Save