diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | 84da08d7b7fcda12c85caeb5a10b4903770a6f69 (patch) | |
tree | 2a6aea76f2dfffb4cc04bb907c4725af94f70e72 /konq-plugins/dirfilter | |
download | tdeaddons-84da08d7b7fcda12c85caeb5a10b4903770a6f69.tar.gz tdeaddons-84da08d7b7fcda12c85caeb5a10b4903770a6f69.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdeaddons@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'konq-plugins/dirfilter')
-rw-r--r-- | konq-plugins/dirfilter/Makefile.am | 19 | ||||
-rw-r--r-- | konq-plugins/dirfilter/dirfilterplugin.cpp | 492 | ||||
-rw-r--r-- | konq-plugins/dirfilter/dirfilterplugin.desktop | 125 | ||||
-rw-r--r-- | konq-plugins/dirfilter/dirfilterplugin.h | 132 | ||||
-rw-r--r-- | konq-plugins/dirfilter/dirfilterplugin.rc | 13 |
5 files changed, 781 insertions, 0 deletions
diff --git a/konq-plugins/dirfilter/Makefile.am b/konq-plugins/dirfilter/Makefile.am new file mode 100644 index 0000000..fe81189 --- /dev/null +++ b/konq-plugins/dirfilter/Makefile.am @@ -0,0 +1,19 @@ +kde_module_LTLIBRARIES = libdirfilterplugin.la + +AM_CPPFLAGS = $(all_includes) +METASOURCES = AUTO + +libdirfilterplugin_la_SOURCES = dirfilterplugin.cpp +libdirfilterplugin_la_LIBADD = -lkonq +libdirfilterplugin_la_LDFLAGS = -module $(KDE_PLUGIN) $(all_libraries) + +iconviewdir = $(kde_datadir)/konqiconview/kpartplugins +iconview_DATA = dirfilterplugin.rc dirfilterplugin.desktop +listviewdir = $(kde_datadir)/konqlistview/kpartplugins +listview_DATA = dirfilterplugin.rc dirfilterplugin.desktop + +appsdir = $(kde_appsdir)/.hidden +apps_DATA = dirfilterplugin.desktop + +messages: rc.cpp + $(XGETTEXT) *.cpp *.h -o $(podir)/dirfilterplugin.pot diff --git a/konq-plugins/dirfilter/dirfilterplugin.cpp b/konq-plugins/dirfilter/dirfilterplugin.cpp new file mode 100644 index 0000000..0966f19 --- /dev/null +++ b/konq-plugins/dirfilter/dirfilterplugin.cpp @@ -0,0 +1,492 @@ +/* + Copyright (C) 2000, 2001, 2002 Dawit Alemayehu <adawit@kde.org> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#include <unistd.h> +#include <sys/types.h> + +#include <qtimer.h> +#include <qapplication.h> +#include <qlabel.h> +#include <qpushbutton.h> +#include <qhbox.h> +#include <qwhatsthis.h> +#include <qiconview.h> +#include <klistview.h> + +#include <kdebug.h> +#include <klocale.h> +#include <kinstance.h> + +#include <kaction.h> +#include <kpopupmenu.h> +#include <kmessagebox.h> +#include <kiconloader.h> + +#include <kdirlister.h> +#include <klistviewsearchline.h> +#include <kiconviewsearchline.h> +#include <konq_dirpart.h> +#include <konq_propsview.h> +#include <kstaticdeleter.h> +#include <kgenericfactory.h> +#include <kparts/browserextension.h> + +#include "dirfilterplugin.h" + +SessionManager* SessionManager::m_self = 0; +static KStaticDeleter<SessionManager> dirfiltersd; + +SessionManager *SessionManager::self () +{ + if (!m_self) + m_self = dirfiltersd.setObject(m_self, new SessionManager); + + return m_self; +} + +SessionManager::SessionManager() +{ + m_bSettingsLoaded = false; + loadSettings (); +} + +SessionManager::~SessionManager() +{ + saveSettings(); + m_self = 0; +} + +QString SessionManager::generateKey (const KURL& url) const +{ + QString key; + + key = url.protocol (); + key += ':'; + + if (!url.host ().isEmpty ()) + { + key += url.host (); + key += ':'; + } + + key += url.path (); + key += ':'; + key += QString::number (m_pid); + + return key; +} + +QStringList SessionManager::restoreMimeFilters (const KURL& url) const +{ + QString key(generateKey(url)); + return m_filters[key]; +} + +QString SessionManager::restoreTypedFilter (const KURL& url) const +{ + QString key(generateKey(url)); + return m_typedFilter[key]; +} + +void SessionManager::save (const KURL& url, const QStringList& filters) +{ + QString key = generateKey(url); + m_filters[key] = filters; +} + +void SessionManager::save (const KURL& url, const QString& typedFilter) +{ + QString key = generateKey(url); + m_typedFilter[key] = typedFilter; +} + +void SessionManager::saveSettings() +{ + KConfig cfg ("dirfilterrc", false, false); + cfg.setGroup ("General"); + + cfg.writeEntry ("ShowCount", showCount); + cfg.writeEntry ("UseMultipleFilters", useMultipleFilters); + cfg.sync(); +} + +void SessionManager::loadSettings() +{ + if (m_bSettingsLoaded) + return; + + KConfig cfg ("dirfilterrc", false, false); + cfg.setGroup ("General"); + + showCount = cfg.readBoolEntry ("ShowCount", false); + useMultipleFilters = cfg.readBoolEntry ("UseMultipleFilters", true); + m_pid = getpid (); + m_bSettingsLoaded = true; +} + + + +DirFilterPlugin::DirFilterPlugin (QObject* parent, const char* name, + const QStringList&) + :KParts::Plugin (parent, name), + m_pFilterMenu(0), + m_searchWidget(0) +{ + m_part = ::qt_cast<KonqDirPart*>(parent); + + if ( !m_part || !m_part->scrollWidget() ) + return; + + m_pFilterMenu = new KActionMenu (i18n("View F&ilter"), "filter", + actionCollection(), "filterdir"); + m_pFilterMenu->setDelayed (false); + m_pFilterMenu->setWhatsThis(i18n("Allow to filter the currently displayed items by filetype.")); + + connect (m_pFilterMenu->popupMenu(), SIGNAL (aboutToShow()), + SLOT (slotShowPopup())); + + connect (m_part, SIGNAL (itemRemoved(const KFileItem*)), + SLOT( slotItemRemoved (const KFileItem*))); + connect (m_part, SIGNAL (itemsAdded(const KFileItemList&)), + SLOT (slotItemsAdded(const KFileItemList&))); + connect (m_part, SIGNAL (itemsFilteredByMime(const KFileItemList&)), + SLOT (slotItemsAdded(const KFileItemList&))); + connect (m_part, SIGNAL(aboutToOpenURL()), SLOT(slotOpenURL())); + + // add a searchline filter for konqis icons/list views + QHBox *hbox = new QHBox(m_part->widget()); + hbox->hide(); + + KAction *clear = new KAction(i18n("Clear Filter Field"), + QApplication::reverseLayout() ? "clear_left" : "locationbar_erase", + 0, 0, 0, actionCollection(), "clear_filter"); + + clear->setWhatsThis(i18n("Clear filter field<p>Clears the content of the filter field.")); + + if ( ::qt_cast<KListView*>(m_part->scrollWidget()) ) + { + m_searchWidget = new KListViewSearchLine(hbox); + static_cast<KListViewSearchLine*>(m_searchWidget)->setListView(static_cast<KListView*>(m_part->scrollWidget())); + } + else if ( ::qt_cast<QIconView*>(m_part->scrollWidget()) ) + { + m_searchWidget = new KIconViewSearchLine(hbox); + static_cast<KIconViewSearchLine*>(m_searchWidget)->setIconView(static_cast<QIconView*>(m_part->scrollWidget())); + } + + + if ( m_searchWidget ) + { + QWhatsThis::add(m_searchWidget, i18n("Enter here a text which an item in the view must contain anywhere to be shown.")); + connect(clear, SIGNAL(activated()), m_searchWidget, SLOT(clear())); + } + + KWidgetAction *filterAction = new KWidgetAction(hbox, i18n("Filter Field"), + 0, 0, 0, actionCollection(), "toolbar_filter_field"); + filterAction->setShortcutConfigurable(false); +} + +DirFilterPlugin::~DirFilterPlugin() +{ + delete m_pFilterMenu; +} + +void DirFilterPlugin::slotOpenURL () +{ + KURL url = m_part->url(); + + //kdDebug(90190) << "DirFilterPlugin: New URL : " << url.url() << endl; + //kdDebug(90190) << "DirFilterPlugin: Current URL: " << m_pURL.url() << endl; + + if (m_pURL != url) + { + //Clears the hidden list which is by now outdated... + if (m_searchWidget) + { + SessionManager::self()->save(m_pURL, m_searchWidget->text()); + m_searchWidget->clear(); + + QString typedFilter(SessionManager::self()->restoreTypedFilter(url)); + m_searchWidget->completionObject()->addItem(typedFilter); + m_searchWidget->setText(typedFilter); + } + + m_pURL = url; + m_pMimeInfo.clear(); + m_part->setMimeFilter (SessionManager::self()->restoreMimeFilters(url)); + } +} + +void DirFilterPlugin::slotShowPopup() +{ + if (!m_part) + { + m_pFilterMenu->setEnabled (false); + return; + } + + int id = 0; + uint enableReset = 0; + + QString label; + QStringList inodes; + + m_pFilterMenu->popupMenu()->clear(); + m_pFilterMenu->popupMenu()->insertTitle (i18n("Only Show Items of Type")); + + MimeInfoIterator it = m_pMimeInfo.begin(); + const MimeInfoIterator end = m_pMimeInfo.end(); + for (; it != end ; ++it) + { + if (it.key().startsWith("inode")) + { + inodes << it.key(); + continue; + } + + if (!SessionManager::self()->showCount) + label = it.data().mimeComment; + else + { + label = it.data().mimeComment; + label += " ("; + label += QString::number (it.data().filenames.size ()); + label += ")"; + } + + m_pMimeInfo[it.key()].id = m_pFilterMenu->popupMenu()->insertItem ( + SmallIconSet(it.data().iconName), label, + this, SLOT(slotItemSelected(int)), 0, ++id); + + if (it.data().useAsFilter) + { + m_pFilterMenu->popupMenu()->setItemChecked (id, true); + enableReset++; + } + } + + // Add all the items that have mime-type of "inode/*" here... + if (!inodes.isEmpty()) + { + m_pFilterMenu->popupMenu()->insertSeparator (); + + QStringList::Iterator it = inodes.begin(); + QStringList::Iterator end = inodes.end(); + + for (; it != end; ++it) + { + if (!SessionManager::self()->showCount) + label = m_pMimeInfo[(*it)].mimeComment; + else + { + label = m_pMimeInfo[(*it)].mimeComment; + label += " ("; + label += QString::number (m_pMimeInfo[(*it)].filenames.size ()); + label += ")"; + } + + m_pMimeInfo[(*it)].id = m_pFilterMenu->popupMenu()->insertItem ( + SmallIconSet(m_pMimeInfo[(*it)].iconName), label, + this, SLOT(slotItemSelected(int)), 0, ++id); + + if (m_pMimeInfo[(*it)].useAsFilter) + { + m_pFilterMenu->popupMenu()->setItemChecked (id, true); + enableReset ++; + } + } + } + + m_pFilterMenu->popupMenu()->insertSeparator (); + id = m_pFilterMenu->popupMenu()->insertItem (i18n("Use Multiple Filters"), + this, SLOT(slotMultipleFilters())); + m_pFilterMenu->popupMenu()->setItemEnabled (id, enableReset <= 1); + m_pFilterMenu->popupMenu()->setItemChecked (id, SessionManager::self()->useMultipleFilters); + + id = m_pFilterMenu->popupMenu()->insertItem (i18n("Show Count"), this, + SLOT(slotShowCount())); + m_pFilterMenu->popupMenu()->setItemChecked (id, SessionManager::self()->showCount); + + id = m_pFilterMenu->popupMenu()->insertItem (i18n("Reset"), this, + SLOT(slotReset())); + + m_pFilterMenu->popupMenu()->setItemEnabled (id, enableReset); +} + +void DirFilterPlugin::slotItemSelected (int id) +{ + if (!m_part) + return; + + MimeInfoIterator it = m_pMimeInfo.begin(); + while (it != m_pMimeInfo.end () && id != it.data().id) + it++; + + if (it != m_pMimeInfo.end()) + { + QStringList filters; + + if (it.data().useAsFilter) + { + it.data().useAsFilter = false; + filters = m_part->mimeFilter (); + if (filters.remove (it.key())) + m_part->setMimeFilter (filters); + } + else + { + m_pMimeInfo[it.key()].useAsFilter = true; + + if (SessionManager::self()->useMultipleFilters) + { + filters = m_part->mimeFilter (); + filters << it.key(); + } + else + { + filters << it.key(); + + MimeInfoIterator item = m_pMimeInfo.begin(); + while ( item != m_pMimeInfo.end() ) + { + if ( item != it ) + item.data().useAsFilter = false; + item++; + } + } + + m_part->setMimeFilter (filters); + } + + KURL url = m_part->url(); + m_part->openURL (url); + SessionManager::self()->save (url, filters); + } +} + +void DirFilterPlugin::slotItemsAdded (const KFileItemList& list) +{ + KURL url = m_part->url(); + + if (list.count() == 0 || !m_part || !m_part->nameFilter().isEmpty()) + { + m_pFilterMenu->setEnabled (m_part->nameFilter().isEmpty()); + return; + } + + // Make sure the filter menu is enabled once a named + // filter is removed. + if (!m_pFilterMenu->isEnabled()) + m_pFilterMenu->setEnabled (true); + + for (KFileItemListIterator it (list); it.current (); ++it) + { + QString name = it.current()->name(); + KMimeType::Ptr mime = it.current()->mimeTypePtr(); // don't resolve mimetype if unknown + if (!mime) + continue; + QString mimeType = mime->name(); + + if (!m_pMimeInfo.contains (mimeType)) + { + MimeInfo& mimeInfo = m_pMimeInfo[mimeType]; + QStringList filters = m_part->mimeFilter (); + mimeInfo.useAsFilter = (!filters.isEmpty () && + filters.contains (mimeType)); + mimeInfo.mimeComment = mime->comment(); + mimeInfo.iconName = mime->icon(KURL(), false); + mimeInfo.filenames.insert(name, false); + } + else + { + m_pMimeInfo[mimeType].filenames.insert(name, false); + } + } +} + +void DirFilterPlugin::slotItemRemoved (const KFileItem* item) +{ + if (!item || !m_part) + return; + + QString mimeType = item->mimetype().stripWhiteSpace(); + + if (m_pMimeInfo.contains (mimeType)) + { + MimeInfo info = m_pMimeInfo [mimeType]; + + if (info.filenames.size () > 1) + m_pMimeInfo [mimeType].filenames.remove (item->name ()); + else + { + if (info.useAsFilter) + { + QStringList filters = m_part->mimeFilter (); + filters.remove (mimeType); + m_part->setMimeFilter (filters); + SessionManager::self()->save (m_part->url(), filters); + QTimer::singleShot( 0, this, SLOT(slotTimeout()) ); + } + m_pMimeInfo.remove (mimeType); + } + } +} + +void DirFilterPlugin::slotReset() +{ + if (!m_part) + return; + + MimeInfoIterator it = m_pMimeInfo.begin(); + for (; it != m_pMimeInfo.end(); ++it) + it.data().useAsFilter = false; + + QStringList filters; + KURL url = m_part->url(); + + m_part->setMimeFilter (filters); + SessionManager::self()->save (url, filters); + m_part->openURL (url); +} + +void DirFilterPlugin::slotShowCount() +{ + if (SessionManager::self()->showCount) + SessionManager::self()->showCount = false; + else + SessionManager::self()->showCount = true; +} + +void DirFilterPlugin::slotMultipleFilters() +{ + if (SessionManager::self()->useMultipleFilters) + SessionManager::self()->useMultipleFilters = false; + else + SessionManager::self()->useMultipleFilters = true; +} + +void DirFilterPlugin::slotTimeout() +{ + if (m_part) + m_part->openURL (m_part->url()); +} + +typedef KGenericFactory<DirFilterPlugin> DirFilterFactory; +K_EXPORT_COMPONENT_FACTORY (libdirfilterplugin, DirFilterFactory("dirfilterplugin")) + +#include "dirfilterplugin.moc" diff --git a/konq-plugins/dirfilter/dirfilterplugin.desktop b/konq-plugins/dirfilter/dirfilterplugin.desktop new file mode 100644 index 0000000..31dfcf0 --- /dev/null +++ b/konq-plugins/dirfilter/dirfilterplugin.desktop @@ -0,0 +1,125 @@ +[Desktop Entry] +Type=Service +X-KDE-PluginInfo-Author=Dawit Alemayehu,Martin Koller +X-KDE-PluginInfo-Email=adawit@kde.org,m.koller@surfeu.at +X-KDE-PluginInfo-Name=DirFilter +X-KDE-PluginInfo-Version=3.4 +X-KDE-PluginInfo-Website= +X-KDE-PluginInfo-Category=Tools +X-KDE-PluginInfo-Depends= +X-KDE-PluginInfo-License=GPL +X-KDE-PluginInfo-EnabledByDefault=true +Name=Directory Filter Plugin +Name[bg]=Приставка за филтриране на директории +Name[br]=Lugent sil ar renkelloù +Name[bs]=Plugin za filtriranje direktorija +Name[ca]=Connector filtre del directori +Name[cs]=Modul pro filtrování adresářů +Name[da]=Mappefilter-plugin +Name[de]=Ordnerfilter-Modul +Name[el]=Πρόσθετο φίλτρου καταλόγων +Name[eo]=Dosierujfiltrila kromaĵo +Name[es]=Complemento de filtrado de carpetas +Name[et]=Kataloogifiltri plugin +Name[eu]=Direktorioen iragazki plugina +Name[fa]=وصلۀ پالایۀ فهرست راهنما +Name[fi]=Hakemistosuodinsovelma +Name[fr]=Module de filtrage de dossiers +Name[fy]=Mappenfilterplugin +Name[gl]=Plugin de Filtraxe de Cartafoles +Name[he]=תוסף מסנן ספריות +Name[hi]=डिरेक्ट्री फ़िल्टर प्लगइन +Name[hr]=Dodatak filtra mapa +Name[hu]=Könyvtárszűrő bővítőmodul +Name[is]=Íforrit sem síar möppur +Name[it]=Plugin per il filtro delle directory +Name[ja]=ディレクトリ フィルタ プラグイン +Name[ka]=დირექტორიის ფილტრის მოდული +Name[kk]=Каталог сүзгісі +Name[km]=កម្មវិធីជំនួយតម្រងថត +Name[lt]=Aplanko filtro priedas +Name[mk]=Приклучок за филтирање папки +Name[ms]=Plugin Penapis Direktori +Name[nb]=Programtillegg til mappefilter +Name[nds]=Ornerfilter-Moduul +Name[ne]=डाइरेक्टरी फिल्टर प्लगइन +Name[nl]=Mappenfilterplugin +Name[nn]=Progamtillegg for katalogfilter +Name[pa]=ਡਾਇਰੈਕਟਰੀ ਫਿਲਟਰ ਪਲੱਗਇਨ +Name[pl]=Wtyczka filtrowania katalogów +Name[pt]='Plugin' de Filtragem de Directorias +Name[pt_BR]=Pasta do Plug-in de Filtro +Name[ru]=Фильтр папок +Name[sk]=Modul adresárového filtra +Name[sl]=Vstavek za filtriranje imenikov +Name[sr]=Прикључак за филтрирање директоријума +Name[sr@Latn]=Priključak za filtriranje direktorijuma +Name[sv]=Insticksprogram för katalogfilter +Name[ta]=அகராதி வடிகட்டி சொருகுப் பொருள் +Name[tg]=Филтри каталогҳо +Name[tr]=Dizin Filtre Eklentisi +Name[uk]=Втулок фільтра каталогів +Name[vi]=Bổ sung lọc thư mục +Name[zh_CN]=目录过滤器插件 +Name[zh_TW]=目錄過濾器外掛程式 +Comment=Directory filter plugin +Comment[af]=Gids filter inplak +Comment[ar]=ملحق تنقية المجلدات +Comment[az]=Qovluq filtr əlavəsi +Comment[bg]=Приставка за филтриране на директории +Comment[br]=Lugent sil ar renkelloù +Comment[bs]=Plugin za filtriranje direktorija +Comment[ca]=Connector filtre del directori +Comment[cs]=Modul pro filtrování adresářů +Comment[cy]=Ategyn hidl cyfeiriadur +Comment[da]=Mappefilter-plugin +Comment[de]=Ein Modul zum Filtern von Ordnerinhalten +Comment[el]=Πρόσθετο φίλτρου καταλόγου +Comment[eo]=Dosierujfiltrila kromaĵo +Comment[es]=Complemento de filtrado de carpetas +Comment[et]=Kataloogifiltri plugin +Comment[eu]=Direktorioen iragazki plugina +Comment[fa]=وصلۀ پالایۀ فهرست راهنما +Comment[fi]=Hakemistosuodinsovelma +Comment[fr]=Module de filtrage de dossiers +Comment[fy]=Mappenfilterplugin +Comment[gl]=Plugin de filtraxe de cartafoles +Comment[he]=תוסף מסנן ספריות +Comment[hi]=डिरेक्ट्री फ़िल्टर प्लगइन +Comment[hr]=Dodatak filtra mapa +Comment[hu]=Könyvtárszűrő modul +Comment[is]=Íforrit sem síar möppur +Comment[it]=Plugin per il filtro delle directory +Comment[ja]=ディレクトリフィルタプラグイン +Comment[ka]=დირექტორიის ფილტრის მოდული +Comment[kk]=Каталог сүзгі плагин модулі +Comment[km]=កម្មវិធីជំនួយតម្រងថត +Comment[lt]=Aplanko filtro priedas +Comment[mk]=Приклучок за филтирање папки +Comment[nb]=Programtillegg til mappefilter +Comment[nds]=Ornerfilter-Moduul +Comment[ne]=डाइरेक्टरी फिल्टर प्लगइन +Comment[nl]=Mappenfilterplugin +Comment[nn]=Progamtillegg for katalogfilter +Comment[pa]=ਡਾਇਰੈਕਟਰੀ ਫਿਲਟਰ ਪਲੱਗਇਨ +Comment[pl]=Wtyczka filtrowania katalogów +Comment[pt]='Plugin' de filtragem de directorias +Comment[pt_BR]=Pasta de plug-in de filtragem +Comment[ro]=Modul de filtrare a directoarelor de afişat +Comment[ru]=Модуль фильтра папок +Comment[sk]=Modul adresárového filtra +Comment[sl]=Vstavek za filtriranje imenikov +Comment[sr]=Прикључак за филтрирање директоријума +Comment[sr@Latn]=Priključak za filtriranje direktorijuma +Comment[sv]=Insticksprogram för katalogfilter +Comment[ta]= அகராதி வடிகட்டி சொருகுப்பொருள் +Comment[tg]=Модули филтри каталогҳо +Comment[tr]=Dizin filtre eklentisi +Comment[uk]=Втулок фільтра каталогів +Comment[vi]=Bổ sung lọc thư mục +Comment[xh]=Isilawulo secebo lokucoca ulwelo seplagi yangaphakathi +Comment[zh_CN]=目录过滤器插件 +Comment[zh_TW]=目錄過濾器外掛程式 +Icon=filter +X-KDE-ParentApp=konqueror +DocPath=konq-plugins/dirfilter/index.html diff --git a/konq-plugins/dirfilter/dirfilterplugin.h b/konq-plugins/dirfilter/dirfilterplugin.h new file mode 100644 index 0000000..f1c5b44 --- /dev/null +++ b/konq-plugins/dirfilter/dirfilterplugin.h @@ -0,0 +1,132 @@ +/* + Copyright (C) 2000, 2001, 2002 Dawit Alemayehu <adawit@kde.org> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef __DIR_FILTER_PLUGIN_H +#define __DIR_FILTER_PLUGIN_H + +#include <qmap.h> +#include <qstringlist.h> + + +#include <kurl.h> +#include <kfileitem.h> +#include <klibloader.h> +#include <kparts/plugin.h> + +class KActionMenu; +class KonqDirPart; +class KLineEdit; + + +namespace KParts +{ + struct URLArgs; +} + +namespace KIO +{ + class Job; +} + +class SessionManager +{ +public: + + ~SessionManager (); + static SessionManager* self (); + QStringList restoreMimeFilters (const KURL& url) const; + QString restoreTypedFilter(const KURL& url) const; + void save (const KURL& url, const QStringList& filters); + void save (const KURL& url, const QString& typedFilter); + + bool showCount; + bool useMultipleFilters; + +protected: + + QString generateKey (const KURL& url) const; + void loadSettings (); + void saveSettings (); + +private: + + SessionManager (); + +private: + + int m_pid; + bool m_bSettingsLoaded; + static SessionManager* m_self; + QMap<QString,QStringList> m_filters; + QMap<QString,QString> m_typedFilter; +}; + + +class DirFilterPlugin : public KParts::Plugin +{ + Q_OBJECT + +public: + + DirFilterPlugin (QObject* parent, const char* name, const QStringList &); + ~DirFilterPlugin (); + +protected: + + struct MimeInfo + { + MimeInfo() + { + id = 0; + useAsFilter = false; + } + + int id; + bool useAsFilter; + + QString mimeType; + QString iconName; + QString mimeComment; + + QMap<QString, bool> filenames; + }; + + void loadSettings(); + void saveSettings(); + +private slots: + void slotReset(); + void slotTimeout(); + void slotOpenURL(); + void slotShowPopup(); + void slotShowCount(); + void slotMultipleFilters(); + void slotItemSelected(int); + void slotItemRemoved(const KFileItem *); + void slotItemsAdded(const KFileItemList &); + +private: + KURL m_pURL; + KonqDirPart* m_part; + KActionMenu* m_pFilterMenu; + + KLineEdit *m_searchWidget; + QMap<QString,MimeInfo> m_pMimeInfo; + typedef QMap<QString,MimeInfo>::Iterator MimeInfoIterator; +}; +#endif diff --git a/konq-plugins/dirfilter/dirfilterplugin.rc b/konq-plugins/dirfilter/dirfilterplugin.rc new file mode 100644 index 0000000..80f60eb --- /dev/null +++ b/konq-plugins/dirfilter/dirfilterplugin.rc @@ -0,0 +1,13 @@ +<!DOCTYPE kpartplugin> +<kpartplugin name="DirFilter" library="libdirfilterplugin" version = "4"> +<MenuBar> + <Menu name="tools"><Text>&Tools</Text> + <Action name="filterdir"/> + </Menu> +</MenuBar> +<ToolBar name="extraToolBar"><text>Extra Toolbar</text> + <Action name="filterdir"/> +</ToolBar> +<ToolBar fullWidth="true" name="locationToolBar" newline="true"><text>Filter Toolbar</text> +</ToolBar> +</kpartplugin> |