You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdevelop/parts/fileview/filetreeviewwidgetimpl.cpp

170 lines
5.5 KiB

/***************************************************************************
* 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"