bool TextureDefinitionList::insertRows(int row, int count, const QModelIndex & /*parent*/) { if(level && count > 0) { if(row >= 0 && row <= level->textureDefinitions.getNumTextureDefinitions()) { TextureDefinition temp; temp.setX(0); temp.setY(0); temp.setW(16); temp.setH(16); temp.setTexture(0); temp.setName(""); TextureDefinition* old = level->textureDefinitions.getTextureDefinition(row); if(old) temp.setTexture(old->getTexture()); emit beginInsertRows(index(0,0),row,row+count-1); level->textureDefinitions.insertTextureDefinitions(row,count,temp); emit endInsertRows(); return true; } } return false; };
bool TextureDefinitionList::setData(const QModelIndex & idx, const QVariant & value, int role) { if(role == Qt::EditRole) { if(level && idx.row() >= 0 && idx.row() < level->textureDefinitions.getNumTextureDefinitions()) { TextureDefinition temp; if(level->textureDefinitions.getTextureDefinition(idx.row(),&temp)) { if(enforceValidData) { QMessageBox msgbox; msgbox.setIcon(QMessageBox::Warning); int ret; switch(idx.column()) { case 0: ret = level->textureDefinitions.findTextureDefByName(value.toString().toLocal8Bit().data()); if(ret != -1 && ret != idx.row()) { msgbox.setText(tr("<b>Texture name already used by another entry!</b>")); msgbox.setInformativeText(tr("Please enter a unique texture name. Name was taken by entry: ")+QString::number(ret)); msgbox.exec(); return false; } break; case 1: if(value.toInt() < 0 || value.toInt() >= level->textures.getNumTextures()) { msgbox.setText(tr("<b>Texture idx is not valid!</b>")); msgbox.setInformativeText(tr("Index must be between 0 and ")+QString::number(level->textures.getNumTextures())+"."); msgbox.exec(); return false; } break; } } switch(idx.column()) { case 0: temp.setName(value.toString().toLocal8Bit().data()); break; case 1: temp.texture = value.toInt(); break; case 2: temp.x = value.toInt(); break; case 3: temp.y = value.toInt(); break; case 4: temp.w = value.toInt(); break; case 5: temp.h = value.toInt(); break; } if(enforceValidData) { if(temp.getX()+temp.getW() > 255) temp.setW(255-temp.getX()); if(temp.getY()+temp.getH() > 255) temp.setH(255-temp.getY()); } level->textureDefinitions.setTextureDefinition(idx.row(),temp); int position = idx.row(); if(resortOnChange) { position = level->textureDefinitions.getSortedPosition(idx.row()); if(position != idx.row()) { emit beginMoveRows(idx,idx.row(),idx.row(),idx,position); level->textureDefinitions.resortTextureDefinition(idx.row()); emit endMoveRows(); } } emit dataChanged(index(position,idx.column()),index(position,idx.column())); return true; } } } return false; };