summaryrefslogtreecommitdiffstats
path: root/src/k3bmediacontentsview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/k3bmediacontentsview.cpp')
-rw-r--r--src/k3bmediacontentsview.cpp166
1 files changed, 166 insertions, 0 deletions
diff --git a/src/k3bmediacontentsview.cpp b/src/k3bmediacontentsview.cpp
new file mode 100644
index 0000000..4f42595
--- /dev/null
+++ b/src/k3bmediacontentsview.cpp
@@ -0,0 +1,166 @@
+/*
+ *
+ * $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 <qlabel.h>
+#include <qlayout.h>
+#include <qpixmap.h>
+#include <qwidgetstack.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,
+ QWidget* 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(), SIGNAL(mediumChanged(K3bDevice::Device*)),
+ this, 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 QWidgetStack and let it set an active flag
+ // to replace this hack
+ if( QWidgetStack* stack = dynamic_cast<QWidgetStack*>( 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"