You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdepim/korganizer/koagendaview.h

308 lines
9.2 KiB

/*
This file is part of KOrganizer.
Copyright (c) 2000,2001,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.
*/
#ifndef KOAGENDAVIEW_H
#define KOAGENDAVIEW_H
#include <tqscrollview.h>
#include <tqlabel.h>
#include <libkcal/calendar.h>
#include "calprinter.h"
#include "calendarview.h"
#include "agendaview.h"
class TQHBox;
class TQPushButton;
class TQBoxLayout;
class KOAgenda;
class KOAgendaItem;
class TimeLabels;
class KConfig;
namespace KOrg {
class IncidenceChangerBase;
}
class EventIndicator : public QFrame
{
Q_OBJECT
public:
enum Location { Top, Bottom };
EventIndicator( Location loc = Top, TQWidget *parent = 0,
const char *name = 0 );
virtual ~EventIndicator();
void changeColumns( int columns );
void enableColumn( int column, bool enable );
protected:
void drawContents( TQPainter * );
private:
int mColumns;
Location mLocation;
TQPixmap mPixmap;
TQMemArray<bool> mEnabled;
};
class KOAlternateLabel : public QLabel
{
Q_OBJECT
public:
KOAlternateLabel( const TQString &shortlabel, const TQString &longlabel,
const TQString &extensivelabel = TQString::null,
TQWidget *parent = 0, const char *name = 0 );
~KOAlternateLabel();
virtual TQSize minimumSizeHint() const;
enum TextType { Short = 0, Long = 1, Extensive = 2 };
TextType largestFittingTextType() const;
void setFixedType( TextType type );
public slots:
void useShortText();
void useLongText();
void useExtensiveText();
void useDefaultText();
protected:
virtual void resizeEvent( TQResizeEvent * );
virtual void squeezeTextToLabel();
bool mTextTypeFixed;
TQString mShortText, mLongText, mExtensiveText;
};
/**
KOAgendaView is the agenda-like view used to display events in a single one or
multi-day view.
*/
class KOAgendaView : public KOrg::AgendaView, public KCal::Calendar::Observer
{
Q_OBJECT
public:
KOAgendaView( Calendar *cal,
CalendarView *calendarView,
TQWidget *parent = 0,
const char *name = 0,
bool isSideBySide = false );
virtual ~KOAgendaView();
/** Returns maximum number of days supported by the koagendaview */
virtual int maxDatesHint();
/** Returns number of currently shown dates. */
virtual int currentDateCount();
/** returns the currently selected events */
virtual Incidence::List selectedIncidences();
/** returns the currently selected events */
virtual DateList selectedIncidenceDates();
/** return the default start/end date/time for new events */
virtual bool eventDurationHint(TQDateTime &startDt, TQDateTime &endDt, bool &allDay);
/** Remove all events from view */
void clearView();
KOrg::CalPrinterBase::PrintType printType();
/** start-datetime of selection */
TQDateTime selectionStart() { return mTimeSpanBegin; }
/** end-datetime of selection */
TQDateTime selectionEnd() { return mTimeSpanEnd; }
/** returns true if selection is for whole day */
bool selectedIsAllDay() { return mTimeSpanInAllDay; }
/** make selected start/end invalid */
void deleteSelectedDateTime();
/** returns if only a single cell is selected, or a range of cells */
bool selectedIsSingleCell();
void setTypeAheadReceiver( TQObject * );
KOAgenda* agenda() const { return mAgenda; }
TQSplitter* splitter() const { return mSplitterAgenda; }
TQFrame *dayLabels() const { return mDayLabels; }
/* reimplmented from KCal::Calendar::Observer */
void calendarIncidenceAdded( Incidence *incidence );
void calendarIncidenceChanged( Incidence *incidence );
void calendarIncidenceDeleted( Incidence *incidence );
public slots:
virtual void updateView();
virtual void updateConfig();
virtual void showDates( const TQDate &start, const TQDate &end );
virtual void showIncidences( const Incidence::List &incidenceList, const TQDate &date );
void insertIncidence( Incidence *incidence, const TQDate &curDate );
void changeIncidenceDisplayAdded( Incidence *incidence );
void changeIncidenceDisplay( Incidence *incidence, int mode );
void clearSelection();
void startDrag( Incidence * );
void readSettings();
void readSettings( KConfig * );
void writeSettings( KConfig * );
void setContentsPos( int y );
void setExpandedButton( bool expanded );
void finishTypeAhead();
/** reschedule the todo to the given x- and y- coordinates. Third parameter determines all-day (no time specified) */
void slotTodoDropped( Todo *, const TQPoint &, bool );
void enableAgendaUpdate( bool enable );
void setIncidenceChanger( KOrg::IncidenceChangerBase *changer );
void zoomInHorizontally( const TQDate& date=TQDate() );
void zoomOutHorizontally( const TQDate& date=TQDate() );
void zoomInVertically( );
void zoomOutVertically( );
void zoomView( const int delta, const TQPoint &pos,
const Qt::Orientation orient=Qt::Horizontal );
void clearTimeSpanSelection();
void resourcesChanged();
signals:
void toggleExpand();
void zoomViewHorizontally(const TQDate &, int count );
void timeSpanSelectionChanged();
protected:
/** Fill agenda beginning with date startDate */
void fillAgenda( const TQDate &startDate );
/** Fill agenda using the current set value for the start date */
void fillAgenda();
void connectAgenda( KOAgenda*agenda, TQPopupMenu*popup, KOAgenda* otherAgenda );
/** Create labels for the selected dates. */
void createDayLabels( bool force );
/**
Set the masks on the agenda widgets indicating, which days are holidays.
*/
void setHolidayMasks();
void removeIncidence( Incidence * );
/**
Updates the event indicators after a certain incidence was modified or
removed.
*/
void updateEventIndicators();
void updateTimeBarWidth();
virtual void resizeEvent( TQResizeEvent *resizeEvent );
protected slots:
/** Update event belonging to agenda item */
void updateEventDates( KOAgendaItem *item );
/** update just the display of the given incidence, called by a single-shot timer */
void doUpdateItem();
void updateEventIndicatorTop( int newY );
void updateEventIndicatorBottom( int newY );
/** Updates data for selected timespan */
void newTimeSpanSelected( const TQPoint &start, const TQPoint &end );
/** Updates data for selected timespan for all day event*/
void newTimeSpanSelectedAllDay( const TQPoint &start, const TQPoint &end );
void updateDayLabelSizes();
private:
bool filterByResource( Incidence *incidence );
void displayIncidence( Incidence *incidence );
private:
// view widgets
TQFrame *mDayLabels;
TQHBox *mDayLabelsFrame;
TQBoxLayout *mLayoutDayLabels;
TQPtrList<KOAlternateLabel> mDateDayLabels;
TQFrame *mAllDayFrame;
KOAgenda *mAllDayAgenda;
KOAgenda *mAgenda;
TimeLabels *mTimeLabels;
TQWidget *mDummyAllDayLeft;
TQSplitter *mSplitterAgenda;
TQPushButton *mExpandButton;
DateList mSelectedDates; // List of dates to be displayed
DateList mSaveSelectedDates; // Save the list of dates between updateViews
int mViewType;
KOEventPopupMenu *mAgendaPopup;
KOEventPopupMenu *mAllDayAgendaPopup;
EventIndicator *mEventIndicatorTop;
EventIndicator *mEventIndicatorBottom;
TQMemArray<int> mMinY;
TQMemArray<int> mMaxY;
TQMemArray<bool> mHolidayMask;
TQPixmap mExpandedPixmap;
TQPixmap mNotExpandedPixmap;
TQDateTime mTimeSpanBegin;
TQDateTime mTimeSpanEnd;
bool mTimeSpanInAllDay;
bool mAllowAgendaUpdate;
Incidence *mUpdateItem;
bool mIsSideBySide;
bool mPendingChanges;
// the current date is inserted into mSelectedDates in the constructor
// however whe should only show events when setDates is called, otherwise
// we see day view with current date for a few milisecs, then we see something else
// because someone called setDates with the real dates that should be displayed.
// Other solution would be not initializing mSelectedDates in the ctor, but that requires
// lots of changes in koagenda.cpp and koagendaview.cpp
bool mAreDatesInitialized;
};
#endif