mirror of
https://github.com/sqlitebrowser/sqlitebrowser.git
synced 2026-01-20 19:11:39 -06:00
Make use of signals to connect the selection in plot to the associated table widget. Every time that the plot is updated from the Main Window the table widget associated to the table or query is connected to the plot and the previous widget is disconnected. This allows the selection of the correct table widget. Line selection methods moved to the Extended Table Widget to be used as slots for this connection. The destroyed signal is also connected for resetting the plot. This fixes a crash that already existed before this PR, when closing a SQL tab while the plot is still associated to the table results model.
110 lines
2.6 KiB
C++
110 lines
2.6 KiB
C++
#ifndef PLOTDOCK_H
|
|
#define PLOTDOCK_H
|
|
|
|
#include <QDialog>
|
|
#include <QVariant>
|
|
#include <QMenu>
|
|
|
|
class SqliteTableModel;
|
|
class QTreeWidgetItem;
|
|
struct BrowseDataTableSettings;
|
|
|
|
namespace Ui {
|
|
class PlotDock;
|
|
}
|
|
|
|
class PlotDock : public QDialog
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
explicit PlotDock(QWidget* parent = nullptr);
|
|
~PlotDock();
|
|
|
|
struct PlotSettings
|
|
{
|
|
int lineStyle;
|
|
int pointShape;
|
|
QColor colour;
|
|
bool active;
|
|
|
|
PlotSettings() :
|
|
lineStyle(0),
|
|
pointShape(0),
|
|
active(false)
|
|
{}
|
|
|
|
PlotSettings(int _lineStyle, int _pointShape, QColor _colour, bool _active) :
|
|
lineStyle(_lineStyle),
|
|
pointShape(_pointShape),
|
|
colour(_colour),
|
|
active(_active)
|
|
{}
|
|
|
|
friend QDataStream& operator<<(QDataStream& stream, const PlotDock::PlotSettings& object)
|
|
{
|
|
stream << object.lineStyle;
|
|
stream << object.pointShape;
|
|
stream << object.colour;
|
|
stream << object.active;
|
|
|
|
return stream;
|
|
}
|
|
friend QDataStream& operator>>(QDataStream& stream, PlotDock::PlotSettings& object)
|
|
{
|
|
stream >> object.lineStyle;
|
|
stream >> object.pointShape;
|
|
stream >> object.colour;
|
|
|
|
if(!stream.atEnd())
|
|
stream >> object.active;
|
|
|
|
return stream;
|
|
}
|
|
};
|
|
|
|
public slots:
|
|
void updatePlot(SqliteTableModel* model, BrowseDataTableSettings* settings = nullptr, bool update = true, bool keepOrResetSelection = true);
|
|
void fetchAllData();
|
|
void resetPlot();
|
|
|
|
signals:
|
|
void pointsSelected(int firstIndex, int count);
|
|
|
|
private:
|
|
enum PlotColumns
|
|
{
|
|
PlotColumnField = 0,
|
|
PlotColumnX = 1,
|
|
PlotColumnY = 2,
|
|
};
|
|
|
|
Ui::PlotDock* ui;
|
|
|
|
SqliteTableModel* m_currentPlotModel;
|
|
BrowseDataTableSettings* m_currentTableSettings;
|
|
QMenu* m_contextMenu;
|
|
|
|
/*!
|
|
* \brief guessdatatype try to parse the first 10 rows and decide the datatype
|
|
* \param model model to check the data
|
|
* \param column index of the column to check
|
|
* \return the guessed datatype
|
|
*/
|
|
QVariant::Type guessDataType(SqliteTableModel* model, int column);
|
|
|
|
private slots:
|
|
void on_treePlotColumns_itemChanged(QTreeWidgetItem* item, int column);
|
|
void on_treePlotColumns_itemDoubleClicked(QTreeWidgetItem* item, int column);
|
|
void on_butSavePlot_clicked();
|
|
void on_comboLineType_currentIndexChanged(int index);
|
|
void on_comboPointShape_currentIndexChanged(int index);
|
|
void selectionChanged();
|
|
void mousePress();
|
|
void mouseWheel();
|
|
void copy();
|
|
|
|
};
|
|
|
|
#endif
|