mirror of
https://github.com/arcan1s/moldyn.git
synced 2025-06-28 14:51:41 +00:00
186 lines
5.0 KiB
C++
186 lines
5.0 KiB
C++
#include <QDir>
|
|
#include <QFileDialog>
|
|
#include <QKeyEvent>
|
|
#include <QTextStream>
|
|
|
|
#include "errorwindow.h"
|
|
|
|
#include "agglwindow.h"
|
|
#include "ui_agglwindow.h"
|
|
|
|
AgglWindow::AgglWindow(QWidget *parent, QString inputfile) :
|
|
QMainWindow(parent),
|
|
ui(new Ui::AgglWindow)
|
|
{
|
|
ui->setupUi(this);
|
|
|
|
ui->agl_lineEdit_input->setText(inputfile);
|
|
}
|
|
|
|
AgglWindow::~AgglWindow()
|
|
{
|
|
delete ui;
|
|
}
|
|
|
|
// ESC press event
|
|
void AgglWindow::keyPressEvent(QKeyEvent *pressedKey)
|
|
{
|
|
if (pressedKey->key() == Qt::Key_Escape)
|
|
close();
|
|
}
|
|
|
|
// events
|
|
void AgglWindow::on_agl_pushButton_input_clicked()
|
|
{
|
|
QString filename = QFileDialog::getOpenFileName(
|
|
this,
|
|
tr("Select file"),
|
|
QDir::currentPath(),
|
|
tr("'statgen' output files (*.dat);;All files (*.*)"));
|
|
if (!filename.isEmpty())
|
|
ui->agl_lineEdit_input->setText(filename);
|
|
}
|
|
|
|
void AgglWindow::on_pushButton_clicked()
|
|
{
|
|
errorwin = new ErrorWindow(this);
|
|
|
|
QString input = ui->agl_lineEdit_input->text();
|
|
QString tmp_str;
|
|
QFile inp_agl(input);
|
|
bool exists = inp_agl.open(QIODevice::ReadOnly);
|
|
if ((input == "") || (!exists))
|
|
{
|
|
errorwin->set_message(1);
|
|
errorwin->show();
|
|
return;
|
|
}
|
|
tmp_str = QString(inp_agl.readLine());
|
|
if (!tmp_str.contains(QString("statgen")))
|
|
{
|
|
errorwin->set_message(11);
|
|
errorwin->show();
|
|
return;
|
|
}
|
|
|
|
while (!tmp_str.contains(QString("END")))
|
|
tmp_str = QString(inp_agl.readLine());
|
|
|
|
QStringList cur_aggl_mol, one_file_aggl, one_file_aggl_mol;
|
|
int mol;
|
|
while (!tmp_str.contains(QString("SUMMARY STATISTIC")))
|
|
{
|
|
tmp_str = QString(inp_agl.readLine());
|
|
if (tmp_str.contains(QString("FILE=")))
|
|
{
|
|
inp_file.append(tmp_str.split(QString("FILE="), QString::SkipEmptyParts)[0].
|
|
split(QString("\n"), QString::SkipEmptyParts)[0]);
|
|
aggl.append(one_file_aggl.join(QString(";")));
|
|
one_file_aggl.clear();
|
|
aggl_mol.append(one_file_aggl_mol.join(QString(";")));
|
|
one_file_aggl_mol.clear();
|
|
}
|
|
else if (tmp_str.contains(QString("AGL=")))
|
|
{
|
|
cur_aggl_mol.clear();
|
|
mol = tmp_str.split('=')[1].toInt();
|
|
one_file_aggl.append(tmp_str.split(QString("AGL="), QString::SkipEmptyParts)[0].
|
|
split(QString("\n"), QString::SkipEmptyParts)[0]);
|
|
for (int i=0; i<mol; i++)
|
|
{
|
|
tmp_str = QString(inp_agl.readLine());
|
|
cur_aggl_mol.append(tmp_str);
|
|
}
|
|
one_file_aggl_mol.append(cur_aggl_mol.join(QString("")));
|
|
}
|
|
}
|
|
aggl.append(one_file_aggl.join(QString(";")));
|
|
one_file_aggl.clear();
|
|
aggl.removeFirst();
|
|
aggl_mol.append(one_file_aggl_mol.join(QString(";")));
|
|
one_file_aggl_mol.clear();
|
|
aggl_mol.removeFirst();
|
|
inp_agl.close();
|
|
|
|
ui->agl_comboBox->clear();
|
|
ui->agl_comboBox->addItems(inp_file);
|
|
|
|
delete errorwin;
|
|
}
|
|
|
|
void AgglWindow::on_agl_comboBox_currentIndexChanged(int index)
|
|
{
|
|
ui->agl_listWidget->clear();
|
|
ui->agl_textBrowser->clear();
|
|
if (index != -1)
|
|
{
|
|
ui->agl_listWidget->addItems(aggl[index].split(QString(";")));
|
|
ui->agl_listWidget->setCurrentRow(0);
|
|
}
|
|
}
|
|
|
|
void AgglWindow::on_agl_listWidget_itemActivated()
|
|
{
|
|
int index = ui->agl_listWidget->currentRow();
|
|
ui->agl_textBrowser->clear();
|
|
ui->agl_textBrowser->setText(aggl_mol[ui->agl_comboBox->currentIndex()].split(QString(";"))[index]);
|
|
ui->agl_lineEdit_output->setText(QFileInfo(ui->agl_lineEdit_input->text()).canonicalPath() + QDir::separator() +
|
|
QFileInfo(ui->agl_lineEdit_input->text()).completeBaseName() +
|
|
QString("_") + QString::number(ui->agl_comboBox->currentIndex()) +
|
|
QString("_") + QString::number(index) + QString(".agl"));
|
|
}
|
|
|
|
void AgglWindow::on_agl_pushButton_output_clicked()
|
|
{
|
|
QString filename = QFileDialog::getSaveFileName(
|
|
this,
|
|
tr("Save file as..."),
|
|
QDir::currentPath(),
|
|
tr("Agglomerate files (*.agl);;All files (*.*)"));
|
|
if (!filename.isEmpty())
|
|
ui->agl_lineEdit_output->setText(filename);
|
|
}
|
|
|
|
void AgglWindow::on_agl_pushButton_clear_clicked()
|
|
{
|
|
aggl.clear();
|
|
aggl_mol.clear();
|
|
inp_file.clear();
|
|
ui->agl_comboBox->clear();
|
|
ui->agl_lineEdit_input->clear();
|
|
ui->agl_lineEdit_output->clear();
|
|
}
|
|
|
|
void AgglWindow::on_agl_pushButton_create_clicked()
|
|
{
|
|
errorwin = new ErrorWindow(this);
|
|
|
|
QString output = ui->agl_lineEdit_output->text();
|
|
int file_num = ui->agl_comboBox->currentIndex();
|
|
int aggl_num = ui->agl_listWidget->currentRow();
|
|
|
|
if (output == "")
|
|
{
|
|
errorwin->set_message(4);
|
|
errorwin->show();
|
|
return;
|
|
}
|
|
|
|
output = QFileInfo(output).absoluteFilePath();
|
|
QFile f_out(output);
|
|
if (!f_out.open(QIODevice::WriteOnly | QIODevice::Text))
|
|
{
|
|
errorwin->set_message(9);
|
|
errorwin->show();
|
|
return;
|
|
}
|
|
QTextStream out(&f_out);
|
|
out << "AGL=" << aggl[file_num].split(QString(";"))[aggl_num] << "\n";
|
|
out << aggl_mol[file_num].split(QString(";"))[aggl_num];
|
|
f_out.close();
|
|
|
|
ui->agl_lineEdit_output->clear();
|
|
|
|
delete errorwin;
|
|
}
|