]> git.lyx.org Git - lyx.git/blob - src/frontends/qt3/emptytable.C
Extracted from r14281
[lyx.git] / src / frontends / qt3 / emptytable.C
1 /**
2  * \file emptytable.C
3  * This file is part of LyX, the document processor.
4  * Licence details can be found in the file COPYING.
5  *
6  * \author John Levon
7  *
8  * Full author contact details are available in file CREDITS.
9  */
10
11 #include <config.h>
12
13 #include "emptytable.h"
14 #include <qpainter.h>
15
16 /**
17  * A simple widget for a quick "preview" in TabularCreateDialog
18  */
19
20 unsigned int const cellsize = 20;
21
22
23 EmptyTable::EmptyTable(QWidget * parent, const char * name)
24         : QtTableView(parent, name, WRepaintNoErase)
25 {
26         setNumCols(5);
27         setNumRows(5);
28         setCellWidth(cellsize);
29         setCellHeight(cellsize);
30         setTableFlags(Tbl_autoScrollBars);
31 }
32
33
34 QSize EmptyTable::sizeHint() const
35 {
36         return QSize(cellsize * numCols(), cellsize * numRows());
37 }
38
39
40 void EmptyTable::paintCell(QPainter * p, int row, int col)
41 {
42         int const x2 = cellWidth(col) - 1;
43         int const y2 = cellHeight(row) - 1;
44
45         p->fillRect(0, 0, x2, y2, QColor("white"));
46         p->drawLine(x2, 0, x2, y2);
47         p->drawLine(0, y2, x2, y2);
48
49         if (row + 1 != numRows() || col + 1 != numCols())
50                 return;
51
52         // draw handle
53         int const step = cellsize / 5;
54         int const space = 4;
55         int x = cellsize - step;
56         int const y = cellsize - space;
57         int const ex = cellsize - space;
58         int ey = cellsize - step;
59         while (x > space) {
60                 p->drawLine(x, y, ex, ey);
61                 x -= step;
62                 ey -= step;
63         }
64 }
65
66
67 void EmptyTable::setNumberColumns(int nr_cols)
68 {
69         if (nr_cols < 1)
70                 return;
71         if (nr_cols == numCols())
72                 return;
73         setAutoUpdate(false);
74         setNumCols(nr_cols);
75         updateGeometry();
76         setAutoUpdate(true);
77         update();
78         // emit signal
79         colsChanged(nr_cols);
80 }
81
82
83 void EmptyTable::setNumberRows(int nr_rows)
84 {
85         if (nr_rows < 1)
86                 return;
87         if (nr_rows == numRows())
88                 return;
89         setAutoUpdate(false);
90         setNumRows(nr_rows);
91         updateGeometry();
92         setAutoUpdate(true);
93         update();
94         // emit signal
95         rowsChanged(nr_rows);
96 }
97
98
99 void EmptyTable::mouseMoveEvent(QMouseEvent *ev)
100 {
101         int const x = ev->pos().x();
102         int const y = ev->pos().y();
103
104         if (x > 0)
105                 setNumberColumns(x / cellsize + leftCell());
106
107         if (y > 0)
108                 setNumberRows(y / cellsize + topCell());
109 }