/***************************************************************************
                  dsdirselectdialog.cpp  -  description
                             -------------------
    begin                : Sat Jan 03 2004
    copyright            : (C) 2004 by Dominik Seichter
    email                : domseichter@web.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.                                   *
 *                                                                         *
 ***************************************************************************/

#include "dsdirselectdialog.h"

// TQt includes
#include <tqcheckbox.h>
#include <tqhbox.h>
#include <tqlabel.h>
#include <tqlayout.h>
#include <tqtooltip.h>
#include <tqvbox.h>

// TDE includes
#include <tdediroperator.h> 
#include <tdelocale.h>
#include <kurlcombobox.h> 

DSDirSelectDialog::DSDirSelectDialog( TQWidget* parent )
        : KFileDialog( ":KRename", "*", parent, 0, false ) 
{
    setOperationMode( KFileDialog::Opening );
    setMode( KFile::Files | KFile::ExistingOnly );
    
    TQVBox* vbox = new TQVBox( this );

    if( layout() )
        layout()->add( vbox );
    else
        tqDebug("KFileDialog does not have a layout!!!");

    checkDir = new TQCheckBox( i18n("Add directory names &with filenames"), vbox );
    check = new TQCheckBox( i18n("Add subdirectories &recursively"), vbox );
    TQHBox* hbox = new TQHBox( vbox );
    TQWidget* spacer = new TQWidget( hbox );
    spacer->setMinimumWidth( 20 );
    checkHidden = new TQCheckBox( i18n("Add &hidden directories"), hbox );
    hbox->setStretchFactor( checkHidden, 4 );
    checkOnlyDir = new TQCheckBox( i18n("Add directory names only"), vbox );    
    connect( check, TQ_SIGNAL( clicked() ), this, TQ_SLOT( enableControls() ));

    TQToolTip::add( check, i18n("Walk recursively through the directory tree and add also the content of all subdirectories to the list of files to rename.") );
    TQToolTip::add( checkHidden, i18n("If not checked, KRename will ignore directories starting with a dot during recursive adding.") );
    TQToolTip::add( checkOnlyDir, i18n("Add only the directory names and not the names of the files in the directory to KRename.") );
    TQToolTip::add( checkDir, i18n("This option causes KRename to add also the name of the base directory of the selected files to its list.") );
    
    enableControls();
}

bool DSDirSelectDialog::recursively() const
{
    return check->isChecked();
}

bool DSDirSelectDialog::hidden() const
{
    return checkHidden->isChecked();
}

bool DSDirSelectDialog::dirs() const
{
    return checkDir->isChecked();
}

bool DSDirSelectDialog::onlyDirs() const
{
    return checkOnlyDir->isChecked();
}

void DSDirSelectDialog::setRecursively( bool b )
{
    check->setChecked( b );
}

void DSDirSelectDialog::enableControls()
{
    checkHidden->setEnabled( check->isChecked() );
}

void DSDirSelectDialog::slotOk()
{
    const KFileItemList *items = ops->selectedItems();
    if ( !items || items->isEmpty() )
    {
        KDialogBase::accept();
    } else  
        KFileDialog::slotOk();
}

KURL::List DSDirSelectDialog::selectedURLs()
{
    KURL::List list = KFileDialog::selectedURLs();
    if( list.isEmpty() )
        list.append( baseURL() ); 
        
    return list;
}
#include "dsdirselectdialog.moc"
