|
|
|
@ -144,8 +144,6 @@ void SessionManager::loadSettings()
|
|
|
|
|
DirFilterPlugin::DirFilterPlugin (TQObject* parent, const char* name,
|
|
|
|
|
const TQStringList&)
|
|
|
|
|
:KParts::Plugin (parent, name),
|
|
|
|
|
m_pFilterMenu(0),
|
|
|
|
|
m_searchWidget(0),
|
|
|
|
|
m_oldFilterString("")
|
|
|
|
|
{
|
|
|
|
|
m_part = ::tqqt_cast<KonqDirPart*>(parent);
|
|
|
|
@ -161,12 +159,14 @@ DirFilterPlugin::DirFilterPlugin (TQObject* parent, const char* name,
|
|
|
|
|
connect (m_pFilterMenu->popupMenu(), TQT_SIGNAL (aboutToShow()),
|
|
|
|
|
TQT_SLOT (slotShowPopup()));
|
|
|
|
|
|
|
|
|
|
connect (m_part, TQT_SIGNAL (itemRemoved(const KFileItem*)),
|
|
|
|
|
connect (m_part, TQT_SIGNAL(itemRemoved(const KFileItem*)),
|
|
|
|
|
TQT_SLOT( slotItemRemoved (const KFileItem*)));
|
|
|
|
|
connect (m_part, TQT_SIGNAL (itemsAdded(const KFileItemList&)),
|
|
|
|
|
connect (m_part, TQT_SIGNAL(itemsAdded(const KFileItemList&)),
|
|
|
|
|
TQT_SLOT (slotItemsAdded(const KFileItemList&)));
|
|
|
|
|
connect (m_part, TQT_SIGNAL (itemsFilteredByMime(const KFileItemList&)),
|
|
|
|
|
connect (m_part, TQT_SIGNAL(itemsFilteredByMime(const KFileItemList&)),
|
|
|
|
|
TQT_SLOT (slotItemsAdded(const KFileItemList&)));
|
|
|
|
|
connect (m_part, TQT_SIGNAL(itemsRefresh(const KFileItemList&)),
|
|
|
|
|
TQT_SLOT (slotItemsRefresh(const KFileItemList&)));
|
|
|
|
|
connect (m_part, TQT_SIGNAL(aboutToOpenURL()), TQT_SLOT(slotOpenURL()));
|
|
|
|
|
|
|
|
|
|
// add a searchline filter for konqis icons/list views
|
|
|
|
@ -189,7 +189,10 @@ DirFilterPlugin::DirFilterPlugin (TQObject* parent, const char* name,
|
|
|
|
|
m_searchWidget = new TDEIconViewSearchLine(hbox);
|
|
|
|
|
static_cast<TDEIconViewSearchLine*>(m_searchWidget)->setIconView(static_cast<TQIconView*>(m_part->scrollWidget()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
m_searchWidget=NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ( m_searchWidget )
|
|
|
|
|
{
|
|
|
|
@ -407,7 +410,7 @@ void DirFilterPlugin::slotItemSelected (int id)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void DirFilterPlugin::slotItemsAdded (const KFileItemList& list)
|
|
|
|
|
void DirFilterPlugin::slotItemsAdded(const KFileItemList &list)
|
|
|
|
|
{
|
|
|
|
|
KURL url = m_part->url();
|
|
|
|
|
|
|
|
|
@ -438,10 +441,10 @@ void DirFilterPlugin::slotItemsAdded (const KFileItemList& list)
|
|
|
|
|
continue;
|
|
|
|
|
TQString mimeType = mime->name();
|
|
|
|
|
|
|
|
|
|
if (!m_pMimeInfo.contains (mimeType))
|
|
|
|
|
if (!m_pMimeInfo.contains(mimeType))
|
|
|
|
|
{
|
|
|
|
|
MimeInfo& mimeInfo = m_pMimeInfo[mimeType];
|
|
|
|
|
TQStringList filters = m_part->mimeFilter ();
|
|
|
|
|
TQStringList filters = m_part->mimeFilter();
|
|
|
|
|
mimeInfo.useAsFilter = (!filters.isEmpty () && filters.contains (mimeType));
|
|
|
|
|
mimeInfo.mimeComment = mime->comment();
|
|
|
|
|
mimeInfo.iconName = mime->icon(KURL(), false);
|
|
|
|
@ -454,7 +457,7 @@ void DirFilterPlugin::slotItemsAdded (const KFileItemList& list)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void DirFilterPlugin::slotItemRemoved (const KFileItem* item)
|
|
|
|
|
void DirFilterPlugin::slotItemRemoved(const KFileItem* item)
|
|
|
|
|
{
|
|
|
|
|
if (!item || !m_part)
|
|
|
|
|
return;
|
|
|
|
@ -474,24 +477,122 @@ void DirFilterPlugin::slotItemRemoved (const KFileItem* item)
|
|
|
|
|
|
|
|
|
|
TQString mimeType = item->mimetype().stripWhiteSpace();
|
|
|
|
|
|
|
|
|
|
if (m_pMimeInfo.contains (mimeType)) {
|
|
|
|
|
if (m_pMimeInfo.contains(mimeType)) {
|
|
|
|
|
MimeInfo info = m_pMimeInfo [mimeType];
|
|
|
|
|
|
|
|
|
|
if (info.filenames.size () > 1)
|
|
|
|
|
m_pMimeInfo [mimeType].filenames.remove (item->name ());
|
|
|
|
|
m_pMimeInfo [mimeType].filenames.remove(item->name());
|
|
|
|
|
else {
|
|
|
|
|
if (info.useAsFilter) {
|
|
|
|
|
TQStringList filters = m_part->mimeFilter ();
|
|
|
|
|
filters.remove (mimeType);
|
|
|
|
|
m_part->setMimeFilter (filters);
|
|
|
|
|
SessionManager::self()->save (m_part->url(), filters);
|
|
|
|
|
TQTimer::singleShot( 0, this, TQT_SLOT(slotTimeout()) );
|
|
|
|
|
filters.remove(mimeType);
|
|
|
|
|
m_part->setMimeFilter(filters);
|
|
|
|
|
SessionManager::self()->save(m_part->url(), filters);
|
|
|
|
|
// Use 1ms delay to avoid possible race conditions
|
|
|
|
|
TQTimer::singleShot(1, this, TQT_SLOT(slotTimeout()));
|
|
|
|
|
}
|
|
|
|
|
m_pMimeInfo.remove (mimeType);
|
|
|
|
|
m_pMimeInfo.remove(mimeType);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void DirFilterPlugin::slotItemsRefresh(const KFileItemList &list)
|
|
|
|
|
{
|
|
|
|
|
if (list.count() == 0 || !m_part || !m_part->nameFilter().isEmpty())
|
|
|
|
|
{
|
|
|
|
|
m_pFilterMenu->setEnabled (m_part->nameFilter().isEmpty());
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if ( ::tqqt_cast<TDEListView*>(m_part->scrollWidget()) )
|
|
|
|
|
{
|
|
|
|
|
static_cast<TDEListViewSearchLine*>(m_searchWidget)->updateSearch();
|
|
|
|
|
}
|
|
|
|
|
else if ( ::tqqt_cast<TQIconView*>(m_part->scrollWidget()) )
|
|
|
|
|
{
|
|
|
|
|
static_cast<TDEIconViewSearchLine*>(m_searchWidget)->updateSearch();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TQMap<TQString,bool> itemsMap;
|
|
|
|
|
if (::tqqt_cast<TDEListView*>(m_part->scrollWidget()))
|
|
|
|
|
{
|
|
|
|
|
TQListView *listview = ::tqqt_cast<TDEListView*>(m_part->scrollWidget());
|
|
|
|
|
for (TQListViewItemIterator lv_it(listview); lv_it.current(); ++lv_it)
|
|
|
|
|
{
|
|
|
|
|
itemsMap.insert(lv_it.current()->text(0), false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if ( ::tqqt_cast<TQIconView*>(m_part->scrollWidget()) )
|
|
|
|
|
{
|
|
|
|
|
TQIconView *iconview = ::tqqt_cast<TQIconView*>(m_part->scrollWidget());
|
|
|
|
|
for (TQIconViewItem *item = iconview->firstItem(); item; item = item->nextItem())
|
|
|
|
|
{
|
|
|
|
|
itemsMap.insert(item->text(), false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MimeInfoIterator it;
|
|
|
|
|
for (it = m_pMimeInfo.begin(); it != m_pMimeInfo.end(); /*empty*/)
|
|
|
|
|
{
|
|
|
|
|
TQMap<TQString,bool>::iterator file_it;
|
|
|
|
|
for ( file_it = it.data().filenames.begin(); file_it != it.data().filenames.end(); /*empty*/)
|
|
|
|
|
{
|
|
|
|
|
if (!itemsMap.contains(file_it.key()))
|
|
|
|
|
{
|
|
|
|
|
// Remove mimeInfo for this file (the file was problably renamed)
|
|
|
|
|
TQMap<TQString,bool>::iterator del_fit = file_it;
|
|
|
|
|
++file_it;
|
|
|
|
|
it.data().filenames.remove(del_fit);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
++file_it;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (it.data().filenames.size() == 0)
|
|
|
|
|
{
|
|
|
|
|
if (it.data().useAsFilter) {
|
|
|
|
|
TQStringList filters = m_part->mimeFilter();
|
|
|
|
|
filters.remove(it.key());
|
|
|
|
|
m_part->setMimeFilter(filters);
|
|
|
|
|
SessionManager::self()->save(m_part->url(), filters);
|
|
|
|
|
// Use 1ms delay to avoid possible race conditions
|
|
|
|
|
TQTimer::singleShot(1, this, TQT_SLOT(slotTimeout()));
|
|
|
|
|
}
|
|
|
|
|
MimeInfoIterator del_mit = it;
|
|
|
|
|
++it;
|
|
|
|
|
m_pMimeInfo.remove(del_mit);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
++it;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (KFileItemListIterator fi_it(list); fi_it.current (); ++fi_it)
|
|
|
|
|
{
|
|
|
|
|
TQString name = fi_it.current()->name();
|
|
|
|
|
KMimeType::Ptr mime = fi_it.current()->mimeTypePtr(); // don't resolve mimetype if unknown
|
|
|
|
|
if (!mime)
|
|
|
|
|
continue;
|
|
|
|
|
TQString mimeType = mime->name();
|
|
|
|
|
|
|
|
|
|
if (!m_pMimeInfo.contains(mimeType))
|
|
|
|
|
{
|
|
|
|
|
MimeInfo &mimeInfo = m_pMimeInfo[mimeType];
|
|
|
|
|
TQStringList 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
|
|
|
|
|
{
|
|
|
|
|
MimeInfo &mimeInfo = m_pMimeInfo[mimeType];
|
|
|
|
|
if (!mimeInfo.filenames.contains(name))
|
|
|
|
|
{
|
|
|
|
|
mimeInfo.filenames.insert(name, false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void DirFilterPlugin::activateSearch()
|
|
|
|
|
{
|
|
|
|
|
// FIXME: If any of the files change while they are hidden in iconview mode, they will
|
|
|
|
|