/** Called for: double click, return, Open */ void BaseTreeView::slotSelectFile(QListViewItem *item) { KFileTreeViewItem* kftvi = currentKFileTreeViewItem(); if (!kftvi || kftvi->isDir()) return; KURL urlToOpen = kftvi->url(); if (!urlToOpen.isEmpty()) { if ( QuantaCommon::checkMimeGroup(urlToOpen,"text") ) { emit openFile(urlToOpen); item->repaint(); } else if ( QuantaCommon::checkMimeGroup(urlToOpen, "image") ) //it may be an image { emit openImage( urlToOpen); } else if ( expandArchiv(kftvi)) //it may be an archiv { } else //it is an unknown type, maybe binary { if (QuantaCommon::denyBinaryInsert(this) == KMessageBox::Yes) { emit openFile(urlToOpen); item->repaint(); } } } }
void BaseTreeBranch::updateOpenFolder() { KFileTreeViewItem *newItem; KFileTreeViewItem *item = root(); while (item) { if (item->isDir() && item->isOpen()) { updateDirectory( item->url() ); kapp->processEvents(QEventLoop::ExcludeUserInput | QEventLoop::ExcludeSocketNotifiers); // dive into the tree first newItem = dynamic_cast<KFileTreeViewItem *>(item->firstChild()); if (newItem) { // found child go ahead item = newItem; continue; }; }; // go up if no sibling available if (! item->nextSibling()) item = dynamic_cast<KFileTreeViewItem *>(item->parent()); if (item == root()) break; if (item) item = dynamic_cast<KFileTreeViewItem *>(item->nextSibling()); }; }
void BaseTreeBranch::addOpenFolder(QStringList* openFolder) { if (! openFolder) // just in case return; KFileTreeViewItem *newItem; KFileTreeViewItem *item = root(); while (item) { if (item->isDir() && item->isOpen()) { openFolder->append( item->url().url() ); // dive into the tree first newItem = dynamic_cast<KFileTreeViewItem *>(item->firstChild()); if (newItem) { // found child go ahead item = newItem; continue; }; }; // move up in the tree while (item && item != root()) { if (item->nextSibling()) { item = dynamic_cast<KFileTreeViewItem *>(item->nextSibling()); break; } else { item = dynamic_cast<KFileTreeViewItem *>(item->parent()); } } if (item == root()) break; }; }
bool BaseTreeView::acceptDrag(QDropEvent* e ) const { QPoint p (contentsToViewport(e->pos())); QListViewItem *atpos = itemAt(p); KFileTreeViewItem *kftvi = dynamic_cast <KFileTreeViewItem *> (atpos); if (kftvi) return (KFileTreeView::acceptDrag(e) && kftvi->isDir()); // accept only on folders else return (KFileTreeView::acceptDrag(e)); }
void BaseTreeView::itemRenamed(const KURL& oldURL, const KURL& newURL) { KFileTreeViewItem *curItem = currentKFileTreeViewItem(); if (! curItem) return; if (curItem->isDir()) { KURL n = newURL; n.adjustPath(1); KURL o = oldURL; o.adjustPath(1); emit renamed(o, n); } else { emit renamed(oldURL, newURL); } }
void KFileTreeBranch::slCompleted( const KURL& url ) { kdDebug(250) << "SlotCompleted hit for " << url.prettyURL() << endl; KFileTreeViewItem *currParent = findTVIByURL( url ); if( ! currParent ) return; kdDebug(250) << "current parent " << currParent << " is already listed: " << currParent->alreadyListed() << endl; emit( populateFinished(currParent)); emit( directoryChildCount(currParent, currParent->childCount())); /* This is a walk through the children of the last populated directory. * Here we start the dirlister on every child of the dir and wait for its * finish. When it has finished, we go to the next child. * This must be done for non local file systems in dirOnly- and Full-Mode * and for local file systems only in full mode, because the stat trick * (see addItem-Method) does only work for dirs, not for files in the directory. */ /* Set bit that the parent dir was listed completely */ currParent->setListed(true); kdDebug(250) << "recurseChildren: " << m_recurseChildren << endl; kdDebug(250) << "isLocalFile: " << m_startURL.isLocalFile() << endl; kdDebug(250) << "dirOnlyMode: " << dirOnlyMode() << endl; if( m_recurseChildren && (!m_startURL.isLocalFile() || ! dirOnlyMode()) ) { bool wantRecurseUrl = false; /* look if the url is in the list for url to recurse */ for ( KURL::List::Iterator it = m_openChildrenURLs.begin(); it != m_openChildrenURLs.end(); ++it ) { /* it is only interesting that the url _is_in_ the list. */ if( (*it).equals( url, true ) ) wantRecurseUrl = true; } KFileTreeViewItem *nextChild = 0; kdDebug(250) << "Recursing " << url.prettyURL() << "? " << wantRecurseUrl << endl; if( wantRecurseUrl && currParent ) { /* now walk again through the tree and populate the children to get +-signs */ /* This is the starting point. The visible folder has finished, processing the children has not yet started */ nextChild = static_cast<KFileTreeViewItem*> (static_cast<TQListViewItem*>(currParent)->firstChild()); if( ! nextChild ) { /* This happens if there is no child at all */ kdDebug( 250 ) << "No children to recuse" << endl; } /* Since we have listed the children to recurse, we can remove the entry * in the list of the URLs to see the children. */ m_openChildrenURLs.remove(url); } if( nextChild ) /* This implies that idx > -1 */ { /* Next child is defined. We start a dirlister job on every child item * which is a directory to find out how much children are in the child * of the last opened dir */ /* Skip non directory entries */ while( nextChild ) { if( nextChild->isDir() && ! nextChild->alreadyListed()) { KFileItem *kfi = nextChild->fileItem(); if( kfi && kfi->isReadable()) { KURL recurseUrl = kfi->url(); kdDebug(250) << "Starting to recurse NOW " << recurseUrl.prettyURL() << endl; openURL( recurseUrl, true ); } } nextChild = static_cast<KFileTreeViewItem*>(static_cast<TQListViewItem*>(nextChild->nextSibling())); // kdDebug(250) << "Next child " << m_nextChild << endl; } } } else { kdDebug(250) << "skipping to recurse in complete-slot" << endl; } }