summaryrefslogtreecommitdiff
authorzecke <zecke>2004-03-23 00:36:37 (UTC)
committer zecke <zecke>2004-03-23 00:36:37 (UTC)
commitd7581f7cd0ba6adb43ee5c4bdeae696c0a16ae3b (patch) (side-by-side diff)
treec65e9015323fb7fc4fec45038aa0f0a19b43252f
parent428b687982966dc2efabaf6dbcc55ad0ea30aa10 (diff)
downloadopie-d7581f7cd0ba6adb43ee5c4bdeae696c0a16ae3b.zip
opie-d7581f7cd0ba6adb43ee5c4bdeae696c0a16ae3b.tar.gz
opie-d7581f7cd0ba6adb43ee5c4bdeae696c0a16ae3b.tar.bz2
Fix communication. It seems like QPixmap and QDataStream
do not mix well if the QPixmap is not valid.. invalidate image requests if we change the dir
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/graphics/opie-eye/gui/iconview.cpp6
-rw-r--r--noncore/graphics/opie-eye/lib/slavemaster.cpp7
-rw-r--r--noncore/graphics/opie-eye/slave/slavereciever.cpp7
3 files changed, 17 insertions, 3 deletions
diff --git a/noncore/graphics/opie-eye/gui/iconview.cpp b/noncore/graphics/opie-eye/gui/iconview.cpp
index 0b80012..38a621e 100644
--- a/noncore/graphics/opie-eye/gui/iconview.cpp
+++ b/noncore/graphics/opie-eye/gui/iconview.cpp
@@ -48,149 +48,153 @@ namespace {
/*
* If we request an Image or String
* we add it to the map
*/
QMap<QString, IconViewItem*> g_stringInf;
QMap<QString, IconViewItem*> g_stringPix;
IconViewItem::IconViewItem( QIconView* view,const QString& path,
const QString& name, bool isDir )
: QIconViewItem( view ), m_path( path ), m_isDir( isDir ),
m_noInfo( false )
{
QIconViewItem::setText( name );
if ( isDir && !_dirPix )
_dirPix = new QPixmap( Resource::loadPixmap("advancedfm/FileBrowser"));
else if ( !isDir && !_unkPix )
_unkPix = new QPixmap( Resource::loadPixmap( "UnknownDocument" ) );
}
inline QPixmap* IconViewItem::pixmap()const {
if ( m_isDir )
return _dirPix;
else{
if (!m_noInfo && !g_stringInf.contains( m_path ) ) {
currentView()->dirLister()->imageInfo( m_path );
g_stringInf.insert( m_path, const_cast<IconViewItem*>(this));
}
m_pix = PPixmapCache::self()->cachedImage( m_path, 64, 64 );
if ( !m_pix && !g_stringPix.contains( m_path )) {
currentView()->dirLister()->thumbNail( m_path, 64, 64 );
g_stringPix.insert( m_path, const_cast<IconViewItem*>(this));
}
return m_pix ? m_pix : _unkPix;
}
}
inline void IconViewItem::setText( const QString& str ) {
QString text = QIconViewItem::text()+"\n"+str;
m_noInfo = true;
QIconViewItem::setText( text );
}
}
PIconView::PIconView( QWidget* wid, Config* cfg )
: QVBox( wid ), m_cfg( cfg )
{
{
- QCopEnvelope( "QPE/Application/opie-eye_slave", "foo()" );
+// QCopEnvelope( "QPE/Application/opie-eye_slave", "foo()" );
}
m_path = QDir::homeDirPath();
QHBox *hbox = new QHBox( this );
QLabel* lbl = new QLabel( hbox );
lbl->setText( tr("View as" ) );
m_views = new QComboBox( hbox, "View As" );
connect( m_views, SIGNAL(activated(int)),
this, SLOT(slotViewChanged(int)) );
m_view= new QIconView( this );
connect(m_view, SIGNAL(clicked(QIconViewItem*) ),
this, SLOT(slotClicked(QIconViewItem*)) );
m_view->setArrangement( QIconView::LeftToRight );
m_view->setItemTextPos( QIconView::Right );
int dw = QApplication::desktop()->width();
int viewerWidth = dw-style().scrollBarExtent().width();
m_view->setGridX( viewerWidth-2*m_view->spacing() );
m_view->setGridY( fontMetrics().height()*2+40 );
loadViews();
slotViewChanged( m_views->currentItem() );
}
PIconView::~PIconView() {
}
void PIconView::slotDirUp() {
QDir dir( m_path );
dir.cdUp();
slotChangeDir( dir.absPath() );
}
void PIconView::slotChangeDir(const QString& path) {
if ( !currentView() )
return;
PDirLister *lister = currentView()->dirLister();
if (!lister )
return;
lister->setStartPath( path );
m_path = lister->currentPath();
m_view->clear();
addFolders( lister->folders() );
addFiles( lister->files() );
+ // Also invalidate the cache. We can't cancel the operations anyway
+ g_stringPix.clear();
+ g_stringInf.clear();
+
// looks ugly
static_cast<QMainWindow*>(parent())->setCaption( QObject::tr("%1 - O View", "Name of the dir").arg( m_path ) );
}
QString PIconView::currentFileName(bool &isDir)const {
isDir = false;
QIconViewItem* _it = m_view->currentItem();
if ( !_it )
return QString::null;
IconViewItem* it = static_cast<IconViewItem*>( _it );
isDir = it->isDir();
return it->path();
}
void PIconView::slotTrash() {
bool isDir;
QString pa = currentFileName( isDir );
if ( isDir && pa.isEmpty() )
return;
if (!QPEMessageBox::confirmDelete( this,
tr("Delete Image" ),
tr("the Image %1" ).arg(pa)))
return
currentView()->dirLister()->deleteImage( pa );
delete m_view->currentItem();
}
void PIconView::loadViews() {
ViewMap::Iterator it;
ViewMap* map = viewMap();
for ( it = map->begin(); it != map->end(); ++it )
m_views->insertItem( QObject::tr(it.key() ) );
}
void PIconView::resetView() {
slotViewChanged(m_views->currentItem());
}
void PIconView::slotViewChanged( int i) {
if (!m_views->count() ) {
setCurrentView( 0l);
return;
}
PDirView* cur = currentView();
diff --git a/noncore/graphics/opie-eye/lib/slavemaster.cpp b/noncore/graphics/opie-eye/lib/slavemaster.cpp
index 18dc883..4e28535 100644
--- a/noncore/graphics/opie-eye/lib/slavemaster.cpp
+++ b/noncore/graphics/opie-eye/lib/slavemaster.cpp
@@ -1,70 +1,75 @@
#include "slavemaster.h"
#include <qpe/qpeapplication.h>
#include <qpe/qcopenvelope_qws.h>
#include <qcopchannel_qws.h>
#include <qtimer.h>
QDataStream & operator << (QDataStream & str, bool b)
{
str << Q_INT8(b);
return str;
}
QDataStream & operator >> (QDataStream & str, bool & b)
{
Q_INT8 l;
str >> l;
b = bool(l);
return str;
}
+
+/*
+ * ! We don't put a Pixmap in!!!!
+ */
QDataStream &operator<<( QDataStream& s, const PixmapInfo& inf) {
- return s << inf.file << inf.pixmap << inf.width << inf.height;
+ qWarning( "Image request is %s %d %d", inf.file.latin1(), inf.width, inf.height );
+ return s << inf.file << inf.width << inf.height;
}
QDataStream &operator>>( QDataStream& s, PixmapInfo& inf ) {
s >> inf.file >> inf.pixmap >> inf.width >> inf.height;
return s;
}
QDataStream &operator<<( QDataStream& s, const ImageInfo& i) {
return s << i.kind << i.file << i.info;
}
QDataStream &operator>>( QDataStream& s, ImageInfo& i ) {
s >> i.kind >> i.file >> i.info;
return s;
}
SlaveMaster* SlaveMaster::m_master = 0;
SlaveMaster::SlaveMaster()
: m_started( false )
{
QCopChannel *chan= new QCopChannel( "QPE/opie-eye",this );
connect(chan, SIGNAL(received(const QCString&,const QByteArray&)),
this, SLOT(recieve(const QCString&,const QByteArray&)) );
}
SlaveMaster::~SlaveMaster() {
}
SlaveMaster* SlaveMaster::self() {
if ( !m_master )
m_master = new SlaveMaster;
return m_master;
}
void SlaveMaster::thumbInfo( const QString& str) {
m_inThumbInfo.append( str );
if ( !m_started ) {
QTimer::singleShot( 0, this, SLOT(slotTimerStart()));
m_started = true;
}
}
void SlaveMaster::imageInfo( const QString& str ) {
m_inImageInfo.append( str );
if ( !m_started ) {
QTimer::singleShot( 0, this, SLOT(slotTimerStart()));
m_started = true;
diff --git a/noncore/graphics/opie-eye/slave/slavereciever.cpp b/noncore/graphics/opie-eye/slave/slavereciever.cpp
index 951f3df..c8e33d4 100644
--- a/noncore/graphics/opie-eye/slave/slavereciever.cpp
+++ b/noncore/graphics/opie-eye/slave/slavereciever.cpp
@@ -1,83 +1,88 @@
/*
* GPLv2 zecke@handhelds.org
*/
#include "slavereciever.h"
#include "slaveiface.h"
#include <qpe/qcopenvelope_qws.h>
#include <qpe/qpeapplication.h>
#include <qtimer.h>
static SlaveObjects* _slaveObj = 0;
QDataStream & operator << (QDataStream & str, bool b)
{
str << Q_INT8(b);
return str;
}
QDataStream & operator >> (QDataStream & str, bool & b)
{
Q_INT8 l;
str >> l;
b = bool(l);
return str;
}
QDataStream &operator<<( QDataStream& s, const PixmapInfo& inf) {
return s << inf.file << inf.pixmap << inf.width << inf.height;
}
+
+/*
+ * GUI sends no QPIxmap!!!
+ */
QDataStream &operator>>( QDataStream& s, PixmapInfo& inf ) {
- s >> inf.file >> inf.pixmap >> inf.width >> inf.height;
+ s >> inf.file >> inf.width >> inf.height;
+ qWarning( "Recieved %s %d %d", inf.file.latin1(), inf.width, inf.height );
return s;
}
QDataStream &operator<<( QDataStream& s, const ImageInfo& i) {
return s << i.kind << i.file << i.info;
}
QDataStream &operator>>( QDataStream& s, ImageInfo& i ) {
s >> i.kind >> i.file >> i.info;
return s;
}
SlaveObjects* slaveObjects() {
if ( !_slaveObj )
_slaveObj = new SlaveObjects;
return _slaveObj;
}
SlaveReciever::SlaveReciever( QObject* par)
: QObject( par )
{
m_inf = new QTimer(this);
connect(m_inf,SIGNAL(timeout()),
this, SLOT(slotImageInfo()));
m_pix = new QTimer(this);
connect(m_pix,SIGNAL(timeout()),
this, SLOT(slotThumbNail()));
m_out = new QTimer(this);
connect(m_out,SIGNAL(timeout()),
this, SLOT(slotSend()));
SlaveObjects *obj = slaveObjects(); // won't be changed
SlaveMap::Iterator it;
SlaveMap* map = slaveMap(); // SlaveMap won't be changed during execution!!!
for(it = map->begin(); it != map->end(); ++it ) {
obj->insert( it.key(), (*it.data())() );
}
}
SlaveReciever::~SlaveReciever() {
}
void SlaveReciever::recieveAnswer( const QCString& string, const QByteArray& ar) {
qWarning( "String is %s", string.data() );
QDataStream stream(ar, IO_ReadOnly );
QStringList lst;
static ImageInfo inf;