mainwindow.cpp 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include "ff7DataInstaller.h"
  4. #include <QProcess>
  5. #include <QFileDialog>
  6. #include <QDir>
  7. #include <QSettings>
  8. #include <QMessageBox>
  9. MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent), ui(new Ui::MainWindow)
  10. {
  11. ui->setupUi(this);
  12. initSettings();
  13. ui->lineConfigDir->setText(settings->value("ConfigDir").toString());
  14. ui->lineDataDir->setText(settings->value("DataDir").toString());
  15. ui->lineQGearsExe->setText(settings->value("QGearsEXE").toString());
  16. #ifdef _DEBUG
  17. // Hard coded prebaked paths for debugging to save time
  18. ui->lineInput->setText("C:\\Games\\FF7\\data");
  19. ui->lineDataDir->setText("C:\\Users\\paul\\Desktop\\q-gears\\output\\_data");
  20. #endif
  21. }
  22. MainWindow::~MainWindow()
  23. {
  24. delete ui;
  25. }
  26. void MainWindow::initSettings(void)
  27. {
  28. bool win=false;
  29. #ifdef Q_OS_WIN
  30. settings= new QSettings(QCoreApplication::applicationDirPath() +"/" + "launcherSettings.ini",QSettings::IniFormat);
  31. win=true;
  32. #else
  33. settings= new QSettings(QSettings::NativeFormat,QSettings::UserScope,"q-gears","launcher",0);
  34. #endif
  35. //Check settings
  36. if(settings->value("ConfigDir").isNull())
  37. {
  38. if(win){settings->setValue("ConfigDir",QString("%1/q-gears").arg(QDir::homePath()));}
  39. else{settings->setValue("ConfigDir",QString("%1/.q-gears").arg(QDir::homePath()));}
  40. }
  41. if(settings->value("DataDir").isNull())
  42. {
  43. if(win){settings->setValue("DataDir",QString("%1/q-gears/data").arg(QDir::homePath()));}
  44. else{settings->setValue("DataDir",QString("%1/.q-gears/data").arg(QDir::homePath()));}
  45. }
  46. if(settings->value("QGearsEXE").isNull())
  47. {
  48. if(win){settings->setValue("QGearsEXE",QString("%1/q-gears.exe").arg(QCoreApplication::applicationDirPath()));}
  49. else{settings->setValue("QGearsEXE",QString("/usr/games/q-gears"));}
  50. }
  51. }
  52. void MainWindow::on_lineConfigDir_editingFinished(){settings->setValue("ConfigDir",ui->lineConfigDir->text());}
  53. void MainWindow::on_btnConfigDir_clicked()
  54. {
  55. QString temp = QFileDialog::getExistingDirectory(this,tr("Select Location of QGears Configuration Data,"),settings->value("ConfigDir").toString());
  56. if(!temp.isNull())
  57. {
  58. settings->setValue("ConfigDir",temp);
  59. ui->lineConfigDir->setText(temp);
  60. }
  61. }
  62. void MainWindow::on_lineQGearsExe_editingFinished(){settings->setValue("QGearsEXE",ui->lineQGearsExe->text());}
  63. void MainWindow::on_btnQGearsExe_clicked()
  64. {
  65. QString temp = QFileDialog::getOpenFileName(this,tr("Location of QGears Executable,"),QDir::rootPath());
  66. if(!temp.isNull())
  67. {
  68. settings->setValue("QGearsEXE",temp);
  69. ui->lineQGearsExe->setText(temp);
  70. }
  71. }
  72. void MainWindow::on_btnLaunch_clicked()
  73. {
  74. QString configDir(ui->lineConfigDir->text());
  75. QString exe(ui->lineQGearsExe->text());
  76. QStringList args;
  77. args.append(QString("--resources-file=%1/resources.cfg").arg(ui->lineConfigDir->text()));
  78. args.append(QString("--config-file=%1/q-gears.cfg").arg(ui->lineConfigDir->text()));
  79. args.append(QString("--plugins-file=/%1/plugins.cfg").arg(ui->lineConfigDir->text()));
  80. // Check that the config dir is set up correctly
  81. QProcess qGears;
  82. qGears.startDetached(exe,args,configDir);
  83. }
  84. void MainWindow::on_btnInput_clicked()
  85. {
  86. QString temp = QFileDialog::getExistingDirectory(this,tr("Location of Game Data),"),QDir::homePath());
  87. ui->lineInput->setText(temp);
  88. }
  89. void MainWindow::on_lineDataDir_editingFinished(){settings->setValue("DataDir",ui->lineDataDir->text());}
  90. void MainWindow::on_btnDataDir_clicked()
  91. {
  92. QString temp = QFileDialog::getExistingDirectory(this,tr("Location of QGears Data),"),settings->value("DataDir").toString());
  93. if(!temp.isNull())
  94. {
  95. settings->setValue("DataDir",temp);
  96. ui->lineDataDir->setText(temp);
  97. }
  98. }
  99. void MainWindow::on_btnGO_clicked()
  100. {
  101. if (ui->lineInput->text().isEmpty())
  102. {
  103. QMessageBox::critical(this,tr("Input Error"),tr("No Input Provided"));
  104. }
  105. else if(ui->lineDataDir->text().isEmpty())
  106. {
  107. QMessageBox::critical(this,tr("Output Error"),tr("No Output Path Provided"));
  108. }
  109. else
  110. {
  111. QMessageBox::information(this,tr("Converting Data"),tr("Attempt to convert with \n Input: %1 \n Output: %2").arg(ui->lineInput->text(),ui->lineDataDir->text()));
  112. QString input = QDir::fromNativeSeparators(ui->lineInput->text());
  113. if (!input.endsWith("/"))
  114. {
  115. input += "/";
  116. }
  117. QString output = QDir::fromNativeSeparators(ui->lineDataDir->text());
  118. if (!output.endsWith("/"))
  119. {
  120. output += "/";
  121. }
  122. // TODO: Enumerate files or find some better way to do this :)
  123. std::vector<std::string> vec;
  124. vec.push_back(QString("field/char.lgp").toStdString());
  125. vec.push_back(QString("field/flevel.lgp").toStdString());
  126. FF7DataInstaller conversion;
  127. conversion.Convert(QDir::toNativeSeparators(input).toStdString(), QDir::toNativeSeparators(output).toStdString(), vec);
  128. }
  129. }