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.
450 lines
16 KiB
450 lines
16 KiB
/***************************************************************************
|
|
kshowmailview.cpp - description
|
|
-------------------
|
|
begin : Sat May 6 12:13:57 MEST 2000
|
|
copyright : (C) 2000-2001 by Eggert Ehmke
|
|
email : eggert.ehmke@berlin.de
|
|
|
|
26 Sep 2002 - Allow for columns to be hidden. Allistar Melville
|
|
***************************************************************************/
|
|
|
|
/***************************************************************************
|
|
* *
|
|
* 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. *
|
|
* *
|
|
***************************************************************************/
|
|
|
|
// include files for TQt
|
|
#include <ntqprinter.h>
|
|
#include <ntqpainter.h>
|
|
#include <ntqmessagebox.h>
|
|
#include <ntqkeycode.h>
|
|
#include <ntqvaluelist.h>
|
|
|
|
#include <kstandarddirs.h>
|
|
#include <tdelocale.h>
|
|
#include <kdebug.h>
|
|
|
|
// application specific includes
|
|
#include "kshowmailview.h"
|
|
#include "kshowmaildoc.h"
|
|
#include "kshowmail.h"
|
|
|
|
KshowmailView::KshowmailView(TQWidget *parent, const char *name):
|
|
TQSplitter(Vertical, parent, name)
|
|
{
|
|
setBackgroundMode( PaletteBase );
|
|
setFocusPolicy( TQWidget::StrongFocus );
|
|
|
|
//get application config object (kshowmailrc)
|
|
config = TDEApplication::kApplication()->config();
|
|
|
|
//load active pic for the account list
|
|
m_pixOk = new TQPixmap( ::locate( "data", "kshowmail/pics/ok.png" ) );
|
|
|
|
//create account list
|
|
m_pListAccounts = new TDEListView( this, "accounts" );
|
|
m_pListAccounts->setSelectionMode( TQListView::Extended );
|
|
m_pListAccounts->setSorting( 1 ); // sort account column
|
|
m_pListAccounts->setShowSortIndicator( true );
|
|
m_pListAccounts->addColumn( i18n( "Active" ), DEFAULT_WIDTH_ACCOUNT_ACTIVE );
|
|
m_pListAccounts->addColumn( i18n( "Account" ), DEFAULT_WIDTH_ACCOUNT_ACCOUNT );
|
|
m_pListAccounts->addColumn( i18n( "Server" ), DEFAULT_WIDTH_ACCOUNT_SERVER );
|
|
m_pListAccounts->addColumn( i18n( "User" ), DEFAULT_WIDTH_ACCOUNT_USER );
|
|
m_pListAccounts->addColumn( i18n( "Messages" ), DEFAULT_WIDTH_ACCOUNT_MESSAGES );
|
|
m_pListAccounts->addColumn( i18n( "Size" ), DEFAULT_WIDTH_ACCOUNT_SIZE );
|
|
m_pListAccounts->setAllColumnsShowFocus( true );
|
|
connect( m_pListAccounts, SIGNAL( rightButtonClicked( TQListViewItem*, const TQPoint &, int ) ), SLOT( slotAccountContext( TQListViewItem*, const TQPoint &, int ) ) );
|
|
connect( m_pListAccounts, SIGNAL( clicked( TQListViewItem*, const TQPoint &, int) ), SLOT( slotAccountClicked( TQListViewItem*, const TQPoint &, int ) ) );
|
|
|
|
//create message list
|
|
m_pListMessages = new TDEListView( this, "messages" );
|
|
m_pListMessages->setSelectionMode( TQListView::Extended );
|
|
m_pListMessages->setAllColumnsShowFocus( true );
|
|
m_pListMessages->setSorting( ShowListViewItem::_colNumber ); // sort number column
|
|
m_pListMessages->setShowSortIndicator( true );
|
|
m_pListMessages->addColumn( i18n( "Number" ), DEFAULT_WIDTH_MESSAGE_NUMBER );
|
|
m_pListMessages->addColumn( i18n( "Account" ), DEFAULT_WIDTH_MESSAGE_ACCOUNT );
|
|
m_pListMessages->addColumn( i18n( "From" ), DEFAULT_WIDTH_MESSAGE_FROM );
|
|
m_pListMessages->addColumn( i18n( "To" ), DEFAULT_WIDTH_MESSAGE_TO );
|
|
m_pListMessages->addColumn( i18n( "Subject" ), DEFAULT_WIDTH_MESSAGE_SUBJECT );
|
|
m_pListMessages->addColumn( i18n( "Date" ), DEFAULT_WIDTH_MESSAGE_DATE );
|
|
m_pListMessages->addColumn( i18n( "Size" ), DEFAULT_WIDTH_MESSAGE_SIZE );
|
|
m_pListMessages->addColumn( i18n( "Content" ), DEFAULT_WIDTH_MESSAGE_CONTENT );
|
|
m_pListMessages->addColumn( i18n( "State" ), DEFAULT_WIDTH_MESSAGE_STATE );
|
|
connect( m_pListMessages, SIGNAL( rightButtonClicked( TQListViewItem*, const TQPoint &, int) ), SLOT( slotMessageContext( TQListViewItem*, const TQPoint &, int ) ) );
|
|
connect( m_pListMessages, SIGNAL( doubleClicked( TQListViewItem* ) ), SLOT( slotMessageDoubleClicked( TQListViewItem* ) ) );
|
|
connect( m_pListMessages, SIGNAL( clicked( TQListViewItem* ) ), SLOT( slotMessageClicked( TQListViewItem* ) ) );
|
|
|
|
//read the geometry from the application config file
|
|
readOptions();
|
|
|
|
|
|
}
|
|
|
|
KshowmailView::~KshowmailView()
|
|
{
|
|
delete m_pListAccounts;
|
|
delete m_pListMessages;
|
|
}
|
|
|
|
void KshowmailView::readOptions()
|
|
{
|
|
//read splitter geometry
|
|
config->setGroup ("Display Options");
|
|
TQValueList<int> size;
|
|
size.append (config->readNumEntry ("sizeaccounts", 40));
|
|
size.append (config->readNumEntry ("sizemessages", 50));
|
|
setSizes (size);
|
|
|
|
// read layout of the list views
|
|
m_pListAccounts->restoreLayout( config, CONFIG_GROUP_ACCOUNT_LIST );
|
|
m_pListMessages->restoreLayout( config, CONFIG_GROUP_MESSAGE_LIST );
|
|
}
|
|
|
|
void KshowmailView::saveOptions (TDEConfig* config)
|
|
{
|
|
// kdDebug () << "KshowmailView::saveOptions" << endl;
|
|
config->setGroup("Display Options");
|
|
//splitter
|
|
TQValueList<int> size = sizes ();
|
|
config->writeEntry ("sizeaccounts", size [0]);
|
|
config->writeEntry ("sizemessages", size [1]);
|
|
// layout
|
|
m_pListAccounts->saveLayout ( config, CONFIG_GROUP_ACCOUNT_LIST );
|
|
m_pListMessages->saveLayout (config, CONFIG_GROUP_MESSAGE_LIST );
|
|
}
|
|
|
|
|
|
void KshowmailView::slotMessageContext( TQListViewItem* pItem, const TQPoint&, int )
|
|
{
|
|
if( pItem != NULL )
|
|
{
|
|
//get pointer to the main widget
|
|
KShowMailApp* theApp = ( KShowMailApp * )parentWidget();
|
|
|
|
//create and show popup menu
|
|
TQWidget* w = theApp->factory()->container( "mail_context_popup", theApp );
|
|
TQPopupMenu* popup = static_cast<TQPopupMenu*>( w );
|
|
popup->exec( TQCursor::pos() );
|
|
|
|
//select clicked item
|
|
m_pListMessages->setSelected (pItem, true);
|
|
}
|
|
}
|
|
|
|
void KshowmailView::slotAccountContext( TQListViewItem* pItem, const TQPoint&, int )
|
|
{
|
|
if ( pItem != NULL )
|
|
{
|
|
//get pointer to the main widget
|
|
KShowMailApp* theApp = ( KShowMailApp * )parentWidget();
|
|
|
|
//create and show popup menu
|
|
TQWidget* w = theApp->factory()->container( "account_context_popup", theApp );
|
|
TQPopupMenu* popup = static_cast<TQPopupMenu*>( w );
|
|
popup->exec( TQCursor::pos() );
|
|
|
|
//select clicked item
|
|
m_pListAccounts->setSelected( pItem, true );
|
|
}
|
|
}
|
|
|
|
void KshowmailView::slotAccountClicked( TQListViewItem* pItem, const TQPoint&, int col )
|
|
{
|
|
|
|
//get application config object (kshowmailrc)
|
|
TDEConfig* config = TDEApplication::kApplication()->config();
|
|
|
|
if( col == 0 )
|
|
{
|
|
KShowMailApp *theApp = (KShowMailApp *)parentWidget();
|
|
ConfigElem* pElem = theApp->m_ConfigList.getSelectedAccount();
|
|
|
|
if( pElem != NULL )
|
|
{
|
|
//get account name
|
|
TQString name = pElem->getAccountName();
|
|
|
|
//set config group
|
|
config->setGroup( name );
|
|
|
|
//toggle account active state
|
|
pElem->setActive( !pElem->isActive() );
|
|
|
|
if( pElem->isActive() )
|
|
{
|
|
//set active picture
|
|
pItem->setPixmap( 0, *m_pixOk );
|
|
|
|
//write active state into config file
|
|
config->writeEntry( CONFIG_ENTRY_ACCOUNT_ACTIVE, true );
|
|
config->sync();
|
|
}
|
|
else
|
|
{
|
|
//remove active picture
|
|
pItem->setPixmap( 0, 0 );
|
|
|
|
//write active state into config file
|
|
config->writeEntry( CONFIG_ENTRY_ACCOUNT_ACTIVE, false );
|
|
config->sync();
|
|
}
|
|
|
|
emit signalActiveChanged ();
|
|
}
|
|
}
|
|
}
|
|
|
|
void KshowmailView::slotMessageDoubleClicked (TQListViewItem* pItem)
|
|
{
|
|
if (pItem)
|
|
{
|
|
// m_pListMessages->setSelected (pItem, true);
|
|
|
|
KShowMailApp *theApp=(KShowMailApp *) parentWidget();
|
|
theApp->slotShowHeader ();
|
|
}
|
|
}
|
|
|
|
void KshowmailView::slotMessageClicked (TQListViewItem* pItem)
|
|
{
|
|
if (pItem)
|
|
{
|
|
// m_pListMessages->setSelected (pItem, true);
|
|
|
|
KShowMailApp *theApp=(KShowMailApp *) parentWidget();
|
|
theApp->delayNextRefresh();
|
|
}
|
|
}
|
|
|
|
void KshowmailView::clearMailListView( )
|
|
{
|
|
m_pListMessages->clear();
|
|
}
|
|
|
|
ShowListViewItem* KshowmailView::insertMail( TQString& number, TQString& account, TQString& from, TQString& to, TQString& subject, TQString& date, TQString& size, TQString& content, TQString& state, TQString& time )
|
|
{
|
|
//create item
|
|
ShowListViewItem* item = new ShowListViewItem( m_pListMessages );
|
|
|
|
//set content
|
|
item->setNumber( number );
|
|
item->setAccount( account );
|
|
item->setFrom( from );
|
|
item->setTo( to );
|
|
item->setSubject( subject );
|
|
item->setDate( date );
|
|
item->setSize( size );
|
|
item->setContent( content );
|
|
item->setState( state );
|
|
item->setTime( time );
|
|
|
|
return item;
|
|
}
|
|
|
|
void KshowmailView::refreshSetup( )
|
|
{
|
|
TQString ConfigEntryDisplay; //entry of the config about show or hide column
|
|
TQString ConfigEntrySavedWidth; //entry of the config about saved width
|
|
int DefaultWidth = 100; //default width of the proceeded column
|
|
bool DefaultDisplay = true; //default show or hide of the proceeded column
|
|
|
|
//set columns of the account list
|
|
config->setGroup( CONFIG_GROUP_ACCOUNT_LIST );
|
|
for( int column = 0; column <= 5; column++ ) //iterate over all columns
|
|
{
|
|
//get config entries and defaults of the proceeded column from the constants header
|
|
switch( column )
|
|
{
|
|
case 0: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_ACCOUNT_ACTIVE;
|
|
ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_ACCOUNT_ACTIVE;
|
|
DefaultWidth = DEFAULT_WIDTH_ACCOUNT_ACTIVE;
|
|
DefaultDisplay = DEFAULT_DISPLAY_ACCOUNT_ACTIVE;
|
|
break;
|
|
|
|
case 1: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_ACCOUNT_ACCOUNT;
|
|
ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_ACCOUNT_ACCOUNT;
|
|
DefaultWidth = DEFAULT_WIDTH_ACCOUNT_ACCOUNT;
|
|
DefaultDisplay = DEFAULT_DISPLAY_ACCOUNT_ACCOUNT;
|
|
break;
|
|
|
|
case 2: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_ACCOUNT_SERVER;
|
|
ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_ACCOUNT_SERVER;
|
|
DefaultWidth = DEFAULT_WIDTH_ACCOUNT_SERVER;
|
|
DefaultDisplay = DEFAULT_DISPLAY_ACCOUNT_SERVER;
|
|
break;
|
|
|
|
case 3: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_ACCOUNT_USER;
|
|
ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_ACCOUNT_USER;
|
|
DefaultWidth = DEFAULT_WIDTH_ACCOUNT_USER;
|
|
DefaultDisplay = DEFAULT_DISPLAY_ACCOUNT_USER;
|
|
break;
|
|
|
|
case 4: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_ACCOUNT_MESSAGES;
|
|
ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_ACCOUNT_MESSAGES;
|
|
DefaultWidth = DEFAULT_WIDTH_ACCOUNT_MESSAGES;
|
|
DefaultDisplay = DEFAULT_DISPLAY_ACCOUNT_MESSAGES;
|
|
break;
|
|
|
|
case 5: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_ACCOUNT_SIZE;
|
|
ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_ACCOUNT_SIZE;
|
|
DefaultWidth = DEFAULT_WIDTH_ACCOUNT_SIZE;
|
|
DefaultDisplay = DEFAULT_DISPLAY_ACCOUNT_SIZE;
|
|
break;
|
|
} //end select
|
|
|
|
//get desired column state
|
|
bool showColumn = config->readBoolEntry( ConfigEntryDisplay, DefaultDisplay );
|
|
|
|
//get currently column state
|
|
bool curShowed = m_pListAccounts->columnWidth( column ) > 0;
|
|
|
|
if( showColumn )
|
|
{
|
|
//column will be shown
|
|
|
|
if( !curShowed )
|
|
{
|
|
//the column is currently not be shown
|
|
|
|
//get saved width or take default width
|
|
int savedWidth = config->readNumEntry( ConfigEntrySavedWidth, DefaultWidth );
|
|
|
|
//set column width
|
|
m_pListAccounts->setColumnWidth( column, savedWidth );
|
|
}
|
|
//else: the column is currently shown; do nothing
|
|
}
|
|
else
|
|
{
|
|
//column will not be shown
|
|
|
|
if( curShowed )
|
|
{
|
|
//the column is currently shown
|
|
|
|
//save current width
|
|
config->writeEntry( ConfigEntrySavedWidth, m_pListAccounts->columnWidth( column ) );
|
|
|
|
//hide column
|
|
m_pListAccounts->hideColumn( column );
|
|
}
|
|
//else: the column is already hidden; do nothing
|
|
}
|
|
|
|
} //end column loop
|
|
|
|
//set columns of the message list
|
|
config->setGroup( CONFIG_GROUP_MESSAGE_LIST );
|
|
for( int column = 0; column <= 8; column++ ) //iterate over all columns
|
|
{
|
|
//get config entries and defaults of the proceeded column from the constants header
|
|
switch( column )
|
|
{
|
|
case 0: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_MESSAGE_NUMBER;
|
|
ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_MESSAGE_NUMBER;
|
|
DefaultWidth = DEFAULT_WIDTH_MESSAGE_NUMBER;
|
|
DefaultDisplay = DEFAULT_DISPLAY_MESSAGE_NUMBER;
|
|
break;
|
|
|
|
case 1: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_MESSAGE_ACCOUNT;
|
|
ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_MESSAGE_ACCOUNT;
|
|
DefaultWidth = DEFAULT_WIDTH_MESSAGE_ACCOUNT;
|
|
DefaultDisplay = DEFAULT_DISPLAY_MESSAGE_ACCOUNT;
|
|
break;
|
|
|
|
case 2: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_MESSAGE_FROM;
|
|
ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_MESSAGE_FROM;
|
|
DefaultWidth = DEFAULT_WIDTH_MESSAGE_FROM;
|
|
DefaultDisplay = DEFAULT_DISPLAY_MESSAGE_FROM;
|
|
break;
|
|
|
|
case 3: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_MESSAGE_TO;
|
|
ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_MESSAGE_TO;
|
|
DefaultWidth = DEFAULT_WIDTH_MESSAGE_TO;
|
|
DefaultDisplay = DEFAULT_DISPLAY_MESSAGE_TO;
|
|
break;
|
|
|
|
case 4: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_MESSAGE_SUBJECT;
|
|
ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_MESSAGE_SUBJECT;
|
|
DefaultWidth = DEFAULT_WIDTH_MESSAGE_SUBJECT;
|
|
DefaultDisplay = DEFAULT_DISPLAY_MESSAGE_SUBJECT;
|
|
break;
|
|
|
|
case 5: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_MESSAGE_DATE;
|
|
ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_MESSAGE_DATE;
|
|
DefaultWidth = DEFAULT_WIDTH_MESSAGE_DATE;
|
|
DefaultDisplay = DEFAULT_DISPLAY_MESSAGE_DATE;
|
|
break;
|
|
|
|
case 6: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_MESSAGE_SIZE;
|
|
ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_MESSAGE_SIZE;
|
|
DefaultWidth = DEFAULT_WIDTH_MESSAGE_SIZE;
|
|
DefaultDisplay = DEFAULT_DISPLAY_MESSAGE_SIZE;
|
|
break;
|
|
|
|
case 7: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_MESSAGE_CONTENT;
|
|
ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_MESSAGE_CONTENT;
|
|
DefaultWidth = DEFAULT_WIDTH_MESSAGE_CONTENT;
|
|
DefaultDisplay = DEFAULT_DISPLAY_MESSAGE_CONTENT;
|
|
break;
|
|
|
|
case 8: ConfigEntryDisplay = CONFIG_ENTRY_DISPLAY_MESSAGE_STATE;
|
|
ConfigEntrySavedWidth = CONFIG_ENTRY_OLD_WIDTH_MESSAGE_STATE;
|
|
DefaultWidth = DEFAULT_WIDTH_MESSAGE_STATE;
|
|
DefaultDisplay = DEFAULT_DISPLAY_MESSAGE_STATE;
|
|
break;
|
|
|
|
} //end select
|
|
|
|
//get desired column state
|
|
bool showColumn = config->readBoolEntry( ConfigEntryDisplay, DefaultDisplay );
|
|
|
|
//get currently column state
|
|
bool curShowed = m_pListMessages->columnWidth( column ) > 0;
|
|
|
|
if( showColumn )
|
|
{
|
|
//column will be shown
|
|
|
|
if( !curShowed )
|
|
{
|
|
//the column is currently not be shown
|
|
|
|
//get saved width or take default width
|
|
int savedWidth = config->readNumEntry( ConfigEntrySavedWidth, DefaultWidth );
|
|
|
|
//set column width
|
|
m_pListMessages->setColumnWidth( column, savedWidth );
|
|
}
|
|
//else: the column is currently shown; do nothing
|
|
}
|
|
else
|
|
{
|
|
//column will not be shown
|
|
|
|
if( curShowed )
|
|
{
|
|
//the column is currently shown
|
|
|
|
//save current width
|
|
config->writeEntry( ConfigEntrySavedWidth, m_pListMessages->columnWidth( column ) );
|
|
|
|
//hide column
|
|
m_pListMessages->hideColumn( column );
|
|
}
|
|
//else: the column is already hidden; do nothing
|
|
}
|
|
|
|
} //end column loop
|
|
|
|
//save current layout
|
|
m_pListAccounts->saveLayout( config, CONFIG_GROUP_ACCOUNT_LIST );
|
|
m_pListMessages->saveLayout( config, CONFIG_GROUP_MESSAGE_LIST );
|
|
config->sync();
|
|
}
|