//! [5] QXmlNodeModelIndex FileTree::nextSibling(const QXmlNodeModelIndex &nodeIndex, const QFileInfo &fileInfo, qint8 offset) const { Q_ASSERT(offset == -1 || offset == 1); // Get the context node's parent. const QXmlNodeModelIndex parent(nextFromSimpleAxis(Parent, nodeIndex)); if (parent.isNull()) return QXmlNodeModelIndex(); // Get the parent's child list. const QFileInfo parentFI(toFileInfo(parent)); Q_ASSERT(Type(parent.additionalData()) == Directory); const QFileInfoList siblings(QDir(parentFI.absoluteFilePath()).entryInfoList(QStringList(), m_filterAllowAll, m_sortFlags)); Q_ASSERT_X(!siblings.isEmpty(), Q_FUNC_INFO, "Can't happen! We started at a child."); // Find the index of the child where we started. const int indexOfMe = siblings.indexOf(fileInfo); // Apply the offset. const int siblingIndex = indexOfMe + offset; if (siblingIndex < 0 || siblingIndex > siblings.count() - 1) return QXmlNodeModelIndex(); else return toNodeIndex(siblings.at(siblingIndex)); }
// Open a new file void MainWindow::handleOpenFileEvent(QString filename, QString filter) { // On Windows, we have to remove all three '/' after 'file:', on Linux, we need to leave one of them #ifdef Q_OS_WIN if(filename.startsWith("file:///")) filename = filename.remove(0,8); #else if(filename.startsWith("file://")) filename = filename.remove(0,7); #endif if(filename.trimmed() == "") { QMetaObject::invokeMethod(object, "openFile"); return; } variables->keepLoadingThumbnails = true; setOverrideCursor(); if(variables->verbose) LOG << CURDATE << "handleOpenFileEvent(): Handle response to request to open new file" << NL; // Decode filename QByteArray usethis = QByteArray::fromPercentEncoding(filename.trimmed().toUtf8()); // Store filter variables->openfileFilter = filter; QString file = ""; // Check return file file = usethis; QMetaObject::invokeMethod(object, "alsoIgnoreSystemShortcuts", Q_ARG(QVariant, false)); // Save current directory variables->currentDir = QFileInfo(file).absolutePath(); // Clear loaded thumbnails variables->loadedThumbnails.clear(); // Load direcgtory QFileInfoList l = loadDir->loadDir(file,variables->openfileFilter); if(l.isEmpty()) { QMetaObject::invokeMethod(object, "noResultsFromFilter"); restoreOverrideCursor(); return; } if(!l.contains(QFileInfo(file))) file = l.at(0).filePath(); // Get and store length int l_length = l.length(); settingsPerSession->setValue("countTot",l_length); // Convert QFileInfoList into QStringList and store it QStringList ll; for(int i = 0; i < l_length; ++i) ll.append(l.at(i).absoluteFilePath()); settingsPerSession->setValue("allFileList",ll); // Get and store current position int curPos = l.indexOf(QFileInfo(file)); settingsPerSession->setValue("curPos",curPos); // Setiup thumbnail model QMetaObject::invokeMethod(object, "setupModel", Q_ARG(QVariant, ll), Q_ARG(QVariant, curPos)); // Display current postiion in main image view QMetaObject::invokeMethod(object, "displayImage", Q_ARG(QVariant, curPos)); QVariant centerPos = curPos; if(!QMetaObject::invokeMethod(object, "getCenterPos", Q_RETURN_ARG(QVariant, centerPos))) std::cerr << CURDATE << "handleOpenFileEvent(): ERROR: couldn't get center pos!" << NL; // And handle the thumbnails handleThumbnails(centerPos.toInt()); restoreOverrideCursor(); }