summaryrefslogtreecommitdiffstats
path: root/korganizer/korganizer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'korganizer/korganizer.cpp')
-rw-r--r--korganizer/korganizer.cpp310
1 files changed, 310 insertions, 0 deletions
diff --git a/korganizer/korganizer.cpp b/korganizer/korganizer.cpp
new file mode 100644
index 000000000..87dc79f4f
--- /dev/null
+++ b/korganizer/korganizer.cpp
@@ -0,0 +1,310 @@
+/*
+ This file is part of KOrganizer.
+
+ Copyright (c) 1997, 1998, 1999
+ Preston Brown (preston.brown@yale.edu)
+ Fester Zigterman (F.J.F.ZigtermanRustenburg@student.utwente.nl)
+ Ian Dawes (iadawes@globalserve.net)
+ Laszlo Boloni (boloni@cs.purdue.edu)
+
+ Copyright (c) 2000-2003 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 Qt, and distribute the resulting executable,
+ without including the source code for Qt in the source distribution.
+*/
+
+#include "korganizer.h"
+
+#include "komailclient.h"
+#include "calendarview.h"
+#include "koviewmanager.h"
+#include "kodialogmanager.h"
+#include "kowindowlist.h"
+#include "koprefs.h"
+#include "kocore.h"
+#include "konewstuff.h"
+#include "actionmanager.h"
+#include "koglobals.h"
+#include "alarmclient.h"
+#include "resourceview.h"
+#include "korganizerifaceimpl.h"
+
+#include <korganizer/part.h>
+
+#include <libkdepim/statusbarprogresswidget.h>
+#include <libkdepim/progressdialog.h>
+
+#include <libkcal/calendarlocal.h>
+#include <libkcal/calendarresources.h>
+#include <libkcal/resourcecalendar.h>
+
+#include <kglobal.h>
+#include <kdebug.h>
+#include <kiconloader.h>
+#include <kstandarddirs.h>
+#include <kstdaccel.h>
+#include <kfiledialog.h>
+#include <kaction.h>
+#include <kstdaction.h>
+#include <kedittoolbar.h>
+#include <ktempfile.h>
+#include <kio/netaccess.h>
+#include <kmessagebox.h>
+#include <dcopclient.h>
+#include <kprocess.h>
+#include <kwin.h>
+#include <ktip.h>
+#include <kstdguiitem.h>
+#include <kstatusbar.h>
+
+#include <qcursor.h>
+#include <qtimer.h>
+#include <qvbox.h>
+#include <qfile.h>
+#include <qlabel.h>
+#include <qlayout.h>
+
+#include <stdlib.h>
+
+using namespace KParts;
+#include "korganizer.moc"
+using namespace KOrg;
+
+KOrganizer::KOrganizer( const char *name )
+ : KParts::MainWindow( 0, name ),
+ KOrg::MainWindow()
+{
+ // Set this to be the group leader for all subdialogs - this means
+ // modal subdialogs will only affect this dialog, not the other windows
+ setWFlags( getWFlags() | WGroupLeader );
+
+ kdDebug(5850) << "KOrganizer::KOrganizer()" << endl;
+ KOCore::self()->addXMLGUIClient( this, this );
+// setMinimumSize(600,400); // make sure we don't get resized too small...
+
+ mCalendarView = new CalendarView( this, "KOrganizer::CalendarView" );
+ setCentralWidget(mCalendarView);
+
+ mActionManager = new ActionManager( this, mCalendarView, this, this, false );
+ (void)new KOrganizerIfaceImpl( mActionManager, this, "IfaceImpl" );
+}
+
+KOrganizer::~KOrganizer()
+{
+ delete mActionManager;
+
+ KOCore::self()->removeXMLGUIClient( this );
+}
+
+void KOrganizer::init( bool document )
+{
+ kdDebug(5850) << "KOrganizer::init() "
+ << ( document ? "hasDocument" : "resources" ) << endl;
+
+ setHasDocument( document );
+
+ // Create calendar object, which manages all calendar information associated
+ // with this calendar view window.
+ if ( hasDocument() ) {
+ mActionManager->createCalendarLocal();
+ } else {
+ mActionManager->createCalendarResources();
+ }
+
+ mActionManager->init();
+ connect( mActionManager, SIGNAL( actionNew( const KURL & ) ),
+ SLOT( newMainWindow( const KURL & ) ) );
+
+ mActionManager->loadParts();
+
+ initActions();
+ readSettings();
+
+ KStatusBar *bar = statusBar();
+
+ bar->insertItem( "", ID_GENERAL, 10 );
+ connect( bar, SIGNAL( pressed( int ) ), SLOT( statusBarPressed( int ) ) );
+
+ KPIM::ProgressDialog *progressDialog = new KPIM::ProgressDialog( bar, this );
+ progressDialog->hide();
+
+ KPIM::StatusbarProgressWidget *progressWidget;
+ progressWidget = new KPIM::StatusbarProgressWidget( progressDialog, bar );
+ progressWidget->show();
+
+ bar->addWidget( progressWidget, 0, true );
+
+ connect( mActionManager->view(), SIGNAL( statusMessage( const QString & ) ),
+ SLOT( showStatusMessage( const QString & ) ) );
+
+ setStandardToolBarMenuEnabled( true );
+ setTitle();
+
+ kdDebug(5850) << "KOrganizer::KOrganizer() done" << endl;
+}
+
+void KOrganizer::newMainWindow( const KURL &url )
+{
+ KOrganizer *korg = new KOrganizer();
+ if ( url.isValid() || url.isEmpty() ) {
+ korg->init( true );
+ if ( korg->openURL( url ) || url.isEmpty() ) {
+ korg->show();
+ } else {
+ delete korg;
+ }
+ } else {
+ korg->init( false );
+ korg->show();
+ }
+}
+
+void KOrganizer::readSettings()
+{
+ // read settings from the KConfig, supplying reasonable
+ // defaults where none are to be found
+
+ KConfig *config = KOGlobals::self()->config();
+
+ mActionManager->readSettings();
+
+ config->sync();
+}
+
+
+void KOrganizer::writeSettings()
+{
+ kdDebug(5850) << "KOrganizer::writeSettings" << endl;
+
+ KConfig *config = KOGlobals::self()->config();
+
+ mActionManager->writeSettings();
+ config->sync();
+}
+
+
+void KOrganizer::initActions()
+{
+
+ setInstance( KGlobal::instance() );
+
+ setXMLFile( "korganizerui.rc" );
+ setStandardToolBarMenuEnabled( true );
+ createStandardStatusBarAction();
+
+ KStdAction::keyBindings(guiFactory(), SLOT(configureShortcuts()), actionCollection());
+ KStdAction::configureToolbars(this, SLOT(configureToolbars() ), actionCollection());
+ KStdAction::quit( this, SLOT( close() ), actionCollection() );
+ setAutoSaveSettings();
+
+ createGUI( 0 );
+}
+
+bool KOrganizer::queryClose()
+{
+ kdDebug(5850) << "KOrganizer::queryClose()" << endl;
+
+ bool close = mActionManager->queryClose();
+
+ // Write configuration. I don't know if it really makes sense doing it this
+ // way, when having opened multiple calendars in different CalendarViews.
+ if ( close ) writeSettings();
+
+ return close;
+}
+
+bool KOrganizer::queryExit()
+{
+ // Don't call writeSettings here, because filename isn't valid anymore. It is
+ // now called in queryClose.
+// writeSettings();
+ return true;
+}
+
+void KOrganizer::statusBarPressed( int /*id*/ )
+{
+}
+
+void KOrganizer::showStatusMessage( const QString &message )
+{
+ statusBar()->message(message,2000);
+}
+
+bool KOrganizer::openURL( const KURL &url, bool merge )
+{
+ return mActionManager->openURL( url, merge );
+}
+
+bool KOrganizer::saveURL()
+{
+ return mActionManager->saveURL();
+}
+
+bool KOrganizer::saveAsURL( const KURL & kurl )
+{
+ return mActionManager->saveAsURL( kurl ) ;
+}
+
+KURL KOrganizer::getCurrentURL() const
+{
+ return mActionManager->url();
+}
+
+void KOrganizer::saveProperties( KConfig *config )
+{
+ return mActionManager->saveProperties( config );
+}
+
+void KOrganizer::readProperties( KConfig *config )
+{
+ return mActionManager->readProperties( config );
+}
+
+KOrg::CalendarViewBase *KOrganizer::view() const
+{
+ return mActionManager->view();
+}
+
+void KOrganizer::setTitle()
+{
+// kdDebug(5850) << "KOrganizer::setTitle" << endl;
+
+ QString 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 ( mCalendarView->isReadOnly() ) {
+ title += " [" + i18n("read-only") + "]";
+ }
+ }
+
+ title += " - <" + mCalendarView->currentFilterName() + "> ";
+
+ setCaption( title, !mCalendarView->isReadOnly() &&
+ mCalendarView->isModified() );
+}