diff options
Diffstat (limited to 'parts/fileview/filetreeviewwidgetimpl.cpp')
-rw-r--r-- | parts/fileview/filetreeviewwidgetimpl.cpp | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/parts/fileview/filetreeviewwidgetimpl.cpp b/parts/fileview/filetreeviewwidgetimpl.cpp new file mode 100644 index 00000000..9e40a3bb --- /dev/null +++ b/parts/fileview/filetreeviewwidgetimpl.cpp @@ -0,0 +1,169 @@ +/*************************************************************************** + * Copyright (C) 2003 by Mario Scalas * + * mario.scalas@libero.it * + * * + * 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. * + * * + ***************************************************************************/ + +#include <qpopupmenu.h> +#include <kxmlguiclient.h> +#include <kdebug.h> +#include <kaction.h> +#include <klocale.h> +#include <kdeversion.h> + +#include <kdevproject.h> + +#include "fileviewpart.h" +#include "filetreewidget.h" +#include "fileitemfactory.h" + +#include "filetreeviewwidgetimpl.h" + +using namespace filetreeview; + +/////////////////////////////////////////////////////////////////////////////// +// class FileTreeViewWidgetImpl +/////////////////////////////////////////////////////////////////////////////// + +FileTreeViewWidgetImpl::FileTreeViewWidgetImpl( FileTreeWidget *parent, const char *name ) + : QObject( parent, name ), m_branchItemFactory( 0 ), + m_part( parent->part() ), m_isReloadingTree( false ) +{ + kdDebug(9017) << "FileTreeViewWidgetImpl::FileTreeViewWidgetImpl()" << endl; + + // Actions + m_actionToggleShowNonProjectFiles = new KToggleAction( i18n("Show Non Project Files"), KShortcut(), + this, SLOT(slotToggleShowNonProjectFiles()), this, "actiontoggleshowshownonprojectfiles" ); + m_actionToggleShowNonProjectFiles->setCheckedState(i18n("Hide Non Project Files")); + m_actionToggleShowNonProjectFiles->setWhatsThis(i18n("<b>Show non project files</b><p>Shows files that do not belong to a project in a file tree.")); + + // Reload good ol' settings + QDomDocument &dom = *m_part->projectDom(); + m_actionToggleShowNonProjectFiles->setChecked( !DomUtil::readBoolEntry(dom, "/kdevfileview/tree/hidenonprojectfiles") ); +} + +/////////////////////////////////////////////////////////////////////////////// + +FileTreeViewWidgetImpl::~FileTreeViewWidgetImpl() +{ + kdDebug(9017) << "FileTreeViewWidgetImpl::~FileTreeViewWidgetImpl()" << endl; + + delete m_branchItemFactory; + + QDomDocument &dom = *m_part->projectDom(); + DomUtil::writeBoolEntry( dom, "/kdevfileview/tree/hidenonprojectfiles", !showNonProjectFiles() ); +} + +/////////////////////////////////////////////////////////////////////////////// + +FileTreeWidget *FileTreeViewWidgetImpl::fileTree() const +{ + return static_cast<FileTreeWidget *>( parent() ); +} + +/////////////////////////////////////////////////////////////////////////////// + +QDomDocument &FileTreeViewWidgetImpl::projectDom() const +{ + return *part()->projectDom(); +} + +/////////////////////////////////////////////////////////////////////////////// + +QString FileTreeViewWidgetImpl::projectDirectory() const +{ + return part()->project()->projectDirectory(); +} + +/////////////////////////////////////////////////////////////////////////////// + +bool FileTreeViewWidgetImpl::showNonProjectFiles() const +{ + return m_actionToggleShowNonProjectFiles->isChecked(); +} + +/////////////////////////////////////////////////////////////////////////////// + +void FileTreeViewWidgetImpl::fillPopupMenu( QPopupMenu *popupMenu, QListViewItem *item ) const +{ + // Show the "reload tree" menu-item only if it is requested for the root object + // and we don't have a sync-with-repository operation pending (which otherwise will + // kill the call-back's from working) + if (item == fileTree()->firstChild() && canReloadTree()) + { + int id = popupMenu->insertItem( i18n( "Reload Tree"), this, SLOT( slotReloadTree() ) ); + popupMenu->setWhatsThis( id, i18n("<b>Reload tree</b><p>Reloads the project files tree.") ); + } + + m_actionToggleShowNonProjectFiles->plug( popupMenu ); +} + +/////////////////////////////////////////////////////////////////////////////// + +KURL::List FileTreeViewWidgetImpl::selectedPathUrls() +{ + kdDebug(9017) << "FileTreeViewWidgetImpl::selectedPathUrls()" << endl; + + KURL::List urlList; + + QValueList<QListViewItem*> list = allSelectedItems( fileTree()->firstChild() ); + QValueList<QListViewItem*>::Iterator it = list.begin(); + while( it != list.end() ) + { + FileTreeViewItem * item = static_cast<FileTreeViewItem*>( *it ); + if ( fileTree()->shouldBeShown( item ) ) + { + KURL url; + url.setPath( item->path() ); + urlList << url; + } + ++it; + } + + return urlList; +} + +/////////////////////////////////////////////////////////////////////////////// + +QValueList<QListViewItem*> FileTreeViewWidgetImpl::allSelectedItems( QListViewItem * item ) const +{ + QValueList<QListViewItem*> list; + + if ( item ) + { + if ( item->isSelected() ) + { + list << item; + } + + QListViewItem * it = item->firstChild(); + while( it ) + { + list += allSelectedItems( it ); + it = it->nextSibling(); + } + } + + return list; +} + +/////////////////////////////////////////////////////////////////////////////// + +void FileTreeViewWidgetImpl::slotReloadTree() +{ + fileTree()->openDirectory( projectDirectory() ); +} + +/////////////////////////////////////////////////////////////////////////////// + +void FileTreeViewWidgetImpl::slotToggleShowNonProjectFiles() +{ + fileTree()->hideOrShow(); +} + +#include "filetreeviewwidgetimpl.moc" |