31 #include <QFileSystemModel>
36 QString CodeImpSelectPage::s_recentPath =
"";
47 setTitle(i18n(
"Code Importing Path"));
48 setSubTitle(i18n(
"Select the code importing path."));
53 connect(ui_languageBox, SIGNAL(activated(
int)),
this, SLOT(
languageChanged(
int)));
57 connect(ui_treeView, SIGNAL(clicked(QModelIndex)),
this, SLOT(
treeClicked(QModelIndex)));
60 connect(ui_fileExtLineEdit, SIGNAL(editingFinished()),
this, SLOT(fileExtChanged()));
62 connect(ui_subdirCheckBox, SIGNAL(stateChanged(
int)),
this, SLOT(subdirStateChanged(
int)));
63 connect(ui_selectAllButton, SIGNAL(clicked()),
this, SLOT(selectAll()));
64 connect(ui_deselectAllButton, SIGNAL(clicked()),
this, SLOT(deselectAll()));
82 void CodeImpSelectPage::setupLanguageBox()
87 ui_languageBox->insertItem(indexCounter, language);
91 ui_languageBox->setCurrentIndex(pl);
97 void CodeImpSelectPage::setupTreeView()
99 QFileSystemModel* model =
new QFileSystemModel();
100 model->setRootPath(
"");
101 model->setNameFilterDisables(
false);
103 m_fileExtensions <<
"*.h" <<
"*.hpp" <<
"*.hh" <<
"*.hxx" <<
"*.H";
104 model->setNameFilters(m_fileExtensions);
106 ui_treeView->setSelectionMode(QAbstractItemView::MultiSelection);
107 ui_treeView->setModel(model);
108 ui_treeView->setIndentation(20);
109 ui_treeView->setColumnWidth(0, 200);
110 ui_treeView->setSortingEnabled(
true);
111 ui_treeView->setWindowTitle(i18n(
"File System Model"));
112 if (s_recentPath.isEmpty()) {
113 ui_treeView->setCurrentIndex(model->index(QDir::currentPath()));
116 ui_treeView->setCurrentIndex(model->index(s_recentPath));
125 void CodeImpSelectPage::setupFileExtEdit()
127 ui_fileExtLineEdit->setText(m_fileExtensions.join(
", "));
134 void CodeImpSelectPage::setupToolTips()
136 ui_languageBox->setToolTip(i18n(
"Select the desired language to filter files."));
137 ui_subdirCheckBox->setToolTip(i18n(
"Select also all the files in the subdirectories."));
138 ui_selectAllButton->setToolTip(i18n(
"Select all the files below the current directory."));
139 ui_deselectAllButton->setToolTip(i18n(
"Clear all selections."));
140 ui_fileExtLineEdit->setToolTip(i18n(
"Add file extensions like e.g. '*.h *.hpp'."));
148 bool CodeImpSelectPage::matchFilter(
const QFileInfo& path)
151 QString filename = path.fileName();
152 foreach (QString extension, m_fileExtensions) {
153 extension.remove(
'*');
154 if (filename.endsWith(extension)) {
197 void CodeImpSelectPage::subdirStateChanged(
int state)
202 strState =
"Unchecked";
205 strState =
"Checked";
208 strState =
"not known";
211 uDebug() <<
"state set to " << strState;
217 void CodeImpSelectPage::fileExtChanged()
219 QString inputStr = ui_fileExtLineEdit->text();
220 m_fileExtensions = inputStr.split(QRegExp(
"[,;: ]*"));
221 uDebug() <<
"editing of file extension line edit finished and set to "
224 QFileSystemModel* model = (QFileSystemModel*)ui_treeView->model();
225 model->setNameFilters(m_fileExtensions);
234 if (index.isValid()) {
235 uDebug() <<
"item at row=" << index.row() <<
" / column=" << index.column();
236 QFileSystemModel* indexModel = (QFileSystemModel*)index.model();
237 QFileInfo fileInfo = indexModel->fileInfo(index);
238 if (fileInfo.isDir()) {
239 int rows = indexModel->rowCount(index);
240 uDebug() <<
"item has directory and has children = " << rows;
241 QItemSelectionModel* selectionModel = ui_treeView->selectionModel();
242 for(
int row = 0; row < rows; ++row) {
243 QModelIndex childIndex = indexModel->index(row, 0, index);
244 if (selectionModel->isSelected(index)) {
246 QFileInfo childInfo = indexModel->fileInfo(childIndex);
247 if (childInfo.isDir() && ui_subdirCheckBox->isChecked()) {
251 if (matchFilter(childInfo)) {
252 selectionModel->select(childIndex, QItemSelectionModel::Select);
255 selectionModel->select(childIndex, QItemSelectionModel::Deselect);
261 selectionModel->select(childIndex, QItemSelectionModel::Deselect);
265 s_recentPath = fileInfo.filePath();
267 updateSelectionCounter();
282 uDebug() <<
"recent root path: " << s_recentPath;
302 void CodeImpSelectPage::changeLanguage()
314 m_fileExtensions.clear();
317 m_fileExtensions <<
"*.ads" <<
"*.adb" <<
"*.ada";
320 m_fileExtensions <<
"*.h" <<
"*.hpp" <<
"*.hh" <<
"*.hxx" <<
"*.H";
323 m_fileExtensions <<
"*.idl";
326 m_fileExtensions <<
"*.java";
329 m_fileExtensions <<
"*.pas";
332 m_fileExtensions <<
"*.py" <<
"*.pyw";
335 m_fileExtensions <<
"*.cs";
340 uDebug() <<
"File extensions " << m_fileExtensions;
342 QFileSystemModel* model = (QFileSystemModel*)ui_treeView->model();
343 model->setNameFilters(m_fileExtensions);
345 ui_fileExtLineEdit->setText(m_fileExtensions.join(
", "));
354 return ui_languageBox->currentText();
364 QFileSystemModel* model = (QFileSystemModel*)ui_treeView->model();
365 QModelIndexList list = ui_treeView->selectionModel()->selectedIndexes();
367 foreach (QModelIndex idx, list) {
368 if (idx.row() != row && idx.column() == 0) {
369 QFileInfo fileInfo = model->fileInfo(idx);
370 if (fileInfo.isFile() && matchFilter(fileInfo)) {
371 fileList.append(fileInfo);
385 void CodeImpSelectPage::selectAll()
387 QModelIndex currIndex = ui_treeView->selectionModel()->currentIndex();
388 if (currIndex.isValid()) {
389 QFileSystemModel* model = (QFileSystemModel*)ui_treeView->model();
390 QFileInfo fileInfo = model->fileInfo(currIndex);
391 if (fileInfo.isDir()) {
392 QItemSelectionModel* selectionModel = ui_treeView->selectionModel();
393 Q_UNUSED(selectionModel);
395 if (ui_subdirCheckBox->isChecked()) {
397 ui_treeView->selectAll();
398 updateSelectionCounter();
402 uWarning() <<
"No directory was selected!";
406 uWarning() <<
"No directory was selected!";
414 void CodeImpSelectPage::deselectAll()
416 ui_treeView->clearSelection();
417 updateSelectionCounter();
423 void CodeImpSelectPage::updateSelectionCounter()
426 ui_filesNumLabel->setText(QString::number(files.size()));
429 #include "codeimpselectpage.moc"
Enum fromString(const QString &item)
Return ProgrammingLanguage corresponding to the given string.
static UMLApp * app()
Get the last created instance of this class.
void setActiveLanguage(Uml::ProgrammingLanguage::Enum pl)
Set the language for which code will be generated.
bool validatePage()
Reimplemented QWizardPage method to validate page when user clicks next button.
CodeImpSelectPage(QWidget *parent=0)
Constructor.
~CodeImpSelectPage()
Destructor.
QString toString(Enum item)
Return string corresponding to the given ProgrammingLanguage.
void treeClicked(const QModelIndex &index)
Slot for the clicked event on one of the items of the tree view widget.
QList< QFileInfo > selectedFiles()
Returns the list of files, which will be used for code import.
Uml::ProgrammingLanguage::Enum activeLanguage() const
Get the language for import and code generation.
QString language()
Returns the user selected language used for code generation.
Enum fromInt(int item)
Convert a integer item into ProgrammingLanguage representation.