/***************************************************************************
fileplugin . cpp - description
- - - - - - - - - - - - - - - - - - -
begin : Mon Jul 1 2002
copyright : ( C ) 2002 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 "fileplugin.h"
// TQt includes
# include <tqcheckbox.h>
# include <tqlabel.h>
# include <tqlayout.h>
# include <tqregexp.h>
// TDE includes
# include <tdeapplication.h>
# include <tdefilemetainfo.h>
# include <klineedit.h>
# include <tdelistbox.h>
# include <tdelocale.h>
# include <kiconloader.h>
# include <kpushbutton.h>
FilePlugin : : FilePlugin ( KService * service )
{
if ( ! service ) {
setupKeys ( ) ;
return ;
}
KFileMetaInfoProvider * mip = KFileMetaInfoProvider : : self ( ) ;
m_name = service - > name ( ) ;
m_comment = service - > comment ( ) ;
TQStringList options = service - > serviceTypes ( ) ;
for ( unsigned int i = 0 ; i < options . count ( ) ; i + + ) {
if ( options [ i ] ! = " KFilePlugin " ) {
m_mimetype = options [ i ] ;
const KFileMimeTypeInfo * info = mip - > mimeTypeInfo ( m_mimetype ) ;
if ( info )
keys = info - > supportedKeys ( ) ;
fileplugin = mip - > plugin ( m_mimetype ) ;
KMimeType : : Ptr mime = KMimeType : : mimeType ( m_mimetype ) ;
m_icon = mime - > icon ( TQString ( ) , true ) ; // arguments are unused
setPattern ( mime ) ;
}
}
}
FilePlugin : : ~ FilePlugin ( )
{ }
void FilePlugin : : setPattern ( KMimeType : : Ptr mime )
{
TQStringList pattern = mime - > patterns ( ) ;
if ( pattern . count ( ) ) {
m_pattern = pattern [ 0 ] ;
if ( m_pattern . startsWith ( " *. " ) )
m_pattern = m_pattern . right ( m_pattern . length ( ) - 2 ) ;
}
// TODO: REFACTOR
// We need a pattern
if ( m_pattern . isEmpty ( ) ) {
int a = 0 ;
a = m_name . find ( " - " ) ;
if ( a > - 1 )
m_pattern = m_name . left ( a ) . lower ( ) ;
else {
a = m_pattern . find ( " " ) ;
if ( a > - 1 )
m_pattern = m_name . left ( a ) . lower ( ) ;
else
m_pattern = m_name ;
}
}
setupKeys ( ) ;
}
void FilePlugin : : setupKeys ( )
{
for ( unsigned int i = 0 ; i < keys . count ( ) ; i + + )
keys [ i ] = getPattern ( ) + keys [ i ] ;
}
const TQString FilePlugin : : getName ( ) const
{
return m_name ;
}
const TQString FilePlugin : : getAccelName ( ) const
{
return " & " + getName ( ) ;
}
const TQString FilePlugin : : getPattern ( ) const
{
return m_pattern ;
}
const int FilePlugin : : type ( ) const
{
return TYPE_BRACKET ;
}
bool FilePlugin : : checkError ( )
{
return true ;
}
void FilePlugin : : drawInterface ( TQWidget * w , TQVBoxLayout * l )
{
TQSpacerItem * spacer = new TQSpacerItem ( 20 , 20 , TQSizePolicy : : Expanding , TQSizePolicy : : Expanding ) ;
TQHBoxLayout * hbox = new TQHBoxLayout ( 0 , 6 , 6 ) ;
TQLabel * pix = new TQLabel ( w ) ;
pix - > setPixmap ( kapp - > iconLoader ( ) - > loadIcon ( m_icon , TDEIcon : : Desktop ) ) ;
hbox - > addWidget ( pix ) ;
hbox - > addWidget ( new TQLabel ( " <qt><b> " + getName ( ) + " </b></qt> " , w ) ) ;
hbox - > addItem ( spacer ) ;
l - > addLayout ( hbox ) ;
l - > addWidget ( new TQLabel ( m_comment , w ) ) ;
l - > addWidget ( new TQLabel ( i18n ( " Supported tokens: " ) , w ) ) ;
TDEListBox * list = new TDEListBox ( w ) ;
list - > setColumnMode ( TDEListBox : : FitToWidth ) ;
for ( unsigned int i = 0 ; i < keys . count ( ) ; i + + )
list - > insertItem ( " [ " + keys [ i ] + " ] " ) ;
l - > addWidget ( list ) ;
l - > setStretchFactor ( list , 2 ) ;
}
TQString FilePlugin : : processFile ( BatchRenamer * b , int i , TQString token , int )
{
TQString filename = BatchRenamer : : buildFilename ( & b - > files ( ) [ i ] . src ) ;
token = token . lower ( ) ;
/*
* Check if we have something cached for this file
*/
if ( cache . contains ( filename + " :: " + token ) )
return cache [ filename + " :: " + token ] ;
for ( unsigned int i = 0 ; i < keys . count ( ) ; i + + ) {
if ( token . lower ( ) = = keys [ i ] . lower ( ) ) {
KFileMetaInfo meta ( filename ) ;
if ( meta . isValid ( ) ) {
TQString k = keys [ i ] ;
if ( k . startsWith ( getPattern ( ) ) )
k = k . mid ( getPattern ( ) . length ( ) , k . length ( ) - getPattern ( ) . length ( ) ) ;
TQString ret = meta . item ( k ) . string ( true ) . stripWhiteSpace ( ) ;
if ( cache . count ( ) > = CACHE_MAX )
cache . remove ( cache . begin ( ) ) ;
cache . insert ( filename + " :: " + token , ret ) ;
kapp - > processEvents ( ) ;
return ret ;
}
}
}
return TQString ( ) ;
}
void FilePlugin : : addHelp ( HelpDialogData * data )
{
TQStringList list ;
for ( unsigned int i = 0 ; i < keys . count ( ) ; i + + )
list . append ( " [ " + keys [ i ] + " ] " + " ;; " + keys [ i ] ) ;
data - > add ( getName ( ) , & list , getIcon ( ) ) ;
}
const TQPixmap FilePlugin : : getIcon ( ) const
{
return kapp - > iconLoader ( ) - > loadIcon ( m_icon , TDEIcon : : Small ) ;
}
bool FilePlugin : : supports ( const TQString & token )
{
for ( unsigned int i = 0 ; i < keys . count ( ) ; i + + )
if ( TQRegExp ( keys [ i ] . lower ( ) ) . exactMatch ( token . lower ( ) ) )
return true ;
return false ;
}
void FilePlugin : : clearCache ( )
{
cache . clear ( ) ;
}
# include "fileplugin.moc"