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.
251 lines
7.7 KiB
251 lines
7.7 KiB
/*
|
|
*
|
|
* $Id: k3bstatusbarmanager.cpp 619556 2007-01-03 17:38:12Z 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 "k3bstatusbarmanager.h"
|
|
#include <k3bcore.h>
|
|
#include "k3bbusywidget.h"
|
|
#include "k3b.h"
|
|
#include <k3bversion.h>
|
|
#include <k3bglobals.h>
|
|
#include "k3bprojectmanager.h"
|
|
#include "k3bapplication.h"
|
|
#include <k3baudiodoc.h>
|
|
#include <k3bdatadoc.h>
|
|
#include <k3bmixeddoc.h>
|
|
#include <k3bvcddoc.h>
|
|
#include <k3bdiritem.h>
|
|
#include <k3bview.h>
|
|
|
|
#include <kiconloader.h>
|
|
#include <tdelocale.h>
|
|
#include <tdeconfig.h>
|
|
#include <kstandarddirs.h>
|
|
#include <tdeio/global.h>
|
|
#include <kstatusbar.h>
|
|
#include <tdeaboutdata.h>
|
|
#include <tdeaction.h>
|
|
|
|
#include <tqlabel.h>
|
|
#include <tqhbox.h>
|
|
#include <tqfile.h>
|
|
#include <tqtimer.h>
|
|
#include <tqevent.h>
|
|
#include <tqtooltip.h>
|
|
|
|
|
|
|
|
K3bStatusBarManager::K3bStatusBarManager( K3bMainWindow* parent )
|
|
: TQObject(parent),
|
|
m_mainWindow(parent)
|
|
{
|
|
// setup free temp space box
|
|
TQHBox* boxFreeTemp = new TQHBox( m_mainWindow->statusBar() );
|
|
boxFreeTemp->setSpacing(2);
|
|
|
|
m_labelProjectInfo = new TQLabel( m_mainWindow->statusBar() );
|
|
|
|
m_pixFreeTemp = new TQLabel( boxFreeTemp );
|
|
(void)new TQLabel( i18n("Temp:"), boxFreeTemp );
|
|
m_pixFreeTemp->setPixmap( SmallIcon("folder_green") );
|
|
m_labelFreeTemp = new TQLabel( boxFreeTemp );
|
|
boxFreeTemp->installEventFilter( this );
|
|
|
|
// setup info area
|
|
m_labelInfoMessage = new TQLabel( " ", m_mainWindow->statusBar() );
|
|
|
|
// setup version info
|
|
m_versionBox = new TQLabel( TQString("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 TQLabel( " ", m_mainWindow->statusBar() ), 0, true );
|
|
m_mainWindow->statusBar()->addWidget( boxFreeTemp, 0, true );
|
|
// a spacer item
|
|
m_mainWindow->statusBar()->addWidget( new TQLabel( " ", m_mainWindow->statusBar() ), 0, true );
|
|
m_mainWindow->statusBar()->addWidget( m_versionBox, 0, true );
|
|
|
|
connect( m_mainWindow, TQT_SIGNAL(configChanged(TDEConfig*)), this, TQT_SLOT(update()) );
|
|
connect( m_mainWindow->actionCollection(), TQT_SIGNAL(actionStatusText(const TQString&)),
|
|
this, TQT_SLOT(showActionStatusText(const TQString&)) );
|
|
connect( m_mainWindow->actionCollection(), TQT_SIGNAL(clearStatusText()),
|
|
this, TQT_SLOT(clearActionStatusText()) );
|
|
connect( k3bappcore->projectManager(), TQT_SIGNAL(activeProjectChanged(K3bDoc*)),
|
|
this, TQT_SLOT(slotActiveProjectChanged(K3bDoc*)) );
|
|
connect( k3bappcore->projectManager(), TQT_SIGNAL(projectChanged(K3bDoc*)),
|
|
this, TQT_SLOT(slotActiveProjectChanged(K3bDoc*)) );
|
|
connect( (m_updateTimer = new TQTimer( this )), TQT_SIGNAL(timeout()), this, TQT_SLOT(slotUpdateProjectStats()) );
|
|
|
|
update();
|
|
}
|
|
|
|
|
|
K3bStatusBarManager::~K3bStatusBarManager()
|
|
{
|
|
}
|
|
|
|
|
|
void K3bStatusBarManager::update()
|
|
{
|
|
TQString path = K3b::defaultTempPath();
|
|
|
|
if( !TQFile::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 != TQToolTip::textFor( m_labelFreeTemp->parentWidget() ) ) {
|
|
TQToolTip::remove( m_labelFreeTemp->parentWidget() );
|
|
TQToolTip::add( m_labelFreeTemp->parentWidget(), path );
|
|
}
|
|
}
|
|
|
|
|
|
void K3bStatusBarManager::slotFreeTempSpace(const TQString&,
|
|
unsigned long kbSize,
|
|
unsigned long,
|
|
unsigned long kbAvail)
|
|
{
|
|
m_labelFreeTemp->setText(TDEIO::convertSizeFromKB(kbAvail) + "/" +
|
|
TDEIO::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
|
|
TQTimer::singleShot( 2000, this, TQT_SLOT(update()) );
|
|
}
|
|
|
|
|
|
void K3bStatusBarManager::showActionStatusText( const TQString& text )
|
|
{
|
|
m_mainWindow->statusBar()->message( text );
|
|
}
|
|
|
|
|
|
void K3bStatusBarManager::clearActionStatusText()
|
|
{
|
|
m_mainWindow->statusBar()->clear();
|
|
}
|
|
|
|
|
|
bool K3bStatusBarManager::eventFilter( TQObject* o, TQEvent* e )
|
|
{
|
|
if( e->type() == TQEvent::MouseButtonDblClick ) {
|
|
if( TQT_BASE_OBJECT(o) == TQT_BASE_OBJECT(m_labelFreeTemp->parentWidget()) )
|
|
m_mainWindow->showOptionDialog( 0 ); // FIXME: use an enumeration for the option pages
|
|
else if( TQT_BASE_OBJECT(o) == TQT_BASE_OBJECT(m_versionBox) )
|
|
if( TDEAction* a = m_mainWindow->action( "help_about_app" ) )
|
|
a->activate();
|
|
}
|
|
|
|
return TQObject::eventFilter( o, e );
|
|
}
|
|
|
|
|
|
static TQString 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( TQString() );
|
|
}
|
|
}
|
|
|
|
|
|
void K3bStatusBarManager::slotUpdateProjectStats()
|
|
{
|
|
K3bDoc* doc = k3bappcore->projectManager()->activeProject();
|
|
if( doc ) {
|
|
switch( doc->type() ) {
|
|
case K3bDoc::AUDIO: {
|
|
K3bAudioDoc* audioDoc = static_cast<K3bAudioDoc*>( doc );
|
|
m_labelProjectInfo->setText( i18n("Audio CD (1 track)", "Audio CD (%n tracks)", audioDoc->numOfTracks() ) );
|
|
break;
|
|
}
|
|
|
|
case K3bDoc::DATA: {
|
|
K3bDataDoc* dataDoc = static_cast<K3bDataDoc*>( doc );
|
|
m_labelProjectInfo->setText( i18n("Data CD (%1)").arg(dataDocStats(dataDoc)) );
|
|
break;
|
|
}
|
|
|
|
case K3bDoc::MIXED: {
|
|
K3bAudioDoc* audioDoc = static_cast<K3bMixedDoc*>( doc )->audioDoc();
|
|
K3bDataDoc* dataDoc = static_cast<K3bMixedDoc*>( 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<K3bVcdDoc*>( doc );
|
|
m_labelProjectInfo->setText( i18n("Video CD (1 track)", "Video CD (%n tracks)", vcdDoc->numOfTracks() ) );
|
|
break;
|
|
}
|
|
|
|
case K3bDoc::MOVIX: {
|
|
K3bDataDoc* dataDoc = static_cast<K3bDataDoc*>( doc );
|
|
m_labelProjectInfo->setText( i18n("eMovix CD (%1)").arg(dataDocStats(dataDoc)) );
|
|
break;
|
|
}
|
|
|
|
case K3bDoc::MOVIX_DVD: {
|
|
K3bDataDoc* dataDoc = static_cast<K3bDataDoc*>( doc );
|
|
m_labelProjectInfo->setText( i18n("eMovix DVD (%1)").arg(dataDocStats(dataDoc)) );
|
|
break;
|
|
}
|
|
|
|
case K3bDoc::DVD: {
|
|
K3bDataDoc* dataDoc = static_cast<K3bDataDoc*>( doc );
|
|
m_labelProjectInfo->setText( i18n("Data DVD (%1)").arg(dataDocStats(dataDoc)) );
|
|
break;
|
|
}
|
|
|
|
case K3bDoc::VIDEODVD: {
|
|
K3bDataDoc* dataDoc = static_cast<K3bDataDoc*>( doc );
|
|
m_labelProjectInfo->setText( i18n("Video DVD (%1)").arg(dataDocStats(dataDoc)) );
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
m_labelProjectInfo->setText( TQString() );
|
|
}
|
|
}
|
|
|
|
#include "k3bstatusbarmanager.moc"
|