/* 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 <tdepopupmenu.h> #include <kinstance.h> #include <tdelocale.h> #include <kiconloader.h> #include <tdeaction.h> #include <kdebug.h> #include <kstandarddirs.h> #include <tdeconfig.h> #include <kprocess.h> #include <tdetempfile.h> #include <kstatusbar.h> #include <tdeparts/genericfactory.h> #include <tdeparts/partmanager.h> #include <tdeparts/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() ) { TDEGlobal::locale()->insertCatalogue( "libkcal" ); TDEGlobal::locale()->insertCatalogue( "libtdepim" ); TDEGlobal::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 ); } TDEAboutData *KOrganizerPart::createAboutData() { return new KOrg::AboutData; } void KOrganizerPart::startCompleted( TDEProcess *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"