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.
tdeaddons/konq-plugins/sidebar/metabar/src/settingsplugin.cpp

202 lines
5.7 KiB

/***************************************************************************
* Copyright (C) 2005 by Florian Roth *
* florian@synatic.net *
* *
* 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. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
#include "metabarwidget.h"
#include "settingsplugin.h"
#include <tdecmoduleinfo.h>
#include <kservice.h>
#include <klocale.h>
#include <html_document.h>
#include <html_element.h>
#include <dom_string.h>
SettingsPlugin::SettingsPlugin(KHTMLPart* html, MetabarFunctions *functions, const char *name) : ProtocolPlugin (html, functions, name)
{
list_job = 0;
}
SettingsPlugin::~SettingsPlugin()
{
}
void SettingsPlugin::killJobs()
{
if(list_job){
list_job->kill();
list_job = 0;
}
}
void SettingsPlugin::deactivate()
{
m_functions->hide("actions");
m_functions->hide("info");
}
void SettingsPlugin::loadActions(DOM::HTMLElement node)
{
KURL url = m_items.getFirst()->url();
if(url.path().endsWith("/")){
list_job = TDEIO::listDir(url, true, false);
connect(list_job, TQT_SIGNAL(entries(TDEIO::Job *, const TDEIO::UDSEntryList &)), this, TQT_SLOT(slotGotEntries(TDEIO::Job *, const TDEIO::UDSEntryList &)));
connect(list_job, TQT_SIGNAL(result(TDEIO::Job *)), this, TQT_SLOT(slotJobFinished(TDEIO::Job *)));
m_functions->show("actions");
}
else{
TQString path = url.path();
TQString name = url.filename();
KService::Ptr service = KService::serviceByStorageId(name);
if(service && service->isValid()){
TDECModuleInfo kcminfo(service);
DOM::DOMString innerHTML;
MetabarWidget::addEntry(innerHTML, i18n("Run"), "tdecmshell:/" + name, kcminfo.icon());
node.setInnerHTML(innerHTML);
m_functions->show("actions");
}
else{
m_functions->hide("actions");
}
}
}
void SettingsPlugin::loadInformation(DOM::HTMLElement node)
{
KURL url = m_items.getFirst()->url();
if(url.path().endsWith("/")){
m_functions->hide("info");
}
else{
TQString path = url.path();
TQString name = url.filename();
KService::Ptr service = KService::serviceByStorageId(name);
if(service && service->isValid()){
TDECModuleInfo kcminfo(service);
bool needsRoot = kcminfo.needsRootPrivileges();
DOM::DOMString innerHTML;
innerHTML += "<ul class=\"info\"><b>" + i18n("Name") + ": </b>";
innerHTML += kcminfo.moduleName();
innerHTML += "</ul><ul class=\"info\"><b>" + i18n("Comment") + ": </b>";
innerHTML += kcminfo.comment();
innerHTML += "</ul>";
if(needsRoot){
innerHTML += "<ul class=\"info\"><b>";
innerHTML += i18n("Needs root privileges");
innerHTML += "</b></ul>";
}
node.setInnerHTML(innerHTML);
m_functions->show("info");
}
else{
m_functions->hide("info");
}
}
}
void SettingsPlugin::loadApplications(DOM::HTMLElement node)
{
m_functions->hide("open");
}
void SettingsPlugin::loadPreview(DOM::HTMLElement node)
{
m_functions->hide("preview");
}
void SettingsPlugin::loadBookmarks(DOM::HTMLElement node)
{
m_functions->hide("bookmarks");
}
bool SettingsPlugin::handleRequest(const KURL &)
{
return false;
}
void SettingsPlugin::slotGotEntries(TDEIO::Job *job, const TDEIO::UDSEntryList &list)
{
if(!job){
return;
}
DOM::HTMLDocument doc = m_html->htmlDocument();
DOM::HTMLElement node = doc.getElementById("actions");
DOM::DOMString innerHTML;
TDEIO::UDSEntryList::ConstIterator it = list.begin();
TDEIO::UDSEntryList::ConstIterator it_end = list.end();
for(; it != it_end; ++it){
TQString name;
TQString icon;
TQString url;
long type;
TDEIO::UDSEntry::ConstIterator atomit = (*it).begin();
TDEIO::UDSEntry::ConstIterator atomit_end = (*it).end();
for(; atomit != atomit_end; ++atomit){
if((*atomit).m_uds == TDEIO::UDS_NAME){
name = (*atomit).m_str;
}
else if((*atomit).m_uds == TDEIO::UDS_ICON_NAME){
icon = (*atomit).m_str;
}
else if((*atomit).m_uds == TDEIO::UDS_URL){
url = (*atomit).m_str;
}
else if((*atomit).m_uds == TDEIO::UDS_FILE_TYPE){
type = (*atomit).m_long;
}
}
kdDebug() << url << endl;
if(type == S_IFREG){
url = "tdecmshell:/" + KURL(url).filename();
}
MetabarWidget::addEntry(innerHTML, name, url, icon);
}
node.setInnerHTML(innerHTML);
}
void SettingsPlugin::slotJobFinished(TDEIO::Job *job)
{
if(list_job && job == list_job){
list_job = 0;
m_functions->adjustSize("actions");
}
}
#include "settingsplugin.moc"