From 4aed2c8219774f5d797760606b8489a92ddc5163 Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features. BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdebase@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- kicker/kicker/buttons/urlbutton.cpp | 201 ++++++++++++++++++++++++++++++++++++ 1 file changed, 201 insertions(+) create mode 100644 kicker/kicker/buttons/urlbutton.cpp (limited to 'kicker/kicker/buttons/urlbutton.cpp') diff --git a/kicker/kicker/buttons/urlbutton.cpp b/kicker/kicker/buttons/urlbutton.cpp new file mode 100644 index 000000000..007b0cc00 --- /dev/null +++ b/kicker/kicker/buttons/urlbutton.cpp @@ -0,0 +1,201 @@ +/***************************************************************** + +Copyright (c) 1996-2000 the kicker authors. See file AUTHORS. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +******************************************************************/ + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "global.h" +#include "kicker.h" + +#include "urlbutton.h" +#include "urlbutton.moc" + +URLButton::URLButton( const QString& url, QWidget* parent ) + : PanelButton( parent, "URLButton" ) + , fileItem( 0 ) + , pDlg( 0 ) +{ + initialize( url ); +} + +URLButton::URLButton( const KConfigGroup& config, QWidget* parent ) + : PanelButton( parent, "URLButton" ) + , fileItem( 0 ) + , pDlg( 0 ) +{ + initialize( config.readPathEntry("URL") ); +} + +URLButton::~URLButton() +{ + delete fileItem; +} + +void URLButton::initialize( const QString& _url ) +{ + KURL url(_url); + if (!url.isLocalFile() || !url.path().endsWith(".desktop")) + { + QString file = KickerLib::newDesktopFile(url); + KDesktopFile df(file); + df.writeEntry("Encoding", "UTF-8"); + df.writeEntry("Type","Link"); + df.writeEntry("Name", url.prettyURL()); + if (url.isLocalFile()) + { + KFileItem item( KFileItem::Unknown, KFileItem::Unknown, url ); + df.writeEntry("Icon", item.iconName() ); + } + else + { + df.writeEntry("Icon", KMimeType::favIconForURL(url)); + } + df.writeEntry("URL", url.url()); + url = KURL(); + url.setPath(file); + } + fileItem = new KFileItem( KFileItem::Unknown, KFileItem::Unknown, url ); + setIcon( fileItem->iconName() ); + connect( this, SIGNAL(clicked()), SLOT(slotExec()) ); + setToolTip(); + + if (url.isLocalFile()) + { + backedByFile(url.path()); + } +} + +void URLButton::saveConfig( KConfigGroup& config ) const +{ + config.writePathEntry("URL", fileItem->url().prettyURL()); +} + +void URLButton::setToolTip() +{ + if (fileItem->isLocalFile() + && KDesktopFile::isDesktopFile(fileItem->url().path())) + { + KDesktopFile df(fileItem->url().path()); + + if (df.readComment().isEmpty()) + { + QToolTip::add(this, df.readName()); + } + else + { + QToolTip::add(this, df.readName() + " - " + df.readComment()); + } + + setTitle(df.readName()); + } + else + { + QToolTip::add(this, fileItem->url().prettyURL()); + setTitle(fileItem->url().prettyURL()); + } +} + +void URLButton::dragEnterEvent(QDragEnterEvent *ev) +{ + if ((ev->source() != this) && fileItem->acceptsDrops() && KURLDrag::canDecode(ev)) + ev->accept(rect()); + else + ev->ignore(rect()); + PanelButton::dragEnterEvent(ev); +} + +void URLButton::dropEvent(QDropEvent *ev) +{ + kapp->propagateSessionManager(); + KURL::List execList; + if(KURLDrag::decode(ev, execList)){ + KURL url( fileItem->url() ); + if(!execList.isEmpty()) { + if (KDesktopFile::isDesktopFile(url.path())){ + KApplication::startServiceByDesktopPath(url.path(), execList.toStringList(), + 0, 0, 0, "", true); + } + else // attempt to interpret path as directory + { + KonqOperations::doDrop( fileItem, url, ev, this ); + } + } + } + PanelButton::dropEvent(ev); +} + +void URLButton::startDrag() +{ + emit dragme(KURL::List(fileItem->url()), labelIcon()); +} + +void URLButton::slotExec() +{ + kapp->propagateSessionManager(); + fileItem->run(); +} + +void URLButton::updateURL() +{ + if (pDlg->kurl() != fileItem->url()) { + fileItem->setURL(pDlg->kurl()); + setIcon(fileItem->iconName()); + setToolTip(); + emit requestSave(); + } else { + setIcon(fileItem->iconName()); + setToolTip(); + } + + pDlg = 0L; +} + +void URLButton::properties() +{ + if ( (fileItem->isLocalFile() && !QFile::exists(fileItem->url().path()) ) + || !fileItem->url().isValid()) + { + KMessageBox::error( 0L, i18n("The file %1 does not exist") + .arg(fileItem->url().prettyURL()) ); + return; + } + + pDlg = new KPropertiesDialog(fileItem, 0L, 0L, false, false); // will delete itself + pDlg->setFileNameReadOnly(true); + connect(pDlg, SIGNAL(applied()), SLOT(updateURL())); + pDlg->show(); +} -- cgit v1.2.3