/**************************************************************************** ** $Id: listviews.h,v 1.3 1999/06/21 07:01:37 reggie Exp $ ** ** Copyright (C) 1992-1999 Troll Tech AS. All rights reserved. ** ** This file is part of an example program for Qt. This example ** program may be used, distributed and modified without limitation. ** *****************************************************************************/ #ifndef LISTVIEWS_H #define LISTVIEWS_H #include <qsplitter.h> #include <qstring.h> #include <qobject.h> #include <qdatetime.h> #include <qlist.h> #include <qlistview.h> class QListView; class QLabel; class QPainter; class QColorGroup; class QObjectList; // ----------------------------------------------------------------- class MessageHeader { public: MessageHeader( const QString &_sender, const QString &_subject, const QDateTime &_datetime ) : msender( _sender ), msubject( _subject ), mdatetime( _datetime ) {} MessageHeader( const MessageHeader &mh ); MessageHeader &operator=( const MessageHeader &mh ); QString sender() { return msender; } QString subject() { return msubject; } QDateTime datetime() { return mdatetime; } protected: QString msender, msubject; QDateTime mdatetime; }; // ----------------------------------------------------------------- class Message { public: enum State { Read = 0, Unread}; Message( const MessageHeader &mh, const QString &_body ) : mheader( mh ), mbody( _body ), mstate( Unread ) {} Message( const Message &m ) : mheader( m.mheader ), mbody( m.mbody ), mstate( m.mstate ) {} MessageHeader header() { return mheader; } QString body() { return mbody; } void setState( const State &s ) { mstate = s; } State state() { return mstate; } protected: MessageHeader mheader; QString mbody; State mstate; }; // ----------------------------------------------------------------- class Folder : public QObject { Q_OBJECT public: Folder( Folder *parent, const QString &name ); ~Folder() {} void addMessage( Message *m ) { lstMessages.append( m ); } QString folderName() { return fName; } Message *firstMessage() { return lstMessages.first(); } Message *nextMessage() { return lstMessages.next(); } protected: QString fName; QList<Message> lstMessages; }; // ----------------------------------------------------------------- class FolderListItem : public QListViewItem { public: FolderListItem( QListView *parent, Folder *f ); FolderListItem( FolderListItem *parent, Folder *f ); void insertSubFolders( const QObjectList *lst ); Folder *folder() { return myFolder; } protected: Folder *myFolder; }; // ----------------------------------------------------------------- class MessageListItem : public QListViewItem { public: MessageListItem( QListView *parent, Message *m ); virtual void paintCell( QPainter *p, const QColorGroup &cg, int column, int width, int alignment ); Message *message() { return myMessage; } protected: Message *myMessage; }; // ----------------------------------------------------------------- class ListViews : public QSplitter { Q_OBJECT public: ListViews( QWidget *parent = 0, const char *name = 0 ); ~ListViews() {} protected: void initFolders(); void initFolder( Folder *folder, unsigned int &count ); void setupFolders(); QListView *messages, *folders; QLabel *message; QList<Folder> lstFolders; protected slots: void slotFolderChanged( QListViewItem* ); void slotMessageChanged( QListViewItem* ); }; #endif
/**************************************************************************** ** $Id: listviews.cpp,v 1.4.2.1 1999/09/01 06:19:53 aavit Exp $ ** ** Copyright (C) 1992-1999 Troll Tech AS. All rights reserved. ** ** This file is part of an example program for Qt. This example ** program may be used, distributed and modified without limitation. ** *****************************************************************************/ #include "listviews.h" #include <qlabel.h> #include <qpainter.h> #include <qpalette.h> #include <qobjectlist.h> // ----------------------------------------------------------------- MessageHeader::MessageHeader( const MessageHeader &mh ) { msender = mh.msender; msubject = mh.msubject; mdatetime = mh.mdatetime; } MessageHeader &MessageHeader::operator=( const MessageHeader &mh ) { msender = mh.msender; msubject = mh.msubject; mdatetime = mh.mdatetime; return *this; } // ----------------------------------------------------------------- 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; 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->header().sender() ); setText( 1, myMessage->header().subject() ); setText( 2, myMessage->header().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 ); } // ----------------------------------------------------------------- ListViews::ListViews( QWidget *parent, const char *name ) : QSplitter( Qt::Horizontal, parent, name ) { lstFolders.setAutoDelete( TRUE ); folders = new QListView( this ); folders->addColumn( "Folder" ); initFolders(); setupFolders(); folders->setRootIsDecorated( TRUE ); setResizeMode( folders, QSplitter::KeepSize ); QSplitter *vsplitter = new QSplitter( Qt::Vertical, this ); messages = new QListView( vsplitter ); messages->addColumn( "Sender" ); messages->addColumn( "Subject" ); messages->addColumn( "Date" ); messages->setAllColumnsShowFocus( TRUE ); vsplitter->setResizeMode( messages, QSplitter::KeepSize ); message = new QLabel( vsplitter ); message->setAlignment( Qt::AlignTop ); connect( folders, SIGNAL( selectionChanged( QListViewItem* ) ), this, SLOT( slotFolderChanged( QListViewItem* ) ) ); connect( messages, SIGNAL( selectionChanged( QListViewItem* ) ), this, SLOT( slotMessageChanged( QListViewItem* ) ) ); // some preperationes folders->firstChild()->setOpen( TRUE ); folders->firstChild()->firstChild()->setOpen( TRUE ); folders->setCurrentItem( folders->firstChild()->firstChild()->firstChild() ); folders->setSelected( folders->firstChild()->firstChild()->firstChild(), TRUE ); messages->setSelected( messages->firstChild(), TRUE ); messages->setCurrentItem( messages->firstChild() ); QValueList<int> lst; lst.append( 170 ); setSizes( lst ); } void ListViews::initFolders() { unsigned int mcount = 1; for ( unsigned int i = 1; i < 20; i++ ) { QString str; str.sprintf( "Folder %d", i ); Folder *f = new Folder( 0, str ); for ( unsigned int j = 1; j < 5; j++ ) { QString str2; str2.sprintf( "Sub Folder %d", j ); Folder *f2 = new Folder( f, str2 ); for ( unsigned int k = 1; k < 3; k++ ) { QString str3; str3.sprintf( "Sub Sub Folder %d", k ); Folder *f3 = new Folder( f2, str3 ); initFolder( f3, mcount ); } } lstFolders.append( f ); } } void ListViews::initFolder( Folder *folder, unsigned int &count ) { for ( unsigned int i = 0; i < 15; i++, count++ ) { QString str; str.sprintf( "Message %d ", count ); QDateTime dt = QDateTime::currentDateTime(); dt = dt.addSecs( 60 * count ); MessageHeader mh( "Troll Tech <info@troll.no> ", str, dt ); QString body; body.sprintf( "This is the message number %d of this application, \n" "which shows how to use QListViews, QListViewItems, \n" "QSplitters and so on. The code should show how easy\n" "this can be done in Qt.", count ); Message *msg = new Message( mh, body ); folder->addMessage( msg ); } } void ListViews::setupFolders() { folders->clear(); for ( Folder* f = lstFolders.first(); f; f = lstFolders.next() ) (void)new FolderListItem( folders, f ); } void ListViews::slotFolderChanged( QListViewItem *i ) { messages->clear(); message->setText( "" ); FolderListItem *item = ( FolderListItem* )i; for ( Message* msg = item->folder()->firstMessage(); msg; msg = item->folder()->nextMessage() ) (void)new MessageListItem( messages, msg ); } void ListViews::slotMessageChanged( QListViewItem *i ) { if ( !i ) return; message->setText( "" ); MessageListItem *item = ( MessageListItem* )i; Message *msg = item->message(); QString text; text.sprintf( "From: %s\n" "Subject: %s\n" "Date: %s\n\n" "%s", msg->header().sender().ascii(), msg->header().subject().ascii(), msg->header().datetime().toString().ascii(), msg->body().ascii() ); message->setText( text ); msg->setState( Message::Read ); }
/**************************************************************************** ** $Id: main.cpp,v 1.1 1999/06/03 10:08:55 warwick Exp $ ** ** Copyright (C) 1992-1999 Troll Tech AS. All rights reserved. ** ** This file is part of an example program for Qt. This example ** program may be used, distributed and modified without limitation. ** *****************************************************************************/ #include "listviews.h" #include <qapplication.h> int main( int argc, char **argv ) { QApplication a( argc, argv ); ListViews listViews; listViews.resize( 640, 480 ); listViews.setCaption( "List View Example" ); a.setMainWidget( &listViews ); listViews.show(); return a.exec(); }
Copyright © 1999 Troll Tech | Trademarks | Qt version 2.0.2
|