Skip to content

Commit 217563f

Browse files
committed
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.
1 parent 2d35206 commit 217563f

21 files changed

+466
-34
lines changed

CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ set(SQLB_MOC_HDR
150150
src/FindReplaceDialog.h
151151
src/ExtendedScintilla.h
152152
src/FileExtensionManager.h
153+
src/CondFormatManager.h
153154
src/CipherSettings.h
154155
src/DotenvFormat.h
155156
src/Palette.h
@@ -200,6 +201,7 @@ set(SQLB_SRC
200201
src/FindReplaceDialog.cpp
201202
src/ExtendedScintilla.cpp
202203
src/FileExtensionManager.cpp
204+
src/CondFormatManager.cpp
203205
src/Data.cpp
204206
src/CipherSettings.cpp
205207
src/DotenvFormat.cpp
@@ -228,6 +230,7 @@ set(SQLB_FORMS
228230
src/RemotePushDialog.ui
229231
src/FindReplaceDialog.ui
230232
src/FileExtensionManager.ui
233+
src/CondFormatManager.ui
231234
)
232235

233236
set(SQLB_RESOURCES

src/CondFormat.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@
22
#include "Settings.h"
33
#include "Data.h"
44

5-
CondFormat::CondFormat(const QString& filter, const QColor& color, const QString& encoding)
5+
CondFormat::CondFormat(const QString& filter, const QColor& foreground, const QColor& background, const QString& encoding)
66
: m_filter(filter),
7-
m_color(color)
7+
m_fgColor(foreground),
8+
m_bgColor(background)
89
{
9-
m_sqlCondition = filterToSqlCondition(filter, encoding);
10+
if (!filter.isEmpty())
11+
m_sqlCondition = filterToSqlCondition(filter, encoding);
1012
}
1113

1214
QString CondFormat::filterToSqlCondition(const QString& value, const QString& encoding)

src/CondFormat.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,21 @@ class CondFormat
99
{
1010
public:
1111
CondFormat() {};
12-
explicit CondFormat(const QString& filter, const QColor& color, const QString& encoding = QString());
12+
explicit CondFormat(const QString& filter, const QColor& foreground, const QColor& background, const QString& encoding = QString());
1313

1414
static QString filterToSqlCondition(const QString& value, const QString& encoding = QString());
1515

1616
private:
1717
QString m_sqlCondition;
1818
QString m_filter;
19-
QColor m_color;
19+
QColor m_bgColor;
20+
QColor m_fgColor;
2021

2122
public:
2223
QString sqlCondition() const { return m_sqlCondition; };
2324
QString filter() const { return m_filter; };
24-
QColor color() const { return m_color; };
25+
QColor backgroundColor() const { return m_bgColor; };
26+
QColor foregroundColor() const { return m_fgColor; };
2527

2628
};
2729

src/CondFormatManager.cpp

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
#include "CondFormatManager.h"
2+
#include "ui_CondFormatManager.h"
3+
#include "CondFormat.h"
4+
#include "Settings.h"
5+
6+
#include "QColorDialog"
7+
8+
CondFormatManager::CondFormatManager(const QVector<CondFormat>& condFormats, const QString& encoding, QWidget *parent) :
9+
QDialog(parent),
10+
ui(new Ui::CondFormatManager),
11+
m_condFormats(condFormats),
12+
m_encoding(encoding)
13+
{
14+
ui->setupUi(this);
15+
16+
for(const CondFormat& aCondFormat : condFormats)
17+
addItem(aCondFormat);
18+
19+
ui->tableCondFormats->setEditTriggers(QAbstractItemView::AllEditTriggers);
20+
21+
connect(ui->buttonAdd, SIGNAL(clicked(bool)), this, SLOT(addNewItem()));
22+
connect(ui->buttonRemove, SIGNAL(clicked(bool)), this, SLOT(removeItem()));
23+
24+
connect(ui->buttonDown, SIGNAL(clicked(bool)), this, SLOT(downItem()));
25+
connect(ui->buttonUp, SIGNAL(clicked(bool)), this, SLOT(upItem()));
26+
27+
connect(ui->tableCondFormats, &QTreeWidget::itemDoubleClicked, this, &CondFormatManager::itemDoubleClicked);
28+
}
29+
30+
CondFormatManager::~CondFormatManager()
31+
{
32+
delete ui;
33+
}
34+
35+
void CondFormatManager::addNewItem()
36+
{
37+
CondFormat newCondFormat("", QColor(Settings::getValue("databrowser", "reg_fg_colour").toString()),
38+
m_condFormatPalette.nextSerialColor(Palette::appHasDarkTheme()),
39+
m_encoding);
40+
addItem(newCondFormat);
41+
}
42+
43+
void CondFormatManager::addItem(const CondFormat& aCondFormat)
44+
{
45+
int i = ui->tableCondFormats->topLevelItemCount();
46+
QTreeWidgetItem *newItem = new QTreeWidgetItem({aCondFormat.foregroundColor().name(),
47+
aCondFormat.backgroundColor().name(), aCondFormat.filter()});
48+
newItem->setForeground(ColumnForeground, aCondFormat.foregroundColor());
49+
newItem->setBackground(ColumnForeground, aCondFormat.foregroundColor());
50+
newItem->setForeground(ColumnBackground, aCondFormat.backgroundColor());
51+
newItem->setBackground(ColumnBackground, aCondFormat.backgroundColor());
52+
ui->tableCondFormats->insertTopLevelItem(i, newItem);
53+
ui->tableCondFormats->openPersistentEditor(newItem, ColumnFilter);
54+
}
55+
56+
void CondFormatManager::removeItem()
57+
{
58+
QTreeWidgetItem* item = ui->tableCondFormats->takeTopLevelItem(ui->tableCondFormats->currentIndex().row());
59+
delete item;
60+
}
61+
62+
void CondFormatManager::upItem()
63+
{
64+
if (ui->tableCondFormats->selectedItems().isEmpty()) return;
65+
66+
int selectedRow = ui->tableCondFormats->currentIndex().row();
67+
if(selectedRow == 0)
68+
return;
69+
70+
QTreeWidgetItem* item;
71+
item = ui->tableCondFormats->takeTopLevelItem(selectedRow);
72+
ui->tableCondFormats->insertTopLevelItem(selectedRow-1, item);
73+
ui->tableCondFormats->setCurrentIndex(ui->tableCondFormats->currentIndex().sibling(selectedRow-1,
74+
ui->tableCondFormats->currentIndex().column()));
75+
}
76+
77+
void CondFormatManager::downItem()
78+
{
79+
if (ui->tableCondFormats->selectedItems().isEmpty()) return;
80+
81+
int selectedRow = ui->tableCondFormats->currentIndex().row();
82+
if(selectedRow == ui->tableCondFormats->topLevelItemCount() - 1)
83+
return;
84+
85+
QTreeWidgetItem* item;
86+
item = ui->tableCondFormats->takeTopLevelItem(selectedRow);
87+
ui->tableCondFormats->insertTopLevelItem(selectedRow+1, item);
88+
ui->tableCondFormats->setCurrentIndex(ui->tableCondFormats->currentIndex().sibling(selectedRow+1,
89+
ui->tableCondFormats->currentIndex().column()));
90+
}
91+
92+
QVector<CondFormat> CondFormatManager::getCondFormats()
93+
{
94+
QVector<CondFormat> result;
95+
for (int i = 0; i < ui->tableCondFormats->topLevelItemCount(); ++i)
96+
{
97+
QTreeWidgetItem* item = ui->tableCondFormats->topLevelItem(i);
98+
CondFormat aCondFormat(item->text(ColumnFilter),
99+
item->background(ColumnForeground).color(),
100+
item->background(ColumnBackground).color(), m_encoding);
101+
result.append(aCondFormat);
102+
}
103+
return result;
104+
}
105+
106+
107+
void CondFormatManager::itemDoubleClicked(QTreeWidgetItem* item, int column)
108+
{
109+
switch (column) {
110+
case ColumnForeground:
111+
case ColumnBackground: {
112+
QColor color = QColorDialog::getColor(item->background(column).color(), this);
113+
if(color.isValid()) {
114+
item->setTextColor(column, color);
115+
item->setBackgroundColor(column, color);
116+
item->setText(column, color.name());
117+
}
118+
break;
119+
}
120+
case ColumnFilter:
121+
// Nothing to do
122+
break;
123+
}
124+
}

src/CondFormatManager.h

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
#ifndef CONDFORMATMANAGER_H
2+
#define CONDFORMATMANAGER_H
3+
4+
#include <QDialog>
5+
6+
#include "Palette.h"
7+
8+
namespace Ui {
9+
class CondFormatManager;
10+
}
11+
12+
class CondFormat;
13+
class QTreeWidgetItem;
14+
15+
class CondFormatManager : public QDialog
16+
{
17+
Q_OBJECT
18+
19+
public:
20+
explicit CondFormatManager(const QVector<CondFormat>& condFormats, const QString& encoding, QWidget *parent = nullptr);
21+
~CondFormatManager() override;
22+
23+
QVector<CondFormat> getCondFormats();
24+
private:
25+
enum Columns {
26+
ColumnForeground = 0,
27+
ColumnBackground = 1,
28+
ColumnFilter = 2
29+
};
30+
Ui::CondFormatManager *ui;
31+
QVector<CondFormat> m_condFormats;
32+
Palette m_condFormatPalette;
33+
QString m_encoding;
34+
35+
private slots:
36+
void addNewItem();
37+
void addItem(const CondFormat& aCondFormat);
38+
void removeItem();
39+
void upItem();
40+
void downItem();
41+
42+
public slots:
43+
void itemDoubleClicked(QTreeWidgetItem* item, int column);
44+
};
45+
46+
#endif // CONDFORMATMANAGER_H

0 commit comments

Comments
 (0)