annotate libgui/graphics/Table.cc @ 30564:796f54d4ddbf stable

update Octave Project Developers copyright for the new year In files that have the "Octave Project Developers" copyright notice, update for 2021. In all .txi and .texi files except gpl.txi and gpl.texi in the doc/liboctave and doc/interpreter directories, change the copyright to "Octave Project Developers", the same as used for other source files. Update copyright notices for 2022 (not done since 2019). For gpl.txi and gpl.texi, change the copyright notice to be "Free Software Foundation, Inc." and leave the date at 2007 only because this file only contains the text of the GPL, not anything created by the Octave Project Developers. Add Paul Thomas to contributors.in.
author John W. Eaton <jwe@octave.org>
date Tue, 28 Dec 2021 18:22:40 -0500
parents 97a3e7ba640d
children ca7d58406f82 c6d54dd31a7e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
1 ////////////////////////////////////////////////////////////////////////
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
2 //
30564
796f54d4ddbf update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents: 30528
diff changeset
3 // Copyright (C) 2016-2022 The Octave Project Developers
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
4 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
5 // See the file COPYRIGHT.md in the top-level directory of this
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
6 // distribution or <https://octave.org/copyright/>.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
7 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
8 // This file is part of Octave.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
9 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
10 // Octave is free software: you can redistribute it and/or modify it
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
11 // under the terms of the GNU General Public License as published by
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
12 // the Free Software Foundation, either version 3 of the License, or
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
13 // (at your option) any later version.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
14 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
15 // Octave is distributed in the hope that it will be useful, but
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
16 // WITHOUT ANY WARRANTY; without even the implied warranty of
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
18 // GNU General Public License for more details.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
19 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
20 // You should have received a copy of the GNU General Public License
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
21 // along with Octave; see the file COPYING. If not, see
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
22 // <https://www.gnu.org/licenses/>.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
23 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
24 ////////////////////////////////////////////////////////////////////////
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
25
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
26 #if defined (HAVE_CONFIG_H)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
27 # include "config.h"
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
28 #endif
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
29
27417
f844b1f03dcc update some header file lists in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27335
diff changeset
30 #include <QCheckBox>
f844b1f03dcc update some header file lists in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27335
diff changeset
31 #include <QComboBox>
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
32 #include <QEvent>
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
33 #include <QFrame>
27417
f844b1f03dcc update some header file lists in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27335
diff changeset
34 #include <QHBoxLayout>
f844b1f03dcc update some header file lists in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27335
diff changeset
35 #include <QHeaderView>
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
36 #include <QLabel>
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
37 #include <QLineEdit>
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
38 #include <QModelIndexList>
27417
f844b1f03dcc update some header file lists in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27335
diff changeset
39 #include <QMouseEvent>
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
40 #include <QString>
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
41 #include <QStringList>
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
42 #include <QTableWidget>
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
43 #include <QTableWidgetItem>
27417
f844b1f03dcc update some header file lists in libgui sources
John W. Eaton <jwe@octave.org>
parents: 27335
diff changeset
44 #include <QTimer>
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
45
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
46 #include "Container.h"
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
47 #include "ContextMenu.h"
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
48 #include "Table.h"
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
49 #include "QtHandlesUtils.h"
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
50
27645
028205a91a07 eliminate global access to Octave resources in qt graphics classes
John W. Eaton <jwe@octave.org>
parents: 27417
diff changeset
51 #include "octave-qobject.h"
028205a91a07 eliminate global access to Octave resources in qt graphics classes
John W. Eaton <jwe@octave.org>
parents: 27417
diff changeset
52
27335
50216d7a2f6b eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents: 27319
diff changeset
53 #include "graphics.h"
27647
2a506bc4a7af eliminate global access to Octave interpreter in qt graphics classes
John W. Eaton <jwe@octave.org>
parents: 27645
diff changeset
54 #include "interpreter.h"
29223
5aa787452544 Use Octave map instead of octave_struct in gui graphics (patch #8919).
John W. Eaton <jwe@octave.org>
parents: 28300
diff changeset
55 #include "oct-map.h"
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
56 #include "oct-stream.h"
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
57 #include "oct-string.h"
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
58 #include "oct-strstrm.h"
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
59
29992
6ea4a84df9c7 rename QtHandles namespace to octave
John W. Eaton <jwe@octave.org>
parents: 29542
diff changeset
60 namespace octave
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
61 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
62
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
63 static const int AUTO_WIDTH = 75;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
64
26372
2d9ae06f621b Fix static analyzer detected V1003 issues with expansions in macros (bug #55347).
Rik <rik@octave.org>
parents: 26149
diff changeset
65 #define AUTO_HEIGHT (tp.get_fontsize () * 2 - 1)
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
66
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
67 static QSize realQSizeForTable (QTableWidget *t)
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
68 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
69 int w = t->verticalHeader ()->width () + 4;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
70 for (int i = 0; i < t->columnCount (); i++)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
71 w += t->columnWidth (i);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
72 int h = t->horizontalHeader ()->height () + 4;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
73 for (int i = 0; i < t->rowCount (); i++)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
74 h += t->rowHeight (i);
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
75 return QSize (w, h);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
76 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
77
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
78 #define FORMATNUMBER(type) \
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
79 static QString formatNumber (type d, \
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
80 char format = 'f', \
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
81 int precision = 4) \
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
82 { \
29421
24e62692e8ac avoid ambiguous call to pow (bug #60169)
John W. Eaton <jwe@octave.org>
parents: 29358
diff changeset
83 type ten = 10; \
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
84 if (format == 'n') \
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
85 { \
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
86 if (d == floor (d)) \
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
87 return QString::number (d, 'g', precision); \
29421
24e62692e8ac avoid ambiguous call to pow (bug #60169)
John W. Eaton <jwe@octave.org>
parents: 29358
diff changeset
88 else if (d <= pow (ten, precision - 1) \
24e62692e8ac avoid ambiguous call to pow (bug #60169)
John W. Eaton <jwe@octave.org>
parents: 29358
diff changeset
89 && d > pow (ten, 1 - precision)) \
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
90 return QString::number (d, 'f', precision); \
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
91 else \
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
92 return QString::number (d, 'e', precision); \
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
93 } \
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
94 else if (format == 'F') \
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
95 { \
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
96 int exponent = floor (log10 (d) / 3) * 3; \
29421
24e62692e8ac avoid ambiguous call to pow (bug #60169)
John W. Eaton <jwe@octave.org>
parents: 29358
diff changeset
97 d *= pow (ten, -exponent); \
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
98 return QString::number (d, 'f', precision) + "e" + \
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
99 (exponent < 0 ? "-" : "+") + \
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
100 QString ("%1").arg (abs (exponent), 3, 10, QChar ('0')); \
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
101 } \
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
102 else if (format == 'E') \
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
103 { \
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
104 int exponent = floor (log10 (d) / 3) * 3; \
29421
24e62692e8ac avoid ambiguous call to pow (bug #60169)
John W. Eaton <jwe@octave.org>
parents: 29358
diff changeset
105 d *= pow (ten, -exponent); \
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
106 return QString::number (d, \
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
107 'f', \
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
108 precision - floor (log10 (d)) - 1) + \
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
109 "e" + (exponent < 0 ? "-" : "+") + \
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
110 QString ("%1").arg (abs (exponent), 3, 10, QChar ('0')); \
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
111 } \
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
112 else \
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
113 return QString::number (d, format, precision); \
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
114 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
115
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
116 FORMATNUMBER(double)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
117 FORMATNUMBER(float)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
118
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
119 #undef FORMATNUMBER
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
120
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
121 static QString formatComplex (Complex c, char format = 'f', int precision = 4)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
122 {
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
123 return formatNumber (c.real (), format, precision) + " + "
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
124 + formatNumber (c.imag (), format, precision) + "i";
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
125 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
126
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
127 #define FORMAT_VALUE_EXCEPT_RAT(f,l) \
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
128 if (format == "numeric" || format == "short") \
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
129 text = formatNumber (value, 'n', f); \
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
130 else if (format == "short f" || format == "shortf") \
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
131 text = formatNumber (value, 'f', f); \
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
132 else if (format == "short e" || format == "shorte") \
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
133 text = formatNumber (value, 'e', f); \
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
134 else if (format == "short eng" || format == "shorteng") \
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
135 text = formatNumber (value, 'F', f); \
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
136 else if (format == "short g" || format == "shortg") \
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
137 text = formatNumber (value, 'g', f + 1); \
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
138 else if (format == "long") \
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
139 text = formatNumber (value, 'n', l); \
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
140 else if (format == "long f" || format == "longf") \
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
141 text = formatNumber (value, 'f', l); \
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
142 else if (format == "long e" || format == "longe") \
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
143 text = formatNumber (value, 'e', l); \
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
144 else if (format == "long eng" || format == "longeng") \
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
145 text = formatNumber (value, 'E', l); \
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
146 else if (format == "long g" || format == "longg") \
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
147 text = formatNumber (value, 'g', l + 1); \
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
148 else if (format == "bank") \
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
149 text = QString::number (value, 'f', 2); \
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
150 else if (format == "+") \
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
151 if (value > 0) \
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
152 text = Utils::fromStdString ("+"); \
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
153 else if (value < 0) \
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
154 text = Utils::fromStdString ("-"); \
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
155 else \
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
156 text = Utils::fromStdString ("");
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
157
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
158 #define FORMAT_VALUE(f,l) \
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
159 FORMAT_VALUE_EXCEPT_RAT(f,l) \
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
160 else if (format == "rat") \
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
161 text = Utils::fromStdString (rational_approx (double (value), 0)); \
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
162 else \
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
163 { \
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
164 text = formatNumber (value, 'n', f); \
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
165 flag = Qt::AlignLeft ; \
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
166 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
167
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
168 #define FORMAT_UINT_VALUE() \
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
169 text = QString::number (value); \
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
170 if (format == "char" || format == "popup") \
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
171 flag = Qt::AlignLeft; \
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
172 else if (format == "+") \
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
173 { \
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
174 if (value > 0) \
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
175 text = Utils::fromStdString ("+"); \
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
176 else \
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
177 text = Utils::fromStdString (""); \
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
178 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
179
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
180 #define FORMAT_INT_VALUE() \
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
181 text = QString::number (value); \
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
182 if (format == "char" || format == "popup") \
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
183 flag = Qt::AlignLeft ; \
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
184 else if (format == "+") \
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
185 { \
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
186 if (value > 0) \
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
187 text = Utils::fromStdString ("+"); \
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
188 else if (value < 0) \
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
189 text = Utils::fromStdString ("-"); \
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
190 else \
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
191 text = Utils::fromStdString (""); \
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
192 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
193
27276
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 26820
diff changeset
194 static std::pair<Qt::AlignmentFlag, QString>
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 26820
diff changeset
195 qStringValueFor (octave_value val, std::string format = "")
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
196 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
197 Qt::AlignmentFlag flag = Qt::AlignRight;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
198 QString text;
30528
97a3e7ba640d uitable: Fix crash with empty value in uitable (bug #61713).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 30398
diff changeset
199 if (val.isempty ())
97a3e7ba640d uitable: Fix crash with empty value in uitable (bug #61713).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 30398
diff changeset
200 {
97a3e7ba640d uitable: Fix crash with empty value in uitable (bug #61713).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 30398
diff changeset
201 text = "";
97a3e7ba640d uitable: Fix crash with empty value in uitable (bug #61713).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 30398
diff changeset
202 flag = Qt::AlignLeft;
97a3e7ba640d uitable: Fix crash with empty value in uitable (bug #61713).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 30398
diff changeset
203 }
97a3e7ba640d uitable: Fix crash with empty value in uitable (bug #61713).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 30398
diff changeset
204 else if (val.is_string ())
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
205 {
29992
6ea4a84df9c7 rename QtHandles namespace to octave
John W. Eaton <jwe@octave.org>
parents: 29542
diff changeset
206 text = octave::Utils::fromStdString (val.string_value ());
30528
97a3e7ba640d uitable: Fix crash with empty value in uitable (bug #61713).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 30398
diff changeset
207 flag = Qt::AlignLeft;
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
208 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
209 else if (val.iscomplex ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
210 {
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
211 // Matlab has multiple complex types, we only have double.
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
212 Complex c = val.complex_value ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
213 if (format == "short")
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
214 text = formatComplex (c, 'f', 4);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
215 else if (format == "short e" || format == "shorte")
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
216 text = formatComplex (c, 'e', 4);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
217 else if (format == "short eng" || format == "shorteng")
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
218 text = formatComplex (c, 'E', 4);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
219 else if (format == "short g" || format == "shortg")
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
220 text = formatComplex (c, 'g', 5);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
221 else if (format == "long")
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
222 text = formatComplex (c, 'f', 15);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
223 else if (format == "long e" || format == "longe")
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
224 text = formatComplex (c, 'e', 15);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
225 else if (format == "long eng" || format == "longeng")
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
226 text = formatComplex (c, 'E', 15);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
227 else if (format == "long g" || format == "longg")
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
228 text = formatComplex (c, 'g', 16);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
229 else if (format == "bank")
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
230 text = QString::number (c.real (), 'f', 2);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
231 else if (format == "+")
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
232 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
233 if (c.real () > 0)
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
234 text = Utils::fromStdString ("+");
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
235 else if (c.real () < 0)
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
236 text = Utils::fromStdString ("-");
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
237 else
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
238 text = Utils::fromStdString ("");
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
239 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
240 else if (format == "rat")
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
241 text = Utils::fromStdString (rational_approx (c.real (), 0)) + " + "
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
242 + Utils::fromStdString (rational_approx (c.imag (), 0)) + "i";
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
243 else if (format == "numeric")
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
244 text = QString::number (c.real (), 'g', 5) + " + "
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
245 + QString::number (c.imag (), 'g', 5) + "i";
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
246 else
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
247 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
248 text = QString::number (c.real (), 'g', 5) + " + "
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
249 + QString::number (c.imag (), 'g', 5) + "i";
30528
97a3e7ba640d uitable: Fix crash with empty value in uitable (bug #61713).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 30398
diff changeset
250 flag = Qt::AlignLeft;
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
251 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
252 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
253 else if (val.is_double_type () )
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
254 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
255 double value = val.double_value ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
256 FORMAT_VALUE(4, 15)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
257 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
258 else if (val.is_single_type ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
259 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
260 float value = val.float_value ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
261 FORMAT_VALUE(4, 7)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
262 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
263 else if (val.is_int8_type ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
264 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
265 short int value = val.short_value ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
266 FORMAT_INT_VALUE()
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
267 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
268 else if (val.is_uint8_type ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
269 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
270 unsigned short int value = val.ushort_value ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
271 FORMAT_UINT_VALUE()
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
272 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
273 else if (val.is_int16_type ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
274 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
275 int value = val.int_value ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
276 FORMAT_INT_VALUE()
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
277 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
278 else if (val.is_uint16_type ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
279 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
280 unsigned int value = val.uint_value ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
281 FORMAT_UINT_VALUE()
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
282 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
283 else if (val.is_int32_type ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
284 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
285 long int value = val.long_value ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
286 FORMAT_INT_VALUE()
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
287 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
288 else if (val.is_uint32_type ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
289 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
290 unsigned long int value = val.ulong_value ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
291 FORMAT_UINT_VALUE()
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
292 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
293 else if (val.is_int64_type ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
294 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
295 int64_t value = val.int64_value ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
296 FORMAT_INT_VALUE()
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
297 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
298 else if (val.is_uint64_type ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
299 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
300 uint64_t value = val.uint64_value ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
301 FORMAT_UINT_VALUE()
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
302 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
303 else if (val.islogical ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
304 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
305 bool b = val.bool_value ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
306 if (format == "char" || format == "popup" || format == "")
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
307 {
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
308 text = Utils::fromStdString (b ? "true" : "false");
30528
97a3e7ba640d uitable: Fix crash with empty value in uitable (bug #61713).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 30398
diff changeset
309 flag = Qt::AlignLeft;
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
310 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
311 else if (format == "+")
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
312 {
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
313 text = Utils::fromStdString (b ? "+" : "");
30528
97a3e7ba640d uitable: Fix crash with empty value in uitable (bug #61713).
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 30398
diff changeset
314 flag = Qt::AlignLeft;
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
315 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
316 else
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
317 text = Utils::fromStdString (b ? "1" : "0");
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
318 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
319 else
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
320 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
321 std::stringstream warn_string;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
322 warn_string << "Unknown conversion for datatype " << val.class_name ()
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
323 << " to " << format
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
324 << " for value " << val.string_value (true);
26149
242aa7b2c783 Silence unnecessary warnings about security-format (bug #55046).
Rik <rik@octave.org>
parents: 26127
diff changeset
325 warning ("%s", warn_string.str ().c_str ());
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
326
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
327 text = Utils::fromStdString (val.string_value (true));
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
328 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
329
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
330 return std::make_pair (flag, text);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
331 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
332
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
333 #undef FORMAT_VALUE
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
334 #undef FORMAT_VALUE_EXCEPT_RAT
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
335 #undef FORMAT_UINT_VALUE
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
336 #undef FORMAT_INT_VALUE
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
337
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
338 static QTableWidgetItem * itemFor (octave_value val, std::string format = "",
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
339 bool enabled = false)
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
340 {
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
341 QTableWidgetItem *retval = new QTableWidgetItem ();
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
342 std::pair<Qt::AlignmentFlag, QString> flag_and_text =
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
343 qStringValueFor (val, format);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
344 retval->setTextAlignment (flag_and_text.first);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
345 retval->setText (flag_and_text.second);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
346
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
347 if (enabled)
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
348 retval->setFlags (retval->flags () | Qt::ItemIsEditable);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
349 else
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
350 retval->setFlags (retval->flags () & ~Qt::ItemIsEditable);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
351
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
352 return retval;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
353 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
354
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
355 static octave_value
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
356 attempt_type_conversion (const octave_value& ov,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
357 const octave_value& old_value)
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
358 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
359 octave_value retval;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
360
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
361 // Define a macro to help with the conversion of strings to integers
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
362 // FIXME: these will happily integer overflow in the (u)int64 case
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
363 // - this probably doesn't matter.
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
364 #define SCANF_AND_CONVERT(name,ctype,format) \
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
365 else if (old_value.is_ ## name ## _type ()) \
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
366 { \
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
367 ctype val; \
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
368 int n; \
26467
6595716a7f33 Table.cc: Fix static analyzer detected issues (bug #55347).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26372
diff changeset
369 const std::string cxx_str = ov.string_value (); \
6595716a7f33 Table.cc: Fix static analyzer detected issues (bug #55347).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26372
diff changeset
370 const char *c_str = cxx_str.c_str (); \
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
371 int error = sscanf (c_str, format, &val, &n); \
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
372 if (error != 1 || c_str[n]) \
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
373 { \
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
374 val = 0; \
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
375 } \
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
376 retval = octave_value ( octave_ ## name (val)); \
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
377 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
378
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
379 if (old_value.is_string ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
380 retval = ov;
26467
6595716a7f33 Table.cc: Fix static analyzer detected issues (bug #55347).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26372
diff changeset
381 SCANF_AND_CONVERT(int8, int64_t, "%" PRId64 " %n")
6595716a7f33 Table.cc: Fix static analyzer detected issues (bug #55347).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26372
diff changeset
382 SCANF_AND_CONVERT(uint8, uint64_t, "%" PRIu64 " %n")
6595716a7f33 Table.cc: Fix static analyzer detected issues (bug #55347).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26372
diff changeset
383 SCANF_AND_CONVERT(int16, int64_t, "%" PRId64 " %n")
6595716a7f33 Table.cc: Fix static analyzer detected issues (bug #55347).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26372
diff changeset
384 SCANF_AND_CONVERT(uint16, uint64_t, "%" PRIu64 " %n")
6595716a7f33 Table.cc: Fix static analyzer detected issues (bug #55347).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26372
diff changeset
385 SCANF_AND_CONVERT(int32, int64_t, "%" PRId64 " %n")
6595716a7f33 Table.cc: Fix static analyzer detected issues (bug #55347).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26372
diff changeset
386 SCANF_AND_CONVERT(uint32, uint64_t, "%" PRIu64 " %n")
6595716a7f33 Table.cc: Fix static analyzer detected issues (bug #55347).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26372
diff changeset
387 SCANF_AND_CONVERT(int64, int64_t, "%" PRId64 " %n")
6595716a7f33 Table.cc: Fix static analyzer detected issues (bug #55347).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26372
diff changeset
388 SCANF_AND_CONVERT(uint64, uint64_t, "%" PRIu64 " %n")
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
389
27935
f1844e33f621 maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents: 27923
diff changeset
390 #undef SCANF_AND_CONVERT
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
391
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
392 else if (old_value.isnumeric () && ! old_value.isinteger ())
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
393 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
394 // Basically need to do str2double
26127
37e3aa267374 Move function str2double inside octave::string namespace (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26122
diff changeset
395 Complex complex = octave::string::str2double (ov.string_value ());
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
396 if (old_value.is_single_type ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
397 retval = octave_value (FloatComplex (complex));
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
398 else
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
399 retval = octave_value (complex);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
400 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
401 else if (old_value.islogical ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
402 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
403 // Right: Matlab basically needs this to be true or false, we should
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
404 // accept 1 too.
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
405 if (ov.string_value () == "true" || ov.string_value () == "1")
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
406 retval = octave_value (true);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
407 else
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
408 retval = octave_value (false);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
409 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
410 else
26127
37e3aa267374 Move function str2double inside octave::string namespace (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26122
diff changeset
411 retval = octave_value (octave::string::str2double (ov.string_value ()));
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
412 return retval;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
413 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
414
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
415 QWidget *
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
416 Table::checkBoxForLogical (octave_value val, bool enabled = false)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
417 {
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
418 QWidget *retval = new QWidget (m_tableWidget);
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
419 QCheckBox *checkBox = new QCheckBox ();
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
420 QHBoxLayout *layout = new QHBoxLayout (retval);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
421 layout->addWidget (checkBox);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
422 layout->setAlignment (Qt::AlignCenter);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
423 layout->setContentsMargins (0, 0, 0, 0);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
424 retval->setLayout (layout);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
425
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
426 if ((val.islogical () || val.is_bool_scalar ()) && val.bool_value ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
427 checkBox->setCheckState (Qt::Checked);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
428 else
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
429 checkBox->setCheckState (Qt::Unchecked);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
430
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
431 checkBox->setAttribute (Qt::WA_TransparentForMouseEvents, true);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
432 checkBox->setFocusPolicy (Qt::NoFocus);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
433 checkBox->setProperty ("Enabled", QVariant (enabled));
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
434
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
435 return retval;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
436 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
437
30398
d4d83344d653 maint: style check C++ files in src/ and libgui/ ahead of 7.1 release.
Rik <rik@octave.org>
parents: 29992
diff changeset
438 Table *
27647
2a506bc4a7af eliminate global access to Octave interpreter in qt graphics classes
John W. Eaton <jwe@octave.org>
parents: 27645
diff changeset
439 Table::create (octave::base_qobject& oct_qobj, octave::interpreter& interp,
2a506bc4a7af eliminate global access to Octave interpreter in qt graphics classes
John W. Eaton <jwe@octave.org>
parents: 27645
diff changeset
440 const graphics_object& go)
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
441 {
27647
2a506bc4a7af eliminate global access to Octave interpreter in qt graphics classes
John W. Eaton <jwe@octave.org>
parents: 27645
diff changeset
442 Object *parent = parentObject (interp, go);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
443
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
444 if (parent)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
445 {
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
446 Container *container = parent->innerContainer ();
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
447
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
448 if (container)
27647
2a506bc4a7af eliminate global access to Octave interpreter in qt graphics classes
John W. Eaton <jwe@octave.org>
parents: 27645
diff changeset
449 return new Table (oct_qobj, interp, go, new QTableWidget (container));
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
450 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
451
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
452 return 0;
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
453 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
454
27647
2a506bc4a7af eliminate global access to Octave interpreter in qt graphics classes
John W. Eaton <jwe@octave.org>
parents: 27645
diff changeset
455 Table::Table (octave::base_qobject& oct_qobj, octave::interpreter& interp,
2a506bc4a7af eliminate global access to Octave interpreter in qt graphics classes
John W. Eaton <jwe@octave.org>
parents: 27645
diff changeset
456 const graphics_object& go, QTableWidget *tableWidget)
2a506bc4a7af eliminate global access to Octave interpreter in qt graphics classes
John W. Eaton <jwe@octave.org>
parents: 27645
diff changeset
457 : Object (oct_qobj, interp, go, tableWidget), m_tableWidget (tableWidget),
2a506bc4a7af eliminate global access to Octave interpreter in qt graphics classes
John W. Eaton <jwe@octave.org>
parents: 27645
diff changeset
458 m_curData (), m_blockUpdates (false)
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
459 {
26820
0a383bddfb40 Also update uitbale position when figure is (un)maximized (bug #53709)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 26470
diff changeset
460 qObject ()->setObjectName ("UItable");
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
461 uitable::properties& tp = properties<uitable> ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
462
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
463 m_curData = octave_value (tp.get_data ());
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
464 Matrix bb = tp.get_boundingbox (false);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
465 m_tableWidget->setObjectName ("UITable");
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
466 m_tableWidget->setAutoFillBackground (true);
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
467 m_tableWidget->setGeometry (octave::math::round (bb(0)),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
468 octave::math::round (bb(1)),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
469 octave::math::round (bb(2)),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
470 octave::math::round (bb(3)));
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
471 m_tableWidget->setFont (Utils::computeFont<uitable> (tp)) ;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
472 m_tableWidget->setSelectionBehavior (QAbstractItemView::SelectItems);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
473 updatePalette ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
474 m_keyPressHandlerDefined = ! tp.get_keypressfcn ().isempty ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
475 m_keyReleaseHandlerDefined = ! tp.get_keyreleasefcn ().isempty ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
476 updateData ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
477 updateRowname ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
478 updateColumnname ();
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
479 updateColumnwidth ();
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
480 updateEnable (); // Also does rearrangeableColumns
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
481 m_tableWidget->setToolTip (Utils::fromStdString (tp.get_tooltipstring ()));
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
482 m_tableWidget->setVisible (tp.is_visible ());
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
483 updateExtent ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
484 m_tableWidget->installEventFilter (this);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
485
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
486
29542
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29423
diff changeset
487 connect (m_tableWidget, &QTableWidget::itemChanged,
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29423
diff changeset
488 this, &Table::itemChanged);
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29423
diff changeset
489 connect (m_tableWidget, &QTableWidget::cellClicked,
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29423
diff changeset
490 this, &Table::cellClicked);
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29423
diff changeset
491 connect (m_tableWidget, &QTableWidget::itemSelectionChanged,
3d34b70b5a49 connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents: 29423
diff changeset
492 this, &Table::itemSelectionChanged);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
493 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
494
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
495 Table::~Table (void) { }
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
496
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
497 void
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
498 Table::itemSelectionChanged ()
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
499 {
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
500 if (! (properties<uitable> ().get_cellselectioncallback ().isempty ()))
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
501 {
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
502 QModelIndexList modelIndexList =
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
503 m_tableWidget->selectionModel ()->selectedIndexes ();
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
504 int length = modelIndexList.size ();
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
505 Matrix indices = Matrix (length, 2);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
506 for (int i = 0; i < length; i++)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
507 {
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
508 indices(i, 0) = modelIndexList.value (i).row () + 1;
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
509 indices(i, 1) = modelIndexList.value (i).column () + 1;
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
510 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
511 octave_scalar_map eventData;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
512 eventData.setfield ("Indices", indices);
29223
5aa787452544 Use Octave map instead of octave_struct in gui graphics (patch #8919).
John W. Eaton <jwe@octave.org>
parents: 28300
diff changeset
513 octave_value cellSelectionCallbackEventObject (eventData);
27319
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
514 emit gh_callback_event (m_handle, "cellselectioncallback",
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
515 cellSelectionCallbackEventObject);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
516 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
517 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
518
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
519 void
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
520 Table::cellClicked (int row, int col)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
521 {
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
522 QCheckBox *checkBox = nullptr;
27276
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 26820
diff changeset
523 QWidget *widget
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 26820
diff changeset
524 = qobject_cast<QWidget *> (m_tableWidget->cellWidget (row, col));
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
525 if (widget && ! widget->children ().isEmpty ())
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
526 {
27276
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 26820
diff changeset
527 QHBoxLayout *layout
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 26820
diff changeset
528 = qobject_cast<QHBoxLayout *> (widget->children ().first ());
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 26820
diff changeset
529
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
530 if (layout && layout->count () > 0)
27276
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 26820
diff changeset
531 checkBox = qobject_cast<QCheckBox *> (layout->itemAt (0)-> widget ());
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
532 }
27276
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 26820
diff changeset
533
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
534 if (checkBox && checkBox->property ("Enabled").toBool ())
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
535 checkBoxClicked (row, col, checkBox);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
536 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
537
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
538 void
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
539 Table::sendCellEditCallback (int row,
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
540 int col,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
541 octave_value old_value,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
542 octave_value new_value,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
543 octave_value edit_data,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
544 octave_value error)
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
545 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
546
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
547 if (!(properties<uitable> ().get_celleditcallback ().isempty ()))
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
548 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
549 Matrix indices = Matrix (1, 2);
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
550 indices(0, 0) = row + 1;
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
551 indices(0, 1) = col + 1;
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
552
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
553 octave_scalar_map eventData;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
554 eventData.setfield ("Indices", indices);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
555 eventData.setfield ("PreviousData", old_value);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
556 eventData.setfield ("NewData", new_value);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
557 eventData.setfield ("EditData", edit_data);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
558 eventData.setfield ("Error", error);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
559
29223
5aa787452544 Use Octave map instead of octave_struct in gui graphics (patch #8919).
John W. Eaton <jwe@octave.org>
parents: 28300
diff changeset
560 octave_value cellEditCallbackEventObject (eventData);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
561
27319
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
562 emit gh_callback_event (m_handle, "celleditcallback",
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
563 cellEditCallbackEventObject);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
564 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
565 else if (error.string_value ().length () > 0)
26149
242aa7b2c783 Silence unnecessary warnings about security-format (bug #55046).
Rik <rik@octave.org>
parents: 26127
diff changeset
566 warning ("%s", error.string_value ().c_str ());
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
567 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
568
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
569 void
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
570 Table::comboBoxCurrentIndexChanged (const QString& value)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
571 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
572 if (m_blockUpdates)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
573 return;
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
574
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
575 m_blockUpdates = true;
27335
50216d7a2f6b eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents: 27319
diff changeset
576
27647
2a506bc4a7af eliminate global access to Octave interpreter in qt graphics classes
John W. Eaton <jwe@octave.org>
parents: 27645
diff changeset
577 gh_manager& gh_mgr = m_interpreter.get_gh_manager ();
27335
50216d7a2f6b eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents: 27319
diff changeset
578
50216d7a2f6b eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents: 27319
diff changeset
579 octave::autolock guard (gh_mgr.graphics_lock ());
50216d7a2f6b eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents: 27319
diff changeset
580
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
581 octave_value data = octave_value (m_curData);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
582 bool ok = false;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
583
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
584 QComboBox *comboBox = qobject_cast<QComboBox *> (sender ());
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
585 int row = comboBox->property ("row").toInt ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
586 int col = comboBox->property ("col").toInt ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
587
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
588 octave_value edit_data = octave_value (Utils::toStdString (value));
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
589
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
590 if (row < data.rows () && col < data.columns ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
591 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
592 if (data.iscell ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
593 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
594 Cell cell = data.cell_value ();
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
595 octave_value old_data = cell(row, col);
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
596 if (cell(row, col).is_string ())
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
597 {
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
598 cell(row, col) = edit_data;
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
599 if (edit_data.string_value () != old_data.string_value ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
600 {
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
601 m_curData = octave_value (cell);
27319
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
602 emit gh_set_event (m_handle, "data", octave_value (cell),
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
603 false);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
604 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
605
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
606 octave_value error = octave_value ("");
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
607 sendCellEditCallback (row, col,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
608 old_data,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
609 edit_data,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
610 edit_data,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
611 error);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
612 ok = true;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
613 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
614 else
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
615 {
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
616 cell(row, col) = attempt_type_conversion (edit_data, old_data);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
617
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
618 // Inform the QTableWidget of our change
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
619 updateData (row, col, cell(row, col),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
620 columnformat (col), columneditable (col));
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
621
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
622 m_curData = octave_value (cell);
27319
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
623 emit gh_set_event (m_handle, "data", octave_value (cell),
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
624 false);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
625
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
626 octave_value error = octave_value ("");
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
627 sendCellEditCallback (row,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
628 col,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
629 old_data,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
630 cell(row, col),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
631 edit_data,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
632 error);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
633 ok = true;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
634 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
635 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
636 else
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
637 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
638 octave_value old_data = data.is_matrix_type ()
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
639 ? data.fast_elem_extract (row + col * data.rows ())
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
640 : octave_value ();
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
641 data.fast_elem_insert (row + col * data.rows (),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
642 attempt_type_conversion (edit_data, old_data));
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
643
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
644 // Inform the QTableWidget of our change
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
645 updateData (row,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
646 col,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
647 data.fast_elem_extract (row + col * data.rows ()),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
648 columnformat (col),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
649 columneditable (col));
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
650
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
651 m_curData = octave_value (data);
27319
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
652 emit gh_set_event (m_handle, "data", data, false);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
653
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
654 octave_value error = octave_value ("");
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
655 sendCellEditCallback (row,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
656 col,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
657 old_data,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
658 data.fast_elem_extract (row + col * data.rows ()),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
659 edit_data,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
660 error);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
661 ok = true;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
662 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
663 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
664 else
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
665 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
666 // Reset the QTableWidgetItem
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
667 updateData (row, col, octave_value (""), columnformat (col),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
668 columneditable (col));
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
669
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
670 octave_value error =
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
671 octave_value ("Table data is not editable at this location.");
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
672 sendCellEditCallback (row,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
673 col,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
674 octave_value (),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
675 octave_value (),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
676 edit_data,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
677 error);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
678 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
679
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
680 if (! ok)
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
681 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
682 comboBox->setCurrentIndex (-1);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
683 comboBox->setEditable (true);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
684 comboBox->setEditText (comboBox->property ("original_value").toString ());
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
685 comboBox->lineEdit ()->setReadOnly (true);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
686 }
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
687 m_blockUpdates = false;
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
688 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
689
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
690 void
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
691 Table::checkBoxClicked (int row, int col, QCheckBox *checkBox)
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
692 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
693 if (m_blockUpdates)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
694 return;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
695 m_blockUpdates = true;
27335
50216d7a2f6b eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents: 27319
diff changeset
696
27647
2a506bc4a7af eliminate global access to Octave interpreter in qt graphics classes
John W. Eaton <jwe@octave.org>
parents: 27645
diff changeset
697 gh_manager& gh_mgr = m_interpreter.get_gh_manager ();
27335
50216d7a2f6b eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents: 27319
diff changeset
698
50216d7a2f6b eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents: 27319
diff changeset
699 octave::autolock guard (gh_mgr.graphics_lock ());
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
700
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
701 bool new_value = ! checkBox->isChecked ();
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
702
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
703 octave_value data = octave_value (m_curData);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
704 if (data.islogical ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
705 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
706 // EASY WE JUST CONVERT
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
707 boolMatrix matrix = data.bool_matrix_value ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
708 if (row < matrix.rows () && col < matrix.columns ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
709 {
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
710 bool old_value = matrix(row, col);
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
711 matrix(row, col) = new_value;
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
712 checkBox->setChecked (new_value);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
713 if (new_value != old_value)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
714 {
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
715 m_curData = octave_value (matrix);
27319
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
716 emit gh_set_event (m_handle, "data", octave_value (matrix),
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
717 false);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
718 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
719
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
720 sendCellEditCallback (row, col,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
721 octave_value (old_value),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
722 octave_value (new_value),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
723 octave_value (new_value),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
724 octave_value (""));
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
725
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
726 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
727 else
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
728 {
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
729 sendCellEditCallback (row,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
730 col,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
731 octave_value (),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
732 octave_value (),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
733 octave_value (new_value),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
734 octave_value ("Table data is not editable at this location."));
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
735 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
736 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
737 else if (data.iscell ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
738 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
739 Cell cell = data.cell_value ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
740 if (row < cell.rows () && col < cell.columns ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
741 {
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
742 if (cell(row, col).islogical ())
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
743 {
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
744 bool old_value = cell(row, col).bool_value ();
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
745 cell(row, col) = octave_value (new_value);
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
746 checkBox->setChecked (new_value);
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
747 if (new_value != old_value)
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
748 {
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
749 m_curData = octave_value (cell);
27319
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
750 emit gh_set_event (m_handle, "data", octave_value (cell),
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
751 false);
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
752 }
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
753
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
754 sendCellEditCallback (row,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
755 col,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
756 octave_value (old_value),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
757 octave_value (new_value),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
758 octave_value (new_value),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
759 octave_value (""));
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
760 }
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
761 else
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
762 {
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
763 sendCellEditCallback (row,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
764 col,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
765 cell(row, col),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
766 octave_value (),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
767 octave_value (new_value),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
768 octave_value ("Cannot convert logical edit to other type."));
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
769 }
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
770 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
771 else
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
772 {
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
773 sendCellEditCallback (row,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
774 col,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
775 cell(row, col),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
776 octave_value (),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
777 octave_value (new_value),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
778 octave_value ("Table data is not editable at this location."));
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
779 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
780 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
781 else if (data.is_matrix_type ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
782 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
783 if (row < data.rows () && col < data.columns ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
784 {
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
785 sendCellEditCallback (row,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
786 col,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
787 data.fast_elem_extract (row + col * data.rows ()),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
788 octave_value (),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
789 octave_value (new_value),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
790 octave_value ("Cannot convert logical edit to other type."));
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
791 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
792 else
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
793 {
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
794 sendCellEditCallback (row,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
795 col,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
796 data.fast_elem_extract (row + col * data.rows ()),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
797 octave_value (),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
798 octave_value (new_value),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
799 octave_value ("Table data is not editable at this location."));
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
800 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
801 }
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
802 m_blockUpdates = false;
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
803 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
804
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
805
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
806 void
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
807 Table::itemChanged (QTableWidgetItem *item)
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
808 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
809 if (m_blockUpdates)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
810 return;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
811 m_blockUpdates = true;
27335
50216d7a2f6b eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents: 27319
diff changeset
812
27647
2a506bc4a7af eliminate global access to Octave interpreter in qt graphics classes
John W. Eaton <jwe@octave.org>
parents: 27645
diff changeset
813 gh_manager& gh_mgr = m_interpreter.get_gh_manager ();
27335
50216d7a2f6b eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents: 27319
diff changeset
814
50216d7a2f6b eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents: 27319
diff changeset
815 octave::autolock guard (gh_mgr.graphics_lock ());
50216d7a2f6b eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents: 27319
diff changeset
816
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
817 octave_value data = octave_value (m_curData);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
818
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
819 int row = item->row ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
820 int col = item->column ();
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
821 octave_value edit_data = octave_value (Utils::toStdString (item->text ()));
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
822 octave_value new_value;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
823 octave_value old_value;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
824 octave_value new_data;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
825
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
826 if (row < data.rows () && col < data.columns ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
827 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
828 if (data.iscell ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
829 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
830 old_value = data.cell_value () (row, col);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
831 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
832 else if (data.is_matrix_type ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
833 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
834 old_value = data.fast_elem_extract (row + col * data.rows ());
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
835 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
836
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
837 // Now we need to coerce the new_value in to the type of the old_value
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
838 if (old_value.is_string ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
839 new_value = edit_data;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
840 else
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
841 {
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
842 new_value = attempt_type_conversion (edit_data, old_value);
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
843 std::pair<Qt::AlignmentFlag, QString> flag_and_text =
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
844 qStringValueFor (new_value, columnformat (col));
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
845 item->setTextAlignment (flag_and_text.first);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
846 item->setText (flag_and_text.second);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
847 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
848
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
849 if (data.iscell ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
850 {
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
851 Cell cell = data.cell_value ();
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
852 cell(row, col) = new_value;
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
853 new_data = octave_value (cell);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
854 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
855 else
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
856 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
857 data.fast_elem_insert (row + col * data.rows (), new_value);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
858 new_data = data;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
859 }
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
860 m_curData = octave_value (new_data);
27319
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
861 emit gh_set_event (m_handle, "data", new_data, false);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
862
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
863 sendCellEditCallback (row,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
864 col,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
865 octave_value (old_value),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
866 octave_value (new_value),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
867 octave_value (new_value),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
868 octave_value (""));
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
869 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
870 else
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
871 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
872 item->setText ("");
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
873
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
874 octave_value error =
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
875 octave_value ("Table data is not editable at this location.");
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
876 sendCellEditCallback (row,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
877 col,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
878 octave_value (),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
879 octave_value (),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
880 edit_data,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
881 error);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
882 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
883
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
884 m_blockUpdates = false;
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
885 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
886
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
887 void
26820
0a383bddfb40 Also update uitbale position when figure is (un)maximized (bug #53709)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 26470
diff changeset
888 Table::redraw (void)
0a383bddfb40 Also update uitbale position when figure is (un)maximized (bug #53709)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 26470
diff changeset
889 {
0a383bddfb40 Also update uitbale position when figure is (un)maximized (bug #53709)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 26470
diff changeset
890 update (uitable::properties::ID_POSITION);
0a383bddfb40 Also update uitbale position when figure is (un)maximized (bug #53709)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 26470
diff changeset
891 }
0a383bddfb40 Also update uitbale position when figure is (un)maximized (bug #53709)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 26470
diff changeset
892
0a383bddfb40 Also update uitbale position when figure is (un)maximized (bug #53709)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 26470
diff changeset
893 void
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
894 Table::update (int pId)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
895 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
896 uitable::properties& tp = properties<uitable> ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
897
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
898 switch (pId)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
899 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
900 case uitable::properties::ID_BACKGROUNDCOLOR:
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
901 case uitable::properties::ID_FOREGROUNDCOLOR:
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
902 updatePalette ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
903 break;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
904
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
905 case uitable::properties::ID_COLUMNNAME:
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
906 updateColumnname ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
907 updateColumnwidth ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
908 break;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
909
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
910 case uitable::properties::ID_COLUMNWIDTH:
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
911 updateColumnwidth ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
912 break;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
913
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
914 case uitable::properties::ID_COLUMNEDITABLE:
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
915 case uitable::properties::ID_COLUMNFORMAT:
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
916 case uitable::properties::ID_DATA:
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
917 m_blockUpdates = true;
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
918 m_curData = octave_value (tp.get_data ());
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
919 updateData ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
920 updateRowname ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
921 updateColumnname ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
922 updateColumnwidth ();
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
923 updateEnable ();
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
924 m_blockUpdates = false;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
925 break;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
926
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
927 case uitable::properties::ID_ENABLE:
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
928 updateEnable ();
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
929 break;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
930
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
931 case uitable::properties::ID_KEYPRESSFCN:
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
932 m_keyPressHandlerDefined = ! tp.get_keypressfcn ().isempty ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
933 break;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
934
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
935 case uitable::properties::ID_KEYRELEASEFCN:
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
936 m_keyReleaseHandlerDefined = ! tp.get_keyreleasefcn ().isempty ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
937 break;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
938
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
939 case uitable::properties::ID_FONTNAME:
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
940 case uitable::properties::ID_FONTSIZE:
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
941 case uitable::properties::ID_FONTWEIGHT:
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
942 case uitable::properties::ID_FONTANGLE:
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
943 if (m_tableWidget)
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
944 {
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
945 m_tableWidget->setFont (Utils::computeFont<uitable> (tp));
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
946 for (int row = 0; row < m_tableWidget->rowCount (); row++)
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
947 {
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
948 m_tableWidget->setRowHeight (row, AUTO_HEIGHT);
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
949 }
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
950 }
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
951 break;
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
952
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
953 case uitable::properties::ID_POSITION:
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
954 {
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
955 Matrix bb = tp.get_boundingbox (false);
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
956 m_tableWidget->setGeometry (octave::math::round (bb(0)),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
957 octave::math::round (bb(1)),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
958 octave::math::round (bb(2)),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
959 octave::math::round (bb(3)));
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
960 updateExtent ();
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
961 }
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
962 break;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
963
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
964 case uitable::properties::ID_REARRANGEABLECOLUMNS:
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
965 updateRearrangeableColumns ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
966 break;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
967
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
968 case uitable::properties::ID_ROWNAME:
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
969 updateRowname ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
970 break;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
971
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
972 case uitable::properties::ID_ROWSTRIPING:
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
973 updatePalette ();
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
974 break;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
975
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
976 case uitable::properties::ID_TOOLTIPSTRING:
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
977 m_tableWidget->setToolTip (Utils::fromStdString (tp.get_tooltipstring ()));
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
978 break;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
979
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
980 case base_properties::ID_VISIBLE:
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
981 m_tableWidget->setVisible (tp.is_visible ());
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
982 break;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
983
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
984 default:
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
985 break;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
986
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
987 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
988 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
989
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
990 void
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
991 Table::updateColumnname (void)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
992 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
993 uitable::properties& tp = properties<uitable> ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
994
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
995 // Reset the Column Count
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
996 m_tableWidget->setColumnCount (tp.get_data ().columns ());
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
997
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
998 octave_value columnname = tp.get_columnname ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
999 QStringList l;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1000 bool visible = true;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1001
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1002 if (columnname.is_string () && columnname.string_value (false) == "numbered")
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1003 for (int i = 0; i < m_tableWidget->columnCount (); i++)
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1004 l << QString::number (i + 1);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1005 else if (columnname.is_string ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1006 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1007 if (m_tableWidget->columnCount () > 0)
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1008 l << Utils::fromStdString (columnname.string_value ());
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1009 for (int i = 1; i < m_tableWidget->columnCount (); i++)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1010 l << "";
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1011 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1012 else if (columnname.isempty ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1013 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1014 for (int i = 0; i < m_tableWidget->columnCount (); i++)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1015 l << "";
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1016
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1017 visible = false;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1018 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1019 else if (columnname.iscell ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1020 {
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1021 octave_idx_type n = columnname.numel ();
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1022 Cell cell_value = columnname.cell_value ();
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1023
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1024 for (octave_idx_type i = 0; i < n; i++)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1025 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1026 octave_value v = cell_value (i);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1027 if (v.is_string ())
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1028 l << Utils::fromStdString (v.string_value (true));
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1029 else if (v.is_matrix_type ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1030 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1031 Matrix data = v.matrix_value ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1032
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1033 /* Now Matlab does something very strange here:
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1034 * If data is a row or column matrix,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1035 * then each datapoint is added.
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1036 * Otherwise, nothing is set.
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1037 */
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1038 if (data.rows () > 1 && data.cols () > 1)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1039 l << "";
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1040 else
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1041 for (octave_idx_type j = 0; j < data.numel (); j++)
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1042 l << QString::number (data(j));
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1043 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1044 else if (v.isnumeric ())
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1045 l << QString::number (v.double_value ());
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1046 else
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1047 l << QString::number (v.double_value ());
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1048 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1049 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1050 else if (columnname.is_matrix_type ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1051 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1052 octave_idx_type n = columnname.numel ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1053 Matrix matrix_value = columnname.matrix_value ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1054
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1055 for (octave_idx_type i = 0; i < n; i++)
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1056 l << QString::number (matrix_value(i));
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1057 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1058 else
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1059 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1060 for (int i = 0; i < m_tableWidget->columnCount (); i++)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1061 l << "";
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1062 visible = false;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1063 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1064
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1065 l.replaceInStrings ("|", "\n");
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1066
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1067 // Now add the columns as required
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1068 if (m_tableWidget->columnCount () < l.length ())
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1069 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1070 int oldColumnCount = m_tableWidget->columnCount ();
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1071 m_tableWidget->setColumnCount (l.length ());
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1072 for (int col = oldColumnCount; col < l.length (); col++)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1073 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1074 std::string format = columnformat (col);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1075 bool enabled = columneditable (col);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1076
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1077 for (int row = 0; row < m_tableWidget->rowCount (); row++)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1078 updateData (row, col, octave_value (""), format, enabled);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1079 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1080 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1081
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1082 m_tableWidget->setHorizontalHeaderLabels (l);
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1083 m_tableWidget->horizontalHeader ()->setVisible (visible);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1084 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1085
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1086 void
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1087 Table::updateColumnwidth (void)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1088 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1089 uitable::properties& tp = properties<uitable> ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1090
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1091 octave_value columnwidth = tp.get_columnwidth ();
27277
db687716fed6 style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents: 27276
diff changeset
1092 if (columnwidth.isempty ()
db687716fed6 style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents: 27276
diff changeset
1093 || (columnwidth.is_string ()
db687716fed6 style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents: 27276
diff changeset
1094 && columnwidth.string_value (false) == "auto"))
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1095 for (int i = 0; i < m_tableWidget->columnCount (); i++)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1096 m_tableWidget->setColumnWidth (i, AUTO_WIDTH);
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1097 else if (columnwidth.is_string ()
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1098 && columnwidth.string_value (false) == "preferred")
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1099 for (int i = 0; i < m_tableWidget->columnCount (); i++)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1100 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1101 int column_size =
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1102 (qobject_cast<QAbstractItemView *> (m_tableWidget))->sizeHintForColumn (i);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1103 int header_size = m_tableWidget->horizontalHeader ()->sectionSizeHint (i);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1104
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1105 if (column_size > header_size)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1106 header_size = column_size;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1107 m_tableWidget->setColumnWidth (i, header_size);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1108 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1109 else if (columnwidth.iscell ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1110 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1111 Cell cell_value = columnwidth.cell_value ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1112 int i = 0;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1113 for (; i < m_tableWidget->columnCount () && i < cell_value.numel (); i++)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1114 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1115 octave_value v = cell_value (i);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1116 if (v.is_string () && v.string_value (false) == "auto")
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1117 m_tableWidget->setColumnWidth (i, AUTO_WIDTH);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1118 else if (v.is_string () && v.string_value (false) == "preferred")
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1119 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1120 int column_size =
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1121 (qobject_cast<QAbstractItemView *> (m_tableWidget))->sizeHintForColumn (i);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1122 int header_size = m_tableWidget->horizontalHeader ()->sectionSizeHint (i);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1123
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1124 if (column_size > header_size)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1125 header_size = column_size;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1126 m_tableWidget->setColumnWidth (i, header_size);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1127 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1128 else
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1129 {
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1130 int w = int (v.double_value ());
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1131 m_tableWidget->setColumnWidth (i, w);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1132 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1133 }
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1134 for (; i < m_tableWidget->columnCount (); i++)
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1135 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1136 int column_size =
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1137 (qobject_cast<QAbstractItemView *> (m_tableWidget))->sizeHintForColumn (i);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1138 int header_size = m_tableWidget->horizontalHeader ()->sectionSizeHint (i);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1139
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1140 if (column_size > header_size)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1141 header_size = column_size;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1142 m_tableWidget->setColumnWidth (i, header_size);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1143 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1144 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1145 else if (columnwidth.is_matrix_type ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1146 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1147 Matrix matrix_value = columnwidth.matrix_value ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1148 int i = 0;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1149 for (; i < m_tableWidget->columnCount () && i < matrix_value.numel (); i++)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1150 {
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1151 octave_value v = matrix_value(i);
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1152 int w = int (v.double_value ());
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1153 m_tableWidget->setColumnWidth (i, w);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1154 }
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1155 for (; i < m_tableWidget->columnCount (); i++)
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1156 m_tableWidget->setColumnWidth (i, AUTO_WIDTH);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1157 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1158 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1159
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1160 bool inline
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1161 Table::columneditable (int col)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1162 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1163 uitable::properties& tp = properties<uitable> ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1164 boolNDArray columneditable = tp.get_columneditable ().bool_array_value ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1165 bool editable = false;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1166
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1167 if (! columneditable.isempty () && col < columneditable.numel ())
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1168 editable = columneditable.xelem (col);
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1169 else if (! columneditable.isempty () && columneditable.numel () == 1)
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1170 editable = columneditable.xelem (0);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1171
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1172 return editable;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1173 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1174
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1175 std::string inline
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1176 Table::columnformat (int col)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1177 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1178 uitable::properties& tp = properties<uitable> ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1179 std::string format = "";
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1180 octave_value ov_columnformat = tp.get_columnformat ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1181
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1182 if (ov_columnformat.iscell ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1183 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1184 Cell columnformat = ov_columnformat.cell_value ();
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1185 if (! columnformat.isempty () && col < columnformat.numel ())
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1186 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1187 octave_value format_value = columnformat.xelem (col);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1188
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1189 if (! format_value.isempty () && format_value.is_string ())
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1190 format = format_value.string_value ();
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1191 else if (! format_value.isempty () && format_value.iscell ())
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1192 format = "popup";
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1193 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1194 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1195 else if (ov_columnformat.is_string ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1196 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1197 format = ov_columnformat.string_value ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1198 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1199 return format;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1200 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1201
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1202 void inline
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1203 Table::updateDataColumn (int col)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1204 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1205 octave_value data = properties<uitable> ().get_data ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1206
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1207 std::string format = columnformat (col);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1208 bool is_editable = columneditable (col);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1209
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1210 for (octave_idx_type row = 0; row < data.rows (); row++)
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1211 updateData (row,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1212 col,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1213 data.iscell ()
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1214 ? data.cell_value () (row, col)
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1215 : data.fast_elem_extract (row + col * data.rows ()),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1216 format,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1217 is_editable);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1218 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1219
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1220 void inline
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1221 Table::updateData (int row, int col)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1222 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1223 octave_value data = properties<uitable> ().get_data ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1224 updateData (row,
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1225 col,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1226 data.iscell ()
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1227 ? data.cell_value () (row, col)
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1228 : data.fast_elem_extract (row + col * data.rows ()),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1229 columnformat (col),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1230 columneditable (col));
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1231 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1232
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1233 void inline
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1234 Table::updateData (int row, int col, octave_value value,
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1235 std::string format = "", bool enabled = false)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1236 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1237 if (format == "logical" || (format == "" && value.islogical ()))
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1238 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1239 if (m_tableWidget->item (row, col))
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1240 delete m_tableWidget->item (row, col);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1241
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1242 m_tableWidget->setCellWidget (row, col, checkBoxForLogical (value, enabled));
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1243 m_tableWidget->cellWidget (row, col)->setProperty ("row", QVariant (row));
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1244 m_tableWidget->cellWidget (row, col)->setProperty ("col", QVariant (col));
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1245 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1246 else if (format == "popup" && enabled)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1247 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1248 if (m_tableWidget->item (row, col))
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1249 delete m_tableWidget->item (row, col);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1250
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1251 QString string_value = qStringValueFor (value, format).second;
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1252 uitable::properties& tp = properties<uitable> ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1253 octave_value format_value = tp.get_columnformat ().cell_value ().xelem (col);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1254
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1255 QComboBox *comboBox = new QComboBox ();
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1256 comboBox->setProperty ("row", QVariant (row));
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1257 comboBox->setProperty ("col", QVariant (col));
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1258
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1259 int index = -1;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1260 for (int k = 0; k < format_value.numel (); k++)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1261 {
27276
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 26820
diff changeset
1262 QString popup_item
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 26820
diff changeset
1263 = Utils::fromStdString (format_value.fast_elem_extract (k).string_value ());
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1264
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1265 comboBox->addItem (popup_item);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1266
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1267 if (popup_item == string_value)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1268 index = k;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1269 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1270 comboBox->setCurrentIndex (index);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1271
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1272 if (index < 0)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1273 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1274 comboBox->setEditable (true);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1275 comboBox->setEditText (string_value);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1276 comboBox->lineEdit ()->setReadOnly (true);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1277 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1278
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1279 comboBox->setProperty ("original_value", QVariant (string_value));
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1280
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1281 comboBox->installEventFilter (this);
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1282 m_tableWidget->setCellWidget (row, col, comboBox);
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1283 connect (comboBox, SIGNAL(currentIndexChanged (const QString&)),
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1284 this, SLOT(comboBoxCurrentIndexChanged (const QString&)));
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1285 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1286 else
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1287 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1288 if (m_tableWidget->cellWidget (row, col))
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1289 delete m_tableWidget->cellWidget (row, col);
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1290 m_tableWidget->setItem (row, col, itemFor (value, format, enabled));
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1291 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1292 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1293
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1294 void
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1295 Table::updateData ()
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1296 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1297 uitable::properties& tp = properties<uitable> ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1298
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1299 octave_value data = tp.get_data ();
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1300
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1301 if (data.iscell () || data.is_matrix_type ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1302 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1303 m_tableWidget->setRowCount (data.rows ());
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1304 m_tableWidget->setColumnCount (data.columns ());
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1305
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1306 for (octave_idx_type col = 0; col < data.columns (); col++)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1307 updateDataColumn (col);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1308 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1309
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1310 for (octave_idx_type row = 0; row < m_tableWidget->rowCount (); row++)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1311 m_tableWidget->setRowHeight (row, AUTO_HEIGHT);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1312 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1313
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1314 void
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1315 Table::updateEnable (void)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1316 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1317 uitable::properties& tp = properties<uitable> ();
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1318 bool enabled = tp.is_enable ();
26470
83857449f3da Table.cc (Table::updateEnable): Do not invert enabled status (bug #55403).
Markus Mützel <markus.muetzel@gmx.de>
parents: 26467
diff changeset
1319 m_tableWidget->setEnabled (enabled);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1320
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1321 bool rearrangeableColumns = tp.is_rearrangeablecolumns ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1322
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1323 // Set selection mode
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1324 m_tableWidget->setSelectionMode (enabled
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1325 ? QAbstractItemView::ExtendedSelection
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1326 : QAbstractItemView::NoSelection);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1327
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1328 // Set rearrangeablecolumns
28300
0c6dcf803529 Remove support for Qt4 in Octave 7.
Rik <rik@octave.org>
parents: 27935
diff changeset
1329 m_tableWidget->horizontalHeader ()->setSectionsMovable (enabled && rearrangeableColumns);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1330 m_tableWidget->horizontalHeader ()->setDragEnabled (enabled && rearrangeableColumns);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1331 m_tableWidget->horizontalHeader ()->setDragDropMode (QAbstractItemView::InternalMove);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1332
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1333 // Turn off column editable
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1334 for (int col = 0; col < m_tableWidget->columnCount (); col++)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1335 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1336 bool editable = columneditable (col);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1337
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1338 for (int row = 0; row < m_tableWidget->rowCount (); row++)
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1339 if (QTableWidgetItem *item = m_tableWidget->item (row, col))
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1340 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1341 Qt::ItemFlags flags = item->flags ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1342 if (enabled && editable)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1343 item->setFlags (flags | Qt::ItemIsEditable);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1344 else
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1345 item->setFlags (flags & ~Qt::ItemIsEditable);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1346 }
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1347 else if (QWidget *widget = m_tableWidget->cellWidget (row, col))
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1348 {
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1349 QCheckBox *checkBox = nullptr;
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1350 if (widget && ! widget->children ().isEmpty ())
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1351 {
27276
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 26820
diff changeset
1352 QHBoxLayout *layout
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 26820
diff changeset
1353 = qobject_cast<QHBoxLayout *> (widget->children ().first ());
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 26820
diff changeset
1354
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1355 if (layout && layout->count () > 0)
27276
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 26820
diff changeset
1356 checkBox = qobject_cast<QCheckBox *> (layout->itemAt (0)-> widget ());
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1357 }
27276
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 26820
diff changeset
1358
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1359 if (checkBox)
27276
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 26820
diff changeset
1360 widget->setProperty ("Enabled", QVariant (enabled & editable));
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1361 else
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1362 {
27276
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 26820
diff changeset
1363 widget->setAttribute (Qt::WA_TransparentForMouseEvents,
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 26820
diff changeset
1364 !(editable & enabled));
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 26820
diff changeset
1365
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1366 widget->setFocusPolicy (Qt::NoFocus);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1367 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1368 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1369 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1370 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1371
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1372 void
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1373 Table::updateExtent (void)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1374 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1375 QSize s = realQSizeForTable (m_tableWidget);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1376 Matrix extent = Matrix (1, 4);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1377 extent(0, 0) = 0;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1378 extent(0, 1) = 0;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1379 extent(0, 2) = s.width ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1380 extent(0, 3) = s.height () ;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1381 graphics_object go = object ();
27319
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1382 emit gh_set_event (go.get_handle (), "extent", extent, false);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1383 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1384
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1385 void
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1386 Table::updatePalette (void)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1387 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1388 uitable::properties& tp = properties<uitable> ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1389
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1390 QPalette p = m_tableWidget->palette ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1391 p.setColor (QPalette::Text,
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1392 Utils::fromRgb (tp.get_foregroundcolor_rgb ()));
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1393 p.setColor (QPalette::Base,
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1394 Utils::fromRgb (tp.get_backgroundcolor_rgb ()));
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1395 p.setColor (QPalette::AlternateBase,
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1396 Utils::fromRgb (tp.get_alternatebackgroundcolor_rgb ()));
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1397 m_tableWidget->setPalette (p);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1398 m_tableWidget->setAlternatingRowColors (tp.is_rowstriping ());
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1399 // FIXME: Handle multiple alternating background colors
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1400 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1401
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1402 void
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1403 Table::updateRowname (void)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1404 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1405 uitable::properties& tp = properties<uitable> ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1406
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1407 // Reset the row count
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1408 m_tableWidget->setRowCount (tp.get_data ().rows ());
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1409
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1410 octave_value rowname = tp.get_rowname ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1411 QStringList l;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1412 bool visible = true;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1413
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1414 if (rowname.is_string () && rowname.string_value (false) == "numbered")
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1415 for (int i = 0; i < m_tableWidget->rowCount (); i++)
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1416 l << QString::number (i + 1);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1417 else if (rowname.is_string ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1418 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1419 if (m_tableWidget->rowCount () > 0)
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1420 l << Utils::fromStdString (rowname.string_value ());
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1421 for (int i = 1; i < m_tableWidget->rowCount (); i++)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1422 l << "";
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1423 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1424 else if (rowname.isempty ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1425 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1426 for (int i = 0; i < m_tableWidget->rowCount (); i++)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1427 l << "";
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1428 visible = false;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1429 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1430 else if (rowname.iscell ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1431 {
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1432 octave_idx_type n = rowname.numel ();
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1433 Cell cell_value = rowname.cell_value ();
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1434
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1435 for (octave_idx_type i = 0; i < n; i++)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1436 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1437 octave_value v = cell_value (i);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1438 if (v.is_string ())
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1439 l << Utils::fromStdString (v.string_value (true));
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1440 else if (v.is_matrix_type ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1441 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1442 Matrix data = v.matrix_value ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1443
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1444 /* Now Matlab does something very strange here:
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1445 * If data is a row or column matrix,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1446 * then each datapoint is added.
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1447 * Otherwise, nothing is set.
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1448 */
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1449 if (data.rows () > 1 && data.cols () > 1)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1450 l << "";
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1451 else
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1452 for (octave_idx_type j = 0; j < data.numel (); j++)
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1453 l << QString::number (data(j));
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1454 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1455 else if (v.isnumeric ())
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1456 l << QString::number (v.double_value (true));
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1457 else
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1458 l << QString::number (v.double_value (true));
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1459 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1460 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1461 else if (rowname.is_matrix_type ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1462 {
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1463 octave_idx_type n = rowname.numel ();
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1464 Matrix matrix_value = rowname.matrix_value ();
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1465
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1466 for (octave_idx_type i = 0; i < n; i++)
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1467 l << QString::number (matrix_value(i));
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1468 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1469 else
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1470 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1471 for (int i = 0; i < m_tableWidget->columnCount (); i++)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1472 l << "";
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1473 visible = false;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1474 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1475
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1476 // Add dummy rows as required
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1477 if (m_tableWidget->rowCount () < l.length ())
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1478 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1479 int oldRowCount = m_tableWidget->rowCount ();
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1480 m_tableWidget->setRowCount (l.length ());
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1481
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1482 for (int col = 0; col < m_tableWidget->columnCount (); col++)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1483 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1484 std::string format = columnformat (col);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1485 bool enabled = columneditable (col);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1486
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1487 for (int row = oldRowCount; row < l.length (); row++)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1488 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1489 m_tableWidget->setRowHeight (row, AUTO_HEIGHT);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1490
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1491 updateData (row, col, octave_value (""), format, enabled);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1492 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1493 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1494 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1495
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1496 m_tableWidget->setVerticalHeaderLabels (l);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1497 m_tableWidget->verticalHeader ()->setVisible (visible);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1498 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1499
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1500 void
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1501 Table::updateRearrangeableColumns (void)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1502 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1503 uitable::properties& tp = properties<uitable> ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1504
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1505 bool rearrangeableColumns = tp.is_rearrangeablecolumns ();
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1506 bool enabled = tp.is_enable ();
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1507
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1508 m_tableWidget->horizontalHeader ()->setSectionsMovable (enabled && rearrangeableColumns);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1509 m_tableWidget->horizontalHeader ()->setDragEnabled (enabled && rearrangeableColumns);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1510 m_tableWidget->horizontalHeader ()->setDragDropMode (QAbstractItemView::InternalMove);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1511 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1512
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1513 bool
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1514 Table::eventFilter (QObject *watched, QEvent *xevent)
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1515 {
27647
2a506bc4a7af eliminate global access to Octave interpreter in qt graphics classes
John W. Eaton <jwe@octave.org>
parents: 27645
diff changeset
1516 gh_manager& gh_mgr = m_interpreter.get_gh_manager ();
27335
50216d7a2f6b eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents: 27319
diff changeset
1517
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1518 //uitable::properties& tp = properties<uitable> ();
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1519 if (qobject_cast<QTableWidget *> (watched))
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1520 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1521 switch (xevent->type ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1522 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1523 case QEvent::Resize:
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1524 {
27335
50216d7a2f6b eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents: 27319
diff changeset
1525 octave::autolock guard (gh_mgr.graphics_lock ());
50216d7a2f6b eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents: 27319
diff changeset
1526
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1527 graphics_object go = object ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1528 if (go.valid_object ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1529 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1530 const uitable::properties& tp =
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1531 Utils::properties<uitable> (go);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1532 if (tp.fontunits_is ("normalized"))
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1533 m_tableWidget->setFont (Utils::computeFont<uitable> (tp));
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1534 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1535 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1536 break;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1537
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1538 case QEvent::MouseButtonPress:
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1539 {
27335
50216d7a2f6b eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents: 27319
diff changeset
1540 octave::autolock guard (gh_mgr.graphics_lock ());
50216d7a2f6b eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents: 27319
diff changeset
1541
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1542 QMouseEvent *m = dynamic_cast<QMouseEvent *> (xevent);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1543 graphics_object go = object ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1544 const uitable::properties& tp =
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1545 Utils::properties<uitable> (go);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1546 graphics_object fig = go.get_ancestor ("figure");
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1547
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1548 if (m->button () != Qt::LeftButton || ! tp.is_enable ())
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1549 {
27319
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1550 emit gh_set_event (fig.get_handle (), "selectiontype",
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1551 Utils::figureSelectionType (m), false);
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1552 emit gh_set_event (fig.get_handle (), "currentpoint",
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1553 Utils::figureCurrentPoint (fig, m),
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1554 false);
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1555 emit gh_callback_event (fig.get_handle (),
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1556 "windowbuttondownfcn");
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1557 emit gh_callback_event (m_handle, "buttondownfcn");
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1558
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1559 if (m->button () == Qt::RightButton)
27647
2a506bc4a7af eliminate global access to Octave interpreter in qt graphics classes
John W. Eaton <jwe@octave.org>
parents: 27645
diff changeset
1560 ContextMenu::executeAt (m_interpreter, properties (),
2a506bc4a7af eliminate global access to Octave interpreter in qt graphics classes
John W. Eaton <jwe@octave.org>
parents: 27645
diff changeset
1561 m->globalPos ());
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1562 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1563 else
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1564 {
27319
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1565 emit gh_set_event (fig.get_handle (), "selectiontype",
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1566 octave_value ("normal"), false);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1567 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1568 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1569 break;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1570
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1571 case QEvent::KeyPress:
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1572 {
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1573 QKeyEvent *k = dynamic_cast<QKeyEvent *> (xevent);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1574 if (m_keyPressHandlerDefined)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1575 {
27335
50216d7a2f6b eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents: 27319
diff changeset
1576 octave::autolock guard (gh_mgr.graphics_lock ());
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1577
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1578 octave_scalar_map keyData = Utils::makeKeyEventStruct (k);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1579 graphics_object fig = object ().get_ancestor ("figure");
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1580
27319
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1581 emit gh_set_event (fig.get_handle (), "currentcharacter",
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1582 keyData.getfield ("Character"), false);
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1583 emit gh_callback_event (m_handle, "keypressfcn", keyData);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1584 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1585 int row = m_tableWidget->currentRow ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1586 int col = m_tableWidget->currentColumn ();
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1587 switch (k->key ())
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1588 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1589 case Qt::Key_Space:
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1590 {
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1591 QCheckBox *checkBox = nullptr;
27276
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 26820
diff changeset
1592
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 26820
diff changeset
1593 QWidget *widget
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 26820
diff changeset
1594 = qobject_cast<QWidget *> (m_tableWidget->cellWidget (row, col));
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 26820
diff changeset
1595
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1596 if (widget && ! widget->children ().isEmpty ())
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1597 {
27276
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 26820
diff changeset
1598 QHBoxLayout *layout
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 26820
diff changeset
1599 = qobject_cast<QHBoxLayout *> (widget->children ().first ());
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 26820
diff changeset
1600
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1601 if (layout && layout->count () > 0)
27276
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 26820
diff changeset
1602 checkBox = qobject_cast<QCheckBox *> (layout->itemAt (0)-> widget ());
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1603 }
27276
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 26820
diff changeset
1604
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1605 if (checkBox && checkBox->property ("Enabled").toBool ())
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1606 checkBoxClicked (row, col, checkBox);
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1607
27276
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 26820
diff changeset
1608 QComboBox *comboBox
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 26820
diff changeset
1609 = qobject_cast<QComboBox *> (m_tableWidget->cellWidget (row, col));
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 26820
diff changeset
1610
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1611 if (comboBox)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1612 comboBox->showPopup ();
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1613 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1614 break;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1615
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1616 case Qt::Key_Return:
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1617 case Qt::Key_Enter:
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1618 {
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1619 if (k->modifiers () == Qt::NoModifier)
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1620 {
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1621 if (row + 1 < m_tableWidget->rowCount ())
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1622 m_tableWidget->setCurrentCell (row + 1, col);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1623 else
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1624 {
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1625 if (col + 1 < m_tableWidget->columnCount ())
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1626 m_tableWidget->setCurrentCell (0, col + 1);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1627 else
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1628 m_tableWidget->setCurrentCell (0, 0);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1629 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1630 }
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1631 else if (k->modifiers () == Qt::ShiftModifier)
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1632 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1633 if (row - 1 >= 0)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1634 m_tableWidget->setCurrentCell (row - 1, col);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1635 else
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1636 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1637 if (col - 1 >= 0)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1638 m_tableWidget->setCurrentCell
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1639 (m_tableWidget->rowCount () - 1,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1640 col - 1);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1641 else
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1642 m_tableWidget->setCurrentCell
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1643 (m_tableWidget->rowCount () - 1,
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1644 m_tableWidget->columnCount () - 1);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1645 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1646 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1647 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1648 break;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1649
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1650 default:
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1651 break;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1652 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1653 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1654 break;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1655
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1656 case QEvent::KeyRelease:
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1657 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1658 if (m_keyReleaseHandlerDefined)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1659 {
27335
50216d7a2f6b eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents: 27319
diff changeset
1660 octave::autolock guard (gh_mgr.graphics_lock ());
50216d7a2f6b eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents: 27319
diff changeset
1661
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1662 QKeyEvent *k = dynamic_cast<QKeyEvent *> (xevent);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1663
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1664 octave_scalar_map keyData = Utils::makeKeyEventStruct (k);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1665 graphics_object fig = object ().get_ancestor ("figure");
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1666
27319
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1667 emit gh_set_event (fig.get_handle (), "currentcharacter",
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1668 keyData.getfield ("Character"), false);
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1669 emit gh_callback_event (m_handle, "keyreleasefcn", keyData);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1670 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1671 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1672 break;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1673
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1674 default:
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1675 break;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1676 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1677 }
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1678 else if (qobject_cast<QComboBox *> (watched))
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1679 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1680 switch (xevent->type ())
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1681 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1682 case QEvent::MouseButtonPress:
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1683 {
27335
50216d7a2f6b eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents: 27319
diff changeset
1684 octave::autolock guard (gh_mgr.graphics_lock ());
50216d7a2f6b eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents: 27319
diff changeset
1685
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1686 QMouseEvent *m = dynamic_cast<QMouseEvent *> (xevent);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1687 graphics_object go = object ();
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1688 const uitable::properties& tp = Utils::properties<uitable> (go);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1689 graphics_object fig = go.get_ancestor ("figure");
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1690
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1691 if (m->button () != Qt::LeftButton || ! tp.is_enable ())
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1692 {
27319
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1693 emit gh_set_event (fig.get_handle (), "selectiontype",
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1694 Utils::figureSelectionType (m), false);
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1695 emit gh_set_event (fig.get_handle (), "currentpoint",
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1696 Utils::figureCurrentPoint (fig, m),
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1697 false);
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1698 emit gh_callback_event (fig.get_handle (),
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1699 "windowbuttondownfcn");
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1700 emit gh_callback_event (m_handle, "buttondownfcn");
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1701
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1702 if (m->button () == Qt::RightButton)
27647
2a506bc4a7af eliminate global access to Octave interpreter in qt graphics classes
John W. Eaton <jwe@octave.org>
parents: 27645
diff changeset
1703 ContextMenu::executeAt (m_interpreter, tp, m->globalPos ());
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1704 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1705 else
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1706 {
27319
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1707 emit gh_set_event (fig.get_handle (), "selectiontype",
6b2d20317b26 use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit
John W. Eaton <jwe@octave.org>
parents: 27277
diff changeset
1708 Utils::figureSelectionType (m), false);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1709
26122
4d1c6c60f6b3 Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents: 26112
diff changeset
1710 QComboBox *comboBox_0 = qobject_cast<QComboBox *> (watched);
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1711 for (int row = 0; row < m_tableWidget->rowCount (); row++)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1712 {
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1713 for (int col = 0; col < m_tableWidget->columnCount (); col++)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1714 {
27276
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 26820
diff changeset
1715 QComboBox *comboBox_1
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 26820
diff changeset
1716 = qobject_cast<QComboBox *> (m_tableWidget->cellWidget (row, col));
7455523fdf01 style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents: 26820
diff changeset
1717
26112
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1718 if (comboBox_0 == comboBox_1)
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1719 m_tableWidget->setCurrentCell (row, col);
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1720 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1721 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1722 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1723 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1724 break;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1725
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1726 default:
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1727 break;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1728 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1729 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1730 return false;
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1731 }
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1732
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1733 #undef AUTO_HEIGHT
36e0e5b428e7 Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff changeset
1734 }