BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
gui2::ImportFileWidget Class Reference

Provides the possibility to select file names on disk and add them to list view. More...

Inheritance diagram for gui2::ImportFileWidget:
[legend]
Collaboration diagram for gui2::ImportFileWidget:
[legend]

Public Slots

QStringList fileNames () const
 Retuns the list of all file names imported by the user. More...
 
void onAddFilesRequest ()
 Summons dialog for file selections, update list view with file names. More...
 
void onRemoveFileRequest ()
 Removes currently selected file. More...
 
QStringList selectedFileNames () const
 Retuns the list of currently selected file names. More...
 

Signals

void fileNamesChanged ()
 
void fileSelectionChanged ()
 

Public Member Functions

 ImportFileWidget (QWidget *parent=nullptr)
 
 ~ImportFileWidget ()
 

Private Member Functions

void addFileNamesToModel (const QStringList &file_names)
 Adds given list of file names to the model. More...
 
void makeLastSelected ()
 
void readSettings ()
 Loads widget settings. More...
 
void updateCurrentWorkdir (const QStringList &file_names)
 Updates current working dir. More...
 
QStringList validateForBinaryFiles (const QStringList &file_names)
 Returns list validated for binary files. More...
 
void writeSettings ()
 Writes widget settings. More...
 

Private Attributes

QString m_currentWorkdir
 
QStringListModel * m_listModel {nullptr}
 
QListView * m_listView {nullptr}
 

Detailed Description

Provides the possibility to select file names on disk and add them to list view.

List represents names of ASCII files which will be later imported and parsed. Part of LoaderPreviewPanel.

Definition at line 30 of file importfilewidget.h.

Constructor & Destructor Documentation

◆ ImportFileWidget()

gui2::ImportFileWidget::ImportFileWidget ( QWidget *  parent = nullptr)

Definition at line 39 of file importfilewidget.cpp.

40  : QWidget(parent), m_listView(new QListView), m_listModel(new QStringListModel(this))
41 {
42  readSettings();
43 
44  auto layout = new QVBoxLayout(this);
45  layout->setContentsMargins(0, 0, 0, 0);
46  layout->addWidget(m_listView);
47 
48  m_listView->setModel(m_listModel);
49  m_listView->setEditTriggers(QAbstractItemView::NoEditTriggers);
50  m_listView->setAlternatingRowColors(true);
51  m_listView->setSelectionMode(QAbstractItemView::ExtendedSelection);
52 
53  connect(m_listView->selectionModel(), &QItemSelectionModel::selectionChanged, this,
55 }
void readSettings()
Loads widget settings.
QStringListModel * m_listModel

References fileSelectionChanged(), m_listModel, m_listView, and readSettings().

Here is the call graph for this function:

◆ ~ImportFileWidget()

gui2::ImportFileWidget::~ImportFileWidget ( )

Definition at line 57 of file importfilewidget.cpp.

58 {
59  writeSettings();
60 }
void writeSettings()
Writes widget settings.

References writeSettings().

Here is the call graph for this function:

Member Function Documentation

◆ addFileNamesToModel()

void gui2::ImportFileWidget::addFileNamesToModel ( const QStringList &  file_names)
private

Adds given list of file names to the model.

Definition at line 163 of file importfilewidget.cpp.

164 {
165  auto current_names = fileNames();
166  QStringList updated_names = current_names + file_names;
167  updated_names.removeDuplicates();
168  m_listModel->setStringList(updated_names);
169 
170  emit fileNamesChanged();
171 
173 }
QStringList fileNames() const
Retuns the list of all file names imported by the user.

References fileNames(), fileNamesChanged(), m_listModel, and makeLastSelected().

Referenced by onAddFilesRequest().

Here is the call graph for this function:

◆ fileNames

QStringList gui2::ImportFileWidget::fileNames ( ) const
slot

Retuns the list of all file names imported by the user.

Definition at line 98 of file importfilewidget.cpp.

99 {
100  return m_listModel->stringList();
101 }

References m_listModel.

Referenced by addFileNamesToModel(), gui2::LoaderSelectorPanel::fileNames(), and gui2::LoaderSelectorPanel::init_connections().

◆ fileNamesChanged

void gui2::ImportFileWidget::fileNamesChanged ( )
signal

◆ fileSelectionChanged

void gui2::ImportFileWidget::fileSelectionChanged ( )
signal

◆ makeLastSelected()

void gui2::ImportFileWidget::makeLastSelected ( )
private

Definition at line 175 of file importfilewidget.cpp.

176 {
177  if (m_listView->selectionModel()->selectedIndexes().empty()) {
178  auto flags = QItemSelectionModel::SelectCurrent | QItemSelectionModel::Rows;
179  auto toSelect = m_listModel->index(m_listModel->rowCount() - 1);
180  m_listView->selectionModel()->select(toSelect, flags);
181  }
182 }

References m_listModel, and m_listView.

Referenced by addFileNamesToModel(), and onRemoveFileRequest().

◆ onAddFilesRequest

void gui2::ImportFileWidget::onAddFilesRequest ( )
slot

Summons dialog for file selections, update list view with file names.

Definition at line 64 of file importfilewidget.cpp.

65 {
66  QFileDialog dialog(this, "Select one or more files to load", m_currentWorkdir);
67  dialog.setFileMode(QFileDialog::ExistingFiles);
68  dialog.setNameFilter("Text (*.txt *.csv *.dat);; Other (*.*)");
69  dialog.setOption(QFileDialog::DontUseNativeDialog);
70  QStringList file_names = dialog.exec() ? dialog.selectedFiles() : QStringList();
71 
72  file_names = validateForBinaryFiles(file_names);
73 
74  if (file_names.empty())
75  return;
76 
77  updateCurrentWorkdir(file_names);
78  addFileNamesToModel(file_names);
79 }
void updateCurrentWorkdir(const QStringList &file_names)
Updates current working dir.
void addFileNamesToModel(const QStringList &file_names)
Adds given list of file names to the model.
QStringList validateForBinaryFiles(const QStringList &file_names)
Returns list validated for binary files.

References addFileNamesToModel(), m_currentWorkdir, updateCurrentWorkdir(), and validateForBinaryFiles().

Referenced by gui2::LoaderSelectorPanel::onAddFilesRequest().

Here is the call graph for this function:

◆ onRemoveFileRequest

void gui2::ImportFileWidget::onRemoveFileRequest ( )
slot

Removes currently selected file.

Definition at line 83 of file importfilewidget.cpp.

84 {
85  auto selected = m_listView->selectionModel()->selectedIndexes();
86  while (!selected.empty()) {
87  m_listModel->removeRow(selected.back().row());
88  selected = m_listView->selectionModel()->selectedIndexes();
89  }
90 
91  emit fileNamesChanged();
92 
94 }

References fileNamesChanged(), m_listModel, m_listView, and makeLastSelected().

Referenced by gui2::LoaderSelectorPanel::onRemoveFileRequest().

Here is the call graph for this function:

◆ readSettings()

void gui2::ImportFileWidget::readSettings ( )
private

Loads widget settings.

Definition at line 115 of file importfilewidget.cpp.

116 {
117  QSettings settings;
118  m_currentWorkdir = QDir::homePath();
119 
120  if (settings.contains(workdir_setting_name()))
121  m_currentWorkdir = settings.value(workdir_setting_name()).toString();
122 }

References m_currentWorkdir.

Referenced by ImportFileWidget().

◆ selectedFileNames

QStringList gui2::ImportFileWidget::selectedFileNames ( ) const
slot

Retuns the list of currently selected file names.

Definition at line 105 of file importfilewidget.cpp.

106 {
107  QStringList result;
108  for (auto index : m_listView->selectionModel()->selectedIndexes())
109  result.append(m_listModel->data(index).toString());
110  return result;
111 }

References m_listModel, and m_listView.

Referenced by gui2::LoaderSelectorPanel::init_connections(), and gui2::LoaderSelectorPanel::selectedFileNames().

◆ updateCurrentWorkdir()

void gui2::ImportFileWidget::updateCurrentWorkdir ( const QStringList &  file_names)
private

Updates current working dir.

Definition at line 154 of file importfilewidget.cpp.

155 {
156  auto file_name = file_names.back();
157  auto parent_path = ModelView::Utils::parent_path(file_name.toStdString());
158  m_currentWorkdir = QString::fromStdString(parent_path);
159 }
MVVM_MODEL_EXPORT std::string parent_path(const std::string &path)
Returns the path to the parent directory.
Definition: fileutils.cpp:111

References m_currentWorkdir, and ModelView::Utils::parent_path().

Referenced by onAddFilesRequest().

Here is the call graph for this function:

◆ validateForBinaryFiles()

QStringList gui2::ImportFileWidget::validateForBinaryFiles ( const QStringList &  file_names)
private

Returns list validated for binary files.

Definition at line 134 of file importfilewidget.cpp.

135 {
136  QStringList result;
137  for (const auto& file_name : file_names) {
138  if (ModelView::Utils::is_binary(file_name.toStdString())) {
139  QMessageBox msgBox;
140  msgBox.setText(file_name + "\nmay be a binary file. Open it anyway?");
141  msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
142  int ret = msgBox.exec();
143  if (ret == QMessageBox::Yes)
144  result.push_back(file_name);
145  } else {
146  result.push_back(file_name);
147  }
148  }
149  return result;
150 }
bool is_binary(const std::string &filename)
Returns true if file is binary.
Definition: binutils.cpp:33

References ModelView ::Utils::is_binary().

Referenced by onAddFilesRequest().

Here is the call graph for this function:

◆ writeSettings()

void gui2::ImportFileWidget::writeSettings ( )
private

Writes widget settings.

Definition at line 126 of file importfilewidget.cpp.

127 {
128  QSettings settings;
129  settings.setValue(workdir_setting_name(), m_currentWorkdir);
130 }

References m_currentWorkdir.

Referenced by ~ImportFileWidget().

Member Data Documentation

◆ m_currentWorkdir

QString gui2::ImportFileWidget::m_currentWorkdir
private

◆ m_listModel

QStringListModel* gui2::ImportFileWidget::m_listModel {nullptr}
private

◆ m_listView

QListView* gui2::ImportFileWidget::m_listView {nullptr}
private

The documentation for this class was generated from the following files: