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.

This commit is contained in:
dfighter1985 2014-08-06 13:25:50 +02:00
parent 06dd003836
commit 6286313877
4 changed files with 45 additions and 8 deletions

View file

@ -37,6 +37,8 @@
#include "land_edit_dialog.h"
#include <QTimer>
TileEditorMainWindow::TileEditorMainWindow(QWidget *parent)
: QMainWindow(parent),
m_ui(new Ui::TileEditorMainWindow)
@ -44,6 +46,11 @@ TileEditorMainWindow::TileEditorMainWindow(QWidget *parent)
m_ui->setupUi(this);
m_undoStack = new QUndoStack(this);
if( !TileItemNode::loadEmptyPixmap() )
{
QTimer::singleShot( 0, this, SLOT( onEmptyImageLoadFailed() ) );
}
// Retrieve the menu manager
Core::ICore *core = Core::ICore::instance();
Core::MenuManager *menuManager = core->menuManager();
@ -341,6 +348,13 @@ void TileEditorMainWindow::onRotate( int 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)
{
onActionAddTile(m_ui->tileViewTabWidget->currentIndex());

View file

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

View file

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

View file

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