|
|
|
/*
|
|
|
|
This file is part of KOrganizer.
|
|
|
|
|
|
|
|
Copyright (c) 2000 Cornelius Schumacher <schumacher@kde.org>
|
|
|
|
Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
|
|
|
|
As a special exception, permission is given to link this program
|
|
|
|
with any edition of TQt, and distribute the resulting executable,
|
|
|
|
without including the source code for TQt in the source distribution.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "korganizer_part.h"
|
|
|
|
|
|
|
|
#include "calendarview.h"
|
|
|
|
#include "actionmanager.h"
|
|
|
|
#include "koglobals.h"
|
|
|
|
#include "koprefs.h"
|
|
|
|
#include "resourceview.h"
|
|
|
|
#include "aboutdata.h"
|
|
|
|
#include "kocore.h"
|
|
|
|
#include "korganizerifaceimpl.h"
|
|
|
|
#include "stdcalendar.h"
|
|
|
|
#include "alarmclient.h"
|
|
|
|
|
|
|
|
#include <libkcal/calendarlocal.h>
|
|
|
|
#include <libkcal/calendarresources.h>
|
|
|
|
#include <libkcal/resourcecalendar.h>
|
|
|
|
|
|
|
|
#include <kpopupmenu.h>
|
|
|
|
#include <kinstance.h>
|
|
|
|
#include <klocale.h>
|
|
|
|
#include <kiconloader.h>
|
|
|
|
#include <kaction.h>
|
|
|
|
#include <kdebug.h>
|
|
|
|
#include <kstandarddirs.h>
|
|
|
|
#include <kconfig.h>
|
|
|
|
#include <kprocess.h>
|
|
|
|
#include <ktempfile.h>
|
|
|
|
#include <kstatusbar.h>
|
|
|
|
#include <kparts/genericfactory.h>
|
|
|
|
#include <kparts/partmanager.h>
|
|
|
|
#include <kparts/statusbarextension.h>
|
|
|
|
|
|
|
|
#include <sidebarextension.h>
|
|
|
|
#include <infoextension.h>
|
|
|
|
|
|
|
|
#include <tqapplication.h>
|
|
|
|
#include <tqfile.h>
|
|
|
|
#include <tqtimer.h>
|
|
|
|
#include <tqlayout.h>
|
|
|
|
|
|
|
|
typedef KParts::GenericFactory< KOrganizerPart > KOrganizerFactory;
|
|
|
|
K_EXPORT_COMPONENT_FACTORY( libkorganizerpart, KOrganizerFactory )
|
|
|
|
|
|
|
|
KOrganizerPart::KOrganizerPart( TQWidget *parentWidget, const char *widgetName,
|
|
|
|
TQObject *parent, const char *name,
|
|
|
|
const TQStringList & ) :
|
|
|
|
KParts::ReadOnlyPart(parent, name), mTopLevelWidget( parentWidget->topLevelWidget() )
|
|
|
|
{
|
|
|
|
KGlobal::locale()->insertCatalogue( "libkcal" );
|
|
|
|
KGlobal::locale()->insertCatalogue( "libkdepim" );
|
|
|
|
KGlobal::locale()->insertCatalogue( "kdgantt" );
|
|
|
|
|
|
|
|
KOCore::self()->addXMLGUIClient( mTopLevelWidget, this );
|
|
|
|
|
|
|
|
TQString pname( name );
|
|
|
|
|
|
|
|
// create a canvas to insert our widget
|
|
|
|
TQWidget *canvas = new TQWidget( parentWidget, widgetName );
|
|
|
|
canvas->setFocusPolicy( TQ_ClickFocus );
|
|
|
|
setWidget( canvas );
|
|
|
|
mView = new CalendarView( canvas );
|
|
|
|
|
|
|
|
mActionManager = new ActionManager( this, mView, this, this, true );
|
|
|
|
(void)new KOrganizerIfaceImpl( mActionManager, this, "IfaceImpl" );
|
|
|
|
|
|
|
|
if ( pname == "kontact" ) {
|
|
|
|
mActionManager->createCalendarResources();
|
|
|
|
setHasDocument( false );
|
|
|
|
KOrg::StdCalendar::self()->load();
|
|
|
|
mView->updateCategories();
|
|
|
|
} else {
|
|
|
|
mActionManager->createCalendarLocal();
|
|
|
|
setHasDocument( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
mStatusBarExtension = new KParts::StatusBarExtension( this );
|
|
|
|
|
|
|
|
setInstance( KOrganizerFactory::instance() );
|
|
|
|
|
|
|
|
TQVBoxLayout *topLayout = new TQVBoxLayout( canvas );
|
|
|
|
topLayout->addWidget( mView );
|
|
|
|
|
|
|
|
new KParts::SideBarExtension( mView->leftFrame(), this, "SBE" );
|
|
|
|
|
|
|
|
KParts::InfoExtension *ie = new KParts::InfoExtension( this,
|
|
|
|
"KOrganizerInfo" );
|
|
|
|
connect( mView, TQT_SIGNAL( incidenceSelected( Incidence *,const TQDate & ) ),
|
|
|
|
TQT_SLOT( slotChangeInfo( Incidence *,const TQDate & ) ) );
|
|
|
|
connect( this, TQT_SIGNAL( textChanged( const TQString & ) ),
|
|
|
|
ie, TQT_SIGNAL( textChanged( const TQString & ) ) );
|
|
|
|
|
|
|
|
mActionManager->init();
|
|
|
|
mActionManager->readSettings();
|
|
|
|
|
|
|
|
setXMLFile( "korganizer_part.rc" );
|
|
|
|
mActionManager->loadParts();
|
|
|
|
setTitle();
|
|
|
|
}
|
|
|
|
|
|
|
|
KOrganizerPart::~KOrganizerPart()
|
|
|
|
{
|
|
|
|
mActionManager->saveCalendar();
|
|
|
|
mActionManager->writeSettings();
|
|
|
|
|
|
|
|
delete mActionManager;
|
|
|
|
mActionManager = 0;
|
|
|
|
|
|
|
|
closeURL();
|
|
|
|
|
|
|
|
KOCore::self()->removeXMLGUIClient( mTopLevelWidget );
|
|
|
|
}
|
|
|
|
|
|
|
|
KAboutData *KOrganizerPart::createAboutData()
|
|
|
|
{
|
|
|
|
return new KOrg::AboutData;
|
|
|
|
}
|
|
|
|
|
|
|
|
void KOrganizerPart::startCompleted( KProcess *process )
|
|
|
|
{
|
|
|
|
delete process;
|
|
|
|
}
|
|
|
|
|
|
|
|
void KOrganizerPart::slotChangeInfo( Incidence *incidence, const TQDate & )
|
|
|
|
{
|
|
|
|
if ( incidence ) {
|
|
|
|
emit textChanged( incidence->summary() + " / " +
|
|
|
|
incidence->dtStartTimeStr() );
|
|
|
|
} else {
|
|
|
|
emit textChanged( TQString() );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
TQWidget *KOrganizerPart::topLevelWidget()
|
|
|
|
{
|
|
|
|
return mView->topLevelWidget();
|
|
|
|
}
|
|
|
|
|
|
|
|
ActionManager *KOrganizerPart::actionManager()
|
|
|
|
{
|
|
|
|
return mActionManager;
|
|
|
|
}
|
|
|
|
|
|
|
|
void KOrganizerPart::showStatusMessage( const TQString &message )
|
|
|
|
{
|
|
|
|
KStatusBar *statusBar = mStatusBarExtension->statusBar();
|
|
|
|
if ( statusBar ) statusBar->message( message );
|
|
|
|
}
|
|
|
|
|
|
|
|
KOrg::CalendarViewBase *KOrganizerPart::view() const
|
|
|
|
{
|
|
|
|
return mView;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool KOrganizerPart::openURL( const KURL &url, bool merge )
|
|
|
|
{
|
|
|
|
return mActionManager->openURL( url, merge );
|
|
|
|
}
|
|
|
|
|
|
|
|
bool KOrganizerPart::saveURL()
|
|
|
|
{
|
|
|
|
return mActionManager->saveURL();
|
|
|
|
}
|
|
|
|
|
|
|
|
bool KOrganizerPart::saveAsURL( const KURL &kurl )
|
|
|
|
{
|
|
|
|
return mActionManager->saveAsURL( kurl );
|
|
|
|
}
|
|
|
|
|
|
|
|
KURL KOrganizerPart::getCurrentURL() const
|
|
|
|
{
|
|
|
|
return mActionManager->url();
|
|
|
|
}
|
|
|
|
|
|
|
|
bool KOrganizerPart::openFile()
|
|
|
|
{
|
|
|
|
mView->openCalendar( m_file );
|
|
|
|
mView->show();
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
// FIXME: This is copied verbatim from the KOrganizer class. Move it to the common base class!
|
|
|
|
void KOrganizerPart::setTitle()
|
|
|
|
{
|
|
|
|
// kdDebug(5850) << "KOrganizer::setTitle" << endl;
|
|
|
|
// FIXME: Inside kontact we want to have different titles depending on the
|
|
|
|
// type of view (calendar, to-do, journal). How can I add the filter
|
|
|
|
// name in that case?
|
|
|
|
/*
|
|
|
|
TQString title;
|
|
|
|
if ( !hasDocument() ) {
|
|
|
|
title = i18n("Calendar");
|
|
|
|
} else {
|
|
|
|
KURL url = mActionManager->url();
|
|
|
|
|
|
|
|
if ( !url.isEmpty() ) {
|
|
|
|
if ( url.isLocalFile() ) title = url.fileName();
|
|
|
|
else title = url.prettyURL();
|
|
|
|
} else {
|
|
|
|
title = i18n("New Calendar");
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( mView->isReadOnly() ) {
|
|
|
|
title += " [" + i18n("read-only") + "]";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
title += " - <" + mView->currentFilterName() + "> ";
|
|
|
|
|
|
|
|
emit setWindowCaption( title );*/
|
|
|
|
}
|
|
|
|
|
|
|
|
bool KOrganizerPart::isCurrentlyActivePart()
|
|
|
|
{
|
|
|
|
if ( manager() ) {
|
|
|
|
return ( manager()->activePart() == this );
|
|
|
|
} else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#include "korganizer_part.moc"
|