⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 listviews.cpp

📁 dget是一个基于Linux平台的多线程下载工具, 采用C++开发。主要支持FTP, HTTP, MMS, RTSP协议下载, 目前为止主要实现了FTP, HTTP, MMS,RTSP协议的多线程下载
💻 CPP
字号:
/* *	by balancesli  *  balancesli@gmail.com * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */#include "listviews.h"#include "dget.h"#include <qlabel.h>#include <qpainter.h>#include <qpalette.h>#include <qobjectlist.h>#include <qpopupmenu.h>#include <qheader.h>#include <qregexp.h>#include <qlayout.h>#include <qiconview.h>#include <qtable.h>#include <qmessagebox.h>#include <qpixmap.h>#include <qlistbox.h>#include <qobject.h>Folder::Folder( Folder *parent, const QString &name )    : QObject( parent, name ), fName( name ){//    lstMessages.setAutoDelete( TRUE );}// -----------------------------------------------------------------FolderListItem::FolderListItem( QListView *parent, Folder *f )    : QListViewItem( parent ){    myFolder = f;    setText( 0, f->folderName() );    if ( myFolder->children() )	insertSubFolders( myFolder->children() );}FolderListItem::FolderListItem( FolderListItem *parent, Folder *f )    : QListViewItem( parent ){    myFolder = f;	QPixmap icon0(INSTALLDIR"images/stopwait.png");		setPixmap(0, icon0);    setText( 0, f->folderName() );    if ( myFolder->children() )		insertSubFolders( myFolder->children() );}void FolderListItem::insertSubFolders( const QObjectList *lst ){    Folder *f;    for ( f = ( Folder* )( ( QObjectList* )lst )->first(); f; 							f = ( Folder* )( ( QObjectList* )lst )->next() )	(void)new FolderListItem( this, f );}// -----------------------------------------------------------------MessageListItem::MessageListItem( QListView *parent, Message *m )    : QListViewItem( parent ){    myMessage = m;    setText( 0, myMessage->FileName() );    setText( 1, myMessage->FileSize() );    setText( 2, myMessage->Url() );//    setText( 3, myMessage->GetReceived() );//    setText( 4, myMessage->GetTimeLeft() );	setText( 3, myMessage->datetime().toString() );}void MessageListItem::paintCell( QPainter *p, const QColorGroup &cg,				 int column, int width, int alignment ){    QColorGroup _cg( cg );    QColor c = _cg.text();    if ( myMessage->state() == Message::Unread )		_cg.setColor( QColorGroup::Text, Qt::red );    QListViewItem::paintCell( p, _cg, column, width, alignment );    _cg.setColor( QColorGroup::Text, c );}// -----------------------------------------------------------------ThreadMsgListItem::ThreadMsgListItem( QListView * parent, ThreadMsg * m )    : QListViewItem( parent ){    myThreadMsg = m;	setText( 0, myThreadMsg->GetThreadId() );    setText( 1, myThreadMsg->GetStatus() );    setText( 2, myThreadMsg->GetReceived() );	setText( 3, myThreadMsg->GetAvgSpeed() );    setText( 4, myThreadMsg->GetPercent() );}void ThreadMsgListItem::paintCell( QPainter *p, const QColorGroup &cg,				 int column, int width, int alignment ){    QColorGroup _cg( cg );    QColor c = _cg.text();    if ( myThreadMsg->state() == ThreadMsg::Unread )		_cg.setColor( QColorGroup::Text, Qt::red );    QListViewItem::paintCell( p, _cg, column, width, alignment );    _cg.setColor( QColorGroup::Text, c );}// -----------------------------------------------------------------ListViews::ListViews( QWidget *parent, const char *name )    : QSplitter( Qt::Horizontal, parent, name ){	//    lstFolders.setAutoDelete( TRUE );    folders = new QListView( this );	    folders->header()->setClickEnabled( FALSE );	folders->header()->setStretchEnabled( TRUE );	folders->addColumn( tr("dgetwin") );	initFolders();    setupFolders();	folders->setSorting(0, FALSE);	folders->sort();    folders->setRootIsDecorated( TRUE );    setResizeMode( folders, QSplitter::KeepSize );		QSplitter *vsplitter = new QSplitter( Qt::Vertical, this );	    messages = new QListView( vsplitter );	messages->addColumn( tr("FileName") );	messages->setColumnWidth(0, 200); 	    messages->addColumn( tr("FileSize") );	messages->setColumnWidth(1, 200); //	messages->setColumnAlignment(1, Qt::AlignHCenter);	messages->addColumn( tr("URL") );	messages->setColumnWidth(2, 300); 		//	messages->addColumn( "Received" );   //	messages->setColumnWidth(3, 150); //	messages->setColumnAlignment(3, Qt::AlignHCenter);//	messages->addColumn( "TimeLeft" );   //	messages->setColumnWidth(4, 150); // 	messages->setColumnAlignment(4, Qt::AlignHCenter);	messages->addColumn( tr("Date") );  	messages->setColumnWidth(3, 200);     	messages->setAllColumnsShowFocus( TRUE );    messages->setShowSortIndicator( TRUE ); 			tmTabWidget = new QTabWidget( vsplitter, "tmTabWidget" );		contextmenu = new QPopupMenu( messages );	    connect(			messages,			SIGNAL( contextMenuRequested( QListViewItem *, const QPoint& , int ) ),	    	this, SLOT( slotRMB( QListViewItem *, const QPoint &, int ) )			);    vsplitter->setResizeMode( messages, QSplitter::KeepSize );		connect( folders, SIGNAL( selectionChanged(QListViewItem *) ),	     				this, SLOT( slotFolderChanged( QListViewItem* ) ) );						    connect( messages, SIGNAL( selectionChanged() ),	     				this, SLOT( slotMessageChanged() ) );						//    connect( messages, SIGNAL( selectionChanged(QListViewItem *) ),//	     				this, SLOT( slotMessageChanged( QListViewItem * ) ) );        connect( this, SIGNAL( TabChanged( int ) ),	     				tmTabWidget, SLOT( setCurrentPage( int ) ) );	    messages->setSelectionMode( QListView::Extended );    folders->firstChild()->setOpen( TRUE );    folders->firstChild()->firstChild()->setOpen( TRUE );    //folders->setCurrentItem( folders->firstChild()->firstChild()->firstChild() );    //folders->setSelected( folders->firstChild()->firstChild()->firstChild(), TRUE );    folders->setCurrentItem( folders->firstChild()->firstChild());    folders->setSelected( folders->firstChild()->firstChild(), TRUE );	    messages->setSelected( messages->firstChild(), TRUE );    messages->setCurrentItem( messages->firstChild() );		/////////////////debug by balancesli/////////////////////	/*			Folder * folder =  GetCurrentFolder();		int cnt = 1;	for (  Message* msg = folder->firstMessage(); msg;	  								msg = folder->nextMessage(), cnt++ )	{		QString str;		str = QString( "Task%1" ).arg( cnt );		InsertTabWidget(msg, str); 	}*/	/////////////////debug by balancesli/////////////////////	InsertDebugTabWidget(tr("DebugTask"));		QValueList<int> lst;    lst.append( 170 );    setSizes( lst );}QWidget * ListViews :: GetCurrentTabPage(){	return tmTabWidget->currentPage();}QListView * ListViews ::GetCurrentThreadMsgs(){	QWidget * subtab = tmTabWidget->currentPage();	QObjectList * objlist = subtab->queryList( "QListView" );    QObjectListIt it( *objlist );    QObject *obj;    while ( (obj = it.current()) != 0 ) 	{    	if (obj->inherits( "QListView" ) == TRUE)			break;           ++it;    }    delete objlist; 	QListView * tds = (QListView *)obj;	return tds;}Folder * ListViews::GetCurrentFolder(){	QListViewItem * i = folders->currentItem();	FolderListItem * item = ( FolderListItem * )i;	return item->folder();}Folder * ListViews :: GetFolderByName(QString& foldername){	QListViewItem * i = folders->findItem ( foldername, 0);	FolderListItem * item = ( FolderListItem * )i;	return item->folder();}Message * ListViews::GetCurrentMsg(){	QListViewItem *i = messages->currentItem();	Message * CurMsg = ((MessageListItem *)i)->message();	return CurMsg;}		void ListViews::RefreshFolder(Folder * item){    messages->clear();   	for ( Message* msg = item->firstMessage(); msg; msg = item->nextMessage() )		(void)new MessageListItem( messages, msg );}void ListViews::initFolders(){    unsigned int mcount = 1;	QString dlist[3] = {		tr("NewTaskBox"),		tr("OldTaskBox"),		tr("TrashBox")	};	    for ( unsigned int i = 1; i < 2; i++ )     {		QString str;		str = QString( tr("dget") );		Folder *f1 = new Folder( 0, str );		for ( unsigned int j = 0; j < 3; j++ )		{	    	QString str2;			str2 = dlist[j];	    	Folder *f2 = new Folder( f1, str2 );//			initFolder( f2, mcount );								/*    	    	for ( unsigned int k = 1; k < 3; k++ ) 			{				QString str3;				str3 = QString( "Sub Sub Folder %1" ).arg( k );				Folder *f3 = new Folder( f2, str3 );				initFolder( f3, mcount );	    	}			*/					}		lstFolders.append( f1 );    }}/////////////////debug by balancesli/////////////////////	void ListViews::initMessage( Message * msg, QListView * ThreadMsgs){	ThreadMsgs->clear();    for ( unsigned int i = 0; i < 4; i++)    {		ThreadMsg * tm = new ThreadMsg( "", "", "", "", "" );		msg->addThreadMsg( tm );		(void)new ThreadMsgListItem(ThreadMsgs, tm );    }}	void ListViews::initFolder( Folder *folder, unsigned int &count ){/*     unsigned int mcount = 0;    for ( unsigned int i = 0; i < 1; i++, mcount++ )    {		QString str;		str = "ftp://ftp.gtk.org/pub/gtk/v2.8/pango-1.10.3.tar.bz2";		QDateTime dt = QDateTime::currentDateTime();		dt = dt.addSecs( 60 * count );		Message * msg = new Message( "pango-1.10.3.tar.bz2", 										"1234k", "DOWNLOADING", str, dt, "100Sec");		folder->addMessage( msg );    }*/}/////////////////debug by balancesli/////////////////////void ListViews::setupFolders(){    folders->clear();    for ( Folder* f = lstFolders.first(); f; f = lstFolders.next() )	{		(void)new FolderListItem( folders, f );		}}void ListViews::slotRMB( QListViewItem* Item, const QPoint & point, int ){    if( Item )		contextmenu->popup( point );}void ListViews::slotFolderChanged( QListViewItem *i ){    if ( !i )		return;    messages->clear();    FolderListItem *item = ( FolderListItem* )i;    for ( Message* msg = item->folder()->firstMessage(); msg;	  								msg = item->folder()->nextMessage() )	{		(void)new MessageListItem( messages, msg );	}}void ListViews::slotMessageChanged(){		QString s2 = tr("NewTaskBox");	QListViewItem * j = folders->findItem ( s2, 0);		if ( !j )		return;    if ( !j->isSelected() ) 		return;    QListViewItem *i = messages->currentItem();	  	if ( !i )		return;    if ( !i->isSelected() ) 		return;			Message * CurMsg = ((MessageListItem *)i)->message();	CurMsg->setState( Message::Read );	Folder * folder =  GetCurrentFolder();	    int cnt = 0;	for ( Message* msg = folder->firstMessage(); msg;	  								msg = folder->nextMessage(), ++cnt )	{		if(CurMsg == msg)		{			emit TabChanged(++cnt);			break;		}	}		/*	    MessageListItem *item = ( MessageListItem* )i;    Message *msg = item->message();    msg->setState( Message::Read );*/}void ListViews::slotThreadMsgChanged(QListViewItem * i){    if ( !i )		return;    if ( !i->isSelected() ) 		return;    ThreadMsgListItem *item = ( ThreadMsgListItem* )i;    ThreadMsg * tm = item->threadmsg();    tm->setState( ThreadMsg::Read );	}void ListViews::InsertDebugTabWidget(const QString & label){    	QWidget* tmsubtab2 = new QWidget( tmTabWidget, "tmsubtab" );   	QGridLayout * tmLayout2 = new QGridLayout( tmsubtab2, 1, 1, 11, 6, "tabLayout"); 	dout = new QListBox( tmsubtab2, "listBox" );	tmLayout2->addWidget( dout, 0, 0 );   	tmTabWidget->insertTab( tmsubtab2, label );				}void ListViews::InsertTabWidget(Message * msg, const QString & label){    	QWidget* tmsubtab2 = new QWidget( tmTabWidget, "tmsubtab" );   	QGridLayout * tmLayout2 = new QGridLayout( tmsubtab2, 1, 1, 11, 6, "tabLayout"); 	   	QListView * ThreadMsgs = new QListView( tmsubtab2 );	ThreadMsgs->header()->setStretchEnabled( TRUE );	ThreadMsgs->addColumn( tr("Thread") );   	ThreadMsgs->addColumn( tr("Status") );	ThreadMsgs->addColumn( tr("Received") );	ThreadMsgs->addColumn( tr("AvgSpeed") );   	ThreadMsgs->addColumn( tr("Percent") );   	ThreadMsgs->setAllColumnsShowFocus( TRUE );   	ThreadMsgs->setShowSortIndicator( TRUE );	ThreadMsgs->setResizeMode( QListView::AllColumns );	   	tmLayout2->addWidget( ThreadMsgs, 0, 0 );   	tmTabWidget->insertTab( tmsubtab2, label );	msg->ThreadMsgs = ThreadMsgs;    connect( ThreadMsgs, SIGNAL( currentChanged( QListViewItem * ) ),	     				this, SLOT( slotThreadMsgChanged(QListViewItem * ) ) );												}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -