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.
soundkonverter/src/filelist.h

237 lines
7.2 KiB

#ifndef FILELIST_H
#define FILELIST_H
#include <tdelistview.h>
#include "conversionoptions.h"
class CDManager;
class TagEngine;
class TagData;
class Options;
class OptionsEditor;
class Config;
class Logger;
class FormatItem; // NOTE DEBUG
class TQPainter;
class TQColorGroup;
class TQSimpleRichText;
class KProgress;
class TDEPopupMenu;
class TDEAction;
class TDEActionCollection;
/**
* @short The items for the file list
* @author Daniel Faust <hessijames@gmail.com>
* @version 0.3
*/
class FileListItem : public TDEListViewItem
{
public:
/**
* Constructor
* @param parent The parent list view
*/
FileListItem( TDEListView* parent );
/**
* Constructor
* @param parent The parent list view
* @param after The item, the new item should be placed after
*/
FileListItem( TDEListView* parent, FileListItem* after );
/**
* Destructor
*/
virtual ~FileListItem();
virtual void paintCell( TQPainter* p, const TQColorGroup& cg, int column, int width, int alignment );
//void updateOutputCell();
//void updateOptionsCell();
FileListItem* nextSibling() const { return static_cast<FileListItem*>( TDEListViewItem::nextSibling() ); }
FileListItem* itemAbove() { return static_cast<FileListItem*>( TDEListViewItem::itemAbove() ); }
FileListItem* itemBelow() { return static_cast<FileListItem*>( TDEListViewItem::itemBelow() ); }
//FileList* listView() const { return static_cast<FileList*>( TDEListViewItem::listView() ); }
ConversionOptions options; // the information we get from the options class for creating the item
TagData* tags; // we need to instruct the tagengine to read the tags from the file!
// and the user can change them!
TQString fileName; // just the _name_ of the file
TQString mimeType; // the mime type of the file
TQString fileFormat; // just the _format_ of the file (for easier use)
TQString url; // the original input file name string
bool converting; // is this item being converted at the moment?
bool local; // is this file a local one?
int track; // the number of the track, if it is on an audio cd
// if it is lower than 0, it isn't an audio cd track at all
TQString device; // the device of the audio cd
bool ripping; // is this track currently being ripped?
float time; // the duration of the track, used for the calculation of the progress bar
TQString notify; // execute this command, when the file is converted
};
/**
* @short The file list
* @author Daniel Faust <hessijames@gmail.com>
* @version 0.3
*/
class FileList : public TDEListView
{
TQ_OBJECT
public:
/**
* Constructor
* @param parent The parent widget
* @param name The name of the file list
*/
FileList( CDManager*, TagEngine*, Config*, Options*, Logger*, TQWidget *parent = 0, const char* name = 0 );
/**
* Destructor
*/
virtual ~FileList();
FileListItem* firstChild() const { return static_cast<FileListItem*>( TDEListView::firstChild() ); }
FileListItem* lastItem() const { return static_cast<FileListItem*>( TDEListView::lastItem() ); }
int columnByName( const TQString& name );
void updateItem( FileListItem* item );
bool queueEnabled() { return queue; }
void setNotify( const TQString& cmd ) { notify = cmd; }
protected:
virtual bool acceptDrag( TQDropEvent *e ) const;
private:
/** Lists all file in a directory and adds them to the file list, if @p fast is false. The number of listed files is returned */
int listDir( const TQString& directory, TQStringList filter, bool recursive = true, bool fast = false, int count = 0 );
/** A progressbar, that is shown, when a directory is added recursive */
KProgress* pScanStatus;
void convertNextItem();
void viewportPaintEvent( TQPaintEvent* );
void viewportResizeEvent( TQResizeEvent* );
void debug(); // NOTE DEBUG
TQString debug_params( ConversionOptions conversionOptions, FormatItem* formatItem ); // NOTE DEBUG
TQSimpleRichText* bubble;
/** The context menu for editing or starting the files */
TDEPopupMenu* contextMenu;
TDEActionCollection* actionCollection;
TDEAction* edit;
TDEAction* start;
TDEAction* stop;
TDEAction* remove;
TDEAction* paste;
CDManager* cdManager;
TagEngine* tagEngine;
OptionsEditor* optionsEditor;
Options* options;
Config* config;
Logger* logger;
TQValueList<FileListItem*> selectedFiles;
bool queue;
/**
* A command that should be executed after the conversion of a file is complete
* %i will be replaced by the input file path
* %o " " " " " output " "
*/
TQString notify;
private slots:
/*
* The user clicked somewhere into the list view (e.g. the link in the bubble)
*/
// void clickedSomewhere( TQListViewItem*, const TQPoint&, int );
/**
* We'll recive a signal, when we should show the context menu
* @p item The item, that's context menu should be shown
* @p point The position of the click (start position of the context menu)
*/
void showContextMenu( TQListViewItem* item, const TQPoint& point, int );
/**
* Remove selected items from the file list
*/
void removeSelectedItems();
/**
* Add selected items to the conversion list
*/
void convertSelectedItems();
/**
* Stop the conversion of all selected items
*/
void stopSelectedItems();
void columnResizeEvent( int, int, int );
void slotDropped( TQDropEvent*, TQListViewItem*, TQListViewItem* ); // NOTE rename?
public slots:
void addFiles( TQStringList, FileListItem* after = 0, bool enabled = false ); // NOTE const TQStringList& ?
void addDir( const TQString&, const TQStringList& filter = "", bool recursive = true );
void addTracks( const TQString& device, TQValueList<int> );
void addDisc( const TQString& device );
/**
* The conversion of an item has finished and the state is reported ( 0 = ok, -1 = error, 1 = aborted )
*/
void itemFinished( FileListItem*, int );
void rippingFinished( const TQString& device );
void showOptionsEditorDialog();
void selectPreviousItem();
void selectNextItem();
void itemsSelected();
//void moveOptionsEditor( int x, int y );
void startConversion();
void stopConversion();
void continueConversion();
void killConversion();
void load( bool autosave = false );
void save( bool autosave = false );
signals:
void convertItem( FileListItem* );
void stopItem( FileListItem* );
void editItems( TQValueList<FileListItem*> );
void setPreviousItemEnabled( bool );
void setNextItemEnabled( bool );
//void moveEditor( int x, int y );
void fileCountChanged( int );
void startedConversion();
void stopClicked();
void continueClicked();
void stoppedConversion();
void increaseTime( float );
void decreaseTime( float );
//void countTime( float );
//void setTime( float );
void finished( float );
};
#endif // FILELIST_H