35 #include <KActionCollection>
37 #include <KMessageBox>
38 #include <KStandardAction>
40 #include <KPluginFactory>
42 #include <QtCore/QFile>
43 #include <QtCore/QTimer>
44 #include <QtCore/QByteArray>
45 #include <QtCore/QDir>
46 #include <QtGui/QScrollArea>
54 K_EXPORT_PLUGIN(filelightPartFactory(KAboutData(
59 ki18n(
"Displays file usage in an easy to understand way."),
60 KAboutData::License_GPL,
61 ki18n(
"(c) 2002-2004 Max Howell\n\
62 (c) 2008-2013 Martin T. Sandsmark"),
64 "http://utils.kde.org/projects/filelight",
65 "martin.sandsmark@kde.org").
66 setProgramIconName(QLatin1String(
APP_NAME)).
75 : ReadOnlyPart(parent)
83 setComponentData(filelightPartFactory::componentData());
84 setXMLFile(QLatin1String(
"filelightpartui.rc" ));
86 QScrollArea *scrollArea =
new QScrollArea(parentWidget);
87 scrollArea->setWidgetResizable(
true);
88 setWidget(scrollArea);
91 scrollArea->setWidget(partWidget);
93 partWidget->setBackgroundRole(QPalette::Base);
94 partWidget->setAutoFillBackground(
true);
96 m_layout =
new QGridLayout();
97 partWidget->setLayout(m_layout);
102 m_layout->addWidget(
m_map);
104 m_stateWidget =
new ProgressBox(statusBar(),
this, m_manager);
105 m_layout->addWidget(m_stateWidget);
106 m_stateWidget->hide();
108 m_numberOfFiles =
new QLabel();
109 m_statusbar->addStatusBarItem(m_numberOfFiles, 0,
true);
111 KStandardAction::zoomIn(
m_map, SLOT(zoomIn()), actionCollection());
112 KStandardAction::zoomOut(
m_map, SLOT(zoomOut()), actionCollection());
113 KAction *action = actionCollection()->addAction(QLatin1String(
"configure_filelight"));
114 action->setText(i18n(
"Configure Filelight..."));
115 action->setIcon(KIcon(QLatin1String(
"configure")));
116 connect(action, SIGNAL(triggered()),
this, SLOT(configFilelight()));
118 connect(
m_map, SIGNAL(created(
const Folder*)), SIGNAL(completed()));
120 connect(
m_map, SIGNAL(activated(KUrl)), SLOT(updateURL(KUrl)));
123 connect(
m_map, SIGNAL(giveMeTreeFor(KUrl)), SLOT(updateURL(KUrl)));
124 connect(
m_map, SIGNAL(giveMeTreeFor(KUrl)), SLOT(openUrl(KUrl)));
126 connect(m_manager, SIGNAL(completed(
Folder*)), SLOT(scanCompleted(
Folder*)));
127 connect(m_manager, SIGNAL(aboutToEmptyCache()),
m_map, SLOT(invalidate()));
129 QTimer::singleShot(0,
this, SLOT(postInit()));
142 stateChanged(QLatin1String(
"scan_failed" ));
154 #define KMSG(s) KMessageBox::information(widget(), s)
157 uri.cleanPath(KUrl::SimplifyDirSeparators);
158 const QString path = uri.path(KUrl::AddTrailingSlash);
159 const QByteArray path8bit = QFile::encodeName(path);
160 const bool isLocal = uri.protocol() == QLatin1String(
"file" );
166 else if (!uri.isValid())
168 KMSG(i18n(
"The entered URL cannot be parsed; it is invalid."));
170 else if ((!isLocal && path[0] != QLatin1Char(
'/' )) || (isLocal && !QDir::isAbsolutePath(path)))
172 KMSG(i18n(
"Filelight only accepts absolute paths, eg. /%1", path));
174 else if (isLocal && access(path8bit, F_OK) != 0)
176 KMSG(i18n(
"Folder not found: %1", path));
178 else if (isLocal && !QDir(path).isReadable())
180 KMSG(i18n(
"Unable to enter: %1\nYou do not have access rights to this location.", path));
188 m_stateWidget->show();
189 m_layout->addWidget(m_stateWidget);
200 if (m_manager->
abort())
201 statusBar()->showMessage(i18n(
"Aborting Scan..."));
204 m_stateWidget->hide();
208 return ReadOnlyPart::closeUrl();
212 Part::updateURL(
const KUrl &u)
215 emit m_ext->openUrlNotify();
216 emit m_ext->setLocationBarUrl(u.prettyUrl());
233 connect(dialog, SIGNAL(canvasIsDirty(
int)), m_map, SLOT(refresh(
int)));
234 connect(dialog, SIGNAL(mapIsInvalid()), m_manager, SLOT(emptyCache()));
240 Part::start(
const KUrl &url)
243 connect(m_map, SIGNAL(mouseHover(QString)), statusBar(), SLOT(message(QString)));
244 connect(m_map, SIGNAL(created(
const Folder*)), statusBar(), SLOT(clear()));
251 m_numberOfFiles->setText(QString());
253 if (m_manager->
start(url)) {
256 const QString s = i18n(
"Scanning: %1",
prettyUrl());
257 stateChanged(QLatin1String(
"scan_started" ));
259 emit setWindowCaption(s);
260 statusBar()->showMessage(s);
274 if (m_summary && !m_summary->isHidden()) {
284 m_stateWidget->show();
289 Part::scanCompleted(
Folder *tree)
292 statusBar()->showMessage(i18n(
"Scan completed, generating map..."));
294 m_stateWidget->hide();
298 stateChanged(QLatin1String(
"scan_complete" ));
301 stateChanged(QLatin1String(
"scan_failed" ));
302 emit canceled(i18n(
"Scan failed: %1",
prettyUrl()));
303 emit setWindowCaption(QString());
305 statusBar()->clearMessage();
312 Part::mapChanged(
const Folder *tree)
318 const int fileCount = tree->
children();
319 const QString text = ( fileCount == 0 ) ?
321 i18np(
"1 file",
"%1 files",fileCount);
323 m_numberOfFiles->setText(text);
329 if (m_summary == 0) {
331 m_summary->setObjectName(QLatin1String(
"summaryWidget" ));
332 connect(m_summary, SIGNAL(activated(KUrl)), SLOT(
openUrl(KUrl)));
334 m_layout->addWidget(m_summary);
336 else m_summary->show();
http QObject const QList< QVariant > m_ext(new BrowserExtension(this))
K_PLUGIN_FACTORY(filelightPartFactory, registerPlugin< Part >();) K_EXPORT_PLUGIN(filelightPartFactory(KAboutData("filelightpart"
Part(QWidget *, QObject *, const QList< QVariant > &)
QString prettyUrl() const
virtual bool openUrl(const KUrl &)
http QObject const QList< QVariant > m_summary(0)
http QObject const QList< QVariant > m_statusbar(new StatusBarExtension(this))
http QObject const QList< QVariant > m_started(false)
http QObject const QList< QVariant > m_map(0)