koeventview.h 4.54 KB
Newer Older
1 2 3
/*
  This file is part of KOrganizer.

4 5 6 7 8
  SPDX-FileCopyrightText: 1999 Preston Brown <pbrown@kde.org>
  SPDX-FileCopyrightText: 2000, 2001 Cornelius Schumacher <schumacher@kde.org>
  SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>

  SPDX-License-Identifier: GPL-2.0-or-later WITH Qt-Commercial-exception-1.0
9
*/
10 11 12

#ifndef KORG_KOEVENTVIEW_H
#define KORG_KOEVENTVIEW_H
13

14
#include "baseview.h"
15

Laurent Montel's avatar
Laurent Montel committed
16
namespace Akonadi {
Laurent Montel's avatar
Laurent Montel committed
17
class Item;
18 19 20
}

class KOEventPopupMenu;
21

22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
class QMenu;

/**
  KOEventView is the abstract base class from which all other
  calendar views for event data are derived.  It provides methods for
  displaying
  appointments and events on one or more days.  The actual number of
  days that a view actually supports is not defined by this abstract class;
  that is up to the classes that inherit from it.  It also provides
  methods for updating the display, retrieving the currently selected
  event (or events), and the like.

  @short Abstract class from which all event views are derived.
  @author Preston Brown <pbrown@kde.org>
  @see KOListView, KOAgendaView, KOMonthView
*/
class KOEventView : public KOrg::BaseView
{
Laurent Montel's avatar
Laurent Montel committed
40 41
    Q_OBJECT
public:
42
    enum {
Laurent Montel's avatar
Laurent Montel committed
43 44
        // This value is passed to QColor's lighter(int factor) for selected events
        BRIGHTNESS_FACTOR = 125
45 46 47 48 49 50 51 52
    };

    /**
     * Constructs a view.
     * @param cal is a pointer to the calendar object from which events
     *        will be retrieved for display.
     * @param parent is the parent QWidget.
     */
Laurent Montel's avatar
Laurent Montel committed
53
    explicit KOEventView(QWidget *parent = nullptr);
54 55 56 57

    /**
     * Destructor.  Views will do view-specific cleanups here.
     */
Laurent Montel's avatar
Laurent Montel committed
58
    ~KOEventView() override;
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76

    /**
     * provides a hint back to the caller on the maximum number of dates
     * that the view supports.  A return value of 0 means no maximum.
     */
    virtual int maxDatesHint() const = 0;

    /**
     * Construct a standard context menu for an event.
     */
    KOEventPopupMenu *eventPopup();

    /**
     * Construct a standard context that allows to create a new event.
     */
    QMenu *newEventPopup();

    /** This view is a view for displaying events. */
Laurent Montel's avatar
Laurent Montel committed
77 78
    bool isEventView() override
    {
Laurent Montel's avatar
Laurent Montel committed
79 80
        return true;
    }
81 82 83 84 85 86 87 88 89

    /*
     * Sets the QObject that will receive key events that were made
     * while the new event dialog was still being created.
     *
     * This is virtual so KOAgendaView can call EventViews::AgendaView::setTypeAheadReceiver().
     * because not all views are in kdepim/calendarviews yet
     *
     */
Laurent Montel's avatar
Laurent Montel committed
90
    virtual void setTypeAheadReceiver(QObject *o);
91 92 93 94 95 96 97 98 99 100 101

    /*
     * Returns true if the view item, that represents a to-do, should use the "completed"
     * pixmap.
     *
     * @param todo The to-do associated with the view item.
     * @param date The date in which the item appears in the view, for non recuring to-dos
     * this is the same as the start date, but, for recurring to-dos this is the date of
     * a particular occurrence.
     *
     */
Laurent Montel's avatar
Laurent Montel committed
102
    static bool usesCompletedTodoPixmap(const Akonadi::Item &todo, const QDate &date);
103

104
    bool supportsDateNavigation() const override
Laurent Montel's avatar
Laurent Montel committed
105 106 107
    {
        return true;
    }
108

Laurent Montel's avatar
Laurent Montel committed
109
public Q_SLOTS:
Laurent Montel's avatar
Laurent Montel committed
110
    void focusChanged(QWidget *, QWidget *);
111 112

    /**
Allen Winter's avatar
Allen Winter committed
113 114 115
     * Performs the default action for an incidence, e.g. open the event editor,
     * when double-clicking an event in the agenda view.
     */
Laurent Montel's avatar
Laurent Montel committed
116
    void defaultAction(const Akonadi::Item &incidence);
117

Laurent Montel's avatar
Laurent Montel committed
118
Q_SIGNALS:
119
    /**
Allen Winter's avatar
Allen Winter committed
120
     * When the view changes the dates that are selected in one way or
121 122 123 124 125 126
     * another, this signal is emitted.  It should be connected back to
     * the KDateNavigator object so that it changes appropriately,
     * and any other objects that need to be aware that the list of
     * selected dates has changed.
     *   @param datelist the new list of selected dates
     */
127
    void datesSelected(const KCalendarCore::DateList &datelist);
128 129 130 131 132

    /**
     * Emitted when an event is moved using the mouse in an agenda
     * view (week / month).
     */
Laurent Montel's avatar
Laurent Montel committed
133
    void shiftedEvent(const QDate &olddate, const QDate &ewdate);
134

Laurent Montel's avatar
Laurent Montel committed
135
protected Q_SLOTS:
136 137 138 139 140 141 142
    void popupShow();
    void popupEdit();
    void popupDelete();
    void popupCut();
    void popupCopy();
    virtual void showNewEventPopup();

Laurent Montel's avatar
Laurent Montel committed
143
protected:
144 145
    Akonadi::Item mCurrentIncidence;  // Incidence selected e.g. for a context menu

Laurent Montel's avatar
Laurent Montel committed
146
private:
147 148 149 150 151 152
    /*
     * This is called when the new event dialog is shown. It sends
     * all events in mTypeAheadEvents to the receiver.
     */
    void finishTypeAhead();

Laurent Montel's avatar
Laurent Montel committed
153
private:
154

155
    bool mTypeAhead = false;
Laurent Montel's avatar
Laurent Montel committed
156
    QObject *mTypeAheadReceiver = nullptr;
Laurent Montel's avatar
Laurent Montel committed
157
    QList<QEvent *> mTypeAheadEvents;
158 159 160
};

#endif