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.
1837 lines
59 KiB
1837 lines
59 KiB
/***************************************************************************
|
|
krenameimpl.cpp - description
|
|
-------------------
|
|
begin : Die Mai 20 2003
|
|
copyright : (C) 2003 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 "krenameimpl.h"
|
|
|
|
// Own includes
|
|
#include "ProgressDialog.h"
|
|
#include "confdialog.h"
|
|
#include "fileoperation.h"
|
|
#include "kmylistview.h"
|
|
#include "kmyhistorycombo.h"
|
|
#include "pluginloader.h"
|
|
#include "replacedialog.h"
|
|
#include "undodialog.h"
|
|
#include "helpdialog.h"
|
|
#include "coorddialog.h"
|
|
#include "numberdialog.h"
|
|
#include "firststartdlg.h"
|
|
#include "wizard.h"
|
|
#include "tabs.h"
|
|
#include "dsdirselectdialog.h"
|
|
#include "krenamedcop.h"
|
|
#include "profiledlg.h"
|
|
|
|
// KDE includes
|
|
#include <dcopclient.h>
|
|
#include <kaboutapplication.h>
|
|
#include <kapplication.h>
|
|
#include <tdeaction.h>
|
|
#include <kcmdlineargs.h>
|
|
#include <kdirselectdialog.h>
|
|
#include <tdefiledialog.h>
|
|
#include <tdefileitem.h>
|
|
#include <khelpmenu.h>
|
|
#include <kiconloader.h>
|
|
#include <kmessagebox.h>
|
|
#include <kmenubar.h>
|
|
#include <tdepopupmenu.h>
|
|
#include <kurlrequester.h>
|
|
#include <ktempfile.h>
|
|
#include <klocale.h>
|
|
#include <tdeio/netaccess.h>
|
|
|
|
// QT includes
|
|
#include <tqbuttongroup.h>
|
|
#include <tqcursor.h>
|
|
#include <tqgrid.h>
|
|
#include <tqlabel.h>
|
|
#include <tqlayout.h>
|
|
#include <tqradiobutton.h>
|
|
#include <tqrect.h>
|
|
#include <tqregexp.h>
|
|
#include <tqtabwidget.h>
|
|
#include <tqtimer.h>
|
|
#include <tqtooltip.h>
|
|
#include <tqvgroupbox.h>
|
|
#include <tqvbox.h>
|
|
#include <tqvbuttongroup.h>
|
|
#include <tqwidget.h>
|
|
#include <tqwidgetstack.h>
|
|
|
|
#define ID_WIZARD 2905
|
|
#define ID_TAB 2904
|
|
|
|
TQString pageTitle[] = {
|
|
I18N_NOOP( "F&iles" ),
|
|
I18N_NOOP( "Des&tination" ),
|
|
I18N_NOOP( "P&lugins" ),
|
|
I18N_NOOP( "File&name" )
|
|
};
|
|
|
|
KPushButton* createButton( KGuiItem item, TQWidget* parent )
|
|
{
|
|
return new KPushButton( item.iconSet(), item.text(), parent );
|
|
}
|
|
|
|
KRenameImpl::KRenameImpl( TQWidget* p, KMenuBar* m, TQPushButton* finish )
|
|
: DCOPObject( "KRename" ), TQObject( (TQObject*)p ),
|
|
parent( p ), menuBar( m ), finishButton( finish )
|
|
{
|
|
m_hasCommandlineProfile = false;
|
|
|
|
// Load Plugins
|
|
plugin = PluginLoader::instance();
|
|
helpDialogData = new HelpDialogData();
|
|
// Maybe parent instead of 0 but might crash when switching from wizard to tab mode
|
|
helpDialog = new HelpDialog( helpDialogData, NULL, NULL, false );
|
|
|
|
m_switching = false;
|
|
|
|
kapp->dcopClient()->registerAs( kapp->name() );
|
|
|
|
}
|
|
|
|
KRenameImpl::~KRenameImpl()
|
|
{
|
|
delete helpDialog;
|
|
}
|
|
|
|
int KRenameImpl::numRealTimePreview = -1;
|
|
|
|
void KRenameImpl::setup( bool wizardmode )
|
|
{
|
|
parent->setCaption( "KRename" ); // "KRename by Dominik Seichter
|
|
setupActions();
|
|
setupPages();
|
|
updateCount();
|
|
|
|
connect( buttonAdd, TQT_SIGNAL( clicked() ), this, TQT_SLOT( addFile() ));
|
|
connect( buttonRemoveAll, TQT_SIGNAL( clicked()), this, TQT_SLOT( clearList() ));
|
|
connect( buttonRemove, TQT_SIGNAL( clicked()), this, TQT_SLOT( removeFile() ));
|
|
connect( buttonHelp, TQT_SIGNAL( clicked()), this, TQT_SLOT( showTokenHelp() ));
|
|
connect( finishButton, TQT_SIGNAL( clicked()), this, TQT_SLOT( start() ));
|
|
|
|
connect( checkExtension, TQT_SIGNAL( clicked()), this, TQT_SLOT( enableControls() ));
|
|
connect( optionRename, TQT_SIGNAL( clicked()), this, TQT_SLOT( enableControls() ));
|
|
connect( optionMove, TQT_SIGNAL( clicked()), this, TQT_SLOT( enableControls() ));
|
|
connect( optionCopy, TQT_SIGNAL( clicked()), this, TQT_SLOT( enableControls() ));
|
|
connect( optionLink, TQT_SIGNAL( clicked()), this, TQT_SLOT( enableControls() ));
|
|
connect( checkUndoScript, TQT_SIGNAL( clicked()), this, TQT_SLOT( enableControls() ));
|
|
|
|
connect( fileList, TQT_SIGNAL( updateCount()), this, TQT_SLOT( updateCount() ));
|
|
connect( fileList, TQT_SIGNAL( updatePreview()), this, TQT_SLOT( updatePreview() ));
|
|
connect( fileList, TQT_SIGNAL( deletePressed()), this, TQT_SLOT( removeFile() ));
|
|
connect( fileList, TQT_SIGNAL( addFiles()), this, TQT_SLOT( addFile() ));
|
|
connect( buttonUp, TQT_SIGNAL( clicked()), fileList, TQT_SLOT( moveUp() ));
|
|
connect( buttonDown, TQT_SIGNAL( clicked()), fileList, TQT_SLOT( moveDown() ));
|
|
connect( buttonUp, TQT_SIGNAL( clicked()), this, TQT_SLOT( updatePreview() ));
|
|
connect( buttonDown, TQT_SIGNAL( clicked()), this, TQT_SLOT( updatePreview() ));
|
|
connect( buttonUp2, TQT_SIGNAL( clicked()), this, TQT_SLOT( moveUp() ));
|
|
connect( buttonDown2, TQT_SIGNAL( clicked()), this, TQT_SLOT( moveDown() ));
|
|
connect( buttonReplace, TQT_SIGNAL( clicked()), this, TQT_SLOT( replace() ));
|
|
connect( buttonEasyReplace, TQT_SIGNAL( clicked()), this, TQT_SLOT( replace() ));
|
|
connect( buttonCoord, TQT_SIGNAL( clicked()), this, TQT_SLOT( getCoordinates() ));
|
|
connect( comboSort, TQT_SIGNAL( activated(int)), fileList, TQT_SLOT( setSorting(int) ));
|
|
|
|
connect( filename, TQT_SIGNAL( delayedTextChanged() ), this, TQT_SLOT( updatePreview() ));
|
|
connect( extemplate, TQT_SIGNAL( delayedTextChanged() ), this, TQT_SLOT( updatePreview() ));
|
|
connect( checkExtension, TQT_SIGNAL( clicked()), this, TQT_SLOT( updatePreview() ));
|
|
connect( comboExtension, TQT_SIGNAL( activated(int) ), this, TQT_SLOT( updatePreview() ));
|
|
connect( checkPreview, TQT_SIGNAL( clicked()), this, TQT_SLOT( toggleImagePreview() ));
|
|
connect( preview, TQT_SIGNAL( itemChanged() ), this, TQT_SLOT( updatePreview() ));
|
|
connect( preview, TQT_SIGNAL( removeItem(int) ), this, TQT_SLOT( removeFile(int) ));
|
|
connect( preview, TQT_SIGNAL( addFile() ), this, TQT_SLOT( addFile() ));
|
|
connect( undorequester, TQT_SIGNAL( urlSelected(const TQString &)), this, TQT_SLOT( changeUndoScriptName() ));
|
|
connect( kapp, TQT_SIGNAL( aboutToQuit() ), this, TQT_SLOT( saveConfig() ) );
|
|
connect( buttonMove, TQT_SIGNAL( clicked()), fileList, TQT_SLOT( moveMode() ));
|
|
connect( checkName, TQT_SIGNAL( clicked()), this, TQT_SLOT( toggleName() ));
|
|
connect( buttonNumber, TQT_SIGNAL( clicked()), this, TQT_SLOT( changeNumbers() ));
|
|
|
|
// Load Configuration
|
|
loadConfig();
|
|
page_1->setEnabled( true );
|
|
TDEApplication::restoreOverrideCursor();
|
|
|
|
filename->setText( "$" ); // no i18n() ! ;)
|
|
extemplate->setText( "$" );
|
|
|
|
// do it now so that it can be overwritten by commandline args
|
|
setWizardMode( wizardmode );
|
|
|
|
parseCommandline();
|
|
enableControls();
|
|
}
|
|
|
|
const TQString KRenameImpl::title( int index ) const
|
|
{
|
|
return i18n( pageTitle[index] );
|
|
}
|
|
|
|
void KRenameImpl::parseCommandline()
|
|
{
|
|
TDECmdLineArgs *args = TDECmdLineArgs::parsedArgs();
|
|
|
|
QCStringList optlist = args->getOptionList ( "r" );
|
|
for (QCStringList::ConstIterator it=optlist.begin(); it!=optlist.end(); ++it)
|
|
{
|
|
|
|
KURL url;
|
|
url.setPath( *it );
|
|
fileList->addDir( url, "*", false, true, false );
|
|
}
|
|
|
|
//fileList->setUpdatesEnabled( false );
|
|
//fileList->viewport()->setUpdatesEnabled( false );
|
|
for( int i = 0; i < args->count(); i++)
|
|
fileList->addFile( args->url( i ) );
|
|
//fileList->viewport()->setUpdatesEnabled( true );
|
|
//fileList->setUpdatesEnabled( true );
|
|
|
|
// load the profile first, so that we do not overwrite other
|
|
// commandline settings
|
|
TQCString templ = args->getOption( "profile" );
|
|
if( !templ.isEmpty() )
|
|
{
|
|
m_hasCommandlineProfile = true;
|
|
ProfileManager::loadProfile( TQString( templ ), this );
|
|
}
|
|
|
|
if( !args->isSet( "previewitems" ) )
|
|
numRealTimePreview = -1;
|
|
else
|
|
numRealTimePreview = TQString( args->getOption( "previewitems" ) ).toInt();
|
|
|
|
templ = args->getOption( "template" );
|
|
if( !templ.isEmpty() )
|
|
filename->setText( templ );
|
|
|
|
templ = args->getOption( "extension" );
|
|
if( !templ.isEmpty() )
|
|
{
|
|
extemplate->setText( templ );
|
|
checkExtension->setChecked( false );
|
|
}
|
|
|
|
templ = args->getOption( "copy" );
|
|
if( !templ.isEmpty() )
|
|
{
|
|
urlrequester->setURL( templ );
|
|
optionCopy->setChecked( true );
|
|
}
|
|
|
|
templ = args->getOption( "move" );
|
|
if( !templ.isEmpty() )
|
|
{
|
|
urlrequester->setURL( templ );
|
|
optionMove->setChecked( true );
|
|
}
|
|
|
|
QCStringList uselist = args->getOptionList ( "use-plugin" );
|
|
if( !uselist.isEmpty() )
|
|
{
|
|
for(unsigned int i = 0; i < uselist.count(); i++ )
|
|
uselist[i] = uselist[i].lower();
|
|
|
|
TQPtrListIterator<PluginLoader::PluginLibrary> it( plugin->libs );
|
|
while ( it.current() )
|
|
{
|
|
if( uselist.contains( (*it)->plugin->getName().lower().utf8() ) )
|
|
(*it)->check->setChecked( true );
|
|
|
|
++it;
|
|
}
|
|
|
|
pluginHelpChanged();
|
|
}
|
|
|
|
bool startnow = args->isSet( "start" );
|
|
|
|
// Free some memory
|
|
args->clear();
|
|
|
|
enableControls();
|
|
updateCount();
|
|
updatePreview();
|
|
|
|
if( fileList->count() )
|
|
{
|
|
// we got already filenames over the commandline, so show directly the last
|
|
// page of the wizard
|
|
emit showPage( m_wizard ? 3 : 4 );
|
|
}
|
|
|
|
if( startnow )
|
|
{
|
|
// As file adding runs in a another trhread,
|
|
// there might be adding in progress but not yet
|
|
// all files in the list.
|
|
// so let's wait for file adding to finish first
|
|
// before starting.
|
|
while( fileList->runningAddListeners() > 0 )
|
|
kapp->processEvents();
|
|
|
|
if( fileList->count() )
|
|
// start renaming
|
|
TQTimer::singleShot( 200, this, TQT_SLOT( start() ) );
|
|
}
|
|
}
|
|
|
|
void KRenameImpl::setupActions()
|
|
{
|
|
TDEActionCollection* actionCollection = new TDEActionCollection( this );
|
|
|
|
TDEPopupMenu* mnuExtra = new TDEPopupMenu( parent );
|
|
TDEPopupMenu* mnuSettings = new TDEPopupMenu( parent );
|
|
KHelpMenu* mnuHelp = new KHelpMenu( parent );
|
|
|
|
menuBar->insertItem( i18n("E&xtras"), mnuExtra );
|
|
mnuExtra->insertItem( i18n("&Profiles..."), this, TQT_SLOT( manageProfiles() ) );
|
|
mnuExtra->insertSeparator();
|
|
mnuExtra->insertItem( SmallIcon("undo"), i18n("&Undo Old Renaming Action..."), this, TQT_SLOT( undo() ) );
|
|
menuBar->insertItem( i18n("&Settings"), mnuSettings );
|
|
menuBar->insertSeparator();
|
|
menuBar->insertItem( i18n("&Help"), mnuHelp->menu() );
|
|
|
|
TDEAction* prefAct = KStdAction::preferences( this, TQT_SLOT(preferences()), actionCollection );
|
|
loadPlugins = new TDEAction( i18n("&Load TDE file plugins"), 0, this, TQT_SLOT( loadFilePlugins() ), actionCollection );
|
|
TDEAction* reloadAct = new TDEAction( i18n("&Reload Plugin Data"), 0, this, TQT_SLOT( reloadFilePluginData() ), actionCollection );
|
|
|
|
prefAct->plug( mnuSettings );
|
|
mnuSettings->insertSeparator();
|
|
loadPlugins->plug( mnuSettings );
|
|
reloadAct->plug( mnuSettings );
|
|
|
|
connect( mnuHelp, TQT_SIGNAL(showAboutApplication()), this, TQT_SLOT(about()));
|
|
}
|
|
|
|
void KRenameImpl::setupPages()
|
|
{
|
|
setupPage1();
|
|
setupPage2();
|
|
setupPage3();
|
|
setupPage4();
|
|
|
|
// Disable dirname ;)
|
|
enableControls();
|
|
}
|
|
|
|
void KRenameImpl::setupPage1()
|
|
{
|
|
page_1 = new TQWidget( parent );
|
|
|
|
pageLayout = new TQHBoxLayout( page_1, 11, 6 );
|
|
Layout3 = new TQVBoxLayout( 0, 0, 6 );
|
|
Layout4 = new TQHBoxLayout( 0, 0, 6 );
|
|
Layout5 = new TQVBoxLayout( 0, 0, 6 );
|
|
|
|
TQSpacerItem* spacer = new TQSpacerItem( 20, 20, TQSizePolicy::Minimum, TQSizePolicy::Expanding );
|
|
TQSpacerItem* spacer2 = new TQSpacerItem( 20, 20, TQSizePolicy::Expanding, TQSizePolicy::Minimum );
|
|
|
|
fileList = new KMyListBox( page_1 );
|
|
|
|
buttonAdd = new KPushButton( page_1 );
|
|
buttonAdd->setText( i18n( "&Add..." ) );
|
|
|
|
buttonRemove = new KPushButton( page_1 );
|
|
buttonRemove->setText( i18n( "Re&move" ) );
|
|
|
|
buttonRemoveAll = new KPushButton( page_1 );
|
|
buttonRemoveAll->setText( i18n( "R&emove All" ) );
|
|
|
|
comboSort = new KComboBox( false, page_1 );
|
|
comboSort->insertItem( i18n("Sort: Unsorted") );
|
|
comboSort->insertItem( i18n("Sort: Ascending") );
|
|
comboSort->insertItem( i18n("Sort: Descending") );
|
|
comboSort->insertItem( i18n("Sort: Random") );
|
|
comboSort->insertItem( i18n("Sort: Numeric") );
|
|
|
|
checkPreview = new TQCheckBox( page_1 );
|
|
checkPreview->setText( i18n("&Preview") );
|
|
|
|
labelCount = new TQLabel( page_1 );
|
|
|
|
buttonUp = new KPushButton( page_1 );
|
|
buttonUp->setPixmap( BarIcon( "1uparrow" ) );
|
|
|
|
buttonDown = new KPushButton( page_1 );
|
|
buttonDown->setPixmap( BarIcon( "1downarrow" ) );
|
|
|
|
checkName = new TQCheckBox( page_1 );
|
|
checkName->setText( i18n("&Display name") );
|
|
|
|
buttonMove = new KPushButton( page_1 );
|
|
buttonMove->setPixmap( BarIcon( "move" ) );
|
|
|
|
Layout5->addWidget( buttonUp );
|
|
Layout5->addWidget( buttonMove );
|
|
Layout5->addWidget( buttonDown );
|
|
|
|
Layout4->addLayout( Layout5 );
|
|
Layout4->addItem( spacer2 );
|
|
|
|
Layout3->addWidget( buttonAdd );
|
|
Layout3->addWidget( buttonRemove );
|
|
Layout3->addWidget( buttonRemoveAll );
|
|
Layout3->addWidget( comboSort );
|
|
Layout3->addWidget( checkPreview );
|
|
Layout3->addWidget( checkName );
|
|
Layout3->addWidget( labelCount );
|
|
Layout3->addItem( spacer );
|
|
Layout3->addLayout( Layout4 );
|
|
Layout3->addItem( spacer );
|
|
|
|
pageLayout->addWidget( fileList );
|
|
pageLayout->setStretchFactor( fileList, 2 );
|
|
pageLayout->addLayout( Layout3 );
|
|
|
|
emit pageDone( page_1, i18n( pageTitle[0] ) );
|
|
|
|
TQToolTip::add( buttonAdd, i18n( "Add one or more files or directories" ) );
|
|
TQToolTip::add( buttonRemove, i18n( "Remove selected files" ) );
|
|
TQToolTip::add( buttonRemoveAll, i18n( "Remove all files" ) );
|
|
TQToolTip::add( checkPreview, i18n( "Enable/disable preview of pictures." ) );
|
|
TQToolTip::add( labelCount, i18n( "Displays the number of files in the list." ) );
|
|
TQToolTip::add( buttonUp, i18n( "Move selected items up" ));
|
|
TQToolTip::add( buttonDown, i18n( "Move selected items down" ));
|
|
TQToolTip::add( checkName, i18n( "Enable/disable display of file name." ) );
|
|
TQToolTip::add( buttonMove, i18n( "Move selected items (select the new location with the mouse)" ));
|
|
}
|
|
|
|
void KRenameImpl::setupPage2()
|
|
{
|
|
page_2 = new TQWidget( parent );
|
|
|
|
pageLayout_2 = new TQVBoxLayout( page_2, 6, 6 );
|
|
|
|
TQSpacerItem* spacer_3 = new TQSpacerItem( 20, 20, TQSizePolicy::Minimum, TQSizePolicy::Expanding );
|
|
|
|
groupOptions = new TQButtonGroup( page_2 );
|
|
groupOptions->setTitle( i18n( "O&ptions" ) );
|
|
groupOptions->setColumnLayout(0, Qt::Vertical );
|
|
groupOptions->layout()->setSpacing( 6 );
|
|
groupOptions->layout()->setMargin( 11 );
|
|
groupOptionsLayout = new TQVBoxLayout( groupOptions->layout() );
|
|
groupOptionsLayout->setAlignment( TQt::AlignTop );
|
|
|
|
optionRename = new TQRadioButton( groupOptions );
|
|
optionRename->setText( i18n( "&Rename input files" ) );
|
|
optionRename->setChecked( true );
|
|
|
|
optionCopy = new TQRadioButton( groupOptions );
|
|
optionCopy->setText( i18n( "Cop&y files to destination directory" ) );
|
|
|
|
optionMove = new TQRadioButton( groupOptions );
|
|
optionMove->setText( i18n( "&Move files to destination directory" ) );
|
|
|
|
optionLink = new TQRadioButton( groupOptions );
|
|
optionLink->setText( i18n("Create symbolic &links in destination directory") );
|
|
|
|
dirname = new KMyHistoryCombo( false, groupOptions, "Path" );
|
|
urlrequester = new KURLRequester( dirname, groupOptions );
|
|
urlrequester->setMode( KFile::Directory | KFile::ExistingOnly );
|
|
|
|
checkOverwrite = new TQCheckBox( groupOptions );
|
|
checkOverwrite->setText( i18n( "&Overwrite existing files" ) );
|
|
|
|
groupOptionsLayout->addWidget( optionRename );
|
|
groupOptionsLayout->addWidget( optionCopy );
|
|
groupOptionsLayout->addWidget( optionMove );
|
|
groupOptionsLayout->addWidget( optionLink );
|
|
groupOptionsLayout->addWidget( urlrequester );
|
|
groupOptionsLayout->addItem( spacer_3 );
|
|
groupOptionsLayout->addWidget( checkOverwrite );
|
|
|
|
groupUndo = new TQVGroupBox( page_2 );
|
|
groupUndo->setTitle( i18n("&Undo Renaming") );
|
|
|
|
checkUndoScript = new TQCheckBox( i18n("&Create an undo script"), groupUndo );
|
|
|
|
undorequester = new KURLRequester( groupUndo );
|
|
undorequester->setEnabled( false );
|
|
undorequester->setMode( KFile::File | KFile::LocalOnly );
|
|
undorequester->setFilter( i18n("*.krename|KRename undo scripts (*.krename)\n"
|
|
"*|All Files (*)") );
|
|
undorequester->fileDialog()->setOperationMode( KFileDialog::Saving );
|
|
|
|
pageLayout_2->addWidget( groupOptions );
|
|
pageLayout_2->addWidget( groupUndo );
|
|
pageLayout_2->addItem( spacer_3 );
|
|
|
|
emit pageDone( page_2, i18n( pageTitle[1] ) );
|
|
|
|
TQToolTip::add( optionRename, i18n( "Input files will be renamed." ) );
|
|
TQToolTip::add( optionCopy, i18n( "Copies all files to the destination directory and renames them." ) );
|
|
TQToolTip::add( optionMove, i18n( "Moves all files to the destination directory and renames them." ) );
|
|
}
|
|
|
|
void KRenameImpl::setupPage3()
|
|
{
|
|
page_3 = new KJanusWidget( parent, "janus", KJanusWidget::TreeList );
|
|
page_3->setShowIconsInTreeList( true );
|
|
page_3->setTreeListAutoResize( true );
|
|
|
|
setupTab1();
|
|
|
|
emit pageDone( page_3, i18n( pageTitle[2] ) );
|
|
}
|
|
|
|
void KRenameImpl::setupPage4()
|
|
{
|
|
page_4 = new TQWidget( parent );
|
|
pageLayout_4 = new TQVBoxLayout( page_4, 11, 6 );
|
|
|
|
fileTab = new TQWidgetStack( page_4 );
|
|
setupFileTab1();
|
|
setupFileTab2();
|
|
|
|
Layout22 = new TQHBoxLayout( 0, 0, 6 );
|
|
Layout23 = new TQVBoxLayout( 0, 0, 6 );
|
|
|
|
preview = new KMyListView( &changes, fileList, page_4 );
|
|
preview->setSorting( -1 );
|
|
preview->addColumn( i18n( "Origin" ) );
|
|
preview->addColumn( i18n( "Renamed" ) );
|
|
|
|
buttonUp2 = new KPushButton( page_4 );
|
|
buttonUp2->setPixmap( BarIcon( "1uparrow" ) );
|
|
|
|
buttonDown2 = new KPushButton( page_4 );
|
|
buttonDown2->setPixmap( BarIcon( "1downarrow" ) );
|
|
|
|
TQSpacerItem* spacer = new TQSpacerItem( 20, 20, TQSizePolicy::Expanding, TQSizePolicy::Expanding );
|
|
|
|
Layout23->addItem( spacer );
|
|
Layout23->addWidget( buttonUp2 );
|
|
Layout23->addWidget( buttonDown2 );
|
|
Layout23->addItem( spacer );
|
|
|
|
Layout22->addWidget( preview );
|
|
Layout22->addLayout( Layout23 );
|
|
Layout22->setStretchFactor( preview, 2 );
|
|
|
|
pageLayout_4->addWidget( fileTab );
|
|
pageLayout_4->addLayout( Layout22 );
|
|
|
|
emit pageDone( page_4, i18n( pageTitle[3] ) );
|
|
|
|
TQToolTip::add( filename, i18n( "Add a template.<br>Example: <i>picture###</i>" ) );
|
|
TQToolTip::add( extemplate, i18n( "Add a template for the file extension.<br>It behaves like the filename template.") );
|
|
TQToolTip::add( checkExtension, i18n("Checking this checkbox is the same as setting the extension template to $"));
|
|
TQToolTip::add( buttonUp2, i18n( "Move selected items up" ));
|
|
TQToolTip::add( buttonDown2, i18n( "Move selected items down" ));
|
|
TQToolTip::add( preview, i18n( "Double click on an item to modify it." ));
|
|
TQToolTip::add( buttonHelp, i18n("Help Dialog with all tokens supported by KRename."));
|
|
TQToolTip::add( buttonReplace, i18n("<qt>Find and replace characters or part string of the source filename in the destination filename.</qt>") );
|
|
TQToolTip::add( buttonEasyReplace, i18n("<qt>Find and replace characters or part string of the source filename in the destination filename.</qt>") );
|
|
TQToolTip::add( comboExtension, i18n("<qt>You can use \".gz\" and \".tar.gz\" as file extension of the file backup.tar.gz depending on this setting.</qt>") );
|
|
}
|
|
|
|
void KRenameImpl::setupFileTab1()
|
|
{
|
|
TQWidget* tab = new TQWidget( fileTab );
|
|
|
|
labelTemplate = new TQLabel( tab );
|
|
labelTemplate->setText( i18n( "&Template:" ) );
|
|
|
|
filename = new KMyHistoryCombo( true, tab, "Template" );
|
|
labelTemplate->setBuddy( filename );
|
|
|
|
TQLabel* labelDot = new TQLabel( tab );
|
|
labelDot->setText("<b>.</b>");
|
|
|
|
extemplate = new KMyHistoryCombo( true, tab, "ExTemplate" );
|
|
extemplate->setEnabled( FALSE );
|
|
|
|
buttonHelp = new KPushButton( i18n("&Functions..."), tab );
|
|
buttonHelp->setIconSet( SmallIcon("help") );
|
|
|
|
checkExtension = new TQCheckBox( tab );
|
|
checkExtension->setText( i18n( "&Use extension of the input file" ) );
|
|
checkExtension->setChecked( TRUE );
|
|
|
|
comboExtension = new KComboBox( false, tab );
|
|
|
|
buttonReplace = new KPushButton( i18n("Find &and Replace..."), tab );
|
|
buttonReplace->setIconSet( SmallIconSet("find") );
|
|
|
|
buttonNumber = new KPushButton( i18n("&Numbering..."), tab );
|
|
buttonCoord = new KPushButton( i18n("&Insert Part of Filename..."), tab );
|
|
|
|
helpDialog->setLineEdit( filename->lineEdit() );
|
|
|
|
TQStringList help;
|
|
help.append("$;;" + i18n("old filename") );
|
|
help.append("%;;" + i18n("old filename converted to lower case") );
|
|
help.append("&;;" + i18n("old filename converted to upper case") );
|
|
help.append("*;;" + i18n("first letter of every word upper case") );
|
|
help.append("[&1][%2-];;" + i18n("first letter of filename upper case") );
|
|
help.append("#;;" + i18n("number (try also ##, ###, ... for leading zeros)") );
|
|
help.append("#{0;1};;" + i18n("counter with custom start value 0 and custom stepping 1") );
|
|
help.append("/;;" + i18n("create a subdirectory") );
|
|
help.append("\\;;" + i18n("strip whitespaces leading and trailing") );
|
|
help.append("[$x-y];;" + i18n("character x to y of old filename") );
|
|
help.append("[$x;y];;" + i18n("y characters of old filename starting at x") );
|
|
help.append("[$dirname];;" + i18n("insert name of directory") );
|
|
help.append("[$dirname.];;" + i18n("insert name of parent directory") );
|
|
help.append("[#length-0];;" + i18n("insert the length of the input filename") );
|
|
helpDialogData->add( i18n("Built-in Functions:" ), &help, SmallIcon("krename"), true );
|
|
|
|
help.clear();
|
|
help.append( "\\$;;" + i18n("Insert '$'") );
|
|
help.append( "\\%;;" + i18n("Insert '%'") );
|
|
help.append( "\\&;;" + i18n("Insert '&'") );
|
|
help.append( "\\*;;" + i18n("Insert '*'") );
|
|
help.append( "\\/;;" + i18n("Insert '/'") );
|
|
help.append( "\\\\;;" + i18n("Insert '\\\\'") );
|
|
help.append( "\\[;;" + i18n("Insert '['") );
|
|
help.append( "\\];;" + i18n("Insert ']'") );
|
|
help.append( "\\#;;" + i18n("Insert '#'") );
|
|
helpDialogData->add( i18n("Special Characters:" ), &help, SmallIcon("krename") );
|
|
|
|
/*
|
|
//TODO: FIX this tooltip
|
|
TQToolTip::add( buttonHelp,
|
|
i18n(
|
|
"<b>$</b> old filename<br><b>%</b> old filename"
|
|
" converted to lower case<br><b>&</b> old filename converted to upper case<br>"
|
|
"<b>*</b> first letter of every word uppercase<br>"
|
|
"<b>#</b> Adds a number to the filename (add more #'s for leading zeros)<br>"
|
|
"<b>/</b> creates a subdirectory<br>"
|
|
"<b>[$x-y]</b> Characters x to y of the old filename<br>"
|
|
"<b>[%x-y]</b> Characters x to y converted to lower case"
|
|
) );
|
|
*/
|
|
|
|
TQSpacerItem* spacer_9 = new TQSpacerItem( 200, 20, TQSizePolicy::Maximum, TQSizePolicy::Maximum );
|
|
|
|
TQVBoxLayout* layout = new TQVBoxLayout( tab );
|
|
TQHBoxLayout* Layout1 = new TQHBoxLayout( 0, 6, 6 );
|
|
TQHBoxLayout* Layout2 = new TQHBoxLayout( 0, 6, 6 );
|
|
TQHBoxLayout* ExtensionLayout = new TQHBoxLayout( 0, 6, 6 );
|
|
|
|
Layout1->addWidget( labelTemplate );
|
|
Layout1->addWidget( filename );
|
|
Layout1->setStretchFactor( filename, 4 );
|
|
Layout1->addWidget( labelDot );
|
|
Layout1->addWidget( extemplate );
|
|
Layout1->addWidget( buttonHelp );
|
|
|
|
Layout2->addWidget( buttonReplace );
|
|
Layout2->addWidget( buttonNumber );
|
|
Layout2->addWidget( buttonCoord );
|
|
Layout2->addItem( spacer_9 );
|
|
|
|
ExtensionLayout->addWidget( checkExtension );
|
|
ExtensionLayout->addItem( spacer_9 );
|
|
ExtensionLayout->addWidget( new TQLabel( i18n("File extension starts at:"), tab ) );
|
|
ExtensionLayout->addWidget( comboExtension );
|
|
|
|
layout->addLayout( Layout1 );
|
|
layout->addLayout( ExtensionLayout );
|
|
layout->addLayout( Layout2 );
|
|
layout->addItem( spacer_9 );
|
|
|
|
fileTab->addWidget( tab, ID_TAB );
|
|
}
|
|
|
|
void KRenameImpl::setupFileTab2()
|
|
{
|
|
TQWidget* tab = new TQWidget( page_4 );
|
|
|
|
TQHBoxLayout* layout = new TQHBoxLayout( tab, 6, 6 );
|
|
|
|
TQVGroupBox* vgroup1 = new TQVGroupBox( i18n("&Filename"), tab );
|
|
TQGrid* grid = new TQGrid( 4, vgroup1 );
|
|
|
|
TQLabel* l = new TQLabel( i18n("&Prefix:"), grid );
|
|
comboKRenamePrefix = new KComboBox( false, grid );
|
|
comboPrefix = new KMyHistoryCombo( true, grid, "comboPrefix" );
|
|
buttonEasy1 = new KPushButton( grid );
|
|
l->setBuddy( comboPrefix );
|
|
|
|
l = new TQLabel( i18n("&Suffix:"), grid );
|
|
comboKRenameSuffix = new KComboBox( false, grid, "comboSuffix" );
|
|
comboSuffix = new KMyHistoryCombo( true, grid );
|
|
buttonEasy2 = new KPushButton( grid );
|
|
l->setBuddy( comboSuffix );
|
|
|
|
TQStringList comboItems;
|
|
comboItems.append( i18n("Convert to lower case ") );
|
|
comboItems.append( i18n("Convert to upper case") );
|
|
comboItems.append( i18n("Capitalize") );
|
|
|
|
l = new TQLabel( i18n("&Name:"), grid );
|
|
comboKRenameFilename = new KComboBox( false, grid );
|
|
comboKRenameFilename->insertItem( i18n("Use original name") );
|
|
comboKRenameFilename->insertStringList( comboItems );
|
|
comboKRenameFilename->insertItem( i18n("Custom name") );
|
|
l->setBuddy( comboKRenameFilename );
|
|
|
|
comboCustom = new KMyHistoryCombo( true, grid, "comboCustom" );
|
|
buttonEasy3 = new KPushButton( grid );
|
|
|
|
l = new TQLabel( i18n("&Extension:"), grid );
|
|
comboKRenameExtension = new KComboBox( false, grid );
|
|
comboKRenameExtension->insertItem( i18n("Use original extension") );
|
|
comboKRenameExtension->insertStringList( comboItems );
|
|
comboKRenameExtension->insertItem( i18n("Custom extension") );
|
|
l->setBuddy( comboKRenameExtension );
|
|
|
|
comboCustomExtension = new KMyHistoryCombo( true, grid, "comboCustomExtension" );
|
|
buttonEasy4 = new KPushButton( grid );
|
|
|
|
TQVBox* rightBox = new TQVBox( tab );
|
|
TQVGroupBox* group = new TQVGroupBox( i18n("&Number" ), rightBox );
|
|
|
|
spinStart = new KIntNumInput( group );
|
|
spinStart->setLabel( i18n( "Start &index:" ), AlignLeft | AlignVCenter );
|
|
|
|
spinNull = new KIntNumInput( spinStart, 1, group );
|
|
spinNull->setLabel( i18n("&Number of digits:"), AlignLeft | AlignVCenter );
|
|
spinNull->setRange( 1, 100, 1, false );
|
|
|
|
buttonEasyReplace = new KPushButton( i18n("&Find and Replace..."), rightBox );
|
|
buttonEasyReplace->setIconSet( SmallIconSet("find") );
|
|
|
|
layout->addWidget( vgroup1 );
|
|
layout->addWidget( rightBox );
|
|
|
|
comboKRenamePrefix->insertItem( "" );
|
|
comboKRenamePrefix->insertItem( i18n("Number") );
|
|
comboKRenamePrefix->insertItem( i18n("Date") );
|
|
|
|
comboKRenameSuffix->insertItem( "" );
|
|
comboKRenameSuffix->insertItem( i18n("Number") );
|
|
comboKRenameSuffix->insertItem( i18n("Date") );
|
|
|
|
enableControls();
|
|
|
|
connect( comboPrefix, TQT_SIGNAL( textChanged( const TQString &)), this, TQT_SLOT( changed()));
|
|
connect( comboSuffix, TQT_SIGNAL( textChanged( const TQString &)), this, TQT_SLOT( changed()));
|
|
connect( comboKRenameFilename, TQT_SIGNAL( activated(int)), this, TQT_SLOT( changed()));
|
|
connect( comboCustom, TQT_SIGNAL( textChanged( const TQString & ) ), this, TQT_SLOT( changed() ));
|
|
connect( comboKRenamePrefix, TQT_SIGNAL(activated(int)), this, TQT_SLOT(changed()));
|
|
connect( comboKRenameExtension, TQT_SIGNAL( activated(int)), this, TQT_SLOT( changed()));
|
|
connect( comboCustomExtension, TQT_SIGNAL( textChanged( const TQString & ) ), this, TQT_SLOT( changed() ));
|
|
connect( comboKRenameSuffix, TQT_SIGNAL(activated(int)), this, TQT_SLOT(changed()));
|
|
connect( spinNull, TQT_SIGNAL( valueChanged(int) ), this, TQT_SLOT( changed() ));
|
|
connect( spinStart, TQT_SIGNAL( valueChanged(int) ), this, TQT_SLOT( changed() ));
|
|
|
|
buttonEasy1->setIconSet( SmallIcon("help") );
|
|
buttonEasy2->setIconSet( SmallIcon("help") );
|
|
buttonEasy3->setIconSet( SmallIcon("help") );
|
|
buttonEasy4->setIconSet( SmallIcon("help") );
|
|
|
|
buttonEasy1->setSizePolicy( TQSizePolicy::Maximum, TQSizePolicy::Maximum );
|
|
buttonEasy2->setSizePolicy( TQSizePolicy::Maximum, TQSizePolicy::Maximum );
|
|
buttonEasy3->setSizePolicy( TQSizePolicy::Maximum, TQSizePolicy::Maximum );
|
|
buttonEasy4->setSizePolicy( TQSizePolicy::Maximum, TQSizePolicy::Maximum );
|
|
|
|
const TQString easy_text( i18n("<qt>Insert a special KRename command which inserts file information into the filename.</qt>") );
|
|
|
|
connect( buttonEasy1, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotEasy1() ) );
|
|
connect( buttonEasy2, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotEasy2() ) );
|
|
connect( buttonEasy3, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotEasy3() ) );
|
|
connect( buttonEasy4, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotEasy4() ) );
|
|
|
|
TQToolTip::add( buttonEasy1, easy_text );
|
|
TQToolTip::add( buttonEasy2, easy_text );
|
|
TQToolTip::add( buttonEasy3, easy_text );
|
|
TQToolTip::add( buttonEasy4, easy_text );
|
|
|
|
fileTab->addWidget( tab, ID_WIZARD );
|
|
}
|
|
|
|
TQString KRenameImpl::easyOptions( KComboBox* combo, KMyHistoryCombo* custom )
|
|
{
|
|
TQString t = TQString();
|
|
if( combo->currentItem() == 0 )
|
|
t = "$";
|
|
else if( combo->currentItem() == 1 )
|
|
t = "%";
|
|
else if( combo->currentItem() == 2 )
|
|
t = "&";
|
|
else if( combo->currentItem() == 3 )
|
|
t = "*";
|
|
else if( combo->currentItem() == 4 )
|
|
t = custom->text();
|
|
|
|
return t;
|
|
}
|
|
|
|
void KRenameImpl::changed()
|
|
{
|
|
TQString t = easyOptions( comboKRenameFilename, comboCustom );
|
|
t = comboPrefix->text() + t + comboSuffix->text();
|
|
|
|
for( int i=0; i<spinNull->value();i++)
|
|
{
|
|
if( comboKRenamePrefix->currentItem() == 1 )
|
|
t.prepend("#");
|
|
if( comboKRenameSuffix->currentItem() == 1 )
|
|
t.append("#");
|
|
}
|
|
|
|
if( comboKRenamePrefix->currentItem() == 2 )
|
|
t.prepend( "[date]" );
|
|
|
|
if( comboKRenameSuffix->currentItem() == 2 )
|
|
t.append( "[date]" );
|
|
|
|
TQString e = easyOptions( comboKRenameExtension, comboCustomExtension );
|
|
|
|
bool update = false;
|
|
update = ( counterStart() != spinStart->value() && t == fileNameTemplate() );
|
|
setCounterStart( spinStart->value() );
|
|
|
|
filename->setText( t );
|
|
extemplate->setText( e );
|
|
checkExtension->setChecked( (comboKRenameExtension->currentItem() == 0) );
|
|
|
|
if( update )
|
|
updatePre();
|
|
|
|
enableControls();
|
|
}
|
|
|
|
void KRenameImpl::parseWizardMode()
|
|
{
|
|
/** This function is not very accrurate and
|
|
* guesses most cases.
|
|
* But it works pretty well and is IMHO enough for this
|
|
* simple dialog.
|
|
*/
|
|
TQString t = filename->text();
|
|
|
|
spinNull->setValue( t.contains( "#" ) );
|
|
|
|
if( t.startsWith( "[date]") )
|
|
{
|
|
t = t.right( t.length() - 6 );
|
|
comboKRenamePrefix->setCurrentItem( 2 );
|
|
}
|
|
else if( t.startsWith( "#") )
|
|
{
|
|
while( t.startsWith( "#" ) )
|
|
t = t.right( t.length() - 1 );
|
|
comboKRenamePrefix->setCurrentItem( 1 );
|
|
}
|
|
|
|
if( t.endsWith( "[date]" ) )
|
|
{
|
|
t = t.left( t.length() - 6 );
|
|
comboKRenameSuffix->setCurrentItem( 2 );
|
|
}
|
|
else if( t.endsWith( "#") )
|
|
{
|
|
while( t.endsWith( "#" ) )
|
|
t = t.left( t.length() - 1 );
|
|
|
|
comboKRenameSuffix->setCurrentItem( 1 );
|
|
}
|
|
|
|
int pos = -1;
|
|
if( (pos = t.find( "$" )) > -1 )
|
|
comboKRenameFilename->setCurrentItem( 0 );
|
|
else if( (pos = t.find( "%" )) > -1 )
|
|
comboKRenameFilename->setCurrentItem( 1 );
|
|
else if( (pos = t.find( "&" )) > -1 )
|
|
comboKRenameFilename->setCurrentItem( 2 );
|
|
else if( (pos = t.find( "*" )) > -1 )
|
|
comboKRenameFilename->setCurrentItem( 3 );
|
|
else
|
|
{
|
|
comboKRenameFilename->setCurrentItem( 4 );
|
|
comboCustom->setText( t );
|
|
}
|
|
|
|
if( pos > 0 )
|
|
{
|
|
comboPrefix->setText( t.left( pos ) );
|
|
comboSuffix->setText( t.mid( pos + 1, t.length() - pos - 1) );
|
|
}
|
|
|
|
spinStart->setValue( m_index );
|
|
}
|
|
|
|
void KRenameImpl::setupTab1()
|
|
{
|
|
/*
|
|
* Draw plugin user interfaces
|
|
*/
|
|
|
|
TQFrame* parent;
|
|
TQVBoxLayout* Layout;
|
|
TQVBoxLayout* gLayout;
|
|
TQGroupBox* g;
|
|
TQWidget* page;
|
|
|
|
/* strangely I do not have to delete this stuff
|
|
* after plugins have been reloaded.
|
|
* could cause a memory leak though
|
|
*/
|
|
while( ( page = page_3->pageWidget( 0 ) ) )
|
|
page_3->removePage( page );
|
|
|
|
TQPtrListIterator<PluginLoader::PluginLibrary> it( plugin->libs ); // iterator for dict
|
|
while ( it.current() ) {
|
|
if( !(*it)->plugin->alwaysUsed() )
|
|
{
|
|
parent = page_3->addPage( (*it)->plugin->getName(), TQString(), (*it)->plugin->getIcon() );
|
|
|
|
Layout = new TQVBoxLayout( parent, 11, 6, "Layout");
|
|
g = new TQGroupBox( parent );
|
|
gLayout = new TQVBoxLayout( g, 11, 6, "gLayout" );
|
|
|
|
(*it)->check = new TQCheckBox( i18n("&Use this plugin"), parent );
|
|
connect( (*it)->check, TQT_SIGNAL( clicked() ), this, TQT_SLOT( pluginHelpChanged() ) );
|
|
connect( (*it)->plugin, TQT_SIGNAL( previewChanged( Plugin* ) ), this, TQT_SLOT( updatePluginPreview( Plugin* ) ) );
|
|
Layout->addWidget( (*it)->check );
|
|
(*it)->plugin->drawInterface( g, gLayout );
|
|
|
|
Layout->addWidget( g );
|
|
|
|
} else
|
|
(*it)->plugin->addHelp( helpDialogData );
|
|
|
|
++it;
|
|
}
|
|
|
|
page_3->showPage( 1 );
|
|
}
|
|
|
|
void KRenameImpl::addFile()
|
|
{
|
|
bool auto_up = false;
|
|
|
|
DSDirSelectDialog* dsd = new DSDirSelectDialog( parent );
|
|
if( dsd->exec() == TQDialog::Accepted ) {
|
|
KURL::List slist = dsd->selectedURLs();
|
|
KURL::List::Iterator it = slist.begin();
|
|
|
|
for ( ; it != slist.end(); ++it )
|
|
{
|
|
if( !fileList->isFile( *it, false ) )
|
|
{
|
|
if( dsd->onlyDirs() )
|
|
fileList->addDirName( *it, dsd->currentFilter(), dsd->hidden(), dsd->recursively() );
|
|
else
|
|
fileList->addDir( *it, dsd->currentFilter(), dsd->hidden(), dsd->recursively(), dsd->dirs() );
|
|
}
|
|
else
|
|
{
|
|
fileList->addFile( *it, true );
|
|
auto_up = true;
|
|
}
|
|
}
|
|
|
|
if( auto_up )
|
|
{
|
|
updatePreview();
|
|
updateCount();
|
|
}
|
|
}
|
|
}
|
|
|
|
void KRenameImpl::clearList()
|
|
{
|
|
fileList->clear();
|
|
changes.clear();
|
|
updateCount();
|
|
updatePreview();
|
|
}
|
|
|
|
void KRenameImpl::removeFile()
|
|
{
|
|
unsigned int i = 0;
|
|
do {
|
|
if(fileList->isSelected( i ))
|
|
removeFile( i );
|
|
else
|
|
i++;
|
|
} while( i < fileList->count() );
|
|
|
|
updateCount();
|
|
updatePreview();
|
|
}
|
|
|
|
void KRenameImpl::removeFile( int index )
|
|
{
|
|
KURL url = fileList->url( index );
|
|
fileList->removeItem( index );
|
|
// we have this to display the add files url label when count() == 0
|
|
fileList->positionLabel();
|
|
// remove this file from changes, too
|
|
for( unsigned int i = 0; i < changes.count(); i++ )
|
|
if( changes[i].url == url )
|
|
changes.remove( changes.at( i ) );
|
|
|
|
updateCount();
|
|
updatePreview();
|
|
}
|
|
|
|
void KRenameImpl::help()
|
|
{
|
|
kapp->invokeHelp();
|
|
}
|
|
|
|
void KRenameImpl::start()
|
|
{
|
|
if(!checkErrors())
|
|
return;
|
|
|
|
// Let the plugins check for erorrs
|
|
TQPtrListIterator<PluginLoader::PluginLibrary> it( plugin->libs );
|
|
while ( it.current() ) {
|
|
if( (*it)->usePlugin && !(*it)->plugin->checkError() )
|
|
return;
|
|
++it;
|
|
}
|
|
|
|
ProgressDialog* p = new ProgressDialog( 0, "p" );
|
|
p->print(TQString( i18n("Starting conversion of %1 files.") ).arg(fileList->count()));
|
|
|
|
// Save History
|
|
dirname->saveSettings();
|
|
filename->saveSettings();
|
|
extemplate->saveSettings();
|
|
|
|
TDEConfig * config = kapp->config();
|
|
config->setGroup("FileExtension");
|
|
config->writeEntry("FileExtensionCombo", comboExtension->currentItem() );
|
|
|
|
// save the configuration
|
|
saveConfig();
|
|
|
|
b = new BatchRenamer();
|
|
if( setupBatchRenamer( b, false ) )
|
|
{
|
|
p->show();
|
|
parent->hide();
|
|
b->processFiles( p, this );
|
|
}
|
|
|
|
// Memory leak!!! : ??
|
|
//delete parent;
|
|
}
|
|
|
|
void KRenameImpl::enableControls()
|
|
{
|
|
comboCustom->setEnabled( comboKRenameFilename->currentItem() == 4 );
|
|
comboCustomExtension->setEnabled( comboKRenameExtension->currentItem() == 4 );
|
|
buttonEasy3->setEnabled( comboKRenameFilename->currentItem() == 4 );
|
|
buttonEasy4->setEnabled( comboKRenameExtension->currentItem() == 4 );
|
|
urlrequester->setEnabled( !optionRename->isChecked() );
|
|
checkUndoScript->setEnabled( !optionCopy->isChecked() && !optionLink->isChecked() );
|
|
undorequester->setEnabled( checkUndoScript->isChecked() && checkUndoScript->isEnabled() );
|
|
extemplate->setEnabled( !checkExtension->isChecked() );
|
|
loadPlugins->setEnabled( !plugin->filePluginsLoaded() );
|
|
}
|
|
|
|
bool KRenameImpl::checkErrors()
|
|
{
|
|
if( filename->text().isEmpty() ) {
|
|
KMessageBox::sorry( parent, i18n("Specify a template to use for renaming files.") );
|
|
return false;
|
|
}
|
|
if( dirname->text().isEmpty() && !optionRename->isChecked()) {
|
|
KMessageBox::sorry( parent, i18n("Please give a destination directory !") );
|
|
emit showPage( 2 );
|
|
return false;
|
|
}
|
|
if( checkUndoScript->isChecked() && !optionCopy->isChecked() && undorequester->url().isEmpty() ) {
|
|
KMessageBox::sorry( parent, i18n("Please give the name of the undo script!") );
|
|
showPage( 2 );
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
void KRenameImpl::updateCount()
|
|
{
|
|
labelCount->setText( TQString( i18n("Files: <b>%1</b>") ).arg(fileList->count()));
|
|
|
|
buttonCoord->setEnabled( (bool)fileList->count() );
|
|
buttonReplace->setEnabled( (bool)fileList->count() );
|
|
buttonEasyReplace->setEnabled( (bool)fileList->count() );
|
|
emit enableFinish( (bool)fileList->count() );
|
|
buttonRemove->setEnabled( (bool)fileList->count() );
|
|
buttonRemoveAll->setEnabled( (bool)fileList->count() );
|
|
buttonMove->setEnabled( (bool)fileList->count() );
|
|
buttonUp->setEnabled( (bool)fileList->count() );
|
|
buttonUp2->setEnabled( (bool)fileList->count() );
|
|
buttonDown->setEnabled( (bool)fileList->count() );
|
|
buttonDown2->setEnabled( (bool)fileList->count() );
|
|
|
|
updateDots();
|
|
}
|
|
|
|
void KRenameImpl::fillStructures( BatchRenamer* b, bool preview )
|
|
{
|
|
TQValueList<data> f;
|
|
unsigned int max = (preview && KRenameImpl::numRealTimePreview > -1 ? KRenameImpl::numRealTimePreview : fileList->count());
|
|
|
|
for( unsigned int i = 0; i < max; i++) {
|
|
KURL url = fileList->url( i );
|
|
TQFileInfo fi( url.path() );
|
|
|
|
data fdata;
|
|
fdata.dir = fileList->dir( i );
|
|
if( !fdata.dir ) {
|
|
splitFilename( &fi, &fdata.src.name, &fdata.src.extension );
|
|
} else {
|
|
fdata.src.name = BatchRenamer::findDirName( "dirname", url.path() );
|
|
fdata.src.extension = "";
|
|
}
|
|
|
|
fdata.src.url = url;
|
|
|
|
/* Let's do some error checking for files
|
|
* called: file_xy.
|
|
*/
|
|
if( url.path().right(1) == "." )
|
|
// File ends with a dot
|
|
fdata.src.name.append( "." );
|
|
|
|
fdata.src.directory = fi.dirPath( true );
|
|
if( fdata.src.directory.right(1) != "/" )
|
|
fdata.src.directory.append("/");
|
|
|
|
f.append( fdata );
|
|
}
|
|
|
|
/*
|
|
* Tell plugins that they should fill their structure, too.
|
|
* Check also which plugins should be used !
|
|
*/
|
|
TQPtrListIterator<PluginLoader::PluginLibrary> it( plugin->libs );
|
|
for( int z = 0; it.current(); ++it, z++ ) {
|
|
if( (*it)->plugin->alwaysUsed() || ((*it)->check && (*it)->check->isChecked()) )
|
|
(*it)->plugin->fillStructure();
|
|
}
|
|
|
|
b->setFiles( f );
|
|
}
|
|
|
|
void KRenameImpl::updatePre()
|
|
{
|
|
updatePreview();
|
|
updateCount();
|
|
toggleImagePreview();
|
|
}
|
|
|
|
void KRenameImpl::addFileOrDir( const TQString & name )
|
|
{
|
|
fileList->addFile( name, false );
|
|
}
|
|
|
|
void KRenameImpl::addFileOrDir( const KURL & name )
|
|
{
|
|
fileList->addFile( name, true );
|
|
}
|
|
|
|
bool KRenameImpl::setupBatchRenamer( BatchRenamer* b, bool preview )
|
|
{
|
|
b->setText( filename->text() );
|
|
b->setExText( ( checkExtension->isChecked() ? TQString("$") : extemplate->text() ) );
|
|
b->setIndex( m_index );
|
|
b->setResetCounter( m_reset );
|
|
b->setStep( m_step );
|
|
b->setSkipList( skip );
|
|
b->setReplaceList( rep );
|
|
b->setChanges( changes );
|
|
|
|
if( !preview ) {
|
|
TQString url = urlrequester->url();
|
|
if( url.right(1) != "/" )
|
|
url.append( "/" );
|
|
|
|
if( !TDEIO::NetAccess::exists( KURL( url ) ) )
|
|
{
|
|
int m = KMessageBox::warningContinueCancel( parent, i18n("The directory %1 does not exist. "
|
|
"KRename will create it for you.").arg( url ) );
|
|
if( m == KMessageBox::Cancel )
|
|
return false;
|
|
|
|
int i = 0;
|
|
TQString d = "/";
|
|
while( (d += url.section( "/", i, i, TQString::SectionSkipEmpty )) && ! d.isEmpty() ) { // asignment here!
|
|
if( !TDEIO::NetAccess::exists( d ) && !TDEIO::NetAccess::mkdir( d ) )
|
|
{
|
|
tqDebug( "Can't create %s", d.latin1() );
|
|
break;
|
|
}
|
|
d.append( "/" );
|
|
i++;
|
|
}
|
|
}
|
|
|
|
b->setDirname( url );
|
|
b->setOverwrite( checkOverwrite->isChecked() );
|
|
b->setUndo( checkUndoScript->isChecked() && !optionCopy->isChecked() );
|
|
if( checkUndoScript->isChecked() && !optionCopy->isChecked() )
|
|
b->setUndoScript( undorequester->url() );
|
|
|
|
b->setMode( currentRenameMode() );
|
|
}
|
|
|
|
fillStructures( b, preview );
|
|
return true;
|
|
}
|
|
|
|
int KRenameImpl::currentRenameMode()
|
|
{
|
|
if( optionCopy->isChecked() )
|
|
return COPY;
|
|
else if( optionMove->isChecked() )
|
|
return MOVE;
|
|
else if( optionRename->isChecked() )
|
|
return RENAME;
|
|
else if( optionLink->isChecked() )
|
|
return LINK;
|
|
// prevent a compiler warning
|
|
return RENAME;
|
|
}
|
|
|
|
void KRenameImpl::updatePluginPreview( Plugin* p )
|
|
{
|
|
TQPtrListIterator<PluginLoader::PluginLibrary> it( plugin->libs ); // iterator for dict
|
|
while ( it.current() ) {
|
|
if( (*it)->plugin == p && (*it)->usePlugin ) {
|
|
updatePreview();
|
|
return;
|
|
}
|
|
|
|
++it;
|
|
}
|
|
}
|
|
|
|
void KRenameImpl::updatePreview()
|
|
{
|
|
// is there a number in the filename or extension
|
|
if( filename->text().contains( "#" ) || extemplate->text().contains( "#" ) )
|
|
buttonNumber->setEnabled( true );
|
|
else
|
|
buttonNumber->setEnabled( false );
|
|
|
|
if( filename->isEmpty() && extemplate->isEmpty() && !checkExtension->isChecked() )
|
|
return;
|
|
|
|
int h = preview->horizontalScrollBar()->value();
|
|
int v = preview->verticalScrollBar()->value();
|
|
|
|
preview->clear();
|
|
|
|
if( fileList->count() <= 0 )
|
|
return;
|
|
|
|
BatchRenamer b;
|
|
if( setupBatchRenamer( &b, true ) )
|
|
{
|
|
TDEApplication::setOverrideCursor( TQt::WaitCursor );
|
|
b.createPreview( preview );
|
|
TDEApplication::restoreOverrideCursor();
|
|
}
|
|
preview->horizontalScrollBar()->setValue( h );
|
|
preview->verticalScrollBar()->setValue( v );
|
|
}
|
|
|
|
void KRenameImpl::loadConfig()
|
|
{
|
|
TDEConfig* config = kapp->config();
|
|
|
|
config->setGroup("HistSize");
|
|
m_hist = config->readNumEntry("HistoryItems", 10 );
|
|
updateHist();
|
|
|
|
config->setGroup("GUISettings");
|
|
// Image Preview
|
|
checkPreview->setChecked(config->readBoolEntry("ImagePreview", false ));
|
|
fileList->setPreview( checkPreview->isChecked() );
|
|
m_index = config->readNumEntry("StartIndex", 1);
|
|
m_step = 1;
|
|
m_reset = false;
|
|
m_loadplugins = config->readBoolEntry("LoadFilePlugins", true );
|
|
m_autosize = config->readBoolEntry("ColumnAutosize", false );
|
|
checkName->setChecked(config->readBoolEntry("Name", false ));
|
|
fileList->setPreviewSize( config->readNumEntry("PreviewSize", 80) );
|
|
fileList->setName( checkName->isChecked() );
|
|
fileList->setSorting( config->readNumEntry("FileListSorting", KMyListBox::UNSORTED ) );
|
|
comboSort->setCurrentItem( fileList->sorting() );
|
|
|
|
CoordDialog::m_inversion = config->readBoolEntry("Inverse", false);
|
|
m_wizard = config->readBoolEntry( "GUIWizardMode", true );
|
|
|
|
int width = config->readNumEntry( "Width", parent->width() );
|
|
int height = config->readNumEntry( "Height", parent->height() );
|
|
if( config->readBoolEntry("Maximized", false ) ) {
|
|
parent->showMaximized();
|
|
} else {
|
|
parent->resize( width, height );
|
|
}
|
|
|
|
refreshColumnMode();
|
|
if( !m_autosize ) {
|
|
preview->setColumnWidth( 0,
|
|
config->readNumEntry("Column0", (width/2) - 40 ) );
|
|
preview->setColumnWidth( 1,
|
|
config->readNumEntry("Column1", (width/2) - 40 ) );
|
|
|
|
if( preview->columnWidth( 0 ) > (width/2) )
|
|
{
|
|
preview->setColumnWidth( 0, (width/2) - 40 );
|
|
preview->setColumnWidth( 1, (width/2) - 40 );
|
|
}
|
|
}
|
|
|
|
if( !checkPreview->isChecked() ) {
|
|
checkName->setChecked( true );
|
|
checkName->setEnabled( false );
|
|
}
|
|
|
|
//parent->show();
|
|
page_1->setEnabled( false );
|
|
TDEApplication::setOverrideCursor( TQt::WaitCursor );
|
|
plugin->loadPlugins( m_loadplugins );
|
|
setupTab1();
|
|
config->setGroup("GUISettings");
|
|
|
|
// File Extension
|
|
config->setGroup("FileExtension");
|
|
// default LAST DOT
|
|
comboExtension->setCurrentItem( config->readNumEntry("FileExtensionCombo", 1 ) );
|
|
}
|
|
|
|
void KRenameImpl::saveConfig()
|
|
{
|
|
TDEConfig* config = kapp->config();
|
|
|
|
config->setGroup("HistSize");
|
|
config->writeEntry("HistoryItems", m_hist );
|
|
|
|
config->setGroup("GUISettings");
|
|
config->writeEntry("firststart", false );
|
|
config->writeEntry("ImagePreview", checkPreview->isChecked() );
|
|
config->writeEntry("StartIndex", m_index );
|
|
config->writeEntry("Maximized", parent->isMaximized() );
|
|
config->writeEntry("Width", parent->width() );
|
|
config->writeEntry("Height", parent->height() );
|
|
config->writeEntry("XPos", parent->x() );
|
|
config->writeEntry("YPos", parent->y() );
|
|
config->writeEntry("LoadFilePlugins", m_loadplugins );
|
|
config->writeEntry("ColumnAutosize", m_autosize );
|
|
config->writeEntry("Name", checkName->isChecked() );
|
|
config->writeEntry("PreviewSize", fileList->getPreviewSize() );
|
|
config->writeEntry("Inverse", CoordDialog::m_inversion );
|
|
config->writeEntry("Column0", preview->columnWidth( 0 ) );
|
|
config->writeEntry("Column1", preview->columnWidth( 1 ) );
|
|
config->writeEntry("GUIWizardMode", m_wizard );
|
|
config->writeEntry("FileListSorting", fileList->sorting() );
|
|
|
|
config->sync();
|
|
}
|
|
|
|
void KRenameImpl::replace()
|
|
{
|
|
ReplaceDialog* r = new ReplaceDialog( rep, parent );
|
|
if( r->exec() == TQDialog::Accepted )
|
|
{
|
|
rep = r->getList();
|
|
updatePreview();
|
|
}
|
|
}
|
|
|
|
void KRenameImpl::toggleImagePreview()
|
|
{
|
|
TDEApplication::setOverrideCursor( TQt::waitCursor );
|
|
fileList->setPreview( checkPreview->isChecked() );
|
|
checkName->setEnabled( checkPreview->isChecked() );
|
|
if( !checkPreview->isChecked() )
|
|
checkName->setChecked( true );
|
|
fileList->setName( checkName->isChecked() );
|
|
TDEApplication::restoreOverrideCursor();
|
|
}
|
|
|
|
void KRenameImpl::toggleName()
|
|
{
|
|
TDEApplication::setOverrideCursor( TQt::waitCursor );
|
|
fileList->setName( checkName->isChecked() );
|
|
TDEApplication::restoreOverrideCursor();
|
|
}
|
|
|
|
void KRenameImpl::preferences()
|
|
{
|
|
ConfDialog* cd = new ConfDialog( parent, "cd" );
|
|
cd->setLoadPlugins( m_loadplugins );
|
|
cd->setThumbSize( fileList->getPreviewSize() );
|
|
cd->setAutosize( m_autosize );
|
|
cd->setHistoryItems( m_hist );
|
|
cd->setUseWizard( m_wizard );
|
|
|
|
if( cd->exec() == TQDialog::Accepted ) {
|
|
bool oldwiz = m_wizard;
|
|
|
|
m_loadplugins = cd->loadplugins();
|
|
m_autosize = cd->autosize();
|
|
m_hist = cd->historyItems();
|
|
m_wizard = cd->useWizard();
|
|
|
|
refreshColumnMode();
|
|
|
|
// fileList->setHiddenDirs( cd->hiddendir() );
|
|
|
|
if( fileList->getPreviewSize() != cd->thumbSize() ) {
|
|
fileList->setPreviewSize( cd->thumbSize() );
|
|
fileList->setPreview( checkPreview->isChecked() );
|
|
}
|
|
|
|
updatePreview();
|
|
updateHist();
|
|
|
|
if( oldwiz != m_wizard )
|
|
changeGUIMode();
|
|
}
|
|
}
|
|
|
|
void KRenameImpl::changeGUIMode()
|
|
{
|
|
/* GUI Mode was changed by the user */
|
|
saveConfig();
|
|
|
|
int x = parent->x();
|
|
int y = parent->y();
|
|
int w = parent->width();
|
|
int h = parent->height();
|
|
|
|
TQWidget* oldparent = parent;
|
|
TQWidget* krename = KRenameImpl::launch( TQRect( x, y, w, h ), TQStringList(), this, false );
|
|
|
|
m_switching = true;
|
|
oldparent->removeChild( this );
|
|
oldparent->hide();
|
|
krename->insertChild( this );
|
|
krename->show();
|
|
|
|
oldparent->close();
|
|
m_switching = false;
|
|
}
|
|
|
|
void KRenameImpl::moveUp()
|
|
{
|
|
TQListViewItem* item = preview->selectedItem();
|
|
if(item) {
|
|
int i = preview->itemIndex( item );
|
|
fileList->moveUp( i );
|
|
updatePreview();
|
|
if( (i-1) > 0 ) {
|
|
preview->setCurrentItem( preview->itemAtIndex( i-1 ) );
|
|
preview->ensureItemVisible( preview->itemAtIndex( i-1 ) );
|
|
}
|
|
}
|
|
}
|
|
|
|
void KRenameImpl::moveDown()
|
|
{
|
|
TQListViewItem* item = preview->selectedItem();
|
|
if(item) {
|
|
int i = preview->itemIndex( item );
|
|
fileList->moveDown( i );
|
|
updatePreview();
|
|
preview->setCurrentItem( preview->itemAtIndex( i+1 ) );
|
|
preview->ensureItemVisible( preview->itemAtIndex( i+1 ) );
|
|
}
|
|
}
|
|
|
|
void KRenameImpl::undo()
|
|
{
|
|
UndoDialog* u = new UndoDialog( parent );
|
|
u->exec();
|
|
delete u;
|
|
}
|
|
|
|
void KRenameImpl::changeUndoScriptName()
|
|
{
|
|
const char* EXTENSION = ".krename";
|
|
TQString script = undorequester->url();
|
|
if( script.right( 8 ) != EXTENSION ) {
|
|
script += EXTENSION;
|
|
undorequester->setURL( script );
|
|
}
|
|
}
|
|
|
|
void KRenameImpl::pluginHelpChanged()
|
|
{
|
|
TQPtrListIterator<PluginLoader::PluginLibrary> it( plugin->libs ); // iterator for dict
|
|
while ( it.current() ) {
|
|
if( !(*it)->plugin->alwaysUsed() ) {
|
|
(*it)->plugin->removeHelp( helpDialogData );
|
|
|
|
if( (*it)->check )
|
|
{
|
|
(*it)->usePlugin = (*it)->check->isChecked();
|
|
if( (*it)->check->isChecked() )
|
|
(*it)->plugin->addHelp( helpDialogData );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
(*it)->plugin->removeHelp( helpDialogData );
|
|
(*it)->plugin->addHelp( helpDialogData );
|
|
}
|
|
|
|
++it;
|
|
}
|
|
}
|
|
|
|
void KRenameImpl::showTokenHelp()
|
|
{
|
|
helpDialog->show();
|
|
}
|
|
|
|
void KRenameImpl::getCoordinates()
|
|
{
|
|
TQString name;
|
|
TQListViewItem* item = preview->selectedItem();
|
|
if( item )
|
|
name = item->text( 0 );
|
|
else {
|
|
item = preview->itemAtIndex( 0 );
|
|
if( item )
|
|
name = item->text( 0 );
|
|
}
|
|
|
|
TQFileInfo fi( name );
|
|
TQString extension;
|
|
splitFilename( &fi, &name, &extension );
|
|
CoordDialog* cd = new CoordDialog( name, parent );
|
|
if( cd->exec() == TQDialog::Accepted ) {
|
|
TQString t = filename->text();
|
|
|
|
if( filename->text() == "$" )
|
|
filename->setText( cd->coords() );
|
|
else {
|
|
t.insert( filename->cursorPosition(), cd->coords() );
|
|
filename->setText( t );
|
|
}
|
|
}
|
|
|
|
delete cd;
|
|
}
|
|
|
|
void KRenameImpl::splitFilename( TQFileInfo* fi, TQString* base, TQString* extension )
|
|
{
|
|
// first dot
|
|
if( comboExtension->currentItem() == 0 ) {
|
|
*base = fi->baseName();
|
|
*extension = fi->extension( true );
|
|
// last dot
|
|
} else if( comboExtension->currentItem() == 1 ) {
|
|
*extension = fi->extension( false );
|
|
if( !extension->isEmpty() )
|
|
*base = fi->fileName().left( fi->fileName().length() - extension->length() - 1 );
|
|
else
|
|
*base = fi->baseName();
|
|
} else {
|
|
// custom value
|
|
int dot = comboExtension->currentText().toInt();
|
|
|
|
TQString file = FileOperation::getName( fi->filePath() );
|
|
int p = 0;
|
|
|
|
if( !file.contains( "." ) || !dot || dot > file.contains( "." ) ) {
|
|
*base = file;
|
|
*extension = "";
|
|
return;
|
|
}
|
|
|
|
for( int i = 0; i < dot; i++ )
|
|
p = file.find( ".", p + 1 );
|
|
|
|
*base = file.left( p );
|
|
*extension = file.right( file.length() - p - 1 );
|
|
}
|
|
}
|
|
|
|
void KRenameImpl::refreshColumnMode()
|
|
{
|
|
if( !m_autosize ) {
|
|
preview->setColumnWidthMode( 0, TQListView::Manual );
|
|
preview->setColumnWidthMode( 1, TQListView::Manual );
|
|
} else {
|
|
preview->setColumnWidthMode( 0, TQListView::Maximum );
|
|
preview->setColumnWidthMode( 1, TQListView::Maximum );
|
|
}
|
|
}
|
|
|
|
void KRenameImpl::updateHist()
|
|
{
|
|
dirname->setMaxCount( m_hist );
|
|
filename->setMaxCount( m_hist );
|
|
extemplate->setMaxCount( m_hist );
|
|
}
|
|
|
|
void KRenameImpl::changeNumbers()
|
|
{
|
|
NumberDialog* nd = new NumberDialog( skip, parent );
|
|
nd->spinIndex->setValue( m_index );
|
|
nd->spinStep->setValue( m_step );
|
|
nd->checkResetCounter->setChecked( m_reset );
|
|
|
|
if( nd->exec() ) {
|
|
m_index = nd->spinIndex->value();
|
|
m_step = nd->spinStep->value();
|
|
skip = nd->getList();
|
|
m_reset = nd->checkResetCounter->isChecked();
|
|
|
|
updatePreview();
|
|
}
|
|
}
|
|
|
|
|
|
void KRenameImpl::about()
|
|
{
|
|
TDEAboutApplication * d = new TDEAboutApplication( kapp->aboutData(), parent );
|
|
d->show();
|
|
}
|
|
|
|
void KRenameImpl::setWizardMode( bool mode )
|
|
{
|
|
fileTab->raiseWidget( mode ? ID_WIZARD : ID_TAB );
|
|
// Maybe we should create a WidgetStack here, too
|
|
if( mode )
|
|
{
|
|
optionLink->hide();
|
|
if( optionLink->isChecked() )
|
|
{
|
|
optionLink->setChecked( false );
|
|
optionRename->setChecked( true );
|
|
enableControls();
|
|
}
|
|
}
|
|
else
|
|
optionLink->show();
|
|
|
|
if( mode )
|
|
parseWizardMode();
|
|
}
|
|
|
|
void KRenameImpl::changeParent( TQWidget* p, KMenuBar* m, TQPushButton* finish, TQRect r )
|
|
{
|
|
parent = p;
|
|
menuBar = m;
|
|
finishButton = finish;
|
|
|
|
connect( finishButton, TQT_SIGNAL( clicked()), this, TQT_SLOT( start() ));
|
|
|
|
if( !r.isNull() ) {
|
|
parent->resize( r.size() );
|
|
parent->move( r.x(), r.y() );
|
|
}
|
|
|
|
setupActions();
|
|
|
|
page_1->reparent( parent, TQPoint( 0, 0 ) );
|
|
page_2->reparent( parent, TQPoint( 0, 0 ) );
|
|
page_3->reparent( parent, TQPoint( 0, 0 ) );
|
|
page_4->reparent( parent, TQPoint( 0, 0 ) );
|
|
|
|
emit pageDone( page_1, i18n( pageTitle[0] ) );
|
|
emit pageDone( page_2, i18n( pageTitle[1] ) );
|
|
emit pageDone( page_3, i18n( pageTitle[2] ) );
|
|
emit pageDone( page_4, i18n( pageTitle[3] ) );
|
|
}
|
|
|
|
TQWidget* KRenameImpl::launch( TQRect rect, const KURL::List & list, KRenameImpl* impl, bool loadprofile )
|
|
{
|
|
TDEConfig* config = kapp->config();
|
|
config->setGroup("GUISettings");
|
|
bool firststart = config->readBoolEntry( "firststart", true );
|
|
bool wizardmode = config->readBoolEntry( "GUIWizardMode", false );
|
|
|
|
if( firststart ) {
|
|
/* start the GUI Mode selction dialog */
|
|
FirstStartDlg* fsd = new FirstStartDlg();
|
|
fsd->exec();
|
|
wizardmode = fsd->useWizard();
|
|
|
|
config->setGroup("GUISettings");
|
|
config->writeEntry( "firststart", false );
|
|
config->writeEntry( "GUIWizardMode", wizardmode );
|
|
config->sync();
|
|
}
|
|
|
|
TQWidget* w = NULL;
|
|
KRenameImpl* k = NULL;
|
|
|
|
if( wizardmode ) {
|
|
wizard* krename = new wizard( impl, rect );
|
|
k = krename->getKRename();
|
|
w = (TQWidget*)krename;
|
|
} else {
|
|
tabs* krename = new tabs( impl, rect );
|
|
k = krename->getKRename();
|
|
w = (TQWidget*)krename;
|
|
}
|
|
|
|
kapp->setMainWidget( w );
|
|
|
|
for( unsigned int i = 0; i < list.count(); i++ )
|
|
k->addFileOrDir( list[i] );
|
|
|
|
k->updatePre();
|
|
|
|
// it is time to load a default profile now (if the user has specified one)
|
|
if( loadprofile && !k->hasCommandlineProfile() && ProfileManager::hasDefaultProfile() )
|
|
ProfileManager::loadDefaultProfile( k );
|
|
else if ( !k->hasCommandlineProfile() )
|
|
w->show();
|
|
|
|
return w;
|
|
}
|
|
|
|
void KRenameImpl::updateDots()
|
|
{
|
|
int index = comboExtension->currentItem();
|
|
comboExtension->clear();
|
|
|
|
comboExtension->insertItem( i18n("First Dot") );
|
|
comboExtension->insertItem( i18n("Last Dot") );
|
|
|
|
unsigned int max = 0;
|
|
for( unsigned int i = 0; i < fileList->count(); i++ ) {
|
|
TQString name = fileList->url( i ).fileName();
|
|
int c = name.contains( "." );
|
|
max = ( c > (int)max ? c : (int)max);
|
|
}
|
|
|
|
for( unsigned int i = 2; i <= max; i++ )
|
|
comboExtension->insertItem( TQString::number( i ) );
|
|
|
|
comboExtension->setCurrentItem( index );
|
|
}
|
|
|
|
/** DCOP functions implementation
|
|
*/
|
|
|
|
void KRenameImpl::setFileNameTemplate( const TQString & t )
|
|
{
|
|
filename->setText( t );
|
|
}
|
|
|
|
const TQString KRenameImpl::fileNameTemplate() const
|
|
{
|
|
return filename->text();
|
|
}
|
|
|
|
void KRenameImpl::setExtensionTemplate( const TQString & t )
|
|
{
|
|
extemplate->setText( t );
|
|
}
|
|
|
|
const TQString KRenameImpl::extensionTemplate() const
|
|
{
|
|
return extemplate->text();
|
|
}
|
|
|
|
void KRenameImpl::setUseExtension( bool b )
|
|
{
|
|
checkExtension->setChecked( b );
|
|
enableControls();
|
|
}
|
|
|
|
bool KRenameImpl::useExtension() const
|
|
{
|
|
return checkExtension->isChecked();
|
|
}
|
|
|
|
TQStringList KRenameImpl::tokens() const
|
|
{
|
|
return helpDialogData->tokens();
|
|
}
|
|
|
|
TQString KRenameImpl::parseString( const TQString & token, const TQString & string )
|
|
{
|
|
BatchRenamer b;
|
|
b.setIndex( 0 );
|
|
b.setStep( 0 );
|
|
|
|
return b.processString( token, string, 0 );
|
|
}
|
|
|
|
void KRenameImpl::addDir( const TQString & name, const TQString & filter, bool recursive, bool hidden, bool dirnames )
|
|
{
|
|
fileList->addDir( name, filter, hidden, recursive, dirnames );
|
|
}
|
|
|
|
void KRenameImpl::setCounterStart( int index )
|
|
{
|
|
m_index = index;
|
|
}
|
|
|
|
void KRenameImpl::loadFilePlugins()
|
|
{
|
|
TDEApplication::setOverrideCursor( TQt::WaitCursor );
|
|
plugin->loadPlugins( true );
|
|
TDEApplication::restoreOverrideCursor();
|
|
pluginHelpChanged();
|
|
|
|
enableControls();
|
|
}
|
|
|
|
void KRenameImpl::reloadFilePluginData()
|
|
{
|
|
plugin->clearCache();
|
|
updatePreview();
|
|
}
|
|
|
|
void KRenameImpl::manageProfiles()
|
|
{
|
|
ProfileDlg dlg( this, parent, "dlg" );
|
|
dlg.exec();
|
|
}
|
|
|
|
void KRenameImpl::getHelpDialogString( TQLineEdit* edit )
|
|
{
|
|
HelpDialog hdlg( helpDialogData, parent, "hdlg", true );
|
|
hdlg.setLineEdit( edit );
|
|
hdlg.updateHeadline();
|
|
hdlg.updateItems();
|
|
hdlg.exec();
|
|
}
|
|
|
|
void KRenameImpl::slotEasy1()
|
|
{
|
|
getHelpDialogString( comboPrefix->lineEdit() );
|
|
}
|
|
|
|
void KRenameImpl::slotEasy2()
|
|
{
|
|
getHelpDialogString( comboSuffix->lineEdit() );
|
|
}
|
|
|
|
void KRenameImpl::slotEasy3()
|
|
{
|
|
getHelpDialogString( comboCustom->lineEdit() );
|
|
}
|
|
|
|
void KRenameImpl::slotEasy4()
|
|
{
|
|
getHelpDialogString( comboCustomExtension->lineEdit() );
|
|
}
|