diff options
Diffstat (limited to 'src/sq_filedetailview.cpp')
| -rw-r--r-- | src/sq_filedetailview.cpp | 228 | 
1 files changed, 228 insertions, 0 deletions
| diff --git a/src/sq_filedetailview.cpp b/src/sq_filedetailview.cpp new file mode 100644 index 0000000..932715d --- /dev/null +++ b/src/sq_filedetailview.cpp @@ -0,0 +1,228 @@ +/*************************************************************************** +                          sq_filedetailview.cpp  -  description +                             ------------------- +    begin                : Mon Mar 15 2004 +    copyright            : (C) 2004 by Baryshev Dmitry +    email                : ksquirrel.iv@gmail.com + ***************************************************************************/ + +/*************************************************************************** + *                                                                         * + *   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.                                   * + *                                                                         * + ***************************************************************************/ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <tqheader.h> +#include <tqcursor.h> + +#include <tdepopupmenu.h> +#include <tdefileitem.h> +#include <tdeglobalsettings.h> +#include <konq_filetip.h> + +#include "ksquirrel.h" +#include "sq_config.h" +#include "sq_iconloader.h" +#include "sq_filedetailview.h" +#include "sq_widgetstack.h" +#include "sq_diroperator.h" +#include "sq_dragprovider.h" + +SQ_FileListViewItem::SQ_FileListViewItem(TQListView *parent, KFileItem *fi) : KFileListViewItem(parent, fi) +{} + +SQ_FileListViewItem::SQ_FileListViewItem(TQListView *parent, const TQString &text, const TQPixmap &icon, KFileItem *fi) +    : KFileListViewItem(parent, text, icon, fi) +{} + +SQ_FileListViewItem::~SQ_FileListViewItem() +{} + +SQ_FileDetailView::SQ_FileDetailView(TQWidget* parent, const char* name) +    : KFileDetailView(parent, name) +{ +    // pixmap for directory item +    dirPix = SQ_IconLoader::instance()->loadIcon("folder", TDEIcon::Desktop, TDEIcon::SizeSmall); + +    toolTip = new KonqFileTip(this); +    slotResetToolTip(); + +    disconnect(this, TQ_SIGNAL(onViewport()), this, 0); +    disconnect(this, TQ_SIGNAL(onItem(TQListViewItem *)), this, 0); +    connect(this, TQ_SIGNAL(onViewport()), this, TQ_SLOT(slotRemoveToolTip())); +    connect(this, TQ_SIGNAL(onItem(TQListViewItem *)), this, TQ_SLOT(slotShowToolTip(TQListViewItem *))); +} + +SQ_FileDetailView::~SQ_FileDetailView() +{ +    slotRemoveToolTip(); +} + +void SQ_FileDetailView::slotResetToolTip() +{ +    SQ_Config::instance()->setGroup("Fileview"); + +    toolTip->setOptions(true, +                        SQ_Config::instance()->readBoolEntry("tooltips_preview", false), +                        SQ_Config::instance()->readNumEntry("tooltips_lines", 6)); +} + +// Show extended tooltip for item under mouse cursor +void SQ_FileDetailView::slotShowToolTip(TQListViewItem *item) +{ +    SQ_Config::instance()->setGroup("Fileview"); + +    if(!SQ_Config::instance()->readBoolEntry("tooltips", false) || +        (!KSquirrel::app()->isActiveWindow() && SQ_Config::instance()->readBoolEntry("tooltips_inactive", true))) +        return; + +    // remove previous tootip and stop timer +    slotRemoveToolTip(); + +    KFileListViewItem *fitem = dynamic_cast<KFileListViewItem *>(item); + +    if(!fitem) return; + +    KFileItem *f = fitem->fileInfo(); + +    if(f) toolTip->setItem(f, fitem->rect(), fitem->pixmap(0)); +} + +bool SQ_FileDetailView::eventFilter(TQObject *o, TQEvent *e) +{ +    if(o == viewport() || o == this) +    { +        int type = e->type(); + +        if(type == TQEvent::Leave || type == TQEvent::FocusOut || type == TQEvent::Hide) +            slotRemoveToolTip(); +    } + +    return KFileDetailView::eventFilter(o, e); +} + +/* + *  Remove tootip. + */ +void SQ_FileDetailView::slotRemoveToolTip() +{ +    toolTip->setItem(0); +} + +/* + *  Reimplement insertItem() to enable/disable inserting + *  directories (depends on current settings). + */ +void SQ_FileDetailView::insertItem(KFileItem *i) +{ +    SQ_Config::instance()->setGroup("Fileview"); + +    // directores disabled ? +    if(i->isDir() && SQ_Config::instance()->readBoolEntry("disable_dirs", false)) +        return; + +    // add new item +    setUpdatesEnabled(false); +    SQ_FileListViewItem *item = new SQ_FileListViewItem(this, i); + +    initItem(item, i); +    setUpdatesEnabled(true); + +    i->setExtraData(this, item); +} + +/* + *  Internal. Set item's sorting key. + */ +void SQ_FileDetailView::initItem(SQ_FileListViewItem *item, const KFileItem *i) +{ +    // determine current sorting type +    TQDir::SortSpec spec = KFileView::sorting(); + +    if(spec & TQDir::Time) +        item->setKey(sortingKey(i->time(TDEIO::UDS_MODIFICATION_TIME), i->isDir(), spec)); +    else if(spec & TQDir::Size) +        item->setKey(sortingKey(i->size(), i->isDir(), spec)); +    else +        item->setKey(sortingKey(i->text(), i->isDir(), spec)); +} + +/* + *  On double click execute item or + *  invoke default browser in current url. + */ +void SQ_FileDetailView::contentsMouseDoubleClickEvent(TQMouseEvent *e) +{ +    TQPoint vp = contentsToViewport(e->pos()); + +    TQListViewItem *item = itemAt(vp); + +    emit TQListView::doubleClicked(item); + +    int col = item ? header()->mapToLogical(header()->cellAt(vp.x())) : -1; + +    // double click on item +    if(item) +        emit doubleClicked(item, e->globalPos(), col); + +    // double click was in viewport, let's invoke browser +    else +        emit invokeBrowser(); +} + +// Accept dragging +void SQ_FileDetailView::dragEnterEvent(TQDragEnterEvent *e) +{ +    e->accept(true); +} + +/* + *  Insert ".." item. + */ +void SQ_FileDetailView::insertCdUpItem(const KURL &base) +{ +    static const TQString &dirup = TDEGlobal::staticQString(".."); + +    KFileItem *fi = new KFileItem(base.upURL(), "inode/directory", S_IFDIR); + +    SQ_FileListViewItem *item = new SQ_FileListViewItem(this, dirup, dirPix, fi); + +    item->setSelectable(false); +    item->setKey(sortingKey("..", true, TQDir::Name|TQDir::DirsFirst)); + +    fi->setExtraData(this, item); +} + +/* + *  Clear current view and insert "..". + */ +void SQ_FileDetailView::clearView() +{ +    // call default clearing method +    KFileDetailView::clearView(); + +    // insert ".." +    insertCdUpItem(SQ_WidgetStack::instance()->url()); +} + +void SQ_FileDetailView::startDrag() +{ +    SQ_Config::instance()->setGroup("Fileview"); + +    if(SQ_Config::instance()->readBoolEntry("drag", true)) +    { +        SQ_DragProvider::instance()->setParams(this, *KFileView::selectedItems(), SQ_DragProvider::Icons); +        SQ_DragProvider::instance()->start(); +    } +    else +        KFileDetailView::startDrag(); +} + +#include "sq_filedetailview.moc" | 
