diff options
Diffstat (limited to 'kcontrol/kfontinst/kcmfontinst/KFileFontView.cpp')
-rw-r--r-- | kcontrol/kfontinst/kcmfontinst/KFileFontView.cpp | 645 |
1 files changed, 0 insertions, 645 deletions
diff --git a/kcontrol/kfontinst/kcmfontinst/KFileFontView.cpp b/kcontrol/kfontinst/kcmfontinst/KFileFontView.cpp deleted file mode 100644 index fb45b44ca..000000000 --- a/kcontrol/kfontinst/kcmfontinst/KFileFontView.cpp +++ /dev/null @@ -1,645 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// Class Name : CKFileFontView -// Author : Craig Drummond -// Project : K Font Installer -// Creation Date : 31/05/2003 -// Version : $Revision$ $Date$ -// -//////////////////////////////////////////////////////////////////////////////// -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program 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 General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// -//////////////////////////////////////////////////////////////////////////////// -// (C) Craig Drummond, 2003 -//////////////////////////////////////////////////////////////////////////////// - -// -// NOTE: HEAVILY copied from tdefiledetailview.cpp... -// -// Copyright (C) 1997 Stephan Kulow <[email protected]> -// 2000, 2001 Carsten Pfeiffer <[email protected]> -// - -#include <tqevent.h> -#include <tqkeycode.h> -#include <tqheader.h> -#include <tqpainter.h> -#include <tqpixmap.h> -#include <kapplication.h> -#include <tdefileitem.h> -#include <kglobal.h> -#include <kglobalsettings.h> -#include <kicontheme.h> -#include <klocale.h> -#include <kiconloader.h> -#include <kdebug.h> -#include <kurldrag.h> -#include "KFileFontView.h" - -#define COL_NAME 0 -#define COL_SIZE 1 -#define COL_TYPE 2 - -class CKFileFontView::CKFileFontViewPrivate -{ - public: - - CKFileFontViewPrivate() : itsDropItem(0) {} - - CFontListViewItem *itsDropItem; - TQTimer itsAutoOpenTimer; -}; - -CKFileFontView::CKFileFontView(TQWidget *parent, const char *name) - : TDEListView(parent, name), - KFileView(), - d(new CKFileFontViewPrivate()) -{ - itsSortingCol = COL_NAME; - itsBlockSortingSignal = false; - setViewName(i18n("Detailed View")); - - addColumn(i18n("Name")); - addColumn(i18n("Size")); - addColumn(i18n("Type")); - setShowSortIndicator(true); - setAllColumnsShowFocus(true); - setDragEnabled(false); - - connect(header(), TQT_SIGNAL(sectionClicked(int)), TQT_SLOT(slotSortingChanged(int))); - connect(this, TQT_SIGNAL(returnPressed(TQListViewItem *)), TQT_SLOT(slotActivate(TQListViewItem *))); - connect(this, TQT_SIGNAL(clicked(TQListViewItem *, const TQPoint&, int)), TQT_SLOT(selected( TQListViewItem *))); - connect(this, TQT_SIGNAL(doubleClicked(TQListViewItem *, const TQPoint &, int)), TQT_SLOT(slotActivate(TQListViewItem *))); - connect(this, TQT_SIGNAL(contextMenuRequested(TQListViewItem *, const TQPoint &, int)), - this, TQT_SLOT(slotActivateMenu(TQListViewItem *, const TQPoint &))); - - // DND - connect(&(d->itsAutoOpenTimer), TQT_SIGNAL(timeout()), this, TQT_SLOT(slotAutoOpen())); - setSelectionMode(KFileView::selectionMode()); - itsResolver = new KMimeTypeResolver<CFontListViewItem, CKFileFontView>(this); -} - -CKFileFontView::~CKFileFontView() -{ - delete itsResolver; - delete d; -} - -void CKFileFontView::setSelected(const KFileItem *info, bool enable) -{ - if (info) - { - // we can only hope that this casts works - CFontListViewItem *item = (CFontListViewItem*)info->extraData(this); - - if (item) - TDEListView::setSelected(item, enable); - } -} - -void CKFileFontView::setCurrentItem(const KFileItem *item) -{ - if (item) - { - CFontListViewItem *it = (CFontListViewItem*) item->extraData(this); - - if (it) - TDEListView::setCurrentItem(it); - } -} - -KFileItem * CKFileFontView::currentFileItem() const -{ - CFontListViewItem *current = static_cast<CFontListViewItem*>(currentItem()); - - return current ? current->fileInfo() : NULL; -} - -void CKFileFontView::clearSelection() -{ - TDEListView::clearSelection(); -} - -void CKFileFontView::selectAll() -{ - if (KFile::NoSelection!=KFileView::selectionMode() && KFile::Single!=KFileView::selectionMode()) - TDEListView::selectAll(true); -} - -void CKFileFontView::invertSelection() -{ - TDEListView::invertSelection(); -} - -void CKFileFontView::slotActivateMenu(TQListViewItem *item,const TQPoint& pos) -{ - if (!item) - sig->activateMenu(0, pos); - else - { - CFontListViewItem *i = (CFontListViewItem*) item; - sig->activateMenu(i->fileInfo(), pos); - } -} - -void CKFileFontView::clearView() -{ - itsResolver->m_lstPendingMimeIconItems.clear(); - TDEListView::clear(); -} - -void CKFileFontView::insertItem(KFileItem *i) -{ - KFileView::insertItem(i); - - CFontListViewItem *item = new CFontListViewItem((TQListView*) this, i); - - setSortingKey(item, i); - - i->setExtraData(this, item); - - if (!i->isMimeTypeKnown()) - itsResolver->m_lstPendingMimeIconItems.append(item); -} - -void CKFileFontView::slotActivate(TQListViewItem *item) -{ - if (item) - { - const KFileItem *fi = ((CFontListViewItem*)item)->fileInfo(); - - if (fi) - sig->activate(fi); - } -} - -void CKFileFontView::selected(TQListViewItem *item) -{ - if (item && !(TDEApplication::keyboardMouseState() & (ShiftButton|ControlButton)) && - TDEGlobalSettings::singleClick()) - { - const KFileItem *fi = ((CFontListViewItem*)item)->fileInfo(); - - if (fi && (fi->isDir() || !onlyDoubleClickSelectsFiles())) - sig->activate(fi); - } -} - -void CKFileFontView::highlighted( TQListViewItem *item ) -{ - if (item) - { - const KFileItem *fi = ((CFontListViewItem*)item)->fileInfo(); - - if (fi) - sig->highlightFile(fi); - } -} - -void CKFileFontView::setSelectionMode(KFile::SelectionMode sm) -{ - disconnect(TQT_SIGNAL(selectionChanged()), this); - disconnect(TQT_SIGNAL(selectionChanged(TQListViewItem *)), this); - - switch (sm) - { - case KFile::Multi: - TQListView::setSelectionMode(TQListView::Multi); - break; - case KFile::Extended: - TQListView::setSelectionMode(TQListView::Extended); - break; - case KFile::NoSelection: - TQListView::setSelectionMode(TQListView::NoSelection); - break; - default: // fall through - case KFile::Single: - TQListView::setSelectionMode(TQListView::Single); - break; - } - - // for highlighting - if (KFile::Multi==sm || KFile::Extended==sm) - connect(this, TQT_SIGNAL(selectionChanged()), TQT_SLOT(slotSelectionChanged())); - else - connect(this, TQT_SIGNAL(selectionChanged(TQListViewItem *)), TQT_SLOT(highlighted(TQListViewItem * ))); -} - -bool CKFileFontView::isSelected(const KFileItem *i) const -{ - if (!i) - return false; - else - { - CFontListViewItem *item = (CFontListViewItem*) i->extraData(this); - - return (item && item->isSelected()); - } -} - -void CKFileFontView::updateView(bool b) -{ - if (b) - { - TQListViewItemIterator it((TQListView*)this); - - for (; it.current(); ++it) - { - CFontListViewItem *item=static_cast<CFontListViewItem *>(it.current()); - - item->setPixmap(0, item->fileInfo()->pixmap(KIcon::SizeSmall)); - } - } -} - -void CKFileFontView::updateView(const KFileItem *i) -{ - if (i) - { - CFontListViewItem *item = (CFontListViewItem*) i->extraData(this); - - if (item) - { - item->init(); - setSortingKey(item, i); - } - } -} - -void CKFileFontView::setSortingKey(CFontListViewItem *item, const KFileItem *i) -{ - TQDir::SortSpec spec = KFileView::sorting(); - - if (spec&TQDir::Size) - item->setKey(sortingKey(i->size(), i->isDir(), spec)); - else - item->setKey(sortingKey(i->text(), i->isDir(), spec)); -} - -void CKFileFontView::removeItem(const KFileItem *i) -{ - if (i) - { - CFontListViewItem *item = (CFontListViewItem*) i->extraData(this); - - itsResolver->m_lstPendingMimeIconItems.remove(item); - delete item; - - KFileView::removeItem(i); - } -} - -void CKFileFontView::slotSortingChanged(int col) -{ - TQDir::SortSpec sort = sorting(); - int sortSpec = -1; - bool reversed = col == itsSortingCol && (sort & TQDir::Reversed) == 0; - itsSortingCol = col; - - switch(col) - { - case COL_NAME: - sortSpec = (sort & ~TQDir::SortByMask | TQDir::Name); - break; - case COL_SIZE: - sortSpec = (sort & ~TQDir::SortByMask | TQDir::Size); - break; - // the following columns have no equivalent in TQDir, so we set it - // to TQDir::Unsorted and remember the column (itsSortingCol) - case COL_TYPE: - sortSpec = (sort & ~TQDir::SortByMask | TQDir::Time); - break; - default: - break; - } - - if (reversed) - sortSpec|=TQDir::Reversed; - else - sortSpec&=~TQDir::Reversed; - - if (sort & TQDir::IgnoreCase) - sortSpec|=TQDir::IgnoreCase; - else - sortSpec&=~TQDir::IgnoreCase; - - KFileView::setSorting(static_cast<TQDir::SortSpec>(sortSpec)); - - KFileItem *item; - KFileItemListIterator it(*items()); - - if ( sortSpec & TQDir::Size ) - { - for (; (item = it.current()); ++it ) - { - CFontListViewItem *i = viewItem(item); - i->setKey(sortingKey(item->size(), item->isDir(), sortSpec)); - } - } - else - for (; (item = it.current()); ++it ) - { - CFontListViewItem *i = viewItem(item); - - i->setKey(sortingKey(i->text(itsSortingCol), item->isDir(), sortSpec)); - } - - TDEListView::setSorting(itsSortingCol, !reversed); - TDEListView::sort(); - - if (!itsBlockSortingSignal) - sig->changeSorting( static_cast<TQDir::SortSpec>( sortSpec ) ); -} - -void CKFileFontView::setSorting(TQDir::SortSpec spec) -{ - if (spec & TQDir::Size) - itsSortingCol=COL_SIZE; - else - itsSortingCol=COL_NAME; - - // inversed, because slotSortingChanged will reverse it - if (spec & TQDir::Reversed) - spec = (TQDir::SortSpec) (spec & ~TQDir::Reversed); - else - spec = (TQDir::SortSpec) (spec | TQDir::Reversed); - - KFileView::setSorting((TQDir::SortSpec) spec); - - // don't emit sortingChanged() when called via setSorting() - itsBlockSortingSignal = true; // can't use blockSignals() - slotSortingChanged(itsSortingCol); - itsBlockSortingSignal = false; -} - -void CKFileFontView::ensureItemVisible(const KFileItem *i) -{ - if (i) - { - CFontListViewItem *item = (CFontListViewItem*) i->extraData(this); - - if ( item ) - TDEListView::ensureItemVisible(item); - } -} - -// we're in multiselection mode -void CKFileFontView::slotSelectionChanged() -{ - sig->highlightFile(NULL); -} - -KFileItem * CKFileFontView::firstFileItem() const -{ - CFontListViewItem *item = static_cast<CFontListViewItem*>(firstChild()); - - return item ? item->fileInfo() : NULL; -} - -KFileItem * CKFileFontView::nextItem(const KFileItem *fileItem) const -{ - if (fileItem) - { - CFontListViewItem *item = viewItem(fileItem); - - return item && item->itemBelow() ? ((CFontListViewItem*) item->itemBelow())->fileInfo() : NULL; - } - - return firstFileItem(); -} - -KFileItem * CKFileFontView::prevItem(const KFileItem *fileItem) const -{ - if (fileItem) - { - CFontListViewItem *item = viewItem(fileItem); - - return item && item->itemAbove() ? ((CFontListViewItem*) item->itemAbove())->fileInfo() : NULL; - } - - return firstFileItem(); -} - -void CKFileFontView::keyPressEvent(TQKeyEvent *e) -{ - TDEListView::keyPressEvent(e); - - if (Key_Return==e->key() || Key_Enter==e->key()) - if (e->state() & ControlButton) - e->ignore(); - else - e->accept(); -} - -// -// mimetype determination on demand -// -void CKFileFontView::mimeTypeDeterminationFinished() -{ - // anything to do? -} - -void CKFileFontView::determineIcon(CFontListViewItem *item) -{ - item->fileInfo()->determineMimeType(); - updateView(item->fileInfo()); -} - -void CKFileFontView::listingCompleted() -{ - itsResolver->start(); -} - -TQDragObject *CKFileFontView::dragObject() -{ - // create a list of the URL:s that we want to drag - KURL::List urls; - KFileItemListIterator it(* KFileView::selectedItems()); - TQPixmap pixmap; - TQPoint hotspot; - - for ( ; it.current(); ++it ) - urls.append( (*it)->url() ); - - if(urls.count()> 1) - pixmap = DesktopIcon("tdemultiple", KIcon::SizeSmall); - if(pixmap.isNull()) - pixmap = currentFileItem()->pixmap(KIcon::SizeSmall); - - hotspot.setX(pixmap.width() / 2); - hotspot.setY(pixmap.height() / 2); - - TQDragObject *dragObject=new KURLDrag(urls, widget()); - - if(dragObject) - dragObject->setPixmap(pixmap, hotspot); - - return dragObject; -} - -void CKFileFontView::slotAutoOpen() -{ - d->itsAutoOpenTimer.stop(); - - if(d->itsDropItem) - { - KFileItem *fileItem = d->itsDropItem->fileInfo(); - - if (fileItem && !fileItem->isFile() && (fileItem->isDir() || fileItem->isLink())) - sig->activate(fileItem); - } -} - -bool CKFileFontView::acceptDrag(TQDropEvent *e) const -{ -#if 0 // Following doesn't seem to work, why??? - bool ok=false; - KURL::List urls; - - - if((e->source()!=const_cast<CKFileFontView *>(this)) && - (TQDropEvent::Copy==e->action() || TQDropEvent::Move==e->action()) && - KURLDrag::decode(e, urls) && !urls.isEmpty()) - { - KURL::List::Iterator it; - - ok=true; - for(it=urls.begin(); ok && it!=urls.end(); ++it) - if(!CFontEngine::isAFontOrAfm(TQFile::encodeName((*it).path()))) - ok=false; - } - - return ok; -#endif - - return KURLDrag::canDecode(e) && (e->source()!= const_cast<CKFileFontView*>(this)) && - (TQDropEvent::Copy==e->action() || TQDropEvent::Move==e->action()); -} - -void CKFileFontView::contentsDragEnterEvent(TQDragEnterEvent *e) -{ - if (!acceptDrag(e)) // can we decode this ? - e->ignore(); // No - else - { - e->acceptAction(); // Yes - - if((dropOptions() & AutoOpenDirs)) - { - CFontListViewItem *item = dynamic_cast<CFontListViewItem*>(itemAt(contentsToViewport(e->pos()))); - if (item) // are we over an item ? - { - d->itsDropItem = item; - d->itsAutoOpenTimer.start(autoOpenDelay()); // restart timer - } - else - { - d->itsDropItem = 0; - d->itsAutoOpenTimer.stop(); - } - } - } -} - -void CKFileFontView::contentsDragMoveEvent(TQDragMoveEvent *e) -{ - if (!acceptDrag(e)) // can we decode this ? - e->ignore(); // No - else - { - e->acceptAction(); // Yes - - if ((dropOptions() & AutoOpenDirs)) - { - CFontListViewItem *item = dynamic_cast<CFontListViewItem*>(itemAt(contentsToViewport(e->pos()))); - - if (item) // are we over an item ? - { - if (d->itsDropItem != item) - { - d->itsDropItem = item; - d->itsAutoOpenTimer.start(autoOpenDelay()); // restart timer - } - } - else - { - d->itsDropItem = 0; - d->itsAutoOpenTimer.stop(); - } - } - } -} - -void CKFileFontView::contentsDragLeaveEvent(TQDragLeaveEvent *) -{ - d->itsDropItem = 0; - d->itsAutoOpenTimer.stop(); -} - -void CKFileFontView::contentsDropEvent(TQDropEvent *e) -{ - d->itsDropItem = 0; - d->itsAutoOpenTimer.stop(); - - if (!acceptDrag(e)) // can we decode this ? - e->ignore(); // No - else - { - e->acceptAction(); // Yes - - CFontListViewItem *item = dynamic_cast<CFontListViewItem*>(itemAt(contentsToViewport(e->pos()))); - KFileItem *fileItem = item ? item->fileInfo() : 0; - KURL::List urls; - - emit dropped(e, fileItem); - - if(KURLDrag::decode(e, urls) && !urls.isEmpty()) - { - emit dropped(e, urls, fileItem ? fileItem->url() : KURL()); - sig->dropURLs(fileItem, e, urls); - } - } -} - -void CKFileFontView::readConfig(TDEConfig *kc, const TQString &group) -{ - restoreLayout(kc, group.isEmpty() ? TQString("CFileFontView") : group); - slotSortingChanged(sortColumn()); -} - -void CKFileFontView::writeConfig(TDEConfig *kc, const TQString &group) -{ - saveLayout(kc, group.isEmpty() ? TQString("CFileFontView") : group); -} - -///////////////////////////////////////////////////////////////// - -void CFontListViewItem::init() -{ - CFontListViewItem::setPixmap(COL_NAME, itsInf->pixmap(KIcon::SizeSmall)); - - setText(COL_NAME, itsInf->text()); - setText(COL_SIZE, itsInf->isDir() ? "" : TDEGlobal::locale()->formatNumber(itsInf->size(), 0)); - setText(COL_TYPE, itsInf->mimeComment()); -} - -void CKFileFontView::virtual_hook(int id, void *data) -{ - TDEListView::virtual_hook(id, data); - KFileView::virtual_hook(id, data); -} - -#include "KFileFontView.moc" |