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.
400 lines
11 KiB
400 lines
11 KiB
/***************************************************************************
|
|
smb4kpreviewdialog.cpp - The preview dialog of Smb4K
|
|
-------------------
|
|
begin : Fre Jul 4 2003
|
|
copyright : (C) 2003-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 <tqlayout.h>
|
|
#include <tqtooltip.h>
|
|
#include <tqiconset.h>
|
|
|
|
// KDE includes
|
|
#include <tdelocale.h>
|
|
#include <tdeapplication.h>
|
|
#include <kiconloader.h>
|
|
#include <kdebug.h>
|
|
#include <tdetoolbarbutton.h>
|
|
|
|
// application specific includes
|
|
#include "smb4kpreviewdialog.h"
|
|
#include "../core/smb4kcore.h"
|
|
#include "../core/smb4knetworkitems.h"
|
|
#include "../core/smb4ksettings.h"
|
|
|
|
|
|
Smb4KPreviewDialog::Smb4KPreviewDialog( Smb4KShareItem *item, TQWidget *parent, const char *name )
|
|
: KDialogBase( Plain, i18n( "Preview" ), Close, Close, parent, name, false, true )
|
|
{
|
|
setWFlags( TQt::WDestructiveClose );
|
|
|
|
m_item = new Smb4KPreviewItem( item );
|
|
|
|
if ( m_item )
|
|
{
|
|
if ( Smb4KHostItem *host = Smb4KCore::scanner()->getHost( item->host(), item->workgroup() ) )
|
|
{
|
|
m_item->setIP( host->ip() );
|
|
}
|
|
|
|
m_button_id = None;
|
|
|
|
m_current_item = m_history.end();
|
|
|
|
setupView();
|
|
|
|
setInitialSize( configDialogSize( *(Smb4KSettings::self()->config()), "PreviewDialog" ) );
|
|
|
|
connect( m_view, TQ_SIGNAL( executed( TQIconViewItem * ) ),
|
|
this, TQ_SLOT( slotItemExecuted( TQIconViewItem * ) ) );
|
|
|
|
connect( m_toolbar, TQ_SIGNAL( clicked( int ) ),
|
|
this, TQ_SLOT( slotButtonClicked( int ) ) );
|
|
|
|
connect( m_combo, TQ_SIGNAL( activated( const TQString & ) ),
|
|
this, TQ_SLOT( slotItemActivated( const TQString & ) ) );
|
|
|
|
connect( Smb4KCore::previewer(), TQ_SIGNAL( result( Smb4KPreviewItem * ) ),
|
|
this, TQ_SLOT( slotReceivedData( Smb4KPreviewItem * ) ) );
|
|
|
|
m_initialized = Smb4KCore::previewer()->preview( m_item );
|
|
}
|
|
|
|
setMinimumSize( (sizeHint().width() > 350 ? sizeHint().width() : 350), sizeHint().height() );
|
|
}
|
|
|
|
|
|
Smb4KPreviewDialog::~Smb4KPreviewDialog()
|
|
{
|
|
delete m_item;
|
|
}
|
|
|
|
|
|
void Smb4KPreviewDialog::setupView()
|
|
{
|
|
TQFrame *frame = plainPage();
|
|
TQGridLayout *layout = new TQGridLayout( frame );
|
|
|
|
m_view = new TDEIconView( frame, 0, 0 );
|
|
m_view->setItemTextPos( TDEIconView::Right );
|
|
m_view->setResizeMode( TDEIconView::Adjust );
|
|
m_view->setArrangement( TDEIconView::TopToBottom );
|
|
m_view->setSpacing( 1 );
|
|
m_view->setGridX( 200 );
|
|
m_view->setWordWrapIconText( false );
|
|
m_view->setShowToolTips( true );
|
|
m_view->setAutoArrange( true );
|
|
m_view->setSorting( true, true );
|
|
|
|
m_toolbar = new TDEToolBar( frame, 0, true, false );
|
|
m_toolbar->insertButton( "reload", Reload, true, i18n( "Reload" ), 0 );
|
|
m_toolbar->insertButton( "back", Back, false, i18n( "Back" ), 1 );
|
|
m_toolbar->insertButton( "forward", Forward, false, i18n( "Forward" ), 2 );
|
|
m_toolbar->insertButton( "go-up", Up, false, i18n( "Up" ), 3 );
|
|
|
|
m_combo = new KComboBox( false, m_toolbar, 0 );
|
|
m_combo->listBox()->setHScrollBarMode( TQScrollView::Auto );
|
|
m_combo->listBox()->setVScrollBarMode( TQScrollView::Auto );
|
|
m_combo->listBox()->setMinimumHeight( 100 );
|
|
m_toolbar->insertWidget( Combo, 10, m_combo, 4 );
|
|
m_toolbar->setItemAutoSized( Combo, true );
|
|
|
|
layout->addWidget( m_view, 0, 0, 0 );
|
|
layout->addWidget( m_toolbar, 1, 0, 0 );
|
|
}
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// SLOT IMPLEMENTATIONS
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
void Smb4KPreviewDialog::slotReceivedData( Smb4KPreviewItem *item )
|
|
{
|
|
// If the item is NULL or not equal to m_item,
|
|
// stop right here:
|
|
if ( !item || item != m_item )
|
|
{
|
|
return;
|
|
}
|
|
|
|
// Clear the icon view:
|
|
m_view->clear();
|
|
|
|
// The item should be equal to m_item, so we can use either of those
|
|
// pointers.
|
|
|
|
// Process the data:
|
|
if ( !item->contents().isEmpty() )
|
|
{
|
|
// Generate the history.
|
|
switch ( m_button_id )
|
|
{
|
|
case Reload: /* Really? */
|
|
case Back:
|
|
case Forward:
|
|
{
|
|
// Do not insert anything into the history if
|
|
// one of these three buttons was clicked.
|
|
|
|
break;
|
|
}
|
|
default:
|
|
{
|
|
m_history.append( item->location() );
|
|
m_current_item = --m_history.end();
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
// Clear the combo box, put the new history there and set the
|
|
// current item:
|
|
m_combo->clear();
|
|
|
|
for ( TQStringList::Iterator it = m_history.begin(); it != m_history.end(); it++ )
|
|
{
|
|
if ( !m_combo->listBox()->findItem( *it, TQt::CaseSensitive|TQt::ExactMatch ) )
|
|
{
|
|
m_combo->insertItem( *it, -1 );
|
|
}
|
|
}
|
|
|
|
m_combo->setCurrentText( *m_current_item );
|
|
|
|
// Now put the contents in the icon view:
|
|
for ( TQValueList<ContentsItem>::ConstIterator it = item->contents().begin();
|
|
it != item->contents().end(); ++it )
|
|
{
|
|
switch ( (*it).first )
|
|
{
|
|
case Smb4KPreviewItem::File:
|
|
{
|
|
TDEIconViewItem *view_item = new TDEIconViewItem( m_view, (*it).second, SmallIcon( "file" ) );
|
|
view_item->setKey( TQString( "[file]_%1" ).arg( (*it).second ) );
|
|
|
|
break;
|
|
}
|
|
case Smb4KPreviewItem::Directory:
|
|
{
|
|
// We do not want to show the '.' and '..' directories.
|
|
if ( TQString::compare( (*it).second, "." ) != 0 && TQString::compare( (*it).second, ".." ) != 0 )
|
|
{
|
|
TDEIconViewItem *view_item = new TDEIconViewItem( m_view, (*it).second, SmallIcon( "folder" ) );
|
|
view_item->setKey( TQString( "[directory]_%1" ).arg( (*it).second ) );
|
|
}
|
|
|
|
break;
|
|
}
|
|
case Smb4KPreviewItem::HiddenFile:
|
|
{
|
|
if ( Smb4KSettings::previewHiddenItems() )
|
|
{
|
|
TDEIconViewItem *view_item = new TDEIconViewItem( m_view, (*it).second, SmallIcon( "file" ) );
|
|
view_item->setKey( TQString( "[file]_%1" ).arg( (*it).second ) );
|
|
}
|
|
|
|
break;
|
|
}
|
|
case Smb4KPreviewItem::HiddenDirectory:
|
|
{
|
|
if ( Smb4KSettings::previewHiddenItems() &&
|
|
TQString::compare( (*it).second, "." ) != 0 && TQString::compare( (*it).second, ".." ) != 0 )
|
|
{
|
|
TDEIconViewItem *view_item = new TDEIconViewItem( m_view, (*it).second, SmallIcon( "folder" ) );
|
|
view_item->setKey( TQString( "[directory]_%1" ).arg( (*it).second ) );
|
|
}
|
|
|
|
break;
|
|
}
|
|
default:
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Now activate or deactivate the buttons:
|
|
|
|
// Activate the 'Up' button if the current address is
|
|
// not equal to the base address.
|
|
m_toolbar->setItemEnabled( Up, TQString::compare( "//"+item->host()+"/"+item->share()+"/", item->location() ) != 0 );
|
|
|
|
// Activate/Deactivate 'Back' and 'Forward' buttons.
|
|
m_toolbar->setItemEnabled( Back, m_current_item != m_history.at( 0 ) );
|
|
m_toolbar->setItemEnabled( Forward, m_current_item != m_history.at( m_history.count() - 1 ) );
|
|
}
|
|
else
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
void Smb4KPreviewDialog::slotItemExecuted( TQIconViewItem *item )
|
|
{
|
|
if ( !item->key().startsWith( "[file]_" ) )
|
|
{
|
|
m_button_id = None;
|
|
|
|
m_item->setPath( m_item->path()+item->text()+"/" );
|
|
|
|
Smb4KCore::previewer()->preview( m_item );
|
|
}
|
|
}
|
|
|
|
|
|
void Smb4KPreviewDialog::slotButtonClicked( int id )
|
|
{
|
|
m_button_id = id;
|
|
|
|
m_item->clearContents();
|
|
|
|
switch ( id )
|
|
{
|
|
case Reload:
|
|
{
|
|
Smb4KCore::previewer()->preview( m_item );
|
|
|
|
break;
|
|
}
|
|
case Up:
|
|
{
|
|
// Do nothing if the path is empty because
|
|
// we are already in the root directory.
|
|
if ( m_item->path().isEmpty() )
|
|
{
|
|
return;
|
|
}
|
|
|
|
if ( m_item->path().contains( "/" ) > 1 )
|
|
{
|
|
m_item->setPath( m_item->path().section( "/", 0, -3 ).append( "/" ) );
|
|
}
|
|
else if ( m_item->path().contains( "/", true ) == 1 )
|
|
{
|
|
m_item->setPath( TQString() );
|
|
}
|
|
|
|
Smb4KCore::previewer()->preview( m_item );
|
|
|
|
break;
|
|
}
|
|
case Back:
|
|
{
|
|
// Move one item back in the list:
|
|
if ( m_current_item != m_history.at( 0 ) )
|
|
{
|
|
m_current_item--;
|
|
}
|
|
else
|
|
{
|
|
return;
|
|
}
|
|
|
|
// Get the path:
|
|
if ( (*m_current_item).contains( "/", true ) == 3 )
|
|
{
|
|
m_item->setPath( TQString() );
|
|
}
|
|
else
|
|
{
|
|
m_item->setPath( (*m_current_item).section( "/", 4, -1 ) );
|
|
|
|
if ( !m_item->path().isEmpty() )
|
|
{
|
|
m_item->setPath( m_item->path()+"/" );
|
|
}
|
|
else
|
|
{
|
|
// Do nothing.
|
|
}
|
|
}
|
|
|
|
Smb4KCore::previewer()->preview( m_item );
|
|
|
|
break;
|
|
}
|
|
case Forward:
|
|
{
|
|
// Move one item forward in the list:
|
|
if ( m_current_item != m_history.at( m_history.count() - 1 ) )
|
|
{
|
|
m_current_item++;
|
|
}
|
|
else
|
|
{
|
|
return;
|
|
}
|
|
|
|
// Get the path:
|
|
if ( (*m_current_item).contains( "/", true ) == 3 )
|
|
{
|
|
m_item->setPath( TQString() );
|
|
}
|
|
else
|
|
{
|
|
m_item->setPath( (*m_current_item).section( "/", 4, -1 ) );
|
|
|
|
if ( !m_item->path().isEmpty() )
|
|
{
|
|
m_item->setPath( m_item->path()+"/" );
|
|
}
|
|
else
|
|
{
|
|
// Do nothing.
|
|
}
|
|
}
|
|
|
|
Smb4KCore::previewer()->preview( m_item );
|
|
|
|
break;
|
|
}
|
|
default:
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void Smb4KPreviewDialog::slotItemActivated( const TQString &item )
|
|
{
|
|
m_button_id = Combo;
|
|
|
|
// First we have to strip the address:
|
|
m_item->setPath( item.section( "//"+m_item->host()+"/"+m_item->share()+"/", 1, 1 ).stripWhiteSpace() );
|
|
|
|
Smb4KCore::previewer()->preview( m_item );
|
|
}
|
|
|
|
|
|
void Smb4KPreviewDialog::slotClose()
|
|
{
|
|
saveDialogSize( *(Smb4KSettings::self()->config()), "PreviewDialog" );
|
|
|
|
KDialogBase::slotClose();
|
|
}
|
|
|
|
|
|
#include "smb4kpreviewdialog.moc"
|
|
|