Mercurial > octave
annotate libgui/graphics/Table.cc @ 29542:3d34b70b5a49
connect many Qt signals and slots without SIGNAL and SLOT macros
This changes switches most code in the libgui/src and libgui/graphics
directories to use the new Qt style of connecting signals and slots
that uses pointers to member functions or function objects instead of
strings to refer to the signal and slot functions. For an
introduction, see https://wiki.qt.io/New_Signal_Slot_Syntax.
There are many connections left to adapt. In some cases, there are
overloaded functions (or default parameters) that need to be handled.
Use of QOverload<> or an anonymous function should fix these. In
others, we are connecting to parent objects where we only have a
pointer to QWidget instead of a specific type of object. To fix
those, we need to either move the code that makes th connection to a
place where the actual types of both objects are known or pass more
specific types as the parent object. In a few cases, there appear to
real mismatches in the types of objects and the signal/slot
functions.
Files affected: ButtonControl.cc, ButtonGroup.cc, ContextMenu.cc,
EditControl.cc, Figure.cc, ListBoxControl.cc, Menu.cc, Object.cc,
ObjectProxy.cc, Panel.cc, PopupMenuControl.cc, PushTool.cc,
SliderControl.cc, Table.cc, ToggleTool.cc, ToolBar.cc,
annotation-dialog.cc, qt-graphics-toolkit.cc, color-picker.cc,
command-widget.cc, dialog.cc, documentation-bookmarks.cc,
documentation.cc, files-dock-widget.cc, find-files-dialog.cc,
history-dock-widget.cc, interpreter-qobject.cc, file-editor-tab.cc,
file-editor-tab.h, file-editor.cc, find-dialog.cc,
octave-qscintilla.cc, main-window.cc, octave-dock-widget.cc,
octave-qobject.cc, qt-interpreter-events.cc, set-path-dialog.cc,
set-path-model.cc, settings-dialog.cc, shortcut-manager.cc,
tab-bar.cc, variable-editor-model.cc, variable-editor.cc,
welcome-wizard.cc, welcome-wizard.h, workspace-view.cc, and
workspace-view.h.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Fri, 16 Apr 2021 23:06:32 -0400 |
parents | e4904768ca48 |
children | 6ea4a84df9c7 |
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 // |
29358
0a5b15007766
update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents:
27935
diff
changeset
|
3 // Copyright (C) 2016-2021 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 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
60 namespace QtHandles |
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; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
199 if (val.is_string ()) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
200 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
201 text = QtHandles::Utils::fromStdString (val.string_value ()); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
202 flag = Qt::AlignLeft ; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
203 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
204 else if (val.iscomplex ()) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
205 { |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
206 // Matlab has multiple complex types, we only have double. |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
207 Complex c = val.complex_value (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
208 if (format == "short") |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
209 text = formatComplex (c, 'f', 4); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
210 else if (format == "short e" || format == "shorte") |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
211 text = formatComplex (c, 'e', 4); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
212 else if (format == "short eng" || format == "shorteng") |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
213 text = formatComplex (c, 'E', 4); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
214 else if (format == "short g" || format == "shortg") |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
215 text = formatComplex (c, 'g', 5); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
216 else if (format == "long") |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
217 text = formatComplex (c, 'f', 15); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
218 else if (format == "long e" || format == "longe") |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
219 text = formatComplex (c, 'e', 15); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
220 else if (format == "long eng" || format == "longeng") |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
221 text = formatComplex (c, 'E', 15); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
222 else if (format == "long g" || format == "longg") |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
223 text = formatComplex (c, 'g', 16); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
224 else if (format == "bank") |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
225 text = QString::number (c.real (), 'f', 2); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
226 else if (format == "+") |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
227 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
228 if (c.real () > 0) |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
229 text = Utils::fromStdString ("+"); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
230 else if (c.real () < 0) |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
231 text = Utils::fromStdString ("-"); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
232 else |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
233 text = Utils::fromStdString (""); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
234 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
235 else if (format == "rat") |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
236 text = Utils::fromStdString (rational_approx (c.real (), 0)) + " + " |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
237 + Utils::fromStdString (rational_approx (c.imag (), 0)) + "i"; |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
238 else if (format == "numeric") |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
239 text = QString::number (c.real (), 'g', 5) + " + " |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
240 + QString::number (c.imag (), 'g', 5) + "i"; |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
241 else |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
242 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
243 text = QString::number (c.real (), 'g', 5) + " + " |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
244 + QString::number (c.imag (), 'g', 5) + "i"; |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
245 flag = Qt::AlignLeft ; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
246 } |
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 else if (val.is_double_type () ) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
249 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
250 double value = val.double_value (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
251 FORMAT_VALUE(4, 15) |
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_single_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 float value = val.float_value (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
256 FORMAT_VALUE(4, 7) |
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_int8_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 short int value = val.short_value (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
261 FORMAT_INT_VALUE() |
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_uint8_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 unsigned short int value = val.ushort_value (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
266 FORMAT_UINT_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_int16_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 int value = val.int_value (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
271 FORMAT_INT_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_uint16_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 unsigned int value = val.uint_value (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
276 FORMAT_UINT_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_int32_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 long int value = val.long_value (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
281 FORMAT_INT_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_uint32_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 unsigned long int value = val.ulong_value (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
286 FORMAT_UINT_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_int64_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 int64_t value = val.int64_value (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
291 FORMAT_INT_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_uint64_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 uint64_t value = val.uint64_value (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
296 FORMAT_UINT_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.islogical ()) |
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 bool b = val.bool_value (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
301 if (format == "char" || format == "popup" || format == "") |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
302 { |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
303 text = Utils::fromStdString (b ? "true" : "false"); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
304 flag = Qt::AlignLeft ; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
305 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
306 else if (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 ? "+" : ""); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
309 flag = Qt::AlignLeft ; |
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 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
312 text = Utils::fromStdString (b ? "1" : "0"); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
313 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
314 else |
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 std::stringstream warn_string; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
317 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
|
318 << " to " << format |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
319 << " for value " << val.string_value (true); |
26149
242aa7b2c783
Silence unnecessary warnings about security-format (bug #55046).
Rik <rik@octave.org>
parents:
26127
diff
changeset
|
320 warning ("%s", warn_string.str ().c_str ()); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
321 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
322 text = Utils::fromStdString (val.string_value (true)); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
323 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
324 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
325 return std::make_pair (flag, text); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
326 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
327 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
328 #undef FORMAT_VALUE |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
329 #undef FORMAT_VALUE_EXCEPT_RAT |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
330 #undef FORMAT_UINT_VALUE |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
331 #undef FORMAT_INT_VALUE |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
332 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
333 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
|
334 bool enabled = false) |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
335 { |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
336 QTableWidgetItem *retval = new QTableWidgetItem (); |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
337 std::pair<Qt::AlignmentFlag, QString> flag_and_text = |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
338 qStringValueFor (val, format); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
339 retval->setTextAlignment (flag_and_text.first); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
340 retval->setText (flag_and_text.second); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
341 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
342 if (enabled) |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
343 retval->setFlags (retval->flags () | Qt::ItemIsEditable); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
344 else |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
345 retval->setFlags (retval->flags () & ~Qt::ItemIsEditable); |
26112
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 return retval; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
348 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
349 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
350 static octave_value |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
351 attempt_type_conversion (const octave_value& ov, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
352 const octave_value& old_value) |
26112
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 octave_value retval; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
355 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
356 // 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
|
357 // FIXME: these will happily integer overflow in the (u)int64 case |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
358 // - this probably doesn't matter. |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
359 #define SCANF_AND_CONVERT(name,ctype,format) \ |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
360 else if (old_value.is_ ## name ## _type ()) \ |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
361 { \ |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
362 ctype val; \ |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
363 int n; \ |
26467
6595716a7f33
Table.cc: Fix static analyzer detected issues (bug #55347).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26372
diff
changeset
|
364 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
|
365 const char *c_str = cxx_str.c_str (); \ |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
366 int error = sscanf (c_str, format, &val, &n); \ |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
367 if (error != 1 || c_str[n]) \ |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
368 { \ |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
369 val = 0; \ |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
370 } \ |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
371 retval = octave_value ( octave_ ## name (val)); \ |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
372 } |
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 if (old_value.is_string ()) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
375 retval = ov; |
26467
6595716a7f33
Table.cc: Fix static analyzer detected issues (bug #55347).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26372
diff
changeset
|
376 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
|
377 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
|
378 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
|
379 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
|
380 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
|
381 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
|
382 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
|
383 SCANF_AND_CONVERT(uint64, uint64_t, "%" PRIu64 " %n") |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
384 |
27935
f1844e33f621
maint: Use Octave coding conventions in libgui/ directory.
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
385 #undef SCANF_AND_CONVERT |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
386 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
387 else if (old_value.isnumeric () && ! old_value.isinteger ()) |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
388 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
389 // 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
|
390 Complex complex = octave::string::str2double (ov.string_value ()); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
391 if (old_value.is_single_type ()) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
392 retval = octave_value (FloatComplex (complex)); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
393 else |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
394 retval = octave_value (complex); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
395 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
396 else if (old_value.islogical ()) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
397 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
398 // 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
|
399 // accept 1 too. |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
400 if (ov.string_value () == "true" || ov.string_value () == "1") |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
401 retval = octave_value (true); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
402 else |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
403 retval = octave_value (false); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
404 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
405 else |
26127
37e3aa267374
Move function str2double inside octave::string namespace (patch #9084).
Markus Mützel <markus.muetzel@gmx.de>
parents:
26122
diff
changeset
|
406 retval = octave_value (octave::string::str2double (ov.string_value ())); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
407 return retval; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
408 } |
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 QWidget * |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
411 Table::checkBoxForLogical (octave_value val, bool enabled = false) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
412 { |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
413 QWidget *retval = new QWidget (m_tableWidget); |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
414 QCheckBox *checkBox = new QCheckBox (); |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
415 QHBoxLayout *layout = new QHBoxLayout (retval); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
416 layout->addWidget (checkBox); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
417 layout->setAlignment (Qt::AlignCenter); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
418 layout->setContentsMargins (0, 0, 0, 0); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
419 retval->setLayout (layout); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
420 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
421 if ((val.islogical () || val.is_bool_scalar ()) && val.bool_value ()) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
422 checkBox->setCheckState (Qt::Checked); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
423 else |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
424 checkBox->setCheckState (Qt::Unchecked); |
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 checkBox->setAttribute (Qt::WA_TransparentForMouseEvents, true); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
427 checkBox->setFocusPolicy (Qt::NoFocus); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
428 checkBox->setProperty ("Enabled", QVariant (enabled)); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
429 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
430 return retval; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
431 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
432 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
433 Table* |
27647
2a506bc4a7af
eliminate global access to Octave interpreter in qt graphics classes
John W. Eaton <jwe@octave.org>
parents:
27645
diff
changeset
|
434 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
|
435 const graphics_object& go) |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
436 { |
27647
2a506bc4a7af
eliminate global access to Octave interpreter in qt graphics classes
John W. Eaton <jwe@octave.org>
parents:
27645
diff
changeset
|
437 Object *parent = parentObject (interp, go); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
438 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
439 if (parent) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
440 { |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
441 Container *container = parent->innerContainer (); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
442 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
443 if (container) |
27647
2a506bc4a7af
eliminate global access to Octave interpreter in qt graphics classes
John W. Eaton <jwe@octave.org>
parents:
27645
diff
changeset
|
444 return new Table (oct_qobj, interp, go, new QTableWidget (container)); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
445 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
446 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
447 return 0; |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
448 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
449 |
27647
2a506bc4a7af
eliminate global access to Octave interpreter in qt graphics classes
John W. Eaton <jwe@octave.org>
parents:
27645
diff
changeset
|
450 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
|
451 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
|
452 : 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
|
453 m_curData (), m_blockUpdates (false) |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
454 { |
26820
0a383bddfb40
Also update uitbale position when figure is (un)maximized (bug #53709)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26470
diff
changeset
|
455 qObject ()->setObjectName ("UItable"); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
456 uitable::properties& tp = properties<uitable> (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
457 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
458 m_curData = octave_value (tp.get_data ()); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
459 Matrix bb = tp.get_boundingbox (false); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
460 m_tableWidget->setObjectName ("UITable"); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
461 m_tableWidget->setAutoFillBackground (true); |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
462 m_tableWidget->setGeometry (octave::math::round (bb(0)), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
463 octave::math::round (bb(1)), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
464 octave::math::round (bb(2)), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
465 octave::math::round (bb(3))); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
466 m_tableWidget->setFont (Utils::computeFont<uitable> (tp)) ; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
467 m_tableWidget->setSelectionBehavior (QAbstractItemView::SelectItems); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
468 updatePalette (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
469 m_keyPressHandlerDefined = ! tp.get_keypressfcn ().isempty (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
470 m_keyReleaseHandlerDefined = ! tp.get_keyreleasefcn ().isempty (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
471 updateData (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
472 updateRowname (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
473 updateColumnname (); |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
474 updateColumnwidth (); |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
475 updateEnable (); // Also does rearrangeableColumns |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
476 m_tableWidget->setToolTip (Utils::fromStdString (tp.get_tooltipstring ())); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
477 m_tableWidget->setVisible (tp.is_visible ()); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
478 updateExtent (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
479 m_tableWidget->installEventFilter (this); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
480 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
481 |
29542
3d34b70b5a49
connect many Qt signals and slots without SIGNAL and SLOT macros
John W. Eaton <jwe@octave.org>
parents:
29423
diff
changeset
|
482 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
|
483 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
|
484 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
|
485 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
|
486 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
|
487 this, &Table::itemSelectionChanged); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
488 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
489 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
490 Table::~Table (void) { } |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
491 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
492 void |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
493 Table::itemSelectionChanged () |
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 if (! (properties<uitable> ().get_cellselectioncallback ().isempty ())) |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
496 { |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
497 QModelIndexList modelIndexList = |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
498 m_tableWidget->selectionModel ()->selectedIndexes (); |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
499 int length = modelIndexList.size (); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
500 Matrix indices = Matrix (length, 2); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
501 for (int i = 0; i < length; i++) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
502 { |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
503 indices(i, 0) = modelIndexList.value (i).row () + 1; |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
504 indices(i, 1) = modelIndexList.value (i).column () + 1; |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
505 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
506 octave_scalar_map eventData; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
507 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
|
508 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
|
509 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
|
510 cellSelectionCallbackEventObject); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
511 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
512 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
513 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
514 void |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
515 Table::cellClicked (int row, int col) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
516 { |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
517 QCheckBox *checkBox = nullptr; |
27276
7455523fdf01
style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents:
26820
diff
changeset
|
518 QWidget *widget |
7455523fdf01
style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents:
26820
diff
changeset
|
519 = 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
|
520 if (widget && ! widget->children ().isEmpty ()) |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
521 { |
27276
7455523fdf01
style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents:
26820
diff
changeset
|
522 QHBoxLayout *layout |
7455523fdf01
style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents:
26820
diff
changeset
|
523 = qobject_cast<QHBoxLayout *> (widget->children ().first ()); |
7455523fdf01
style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents:
26820
diff
changeset
|
524 |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
525 if (layout && layout->count () > 0) |
27276
7455523fdf01
style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents:
26820
diff
changeset
|
526 checkBox = qobject_cast<QCheckBox *> (layout->itemAt (0)-> widget ()); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
527 } |
27276
7455523fdf01
style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents:
26820
diff
changeset
|
528 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
529 if (checkBox && checkBox->property ("Enabled").toBool ()) |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
530 checkBoxClicked (row, col, checkBox); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
531 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
532 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
533 void |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
534 Table::sendCellEditCallback (int row, |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
535 int col, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
536 octave_value old_value, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
537 octave_value new_value, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
538 octave_value edit_data, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
539 octave_value error) |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
540 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
541 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
542 if (!(properties<uitable> ().get_celleditcallback ().isempty ())) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
543 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
544 Matrix indices = Matrix (1, 2); |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
545 indices(0, 0) = row + 1; |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
546 indices(0, 1) = col + 1; |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
547 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
548 octave_scalar_map eventData; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
549 eventData.setfield ("Indices", indices); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
550 eventData.setfield ("PreviousData", old_value); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
551 eventData.setfield ("NewData", new_value); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
552 eventData.setfield ("EditData", edit_data); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
553 eventData.setfield ("Error", error); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
554 |
29223
5aa787452544
Use Octave map instead of octave_struct in gui graphics (patch #8919).
John W. Eaton <jwe@octave.org>
parents:
28300
diff
changeset
|
555 octave_value cellEditCallbackEventObject (eventData); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
556 |
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
|
557 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
|
558 cellEditCallbackEventObject); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
559 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
560 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
|
561 warning ("%s", error.string_value ().c_str ()); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
562 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
563 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
564 void |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
565 Table::comboBoxCurrentIndexChanged (const QString& value) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
566 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
567 if (m_blockUpdates) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
568 return; |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
569 |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
570 m_blockUpdates = true; |
27335
50216d7a2f6b
eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents:
27319
diff
changeset
|
571 |
27647
2a506bc4a7af
eliminate global access to Octave interpreter in qt graphics classes
John W. Eaton <jwe@octave.org>
parents:
27645
diff
changeset
|
572 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
|
573 |
50216d7a2f6b
eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents:
27319
diff
changeset
|
574 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
|
575 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
576 octave_value data = octave_value (m_curData); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
577 bool ok = false; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
578 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
579 QComboBox *comboBox = qobject_cast<QComboBox *> (sender ()); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
580 int row = comboBox->property ("row").toInt (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
581 int col = comboBox->property ("col").toInt (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
582 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
583 octave_value edit_data = octave_value (Utils::toStdString (value)); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
584 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
585 if (row < data.rows () && col < data.columns ()) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
586 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
587 if (data.iscell ()) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
588 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
589 Cell cell = data.cell_value (); |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
590 octave_value old_data = cell(row, col); |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
591 if (cell(row, col).is_string ()) |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
592 { |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
593 cell(row, col) = edit_data; |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
594 if (edit_data.string_value () != old_data.string_value ()) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
595 { |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
596 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
|
597 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
|
598 false); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
599 } |
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 octave_value error = octave_value (""); |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
602 sendCellEditCallback (row, col, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
603 old_data, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
604 edit_data, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
605 edit_data, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
606 error); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
607 ok = true; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
608 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
609 else |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
610 { |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
611 cell(row, col) = attempt_type_conversion (edit_data, old_data); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
612 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
613 // Inform the QTableWidget of our change |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
614 updateData (row, col, cell(row, col), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
615 columnformat (col), columneditable (col)); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
616 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
617 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
|
618 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
|
619 false); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
620 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
621 octave_value error = octave_value (""); |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
622 sendCellEditCallback (row, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
623 col, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
624 old_data, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
625 cell(row, col), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
626 edit_data, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
627 error); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
628 ok = true; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
629 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
630 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
631 else |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
632 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
633 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
|
634 ? data.fast_elem_extract (row + col * data.rows ()) |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
635 : octave_value (); |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
636 data.fast_elem_insert (row + col * data.rows (), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
637 attempt_type_conversion (edit_data, old_data)); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
638 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
639 // Inform the QTableWidget of our change |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
640 updateData (row, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
641 col, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
642 data.fast_elem_extract (row + col * data.rows ()), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
643 columnformat (col), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
644 columneditable (col)); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
645 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
646 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
|
647 emit gh_set_event (m_handle, "data", data, false); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
648 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
649 octave_value error = octave_value (""); |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
650 sendCellEditCallback (row, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
651 col, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
652 old_data, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
653 data.fast_elem_extract (row + col * data.rows ()), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
654 edit_data, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
655 error); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
656 ok = true; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
657 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
658 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
659 else |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
660 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
661 // Reset the QTableWidgetItem |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
662 updateData (row, col, octave_value (""), columnformat (col), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
663 columneditable (col)); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
664 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
665 octave_value error = |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
666 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
|
667 sendCellEditCallback (row, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
668 col, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
669 octave_value (), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
670 octave_value (), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
671 edit_data, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
672 error); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
673 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
674 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
675 if (! ok) |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
676 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
677 comboBox->setCurrentIndex (-1); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
678 comboBox->setEditable (true); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
679 comboBox->setEditText (comboBox->property ("original_value").toString ()); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
680 comboBox->lineEdit ()->setReadOnly (true); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
681 } |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
682 m_blockUpdates = false; |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
683 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
684 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
685 void |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
686 Table::checkBoxClicked (int row, int col, QCheckBox *checkBox) |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
687 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
688 if (m_blockUpdates) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
689 return; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
690 m_blockUpdates = true; |
27335
50216d7a2f6b
eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents:
27319
diff
changeset
|
691 |
27647
2a506bc4a7af
eliminate global access to Octave interpreter in qt graphics classes
John W. Eaton <jwe@octave.org>
parents:
27645
diff
changeset
|
692 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
|
693 |
50216d7a2f6b
eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents:
27319
diff
changeset
|
694 octave::autolock guard (gh_mgr.graphics_lock ()); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
695 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
696 bool new_value = ! checkBox->isChecked (); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
697 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
698 octave_value data = octave_value (m_curData); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
699 if (data.islogical ()) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
700 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
701 // EASY WE JUST CONVERT |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
702 boolMatrix matrix = data.bool_matrix_value (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
703 if (row < matrix.rows () && col < matrix.columns ()) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
704 { |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
705 bool old_value = matrix(row, col); |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
706 matrix(row, col) = new_value; |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
707 checkBox->setChecked (new_value); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
708 if (new_value != old_value) |
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 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
|
711 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
|
712 false); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
713 } |
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 sendCellEditCallback (row, col, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
716 octave_value (old_value), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
717 octave_value (new_value), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
718 octave_value (new_value), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
719 octave_value ("")); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
720 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
721 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
722 else |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
723 { |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
724 sendCellEditCallback (row, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
725 col, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
726 octave_value (), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
727 octave_value (), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
728 octave_value (new_value), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
729 octave_value ("Table data is not editable at this location.")); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
730 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
731 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
732 else if (data.iscell ()) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
733 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
734 Cell cell = data.cell_value (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
735 if (row < cell.rows () && col < cell.columns ()) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
736 { |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
737 if (cell(row, col).islogical ()) |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
738 { |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
739 bool old_value = cell(row, col).bool_value (); |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
740 cell(row, col) = octave_value (new_value); |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
741 checkBox->setChecked (new_value); |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
742 if (new_value != old_value) |
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 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
|
745 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
|
746 false); |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
747 } |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
748 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
749 sendCellEditCallback (row, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
750 col, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
751 octave_value (old_value), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
752 octave_value (new_value), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
753 octave_value (new_value), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
754 octave_value ("")); |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
755 } |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
756 else |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
757 { |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
758 sendCellEditCallback (row, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
759 col, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
760 cell(row, col), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
761 octave_value (), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
762 octave_value (new_value), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
763 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
|
764 } |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
765 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
766 else |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
767 { |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
768 sendCellEditCallback (row, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
769 col, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
770 cell(row, col), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
771 octave_value (), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
772 octave_value (new_value), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
773 octave_value ("Table data is not editable at this location.")); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
774 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
775 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
776 else if (data.is_matrix_type ()) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
777 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
778 if (row < data.rows () && col < data.columns ()) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
779 { |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
780 sendCellEditCallback (row, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
781 col, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
782 data.fast_elem_extract (row + col * data.rows ()), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
783 octave_value (), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
784 octave_value (new_value), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
785 octave_value ("Cannot convert logical edit to other type.")); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
786 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
787 else |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
788 { |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
789 sendCellEditCallback (row, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
790 col, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
791 data.fast_elem_extract (row + col * data.rows ()), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
792 octave_value (), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
793 octave_value (new_value), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
794 octave_value ("Table data is not editable at this location.")); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
795 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
796 } |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
797 m_blockUpdates = false; |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
798 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
799 |
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 void |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
802 Table::itemChanged (QTableWidgetItem *item) |
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 if (m_blockUpdates) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
805 return; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
806 m_blockUpdates = true; |
27335
50216d7a2f6b
eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents:
27319
diff
changeset
|
807 |
27647
2a506bc4a7af
eliminate global access to Octave interpreter in qt graphics classes
John W. Eaton <jwe@octave.org>
parents:
27645
diff
changeset
|
808 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
|
809 |
50216d7a2f6b
eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents:
27319
diff
changeset
|
810 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
|
811 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
812 octave_value data = octave_value (m_curData); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
813 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
814 int row = item->row (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
815 int col = item->column (); |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
816 octave_value edit_data = octave_value (Utils::toStdString (item->text ())); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
817 octave_value new_value; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
818 octave_value old_value; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
819 octave_value new_data; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
820 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
821 if (row < data.rows () && col < data.columns ()) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
822 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
823 if (data.iscell ()) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
824 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
825 old_value = data.cell_value () (row, col); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
826 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
827 else if (data.is_matrix_type ()) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
828 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
829 old_value = data.fast_elem_extract (row + col * data.rows ()); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
830 } |
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 // 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
|
833 if (old_value.is_string ()) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
834 new_value = edit_data; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
835 else |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
836 { |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
837 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
|
838 std::pair<Qt::AlignmentFlag, QString> flag_and_text = |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
839 qStringValueFor (new_value, columnformat (col)); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
840 item->setTextAlignment (flag_and_text.first); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
841 item->setText (flag_and_text.second); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
842 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
843 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
844 if (data.iscell ()) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
845 { |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
846 Cell cell = data.cell_value (); |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
847 cell(row, col) = new_value; |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
848 new_data = octave_value (cell); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
849 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
850 else |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
851 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
852 data.fast_elem_insert (row + col * data.rows (), new_value); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
853 new_data = data; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
854 } |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
855 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
|
856 emit gh_set_event (m_handle, "data", new_data, false); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
857 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
858 sendCellEditCallback (row, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
859 col, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
860 octave_value (old_value), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
861 octave_value (new_value), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
862 octave_value (new_value), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
863 octave_value ("")); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
864 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
865 else |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
866 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
867 item->setText (""); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
868 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
869 octave_value error = |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
870 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
|
871 sendCellEditCallback (row, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
872 col, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
873 octave_value (), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
874 octave_value (), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
875 edit_data, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
876 error); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
877 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
878 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
879 m_blockUpdates = false; |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
880 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
881 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
882 void |
26820
0a383bddfb40
Also update uitbale position when figure is (un)maximized (bug #53709)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26470
diff
changeset
|
883 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
|
884 { |
0a383bddfb40
Also update uitbale position when figure is (un)maximized (bug #53709)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26470
diff
changeset
|
885 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
|
886 } |
0a383bddfb40
Also update uitbale position when figure is (un)maximized (bug #53709)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26470
diff
changeset
|
887 |
0a383bddfb40
Also update uitbale position when figure is (un)maximized (bug #53709)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26470
diff
changeset
|
888 void |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
889 Table::update (int pId) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
890 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
891 uitable::properties& tp = properties<uitable> (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
892 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
893 switch (pId) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
894 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
895 case uitable::properties::ID_BACKGROUNDCOLOR: |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
896 case uitable::properties::ID_FOREGROUNDCOLOR: |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
897 updatePalette (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
898 break; |
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_COLUMNNAME: |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
901 updateColumnname (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
902 updateColumnwidth (); |
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_COLUMNWIDTH: |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
906 updateColumnwidth (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
907 break; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
908 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
909 case uitable::properties::ID_COLUMNEDITABLE: |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
910 case uitable::properties::ID_COLUMNFORMAT: |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
911 case uitable::properties::ID_DATA: |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
912 m_blockUpdates = true; |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
913 m_curData = octave_value (tp.get_data ()); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
914 updateData (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
915 updateRowname (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
916 updateColumnname (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
917 updateColumnwidth (); |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
918 updateEnable (); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
919 m_blockUpdates = false; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
920 break; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
921 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
922 case uitable::properties::ID_ENABLE: |
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 break; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
925 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
926 case uitable::properties::ID_KEYPRESSFCN: |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
927 m_keyPressHandlerDefined = ! tp.get_keypressfcn ().isempty (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
928 break; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
929 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
930 case uitable::properties::ID_KEYRELEASEFCN: |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
931 m_keyReleaseHandlerDefined = ! tp.get_keyreleasefcn ().isempty (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
932 break; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
933 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
934 case uitable::properties::ID_FONTNAME: |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
935 case uitable::properties::ID_FONTSIZE: |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
936 case uitable::properties::ID_FONTWEIGHT: |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
937 case uitable::properties::ID_FONTANGLE: |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
938 if (m_tableWidget) |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
939 { |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
940 m_tableWidget->setFont (Utils::computeFont<uitable> (tp)); |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
941 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
|
942 { |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
943 m_tableWidget->setRowHeight (row, AUTO_HEIGHT); |
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 } |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
946 break; |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
947 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
948 case uitable::properties::ID_POSITION: |
26122
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 Matrix bb = tp.get_boundingbox (false); |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
951 m_tableWidget->setGeometry (octave::math::round (bb(0)), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
952 octave::math::round (bb(1)), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
953 octave::math::round (bb(2)), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
954 octave::math::round (bb(3))); |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
955 updateExtent (); |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
956 } |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
957 break; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
958 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
959 case uitable::properties::ID_REARRANGEABLECOLUMNS: |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
960 updateRearrangeableColumns (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
961 break; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
962 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
963 case uitable::properties::ID_ROWNAME: |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
964 updateRowname (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
965 break; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
966 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
967 case uitable::properties::ID_ROWSTRIPING: |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
968 updatePalette (); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
969 break; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
970 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
971 case uitable::properties::ID_TOOLTIPSTRING: |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
972 m_tableWidget->setToolTip (Utils::fromStdString (tp.get_tooltipstring ())); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
973 break; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
974 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
975 case base_properties::ID_VISIBLE: |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
976 m_tableWidget->setVisible (tp.is_visible ()); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
977 break; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
978 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
979 default: |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
980 break; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
981 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
982 } |
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 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
985 void |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
986 Table::updateColumnname (void) |
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 uitable::properties& tp = properties<uitable> (); |
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 // Reset the Column Count |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
991 m_tableWidget->setColumnCount (tp.get_data ().columns ()); |
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 octave_value columnname = tp.get_columnname (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
994 QStringList l; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
995 bool visible = true; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
996 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
997 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
|
998 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
|
999 l << QString::number (i + 1); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1000 else if (columnname.is_string ()) |
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 (m_tableWidget->columnCount () > 0) |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1003 l << Utils::fromStdString (columnname.string_value ()); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1004 for (int i = 1; i < m_tableWidget->columnCount (); i++) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1005 l << ""; |
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 else if (columnname.isempty ()) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1008 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1009 for (int i = 0; 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 visible = false; |
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 else if (columnname.iscell ()) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1015 { |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1016 octave_idx_type n = columnname.numel (); |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1017 Cell cell_value = columnname.cell_value (); |
26112
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 for (octave_idx_type i = 0; i < n; i++) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1020 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1021 octave_value v = cell_value (i); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1022 if (v.is_string ()) |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1023 l << Utils::fromStdString (v.string_value (true)); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1024 else if (v.is_matrix_type ()) |
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 Matrix data = v.matrix_value (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1027 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1028 /* Now Matlab does something very strange here: |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1029 * If data is a row or column matrix, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1030 * then each datapoint is added. |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1031 * Otherwise, nothing is set. |
26112
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 if (data.rows () > 1 && data.cols () > 1) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1034 l << ""; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1035 else |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1036 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
|
1037 l << QString::number (data(j)); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1038 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1039 else if (v.isnumeric ()) |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1040 l << QString::number (v.double_value ()); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1041 else |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1042 l << QString::number (v.double_value ()); |
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 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1045 else if (columnname.is_matrix_type ()) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1046 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1047 octave_idx_type n = columnname.numel (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1048 Matrix matrix_value = columnname.matrix_value (); |
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 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
|
1051 l << QString::number (matrix_value(i)); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1052 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1053 else |
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 (int i = 0; i < m_tableWidget->columnCount (); i++) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1056 l << ""; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1057 visible = false; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1058 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1059 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1060 l.replaceInStrings ("|", "\n"); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1061 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1062 // Now add the columns as required |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1063 if (m_tableWidget->columnCount () < l.length ()) |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1064 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1065 int oldColumnCount = m_tableWidget->columnCount (); |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1066 m_tableWidget->setColumnCount (l.length ()); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1067 for (int col = oldColumnCount; col < l.length (); col++) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1068 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1069 std::string format = columnformat (col); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1070 bool enabled = columneditable (col); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1071 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1072 for (int row = 0; row < m_tableWidget->rowCount (); row++) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1073 updateData (row, col, octave_value (""), format, enabled); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1074 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1075 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1076 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1077 m_tableWidget->setHorizontalHeaderLabels (l); |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1078 m_tableWidget->horizontalHeader ()->setVisible (visible); |
26112
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 void |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1082 Table::updateColumnwidth (void) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1083 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1084 uitable::properties& tp = properties<uitable> (); |
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 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
|
1087 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
|
1088 || (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
|
1089 && columnwidth.string_value (false) == "auto")) |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1090 for (int i = 0; i < m_tableWidget->columnCount (); i++) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1091 m_tableWidget->setColumnWidth (i, AUTO_WIDTH); |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1092 else if (columnwidth.is_string () |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1093 && columnwidth.string_value (false) == "preferred") |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1094 for (int i = 0; i < m_tableWidget->columnCount (); i++) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1095 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1096 int column_size = |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1097 (qobject_cast<QAbstractItemView *> (m_tableWidget))->sizeHintForColumn (i); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1098 int header_size = m_tableWidget->horizontalHeader ()->sectionSizeHint (i); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1099 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1100 if (column_size > header_size) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1101 header_size = column_size; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1102 m_tableWidget->setColumnWidth (i, header_size); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1103 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1104 else if (columnwidth.iscell ()) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1105 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1106 Cell cell_value = columnwidth.cell_value (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1107 int i = 0; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1108 for (; i < m_tableWidget->columnCount () && i < cell_value.numel (); i++) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1109 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1110 octave_value v = cell_value (i); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1111 if (v.is_string () && v.string_value (false) == "auto") |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1112 m_tableWidget->setColumnWidth (i, AUTO_WIDTH); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1113 else if (v.is_string () && v.string_value (false) == "preferred") |
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 int column_size = |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1116 (qobject_cast<QAbstractItemView *> (m_tableWidget))->sizeHintForColumn (i); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1117 int header_size = m_tableWidget->horizontalHeader ()->sectionSizeHint (i); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1118 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1119 if (column_size > header_size) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1120 header_size = column_size; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1121 m_tableWidget->setColumnWidth (i, header_size); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1122 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1123 else |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1124 { |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1125 int w = int (v.double_value ()); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1126 m_tableWidget->setColumnWidth (i, w); |
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 } |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1129 for (; i < m_tableWidget->columnCount (); i++) |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1130 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1131 int column_size = |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1132 (qobject_cast<QAbstractItemView *> (m_tableWidget))->sizeHintForColumn (i); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1133 int header_size = m_tableWidget->horizontalHeader ()->sectionSizeHint (i); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1134 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1135 if (column_size > header_size) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1136 header_size = column_size; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1137 m_tableWidget->setColumnWidth (i, header_size); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1138 } |
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 else if (columnwidth.is_matrix_type ()) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1141 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1142 Matrix matrix_value = columnwidth.matrix_value (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1143 int i = 0; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1144 for (; i < m_tableWidget->columnCount () && i < matrix_value.numel (); i++) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1145 { |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1146 octave_value v = matrix_value(i); |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1147 int w = int (v.double_value ()); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1148 m_tableWidget->setColumnWidth (i, w); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1149 } |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1150 for (; i < m_tableWidget->columnCount (); i++) |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1151 m_tableWidget->setColumnWidth (i, AUTO_WIDTH); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1152 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1153 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1154 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1155 bool inline |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1156 Table::columneditable (int col) |
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 uitable::properties& tp = properties<uitable> (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1159 boolNDArray columneditable = tp.get_columneditable ().bool_array_value (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1160 bool editable = false; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1161 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1162 if (! columneditable.isempty () && col < columneditable.numel ()) |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1163 editable = columneditable.xelem (col); |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1164 else if (! columneditable.isempty () && columneditable.numel () == 1) |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1165 editable = columneditable.xelem (0); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1166 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1167 return editable; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1168 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1169 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1170 std::string inline |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1171 Table::columnformat (int col) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1172 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1173 uitable::properties& tp = properties<uitable> (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1174 std::string format = ""; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1175 octave_value ov_columnformat = tp.get_columnformat (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1176 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1177 if (ov_columnformat.iscell ()) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1178 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1179 Cell columnformat = ov_columnformat.cell_value (); |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1180 if (! columnformat.isempty () && col < columnformat.numel ()) |
26112
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 octave_value format_value = columnformat.xelem (col); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1183 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1184 if (! format_value.isempty () && format_value.is_string ()) |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1185 format = format_value.string_value (); |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1186 else if (! format_value.isempty () && format_value.iscell ()) |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1187 format = "popup"; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1188 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1189 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1190 else if (ov_columnformat.is_string ()) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1191 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1192 format = ov_columnformat.string_value (); |
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 return format; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1195 } |
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 void inline |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1198 Table::updateDataColumn (int col) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1199 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1200 octave_value data = properties<uitable> ().get_data (); |
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 std::string format = columnformat (col); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1203 bool is_editable = columneditable (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 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
|
1206 updateData (row, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1207 col, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1208 data.iscell () |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1209 ? data.cell_value () (row, col) |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1210 : data.fast_elem_extract (row + col * data.rows ()), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1211 format, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1212 is_editable); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1213 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1214 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1215 void inline |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1216 Table::updateData (int row, int col) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1217 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1218 octave_value data = properties<uitable> ().get_data (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1219 updateData (row, |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1220 col, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1221 data.iscell () |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1222 ? data.cell_value () (row, col) |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1223 : data.fast_elem_extract (row + col * data.rows ()), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1224 columnformat (col), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1225 columneditable (col)); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1226 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1227 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1228 void inline |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1229 Table::updateData (int row, int col, octave_value value, |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1230 std::string format = "", bool enabled = false) |
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 if (format == "logical" || (format == "" && value.islogical ())) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1233 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1234 if (m_tableWidget->item (row, col)) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1235 delete m_tableWidget->item (row, col); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1236 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1237 m_tableWidget->setCellWidget (row, col, checkBoxForLogical (value, enabled)); |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1238 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
|
1239 m_tableWidget->cellWidget (row, col)->setProperty ("col", QVariant (col)); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1240 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1241 else if (format == "popup" && enabled) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1242 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1243 if (m_tableWidget->item (row, col)) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1244 delete m_tableWidget->item (row, col); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1245 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1246 QString string_value = qStringValueFor (value, format).second; |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1247 uitable::properties& tp = properties<uitable> (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1248 octave_value format_value = tp.get_columnformat ().cell_value ().xelem (col); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1249 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1250 QComboBox *comboBox = new QComboBox (); |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1251 comboBox->setProperty ("row", QVariant (row)); |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1252 comboBox->setProperty ("col", QVariant (col)); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1253 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1254 int index = -1; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1255 for (int k = 0; k < format_value.numel (); k++) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1256 { |
27276
7455523fdf01
style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents:
26820
diff
changeset
|
1257 QString popup_item |
7455523fdf01
style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents:
26820
diff
changeset
|
1258 = Utils::fromStdString (format_value.fast_elem_extract (k).string_value ()); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1259 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1260 comboBox->addItem (popup_item); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1261 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1262 if (popup_item == string_value) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1263 index = k; |
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->setCurrentIndex (index); |
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 (index < 0) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1268 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1269 comboBox->setEditable (true); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1270 comboBox->setEditText (string_value); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1271 comboBox->lineEdit ()->setReadOnly (true); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1272 } |
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->setProperty ("original_value", QVariant (string_value)); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1275 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1276 comboBox->installEventFilter (this); |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1277 m_tableWidget->setCellWidget (row, col, comboBox); |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1278 connect (comboBox, SIGNAL(currentIndexChanged (const QString&)), |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1279 this, SLOT(comboBoxCurrentIndexChanged (const QString&))); |
26112
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 else |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1282 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1283 if (m_tableWidget->cellWidget (row, col)) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1284 delete m_tableWidget->cellWidget (row, col); |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1285 m_tableWidget->setItem (row, col, itemFor (value, format, enabled)); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1286 } |
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 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1289 void |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1290 Table::updateData () |
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 uitable::properties& tp = properties<uitable> (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1293 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1294 octave_value data = tp.get_data (); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1295 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1296 if (data.iscell () || data.is_matrix_type ()) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1297 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1298 m_tableWidget->setRowCount (data.rows ()); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1299 m_tableWidget->setColumnCount (data.columns ()); |
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 for (octave_idx_type col = 0; col < data.columns (); col++) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1302 updateDataColumn (col); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1303 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1304 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1305 for (octave_idx_type row = 0; row < m_tableWidget->rowCount (); row++) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1306 m_tableWidget->setRowHeight (row, AUTO_HEIGHT); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1307 } |
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 void |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1310 Table::updateEnable (void) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1311 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1312 uitable::properties& tp = properties<uitable> (); |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1313 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
|
1314 m_tableWidget->setEnabled (enabled); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1315 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1316 bool rearrangeableColumns = tp.is_rearrangeablecolumns (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1317 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1318 // Set selection mode |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1319 m_tableWidget->setSelectionMode (enabled |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1320 ? QAbstractItemView::ExtendedSelection |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1321 : QAbstractItemView::NoSelection); |
26112
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 rearrangeablecolumns |
28300 | 1324 m_tableWidget->horizontalHeader ()->setSectionsMovable (enabled && rearrangeableColumns); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1325 m_tableWidget->horizontalHeader ()->setDragEnabled (enabled && rearrangeableColumns); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1326 m_tableWidget->horizontalHeader ()->setDragDropMode (QAbstractItemView::InternalMove); |
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 // Turn off column editable |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1329 for (int col = 0; col < m_tableWidget->columnCount (); col++) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1330 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1331 bool editable = columneditable (col); |
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 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
|
1334 if (QTableWidgetItem *item = m_tableWidget->item (row, col)) |
26112
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 Qt::ItemFlags flags = item->flags (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1337 if (enabled && editable) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1338 item->setFlags (flags | Qt::ItemIsEditable); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1339 else |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1340 item->setFlags (flags & ~Qt::ItemIsEditable); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1341 } |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1342 else if (QWidget *widget = m_tableWidget->cellWidget (row, col)) |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1343 { |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1344 QCheckBox *checkBox = nullptr; |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1345 if (widget && ! widget->children ().isEmpty ()) |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1346 { |
27276
7455523fdf01
style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents:
26820
diff
changeset
|
1347 QHBoxLayout *layout |
7455523fdf01
style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents:
26820
diff
changeset
|
1348 = qobject_cast<QHBoxLayout *> (widget->children ().first ()); |
7455523fdf01
style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents:
26820
diff
changeset
|
1349 |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1350 if (layout && layout->count () > 0) |
27276
7455523fdf01
style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents:
26820
diff
changeset
|
1351 checkBox = qobject_cast<QCheckBox *> (layout->itemAt (0)-> widget ()); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1352 } |
27276
7455523fdf01
style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents:
26820
diff
changeset
|
1353 |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1354 if (checkBox) |
27276
7455523fdf01
style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents:
26820
diff
changeset
|
1355 widget->setProperty ("Enabled", QVariant (enabled & editable)); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1356 else |
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 widget->setAttribute (Qt::WA_TransparentForMouseEvents, |
7455523fdf01
style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents:
26820
diff
changeset
|
1359 !(editable & enabled)); |
7455523fdf01
style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents:
26820
diff
changeset
|
1360 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1361 widget->setFocusPolicy (Qt::NoFocus); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1362 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1363 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1364 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1365 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1366 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1367 void |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1368 Table::updateExtent (void) |
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 QSize s = realQSizeForTable (m_tableWidget); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1371 Matrix extent = Matrix (1, 4); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1372 extent(0, 0) = 0; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1373 extent(0, 1) = 0; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1374 extent(0, 2) = s.width (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1375 extent(0, 3) = s.height () ; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1376 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
|
1377 emit gh_set_event (go.get_handle (), "extent", extent, false); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1378 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1379 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1380 void |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1381 Table::updatePalette (void) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1382 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1383 uitable::properties& tp = properties<uitable> (); |
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 QPalette p = m_tableWidget->palette (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1386 p.setColor (QPalette::Text, |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1387 Utils::fromRgb (tp.get_foregroundcolor_rgb ())); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1388 p.setColor (QPalette::Base, |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1389 Utils::fromRgb (tp.get_backgroundcolor_rgb ())); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1390 p.setColor (QPalette::AlternateBase, |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1391 Utils::fromRgb (tp.get_alternatebackgroundcolor_rgb ())); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1392 m_tableWidget->setPalette (p); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1393 m_tableWidget->setAlternatingRowColors (tp.is_rowstriping ()); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1394 // FIXME: Handle multiple alternating background colors |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1395 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1396 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1397 void |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1398 Table::updateRowname (void) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1399 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1400 uitable::properties& tp = properties<uitable> (); |
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 // Reset the row count |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1403 m_tableWidget->setRowCount (tp.get_data ().rows ()); |
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 octave_value rowname = tp.get_rowname (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1406 QStringList l; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1407 bool visible = true; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1408 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1409 if (rowname.is_string () && rowname.string_value (false) == "numbered") |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1410 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
|
1411 l << QString::number (i + 1); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1412 else if (rowname.is_string ()) |
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 (m_tableWidget->rowCount () > 0) |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1415 l << Utils::fromStdString (rowname.string_value ()); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1416 for (int i = 1; i < m_tableWidget->rowCount (); i++) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1417 l << ""; |
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 else if (rowname.isempty ()) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1420 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1421 for (int i = 0; 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 visible = false; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1424 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1425 else if (rowname.iscell ()) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1426 { |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1427 octave_idx_type n = rowname.numel (); |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1428 Cell cell_value = rowname.cell_value (); |
26112
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 for (octave_idx_type i = 0; i < n; i++) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1431 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1432 octave_value v = cell_value (i); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1433 if (v.is_string ()) |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1434 l << Utils::fromStdString (v.string_value (true)); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1435 else if (v.is_matrix_type ()) |
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 Matrix data = v.matrix_value (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1438 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1439 /* Now Matlab does something very strange here: |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1440 * If data is a row or column matrix, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1441 * then each datapoint is added. |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1442 * Otherwise, nothing is set. |
26112
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 if (data.rows () > 1 && data.cols () > 1) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1445 l << ""; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1446 else |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1447 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
|
1448 l << QString::number (data(j)); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1449 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1450 else if (v.isnumeric ()) |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1451 l << QString::number (v.double_value (true)); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1452 else |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1453 l << QString::number (v.double_value (true)); |
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 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1456 else if (rowname.is_matrix_type ()) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1457 { |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1458 octave_idx_type n = rowname.numel (); |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1459 Matrix matrix_value = rowname.matrix_value (); |
26112
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 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
|
1462 l << QString::number (matrix_value(i)); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1463 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1464 else |
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 (int i = 0; i < m_tableWidget->columnCount (); i++) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1467 l << ""; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1468 visible = false; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1469 } |
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 // Add dummy rows as required |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1472 if (m_tableWidget->rowCount () < l.length ()) |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1473 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1474 int oldRowCount = m_tableWidget->rowCount (); |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1475 m_tableWidget->setRowCount (l.length ()); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1476 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1477 for (int col = 0; col < m_tableWidget->columnCount (); col++) |
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 std::string format = columnformat (col); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1480 bool enabled = columneditable (col); |
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 row = oldRowCount; row < l.length (); row++) |
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 m_tableWidget->setRowHeight (row, AUTO_HEIGHT); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1485 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1486 updateData (row, col, octave_value (""), format, enabled); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1487 } |
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 } |
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 m_tableWidget->setVerticalHeaderLabels (l); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1492 m_tableWidget->verticalHeader ()->setVisible (visible); |
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 void |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1496 Table::updateRearrangeableColumns (void) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1497 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1498 uitable::properties& tp = properties<uitable> (); |
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 bool rearrangeableColumns = tp.is_rearrangeablecolumns (); |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1501 bool enabled = tp.is_enable (); |
26112
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 m_tableWidget->horizontalHeader ()->setSectionsMovable (enabled && rearrangeableColumns); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1504 m_tableWidget->horizontalHeader ()->setDragEnabled (enabled && rearrangeableColumns); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1505 m_tableWidget->horizontalHeader ()->setDragDropMode (QAbstractItemView::InternalMove); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1506 } |
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 bool |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1509 Table::eventFilter (QObject *watched, QEvent *xevent) |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1510 { |
27647
2a506bc4a7af
eliminate global access to Octave interpreter in qt graphics classes
John W. Eaton <jwe@octave.org>
parents:
27645
diff
changeset
|
1511 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
|
1512 |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1513 //uitable::properties& tp = properties<uitable> (); |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1514 if (qobject_cast<QTableWidget *> (watched)) |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1515 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1516 switch (xevent->type ()) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1517 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1518 case QEvent::Resize: |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1519 { |
27335
50216d7a2f6b
eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents:
27319
diff
changeset
|
1520 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
|
1521 |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1522 graphics_object go = object (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1523 if (go.valid_object ()) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1524 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1525 const uitable::properties& tp = |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1526 Utils::properties<uitable> (go); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1527 if (tp.fontunits_is ("normalized")) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1528 m_tableWidget->setFont (Utils::computeFont<uitable> (tp)); |
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 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1531 break; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1532 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1533 case QEvent::MouseButtonPress: |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1534 { |
27335
50216d7a2f6b
eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents:
27319
diff
changeset
|
1535 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
|
1536 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1537 QMouseEvent *m = dynamic_cast<QMouseEvent *> (xevent); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1538 graphics_object go = object (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1539 const uitable::properties& tp = |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1540 Utils::properties<uitable> (go); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1541 graphics_object fig = go.get_ancestor ("figure"); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1542 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1543 if (m->button () != Qt::LeftButton || ! tp.is_enable ()) |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1544 { |
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
|
1545 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
|
1546 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
|
1547 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
|
1548 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
|
1549 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
|
1550 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
|
1551 "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
|
1552 emit gh_callback_event (m_handle, "buttondownfcn"); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1553 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1554 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
|
1555 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
|
1556 m->globalPos ()); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1557 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1558 else |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1559 { |
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
|
1560 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
|
1561 octave_value ("normal"), false); |
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 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1564 break; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1565 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1566 case QEvent::KeyPress: |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1567 { |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1568 QKeyEvent *k = dynamic_cast<QKeyEvent *> (xevent); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1569 if (m_keyPressHandlerDefined) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1570 { |
27335
50216d7a2f6b
eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents:
27319
diff
changeset
|
1571 octave::autolock guard (gh_mgr.graphics_lock ()); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1572 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1573 octave_scalar_map keyData = Utils::makeKeyEventStruct (k); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1574 graphics_object fig = object ().get_ancestor ("figure"); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1575 |
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
|
1576 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
|
1577 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
|
1578 emit gh_callback_event (m_handle, "keypressfcn", keyData); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1579 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1580 int row = m_tableWidget->currentRow (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1581 int col = m_tableWidget->currentColumn (); |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1582 switch (k->key ()) |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1583 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1584 case Qt::Key_Space: |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1585 { |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1586 QCheckBox *checkBox = nullptr; |
27276
7455523fdf01
style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents:
26820
diff
changeset
|
1587 |
7455523fdf01
style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents:
26820
diff
changeset
|
1588 QWidget *widget |
7455523fdf01
style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents:
26820
diff
changeset
|
1589 = 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
|
1590 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1591 if (widget && ! widget->children ().isEmpty ()) |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1592 { |
27276
7455523fdf01
style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents:
26820
diff
changeset
|
1593 QHBoxLayout *layout |
7455523fdf01
style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents:
26820
diff
changeset
|
1594 = qobject_cast<QHBoxLayout *> (widget->children ().first ()); |
7455523fdf01
style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents:
26820
diff
changeset
|
1595 |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1596 if (layout && layout->count () > 0) |
27276
7455523fdf01
style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents:
26820
diff
changeset
|
1597 checkBox = qobject_cast<QCheckBox *> (layout->itemAt (0)-> widget ()); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1598 } |
27276
7455523fdf01
style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents:
26820
diff
changeset
|
1599 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1600 if (checkBox && checkBox->property ("Enabled").toBool ()) |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1601 checkBoxClicked (row, col, checkBox); |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1602 |
27276
7455523fdf01
style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents:
26820
diff
changeset
|
1603 QComboBox *comboBox |
7455523fdf01
style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents:
26820
diff
changeset
|
1604 = 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
|
1605 |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1606 if (comboBox) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1607 comboBox->showPopup (); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1608 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1609 break; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1610 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1611 case Qt::Key_Return: |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1612 case Qt::Key_Enter: |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1613 { |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1614 if (k->modifiers () == Qt::NoModifier) |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1615 { |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1616 if (row + 1 < m_tableWidget->rowCount ()) |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1617 m_tableWidget->setCurrentCell (row + 1, col); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1618 else |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1619 { |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1620 if (col + 1 < m_tableWidget->columnCount ()) |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1621 m_tableWidget->setCurrentCell (0, col + 1); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1622 else |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1623 m_tableWidget->setCurrentCell (0, 0); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1624 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1625 } |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1626 else if (k->modifiers () == Qt::ShiftModifier) |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1627 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1628 if (row - 1 >= 0) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1629 m_tableWidget->setCurrentCell (row - 1, col); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1630 else |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1631 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1632 if (col - 1 >= 0) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1633 m_tableWidget->setCurrentCell |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1634 (m_tableWidget->rowCount () - 1, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1635 col - 1); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1636 else |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1637 m_tableWidget->setCurrentCell |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1638 (m_tableWidget->rowCount () - 1, |
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1639 m_tableWidget->columnCount () - 1); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1640 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1641 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1642 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1643 break; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1644 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1645 default: |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1646 break; |
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 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1649 break; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1650 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1651 case QEvent::KeyRelease: |
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 if (m_keyReleaseHandlerDefined) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1654 { |
27335
50216d7a2f6b
eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents:
27319
diff
changeset
|
1655 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
|
1656 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1657 QKeyEvent *k = dynamic_cast<QKeyEvent *> (xevent); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1658 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1659 octave_scalar_map keyData = Utils::makeKeyEventStruct (k); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1660 graphics_object fig = object ().get_ancestor ("figure"); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1661 |
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
|
1662 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
|
1663 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
|
1664 emit gh_callback_event (m_handle, "keyreleasefcn", keyData); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1665 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1666 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1667 break; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1668 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1669 default: |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1670 break; |
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 } |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1673 else if (qobject_cast<QComboBox *> (watched)) |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1674 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1675 switch (xevent->type ()) |
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 case QEvent::MouseButtonPress: |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1678 { |
27335
50216d7a2f6b
eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents:
27319
diff
changeset
|
1679 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
|
1680 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1681 QMouseEvent *m = dynamic_cast<QMouseEvent *> (xevent); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1682 graphics_object go = object (); |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1683 const uitable::properties& tp = Utils::properties<uitable> (go); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1684 graphics_object fig = go.get_ancestor ("figure"); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1685 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1686 if (m->button () != Qt::LeftButton || ! tp.is_enable ()) |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1687 { |
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
|
1688 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
|
1689 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
|
1690 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
|
1691 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
|
1692 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
|
1693 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
|
1694 "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
|
1695 emit gh_callback_event (m_handle, "buttondownfcn"); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1696 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1697 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
|
1698 ContextMenu::executeAt (m_interpreter, tp, m->globalPos ()); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1699 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1700 else |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1701 { |
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
|
1702 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
|
1703 Utils::figureSelectionType (m), false); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1704 |
26122
4d1c6c60f6b3
Clean up implementation of uitable in 36e0e5b428e7.
Rik <rik@octave.org>
parents:
26112
diff
changeset
|
1705 QComboBox *comboBox_0 = qobject_cast<QComboBox *> (watched); |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1706 for (int row = 0; row < m_tableWidget->rowCount (); row++) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1707 { |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1708 for (int col = 0; col < m_tableWidget->columnCount (); col++) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1709 { |
27276
7455523fdf01
style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents:
26820
diff
changeset
|
1710 QComboBox *comboBox_1 |
7455523fdf01
style fixes: avoid breaking lines immediately after '('
John W. Eaton <jwe@octave.org>
parents:
26820
diff
changeset
|
1711 = 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
|
1712 |
26112
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1713 if (comboBox_0 == comboBox_1) |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1714 m_tableWidget->setCurrentCell (row, col); |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1715 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1716 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1717 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1718 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1719 break; |
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 default: |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1722 break; |
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 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1725 return false; |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1726 } |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1727 |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1728 #undef AUTO_HEIGHT |
36e0e5b428e7
Implement uitable (patch #9084)
Andrew Thornton <art27@cantab.net>
parents:
diff
changeset
|
1729 } |