void BinaryWidget::setData( const QByteArray &data ) { delete mMainWidget; QString mimetype; KMimeType::Ptr mime = KMimeType::findByContent( data ); if ( mime && !mime->isDefault() ) mimetype = mime->name(); if ( !mimetype.isEmpty() ) { KParts::ReadOnlyPart *part = KParts::ComponentFactory::createPartInstanceFromQuery<KParts::ReadOnlyPart>( mimetype, QString(), this, this ); if ( part ) { KTemporaryFile file; file.setAutoRemove(false); file.open(); file.write( data ); file.flush(); part->openUrl( KUrl( file.fileName() ) ); mMainWidget = part->widget(); } else { mMainWidget = new QLabel( i18n( "No part found for visualization of mimetype %1", mimetype ), this ); } mData = data; mSaveButton->setEnabled( true ); } else { mMainWidget = new QLabel( i18n( "Got data of unknown mimetype" ), this ); } mLayout->addWidget( mMainWidget, 0, 0, 3, 1); mMainWidget->show(); }
void FileManager::openFile( const QString& fileName, const QString& name, const QString& title, const QString& partName, const QVariantList& partParams ) { if( fileName.isEmpty() ) return; QString fullName = name.isEmpty() ? KUrl( fileName ).fileName() : name; QString fullTitle = title.isEmpty() ? fullName : title; if( d->parts.contains( fullName ) ) { emit newPart( fullName, fullTitle ); return; } KMimeType::Ptr mime = KMimeType::findByPath( fileName ); KParts::ReadOnlyPart* part = 0; KService::List parts; if( !partName.isEmpty() ) { KService::Ptr service = KService::serviceByDesktopName( partName ); if( !service.isNull() ) parts.append( service ); } if( parts.count() == 0 ) { parts.append( KMimeTypeTrader::self()->query( mime->name(), "KParts/ReadWritePart" ) ); parts.append( KMimeTypeTrader::self()->query( mime->name(), "KParts/ReadOnlyPart" ) ); if( mime->name().contains( "audio" ) && parts.count() == 0 ) parts.append( KService::serviceByStorageId( "dragonplayer_part.desktop" ) ); } if( parts.count() > 0 ) { part = parts.first()->createInstance<KParts::ReadWritePart>( 0, partParams ); if( !part ) part = parts.first()->createInstance<KParts::ReadOnlyPart>( 0, partParams ); } if( part ) { // Add the part if it is found KUrl url( fileName ); part->openUrl( url ); d->parts.insert( fullName, part ); d->partManager->addPart( part, true ); emit newPart( fullName, fullTitle ); return; } // There really is no part that can be used. // Instead, just open it in an external application. // KRun* runner = new KRun( KUrl( fileName ), qApp->activeWindow() ); }
void AutoRefresh::slotRefresh() { KParts::ReadOnlyPart *part = qobject_cast< KParts::ReadOnlyPart * >( parent() ); if ( !part ) { QString title = i18nc( "@title:window", "Cannot Refresh Source" ); QString text = i18n( "<qt>This plugin cannot auto-refresh the current part.</qt>" ); KMessageBox::error( 0, text, title ); } else { // Get URL KUrl url = part->url(); part->openUrl( url ); } }
void KGraphEditor::openUrl(const KUrl& url) { kDebug() << url; KParts::ReadOnlyPart *part = slotNewGraph(); // (KGraphEditorSettings::parsingMode() == "external") // ?kgv->setLayoutMethod(KGraphViewerInterface::ExternalProgram) // :kgv->setLayoutMethod(KGraphViewerInterface::InternalLibrary); QString label = url.path().section('/',-1,-1); // @TODO set label m_widget->setTabText(m_widget->currentIndex(), label); m_tabsFilesMap[m_widget->currentWidget()] = url.path(); part->openUrl(url); m_openedFiles.push_back(url.path()); }
void Shell::slotOpenFile() { //FIXME this is getting far to deeply indented... maybe some of it should be pulled out? //check if there is an open tab... if (mainView->currentIndex() == -1) { //no tabs open so we can just use the openFileNewTab slot :D slotOpenFileNewTab(); } else { //check to see if the collection manager is open, and if thats our current tab //since we can't open files with the collection manager... if (mainView->indexOf(m_collection->widget()) == mainView->currentIndex()) { //we're trying to open things in the collection... which is bad, so use a new tab :D slotOpenFileNewTab(); } else { //we have an open reader tab so... //first get the filename from the user QString filename = KFileDialog::getOpenFileName(); //check if the filename is null, open the file if its NOT null if (!filename.isNull()) { KUrl tempUrl = filename; //might be a better way to get the part, but it works elsewhere so... ReaderPage *curPage = qobject_cast<ReaderPage *>(mainView->widget(mainView->currentIndex())); //this is kind of naive as most kparts support multiple mimetypes //but i couldn't find an easy way to get a list of supported types //from a kpart... FIXME QString newMimeType = KMimeType::findByUrl(tempUrl)->name(); KParts::ReadOnlyPart *curpart = curPage->getPart(); if (curPage->getMimeType() == newMimeType) { curpart->openUrl(tempUrl); } else { //if the mimetype has changed we need to delete the currentpage and open a replacement ReaderPage *newPage = new ReaderPage(&tempUrl, this); if (newPage) { int index = mainView->currentIndex(); mainView->removeTab(index); mainView->insertTab(index, newPage, tempUrl.fileName()); m_manager->replacePart(curpart, newPage->getPart()); // remove the old reader page from the open list and add the new page openPagesList.replace(openPagesList.indexOf(curPage), newPage); delete(curPage); } } } } } }
QObject* FormModule::loadPart(QWidget* parent, const QString& name, const QUrl& url) { //name e.g. "libkghostview" KPluginFactory* factory = KPluginLoader( name.toLatin1() ).factory(); if( ! factory ) { kWarning() << QString("Kross::FormModule::loadPart: No such library \"%1\"").arg(name); return 0; } KParts::ReadOnlyPart* part = factory->create< KParts::ReadOnlyPart >( parent ); if( ! part ) { kWarning() << QString("Kross::FormModule::loadPart: Library \"%1\" is not a KPart").arg(name); return 0; } if( url.isValid() ) part->openUrl(url); if( parent && parent->layout() && part->widget() ) parent->layout()->addWidget( part->widget() ); return part; }
QObject* KWebPluginFactory::create(const QString& _mimeType, const QUrl& url, const QStringList& argumentNames, const QStringList& argumentValues) const { // Only attempt to find a KPart for the supported mime types... QVariantList arguments; const int count = argumentNames.count(); for (int i = 0; i < count; ++i) { arguments << QString(argumentNames.at(i) + QL1S("=\"") + argumentValues.at(i) + QL1C('\"')); } QString mimeType (_mimeType.trimmed()); // If no mimetype is provided, we do our best to correctly determine it here... if (mimeType.isEmpty()) { kDebug(800) << "Looking up missing mimetype for plugin resource:" << url; const KUrl reqUrl (url); KMimeType::Ptr ptr = KMimeType::findByUrl(reqUrl, 0, reqUrl.isLocalFile()); if (ptr->isDefault()) mimeType = ptr->name(); // Disregard inode/* mime-types... if (mimeType.startsWith(QLatin1String("inode/"), Qt::CaseInsensitive)) mimeType.clear(); kDebug(800) << "Updated mimetype to" << mimeType; } KParts::ReadOnlyPart* part = 0; // Defer handling of flash content to QtWebKit's builtin viewer. // If you want to use/test KDE's nspluginviewer, comment out the // if statement below. if (!mimeType.isEmpty() && !excludedMimeType(mimeType)) part = KMimeTypeTrader::createPartInstanceFromQuery<KParts::ReadOnlyPart>(mimeType, 0, parent(), QString(), arguments); kDebug(800) << "Asked for" << mimeType << "plugin, got" << part; if (part) { QMap<QString, QString> metaData = part->arguments().metaData(); QString urlStr = url.toString(QUrl::RemovePath | QUrl::RemoveQuery | QUrl::RemoveFragment); metaData.insert("PropagateHttpHeader", "true"); metaData.insert("referrer", urlStr); metaData.insert("cross-domain", urlStr); metaData.insert("main_frame_request", "TRUE"); metaData.insert("ssl_activate_warnings", "TRUE"); KWebPage *page = qobject_cast<KWebPage *>(parent()); if (page) { const QString scheme = page->mainFrame()->url().scheme(); if (page && (QString::compare(scheme, QL1S("https"), Qt::CaseInsensitive) == 0 || QString::compare(scheme, QL1S("webdavs"), Qt::CaseInsensitive) == 0)) metaData.insert("ssl_was_in_use", "TRUE"); else metaData.insert("ssl_was_in_use", "FALSE"); } KParts::OpenUrlArguments openUrlArgs = part->arguments(); openUrlArgs.metaData() = metaData; openUrlArgs.setMimeType(mimeType); part->setArguments(openUrlArgs); part->openUrl(url); return part->widget(); } return 0; }