diff options
Diffstat (limited to 'konqueror/sidebar/trees/konq_sidebartreetoplevelitem.cpp')
-rw-r--r-- | konqueror/sidebar/trees/konq_sidebartreetoplevelitem.cpp | 208 |
1 files changed, 208 insertions, 0 deletions
diff --git a/konqueror/sidebar/trees/konq_sidebartreetoplevelitem.cpp b/konqueror/sidebar/trees/konq_sidebartreetoplevelitem.cpp new file mode 100644 index 000000000..d71959c1e --- /dev/null +++ b/konqueror/sidebar/trees/konq_sidebartreetoplevelitem.cpp @@ -0,0 +1,208 @@ +/* This file is part of the KDE project + Copyright (C) 2000 David Faure <faure@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 "konq_treepart.h" +#include "konq_sidebartreemodule.h" +#include <kdebug.h> +#include <kdirnotify_stub.h> +#include <kio/paste.h> +#include <konq_operations.h> +#include <kprotocolinfo.h> +#include <kurldrag.h> +#include <kmimetype.h> +#include <qapplication.h> +#include <qclipboard.h> +#include <qcursor.h> +#include <konq_drag.h> + +void KonqSidebarTreeTopLevelItem::init() +{ + QString desktopFile = m_path; + if ( isTopLevelGroup() ) + desktopFile += "/.directory"; + KSimpleConfig cfg( desktopFile, true ); + cfg.setDesktopGroup(); + m_comment = cfg.readEntry( "Comment" ); +} + +void KonqSidebarTreeTopLevelItem::setOpen( bool open ) +{ + if (open && module()) + module()->openTopLevelItem( this ); + KonqSidebarTreeItem::setOpen( open ); +} + +void KonqSidebarTreeTopLevelItem::itemSelected() +{ + kdDebug() << "KonqSidebarTreeTopLevelItem::itemSelected" << endl; + QMimeSource *data = QApplication::clipboard()->data(); + bool paste = m_bTopLevelGroup && data->provides("text/uri-list"); + tree()->enableActions( true, true, paste, true, true, true /*rename*/ ); +} + +bool KonqSidebarTreeTopLevelItem::acceptsDrops( const QStrList & formats ) +{ + return formats.contains("text/uri-list") && + ( m_bTopLevelGroup || !externalURL().isEmpty() ); +} + +void KonqSidebarTreeTopLevelItem::drop( QDropEvent * ev ) +{ + if ( m_bTopLevelGroup ) + { + // When dropping something to "Network" or its subdirs, we want to create + // a desktop link, not to move/copy/link - except for .desktop files :-} + KURL::List lst; + if ( KURLDrag::decode( ev, lst ) && !lst.isEmpty() ) // Are they urls ? + { + KURL::List::Iterator it = lst.begin(); + for ( ; it != lst.end() ; it++ ) + { + tree()->addURL(this, *it); + } + } else + kdError(1202) << "No URL !? " << endl; + } + else // Top level item, not group + { + if ( !externalURL().isEmpty() ) + KonqOperations::doDrop( 0L, externalURL(), ev, tree() ); + } +} + +QDragObject * KonqSidebarTreeTopLevelItem::dragObject( QWidget * parent, bool move ) +{ + // 100% duplicated from KonqDirTreeItem::dragObject :( + KURL::List lst; + KURL url; + url.setPath( path() ); + lst.append( url ); + + KonqDrag * drag = KonqDrag::newDrag( lst, false, parent ); + + const QPixmap * pix = pixmap(0); + if (pix) + { + QPoint hotspot( pix->width() / 2, pix->height() / 2 ); + drag->setPixmap( *pix, hotspot ); + } + drag->setMoveSelection( move ); + + return drag; +} + +void KonqSidebarTreeTopLevelItem::middleButtonClicked() +{ + if ( !m_bTopLevelGroup ) + emit tree()->createNewWindow( m_externalURL ); + // Do nothing for toplevel groups +} + +void KonqSidebarTreeTopLevelItem::rightButtonPressed() +{ + KURL url; + url.setPath( m_path ); + // We don't show "edit file type" (useless here) and "properties" (shows the wrong name, + // i.e. the filename instead of the Name field). There's the Rename item for that. + // Only missing thing is changing the URL of a link. Hmm... + + if ( !module() || !module()->handleTopLevelContextMenu( this, QCursor::pos() ) ) + { + tree()->showToplevelContextMenu(); + } +} + + +void KonqSidebarTreeTopLevelItem::trash() +{ + delOperation( KonqOperations::TRASH ); +} + +void KonqSidebarTreeTopLevelItem::del() +{ + delOperation( KonqOperations::DEL ); +} + +void KonqSidebarTreeTopLevelItem::shred() +{ + delOperation( KonqOperations::SHRED ); +} + +void KonqSidebarTreeTopLevelItem::delOperation( int method ) +{ + KURL url; + url.setPath( m_path ); + KURL::List lst; + lst.append(url); + + KonqOperations::del(tree(), method, lst); +} + +void KonqSidebarTreeTopLevelItem::paste() +{ + // move or not move ? + bool move = false; + QMimeSource *data = QApplication::clipboard()->data(); + if ( data->provides( "application/x-kde-cutselection" ) ) { + move = KonqDrag::decodeIsCutSelection( data ); + kdDebug(1201) << "move (from clipboard data) = " << move << endl; + } + + KURL destURL; + if ( m_bTopLevelGroup ) + destURL.setPath( m_path ); + else + destURL = m_externalURL; + + KIO::pasteClipboard( destURL, move ); +} + +void KonqSidebarTreeTopLevelItem::rename() +{ + tree()->rename( this, 0 ); +} + +void KonqSidebarTreeTopLevelItem::rename( const QString & name ) +{ + KURL url; + url.setPath( m_path ); + + // Well, it's not really the file we want to rename, it's the Name field + // of the .directory or desktop file + //KonqOperations::rename( tree(), url, name ); + + QString desktopFile = m_path; + if ( isTopLevelGroup() ) + desktopFile += "/.directory"; + KSimpleConfig cfg( desktopFile ); + cfg.setDesktopGroup(); + cfg.writeEntry( "Name", name ); + cfg.sync(); + + // Notify about the change + KURL::List lst; + lst.append(url); + KDirNotify_stub allDirNotify("*", "KDirNotify*"); + allDirNotify.FilesChanged( lst ); +} + +QString KonqSidebarTreeTopLevelItem::toolTipText() const +{ + return m_comment; +} + |