From 50b48aec6ddd451a6d1709c0942477b503457663 Mon Sep 17 00:00:00 2001 From: tpearson Date: Wed, 3 Feb 2010 02:15:56 +0000 Subject: Added abandoned KDE3 version of K3B git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/k3b@1084400 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- src/k3bstatusbarmanager.cpp | 250 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 250 insertions(+) create mode 100644 src/k3bstatusbarmanager.cpp (limited to 'src/k3bstatusbarmanager.cpp') diff --git a/src/k3bstatusbarmanager.cpp b/src/k3bstatusbarmanager.cpp new file mode 100644 index 0000000..b6e603d --- /dev/null +++ b/src/k3bstatusbarmanager.cpp @@ -0,0 +1,250 @@ +/* + * + * $Id: k3bstatusbarmanager.cpp 619556 2007-01-03 17:38:12Z trueg $ + * Copyright (C) 2003 Sebastian Trueg + * + * This file is part of the K3b project. + * Copyright (C) 1998-2007 Sebastian Trueg + * + * 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 "k3bstatusbarmanager.h" +#include +#include "k3bbusywidget.h" +#include "k3b.h" +#include +#include +#include "k3bprojectmanager.h" +#include "k3bapplication.h" +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + + + +K3bStatusBarManager::K3bStatusBarManager( K3bMainWindow* parent ) + : QObject(parent), + m_mainWindow(parent) +{ + // setup free temp space box + QHBox* boxFreeTemp = new QHBox( m_mainWindow->statusBar() ); + boxFreeTemp->setSpacing(2); + + m_labelProjectInfo = new QLabel( m_mainWindow->statusBar() ); + + m_pixFreeTemp = new QLabel( boxFreeTemp ); + (void)new QLabel( i18n("Temp:"), boxFreeTemp ); + m_pixFreeTemp->setPixmap( SmallIcon("folder_green") ); + m_labelFreeTemp = new QLabel( boxFreeTemp ); + boxFreeTemp->installEventFilter( this ); + + // setup info area + m_labelInfoMessage = new QLabel( " ", m_mainWindow->statusBar() ); + + // setup version info + m_versionBox = new QLabel( QString("K3b %1").arg(kapp->aboutData()->version()), m_mainWindow->statusBar() ); + m_versionBox->installEventFilter( this ); + + // setup the statusbar + m_mainWindow->statusBar()->addWidget( m_labelInfoMessage, 1 ); // for showing some info + m_mainWindow->statusBar()->addWidget( m_labelProjectInfo, 0, true ); + // a spacer item + m_mainWindow->statusBar()->addWidget( new QLabel( " ", m_mainWindow->statusBar() ), 0, true ); + m_mainWindow->statusBar()->addWidget( boxFreeTemp, 0, true ); + // a spacer item + m_mainWindow->statusBar()->addWidget( new QLabel( " ", m_mainWindow->statusBar() ), 0, true ); + m_mainWindow->statusBar()->addWidget( m_versionBox, 0, true ); + + connect( m_mainWindow, SIGNAL(configChanged(KConfig*)), this, SLOT(update()) ); + connect( m_mainWindow->actionCollection(), SIGNAL(actionStatusText(const QString&)), + this, SLOT(showActionStatusText(const QString&)) ); + connect( m_mainWindow->actionCollection(), SIGNAL(clearStatusText()), + this, SLOT(clearActionStatusText()) ); + connect( k3bappcore->projectManager(), SIGNAL(activeProjectChanged(K3bDoc*)), + this, SLOT(slotActiveProjectChanged(K3bDoc*)) ); + connect( k3bappcore->projectManager(), SIGNAL(projectChanged(K3bDoc*)), + this, SLOT(slotActiveProjectChanged(K3bDoc*)) ); + connect( (m_updateTimer = new QTimer( this )), SIGNAL(timeout()), this, SLOT(slotUpdateProjectStats()) ); + + update(); +} + + +K3bStatusBarManager::~K3bStatusBarManager() +{ +} + + +void K3bStatusBarManager::update() +{ + QString path = K3b::defaultTempPath(); + + if( !QFile::exists( path ) ) + path.truncate( path.findRev('/') ); + + unsigned long size, avail; + if( K3b::kbFreeOnFs( path, size, avail ) ) + slotFreeTempSpace( path, size, 0, avail ); + else + m_labelFreeTemp->setText(i18n("No info")); + + if( path != QToolTip::textFor( m_labelFreeTemp->parentWidget() ) ) { + QToolTip::remove( m_labelFreeTemp->parentWidget() ); + QToolTip::add( m_labelFreeTemp->parentWidget(), path ); + } +} + + +void K3bStatusBarManager::slotFreeTempSpace(const QString&, + unsigned long kbSize, + unsigned long, + unsigned long kbAvail) +{ + m_labelFreeTemp->setText(KIO::convertSizeFromKB(kbAvail) + "/" + + KIO::convertSizeFromKB(kbSize) ); + + // if we have less than 640 MB that is not good + if( kbAvail < 655360 ) + m_pixFreeTemp->setPixmap( SmallIcon("folder_red") ); + else + m_pixFreeTemp->setPixmap( SmallIcon("folder_green") ); + + // update the display every second + QTimer::singleShot( 2000, this, SLOT(update()) ); +} + + +void K3bStatusBarManager::showActionStatusText( const QString& text ) +{ + m_mainWindow->statusBar()->message( text ); +} + + +void K3bStatusBarManager::clearActionStatusText() +{ + m_mainWindow->statusBar()->clear(); +} + + +bool K3bStatusBarManager::eventFilter( QObject* o, QEvent* e ) +{ + if( e->type() == QEvent::MouseButtonDblClick ) { + if( o == m_labelFreeTemp->parentWidget() ) + m_mainWindow->showOptionDialog( 0 ); // FIXME: use an enumeration for the option pages + else if( o == m_versionBox ) + if( KAction* a = m_mainWindow->action( "help_about_app" ) ) + a->activate(); + } + + return QObject::eventFilter( o, e ); +} + + +static QString dataDocStats( K3bDataDoc* dataDoc ) +{ + return i18n("1 file in %1", "%n files in %1", dataDoc->root()->numFiles() ) + .arg( i18n("1 folder", "%n folders", dataDoc->root()->numDirs()+1 ) ); +} + + +void K3bStatusBarManager::slotActiveProjectChanged( K3bDoc* doc ) +{ + if( doc && doc == k3bappcore->projectManager()->activeProject() ) { + // cache updates + if( !m_updateTimer->isActive() ) { + slotUpdateProjectStats(); + m_updateTimer->start( 1000, false ); + } + } + else if( !doc ) { + m_labelProjectInfo->setText( QString() ); + } +} + + +void K3bStatusBarManager::slotUpdateProjectStats() +{ + K3bDoc* doc = k3bappcore->projectManager()->activeProject(); + if( doc ) { + switch( doc->type() ) { + case K3bDoc::AUDIO: { + K3bAudioDoc* audioDoc = static_cast( doc ); + m_labelProjectInfo->setText( i18n("Audio CD (1 track)", "Audio CD (%n tracks)", audioDoc->numOfTracks() ) ); + break; + } + + case K3bDoc::DATA: { + K3bDataDoc* dataDoc = static_cast( doc ); + m_labelProjectInfo->setText( i18n("Data CD (%1)").arg(dataDocStats(dataDoc)) ); + break; + } + + case K3bDoc::MIXED: { + K3bAudioDoc* audioDoc = static_cast( doc )->audioDoc(); + K3bDataDoc* dataDoc = static_cast( doc )->dataDoc(); + m_labelProjectInfo->setText( i18n("Mixed CD (1 track and %1)", "Mixed CD (%n tracks and %1)", audioDoc->numOfTracks() ) + .arg( dataDocStats(dataDoc)) ); + break; + } + + case K3bDoc::VCD: { + K3bVcdDoc* vcdDoc = static_cast( doc ); + m_labelProjectInfo->setText( i18n("Video CD (1 track)", "Video CD (%n tracks)", vcdDoc->numOfTracks() ) ); + break; + } + + case K3bDoc::MOVIX: { + K3bDataDoc* dataDoc = static_cast( doc ); + m_labelProjectInfo->setText( i18n("eMovix CD (%1)").arg(dataDocStats(dataDoc)) ); + break; + } + + case K3bDoc::MOVIX_DVD: { + K3bDataDoc* dataDoc = static_cast( doc ); + m_labelProjectInfo->setText( i18n("eMovix DVD (%1)").arg(dataDocStats(dataDoc)) ); + break; + } + + case K3bDoc::DVD: { + K3bDataDoc* dataDoc = static_cast( doc ); + m_labelProjectInfo->setText( i18n("Data DVD (%1)").arg(dataDocStats(dataDoc)) ); + break; + } + + case K3bDoc::VIDEODVD: { + K3bDataDoc* dataDoc = static_cast( doc ); + m_labelProjectInfo->setText( i18n("Video DVD (%1)").arg(dataDocStats(dataDoc)) ); + break; + } + } + } + else { + m_labelProjectInfo->setText( QString() ); + } +} + +#include "k3bstatusbarmanager.moc" -- cgit v1.2.3