00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
#include <qframe.h>
00025
#include <qlabel.h>
00026
#include <qlayout.h>
00027
#include <qtimer.h>
00028
00029
#include <dcopclient.h>
00030
#include <kaction.h>
00031
#include <kapplication.h>
00032
#include <kdcopservicestarter.h>
00033
#include <kdebug.h>
00034
#include <kdialog.h>
00035
#include <klocale.h>
00036
#include <kmessagebox.h>
00037
#include <kservice.h>
00038
#include <ktrader.h>
00039
#include <kstandarddirs.h>
00040
#include <kstatusbar.h>
00041
#include <qscrollview.h>
00042
#include <kglobal.h>
00043
#include <klocale.h>
00044
#include <kcmultidialog.h>
00045
00046
#include <kparts/componentfactory.h>
00047
#include <kparts/statusbarextension.h>
00048
00049
#include <infoextension.h>
00050
#include <sidebarextension.h>
00051
00052
#include "plugin.h"
00053
#include "summary.h"
00054
00055
#include "summaryview_part.h"
00056
00057
namespace Kontact
00058 {
00059
class MainWindow;
00060 }
00061
00062 SummaryViewPart::SummaryViewPart(
Kontact::Core *core,
const char *widgetName,
00063
const KAboutData *aboutData,
00064 QObject *parent,
const char *name )
00065 : KParts::ReadOnlyPart( parent, name ),
00066 mCore( core ), mOptionsDialog( 0 ), mConfigAction( 0 )
00067 {
00068 mStatusExt =
new KParts::StatusBarExtension(
this );
00069 setInstance(
new KInstance( aboutData ) );
00070
00071 QScrollView *sv =
new QScrollView( core );
00072
00073 sv->setResizePolicy( QScrollView::AutoOneFit );
00074 sv->setFrameStyle( QFrame::NoFrame | QFrame::Plain );
00075
00076 mFrame =
new QFrame( sv->viewport(), widgetName );
00077 sv->addChild(mFrame);
00078
00079 mFrame->setFrameStyle( QFrame::Panel | QFrame::Sunken );
00080 connect(kapp, SIGNAL(kdisplayPaletteChanged()), SLOT(slotAdjustPalette()));
00081 slotAdjustPalette();
00082 sv->setFocusPolicy( QWidget::StrongFocus );
00083 setWidget( sv );
00084
00085 mLayout =
new QGridLayout( mFrame, 6, 3, KDialog::marginHint(),
00086 KDialog::spacingHint() );
00087
00088 getWidgets();
00089
00090 KParts::InfoExtension *info =
new KParts::InfoExtension(
this,
"Summary" );
00091 connect(
this, SIGNAL( textChanged(
const QString& ) ),
00092 info, SIGNAL( textChanged(
const QString& ) ) );
00093
00094
if ( !
configModules().isEmpty() ) {
00095 mConfigAction =
new KAction( i18n(
"&Configure"),
00096
"configure", 0,
this,
00097 SLOT( slotConfigure() ), actionCollection(),
00098
"summaryview_configure" );
00099 }
00100
00101 setXMLFile(
"kontactsummary_part.rc" );
00102
00103 QTimer::singleShot( 0,
this, SLOT( slotTextChanged() ) );
00104 }
00105
00106 SummaryViewPart::~SummaryViewPart()
00107 {
00108 }
00109
00110
bool SummaryViewPart::openFile()
00111 {
00112 kdDebug(5006) <<
"SummaryViewPart:openFile()" << endl;
00113
return true;
00114 }
00115
00116
void SummaryViewPart::getWidgets()
00117 {
00118
int totalHeight = 0;
00119
00120
00121 QValueList<Kontact::Plugin*> plugins = mCore->pluginList();
00122 QValueList<Kontact::Plugin*>::ConstIterator end = plugins.end();
00123 QValueList<Kontact::Plugin*>::ConstIterator it = plugins.begin();
00124
for ( ; it != end; ++it ) {
00125
Kontact::Plugin *plugin = *it;
00126
Kontact::Summary *s = plugin->
createSummaryWidget( mFrame );
00127
if ( s ) {
00128
int h = s->
summaryHeight();
00129 kdDebug() <<
"Summary for " << plugin->
title() <<
" Height: " << h
00130 << endl;
00131
if ( h ) {
00132 totalHeight += s->
summaryHeight();
00133 connect(s, SIGNAL(message(
const QString&)),
00134 mStatusExt->statusBar(), SLOT(message(
const QString&)));
00135 mSummaries.append( s );
00136 }
else {
00137 s->hide();
00138 }
00139 }
00140 }
00141
00142
00143
00144
00145
00146
int column = 0;
00147
00148
int currentHeight = 0;
00149
int currentRow = 2;
00150
int maxRow = 2;
00151 mDateLabel =
new QLabel( mFrame );
00152 mDateLabel->setAlignment( AlignRight );
00153 mLayout->addMultiCellWidget( mDateLabel, 0, 0, 0, 2 );
00154 setDate( QDate::currentDate() );
00155 connect(mCore, SIGNAL( dayChanged(
const QDate& ) ),
00156 SLOT( setDate(
const QDate& ) ) );
00157
00158 QFrame *hline =
new QFrame( mFrame );
00159 hline->setFrameStyle( QFrame::HLine | QFrame::Plain );
00160 mLayout->addMultiCellWidget( hline, 1, 1, 0, 2 );
00161
00162
for( uint i = 0; i < mSummaries.count(); ++i ) {
00163
Kontact::Summary *summary = mSummaries.at( i );
00164
00165
int h = summary->
summaryHeight();
00166
00167
00168
00169
if ( h == 1 ) {
00170 mLayout->addWidget( summary, currentRow, column );
00171 }
else {
00172 mLayout->addMultiCellWidget( summary, currentRow, currentRow + h - 1,
00173 column, column );
00174 }
00175
00176 currentHeight += h;
00177 currentRow += h;
00178
00179
if ( currentHeight * 2 >= totalHeight ) {
00180
00181 currentHeight = 0;
00182 maxRow = currentRow;
00183 currentRow = 2;
00184 column += 2;
00185 }
00186 }
00187
00188
00189 QFrame *vline =
new QFrame( mFrame );
00190 vline->setFrameStyle( QFrame::VLine | QFrame::Plain );
00191 mLayout->addMultiCellWidget( vline, 2, maxRow, 1, 1 );
00192
00193
00194 mLayout->addItem(
new QSpacerItem( 1, 1, QSizePolicy::MinimumExpanding,
00195 QSizePolicy::MinimumExpanding ), maxRow+2, 0 );
00196 }
00197
00198
void SummaryViewPart::slotTextChanged()
00199 {
00200 emit textChanged( i18n(
"What's next?" ) );
00201 }
00202
00203
void SummaryViewPart::slotAdjustPalette()
00204 {
00205 mFrame->setPaletteBackgroundColor( kapp->palette().active().base() );
00206 }
00207
00208
void SummaryViewPart::setDate(
const QDate& newDate )
00209 {
00210 QString date(
"<b>%1<b>");
00211 date = date.arg( KGlobal::locale()->formatDate( newDate ) );
00212 mDateLabel->setText( date );
00213 }
00214
00215
void SummaryViewPart::slotConfigure()
00216 {
00217
if ( !mOptionsDialog ) {
00218 mOptionsDialog =
new KCMultiDialog( mFrame );
00219
00220 QStringList modules =
configModules();
00221
00222
Kontact::Summary *summary;
00223
for ( summary = mSummaries.first(); summary; summary = mSummaries.next() )
00224 connect( mOptionsDialog, SIGNAL( configCommitted() ),
00225 summary, SLOT( configChanged() ) );
00226
00227 QStringList::ConstIterator it;
00228
for ( it = modules.begin(); it != modules.end(); ++it ) {
00229 mOptionsDialog->addModule( *it );
00230 }
00231 }
00232
00233 mOptionsDialog->show();
00234 mOptionsDialog->raise();
00235 }
00236
00237 QStringList SummaryViewPart::configModules()
const
00238
{
00239 QStringList modules;
00240
00241 QPtrListIterator<Kontact::Summary> it( mSummaries );
00242
while ( it.current() ) {
00243 QStringList cm = it.current()->configModules();
00244 QStringList::ConstIterator sit;
00245
for ( sit = cm.begin(); sit != cm.end(); ++sit )
00246 modules.append( *sit );
00247
00248 ++it;
00249 }
00250
00251
return modules;
00252 }
00253
00254
#include "summaryview_part.moc"
00255
00256