提交 283e00b1 编写于 作者: M Mrn Om 提交者: Igor Malinovskiy

Save filter history

Add filter history combobox
上级 0ccc757e
......@@ -63,3 +63,13 @@ void ServerConfig::setOwner(QWeakPointer<TreeOperations> o)
{
m_owner = o;
}
QVariantMap ServerConfig::filterHistory()
{
return param<QVariantMap>("filter_history");
}
void ServerConfig::setFilterHistory(QVariantMap filterHistory)
{
setParam<QVariantMap>("filter_history", filterHistory);
}
......@@ -39,7 +39,6 @@ class ServerConfig : public RedisClient::ConnectionConfig
Q_PROPERTY(uint databaseScanLimit READ databaseScanLimit WRITE setDatabaseScanLimit)
public:
static const char DEFAULT_NAMESPACE_SEPARATOR = ':';
static const char DEFAULT_KEYS_GLOB_PATTERN = '*';
......@@ -71,6 +70,9 @@ public:
QWeakPointer<TreeOperations> owner() const;
void setOwner(QWeakPointer<TreeOperations> o);
QVariantMap filterHistory();
void setFilterHistory(QVariantMap filterHistory);
private:
QWeakPointer<TreeOperations> m_owner;
};
......
......@@ -272,6 +272,11 @@ void ConnectionsManager::createServerItemForConnection(
serverItem.dynamicCast<ConnectionsTree::TreeItem>().toWeakRef());
});
connect(treeModel.data(), &TreeOperations::filterHistoryUpdated,
this, [this]() {
saveConfig();
});
connect(serverItem.data(), &ConnectionsTree::ServerItem::editActionRequested,
this, [this, treeModel]() {
if (!treeModel) return;
......
......@@ -141,6 +141,14 @@ void TreeOperations::loadNamespaceItems(
QSet<QByteArray> expandedNs) {
QString keyPattern = filter.isEmpty() ? m_config.keysPattern() : filter;
if (m_filterHistory.contains(keyPattern)) {
m_filterHistory[keyPattern] = m_filterHistory[keyPattern].toInt() + 1;
} else {
m_filterHistory[keyPattern] = 1;
}
m_config.setFilterHistory(m_filterHistory);
emit filterHistoryUpdated();
auto renderingCallback =
[this, callback, filter, parent, expandedNs](
const RedisClient::Connection::RawKeysList& keylist,
......@@ -205,8 +213,12 @@ QString TreeOperations::getNamespaceSeparator() {
QString TreeOperations::defaultFilter() { return m_config.keysPattern(); }
QString TreeOperations::connectionName() const
{
QVariantMap TreeOperations::getFilterHistory() {
m_filterHistory = m_config.filterHistory();
return m_filterHistory;
}
QString TreeOperations::connectionName() const {
return m_config.name();
}
......
......@@ -40,6 +40,8 @@ class TreeOperations : public QObject,
QString defaultFilter() override;
QVariantMap getFilterHistory() override;
QString connectionName() const override;
void openKeyTab(QSharedPointer<ConnectionsTree::KeyItem> key,
......@@ -99,6 +101,8 @@ signals:
void configUpdated();
void filterHistoryUpdated();
protected:
bool loadDatabases(std::function<void(RedisClient::DatabaseList)> callback);
......@@ -115,5 +119,6 @@ signals:
uint m_dbCount;
RedisClient::Connection::Mode m_connectionMode;
ServerConfig m_config;
QVariantMap m_filterHistory;
QWeakPointer<ConnectionsTree::ServerItem> m_serverItem;
};
......@@ -96,6 +96,7 @@ void DatabaseItem::loadKeys(std::function<void()> callback) {
QVariantMap DatabaseItem::metadata() const {
QVariantMap metadata = TreeItem::metadata();
metadata["filter"] = m_filter.pattern();
metadata["filterHistory"] = filterHistoryTop10();
metadata["live_update"] = isLiveUpdateEnabled();
return metadata;
}
......@@ -227,6 +228,12 @@ QHash<QString, std::function<void()>> DatabaseItem::eventHandlers() {
loadKeys();
});
events.insert("right-click", [this]() {
if (m_childItems.size() != 0) return;
emit m_model.itemChanged(getSelf());
});
events.insert("add_key", [this]() {
m_operations->openNewKeyDialog(m_dbIndex, [this]() {
confirmAction(
......@@ -304,3 +311,32 @@ QSharedPointer<QTimer> DatabaseItem::liveUpdateTimer() {
bool DatabaseItem::isLiveUpdateEnabled() const {
return m_liveUpdateTimer && m_liveUpdateTimer->isActive();
}
// Top 10 filters
QVariantList DatabaseItem::filterHistoryTop10() const {
typedef QPair<QString, int> FilterUsage;
QList<FilterUsage> filterHistoryRating;
QVariantList filterHistoryList;
auto server = parent().toStrongRef();
if (!server || !server.staticCast<ServerItem>()) return filterHistoryList;
QVariantMap filterHistory = m_operations->getFilterHistory();
QVariantMap::const_iterator i(filterHistory.begin());
while (i != filterHistory.end()) {
FilterUsage filterUsage;
filterUsage.first = i.key();
filterUsage.second = i.value().toInt();
filterHistoryRating.append(filterUsage);
++i;
}
std::sort(filterHistoryRating.begin(), filterHistoryRating.end(), [](FilterUsage i, FilterUsage j) { return (i.second > j.second); });
for (int i = 0; filterHistoryRating.size(); i++) {
if (i >= 10) break;
filterHistoryList.append(filterHistoryRating.takeFirst().first);
}
return filterHistoryList;
}
......@@ -45,6 +45,7 @@ class DatabaseItem : public AbstractNamespaceItem {
private:
QSharedPointer<QTimer> liveUpdateTimer();
bool isLiveUpdateEnabled() const;
QVariantList filterHistoryTop10() const;
private:
unsigned int m_keysCount;
......
......@@ -61,6 +61,8 @@ class Operations {
virtual QString defaultFilter() = 0;
virtual QVariantMap getFilterHistory() = 0;
virtual QString connectionName() const = 0;
virtual void openKeyTab(QSharedPointer<KeyItem> key, bool openInNewTab) = 0;
......
import QtQuick 2.5
import QtQuick.Layouts 1.1
import QtQuick.Controls 1.4
import QtQuick.Controls 2.13
import QtQuick.Window 2.2
import "./../../common/platformutils.js" as PlatformUtils
import "."
......@@ -146,15 +146,34 @@ RowLayout {
property int btnWidth: PlatformUtils.isOSXRetina(Screen)? 18 : 22
property int btnHeight: PlatformUtils.isOSXRetina(Screen)? 18 : 22
TextField {
id: filterText
Layout.fillWidth: true
placeholderText: qsTranslate("RDM","Enter Filter")
BetterComboBox {
id: filterCombobox
objectName: "rdm_inline_menu_filter_field"
text: styleData.value["filter"]
editable: true
Layout.fillWidth: true
indicator.width: 30
selectTextByMouse: true
editText: styleData.value["filter"]
model: styleData.value["filterHistory"]
palette.highlightedText: sysPalette.highlightedText
delegate: ItemDelegate {
height: filterCombobox.height
width: filterCombobox.width
highlighted: filterCombobox.highlightedIndex === index
contentItem: Text {
text: modelData
color: parent.highlighted ? sysPalette.buttonText : sysPalette.text
verticalAlignment: Text.AlignVCenter
elide: Text.ElideRight
BetterToolTip {
title: modelData
visible: parent.truncated && title && hovered
}
}
}
onAccepted: {
filterOk.setFilter()
......@@ -178,7 +197,7 @@ RowLayout {
if (!connectionsManager)
return
connectionsManager.setMetadata(styleData.index, "filter", filterText.text)
connectionsManager.setMetadata(styleData.index, "filter", filterCombobox.editText)
root.state = "menu"
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册