source: src/UIElements/Qt4/Query/FileQtQuery.cpp@ 0741f4d

Action_Thermostats Add_AtomRandomPerturbation Add_FitFragmentPartialChargesAction Add_RotateAroundBondAction Add_SelectAtomByNameAction Added_ParseSaveFragmentResults AddingActions_SaveParseParticleParameters Adding_Graph_to_ChangeBondActions Adding_MD_integration_tests Adding_ParticleName_to_Atom Adding_StructOpt_integration_tests AtomFragments Automaking_mpqc_open AutomationFragmentation_failures Candidate_v1.5.4 Candidate_v1.6.0 Candidate_v1.6.1 ChangeBugEmailaddress ChangingTestPorts ChemicalSpaceEvaluator CombiningParticlePotentialParsing Combining_Subpackages Debian_Package_split Debian_package_split_molecuildergui_only Disabling_MemDebug Docu_Python_wait EmpiricalPotential_contain_HomologyGraph EmpiricalPotential_contain_HomologyGraph_documentation Enable_parallel_make_install Enhance_userguide Enhanced_StructuralOptimization Enhanced_StructuralOptimization_continued Example_ManyWaysToTranslateAtom Exclude_Hydrogens_annealWithBondGraph FitPartialCharges_GlobalError Fix_BoundInBox_CenterInBox_MoleculeActions Fix_ChargeSampling_PBC Fix_ChronosMutex Fix_FitPartialCharges Fix_FitPotential_needs_atomicnumbers Fix_ForceAnnealing Fix_IndependentFragmentGrids Fix_ParseParticles Fix_ParseParticles_split_forward_backward_Actions Fix_PopActions Fix_QtFragmentList_sorted_selection Fix_Restrictedkeyset_FragmentMolecule Fix_StatusMsg Fix_StepWorldTime_single_argument Fix_Verbose_Codepatterns Fix_fitting_potentials Fixes ForceAnnealing_goodresults ForceAnnealing_oldresults ForceAnnealing_tocheck ForceAnnealing_with_BondGraph ForceAnnealing_with_BondGraph_continued ForceAnnealing_with_BondGraph_continued_betteresults ForceAnnealing_with_BondGraph_contraction-expansion FragmentAction_writes_AtomFragments FragmentMolecule_checks_bonddegrees GeometryObjects Gui_Fixes Gui_displays_atomic_force_velocity ImplicitCharges IndependentFragmentGrids IndependentFragmentGrids_IndividualZeroInstances IndependentFragmentGrids_IntegrationTest IndependentFragmentGrids_Sole_NN_Calculation JobMarket_RobustOnKillsSegFaults JobMarket_StableWorkerPool JobMarket_unresolvable_hostname_fix MoreRobust_FragmentAutomation ODR_violation_mpqc_open PartialCharges_OrthogonalSummation PdbParser_setsAtomName PythonUI_with_named_parameters QtGui_reactivate_TimeChanged_changes Recreated_GuiChecks Rewrite_FitPartialCharges RotateToPrincipalAxisSystem_UndoRedo SaturateAtoms_findBestMatching SaturateAtoms_singleDegree StoppableMakroAction Subpackage_CodePatterns Subpackage_JobMarket Subpackage_LinearAlgebra Subpackage_levmar Subpackage_mpqc_open Subpackage_vmg Switchable_LogView ThirdParty_MPQC_rebuilt_buildsystem TrajectoryDependenant_MaxOrder TremoloParser_IncreasedPrecision TremoloParser_MultipleTimesteps TremoloParser_setsAtomName Ubuntu_1604_changes stable
Last change on this file since 0741f4d was dae158, checked in by Frederik Heber <heber@…>, 10 years ago

FileQtQuery retrieves valid suffixes from validators.

  • added getFlatListFromHierarchyOfValidators() that steps through the hierarchy of validators and generates a flat vector with all matching types.
  • Or_Validatorm Not_Validator::getA(), ::getB() added. (present for And_... already).
  • FileSuffixValidator::getSuffix(), ParserFileValidator::getSuffixes() added.
  • Property mode set to 100644
File size: 5.2 KB
Line 
1/*
2 * Project: MoleCuilder
3 * Description: creates and alters molecular systems
4 * Copyright (C) 2010-2012 University of Bonn. All rights reserved.
5 * Copyright (C) 2013 Frederik Heber. All rights reserved.
6 *
7 *
8 * This file is part of MoleCuilder.
9 *
10 * MoleCuilder is free software: you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation, either version 2 of the License, or
13 * (at your option) any later version.
14 *
15 * MoleCuilder is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with MoleCuilder. If not, see <http://www.gnu.org/licenses/>.
22 */
23
24/*
25 * FileQtQuery.cpp
26 *
27 * Created on: Oct 25, 2010
28 * Author: heber
29 */
30
31// include config.h
32#ifdef HAVE_CONFIG_H
33#include <config.h>
34#endif
35
36#include <Qt/qboxlayout.h>
37#include <Qt/qlabel.h>
38#include <Qt/qlineedit.h>
39#include <Qt/qpushbutton.h>
40#include <Qt/qstringlist.h>
41#include <QtGui/QFileDialog>
42
43#include "CodePatterns/MemDebug.hpp"
44
45#include "UIElements/Qt4/Query/QtQuery.hpp"
46
47#include <algorithm>
48#include <boost/filesystem.hpp>
49
50#include "Parameters/Validators/getFlatListFromHierarchyOfValidators.hpp"
51#include "Parameters/Validators/Validator.hpp"
52#include "Parameters/Validators/Specific/FilePresentValidator.hpp"
53#include "Parameters/Validators/Specific/FileSuffixValidator.hpp"
54#include "Parameters/Validators/Specific/ParserFileValidator.hpp"
55#include "Parser/ParserTypes.hpp"
56#include "Parser/FormatParserStorage.hpp"
57
58QtDialog::FileQtQuery::FileQtQuery(Parameter<boost::filesystem::path> &_param, const std::string &_title, const std::string &_description, QBoxLayout *_parent, Dialog *_dialog) :
59 QtQuery<boost::filesystem::path>(_param, _title, _description),
60 parent(_parent),
61 dialog(_dialog),
62 mustBePresent(false)
63{
64 filenameLineEdit = new QLineEdit();
65 filenameLineEdit->setText(QString());
66 filenameLineEdit->setReadOnly(true);
67
68 filenameLabel = new QLabel(QString("Input file:"));
69 filenameLabel->setBuddy(filenameLineEdit);
70 filenameLabel->setToolTip(QString(getDescription().c_str()));
71
72 filedialogButton = new QPushButton("&Choose");
73 theFileDialog = NULL;
74
75 thisLayout = new QHBoxLayout();
76 parent->addLayout(thisLayout);
77 thisLayout->addWidget(filenameLabel);
78 thisLayout->addWidget(filenameLineEdit);
79 thisLayout->addWidget(filedialogButton);
80
81 QObject::connect(filedialogButton,SIGNAL(clicked()),this,SLOT(showFileDialog()));
82
83 // fill list of suffixes
84 const Validator<boost::filesystem::path> &validator =
85 _param.getValidator();
86 typedef std::vector<std::pair<const Validator<boost::filesystem::path> *, bool> > validators_t;
87 const validators_t validators =
88 getFlatListFromHierarchyOfValidators<boost::filesystem::path>(validator);
89 for (validators_t::const_iterator iter = validators.begin();
90 iter != validators.end(); ++iter) {
91 const Validator< boost::filesystem::path > &currentvalidator = *iter->first;
92 if (dynamic_cast<const FileSuffixValidator * const>(&currentvalidator) != NULL)
93 suffixes.push_back(dynamic_cast<const FileSuffixValidator &>(currentvalidator).getSuffix());
94 if (dynamic_cast<const ParserFileValidator * const>(&currentvalidator) != NULL) {
95 const std::vector<std::string> moresuffixes =
96 dynamic_cast<const ParserFileValidator &>(currentvalidator).getSuffixes();
97 suffixes.insert(suffixes.end(), moresuffixes.begin(), moresuffixes.end());
98 }
99 if (dynamic_cast<const FilePresentValidator * const>(&currentvalidator) != NULL)
100 mustBePresent = iter->second;
101 }
102 std::sort(suffixes.begin(), suffixes.end());
103}
104
105QtDialog::FileQtQuery::~FileQtQuery()
106{
107 if (theFileDialog != NULL)
108 delete theFileDialog;
109}
110
111void QtDialog::FileQtQuery::onUpdate() {
112 QStringList ListOfFilenames = theFileDialog->selectedFiles();
113 std::cout << "Selected File is " << ListOfFilenames.at(0).toStdString() << std::endl;
114 temp = ListOfFilenames.at(0).toStdString();
115 filenameLineEdit->setText(QString::fromStdString(temp.string()));
116 dialog->update();
117}
118
119void QtDialog::FileQtQuery::showFileDialog() {
120 filedialogButton->setFlat(true);
121 if (theFileDialog == NULL) {
122 theFileDialog = new QFileDialog(NULL, tr("Open input file"), QString());
123 // gather all possible suffixes
124 QStringList filters;
125 std::stringstream filter_string;
126 if (!suffixes.empty()) {
127 filter_string << "Valid files (";
128 for (std::vector<std::string>::const_iterator iter = suffixes.begin();
129 iter != suffixes.end(); ++iter)
130 filter_string << (iter == suffixes.begin() ? "*." : " *.") << *iter << " ";
131 filter_string << ")";
132 filters << tr(filter_string.str().c_str());
133 }
134 filters << tr("Any files (*)");
135 theFileDialog->setNameFilters(filters);
136 theFileDialog->setAcceptMode(QFileDialog::AcceptOpen);
137 theFileDialog->setFileMode(QFileDialog::AnyFile);
138 theFileDialog->setViewMode(QFileDialog::List);
139 }
140 theFileDialog->exec();
141
142 onUpdate();
143 filedialogButton->setFlat(false);
144}
145
Note: See TracBrowser for help on using the repository browser.