kde-playground/kdepim/korganizer/actionmanager.h
2015-04-14 21:49:29 +00:00

413 lines
13 KiB
C++

/*
This file is part of KOrganizer.
Copyright (c) 2002 Mike Pilone <mpilone@slac.com>
Copyright (c) 2002 Don Sanders <sanders@kde.org>
Copyright (c) 2003,2004 Cornelius Schumacher <schumacher@kde.org>
Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
Copyright (c) 2005 Rafal Rzepecki <divide@users.sourceforge.net>
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.
*/
#ifndef KORG_ACTIONMANAGER_H
#define KORG_ACTIONMANAGER_H
#include "korganizer_export.h"
#include "korganizer/part.h"
#include <Akonadi/Item>
#include <Akonadi/Calendar/ETMCalendar>
#include <KUrl>
#include <KViewStateMaintainer>
#include <QObject>
class AkonadiCollectionView;
class CalendarView;
class KOWindowList;
namespace KOrg {
class HTMLExportSettings;
}
namespace Akonadi {
class ETMViewStateSaver;
}
class KAction;
class KMenuBar;
class KSelectAction;
class KTemporaryFile;
class KToggleAction;
/**
The ActionManager creates all the actions in KOrganizer. This class
is shared between the main application and the part so all common
actions are in one location.
It also provides D-Bus interfaces.
*/
class KORGANIZERPRIVATE_EXPORT ActionManager : public QObject
{
Q_OBJECT
public:
ActionManager( KXMLGUIClient *client, CalendarView *widget,
QObject *parent, KOrg::MainWindow *mainWindow,
bool isPart, KMenuBar *menuBar = 0 );
virtual ~ActionManager();
/** Peform initialization that requires this* to be full constructed */
void init();
CalendarView *view() const { return mCalendarView; }
/**
Create Calendar object based on the akonadi framework and set it on the view.
*/
void createCalendarAkonadi();
public slots:
bool importURL( const KUrl &url, bool merge);
/** Save calendar file to URL of current calendar */
bool saveURL();
/** Save calendar file to URL */
bool saveAsURL( const KUrl &kurl );
/**
Export the calendar to an HTML file. Reads up the user settings as needed.
Intended to be used as part of the auto HTML export feature.
*/
void exportHTML();
/**
Export the calendar to an HTML file, per the user settings.
@param settings is a pointer to an KOrg::HTMLExportSettings instance.
@param autoMode if true, indicates that this export is for an autosave;
if false, then the export is explicitly user invoked.
*/
void exportHTML( KOrg::HTMLExportSettings *settings, bool autoMode = false );
void toggleMenubar( bool dontShowWarning = false );
public:
/** Get current URL */
KUrl url() const { return mURL; }
/** Is there a instance with this URL? */
static KOrg::MainWindow *findInstance( const KUrl &url );
/** Open calendar file from URL */
bool openURL( const QString &url );
/** Open calendar file from URL */
bool mergeURL( const QString &url );
/** Save calendar file to URL */
bool saveAsURL( const QString &url );
/** Get current URL as QString */
QString getCurrentURLasString() const;
/**
Delete the incidence with the given unique id from current calendar.
@param uid UID of the incidence to delete.
@param force If true, all recurrences and sub-todos (if applicable) will
be deleted without prompting for confirmation.
*/
virtual bool deleteIncidence( Akonadi::Item::Id id, bool force = false );
bool editIncidence( Akonadi::Item::Id id );
/**
Add an incidence to the active calendar.
@param ical A calendar in iCalendar format containing the incidence.
*/
bool addIncidence( const QString &ical );
//bool addIncidence( const Akonadi::Item::Id &ical );
bool showIncidence( Akonadi::Item::Id id );
/**
Show an incidence in context. This means showing the todo, agenda or
journal view (as appropriate) and scrolling it to show the incidence.
@param uid Unique ID of the incidence to show.
*/
bool showIncidenceContext( Akonadi::Item::Id id );
/**
* Called by KOrganizerUniqueAppHandler in the kontact plugin
* Returns true if the command line was successfully handled
* false otherwise.
*/
bool handleCommandLine();
public slots:
void openEventEditor( const QString &);
void openEventEditor( const QString &summary,
const QString &description,
const QStringList &attachments );
void openEventEditor( const QString &summary,
const QString &description,
const QStringList &attachments,
const QStringList &attendees );
void openEventEditor( const QString &summary,
const QString &description,
const QString &uri,
const QString &file,
const QStringList &attendees,
const QString &attachmentMimetype );
void openEventEditor( const QString &summary,
const QString &description,
const QStringList &attachmentUris,
const QStringList &attendees,
const QStringList &attachmentMimetypes,
bool attachmentIsInline );
void openTodoEditor( const QString &);
void openTodoEditor( const QString &summary,
const QString &description,
const QStringList &attachments );
void openTodoEditor( const QString &summary,
const QString &description,
const QStringList &attachments,
const QStringList &attendees );
void openTodoEditor( const QString &summary,
const QString &description,
const QString &uri,
const QString &file,
const QStringList &attendees,
const QString &attachmentMimetype );
void openTodoEditor( const QString &summary,
const QString &description,
const QStringList &attachmentUris,
const QStringList &attendees,
const QStringList &attachmentMimetypes,
bool attachmentIsInline );
void openJournalEditor( const QDate &date );
void openJournalEditor( const QString &text, const QDate &date );
void openJournalEditor( const QString &text );
void showJournalView();
void showTodoView();
void showEventView();
void goDate( const QDate &);
void goDate( const QString &);
void showDate( const QDate &date );
public:
QString localFileName();
bool queryClose();
signals:
/**
Emitted when the "New" action is activated.
*/
//void actionNewMainWindow( const KUrl &url = KUrl() );
void toggleMenuBar();
/**
When change is made to options dialog, the topwidget will catch this
and emit this signal which notifies all widgets which have registered
for notification to update their settings.
*/
void configChanged();
public slots:
/**
Options dialog made a changed to the configuration. we catch this
and notify all widgets which need to update their configuration.
*/
void updateConfig();
void processIncidenceSelection( const Akonadi::Item &item, const QDate &date );
void keyBindings();
/**
Using the KConfig associated with the kapp variable, read in the
settings from the config file.
*/
void readSettings();
/**
Write current state to config file.
*/
void writeSettings();
/* Session management */
void saveProperties( KConfigGroup & );
void readProperties( const KConfigGroup & );
void loadParts();
void importCalendar( const KUrl &url );
protected slots:
void setItems( const QStringList &, int );
/** called by the autoExportTimer to automatically export the calendar */
void checkAutoExport();
/** open new window */
//void file_new();
/** open a file, load it into the calendar. */
void file_open();
/** open a file from the list of recent files. Also called from file_open()
after the URL is obtained from the user.
@param url the URL to open
*/
void file_open( const KUrl &url );
/** import a non-ics calendar from another program like ical. */
void file_icalimport();
/** import a generic ics file */
void file_import();
/** delete or archive old entries in your calendar for speed/space. */
void file_archive();
/** Open kcontrol module for configuring date and time formats */
void configureDateTime();
/** Show tip of the day */
void showTip();
/** Show tip of the day */
void showTipOnStart();
void toggleDateNavigator();
void toggleTodoView();
void toggleEventViewer();
void toggleResourceView();
/** connected to CalendarView's signal which comes from the ArchiveDialog */
void slotAutoArchivingSettingsModified();
/** called by the auto archive timer to automatically delete/archive events */
void slotAutoArchive();
void setTitle();
void updateUndoRedoActions();
protected:
/** Get URL for saving. Opens FileDialog. */
KUrl getSaveURL();
/**
Return widget used as parent for dialogs and message boxes.
*/
QWidget *dialogParent();
private slots:
void handleExportJobResult( KJob * );
void dumpText( const QString & ); // only for debugging purposes
void slotDefaultResourceChanged( const Akonadi::Collection & );
void slotResourcesAddedRemoved();
void slotNewEvent();
void slotNewTodo();
void slotNewSubTodo();
void slotNewJournal();
void slotMergeFinished(bool success, int total);
void slotNewResourceFinished(bool);
private:
class ActionStringsVisitor;
void restoreCollectionViewSetting();
/** Create all the actions. */
void initActions();
void enableIncidenceActions( bool enable );
Akonadi::ETMCalendar::Ptr calendar() const;
Akonadi::Collection selectedCollection() const;
KOrg::Part::List mParts; // List of parts loaded
KUrl mURL; // URL of calendar file
QString mFile; // Local name of calendar file
QString mLastUrl; // URL of last loaded calendar.
KTemporaryFile *mTempFile;
QTimer *mAutoExportTimer; // used if calendar is to be autoexported
QTimer *mAutoArchiveTimer; // used for the auto-archiving feature
// list of all existing KOrganizer instances
static KOWindowList *mWindowList;
KToggleAction *mDateNavigatorShowAction;
KToggleAction *mTodoViewShowAction;
KToggleAction *mCollectionViewShowAction;
KToggleAction *mEventViewerShowAction;
KToggleAction *mHideMenuBarAction;
KAction *mImportAction;
KAction *mNewEventAction;
KAction *mNewTodoAction;
KAction *mNewSubtodoAction;
KAction *mNewJournalAction;
KAction *mConfigureViewAction;
KAction *mShowIncidenceAction;
KAction *mEditIncidenceAction;
KAction *mDeleteIncidenceAction;
KAction *mCutAction;
KAction *mCopyAction;
KAction *mDeleteAction;
KAction *mNextXDays;
KAction *mPublishEvent;
KAction *mForwardEvent;
KAction *mSendInvitation;
KAction *mSendCancel;
KAction *mSendStatusUpdate;
KAction *mRequestChange;
KAction *mRequestUpdate;
KAction *mUndoAction;
KAction *mRedoAction;
KMenuBar *mMenuBar;
KSelectAction *mFilterAction;
KXMLGUIClient *mGUIClient;
KActionCollection *mACollection;
CalendarView *mCalendarView;
KOrg::MainWindow *mMainWindow;
bool mIsPart;
bool mHtmlExportSync;
AkonadiCollectionView *mCollectionView;
KViewStateMaintainer<Akonadi::ETMViewStateSaver> *mCollectionViewStateSaver;
KViewStateMaintainer<Akonadi::ETMViewStateSaver> *mCollectionSelectionModelStateSaver;
QSet<KOrg::HTMLExportSettings*> mSettingsToFree;
};
#endif