summaryrefslogtreecommitdiff
path: root/core/pim/todo/tableview.h
blob: 7f7825562427eb1d168abd56c380ff8b2e15d2b3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*
               =.            This file is part of the OPIE Project
             .=l.            Copyright (c)  2002 <>
           .>+-=
 _;:,     .>    :=|.         This program is free software; you can
.> <`_,   >  .   <=          redistribute it and/or  modify it under
:`=1 )Y*s>-.--   :           the terms of the GNU General Public
.="- .-=="i,     .._         License as published by the Free Software
 - .   .-<_>     .<>         Foundation; either version 2 of the License,
     ._= =}       :          or (at your option) any later version.
    .%`+i>       _;_.
    .i_,=:_.      -<s.       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
..}^=.=       =       ;      Library General Public License for more
++=   -.     .`     .:       details.
 :     =  ...= . :.=-
 -.   .:....=;==+<;          You should have received a copy of the GNU
  -_. . .   )=.  =           Library General Public License along with
    --        :-=`           this library; see the file COPYING.LIB.
                             If not, write to the Free Software Foundation,
                             Inc., 59 Temple Place - Suite 330,
                             Boston, MA 02111-1307, USA.

*/

#ifndef OPIE_TABLE_VIEW_H
#define OPIE_TABLE_VIEW_H

#include <qtable.h>
#include <qmap.h>
#include <qpixmap.h>

#include "todoview.h"

class QTimer;

namespace Todo {
    class CheckItem;
    class DueTextItem;
    class TableView : public QTable, public TodoView {
        Q_OBJECT
    public:
        TableView( MainWindow*, QWidget* parent );
        ~TableView();


        QString type()const;
        int current();
        QString currentRepresentation();
        int next();
        int prev();

        void clear();
        void showOverDue( bool );
        void updateView();
        void setTodo( int uid, const OPimTodo& );
        void addEvent( const OPimTodo& event );
        void replaceEvent( const OPimTodo& );
        void removeEvent( int uid );
        void setShowCompleted( bool );
        void setShowDeadline( bool );

        void setShowCategory(const QString& =QString::null );
        void newDay();
        QWidget* widget();
        void sortColumn(int, bool, bool );

        /*
         * we do our drawing ourselves
         * because we don't want to have
         * 40.000 QTableItems for 10.000
         * OPimTodos where we only show 10 at a time!
         */
        void paintCell(QPainter* p, int row, int col,  const QRect&, bool );
    private:
        /* reimplented for internal reasons */
        void viewportPaintEvent( QPaintEvent* );
        QTimer *m_menuTimer;
        bool m_enablePaint:1;
        QString m_oleCat;
        bool m_first : 1;

        QPixmap m_pic_completed;
        QPixmap m_pic_priority[ 5 ];

    protected:
        void keyPressEvent( QKeyEvent* );
        void contentsMouseReleaseEvent( QMouseEvent* );
        void contentsMouseMoveEvent( QMouseEvent* );
        void timerEvent( QTimerEvent* e );
        QWidget* createEditor(int row, int col, bool initFromCell )const;
        void setCellContentFromEditor( int row, int col );
        /**
         * for inline editing on single click and to work around some
         * bug in qt2.3.5
         */
        struct EditorWidget {
            EditorWidget();
            void setCellWidget(QWidget*, int row, int col );
            void releaseCellWidget();
            QWidget* cellWidget()const;
            int cellRow()const;
            int cellCol()const;
        private:
            QWidget* m_wid;
            int m_row, m_col;
        };
        EditorWidget m_editorWidget;

private slots:
        void slotShowMenu();
        void slotClicked(int, int, int,
                         const QPoint& );
        void slotPressed(int, int, int,
                         const QPoint& );
        void slotValueChanged(int, int);
        void slotCurrentChanged(int, int );
        void slotPriority();
    private:
        void initConfig();
        int m_completeStrokeWidth;
        bool m_row : 1;
        QPoint m_prevP;
    };
};

#endif