| 
					
				 | 
			
			
				@@ -0,0 +1,262 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/*========================================================================= 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Library:   CTK 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Copyright (c) Kitware Inc. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Licensed under the Apache License, Version 2.0 (the "License"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  you may not use this file except in compliance with the License. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  You may obtain a copy of the License at 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      http://www.apache.org/licenses/LICENSE-2.0.txt 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Unless required by applicable law or agreed to in writing, software 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  distributed under the License is distributed on an "AS IS" BASIS, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  See the License for the specific language governing permissions and 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  limitations under the License. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+=========================================================================*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/*============================================================================== 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Program: 3D Slicer 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Copyright (c) Kitware Inc. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  See COPYRIGHT.txt 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  or http://www.slicer.org/copyright/copyright.txt for details. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Unless required by applicable law or agreed to in writing, software 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  distributed under the License is distributed on an "AS IS" BASIS, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  See the License for the specific language governing permissions and 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  limitations under the License. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  This file was originally developed by Jean-Christophe Fillion-Robin, Kitware Inc. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  and was partially funded by NIH grant 3P41RR013218-12S1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+==============================================================================*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// Qt includes 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <QFileInfo> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <QHBoxLayout> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <QListView> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <QStandardItemModel> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// QtGUI includes 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include "ctkDirectoryListView.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// -------------------------------------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// ctkDirectoryListViewPrivate 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//----------------------------------------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+class ctkDirectoryListViewPrivate 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Q_DECLARE_PUBLIC(ctkDirectoryListView); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+protected: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ctkDirectoryListView* const q_ptr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+public: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ctkDirectoryListViewPrivate(ctkDirectoryListView& object); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  void init(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  void addDirectory(const QString& path); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  enum 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    AbsolutePathRole = Qt::UserRole + 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  QListView*         ListView; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  QStandardItemModel DirectoryListModel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// -------------------------------------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// ctkDirectoryListViewPrivate methods 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// -------------------------------------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ctkDirectoryListViewPrivate::ctkDirectoryListViewPrivate(ctkDirectoryListView& object) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  :q_ptr(&object) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// -------------------------------------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void ctkDirectoryListViewPrivate::init() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Q_Q(ctkDirectoryListView); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  this->ListView = new QListView(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  this->ListView->setSelectionBehavior(QAbstractItemView::SelectRows); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  this->ListView->setSelectionMode(QAbstractItemView::ExtendedSelection); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  this->ListView->setEditTriggers(QAbstractItemView::NoEditTriggers); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  QHBoxLayout * layout = new QHBoxLayout(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  layout->setContentsMargins(0, 0, 0, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  layout->addWidget(this->ListView); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  q->setLayout(layout); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  this->ListView->setModel(&this->DirectoryListModel); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// -------------------------------------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void ctkDirectoryListViewPrivate::addDirectory(const QString& path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Q_Q(ctkDirectoryListView); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  QString absolutePath = QFileInfo(path).absoluteFilePath(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (!QFile::exists(absolutePath) || q->hasDirectory(absolutePath)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  QStandardItem * item = new QStandardItem(path); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  item->setData(QVariant(absolutePath), Qt::ToolTipRole); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  item->setData(QVariant(absolutePath), ctkDirectoryListViewPrivate::AbsolutePathRole); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  this->DirectoryListModel.appendRow(item); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// -------------------------------------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// ctkDirectoryListView methods 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// -------------------------------------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ctkDirectoryListView::ctkDirectoryListView(QWidget* _parent) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  : Superclass(_parent) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  , d_ptr(new ctkDirectoryListViewPrivate(*this)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Q_D(ctkDirectoryListView); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  d->init(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// -------------------------------------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ctkDirectoryListView::~ctkDirectoryListView() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// -------------------------------------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+QStringList ctkDirectoryListView::directoryList(bool absolutePath)const 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Q_D(const ctkDirectoryListView); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  QStringList directoryList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  int role = Qt::DisplayRole; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (absolutePath) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    role = ctkDirectoryListViewPrivate::AbsolutePathRole; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  for(int i = 0; i < d->DirectoryListModel.rowCount(); ++i) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    directoryList << d->DirectoryListModel.data(d->DirectoryListModel.index(i, 0), role).toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return directoryList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// -------------------------------------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+QStringList ctkDirectoryListView::selectedDirectoryList(bool absolutePath)const 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Q_D(const ctkDirectoryListView); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  QStringList directoryList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  int role = Qt::DisplayRole; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (absolutePath) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    role = ctkDirectoryListViewPrivate::AbsolutePathRole; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  QModelIndexList selectedIndexes = d->ListView->selectionModel()->selectedRows(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  foreach(const QModelIndex& index, selectedIndexes) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    directoryList << d->DirectoryListModel.data(index, role).toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return directoryList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// -------------------------------------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+bool ctkDirectoryListView::hasDirectory(const QString& path)const 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Q_D(const ctkDirectoryListView); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  QString absolutePath = QFileInfo(path).absoluteFilePath(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  QModelIndexList foundIndexes = d->DirectoryListModel.match( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        d->DirectoryListModel.index(0, 0), ctkDirectoryListViewPrivate::AbsolutePathRole, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        QVariant(absolutePath)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Q_ASSERT(foundIndexes.size() < 2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return (foundIndexes.size() != 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// -------------------------------------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void ctkDirectoryListView::addDirectory(const QString& path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Q_D(ctkDirectoryListView); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  d->addDirectory(path); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  emit this->directoryListChanged(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// -------------------------------------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void ctkDirectoryListView::removeDirectory(const QString& path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Q_D(ctkDirectoryListView); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  QList<QStandardItem*> foundItems = d->DirectoryListModel.findItems(path); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Q_ASSERT(foundItems.count() < 2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (foundItems.count() == 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    d->DirectoryListModel.removeRow(foundItems.at(0)->row()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    emit this->directoryListChanged(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// -------------------------------------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void ctkDirectoryListView::removeSelectedDirectories() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Q_D(ctkDirectoryListView); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  QModelIndexList selectedIndexes = d->ListView->selectionModel()->selectedRows(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  bool selectedCount = selectedIndexes.count(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  while(selectedIndexes.count() > 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    d->DirectoryListModel.removeRow(selectedIndexes.at(0).row()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    selectedIndexes = d->ListView->selectionModel()->selectedRows(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (selectedCount) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    emit this->directoryListChanged(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// -------------------------------------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void ctkDirectoryListView::selectAllDirectories() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Q_D(ctkDirectoryListView); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  d->ListView->selectAll(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// -------------------------------------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void ctkDirectoryListView::clearDirectorySelection() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Q_D(ctkDirectoryListView); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  d->ListView->clearSelection(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// -------------------------------------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void ctkDirectoryListView::setDirectoryList(const QStringList& paths) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Q_D(ctkDirectoryListView); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (paths.count() == this->directoryList().count()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    int found = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    foreach(const QString& path, paths) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (this->hasDirectory(path)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ++found; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (found == paths.count()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  d->DirectoryListModel.removeRows(0, d->DirectoryListModel.rowCount()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  foreach(const QString& path, paths) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    d->addDirectory(path); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  emit this->directoryListChanged(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 |