All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties 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()), SLOT(onReturnPressed()));
42  connect(m_ui->m_fileName, SIGNAL(textChanged(const QString&)), SIGNAL(resourceSelected(const QString&)));
43 
44  QCompleter* cmp = new QCompleter(this);
45  m_fp_model = new QFileSystemModel(cmp);
46  m_fp_model->setNameFilterDisables(false);
47 
48  cmp->setModel(m_fp_model);
49  m_ui->m_fileName->setCompleter(cmp);
50 
51  setInitialPath("");
52  setResourceType(type);
53  }
54 
56  {
57  delete m_ui;
58  }
59 
60  void FileChooser::setInitialPath(const QString& path)
61  {
62  blockSignals(true);
63 
64  m_fp_model->setRootPath(path);
65  m_ui->m_fileName->setText(path);
66 
67  blockSignals(false);
68  }
69 
70  void FileChooser::setFilterPattern(const QString& filter)
71  {
72  m_filter = filter;
73  m_fp_model->setNameFilters(getExtensionFilters(m_filter));
74  }
75 
77  {
78  return m_ui->m_fileName->text();
79  }
80 
82  {
83  QDir::Filters filters;
84 
85  switch(type)
86  {
87  case FILE:
88  filters = QDir::AllDirs | QDir::AllEntries | QDir::NoDotAndDotDot;
89  break;
90 
91  case FOLDER:
92  filters = QDir::AllDirs | QDir::Drives | QDir::NoDotAndDotDot;
93  break;
94  };
95 
96  m_fp_model->setFilter(filters);
97  }
98 
99  void FileChooser::setLabel(const QString& label)
100  {
101  m_ui->label->setText(label);
102  }
103 
104 
106  {
107  bool openFile = (m_fp_model->filter() & QDir::Files);
108 
109  QString fName;
110 
111  if(openFile)
112  {
113  QFileDialog dlg(parentWidget(), tr("Choose file"), getSelectedResource(), m_filter);
114  dlg.setFileMode(QFileDialog::AnyFile);
115  if(dlg.exec() == QDialog::Accepted)
116  fName = dlg.selectedFiles().first();
117  }
118  else
119  fName = QFileDialog::getExistingDirectory(parentWidget(), tr("Choose directory"), getSelectedResource());
120 
121  if(!fName.isEmpty())
122  m_ui->m_fileName->setText(fName);
123  }
124 
126  {
127  if(!m_ui->m_fileName->text().isEmpty())
128  emit resourceSelected(m_ui->m_fileName->text());
129  }
130  }
131  }
132 }
Defines a component for choose a file.
void resourceSelected(const QString &)
Emit a qt signal to inform that a resource was selected or defined.
QString m_filter
Files filter.
Definition: FileChooser.h:151
QStringList getExtensionFilters(const QString &filter)
Definition: FileChooser.cpp:11
void setInitialPath(const QString &path)
This will open the dialog of file selection in the given path.
Definition: FileChooser.cpp:60
Defines a component for choose a file.
Definition: FileChooser.h:60
void setLabel(const QString &label)
Sets the label to be presented.
Definition: FileChooser.cpp:99
Ui::FileChooser * m_ui
Qt ui pointer.
Definition: FileChooser.h:155
void onChooseFileToolButtonClicked()
Shows the file selection dialog.
ResourceType
Type of resource required.
Definition: FileChooser.h:69
void setResourceType(const ResourceType &type)
Updates the resource type of the search to be done.
Definition: FileChooser.cpp:81
QString getSelectedResource() const
Returns the text presented in line edit.
Definition: FileChooser.cpp:76
FileChooser(QWidget *parent=0, const ResourceType &type=FILE)
Constructor.
Definition: FileChooser.cpp:34
QFileSystemModel * m_fp_model
Model to show full path.
Definition: FileChooser.h:150
void setFilterPattern(const QString &filter)
Defines the filter for files of interest.
Definition: FileChooser.cpp:70
void onReturnPressed()
Event on return pressed over the resource line edit.