|
|
|
/*
|
|
|
|
* googlefetcherdialog.cpp
|
|
|
|
*
|
|
|
|
* Copyright (C) 2004 Nathan Toone <nathan@toonetown.com>
|
|
|
|
*
|
|
|
|
* 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 <tdeapplication.h>
|
|
|
|
#include <tdeio/netaccess.h>
|
|
|
|
#include <tdelocale.h>
|
|
|
|
#include <kdebug.h>
|
|
|
|
#include <tdemessagebox.h>
|
|
|
|
#include <kcombobox.h>
|
|
|
|
|
|
|
|
#include <tqhbox.h>
|
|
|
|
#include <tqimage.h>
|
|
|
|
#include <tqlabel.h>
|
|
|
|
#include <tqpushbutton.h>
|
|
|
|
#include <tqeventloop.h>
|
|
|
|
|
|
|
|
#include "googlefetcherdialog.h"
|
|
|
|
|
|
|
|
GoogleFetcherDialog::GoogleFetcherDialog(const TQString &name,
|
|
|
|
const GoogleImageList &imageList,
|
|
|
|
const TQString &artist,
|
|
|
|
const TQString &album,
|
|
|
|
TQWidget *parent) :
|
|
|
|
KDialogBase(parent, name.latin1(), true, TQString(),
|
|
|
|
Ok | Cancel | User1 , NoDefault, true),
|
|
|
|
m_pixmap(TQPixmap()),
|
|
|
|
m_imageList(imageList),
|
|
|
|
m_takeIt(false),
|
|
|
|
m_newSearch(false)
|
|
|
|
{
|
|
|
|
m_artist = artist;
|
|
|
|
m_album = album;
|
|
|
|
disableResize();
|
|
|
|
|
|
|
|
TQHBox *mainBox = new TQHBox(this);
|
|
|
|
m_iconWidget = new TDEIconView(mainBox);
|
|
|
|
m_iconWidget->setResizeMode(TQIconView::Adjust);
|
|
|
|
m_iconWidget->setSelectionMode(TQIconView::Extended);
|
|
|
|
m_iconWidget->setSpacing(10);
|
|
|
|
m_iconWidget->setMode(TDEIconView::Execute);
|
|
|
|
m_iconWidget->setFixedSize(500,550);
|
|
|
|
m_iconWidget->arrangeItemsInGrid();
|
|
|
|
m_iconWidget->setItemsMovable(FALSE);
|
|
|
|
|
|
|
|
TQHBox *imgSize = new TQHBox(actionButton(User1)->parentWidget());
|
|
|
|
//TQLabel *label = new TQLabel(imgSize);
|
|
|
|
//label->setText(i18n("Image size:"));
|
|
|
|
|
|
|
|
KComboBox *combo = new KComboBox(imgSize);
|
|
|
|
combo->insertItem(i18n("All Sizes"));
|
|
|
|
combo->insertItem(i18n("Very Small"));
|
|
|
|
combo->insertItem(i18n("Small"));
|
|
|
|
combo->insertItem(i18n("Medium"));
|
|
|
|
combo->insertItem(i18n("Large"));
|
|
|
|
combo->insertItem(i18n("Very Large"));
|
|
|
|
combo->setCurrentItem(0);
|
|
|
|
connect(combo, TQT_SIGNAL(activated(int)), this, TQT_SLOT(imgSizeChanged(int)));
|
|
|
|
connect(m_iconWidget, TQT_SIGNAL( executed(TQIconViewItem*) ), this, TQT_SLOT(slotOk()));
|
|
|
|
|
|
|
|
imgSize->adjustSize();
|
|
|
|
setMainWidget(mainBox);
|
|
|
|
setButtonText(User1, i18n("New Search"));
|
|
|
|
}
|
|
|
|
|
|
|
|
GoogleFetcherDialog::~GoogleFetcherDialog()
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
void GoogleFetcherDialog::setLayout()
|
|
|
|
{
|
|
|
|
setCaption(TQString("%1 - %2 (%3)")
|
|
|
|
.arg(m_artist)
|
|
|
|
.arg(m_album)
|
|
|
|
.arg(m_imageList.size()));
|
|
|
|
|
|
|
|
m_iconWidget->clear();
|
|
|
|
for(uint i = 0; i < m_imageList.size(); i++)
|
|
|
|
new CoverIconViewItem(m_iconWidget, m_imageList[i]);
|
|
|
|
|
|
|
|
adjustSize();
|
|
|
|
}
|
|
|
|
|
|
|
|
void GoogleFetcherDialog::setImageList(const GoogleImageList &imageList)
|
|
|
|
{
|
|
|
|
m_imageList=imageList;
|
|
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// public slots
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
void GoogleFetcherDialog::refreshScreen(GoogleImageList &imageList)
|
|
|
|
{
|
|
|
|
setImageList(imageList);
|
|
|
|
setLayout();
|
|
|
|
}
|
|
|
|
|
|
|
|
int GoogleFetcherDialog::exec()
|
|
|
|
{
|
|
|
|
setLayout();
|
|
|
|
return KDialogBase::exec();
|
|
|
|
}
|
|
|
|
|
|
|
|
void GoogleFetcherDialog::slotOk()
|
|
|
|
{
|
|
|
|
uint selectedIndex = m_iconWidget->index(m_iconWidget->currentItem());
|
|
|
|
m_pixmap = pixmapFromURL(m_imageList[selectedIndex].imageURL());
|
|
|
|
|
|
|
|
if(m_pixmap.isNull()) {
|
|
|
|
KMessageBox::sorry(this,
|
|
|
|
i18n("The cover you have selected is unavailable. Please select another."),
|
|
|
|
i18n("Cover Unavailable"));
|
|
|
|
TQPixmap blankPix;
|
|
|
|
blankPix.resize(80, 80);
|
|
|
|
blankPix.fill();
|
|
|
|
m_iconWidget->currentItem()->setPixmap(blankPix, true, true);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
m_takeIt = true;
|
|
|
|
m_newSearch = false;
|
|
|
|
hide();
|
|
|
|
}
|
|
|
|
|
|
|
|
void GoogleFetcherDialog::slotCancel()
|
|
|
|
{
|
|
|
|
m_takeIt = true;
|
|
|
|
m_newSearch = false;
|
|
|
|
m_pixmap = TQPixmap();
|
|
|
|
hide();
|
|
|
|
}
|
|
|
|
|
|
|
|
void GoogleFetcherDialog::slotUser1()
|
|
|
|
{
|
|
|
|
m_takeIt = false;
|
|
|
|
m_newSearch = true;
|
|
|
|
m_pixmap = TQPixmap();
|
|
|
|
hide();
|
|
|
|
}
|
|
|
|
|
|
|
|
void GoogleFetcherDialog::imgSizeChanged(int index)
|
|
|
|
{
|
|
|
|
GoogleFetcher::ImageSize imageSize = GoogleFetcher::All;
|
|
|
|
switch (index) {
|
|
|
|
case 1:
|
|
|
|
imageSize = GoogleFetcher::Icon;
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
imageSize = GoogleFetcher::Small;
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
imageSize = GoogleFetcher::Medium;
|
|
|
|
break;
|
|
|
|
case 4:
|
|
|
|
imageSize=GoogleFetcher::Large;
|
|
|
|
break;
|
|
|
|
case 5:
|
|
|
|
imageSize=GoogleFetcher::XLarge;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
emit sizeChanged(imageSize);
|
|
|
|
}
|
|
|
|
|
|
|
|
TQPixmap GoogleFetcherDialog::fetchedImage(uint index) const
|
|
|
|
{
|
|
|
|
return (index > m_imageList.count()) ? TQPixmap() : pixmapFromURL(m_imageList[index].imageURL());
|
|
|
|
}
|
|
|
|
|
|
|
|
TQPixmap GoogleFetcherDialog::pixmapFromURL(const KURL &url) const
|
|
|
|
{
|
|
|
|
TQString file;
|
|
|
|
|
|
|
|
if(TDEIO::NetAccess::download(url, file, 0)) {
|
|
|
|
TQPixmap pixmap = TQPixmap(file);
|
|
|
|
TDEIO::NetAccess::removeTempFile(file);
|
|
|
|
return pixmap;
|
|
|
|
}
|
|
|
|
TDEIO::NetAccess::removeTempFile(file);
|
|
|
|
return TQPixmap();
|
|
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// CoverIconViewItem
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
CoverIconViewItem::CoverIconViewItem(TQIconView *parent, const GoogleImage &image) :
|
|
|
|
TQObject(parent), TDEIconViewItem(parent, parent->lastItem(), image.size()), m_job(0)
|
|
|
|
{
|
|
|
|
// Set up the iconViewItem
|
|
|
|
|
|
|
|
TQPixmap mainMap;
|
|
|
|
mainMap.resize(80, 80);
|
|
|
|
mainMap.fill();
|
|
|
|
setPixmap(mainMap, true, true);
|
|
|
|
|
|
|
|
// Start downloading the image.
|
|
|
|
|
|
|
|
m_job = TDEIO::get(image.thumbURL(), false, false);
|
|
|
|
connect(m_job, TQT_SIGNAL(result(TDEIO::Job *)), this, TQT_SLOT(imageResult(TDEIO::Job *)));
|
|
|
|
connect(m_job, TQT_SIGNAL(data(TDEIO::Job *, const TQByteArray &)),
|
|
|
|
this, TQT_SLOT(imageData(TDEIO::Job *, const TQByteArray &)));
|
|
|
|
}
|
|
|
|
|
|
|
|
CoverIconViewItem::~CoverIconViewItem()
|
|
|
|
{
|
|
|
|
if(m_job) {
|
|
|
|
m_job->kill();
|
|
|
|
|
|
|
|
// Drain results issued by TDEIO before being deleted,
|
|
|
|
// and before deleting the job.
|
|
|
|
kapp->eventLoop()->processEvents(TQEventLoop::ExcludeUserInput);
|
|
|
|
|
|
|
|
delete m_job;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void CoverIconViewItem::imageData(TDEIO::Job *, const TQByteArray &data)
|
|
|
|
{
|
|
|
|
int currentSize = m_buffer.size();
|
|
|
|
m_buffer.resize(currentSize + data.size(), TQGArray::SpeedOptim);
|
|
|
|
memcpy(&(m_buffer.data()[currentSize]), data.data(), data.size());
|
|
|
|
}
|
|
|
|
|
|
|
|
void CoverIconViewItem::imageResult(TDEIO::Job *job)
|
|
|
|
{
|
|
|
|
if(job->error())
|
|
|
|
return;
|
|
|
|
|
|
|
|
TQPixmap iconImage(m_buffer);
|
|
|
|
iconImage = TQImage(iconImage.convertToImage()).smoothScale(80, 80);
|
|
|
|
setPixmap(iconImage, true, true);
|
|
|
|
}
|
|
|
|
|
|
|
|
#include "googlefetcherdialog.moc"
|