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.
k3b/src/k3bmediacontentsview.cpp

167 lines
3.7 KiB

/*
*
* $Id: k3bmediacontentsview.cpp 627519 2007-01-26 22:37:51Z trueg $
* Copyright (C) 2003 Sebastian Trueg <trueg@k3b.org>
*
* This file is part of the K3b project.
* Copyright (C) 1998-2007 Sebastian Trueg <trueg@k3b.org>
*
* 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.
* See the file "COPYING" for the exact licensing terms.
*/
#include "k3bmediacontentsview.h"
#include <k3bmediacache.h>
#include <k3bapplication.h>
#include <tqlabel.h>
#include <tqlayout.h>
#include <tqpixmap.h>
#include <tqwidgetstack.h>
class K3bMediaContentsView::Private
{
public:
K3bMedium medium;
int supportedMediumContent;
int supportedMediumTypes;
int supportedMediumStates;
bool autoReload;
};
K3bMediaContentsView::K3bMediaContentsView( bool withHeader,
int mediumContent,
int mediumTypes,
int mediumState,
TQWidget* parent,
const char* name )
: K3bContentsView( withHeader, parent, name )
{
d = new Private;
d->supportedMediumContent = mediumContent;
d->supportedMediumTypes = mediumTypes;
d->supportedMediumStates = mediumState;
d->autoReload = true;
connect( k3bappcore->mediaCache(), TQ_SIGNAL(mediumChanged(K3bDevice::Device*)),
this, TQ_SLOT(slotMediumChanged(K3bDevice::Device*)) );
}
K3bMediaContentsView::~K3bMediaContentsView()
{
delete d;
}
void K3bMediaContentsView::setAutoReload( bool b )
{
d->autoReload = b;
}
int K3bMediaContentsView::supportedMediumContent() const
{
return d->supportedMediumContent;
}
int K3bMediaContentsView::supportedMediumTypes() const
{
return d->supportedMediumTypes;
}
int K3bMediaContentsView::supportedMediumStates() const
{
return d->supportedMediumStates;
}
const K3bMedium& K3bMediaContentsView::medium() const
{
return d->medium;
}
K3bDevice::Device* K3bMediaContentsView::device() const
{
return medium().device();
}
void K3bMediaContentsView::setMedium( const K3bMedium& m )
{
d->medium = m;
}
void K3bMediaContentsView::reload( K3bDevice::Device* dev )
{
reload( k3bappcore->mediaCache()->medium( dev ) );
}
void K3bMediaContentsView::reload( const K3bMedium& m )
{
setMedium( m );
reload();
}
void K3bMediaContentsView::reload()
{
enableInteraction( true );
reloadMedium();
}
void K3bMediaContentsView::enableInteraction( bool enable )
{
mainWidget()->setEnabled( enable );
}
void K3bMediaContentsView::slotMediumChanged( K3bDevice::Device* dev )
{
// FIXME: derive a K3bContentsStack from TQWidgetStack and let it set an active flag
// to replace this hack
if( TQWidgetStack* stack = dynamic_cast<TQWidgetStack*>( parentWidget() ) )
if( stack->visibleWidget() != this )
return;
if( !d->autoReload /*|| !isActive()*/ )
return;
if( dev == device() ) {
K3bMedium m = k3bappcore->mediaCache()->medium( dev );
// no need to reload if the medium did not change (this is even
// important since K3b blocks the devices in action and after
// the release they are signalled as changed)
if( m == medium() ) {
kdDebug() << k_funcinfo << " medium did not change" << endl;
enableInteraction( true );
}
else if( m.content() & supportedMediumContent() &&
m.diskInfo().mediaType() & supportedMediumTypes() &&
m.diskInfo().diskState() & supportedMediumStates() ) {
kdDebug() << k_funcinfo << " new supported medium found" << endl;
reload( m );
}
else {
kdDebug() << k_funcinfo << " unsupported medium found" << endl;
enableInteraction( false );
}
}
}
#include "k3bmediacontentsview.moc"