mirror of
https://github.com/arcan1s/moldyn.git
synced 2025-07-13 22:05:50 +00:00
Added agglwindow
This commit is contained in:
186
mathmech/agglwindow.cpp
Normal file
186
mathmech/agglwindow.cpp
Normal file
@ -0,0 +1,186 @@
|
||||
#include <QDir>
|
||||
#include <QFileDialog>
|
||||
#include <QKeyEvent>
|
||||
#include <QTextStream>
|
||||
|
||||
#include "agglwindow.h"
|
||||
#include "ui_agglwindow.h"
|
||||
|
||||
#include "errorwindow.h"
|
||||
#include "ui_errorwindow.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;
|
||||
}
|
Reference in New Issue
Block a user