void MainWindow::on_actionNewNPC_config_triggered() { //Check if data configs are valid if( configs.check() ) { WriteToLog(QtCriticalMsg, QString("Error! *.INI configs not loaded")); QMessageBox::warning(this, tr("Configuration is loaded with errors"), tr("Cannot create NPC config file:\nConfiguration package loaded with errors.").arg(ConfStatus::configPath)); //Show configuration status window on_actionCurConfig_triggered(); return; } //NpcDialog * npcList = new NpcDialog(&configs); ItemSelectDialog * npcList = new ItemSelectDialog(&configs, ItemSelectDialog::TAB_NPC); npcList->removeEmptyEntry(ItemSelectDialog::TAB_NPC); npcList->setWindowFlags (Qt::Window | Qt::WindowTitleHint | Qt::WindowCloseButtonHint); npcList->setGeometry(QStyle::alignedRect(Qt::LeftToRight, Qt::AlignCenter, npcList->size(), qApp->desktop()->availableGeometry())); npcList->setWindowTitle(tr("Create new NPC.txt configuration file")); if(npcList->exec()==QDialog::Accepted) { NpcEdit *child = createNPCChild(); child->newFile( npcList->npcID ); child->show(); } delete npcList; updateMenus(true); }
void MainWindow::on_actionNewNPC_config_triggered() { //NpcDialog * npcList = new NpcDialog(&configs); ItemSelectDialog * npcList = new ItemSelectDialog(&configs, ItemSelectDialog::TAB_NPC); npcList->removeEmptyEntry(ItemSelectDialog::TAB_NPC); npcList->setWindowFlags (Qt::Window | Qt::WindowTitleHint | Qt::WindowCloseButtonHint); npcList->setGeometry(QStyle::alignedRect(Qt::LeftToRight, Qt::AlignCenter, npcList->size(), qApp->desktop()->availableGeometry())); npcList->setWindowTitle(tr("Create new NPC.txt configuration file")); if(npcList->exec()==QDialog::Accepted) { npcedit *child = createNPCChild(); child->newFile( npcList->npcID ); child->show(); } delete npcList; }
void MainWindow::OpenFile(QString FilePath, bool addToRecentList) { if(m_isFileReloading) return; m_isFileReloading = true; BoolReseter rst(&m_isFileReloading); Q_UNUSED(rst); if(!m_isAppInited) return; qApp->setActiveWindow(this); //Check if data configs are valid if( configs.check() ) { LogCritical(QString("Error! *.INI configs not loaded")); QMessageBox::warning(this, tr("Configuration is loaded with errors"), tr("Cannot open file:\n" "Configuration package loaded with errors.") .arg(ConfStatus::configPath)); //Show configuration status window on_actionCurConfig_triggered(); return; } QMdiSubWindow *newSubWin = NULL; QMdiSubWindow *existing = findOpenedFileWin(FilePath); if (existing) { ui->centralWidget->setActiveSubWindow(existing); return; } QFile file(FilePath); if (!file.open(QIODevice::ReadOnly)) { QMessageBox::critical(this, tr("File open error"), tr("Can't open the file: %1").arg(file.errorString()), QMessageBox::Ok); return; } QFileInfo in_1(FilePath); GlobalSettings::openPath = in_1.absoluteDir().absolutePath(); if((in_1.suffix().toLower() == "lvl")||(in_1.suffix().toLower() == "lvlx")) { LevelData FileData; LogDebug("> parsing level file format"); if( !FileFormats::OpenLevelFile(FilePath, FileData) ) { formatErrorMsgBox(FilePath, FileData.meta.ERROR_info, FileData.meta.ERROR_linenum, FileData.meta.ERROR_linedata); return; } LogDebug("File was read!"); FileData.meta.filename = util::getBaseFilename(in_1.fileName()); FileData.meta.path = in_1.absoluteDir().absolutePath(); FileData.playmusic = GlobalSettings::autoPlayMusic; file.close(); LogDebug("Creating of sub-window"); LevelEdit *child = createLvlChild(&newSubWin); if ( child->loadFile(FilePath, FileData, configs, GlobalSettings::LvlOpts) ) { child->show(); updateMenus(newSubWin, true); child->updateGeometry(); child->ResetPosition(); dock_LvlItemBox->setLvlItemBoxes(false, false); statusBar()->showMessage(tr("Level file loaded"), 2000); SetCurrentLevelSection(0); dock_LvlWarpProps->init(); dock_LvlLayers->setLayersBox(); if(GlobalSettings::autoPlayMusic) ui->actionPlayMusic->setChecked(true); on_actionPlayMusic_triggered(ui->actionPlayMusic->isChecked()); } else { LogDebug(">>File loading aborted"); //child->show(); child->LvlData.meta.modified = false; newSubWin->close(); LogDebug(">>Windows closed"); } } else if((in_1.suffix().toLower() == "wld")||(in_1.suffix().toLower() == "wldx")) { WorldData FileData; if( !FileFormats::OpenWorldFile( FilePath, FileData ) ) { formatErrorMsgBox(FilePath, FileData.meta.ERROR_info, FileData.meta.ERROR_linenum, FileData.meta.ERROR_linedata); return; } file.close(); WorldEdit *child = createWldChild(&newSubWin); if ( child->loadFile(FilePath, FileData, configs, GlobalSettings::LvlOpts) ) { child->show(); updateMenus(newSubWin, true); child->updateGeometry(); child->ResetPosition(); dock_WldItemBox->setWldItemBoxes(false, false); dock_WldSettingsBox->setCurrentWorldSettings(); if(FileData.HubStyledWorld) { dock_WldSettingsBox->setVisible(true); dock_WldSettingsBox->raise(); } statusBar()->showMessage(tr("World map file loaded"), 2000); } else { LogDebug(">>File loading aborted"); child->close(); newSubWin->close(); LogDebug(">>Windows closed"); } } else if(in_1.suffix().toLower() == "txt") { NPCConfigFile FileData; if( !FileFormats::ReadNpcTXTFileF(FilePath, FileData) ) { QMessageBox::critical(this, QObject::tr("File open error"), tr("Can't read the file"), QMessageBox::Ok); return; } if( !FileData.unknownLines.isEmpty() ) { QMessageBox::warning(this, QObject::tr("Unknown values are presented"), QObject::tr("Your file have an unknown values which will be removed\n" " when you will save file") + QString("\n====================================\n" "%1").arg(FileData.unknownLines), QMessageBox::Ok); } NpcEdit *child = createNPCChild(&newSubWin); if (child->loadFile(FilePath, FileData)) { statusBar()->showMessage(tr("NPC Config loaded"), 2000); child->show(); updateMenus(newSubWin, true); } else { child->close(); newSubWin->close(); } } else if(in_1.suffix().toLower() == "sav") { GamesaveData FileData; QString statistics; if(!FileFormats::ReadSMBX64SavFileF( FilePath, FileData)) { formatErrorMsgBox( FilePath, FileData.meta.ERROR_info, FileData.meta.ERROR_linenum, FileData.meta.ERROR_linedata ); return; } statistics+= QString("SMBX Game Save file version %1\n\n").arg(FileData.meta.RecentFormatVersion); if(FileData.gameCompleted) statistics+= " ====This game was completed====\n\n"; statistics+= QString("Lives: %1, Coins:%2, ").arg(FileData.lives).arg(FileData.coins); statistics+= QString("Total stars: %1, Gotten stars: %2\n") .arg(FileData.totalStars) .arg(FileData.gottenStars.size()); statistics+= QString("Position X=%1, Y=%2\n") .arg(FileData.worldPosX) .arg(FileData.worldPosY); if(FileData.musicID>0) { long item=configs.getMusWldI(FileData.musicID); if(item>=0) { statistics+= QString("Current music: %1\n\n").arg(configs.main_music_wld[item].name); } } statistics += "\n===========Players:============\n"; for(int i=0; i<FileData.characterStates.size();i++) { if(i<configs.main_characters.size()) statistics += QString("%1:\n").arg(configs.main_characters[i].name); else statistics += QString("<unknown character>:\n"); statistics += QString("Health: %1, ").arg(FileData.characterStates[i].health); statistics += QString("Power-UP: %1, ").arg(FileData.characterStates[i].state); switch(FileData.characterStates[i].mountType) { case 0: break; case 1: statistics += QString("Mounted vehicle: Shoe - "); switch(FileData.characterStates[i].mountID) { case 1: statistics += QString("Kuribo's (green)");break; case 2: statistics += QString("Podoboo's (red)");break; case 3: statistics += QString("Lakitu's (blue)");break; default: statistics += QString("of God Power :D");break; } break; case 3: statistics += QString("Mounted vehicle: Yoshi");break; default: statistics += QString("Mounted vehicle: <unknown>");break; } if( (FileData.characterStates[i].itemID>0) && configs.main_npc.contains(FileData.characterStates[i].itemID) ) { statistics += QString("%2Has item: %1") .arg(configs.main_npc[FileData.characterStates[i].itemID].setup.name) .arg(FileData.characterStates[i].mountType > 0 ? ", ":""); } if(i<FileData.characterStates.size()-1) statistics += "\n----------------------------\n"; } statistics += "\n=========================\n"; if( !FileData.meta.ReadFileValid ) return; QMessageBox::information(this, tr("Game save statistics"), statistics, QMessageBox::Ok); } else { QMessageBox::warning(this, tr("Bad file"), tr("This file have unknown extension"), QMessageBox::Ok); return; } // Add to recent fileList if(addToRecentList){ AddToRecentFiles(FilePath); SyncRecentFiles(); } }
void MainWindow::OpenFile(QString FilePath, bool addToRecentList) { if(_is_reloading) return; _is_reloading=true; BoolReseter rst(&_is_reloading); Q_UNUSED(rst); if(!continueLoad) return; qApp->setActiveWindow(this); //Check if data configs are valid if( configs.check() ) { WriteToLog(QtCriticalMsg, QString("Error! *.INI configs not loaded")); QMessageBox::warning(this, tr("Configuration is loaded with errors"), tr("Cannot open file:\nConfiguration package loaded with errors.").arg(ConfStatus::configPath)); //Show configuration status window on_actionCurConfig_triggered(); return; } QMdiSubWindow *existing = findOpenedFileWin(FilePath); if (existing) { ui->centralWidget->setActiveSubWindow(existing); return; } QFile file(FilePath); if (!file.open(QIODevice::ReadOnly)) { QMessageBox::critical(this, tr("File open error"), tr("Can't open the file."), QMessageBox::Ok); return; } QFileInfo in_1(FilePath); GlobalSettings::openPath = in_1.absoluteDir().absolutePath(); if((in_1.suffix().toLower() == "lvl")||(in_1.suffix().toLower() == "lvlx")) { LevelData FileData; WriteToLog(QtDebugMsg, "> parsing level file format"); FileData = FileFormats::OpenLevelFile(FilePath); if( !FileData.ReadFileValid ) return; WriteToLog(QtDebugMsg, "File was read!"); FileData.filename = in_1.baseName(); FileData.path = in_1.absoluteDir().absolutePath(); FileData.playmusic = GlobalSettings::autoPlayMusic; file.close(); WriteToLog(QtDebugMsg, "> Opem meta-file"); file.setFileName(FilePath+".meta"); if(QFileInfo(FilePath+".meta").exists()) { WriteToLog(QtDebugMsg, "> meta-file found, open them!"); if (file.open(QIODevice::ReadOnly)) { QString metaRaw; QTextStream meta(&file); meta.setCodec("UTF-8"); metaRaw = meta.readAll(); if(FileData.metaData.script != NULL) { delete FileData.metaData.script; FileData.metaData.script = NULL; } FileData.metaData = FileFormats::ReadNonSMBX64MetaData(metaRaw, FilePath+".meta"); WriteToLog(QtDebugMsg, "Meta-File was read!"); } else { QMessageBox::critical(this, tr("File open error"), tr("Can't open the file."), QMessageBox::Ok); } } WriteToLog(QtDebugMsg, "Creating of sub-window"); LevelEdit *child = createLvlChild(); if ( (bool)(child->loadFile(FilePath, FileData, configs, GlobalSettings::LvlOpts)) ) { child->show(); child->updateGeometry(); child->ResetPosition(); statusBar()->showMessage(tr("Level file loaded"), 2000); updateMenus(true); SetCurrentLevelSection(0); dock_LvlWarpProps->init(); dock_LvlLayers->setLayersBox(); if(GlobalSettings::autoPlayMusic) ui->actionPlayMusic->setChecked(true); on_actionPlayMusic_triggered(ui->actionPlayMusic->isChecked()); } else { WriteToLog(QtDebugMsg, ">>File loading aborted"); child->show(); if(activeChildWindow()==1) activeLvlEditWin()->LvlData.modified = false; ui->centralWidget->activeSubWindow()->close(); WriteToLog(QtDebugMsg, ">>Windows closed"); } } else if((in_1.suffix().toLower() == "wld")||(in_1.suffix().toLower() == "wldx")) { WorldData FileData; FileData= FileFormats::OpenWorldFile(FilePath); if( !FileData.ReadFileValid ) return; file.close(); file.setFileName(FilePath+".meta"); if(QFileInfo(FilePath+".meta").exists()) { if (file.open(QIODevice::ReadOnly)) { QString metaRaw; QTextStream meta(&file); meta.setCodec("UTF-8"); metaRaw = meta.readAll(); FileData.metaData = FileFormats::ReadNonSMBX64MetaData(metaRaw, FilePath+".meta"); } else { QMessageBox::critical(this, tr("File open error"), tr("Can't open the file."), QMessageBox::Ok); } } WorldEdit *child = createWldChild(); if ( (bool)(child->loadFile(FilePath, FileData, configs, GlobalSettings::LvlOpts)) ) { child->show(); child->updateGeometry(); child->ResetPosition(); updateMenus(true); dock_WldSettingsBox->setCurrentWorldSettings(); if(FileData.HubStyledWorld) { dock_WldSettingsBox->setVisible(true); dock_WldSettingsBox->raise(); } statusBar()->showMessage(tr("World map file loaded"), 2000); } else { child->close(); } //QMessageBox::information(this, tr("Dummy"), //tr("Sorry, the World Maps support is not inplemented in this version."), //QMessageBox::Ok); } else if(in_1.suffix().toLower() == "txt") { NPCConfigFile FileData = FileFormats::ReadNpcTXTFile(file); if( !FileData.ReadFileValid ) return; NpcEdit *child = createNPCChild(); if (child->loadFile(FilePath, FileData)) { statusBar()->showMessage(tr("NPC Config loaded"), 2000); child->show(); updateMenus(true); } else { child->close(); } } else if(in_1.suffix().toLower() == "sav") { GamesaveData FileData; QTextStream in(&file); //Read File in.setAutoDetectUnicode(true); in.setLocale(QLocale::system()); in.setCodec(QTextCodec::codecForLocale()); QString statistics; FileData = FileFormats::ReadSMBX64SavFile( in.readAll(), file.fileName() ); statistics+= QString("SMBX Game Save file version %1\n\n").arg(FileData.version); if(FileData.gameCompleted) statistics+= " ====This game was completed====\n\n"; statistics+= QString("Lives: %1, Coins:%2, ").arg(FileData.lives).arg(FileData.coins); statistics+= QString("Total stars: %1, Gotten stars: %2\n") .arg(FileData.totalStars) .arg(FileData.gottenStars.size()); statistics+= QString("Position X=%1, Y=%2\n") .arg(FileData.worldPosX) .arg(FileData.worldPosY); if(FileData.musicID>0) { long item=configs.getMusWldI(FileData.musicID); if(item>=0) { statistics+= QString("Current music: %1\n\n").arg(configs.main_music_wld[item].name); } } statistics += "\n===========Players:============\n"; for(int i=0; i<FileData.characterStates.size();i++) { if(i<configs.characters.size()) statistics += QString("%1:\n").arg(configs.characters[i].name); else statistics += QString("<unknown character>:\n"); statistics += QString("Health: %1, ").arg(FileData.characterStates[i].health); statistics += QString("Power-UP: %1, ").arg(FileData.characterStates[i].state); switch(FileData.characterStates[i].mountType) { case 0: break; case 1: statistics += QString("Mounted transport: Shoe - "); switch(FileData.characterStates[i].mountID) { case 1: statistics += QString("Kuribo's (green)");break; case 2: statistics += QString("Podoboo's (red)");break; case 3: statistics += QString("Lakitu's (blue)");break; default: statistics += QString("of God Power :D");break; } break; case 3: statistics += QString("Mounted transport: Yoshi");break; default: statistics += QString("Mounted transport: <unknown>");break; } if(FileData.characterStates[i].itemID>0) { int item= configs.getNpcI(FileData.characterStates[i].itemID); if(item>=0) { statistics += QString("%2Has item: %1").arg(configs.main_npc[item].name) .arg(FileData.characterStates[i].mountType>0?", ":""); } } if(i<FileData.characterStates.size()-1) statistics += "\n----------------------------\n"; } statistics += "\n=========================\n"; if( !FileData.ReadFileValid ) return; QMessageBox::information(this, tr("Game save statistics"), statistics, QMessageBox::Ok); } else { QMessageBox::warning(this, tr("Bad file"), tr("This file have unknown extension"), QMessageBox::Ok); return; } // Add to recent fileList if(addToRecentList){ AddToRecentFiles(FilePath); SyncRecentFiles(); } }