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.
tdeutils/ark/filelistview.h

174 lines
4.8 KiB

/*
ark -- archiver for the KDE project
Copyright (C)
1999: Francois-Xavier Duranceau duranceau@kde.org
1999-2000: Corel Corporation (author: Emily Ezust, emilye@corel.com)
2001: Corel Corporation (author: Michael Jarrett, michaelj@corel.com)
2003: Georg Robbers <Georg.Robbers@urz.uni-hd.de>
2005: Henrique Pinto <henrique.pinto@kdemail.net>
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.
*/
#ifndef FILELISTVIEW_H
#define FILELISTVIEW_H
#include <tqdatetime.h>
#include <tqpair.h>
#include <tqvaluelist.h>
#include <tdelistview.h>
#include <tdeio/global.h>
class TQString;
class TQStringList;
class TQRect;
class TQPainter;
class TQColorGroup;
class TQMouseEvent;
class TQPoint;
enum columnName { sizeCol = 1 , packedStrCol, ratioStrCol, timeStampStrCol, otherCol };
class FileLVI : public TDEListViewItem
{
public:
FileLVI( TDEListView* lv );
FileLVI( TDEListViewItem* lvi );
TQString fileName() const { return m_entryName; }
TDEIO::filesize_t fileSize() const { return m_fileSize; }
TDEIO::filesize_t packedFileSize() const { return m_packedFileSize; }
double ratio() const { return m_ratio; }
TQDateTime timeStamp() const { return m_timeStamp; }
int compare ( TQListViewItem * i, int col, bool ascending ) const;
virtual TQString key( int column, bool ) const;
virtual void setText( int column, const TQString &text );
/// Set the data for model entry all at once
void setItemData( const TQStringList &entryData );
private:
TDEIO::filesize_t m_fileSize;
TDEIO::filesize_t m_packedFileSize;
double m_ratio;
TQDateTime m_timeStamp;
TQString m_entryName;
};
typedef TQValueList< TQPair< TQString, TQt::AlignmentFlags > > ColumnList;
class FileListView: public TDEListView
{
Q_OBJECT
public:
FileListView( TQWidget *parent = 0, const char* name = 0 );
FileLVI *currentItem() {return ((FileLVI *) TDEListView::currentItem());}
/**
* Returns the full names of the selected files.
*/
TQStringList selectedFilenames();
/**
* Return the full names of all files.
*/
TQStringList fileNames();
/**
* Returns true if no file is selected
*/
bool isSelectionEmpty();
virtual int addColumn( const TQString & label, int width = -1 );
virtual void removeColumn( int index );
columnName nameOfColumn( int index );
/**
* Returns the file item, or 0 if not found.
* @param filename The filename in question to reference in the archive
* @return The requested file's FileLVI
*/
FileLVI* item(const TQString& filename) const;
/**
* Adds a file and stats to the file listing
* @param entries A stringlist of the entries for each column of the list.
* @return The newly added FileLVI
*/
FileLVI* addItem( const TQStringList& entries );
/**
* Adds a file and stats if it doesn't exists or updates the existing one
* @param entries A stringlist of the updated entries for each column of the list.
* @return The newly added or the updated FileLVI
*/
FileLVI* addOrUpdateItem( const TQStringList& entries );
/**
* Returns the number of files in the archive.
*/
int totalFiles();
/**
* Returns the number of selected files.
*/
int selectedFilesCount();
/**
* Return the sum of the sizes of all files in the archive.
*/
TDEIO::filesize_t totalSize();
/**
* Return the sum of the sizes of the selected files.
*/
TDEIO::filesize_t selectedSize();
/**
* Adjust the size of all columns to fit their content.
*/
void adjustColumns() { for ( int i = 0; i < columns(); ++i ) adjustColumn( i ); }
public slots:
void selectAll();
void unselectAll();
void setHeaders( const ColumnList& columns );
void clearHeaders();
signals:
void startDragRequest( const TQStringList & fileList );
protected:
virtual void contentsMouseReleaseEvent( TQMouseEvent *e );
virtual void contentsMousePressEvent( TQMouseEvent *e );
virtual void contentsMouseMoveEvent( TQMouseEvent *e );
private:
FileLVI* findParent( const TQString& fullname );
TQStringList childrenOf( FileLVI* parent );
TQMap<int, columnName> m_columnMap;
bool m_pressed;
TQPoint m_presspos; // this will save the click pos to correctly recognize drag events
};
#endif