Commit Graph

639 Commits

Author SHA1 Message Date
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
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
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
mgrojo
b37b444e04 Remove no longer needed call to processEvents
After cf631a0222 this call is no longer
needed to work around the problem described in #1649.

See discussion in issue #1943.
2019-08-18 15:16:04 +02:00
Martin Kleusberg
cf631a0222 Make updating of database structure always happen in the main thread
Make sure the updating of the database structure always happens in the
main thread so it is in sync with the GUI updates. This way we know for
sure that the list of tables has been completely updated before we try
to (re-)select a table in the Browse Data tab after the DB structure
changed.

See issue #1701.
2019-08-18 14:09:12 +02:00
Martin Kleusberg
f515c0473c Better naming of duplicated SQL tabs
See issue #1964.
2019-08-18 13:45:53 +02:00
mgrojo
aae2d4dea5 Restore current table and applied filters from project
Restoring the current table and applied filters from project was not
working due to some interference with other applied changes.

Now it is done at the end of the load project function and after having
processed events. applyBrowseTableSettings is also called, otherwise
filters are applied but not visible in their input boxes.

See issue #1573
2019-08-17 20:48:00 +02:00
mgrojo
fefbe37c29 Prompt user for options after dropping files
If no DB is open, DB4S tries to open the dropped file as formerly.
Otherwise, the user is prompted for the action:
- Open Database or Project
- Attach Database...
- Import CSV file(s)...

See issue #1883
2019-08-17 14:05:14 +02:00
Martin Kleusberg
6f81e89ec1 Add context menu and Duplicate tab feature to Execute SQL tabs
Add a new right click context menu to the tab bar of the Execute SQL tab
in the main window. This menu contains actions for renaming and closing
tabs. Especially the renaming feature was hard to find before.

Add a third, new action to the context menu for duplicating the tab.
Duplicating opens a new tan and copies the title and SQL text from the
selected tab.

See issue #1964.
2019-08-15 16:24:35 +02:00
mgrojo
732cda89fd Button for clearing the sorting columns
A new button in the "Browse Data" toolbar for clearing the sorting columns
and returning to the default table order.

New icon created as a composition of icons from the Silk icon set.

See issue  #1761
2019-08-15 15:43:13 +02:00
Martin Kleusberg
99c7523849 Fix warning when browsing views
When browsing a view we were constructing a query which looked like
this because the rowid column was empty:
SELECT "",* FROM "view_name";
This worked because there isn't really any rowid column for views anyway
and SQLite was interpreting the first bit as an empty string literal.
However using double quotes for string literals triggers a warning in
the error log. This commit aims to avoid this warning.
2019-08-10 11:51:12 +02:00
mgrojo
32efd8f19f Avoid flickering while sorting or filtering
Flickering was produced in the table header, due to the fact that the
the filter boxes were displayed first at the rightmost side while the
table is reset and then they are repainted when the rows appear, in order
to leave space to the vertical header with the row numbers.

Setting the minimum width of the vertical header to the current width
before any filtering or sorting avoids the issue. The minimum width is
set to the default when changing the current table.

See issues #1763 and #1941
2019-08-04 01:11:13 +02:00
mgrojo
bef856ef45 Fixes some problems reported by Coverity
- Unchecked dynamic_cast
- Uninitialized scalar field
- Uninitialized pointer field
- Big parameter passed by value
2019-08-02 17:19:28 +02:00
Martin Kleusberg
335999e4bd Remember read-only flag for recent files list
When opening a file in read-only mode, remember that read-only flag when
adding it to the list of recently opened files. The next time it is
opened it will be again in read-only mode.

The way this is implemented (by adding a "[ro]" to the start of the path
to indicate when to open in read-only mode) was chosen in order to be
fully backwards compatible with the previous data format for the file
list.

See issue #1913.
2019-07-26 16:22:28 +02:00
Martin Kleusberg
97d77d557b Fix build for Qt version < 5.6
This fixes 8a4e363483.
2019-07-26 15:34:01 +02:00
Martin Kleusberg
8a4e363483 Add "Browse Table" action to the context menu of the DB Structure dock
Add a "Browse Table" action to the right-click menu of the table and
view items in the Database Structure dock.

See issue #1943.
2019-07-26 14:51:26 +02:00
Martin Kleusberg
6cfac1b0f1 Fix right click action "Browse Table" for tables with whitespace
Fix a crash when using the "Browse Table" action in the right click menu
in the Database Structure tab. It crashed whenever the table name or the
schema name started or ended with a space character.
2019-07-26 14:26:00 +02:00
mgrojo
9fe529752b Allow to change sort order for any column in the multi-column sort list
A second Ctrl+Click over an already added column changes the direction of
any column.

Before this change, the effect was only applied to the last selected column
and a second Ctrl+Click on the other columns triggered a requery without
having changed anything.

This was mentioned in PR #1810. See also issue #1761.
2019-07-13 17:42:50 +02:00
Martin Kleusberg
237b1fd9b8 Simplify code 2019-06-28 13:25:46 +02:00
Scott Furry
cf05e7a462 Centralize File Filter and Resolve End CSV Import Message
Matter came up WRT #1880. In reviewing, several other instances
were found where same file filter as a string literal was repreated.
This commit centralizes	these file filters to one location. Filters
are declared `static const` to prevent accidental modification.

Also applied is a fix to #1881. QMessage at end of Import CSV is removed.
2019-05-29 15:54:27 +02:00
mgrojo
512f7eeeab Save splitter sizes of the Execute SQL areas to disk under request
Saving cannot be done in the class destructor, since it seems that the
sizes have already change in that moment. Now they are saved under request
of the Main Window at the same time when the Main Window state is saved.

See issue #1889.
2019-05-19 13:45:56 +02:00
mgrojo
30d0b183a5 Fix crash when opening project file
When opening a project file the following exception is raised in
src/sqlitedb.h:208

terminate called after throwing an instance of 'std::out_of_range'
  what():  map::at

This is related to 64a596a887
2019-05-12 00:15:35 +02:00
Scott Furry
f877f8a10c Resolve Github Issue #1867 - Spurious Empty Filename message.
Problem traced to QFile::exist() producing message when passed an empty QString.
Fix is to test QString length before any QFile::exist() usage with that string.
2019-05-07 22:14:13 +02:00
Scott Furry
d54b820fb2 Shadowed Variable Warnings (#1864)
Compile with ALL_WARNINGS using GCC 8.2.1.
Encountered approximately dozen warnings with this pattern:

    [path to sqlitebrowser root]/src/[somesourcefile]:line:cursor: warning: declaration
	of ‘data’ shadows a member of ‘ClassName’ [-Wshadow]
            OtherDataType data = ....line of code at line given above...
                          ^~~~
    In file included from /usr/include/qt5/QtWidgets/qdialog.h:44,
                     from /usr/include/qt5/QtWidgets/QDialog:1,
                     ...other sources in project
    /usr/include/qt5/QtWidgets/qwidget.h:733:18: note: shadowed declaration is here
         QWidgetData *data;
                      ^~~~

It appears there is a variable named 'data' within Qt global scope. Using 'data`
as a variable name, even one limited in scope to small lamda expressions, causes
compiler some grief.

Commit resolves the warnings in affected files. No problems apparent during execution.
Requires CSV stress-testing.
2019-05-07 22:09:21 +02:00
Martin Kleusberg
64a596a887 Use even less Qt containers 2019-05-06 18:50:05 +02:00
Martin Kleusberg
40aff11086 Use even less Qt containers 2019-05-03 15:04:15 +02:00
Martin Kleusberg
b803e3c49f Use more STL containers instead of Qt containers 2019-05-02 17:02:59 +02:00
Martin Kleusberg
e16537dd9a Use emplace_back some more 2019-05-02 12:05:27 +02:00
Martin Kleusberg
f821fbb1a8 Silence a couple of warnings 2019-04-29 19:14:10 +02:00
Martin Kleusberg
15c23bb0d3 Use some more SQL containers instead of their Qt equivalents 2019-04-29 18:11:19 +02:00
Martin Kleusberg
f59a2453a2 Fix some warning and other code style changes 2019-04-26 14:48:24 +02:00
Scott Furry
5c1cf8a0a8 Resolve sign conversion warnings - prefetch preference
Resolve warnings that occur when building w/ ALL_WARNINGS enabled. Source tree
examined to enusre prefetch size is handled as type std::size_t. Also, tree was
modified correcting handling of the chunkSize variable in sqlitetablemodel that
uses the prefetch preference setting.

Also, some minor editing of sources was taken to improve readability
as well as consistency.
2019-04-25 15:51:25 +02:00
mgrojo
cb3ac2aa2a Prompt to save changes in project when closing DB or application
The following changes set the project as modified in order to ask to save
changes in project file when closing DB or application:

The main database file and any attached database file.
* PRAGMA values
* Show Row Id option
* Encoding
* Unlock View Primary Key option
* Sort columns and sort directions
* Column widths
* Applied Filters
* Display Formats
* Hidden columns

See issue #1706
2019-04-06 20:15:05 +02:00
mgrojo
9e6bd05f35 Avoid ambiguity for Ctrl+F in the Execute SQL tab
When the Ctrl+F was used in the Scintilla widgets of the SQL Log or Edit
Database Cell docks, the shortcut was ambiguous with the search find bar
action, which had window context. Now the later has widget context and a
new widget-context shortcut is explicitly connected to the action in the
editors of each new SQL tab.

See issue #1746
2019-04-05 20:54:09 +02:00
mgrojo
5ca95a57bc Find dialog based on the Find/Replace dialog for the Scintilla widgets
A new find dialog, bound to Ctrl+F, has been added to all the Scintilla
editors. The dialog is basically the Find/Replace dialog, whose replace
related controls have been set to invisible.

This shortcut and the new menu contextual entry are disabled for the
Execute SQL editors, since there the shortcut is already assigned to the
search bar and it would also be redundant.

See issue #1746
2019-04-04 23:49:35 +02:00
Martin Kleusberg
1aa7bbef87 Move code for opening and saving SQL files to the SqlExecutionArea
Move the code for opening and saving SQL files in the Execute SQL tab
from the main window to the SqlExecutionAtra class.

Also fix some warnings in the code for opening new SQL tabs.
2019-04-04 19:18:39 +02:00
Martin Kleusberg
fcac61da64 Simplify the WITHOUT ROWID code a bit
In the Table class we need to store whether this is a WITHOUT ROWID
table or now. Instead of just storing a boolean flag for that we were
storing a list of the rowid column(s). This is not just more complicated
to handle than a simple flag but also more error-prone because the list
must always be kept equal to the list of primary key columns. Failing to
keep them equal would result in an invalid SQL statement.
2019-04-03 12:19:53 +02:00
mgrojo
25715bb590 Add min & max in selection to the status bar and always show rows & columns
Now number of rows and columns is always showed, independent of the number
of cells threshold. Plural forms are used in translations (Spanish and
British English updated for testing).

Min and Max have also been added to the status bar message.
2019-04-03 11:51:35 +02:00
mgrojo
4d5e841813 Show info in status bar when a selection is made in Data Browser
When a selection is made in the Data Browser, the status bar shows:
number of rows, number of columns, sum and average of numeric values (other
data types count as 0) in the selection.

For avoiding expensive computations when the selection is very big
(selecting all cells or an entire column) the threshold setting for the
completion is reused.

This was inspired by #1791, but does not implement the proposed feature.
2019-04-03 11:51:35 +02:00
Martin Kleusberg
726db220d1 Fix inserting into tables with multiple primary key columns
See issue #1834.
2019-04-02 16:19:07 +02:00
Martin Kleusberg
a615c7b5a0 Initial support for multiple primary key columns in WITHOUT ROWID tables
This add initial and mostly untested support for WITHOUT ROWID tables
with multiple primary key columns. It should now be possible to update
and to delete records in these tables.

This commit also improves the overall handling of multiple primary key
columns in preparation for better support of them in general.

Note that this makes us depend on an SQLite version with a built-in JSON
extension.

See issues #516, #1075, and #1834.
2019-04-01 21:43:00 +02:00
Martin Kleusberg
b788e2ddc8 Fix deleting from without rowid tables 2019-04-01 19:28:09 +02:00
Martin Kleusberg
2352943988 Fix editing encryption when using SQLCipher 4
It seems like we need to explicitly detach the newly encrypted database
when changing the encryption settings and using SQLCipher 4.

See issue #1829.
2019-03-30 13:30:35 +01:00
Manuel
ea2aa495b3 Visual sort indicators for multi-column sorting (#1810)
This adds visual sort indicators to the already working multi-column
sorting. Qt sort indicator is disabled, so only one indicator per column
is visible.

Unicode characters are used to indicate direction (triangles) and sort
column order (superscript numbers).

See issue #1761
2019-03-28 15:05:27 +11:00
mgrojo
217563fd47 Dialog and foreground configuration for conditional formats
A new dialog for editing conditional formats that can be invoked from the
filter line editor or from the data browser contextual menus. The dialog
allows adding and removing conditional formats, changing the priority order
and editing foreground colour, background colour and filter condition.

The conditional formats have been expanded to allow defining the foreground
colour. By default is the setting configured by user.

This is a continuation of the functionality introduced in PR #1503.
2019-03-23 22:14:18 +01:00
mgrojo
2d35206313 Remove syntax highlighting for tables when DB is closed
See issue #1800
2019-03-23 12:50:55 +01:00
mgrojo
780ff3f65d Proper SQL Execution behaviour when DB is closed
Remove completion for identifiers when closing DB.

Do not enable the execute SQL actions when the DB is closed.

See issue #1800
2019-03-16 16:38:18 +01:00
Cristian Lupascu
db17cd9e4f Add Insert for Views using AddRecordDialog (#141) 2019-03-06 11:13:56 +01:00