Path: blob/devel/ElmerGUI/Application/src/newprojectdialog.cpp
3203 views
/*****************************************************************************1* *2* Elmer, A Finite Element Software for Multiphysical Problems *3* *4* Copyright 1st April 1995 - , CSC - IT Center for Science Ltd., Finland *5* *6* This program is free software; you can redistribute it and/or *7* modify it under the terms of the GNU General Public License *8* as published by the Free Software Foundation; either version 2 *9* of the License, or (at your option) any later version. *10* *11* This program is distributed in the hope that it will be useful, *12* but WITHOUT ANY WARRANTY; without even the implied warranty of *13* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *14* GNU General Public License for more details. *15* *16* You should have received a copy of the GNU General Public License *17* along with this program (in file fem/GPL-2); if not, write to the *18* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, *19* Boston, MA 02110-1301, USA. *20* *21*****************************************************************************/2223/*****************************************************************************24* *25* ElmerGUI newproject *26* *27*****************************************************************************28* *29* Author: Saeki Takayuki *30* Original Date: 15 Feb 2020 *31* *32*****************************************************************************/3334#include <QtGui>35#include <QFileDialog>36#include <iostream>37#include <QDomDocument>38#include "newprojectdialog.h"3940using namespace std;4142NewProjectDialog::NewProjectDialog(QWidget *parent)43: QDialog(parent)44{45ui.setupUi(this);4647setWindowIcon(QIcon(":/icons/Mesh3D.png"));4849connect(ui.buttonBox, SIGNAL(accepted()), this, SLOT(accept()));50connect(ui.buttonBox, SIGNAL(rejected()), this, SLOT(reject()));51connect(ui.radioButton_elmerMesh, SIGNAL(toggled(bool)), this, SLOT(elmerMeshToggled(bool)));52connect(ui.radioButton_geometryFile, SIGNAL(toggled(bool)), this, SLOT(geometryFileToggled(bool)));53connect(ui.radioButton_later, SIGNAL(toggled(bool)), this, SLOT(laterToggled(bool)));54connect(ui.pushButton_projectDir, SIGNAL(clicked(bool)), this, SLOT(projectDirClicked(bool)));55connect(ui.pushButton_meshDir, SIGNAL(clicked(bool)), this, SLOT(meshDirClicked(bool)));56connect(ui.pushButton_geometryFile, SIGNAL(clicked(bool)), this, SLOT(geometryFileClicked(bool)));57connect(ui.pushButton_addSolver, SIGNAL(clicked(bool)), this, SLOT(addSolverClicked(bool)));58connect(ui.pushButton_removeSolver, SIGNAL(clicked(bool)), this, SLOT(removeSolverClicked(bool)));59connect(ui.listWidget_selectedSolvers, SIGNAL(currentRowChanged(int)), this, SLOT(selectedSolverChanged(int)));60connect(ui.listWidget_unselectedSolvers, SIGNAL(currentRowChanged(int)), this, SLOT(unselectedSolverChanged(int)));61ui.pushButton_addSolver->setEnabled(false);62ui.pushButton_removeSolver->setEnabled(false);6364ui.radioButton_later->setChecked(true);65geometryFileToggled(false);66elmerMeshToggled(false);6768ui.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false);69}7071NewProjectDialog::~NewProjectDialog()72{73}7475void NewProjectDialog::elmerMeshToggled(bool b){76ui.pushButton_meshDir->setEnabled(b);77ui.label_meshDir->setEnabled(b);78}7980void NewProjectDialog::geometryFileToggled(bool b){81ui.pushButton_geometryFile->setEnabled(b);82ui.label_geometryFile->setEnabled(b);83}8485void NewProjectDialog::laterToggled(bool b){86}8788void NewProjectDialog::projectDirClicked(bool b){89QString dirName = QFileDialog::getExistingDirectory(this, tr("Select directory to store the new project"), defaultDirName);90if (!dirName.isEmpty()){91ui.label_projectDir->setText(dirName);92ui.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(true);93}94}9596void NewProjectDialog::meshDirClicked(bool b){97QString dirName = QFileDialog::getExistingDirectory(this, tr("Select Elmer mesh directory"), defaultDirName);98if (!dirName.isEmpty()){99ui.label_meshDir->setText(dirName);100}101}102103void NewProjectDialog::geometryFileClicked(bool b){104QString fileName = QFileDialog::getOpenFileName(this, tr("Select geometry input file"), defaultDirName);105if (!fileName.isEmpty()) {106ui.label_geometryFile->setText(fileName);107}108}109110void NewProjectDialog::setDirectories(QString& defaultDir, QString& extraDirName){111defaultDirName = defaultDir;112extraDirPath = extraDirName;113114QString name;115QDir extraDir(extraDirPath);116QStringList nameFilters;117nameFilters << "*.xml";118QStringList fileNameList = extraDir.entryList(nameFilters, QDir::Files | QDir::Readable);119120for(int i=0; i < fileNameList.size(); i++){121if(isEdfFile( extraDirPath + "/" + fileNameList.at(i))) ui.listWidget_unselectedSolvers->addItem(fileNameList.at(i));122}123124QString labelString;125QDir edfDir(extraDirPath + "/../edf");126fileNameList = edfDir.entryList(nameFilters, QDir::Files | QDir::Readable);127for(int i=0; i<fileNameList.size(); i++){128if( fileNameList[i] != "edf.xml" && fileNameList[i] != "egini.xml" && fileNameList[i] != "egmaterials.xml" )129{130if(isEdfFile( extraDirPath + "/../edf/" + fileNameList.at(i))) labelString += " " + fileNameList[i] + "\n";131}132}133ui.label_defaultSolvers->setText(labelString);134}135136void NewProjectDialog::addSolverClicked(bool b){137int i = ui.listWidget_unselectedSolvers->currentRow();138if(i < 0) return;139QListWidgetItem* item = ui.listWidget_unselectedSolvers->takeItem(i);140if(item != NULL) ui.listWidget_selectedSolvers->addItem(item->text());141}142143void NewProjectDialog::removeSolverClicked(bool b){144int i = ui.listWidget_selectedSolvers->currentRow();145if(i < 0) return;146QListWidgetItem* item = ui.listWidget_selectedSolvers->takeItem(i);147if(item != NULL) ui.listWidget_unselectedSolvers->addItem(item->text());148}149150void NewProjectDialog::selectedSolverChanged(int i){151ui.pushButton_removeSolver->setEnabled(i >= 0);152}153154void NewProjectDialog::unselectedSolverChanged(int i){155ui.pushButton_addSolver->setEnabled(i >= 0);156}157158bool NewProjectDialog::isEdfFile(QString path){159QString errStr;160int errRow;161int errCol;162QFile file(path);163QDomDocument doc;164165if(!file.exists()) {166return false;167168} else {169170if(!doc.setContent(&file, true, &errStr, &errRow, &errCol)) {171file.close();172return false;173}174}175176file.close();177178if(doc.documentElement().tagName() != "edf") {179return false;180}181182return true;183}184185