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.
354 lines
11 KiB
354 lines
11 KiB
/***************************************************************************
|
|
smb4kshareslistviewitem - The shares list view item class of Smb4K.
|
|
-------------------
|
|
begin : Sa Jun 30 2007
|
|
copyright : (C) 2007 by Alexander Reinholdt
|
|
email : dustpuppy@users.berlios.de
|
|
***************************************************************************/
|
|
|
|
/***************************************************************************
|
|
* 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. *
|
|
* *
|
|
* This program is distributed in the hope that it will be useful, but *
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
|
|
* General Public License for more details. *
|
|
* *
|
|
* You should have received a copy of the GNU General Public License *
|
|
* along with this program; if not, write to the *
|
|
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
|
|
* MA 02110-1301 USA *
|
|
***************************************************************************/
|
|
|
|
// TQt includes
|
|
#include <tqpixmap.h>
|
|
#include <tqcolor.h>
|
|
|
|
// KDE includes
|
|
#include <kiconeffect.h>
|
|
#include <kdebug.h>
|
|
|
|
// application specific includes
|
|
#include "smb4kshareslistviewitem.h"
|
|
#include "smb4kshareslistview.h"
|
|
|
|
|
|
Smb4KSharesListViewItem::Smb4KSharesListViewItem( Smb4KShare *share, bool mountpoint,
|
|
Smb4KSharesListView *parent )
|
|
: TDEListViewItem( parent ), m_share( *share ), m_mountpoint( mountpoint ),
|
|
m_initial_setup( true )
|
|
{
|
|
setDropEnabled( true );
|
|
setDragEnabled( true );
|
|
|
|
m_loader = new TDEIconLoader();
|
|
|
|
setupItem( m_share, m_mountpoint );
|
|
}
|
|
|
|
|
|
Smb4KSharesListViewItem::~Smb4KSharesListViewItem()
|
|
{
|
|
// Do not touch the Smb4KShare object!
|
|
delete m_loader;
|
|
}
|
|
|
|
|
|
void Smb4KSharesListViewItem::setupItem( const Smb4KShare &share, bool mountpoint )
|
|
{
|
|
// Only do something here if either the item hasn't been set up
|
|
// yet, or share and mountpoint changed, respectively.
|
|
if ( m_initial_setup || !m_share.equals( share ) || m_mountpoint != mountpoint )
|
|
{
|
|
if ( m_initial_setup || m_share.isBroken() != share.isBroken() )
|
|
{
|
|
TQPixmap pix;
|
|
|
|
int icon_state = m_share.isForeign() ? TDEIcon::DisabledState : TDEIcon::DefaultState;
|
|
|
|
if ( m_share.isBroken() )
|
|
{
|
|
TQImage over = m_loader->loadIcon( "button_cancel", TDEIcon::Small,
|
|
0, icon_state, 0L, false ).convertToImage();
|
|
TQImage src = m_loader->loadIcon( "drive-harddisk-mounted", TDEIcon::Small,
|
|
0, icon_state, 0L, false ).convertToImage();
|
|
|
|
TQImage over_desk = m_loader->loadIcon( "button_cancel", TDEIcon::Desktop,
|
|
0, icon_state, 0L, false ).convertToImage();
|
|
TQImage src_desk = m_loader->loadIcon( "drive-harddisk-mounted", TDEIcon::Desktop,
|
|
0, icon_state, 0L, false ).convertToImage();
|
|
|
|
TDEIconEffect e;
|
|
e.semiTransparent( over );
|
|
e.overlay( src, over );
|
|
e.semiTransparent( over_desk );
|
|
e.overlay( src_desk, over_desk );
|
|
|
|
pix = TQPixmap( src );
|
|
m_desktop_pixmap = TQPixmap( src_desk );
|
|
}
|
|
else
|
|
{
|
|
pix = m_loader->loadIcon( "drive-harddisk-mounted", TDEIcon::Small,
|
|
0, icon_state, 0L, false );
|
|
|
|
m_desktop_pixmap = m_loader->loadIcon( "drive-harddisk-mounted", TDEIcon::Desktop,
|
|
0, icon_state, 0L, false );
|
|
}
|
|
|
|
setPixmap( Item, pix );
|
|
}
|
|
else
|
|
{
|
|
// Do nothing
|
|
}
|
|
|
|
if ( !m_initial_setup )
|
|
{
|
|
if ( m_mountpoint != mountpoint )
|
|
{
|
|
setText( Item, (m_mountpoint ? m_share.path() : m_share.name()) );
|
|
}
|
|
|
|
// The file system, owner and login won't change
|
|
|
|
TQString total, free, used, total_dim, free_dim, used_dim;
|
|
|
|
if ( shareObject()->totalDiskSpace() - shareObject()->freeDiskSpace() > 1024 )
|
|
{
|
|
double tmp_used = (shareObject()->totalDiskSpace() - shareObject()->freeDiskSpace()) / 1024;
|
|
used_dim = "MB";
|
|
|
|
if ( tmp_used >= 1024 )
|
|
{
|
|
tmp_used = tmp_used / 1024;
|
|
used_dim = "GB";
|
|
}
|
|
|
|
used = TQString( "%1" ).arg( tmp_used, 0, 'f', 1 );
|
|
}
|
|
else
|
|
{
|
|
used_dim = "kB";
|
|
double tmp_used = shareObject()->totalDiskSpace() - shareObject()->freeDiskSpace();
|
|
used = TQString( "%1" ).arg( tmp_used, 0, 'f', 1 );
|
|
}
|
|
|
|
if ( shareObject()->freeDiskSpace() >= 1024 )
|
|
{
|
|
double tmp_free = shareObject()->freeDiskSpace() / 1024;
|
|
free_dim = "MB";
|
|
|
|
if ( tmp_free >= 1024 )
|
|
{
|
|
tmp_free = tmp_free / 1024;
|
|
free_dim = "GB";
|
|
}
|
|
|
|
free = TQString( "%1" ).arg( tmp_free, 0, 'f', 1 );
|
|
}
|
|
else
|
|
{
|
|
free_dim = "kB";
|
|
free = TQString( "%1" ).arg( shareObject()->freeDiskSpace(), 0, 'f', 1 );
|
|
}
|
|
|
|
if ( shareObject()->totalDiskSpace() >= 1024 )
|
|
{
|
|
double tmp_total = shareObject()->totalDiskSpace() / 1024;
|
|
total_dim = "MB";
|
|
|
|
if ( tmp_total >= 1024 )
|
|
{
|
|
tmp_total = tmp_total / 1024;
|
|
total_dim = "GB";
|
|
}
|
|
|
|
total = TQString( "%1" ).arg( tmp_total, 0, 'f', 1 );
|
|
}
|
|
else
|
|
{
|
|
total_dim = "kB";
|
|
total = TQString( "%1" ).arg( shareObject()->totalDiskSpace(), 0, 'f', 1 );
|
|
}
|
|
|
|
setText( Free, TQString( "%1 %2" ).arg( free, free_dim ) );
|
|
setText( Used, TQString( "%1 %2" ).arg( used, used_dim ) );
|
|
setText( Total, TQString( "%1 %2" ).arg( total, total_dim ) );
|
|
}
|
|
else
|
|
{
|
|
setText( Item, (m_mountpoint ? m_share.path() : m_share.name()) );
|
|
|
|
setText( Owner, TQString::compare( m_share.filesystem(), "smbfs" ) == 0 ?
|
|
TQString( "%1 - %2" ).arg( m_share.user() ).arg( m_share.group() ) :
|
|
TQString() );
|
|
#ifndef __FreeBSD__
|
|
setText( Login, TQString::compare( m_share.filesystem(), "cifs" ) == 0 ?
|
|
m_share.cifsLogin() :
|
|
TQString() );
|
|
#endif
|
|
setText( FileSystem, m_share.filesystem().upper() );
|
|
|
|
TQString total, free, used, total_dim, free_dim, used_dim;
|
|
|
|
if ( shareObject()->totalDiskSpace() - shareObject()->freeDiskSpace() > 1024 )
|
|
{
|
|
double tmp_used = (shareObject()->totalDiskSpace() - shareObject()->freeDiskSpace()) / 1024;
|
|
used_dim = "MB";
|
|
|
|
if ( tmp_used >= 1024 )
|
|
{
|
|
tmp_used = tmp_used / 1024;
|
|
used_dim = "GB";
|
|
}
|
|
|
|
used = TQString( "%1" ).arg( tmp_used, 0, 'f', 1 );
|
|
}
|
|
else
|
|
{
|
|
used_dim = "kB";
|
|
double tmp_used = shareObject()->totalDiskSpace() - shareObject()->freeDiskSpace();
|
|
used = TQString( "%1" ).arg( tmp_used, 0, 'f', 1 );
|
|
}
|
|
|
|
if ( shareObject()->freeDiskSpace() >= 1024 )
|
|
{
|
|
double tmp_free = shareObject()->freeDiskSpace() / 1024;
|
|
free_dim = "MB";
|
|
|
|
if ( tmp_free >= 1024 )
|
|
{
|
|
tmp_free = tmp_free / 1024;
|
|
free_dim = "GB";
|
|
}
|
|
|
|
free = TQString( "%1" ).arg( tmp_free, 0, 'f', 1 );
|
|
}
|
|
else
|
|
{
|
|
free_dim = "kB";
|
|
free = TQString( "%1" ).arg( shareObject()->freeDiskSpace(), 0, 'f', 1 );
|
|
}
|
|
|
|
if ( shareObject()->totalDiskSpace() >= 1024 )
|
|
{
|
|
double tmp_total = shareObject()->totalDiskSpace() / 1024;
|
|
total_dim = "MB";
|
|
|
|
if ( tmp_total >= 1024 )
|
|
{
|
|
tmp_total = tmp_total / 1024;
|
|
total_dim = "GB";
|
|
}
|
|
|
|
total = TQString( "%1" ).arg( tmp_total, 0, 'f', 1 );
|
|
}
|
|
else
|
|
{
|
|
total_dim = "kB";
|
|
total = TQString( "%1" ).arg( shareObject()->totalDiskSpace(), 0, 'f', 1 );
|
|
}
|
|
|
|
setText( Free, TQString( "%1 %2" ).arg( free, free_dim ) );
|
|
setText( Used, TQString( "%1 %2" ).arg( used, used_dim ) );
|
|
setText( Total, TQString( "%1 %2" ).arg( total, total_dim ) );
|
|
}
|
|
|
|
m_initial_setup = false;
|
|
m_share = share;
|
|
m_mountpoint = mountpoint;
|
|
}
|
|
else
|
|
{
|
|
// Do nothing
|
|
}
|
|
}
|
|
|
|
|
|
bool Smb4KSharesListViewItem::sameShareObject( Smb4KShare *share )
|
|
{
|
|
return m_share.equals( *share );
|
|
}
|
|
|
|
|
|
void Smb4KSharesListViewItem::replaceShareObject( Smb4KShare *share )
|
|
{
|
|
setupItem( *share, m_mountpoint );
|
|
}
|
|
|
|
|
|
void Smb4KSharesListViewItem::paintCell( TQPainter *p, const TQColorGroup &cg, int col, int width, int align )
|
|
{
|
|
// Set the color of the item text:
|
|
TQColorGroup colorgrp( cg );
|
|
|
|
if ( m_share.isForeign() )
|
|
{
|
|
colorgrp.setColor( TQColorGroup::Text, TQt::gray );
|
|
}
|
|
|
|
if ( col != Usage )
|
|
{
|
|
TDEListViewItem::paintCell( p, colorgrp, col, width, align );
|
|
|
|
return;
|
|
}
|
|
|
|
// Draw the usage:
|
|
// This code was inspired by KAudioCreator.
|
|
p->setPen( colorgrp.base() );
|
|
p->drawRect( 0, 0, width, height() );
|
|
|
|
if ( isSelected() )
|
|
{
|
|
p->fillRect( 1, 1, width-2, height()-2, colorgrp.highlight() );
|
|
}
|
|
else
|
|
{
|
|
p->fillRect( 1, 1, width-2, height()-2, colorgrp.base() );
|
|
}
|
|
|
|
if ( !m_share.isBroken() )
|
|
{
|
|
int percent = (int)(((double)(width-2)) * (m_share.percentage()/100));
|
|
|
|
p->fillRect( 1, 1, percent, height()-2, !m_share.isForeign() ? TQt::red : TQColor(TQt::red.light( 175 )) );
|
|
p->fillRect( percent+1, 1, width-percent-2, height()-2, !m_share.isForeign() ? TQt::green : TQColor(TQt::green.light( 175 )) );
|
|
|
|
p->setPen( !m_share.isForeign() ? colorgrp.foreground() : TQt::gray );
|
|
p->drawRect( 1, 1, width-2, height()-2 );
|
|
|
|
// Show the text:
|
|
p->setPen( colorgrp.text() );
|
|
|
|
// if ( isSelected() )
|
|
// {
|
|
// p->setPen( colorgrp.highlightedText() );
|
|
// }
|
|
|
|
p->drawText( 0, 0, width-1, height()-1, TQt::AlignCenter, TQString( "%1 \%" ).arg( m_share.percentage(), 0, 'f', 1 ) );
|
|
}
|
|
else
|
|
{
|
|
p->fillRect( 1, 1, width-2, height()-2, colorgrp.base() );
|
|
|
|
p->setPen( !m_share.isForeign() ? colorgrp.foreground() : TQt::gray );
|
|
p->drawRect( 1, 1, width-2, height()-2 );
|
|
}
|
|
}
|
|
|
|
|
|
bool Smb4KSharesListViewItem::acceptDrop( const TQMimeSource *source ) const
|
|
{
|
|
if ( source->provides( "text/plain" ) )
|
|
{
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|