Created a new delegate (FileSystemBrowseDelegate) and a new widget
[emufront] / src / delegates / filesystembrowsedelegate.cpp
1 // EmuFront
2 // Copyright 2010 Mikko Keinänen
3 //
4 // This file is part of EmuFront.
5 //
6 //
7 // EmuFront is free software: you can redistribute it and/or modify
8 // it under the terms of the GNU General Public License version 2 as published by
9 // the Free Software Foundation and appearing in the file gpl.txt included in the
10 // packaging of this file.
11 //
12 // EmuFront is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 // GNU General Public License for more details.
16 //
17 // You should have received a copy of the GNU General Public License
18 // along with EmuFront.  If not, see <http://www.gnu.org/licenses/>.
19
20 #include "filesystembrowsedelegate.h"
21 #include "filepathselectorwidget.h"
22
23 FileSystemBrowseDelegate::FileSystemBrowseDelegate(QWidget *parent) :
24     QStyledItemDelegate(parent)
25 {
26 }
27
28 QWidget* FileSystemBrowseDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
29 {
30     FilePathSelectorWidget *editor = new FilePathSelectorWidget(parent);
31     connect(editor, SIGNAL(filePathUpdated()), this, SLOT(commitAndCloseEditor()));
32     return editor;
33 }
34
35 void FileSystemBrowseDelegate::commitAndCloseEditor()
36 {
37     FilePathSelectorWidget *editor = qobject_cast<FilePathSelectorWidget *>(sender());
38     emit commitData(editor);
39     emit closeEditor(editor);
40 }
41
42 void FileSystemBrowseDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
43 {
44     FilePathSelectorWidget *wdg = qobject_cast<FilePathSelectorWidget *>(editor);
45     QString path = wdg->getFilePath();
46     model->setData(index, path);
47 }
48
49 void FileSystemBrowseDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
50 {
51     QString path = index.model()->data(index, Qt::DisplayRole).toString();
52     FilePathSelectorWidget *fpwdg = qobject_cast<FilePathSelectorWidget *>(editor);
53     fpwdg->setFilePath(path);
54 }