All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
FileChooser.cpp
Go to the documentation of this file.
1 #include "FileChooser.h"
2 #include <ui_FileChooser.h>
3 //#include "FullPathFileModel.h"
4 
5 //Qt include files
6 #include <QFileDialog>
7 #include <QLineEdit>
8 #include <QCompleter>
9 #include <QFileSystemModel>
10 
11 QStringList getExtensionFilters(const QString& filter)
12 {
13  QStringList filters;
14 
15  QRegExp re("(\\*\\.{1}[^\\.]\\S*[^\\)|^\\) ])");
16 
17  int pos = 0;
18 
19  while ((pos = re.indexIn(filter, pos)) != -1)
20  {
21  filters <<re.cap(1);
22  pos += re.matchedLength();
23  }
24 
25  return filters;
26 }
27 
28 namespace te
29 {
30  namespace qt
31  {
32  namespace widgets
33  {
34  FileChooser::FileChooser(QWidget* parent, const ResourceType& type) :
35  QWidget(parent),
36  m_ui(new Ui::FileChooser)
37  {
38  m_ui->setupUi(this);
39  m_ui->m_ChooseFileToolButton->setIcon(QIcon::fromTheme("folder"));
40 
41  connect(m_ui->m_fileName, SIGNAL(returnPressed()), this, SLOT(onReturnPressed()));
42 
43  QCompleter* cmp = new QCompleter(this);
44  m_fp_model = new QFileSystemModel(cmp);
45  m_fp_model->setNameFilterDisables(false);
46 
47  cmp->setModel(m_fp_model);
48  m_ui->m_fileName->setCompleter(cmp);
49 
50  setInitialPath("");
51  setResourceType(type);
52  }
53 
55  {
56  delete m_ui;
57  }
58 
59  void FileChooser::setInitialPath(const QString& path)
60  {
61  m_fp_model->setRootPath(path);
62  m_ui->m_fileName->setText(path);
63  }
64 
65  void FileChooser::setFilterPattern(const QString& filter)
66  {
67  m_filter = filter;
68  m_fp_model->setNameFilters(getExtensionFilters(m_filter));
69  }
70 
72  {
73  return m_ui->m_fileName->text();
74  }
75 
77  {
78  QDir::Filters filters;
79 
80  switch(type)
81  {
82  case FILE:
83  filters = QDir::AllDirs | QDir::AllEntries | QDir::NoDotAndDotDot;
84  break;
85 
86  case FOLDER:
87  filters = QDir::AllDirs | QDir::Drives | QDir::NoDotAndDotDot;
88  break;
89  };
90 
91  m_fp_model->setFilter(filters);
92  }
93 
95  {
96  bool openFile = (m_fp_model->filter() & QDir::Files);
97  QString fName = (openFile) ?
98  QFileDialog::getOpenFileName(parentWidget(), tr("Choose file"), getSelectedResource(), m_filter) :
99  QFileDialog::getExistingDirectory(parentWidget(), tr("Choose directory"), getSelectedResource());
100 
101  if(!fName.isEmpty())
102  {
103  m_ui->m_fileName->setText(fName);
104  emit resourceSelected(fName);
105  }
106  }
107 
109  {
110  if(!m_ui->m_fileName->text().isEmpty())
111  emit resourceSelected(m_ui->m_fileName->text());
112  }
113  }
114  }
115 }
void resourceSelected(QString s)
Emit a qt signal to inform that a resource was selected or defined.
void onChooseFileToolButtonClicked()
Shows the file selection dialog.
Definition: FileChooser.cpp:94
Defines a component for choose a file.
Defines a component for choose a file.
Definition: FileChooser.h:60
QStringList getExtensionFilters(const QString &filter)
Definition: FileChooser.cpp:11
QString m_filter
Files filter.
Definition: FileChooser.h:145
QString getSelectedResource() const
Returns the text presented in line edit.
Definition: FileChooser.cpp:71
FileChooser(QWidget *parent=0, const ResourceType &type=FILE)
Constructor.
Definition: FileChooser.cpp:34
void setFilterPattern(const QString &filter)
Defines the filter for files of interest.
Definition: FileChooser.cpp:65
void setResourceType(const ResourceType &type)
Updates the resource type of the search to be done.
Definition: FileChooser.cpp:76
QFileSystemModel * m_fp_model
Model to show full path.
Definition: FileChooser.h:144
ResourceType
Type of resource required.
Definition: FileChooser.h:69
void onReturnPressed()
Event on return pressed over the resource line edit.
Ui::FileChooser * m_ui
Qt ui pointer.
Definition: FileChooser.h:149
void setInitialPath(const QString &path)
This will open the dialog of file selection in the given path.
Definition: FileChooser.cpp:59