Commit Graph

3056 Commits

Author SHA1 Message Date
Martin Kleusberg
be06bf2ac9 More consistent use of size_t for indexing table columns
Especially when we can remove the code for loading the binary bits of
the old project file format, this should allow us to get rid of a ton of
static_casts.
2019-10-04 17:58:42 +02:00
Martin Kleusberg
e0304ec8e5 Remove left-over definition
This is not used anymore.
2019-10-04 17:58:21 +02:00
Martin Kleusberg
6252124a69 Simplify some names
This is only changing internal function and variable names. Since we
have a separate class for the code from the Browse Data tab now, there
is no point to have the function names contain some sort of string like
"browseData" or similar.
2019-10-03 21:14:11 +02:00
mgrojo
009ac2ab1b Formatting is copied to the HTML version of the clipboard
Formatting applied to the data browser is copied to the HTML version of
the clipboard as CSS style. This is used also for printing.

Tested with:
- Thunderbird OK
- LibreOffice Writer OK
- LibreOffice Calc: the format is not pasted, but seems standard behaviour
in Calc

See issue #1976
2019-10-03 00:08:27 +02:00
Martin Kleusberg
7350817cc6 Add missing include
See issue #2014.
2019-10-02 12:05:32 +02:00
Martin Kleusberg
50fd6079c4 qmake: Fix build warnings
This fixes a warning about a missing macextras package when building on
non-macOS systems.
2019-10-02 12:00:24 +02:00
Martin Kleusberg
9d9e92e5ee Convert some QRegExp usages to QRegularExpression 2019-10-02 12:00:20 +02:00
mgrojo
7ca90e0f7e Fix problem with cursor navigation in table browser
This was causing that cursor navigation in table browser did not move the
scroll or that find bar required an additional scrollTo call.

Problem was introduced in 63aabb9601

See comments in PR #2013
2019-09-30 23:41:58 +02:00
mgrojo
b7f6bef398 Fix compilation error with Qt version used by Travis
This is another way to solve the overload.
2019-09-29 22:36:15 +02:00
mgrojo
9b1561afd0 Merge branch 'browser_formats' 2019-09-29 20:12:03 +02:00
mgrojo
fbf1de1e4b Merge branch 'master' into browser_formats
Necessary changes:

- Added function `ExtendedTableWidget::colsInSelection` to emulate former
behaviour of `ExtendedTableWidget::selectedCols`, which is needed by the
format toolbar.

- Added call to `ui->dataTable->scrollTo(match);` in TableBrowser::find,
otherwise the scroll was not advancing to the current index.

# Conflicts:
#	src/TableBrowser.cpp
#	src/TableBrowser.ui
#	src/icons/icons.qrc
#	src/sqlitetablemodel.cpp
2019-09-29 19:39:11 +02:00
mgrojo
6affb875cf Improvements for text alignment
The requested text alignment is always combined with AlignVCenter, which is
the value used before conditional formatting was implemented and gives
better display result.

When creating a new conditional formatting while applying a format from the
toolbar to a column which does not already have one, the alignment flag
of the format is taken from the current cell. In this way, the default text
alignment for numbers is preserved.

See issue #1976 and PR #2013
2019-09-29 13:54:18 +02:00
mgrojo
63aabb9601 Added toolbar for direct formatting of columns in Data Browser
The new toolbar is hidden by default and can be toggled using a button in
the main Data Browser toolbar. Margins and spacing have been updated to
improve appearance of the two toolbars.

These tool buttons apply the format to the columns which are contained in
the selection. This is done by updating or adding a new condition-less
format to the list of conditional formats of those columns.

New style icons from the Silk icon set. Changed existent ones for
coherence.

See issue #1976.
2019-09-29 12:33:34 +02:00
Martin Kleusberg
b4c8ec9706 Fix editing of collation in new fiews in the Edit Table dialog
Setting a collation in a newly added field in the Edit Table dialog did
not work when the field name was edited just before. This is fixed now.

See issue #2011.
2019-09-26 16:48:21 +02:00
Martin Kleusberg
671cc6d6c6 Add a find tool bar to the Browse Data tab
This adds a find tool bar to the Browse Data tab which allows the user
to search for values in the current table view. It only looks in
non-filtered rows and in non-hidden columns. It respected display
formats and sort order, too. The idea is to provide an additional level
of searching: the first one is done by using the filters and actually
reduces the number of rows in the view; the second level is done by
using the new find tool bar and allows you to look for values in the
remaining rows (or all rows if there is no filter).

See issue #1608.
2019-09-26 16:07:18 +02:00
Martin Kleusberg
091273869d tests: Simplify code 2019-09-26 15:30:37 +02:00
mgrojo
7541a82050 Highlight column headers to emulate spreadsheet behaviour
The column headers contained in a selection are highlighted for
consistency to the row headers and to emulated spreadsheet behaviour.
2019-09-22 23:16:04 +02:00
Martin Kleusberg
845875ae19 Fix retrieving list of selected columns for Browse Data tab
When retrieving the list of selected columns of a table in the Browse
Data tab only take into account columns which are selected entirely, not
columns which have at least a single selected field. Before selecting a
row would implicity select all columns.

This fixes issues with resizing and with hiding a column.

See issue #1999.
2019-09-22 22:36:04 +02:00
Martin Kleusberg
a69c62790f Fix foreign key editor not working correctly in Edit Table dialog
When creating a new foreign key constraint in the Edit Table dialog, a
list of tables to reference is displayed. This list is updated whenever
the name of the edited table changes because this is the only table the
name of which can change while the Edit Table dialog is opened. However,
this meant that when the name of the table changes to some existing
table name, the field list of that existing table is replaced by the
field list of the current table. If the name of the current table is
changed once again, it is deleted entirely from the list. This commit
fixes this behaviour by separating the static part of the table and
field list from the one table which can change.

See issue #1991.
2019-09-22 22:06:04 +02:00
Martin Kleusberg
91e036dd74 Add move field to top/bottom buttons to Edit Table dialog
See issue #1988.
2019-09-22 21:57:38 +02:00
Martin Kleusberg
2d4c5ce0ba Support inline preview of image data in cells
This adds a new option in the Preferences dialog to enable a preview of
images in BLOB cells directly in the grid view of the Browse Data tab.

See issue #2000.
2019-09-22 21:57:38 +02:00
mgrojo
4081debd71 Attach Database didn't escape filepath of selected file
See issue #2002
2019-09-22 21:22:34 +02:00
mgrojo
5b73cd1481 Fixes when adding new conditional format
Font point size preference is taken into account when creating a new
default conditional format.

New conditional formats in dialog are resized to contents.

See issues #1976 and #1815.
2019-09-21 23:30:28 +02:00
mgrojo
c27002c301 Added text alignment to conditional formats
Combo box for selecting the desired text alignment for a conditional
format.

The default alignment in the browser has been adjusted for numbers, which
are now aligned to the right as in spreadsheets.

Project file format updated.

See issues #1976 and #1815.
2019-09-21 23:28:35 +02:00
mgrojo
1ec502ae9b Added font and point size selection to conditional formats
Added font combo box and spin box for selecting font and font point size
of a conditional format. The default for a new conditional format is the
corresponding setting.

Minor dialog adjustments for better display.

See issues #1976 and #1815.
2019-09-21 18:17:16 +02:00
mgrojo
412c239366 More conditional formats: font style
The conditional format manager allows now to set the font style: bold,
italic and underline.

The project format has been updated. This is also the base for setting
other font formats without further changing the project schema.

New icons form the Silk icon set.

See issue #1976 and #1815.
2019-09-21 12:33:16 +02:00
Martin Kleusberg
6ddd6e99ff Fix issue with inserting rows into single-column PK tables
After inserting an empty row into a table using the Browse Data tab, we
read the row back from the database to find out whether any (and which)
default values were inserted by SQLite. For tables with a single primary
key column the SQL statement for doing so was broken and failed every
time. So these values were only shown when refreshing the view.

This problem was introduced in a615c7b5a0.

See issue #1870.
2019-09-19 12:29:36 +02:00
Martin Kleusberg
80fb3707c6 Add global filter field to Browse Data tab
This adds a new field to the toolbar of the Browse Data tab which allows
filtering the current table just as the other filters. With the new
field however all columns of a row are checked and only one has to
match. This provides in effect a "global" filter which works on all
columns instead of just one.

See issues #1608 and #1662.
2019-09-16 22:36:14 +02:00
Martin Kleusberg
402ea9f359 tests: Add more test cases for the SQLite parser 2019-09-13 14:22:12 +02:00
Martin Kleusberg
ce66c1da20 Remove the Antlr parser and the Antlr runtime library
Both are fully replaced by our new parser and are no longer needed.

See issue #1990.
2019-09-13 14:22:12 +02:00
Martin Kleusberg
ec0ebed697 grammar: Replace Antlr parser for CREATE TABLE statements by new parser
This extends our new Bison-generated parser to also parse CREATE TABLE
statements and replaces the last parts of the Antlr-generated parser by
doing so.

Also adjust the unit tests to match the new style of parsed expressions.
They have better formatting now and identifiers are always correctly
quoted. This could not be done before and so the tests expected the old
look of expression statements.

See issue #1990.
2019-09-13 14:22:04 +02:00
Martin Kleusberg
7477ec341b grammar: Add CREATE VIRTUAL TABLE support to the new parser
Add support for parsing CREATE VIRTUAL TABLE statements to the new
bison-generated parser. Also remove support for this from the Antlr
parser. Parsing virtual tables is far from complete but good enough for
our purposes. It is also not worse than with the old parser.

See issue #1990.
2019-09-12 11:25:59 +02:00
Martin Kleusberg
9e8cb6e2fb grammar: Replace the Antlr parser for CREATE INDEX statements
Replace the Antlr lexer and parser for CREATE INDEX statements a new
lexer and parser generated with flex and bison. This commit is a first
step towards replacing all Antlr-realted parts of the parser. Until then
the new bison-generated parser is only used for CREATE INDEX statements
and the old Antlr-generated parser is used for CREATE TABLE statements.

These are the main reasons for replacing all of the Antlr parser:
- Getting rid of the Antlr runtime library as a dependency.
- Not depending on an old piece of sotware (we are depending on Antlr2
  while Antlr4 is available at the moment. However, migrating to Antlr4
  is as bad as migrating to bison).
- Better handling of expressions in statements. This proved to be a
  consistent source of problems over the last couple of years.
- Somewhat better Unicode support.
- Reentrant code / multithreading support.
- I can finally uninstall Java from my computer.

See #1990.
2019-09-12 11:25:41 +02:00
Martin Kleusberg
3237e9d2f5 grammar: Rework how PK and unique constraints work
This commit changes the class hierarchy to make primary key constraints
a type of unique constraints. This fits nicely with reality because
primary key columns do not allow duplicate values. It also makes our
life easier as the other changes which are introduced here add some code
required by both unique and primary key constraints and which now can be
shared.

Move the auto increment flag from the field class to the primary key
class. This changes how auto increment fields work and look and might be
a bit unfamiliar but it simplifies things a lot for us because an auto
increment field is always a primary key. So before we had to maintain
two places: the field with the auto increment flag and the primary key
which belongs to it. Now it is all in one place in the primary key.

Add support for storing and manipulating sort order for columns in
primary key and unique constraints. It does not add support for them to
the grammar parser though.

Finally add a way to store and manipulate on conflict clauses for unique
and primary key constraints. Again, parser support for them is not added.
2019-09-11 15:09:23 +02:00
Martin Kleusberg
3f7b108860 grammar: Add missing SLASH definition
This was missing from the first day of our SQLite parser. I have no idea
how nobody could notice this before. Without this SLASH definition no
table and no index could be parsed which had a "/" inside an expression.
2019-09-04 10:04:46 +02:00
Martin Kleusberg
147d2a4b72 Fix tests
Fix issue introduced in 0bf323ffc0 which
did only break the tests.
2019-09-04 09:50:04 +02:00
Martin Kleusberg
13155e5f71 Make view settings in TableBrowser class static
See issue #1972.
2019-09-04 09:40:51 +02:00
Martin Kleusberg
fc3248554d Do not roll back when importing CSV file without final line break
When importing a CSV file which uses quotes to escape characters we
would throw an error if the very last character in the file is the end
quote character. This commit changes it to only error when ending in the
middle of a quoted field but not at the end anymore.

See issue #1986.
2019-09-04 09:16:20 +02:00
Martin Kleusberg
64d83568ec Remove leftover debug code 2019-09-04 09:00:32 +02:00
Martin Kleusberg
0bf323ffc0 grammar: Simplify grammar parser
Remove the stub for parsing CREATE TABLE ... AS SELECT statements. This
provides no extra value because we never come across these statements in
our context and this is not remotely implemented in a useful way.

Also remove the statement and statement list structures as they are not
used either.
2019-09-04 08:58:12 +02:00
Martin Kleusberg
2958e5acba Silence some warnings and fix bug with RTL editor
This silences a couple of compiler warnings. The changes in the grammar
parser serve the same purpose: they silence at least some of the
warnings Antlr prints while generating the parser code.

In the Edit Dialog a missing break is added to a switch statement. This
seems like it actually was an unintended fallthrough for once, setting
the focus to the hex editor instead of the RTL editor.
2019-08-28 19:08:27 +02:00
Martin Kleusberg
2045a4d48f Fix a warning and a build error on macOS
See issue #1979.
2019-08-27 21:55:20 +02:00
Martin Kleusberg
ad2aa8ca88 Remove unnecessary checks and message boxes
This removes a couple of checks whether the database is opened. They
are not really necessary because the respective buttons are disabled
anyway in case no database is loaded. This was inconsistent anyway since
not all functions were checking for this. It also gets rid of a string
which translators have to deal with even though it is never going to be
displayed.
2019-08-27 21:55:19 +02:00
mgrojo
6d9b8418ce Set gaps when the x axis is NULL
Gaps are requested to QCustomPlot when one of the coordinates of a point
is NaN. We were using that feature for the y axis, but not for the x axis
where null values where being converted to 0, which makes less sense than
making a gap, at least for consistency.

See issue #1977
2019-08-26 23:19:33 +02:00
Martin Kleusberg
1a0786c409 Restore status bar calculations in Browse Data tab
This fixes a regression introduced in commit
3f0832f449 which lead to the calculation
of numbers like sum, average, and count in the status bar not being
displayed.
2019-08-23 16:12:32 +02:00
Martin Kleusberg
d9fbdb4bfc Fix collation combo box for newly added fields in Edit Table dialog
This fixes a regression which was introduced by the changes in Commit
0768ccd1db. The newly added combo box for
setting the collation of a field was not created for fields which were
newly added to the table. This broke the setting of the data type for
these fields.

See issue #1973.
2019-08-23 15:12:26 +02:00
Martin Kleusberg
c3c6e42dfb Make new TableBrowser class a bit more robust against misuse 2019-08-23 12:16:15 +02:00
Martin Kleusberg
0768ccd1db Add column for editing collations to Edit Table dialog
Add a new column to the field table of the Edit Table dialog which
allows you to set, remove, and modify the collation of each field. This
is done by showing a combo box which lists all currently available
collations.

See issue #1973.
2019-08-21 23:37:16 +02:00
Martin Kleusberg
3f0832f449 Move form data and code for Browse Data tab into a separate widget class
This adds a new widget called TableBrowser which does everything the
Browse Data tab did before. All the UI data and all the code related to
this tab is moved into the new widget class. The main window now simply
uses the new widget instead of implementing all this stuff itself.

I mainly see three benefits from this change:
1) The main window class becomes smaller and starts looking less like a
master class which manages all of the application. This should make it
easier for new developers to find their way around the code.
2) A better separation of the table browser and the remaining main
window makes it clearer which class class is responsible for what. Again
this makes it easier to maintain the code when it grows.
3) If we ever want to have split views, multiple Browse Data tabs, or
something similar this is an absolute prerequisite.

This commit obviously changes a lot of code. So be prepared for
unintended changes and consider doing some extra testing.

See issue #1972.
2019-08-21 20:47:27 +02:00
Martin Kleusberg
7f051f8926 Some progress towards less usage of SIGNAL and SLOT macros
This is in no way complete but since it is a routine task and I got
bored of it I am going to stop here.
2019-08-21 11:58:31 +02:00