📄 listviews.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 + -