2 # Copyright (C) 2009 Anton Khirnov <wyskas@gmail.com>
4 # Nephilim is free software: you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License as published by
6 # the Free Software Foundation, either version 3 of the License, or
7 # (at your option) any later version.
9 # Nephilim is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
14 # You should have received a copy of the GNU General Public License
15 # along with Nephilim. If not, see <http://www.gnu.org/licenses/>.
18 from PyQt4
import QtGui
, QtCore
19 from PyQt4
.QtCore
import QVariant
22 from ..plugin
import Plugin
24 class Filebrowser(Plugin
):
27 self
.o
= wgFilebrowser(self
)
33 return 'A file browser that allows adding files not in collection.'
35 def _get_dock_widget(self
):
36 return self
._create
_dock
(self
.o
)
38 class wgFilebrowser(QtGui
.QWidget
):
44 def __init__(self
, plugin
):
45 QtGui
.QWidget
.__init
__(self
)
48 self
.model
= QtGui
.QDirModel()
49 self
.model
.setFilter(QtCore
.QDir
.AllDirs|QtCore
.QDir
.AllEntries
)
50 self
.model
.setSorting(QtCore
.QDir
.DirsFirst
)
52 self
.view
= QtGui
.QListView()
53 self
.view
.setModel(self
.model
)
54 self
.view
.setRootIndex(self
.model
.index(os
.path
.expanduser('~')))
55 self
.view
.setSelectionMode(QtGui
.QTreeWidget
.ExtendedSelection
)
56 self
.connect(self
.view
, QtCore
.SIGNAL('activated(const QModelIndex&)'), self
.item_activated
)
58 self
.path
= QtGui
.QLineEdit(self
.model
.filePath(self
.view
.rootIndex()))
59 self
.connect(self
.path
, QtCore
.SIGNAL('returnPressed()'), self
.path_changed
)
61 self
.setLayout(QtGui
.QVBoxLayout())
62 self
.layout().setSpacing(0)
63 self
.layout().setMargin(0)
64 self
.layout().addWidget(self
.path
)
65 self
.layout().addWidget(self
.view
)
67 def item_activated(self
, index
):
68 if self
.model
.hasChildren(index
):
69 self
.view
.setRootIndex(index
)
70 self
.path
.setText(self
.model
.filePath(index
))
72 if not 'file://' in self
.plugin
.mpclient().urlhandlers():
73 self
.set_status('file:// handler not available. Connect via unix domain sockets.')
76 for index
in self
.view
.selectedIndexes():
77 paths
.append(u
'file://' + unicode(self
.model
.filePath(index
)))
78 self
.plugin
.mpclient().add(paths
)
80 def path_changed(self
):
81 if os
.path
.isdir(self
.path
.text()):
82 self
.view
.setRootIndex(self
.model
.index(self
.path
.text()))