From 4607688d4f0a6b99cafd57bd07546038d1921850 Mon Sep 17 00:00:00 2001 From: wangchch01 Date: Tue, 27 Apr 2021 19:44:41 +0800 Subject: [PATCH] 1.7.1 --- src/RedisView/AppView/CheckCodeDialog.cpp | 8 - src/RedisView/AppView/CheckCodeDialog.h | 8 - src/RedisView/AppView/ContributorDialog.cpp | 15 +- src/RedisView/AppView/ContributorDialog.h | 2 +- src/RedisView/AppView/DataView.cpp | 121 ++++++--- src/RedisView/AppView/DataView.h | 10 +- src/RedisView/AppView/DbCfgdialog.cpp | 2 +- src/RedisView/AppView/InputDialog.cpp | 13 +- src/RedisView/AppView/InputDialog.h | 6 +- src/RedisView/AppView/MainWidget.cpp | 12 +- src/RedisView/AppView/MainWindow.cpp | 27 +- src/RedisView/AppView/MainWindow.h | 1 + src/RedisView/AppView/UpdateSystem.cpp | 17 +- src/RedisView/AppView/ValueDialog.cpp | 121 +++++++++ src/RedisView/AppView/ValueDialog.h | 47 ++++ src/RedisView/AppView/VersionHistory.cpp | 52 ++++ src/RedisView/AppView/VersionHistory.h | 33 +++ src/RedisView/AppView/contributordialog.ui | 62 ++--- src/RedisView/AppView/valuedialog.ui | 107 ++++++++ src/RedisView/AppView/versionHistory.ui | 61 +++++ src/RedisView/Public/Define.h | 42 +-- src/RedisView/Public/Publib.cpp | 22 +- src/RedisView/Public/Publib.h | 7 +- src/RedisView/Public/WorkThread.cpp | 50 ++-- src/RedisView/RedisView.pro | 10 +- src/RedisView/Resources/PinkTheme.qss | 10 +- src/RedisView/Resources/details.ico | Bin 0 -> 64062 bytes src/RedisView/Resources/en.qm | Bin 50628 -> 52057 bytes src/RedisView/cn.ts | 243 +++++++++++------ src/RedisView/en.ts | 275 ++++++++++++++------ src/RedisView/icon.qrc | 3 +- 31 files changed, 1037 insertions(+), 350 deletions(-) create mode 100644 src/RedisView/AppView/ValueDialog.cpp create mode 100644 src/RedisView/AppView/ValueDialog.h create mode 100644 src/RedisView/AppView/VersionHistory.cpp create mode 100644 src/RedisView/AppView/VersionHistory.h create mode 100644 src/RedisView/AppView/valuedialog.ui create mode 100644 src/RedisView/AppView/versionHistory.ui create mode 100644 src/RedisView/Resources/details.ico diff --git a/src/RedisView/AppView/CheckCodeDialog.cpp b/src/RedisView/AppView/CheckCodeDialog.cpp index ba1dbec..ba7546f 100644 --- a/src/RedisView/AppView/CheckCodeDialog.cpp +++ b/src/RedisView/AppView/CheckCodeDialog.cpp @@ -1,11 +1,3 @@ -/** -* @file CheckCodeDialog.cpp -* @brief 模拟注册功能 -* @author 王长春 -* @date 2019-6-23 -* @version 001 -* @copyright Copyright (c) 2018 -*/ #include "CheckCodeDialog.h" #include "ui_checkcodedialog.h" diff --git a/src/RedisView/AppView/CheckCodeDialog.h b/src/RedisView/AppView/CheckCodeDialog.h index 5e79238..9ba1a97 100644 --- a/src/RedisView/AppView/CheckCodeDialog.h +++ b/src/RedisView/AppView/CheckCodeDialog.h @@ -1,11 +1,3 @@ -/** -* @file CheckCodeDialog.h -* @brief 模拟注册功能 -* @author 王长春 -* @date 2019-6-23 -* @version 001 -* @copyright Copyright (c) 2018 -*/ #ifndef CHECKCODEDIALOG_H #define CHECKCODEDIALOG_H diff --git a/src/RedisView/AppView/ContributorDialog.cpp b/src/RedisView/AppView/ContributorDialog.cpp index 08437fa..6ff3c6e 100644 --- a/src/RedisView/AppView/ContributorDialog.cpp +++ b/src/RedisView/AppView/ContributorDialog.cpp @@ -16,12 +16,13 @@ ContributorDialog::ContributorDialog(QWidget *parent) : ui->setupUi(this); setWindowTitle(tr("鸣谢")); setFixedSize(this->size()); - ui->label->setText("
Developer:

" - "  cc20110101
" - "

" - "
Sponsor:

" - "  *才
" - ); + ui->_textBrowser->setEnabled(false); + ui->_textBrowser->setText("
Sponsor:

" + "  *才" + "  *帅" + "  *惜" + "  列" + ); } ContributorDialog::~ContributorDialog() @@ -29,7 +30,7 @@ ContributorDialog::~ContributorDialog() delete ui; } -void ContributorDialog::on_pushButton_clicked() +void ContributorDialog::on__pushButton_clicked() { accept(); } diff --git a/src/RedisView/AppView/ContributorDialog.h b/src/RedisView/AppView/ContributorDialog.h index 8ab8f55..3245422 100644 --- a/src/RedisView/AppView/ContributorDialog.h +++ b/src/RedisView/AppView/ContributorDialog.h @@ -24,7 +24,7 @@ class ContributorDialog : public QDialog ~ContributorDialog(); private slots: - void on_pushButton_clicked(); + void on__pushButton_clicked(); private: Ui::ContributorDialog *ui; diff --git a/src/RedisView/AppView/DataView.cpp b/src/RedisView/AppView/DataView.cpp index abcdd0a..e010f0c 100644 --- a/src/RedisView/AppView/DataView.cpp +++ b/src/RedisView/AppView/DataView.cpp @@ -102,14 +102,16 @@ DataView::DataView(QWidget *parent) : _time = 0; _key.clear(); - _type.clear(); + _type = KEY_NONE; _vCmdMsg.clear(); _recvEnd = false; _inputDialog = new InputDialog(this); + _valueDialog = new ValueDialog(this); _countAc = new QAction(QIcon(ICON_COUNT), tr("统计条数")); _resetAc = new QAction(QIcon(ICON_FLUSH), tr("刷新重置")); _addAc = new QAction(QIcon(ICON_ADD), tr("插入数据")); _delAc = new QAction(QIcon(ICON_DEL), tr("删除数据")); + _seeAc = new QAction(QIcon(ICON_DETAILS), tr("查看数据")); _commitAc = new QAction(QIcon(ICON_COMMIT), tr("提交操作")); _inheadAc = new QAction(QIcon(ICON_IHEAD), tr("链头插入")); _intailAc = new QAction(QIcon(ICON_ITAIL), tr("链尾插入")); @@ -119,6 +121,7 @@ DataView::DataView(QWidget *parent) : _intailAc->setVisible(false); _delheadAc->setVisible(false); _deltailAc->setVisible(false); + _tableView->addAction(_seeAc); _tableView->addAction(_resetAc); _tableView->addAction(_countAc); _tableView->addAction(_inheadAc); @@ -133,6 +136,7 @@ DataView::DataView(QWidget *parent) : connect(_resetAc, SIGNAL(triggered()), this, SLOT(flush())); connect(_addAc, SIGNAL(triggered()), this, SLOT(add())); connect(_delAc, SIGNAL(triggered()), this, SLOT(del())); + connect(_seeAc, SIGNAL(triggered()), this, SLOT(see())); connect(_commitAc, SIGNAL(triggered()), this, SLOT(commit())); connect(_inheadAc, SIGNAL(triggered()), this, SLOT(addHead())); connect(_intailAc, SIGNAL(triggered()), this, SLOT(addTail())); @@ -165,11 +169,11 @@ void DataView::count() { void DataView::commit() { - if(_type != "string" && - _type != "hash" && - _type != "set" && - _type != "zset" && - _type != "list") + if(_type != KEY_LIST && + _type != KEY_STRING && + _type != KEY_HASH && + _type != KEY_SET && + _type != KEY_ZSET) return; QString str = _timeLineEdit->text().trimmed(); @@ -209,7 +213,7 @@ void DataView::commit() { } void DataView::addHead() { - if(_type == "list") { + if(_type == KEY_LIST) { _inputDialog->clear(); _inputDialog->setTip("member1 member2 ..."); _inputDialog->setType(_type); @@ -234,7 +238,7 @@ void DataView::addHead() { } void DataView::addTail() { - if(_type == "list") { + if(_type == KEY_LIST) { _inputDialog->clear(); _inputDialog->setTip("member1 member2 ..."); _inputDialog->setType(_type); @@ -269,7 +273,7 @@ void DataView::delHead() { _cmdMsg.init(); _cmdMsg._dbIndex = _dbIndex; _cmdMsg._clientIndex = _clientIndex; - if(_type == "list") { + if(_type == KEY_LIST) { _cmdMsg._key = _key; _cmdMsg._type = _type; _cmdMsg._valueIndex = -1; @@ -289,7 +293,7 @@ void DataView::delTail() { _cmdMsg.init(); _cmdMsg._dbIndex = _dbIndex; _cmdMsg._clientIndex = _clientIndex; - if(_type == "list") { + if(_type == KEY_LIST) { _cmdMsg._key = _key; _cmdMsg._type = _type; _cmdMsg._valueIndex = 1; @@ -300,7 +304,7 @@ void DataView::delTail() { } void DataView::add() { - if(_type == "hash") { + if(_type == KEY_HASH) { _inputDialog->clear(); _inputDialog->setTip("filed1 value1 filed2 value2 ..."); _inputDialog->setType(_type); @@ -328,7 +332,7 @@ void DataView::add() { } _vCmdMsg << _cmdMsg; } - } else if(_type == "set") { + } else if(_type == KEY_SET) { _inputDialog->clear(); _inputDialog->setTip("member1 member2 ..."); _inputDialog->setType(_type); @@ -348,7 +352,7 @@ void DataView::add() { _cmdMsg._operate = OPERATION_ADD; _vCmdMsg << _cmdMsg; } - } else if(_type == "zset") { + } else if(_type == KEY_ZSET) { _inputDialog->clear(); _inputDialog->setTip("member1 score1 member2 score2 ..."); _inputDialog->setType(_type); @@ -381,11 +385,11 @@ void DataView::add() { void DataView::del() { - if(_type != "string" && - _type != "hash" && - _type != "set" && - _type != "zset" && - _type != "list") + if(_type != KEY_STRING && + _type != KEY_HASH && + _type != KEY_SET && + _type != KEY_ZSET && + _type != KEY_LIST) return; if(_itemTableModel->rowCount() <= 0) { @@ -418,7 +422,7 @@ void DataView::del() { _cmdMsg.init(); _cmdMsg._dbIndex = _dbIndex; _cmdMsg._clientIndex = _clientIndex; - if(_type == "hash") { + if(_type == KEY_HASH) { _cmdMsg._key = _key; _cmdMsg._type = _type; _cmdMsg._filed = _tableSubItem->text(); @@ -426,7 +430,7 @@ void DataView::del() { if(_vCmdMsg.contains(_cmdMsg)) { _vCmdMsg.removeAll(_cmdMsg); } - } else if(_type == "set" || _type == "zset") { + } else if(_type == KEY_SET || _type == KEY_ZSET) { _cmdMsg._key = _key; _cmdMsg._type = _type; _cmdMsg._value = _tableSubItem->text(); @@ -439,6 +443,43 @@ void DataView::del() { } } +void DataView::see() { + + // 通过_view去获取被选中的部分的数据model + QItemSelectionModel *selectModel = _tableView->selectionModel(); + // 通过选中的数据结构,获取这些格子的ModelIndex + QModelIndexList selectList = selectModel->selectedIndexes(); + + if(selectList.size() <= 0) { + QMessageBox::critical(this, tr("提示"), tr("请先选择单元格!")); + return; + } + + if(selectList.size() > 1) { + QMessageBox::critical(this, tr("提示"), tr("请选择单个单元格!")); + return; + } + + QModelIndex index = selectList.at(0); + _tableSubItem = _itemTableModel->item(index.row()); + QString value = _tableSubItem->data(index.column()).toString(); + + _valueDialog->clear(); + _valueDialog->setText(value); + + if(_type == KEY_SET || _type == KEY_ZSET || + (_type == KEY_HASH && index.column() == 0)) { + _valueDialog->setEnableEdit(false); + } else { //KEY_STRING KEY_LIST + _valueDialog->setEnableEdit(true); + } + + if(_valueDialog->exec() == QDialog::Accepted) { + _tableSubItem->setData(index.column(), _valueDialog->getText()); + valueChanged(_tableSubItem, index.column()); + } +} + void DataView::valueChanged(ValueTableItem *item, int column) { _cmdMsg.init(); _cmdMsg._dbIndex = _dbIndex; @@ -446,12 +487,12 @@ void DataView::valueChanged(ValueTableItem *item, int column) { _cmdMsg._operate = OPERATION_ALTER; _cmdMsg._type = _type; _cmdMsg._key = _key; - if(_type == "string") { + if(_type == KEY_STRING) { _cmdMsg._value = item->text(column); if(_vCmdMsg.contains(_cmdMsg)) { _vCmdMsg.removeAll(_cmdMsg); } - } else if(_type == "hash") { + } else if(_type == KEY_HASH) { if(item) _cmdMsg._filed = item->text(); else @@ -460,7 +501,7 @@ void DataView::valueChanged(ValueTableItem *item, int column) { if(_vCmdMsg.contains(_cmdMsg)) { _vCmdMsg.removeAll(_cmdMsg); } - } else if(_type == "list") { + } else if(_type == KEY_LIST) { _cmdMsg._valueIndex = _itemTableModel->childNumber(item); _cmdMsg._value = item->text(column); } else { @@ -502,31 +543,31 @@ void DataView::initValueListData() { _initValueMsg._valuePattern = _valuePattern; _tableView->setSortingEnabled(true); - if(_type == "string") { + if(_type == KEY_STRING) { _itemTableModel->setColumnCount(1); _itemTableModel->setHeaderData(0,Qt::Horizontal, "VALUE"); _itemTableModel->setFlags(0,_itemTableModel->flags(0) | Qt::ItemIsEditable); emit getData(_initValueMsg); - } else if(_type == "hash") { + } else if(_type == KEY_HASH) { _itemTableModel->setColumnCount(2); _itemTableModel->setHeaderData(0,Qt::Horizontal, "FIELD"); _itemTableModel->setHeaderData(1,Qt::Horizontal, "VALUE"); _itemTableModel->setFlags(0,_itemTableModel->flags(0) & (~Qt::ItemIsEditable)); _itemTableModel->setFlags(1,_itemTableModel->flags(1) | Qt::ItemIsEditable); emit getData(_initValueMsg); - } else if(_type == "list") { + } else if(_type == KEY_LIST) { _listIndex = 0; _tableView->setSortingEnabled(false); _itemTableModel->setColumnCount(1); _itemTableModel->setHeaderData(0,Qt::Horizontal, "VALUE"); _itemTableModel->setFlags(0,_itemTableModel->flags(0) | Qt::ItemIsEditable); emit getData(_initValueMsg); - } else if(_type == "set") { + } else if(_type == KEY_SET) { _itemTableModel->setColumnCount(1); _itemTableModel->setHeaderData(0,Qt::Horizontal, "MEMBER"); _itemTableModel->setFlags(0,_itemTableModel->flags(0) & (~Qt::ItemIsEditable)); emit getData(_initValueMsg); - } else if(_type == "zset") { + } else if(_type == KEY_ZSET) { _itemTableModel->setColumnCount(2); _itemTableModel->setHeaderData(0,Qt::Horizontal, "MEMBER"); _itemTableModel->setHeaderData(1,Qt::Horizontal, "SCORE"); @@ -536,8 +577,8 @@ void DataView::initValueListData() { } } -void DataView::appendValue(const TaskMsg & taskMsg, const QByteArray flag) { - if(flag == "hash") { +void DataView::appendValue(const TaskMsg & taskMsg, const int flag) { + if(flag == KEY_HASH) { for(int i = 0; i < taskMsg._respResult._arrayValue[1]._arrayValue.size(); ++++i) { vRowData.clear(); _value = QTextCodec::codecForLocale()->toUnicode(taskMsg._respResult._arrayValue[1]._arrayValue[i]._stringValue); @@ -547,7 +588,7 @@ void DataView::appendValue(const TaskMsg & taskMsg, const QByteArray flag) { _tableItemValue = new ValueTableItem(vRowData); _itemTableModel->insertRow(_tableItemValue); } - } else if(flag == "zset") { + } else if(flag == KEY_ZSET) { for(int i = 0; i < taskMsg._respResult._arrayValue[1]._arrayValue.size(); ++++i) { vRowData.clear(); _value = QTextCodec::codecForLocale()->toUnicode(taskMsg._respResult._arrayValue[1]._arrayValue[i]._stringValue); @@ -556,20 +597,20 @@ void DataView::appendValue(const TaskMsg & taskMsg, const QByteArray flag) { _tableItemValue = new ValueTableItem(vRowData); _itemTableModel->insertRow(_tableItemValue); } - } else if(flag == "set") { + } else if(flag == KEY_SET) { for(int i = 0; i < taskMsg._respResult._arrayValue[1]._arrayValue.size(); ++i) { _value = QTextCodec::codecForLocale()->toUnicode(taskMsg._respResult._arrayValue[1]._arrayValue[i]._stringValue); _tableItemValue = new ValueTableItem(_value); _itemTableModel->insertRow(_tableItemValue); } - } else if(flag == "string") { + } else if(flag == KEY_STRING) { for(int i = 0; i < taskMsg._list.size(); ++i) { _value = QTextCodec::codecForLocale()->toUnicode(taskMsg._list[i]); _tableItemValue = new ValueTableItem(_value); _itemTableModel->insertRow(_tableItemValue); break; } - } else if(flag == "list") { + } else if(flag == KEY_LIST) { for(int i = 0; i < taskMsg._list.size(); ++i) { _value = QTextCodec::codecForLocale()->toUnicode(taskMsg._list[i]); _tableItemValue = new ValueTableItem(_value); @@ -601,7 +642,7 @@ void DataView::setValue(const QString &value) { _value = value; } -void DataView::setType(const QByteArray &type) { +void DataView::setType(const int &type) { _type = type; _bodyAddHeadButton->setVisible(false); _bodyAddTailButton->setVisible(false); @@ -613,17 +654,17 @@ void DataView::setType(const QByteArray &type) { _deltailAc->setVisible(false); _addAc->setVisible(true); _delAc->setVisible(true); - if(_type == "string") { + if(_type == KEY_STRING) { _addAc->setVisible(false); _delAc->setVisible(false); _typeLineEdit->setText("String"); _bodyAddButton->setVisible(false); _bodyDelButton->setVisible(false); - } else if(_type == "hash") { + } else if(_type == KEY_HASH) { _typeLineEdit->setText("Hash"); _bodyAddButton->setVisible(true); _bodyDelButton->setVisible(true); - } else if(_type == "list") { + } else if(_type == KEY_LIST) { _addAc->setVisible(false); _delAc->setVisible(false); _inheadAc->setVisible(true); @@ -637,11 +678,11 @@ void DataView::setType(const QByteArray &type) { _bodyDelHeadButton->setVisible(true); _bodyDelTailButton->setVisible(true); _typeLineEdit->setText("List"); - } else if(_type == "set") { + } else if(_type == KEY_SET) { _bodyAddButton->setVisible(true); _bodyDelButton->setVisible(true); _typeLineEdit->setText("Set"); - } else if(_type == "zset") { + } else if(_type == KEY_ZSET) { _bodyAddButton->setVisible(true); _bodyDelButton->setVisible(true); _typeLineEdit->setText("Zset"); diff --git a/src/RedisView/AppView/DataView.h b/src/RedisView/AppView/DataView.h index 046f79e..d277900 100644 --- a/src/RedisView/AppView/DataView.h +++ b/src/RedisView/AppView/DataView.h @@ -10,6 +10,7 @@ #define DATAVIEW_H #include "AppView/InputDialog.h" +#include "AppView/ValueDialog.h" #include "Model/ValueTableModel.h" #include "Model/ItemDelegate.h" @@ -27,12 +28,12 @@ class DataView : public QWidget void clearData(); void initValueListData(); - void appendValue(const TaskMsg & taskMsg, const QByteArray flag); + void appendValue(const TaskMsg & taskMsg, const int flag); void setDbIndex(const int &index); void setIndex(const int &index); void setKey(const QString &key); void setValue(const QString &value); - void setType(const QByteArray &type); + void setType(const int &type); void setTimeMs(const qlonglong &timeMs); void setEncode(const QByteArray &encode); void setRefcount(const qlonglong &count); @@ -46,10 +47,10 @@ class DataView : public QWidget bool _recvEnd; //暂时未使用 int _clientIndex; int _dbIndex; + int _type; QString _valuePattern; QString _key; QString _value; - QByteArray _type; qlonglong _time; qlonglong _listIndex; qlonglong _longLong; @@ -60,6 +61,7 @@ class DataView : public QWidget QAction *_resetAc; QAction *_addAc; QAction *_delAc; + QAction *_seeAc; QAction *_commitAc; QAction *_inheadAc; QAction *_intailAc; @@ -91,6 +93,7 @@ class DataView : public QWidget ValueTableModel* _itemTableModel; QTableView *_tableView; InputDialog *_inputDialog; + ValueDialog *_valueDialog; ValueTableItem *_tableItemValue; ValueTableItem *_tableSubItem; QVector vRowData; @@ -104,6 +107,7 @@ public slots: void valueChanged(ValueTableItem *item, int column); void commit(); void del(); + void see(); void add(); void addHead(); void addTail(); diff --git a/src/RedisView/AppView/DbCfgdialog.cpp b/src/RedisView/AppView/DbCfgdialog.cpp index 439bb1f..a3f7e49 100644 --- a/src/RedisView/AppView/DbCfgdialog.cpp +++ b/src/RedisView/AppView/DbCfgdialog.cpp @@ -6,7 +6,7 @@ * @version 001 * @copyright Copyright (c) 2018 */ -#include "AppView/DbCfgdialog.h" +#include "DbCfgDialog.h" DbCfgDialog::DbCfgDialog(int dbtype, QWidget *parent) : QDialog(parent) { diff --git a/src/RedisView/AppView/InputDialog.cpp b/src/RedisView/AppView/InputDialog.cpp index 6a78e5f..c733092 100644 --- a/src/RedisView/AppView/InputDialog.cpp +++ b/src/RedisView/AppView/InputDialog.cpp @@ -35,7 +35,7 @@ void InputDialog::setTip(const QString & info) { ui->_inputTextEdit->setPlaceholderText(info); } -void InputDialog::setType(const QByteArray & type) { +void InputDialog::setType(const int & type) { _type = type; } @@ -47,17 +47,17 @@ void InputDialog::on__pushButtonY_clicked() return; } - if(_type == "hash") { + if(_type == KEY_HASH) { _textList.clear(); PubLib::getList(_text,_textList); if(_textList.size() % 2) { QMessageBox::critical(this, tr("错误"), tr("数据错误,哈希字段值个数不匹配")); return; } - } else if(_type == "set" || _type == "list") { + } else if(_type == KEY_SET || _type == KEY_LIST) { _textList.clear(); PubLib::getList(_text,_textList); - } else if(_type == "zset") { + } else if(_type == KEY_ZSET) { _textList.clear(); PubLib::getList(_text,_textList); if(_textList.size() % 2) { @@ -89,8 +89,3 @@ void InputDialog::on__pushButtonN_clicked() { reject(); } - -void InputDialog::setFlag(int flag) -{ - _flag = flag; -} diff --git a/src/RedisView/AppView/InputDialog.h b/src/RedisView/AppView/InputDialog.h index ec95f71..5ef6890 100644 --- a/src/RedisView/AppView/InputDialog.h +++ b/src/RedisView/AppView/InputDialog.h @@ -24,8 +24,7 @@ class InputDialog : public QDialog ~InputDialog(); void setTip(const QString & info); - void setType(const QByteArray & type); - void setFlag(int flag); + void setType(const int &type); void clear(); QString getText(); QList getTextList(); @@ -36,9 +35,8 @@ private slots: void on__pushButtonN_clicked(); private: - int _flag; Ui::InputDialog *ui; - QByteArray _type; + int _type; QString _text; QList _textList; }; diff --git a/src/RedisView/AppView/MainWidget.cpp b/src/RedisView/AppView/MainWidget.cpp index f52768f..883ea2d 100644 --- a/src/RedisView/AppView/MainWidget.cpp +++ b/src/RedisView/AppView/MainWidget.cpp @@ -586,8 +586,8 @@ void MainWidget::showTreeRightMenu(const QPoint &pos) { if(_isClusterMode) { _idbIndex = 0; if(_subTreeItem == _treeItemKey) { - _treeMenu->addAction(_mCount); _treeMenu->addAction(_mRefresh); + _treeMenu->addAction(_mCount); _treeMenu->addAction(_mKeySort); _treeMenu->addAction(_mCreated); } else { @@ -597,13 +597,13 @@ void MainWidget::showTreeRightMenu(const QPoint &pos) { } else { _idbIndex = _vTreeItemKey.indexOf(_subTreeItem); if(_idbIndex != -1) { - _treeMenu->addAction(_mCount); _treeMenu->addAction(_mRefresh); + _treeMenu->addAction(_mCount); _treeMenu->addAction(_mKeySort); _treeMenu->addAction(_mCreated); } else if(_treeItemKey == _subTreeItem) { - _treeMenu->addAction(_mCount); _treeMenu->addAction(_mRefresh); + _treeMenu->addAction(_mCount); _treeMenu->addAction(_mKeySort); _idbIndex = -1; } else { @@ -1017,9 +1017,11 @@ void MainWidget::treeClicked(const QModelIndex &index) { QMessageBox::critical(this, tr("错误"), tr("获取键类型失败!")); return; } - _dataView->setType(byteArray); - if(byteArray == "string") { + int keyType = PubLib::getKeyType(byteArray); + _dataView->setType(keyType); + + if(keyType == KEY_STRING) { if(!_redisClient->get(key, byteArray)) { QMessageBox::critical(this, tr("错误"), tr("获取键值失败!")); return; diff --git a/src/RedisView/AppView/MainWindow.cpp b/src/RedisView/AppView/MainWindow.cpp index 47546da..7ebea55 100644 --- a/src/RedisView/AppView/MainWindow.cpp +++ b/src/RedisView/AppView/MainWindow.cpp @@ -1292,33 +1292,16 @@ void MainWindow::about() { "
" "RedisView

" "作者 :王长春
" - "版本 :Community v1.7.0
" + "版本 :Community v1.7.1
" "邮箱 :cc20110101@126.com
" - "地址 :RedisView GitHub
" + "地址 :RedisView GitHub SourceForge
" "版权 :Copyright 2019 Powered By CC
" ) ); } void MainWindow::history() { - QMessageBox::about(this, tr("版本历史"), - tr( - "
2019/06/26  Version 1.7.0  新增主题设置和数据库导入导出.
" - "
2019/06/01  Version 1.6.7  密码AES加密存储.
" - "
2019/05/30  Version 1.6.6  新增集群信息查看分析功能.
" - "
2019/05/08  Version 1.6.5  修复设置含空格值失败Bug.
" - "
2019/04/08  Version 1.6.4  修复值初始化模式Bug.
" - "
2019/04/05  Version 1.6.3  修复键值过长显示不全Bug.
" - "
2019/03/24  Version 1.6.2  增加操作进度提示,修复中文乱码Bug.
" - "
2019/03/15  Version 1.6.1  支持编码选择.
" - "
2019/02/21  Version 1.6.0  支持复制集模式.
" - "
2019/01/20  Version 1.5.0  增加批量删除键功能.
" - "
2019/01/19  Version 1.4.0  增加订阅发布模式.
" - "
2019/01/10  Version 1.3.0  界面调整,增加键值初始化扫描模式.
" - "
2019/01/07  Version 1.2.0  自定义值模型,内存优化;新增Mac、Linux版本.
" - "
2018/12/30  Version 1.1.0  自定义键模型,内存优化.
" - "
2018/12/25  Version 1.0.0  Windows初版发布.
" - ) - ); + QRect availableGeometry = QApplication::desktop()->availableGeometry(this); + VersionHistory versionHistory(availableGeometry.width(), availableGeometry.height(), this); + versionHistory.exec(); } - diff --git a/src/RedisView/AppView/MainWindow.h b/src/RedisView/AppView/MainWindow.h index 2cf76db..3c44291 100644 --- a/src/RedisView/AppView/MainWindow.h +++ b/src/RedisView/AppView/MainWindow.h @@ -10,6 +10,7 @@ #define MAINWINDOW_H #include "AppView/Instructions.h" +#include "AppView/VersionHistory.h" #include "AppView/Donation.h" #include "AppView/MainWidget.h" #include "AppView/ClientDialog.h" diff --git a/src/RedisView/AppView/UpdateSystem.cpp b/src/RedisView/AppView/UpdateSystem.cpp index 18154fe..f5050fd 100644 --- a/src/RedisView/AppView/UpdateSystem.cpp +++ b/src/RedisView/AppView/UpdateSystem.cpp @@ -14,9 +14,14 @@ UpdateView::UpdateView() { ~Qt::WindowMaximizeButtonHint & ~Qt::WindowMinimizeButtonHint); setWindowModality(Qt::ApplicationModal); + setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + setFixedSize(333,380); UpdateWidget *_native = new UpdateWidget(&_updater, this); + _native->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); _nativeLabel = new QLabel(tr("努力检查中,请稍后...")); + _nativeLabel->setWordWrap(true); + _nativeLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); _nativeLabel->setAlignment(Qt::AlignHCenter); QGridLayout *layout = new QGridLayout; @@ -39,7 +44,6 @@ void UpdateView::noupdate() { _timer->stop(); } - Updater::Updater() { QLinearGradient gradient(QPointF(50, -20), QPointF(80, 20)); gradient.setColorAt(0.0, Qt::white); @@ -55,7 +59,7 @@ Updater::Updater() { void Updater::paint(QPainter *painter, QPaintEvent *event, int elapsed) { painter->fillRect(event->rect(), _background); - painter->translate(100, 100); + painter->translate(150, 150); painter->save(); painter->setBrush(_circleBrush); @@ -63,27 +67,26 @@ void Updater::paint(QPainter *painter, QPaintEvent *event, int elapsed) { painter->rotate(elapsed * 0.030); qreal r = elapsed / 1000.0; - int n = 30; + int n = 35; for(int i = 0; i < n; ++i) { painter->rotate(30); qreal factor = (i + r) / n; qreal radius = 0 + 120.0 * factor; qreal circleRadius = 1 + factor * 20; painter->drawEllipse(QRectF(radius, -circleRadius, - circleRadius * 2, circleRadius * 2)); + circleRadius * 2.5, circleRadius * 2.5)); } painter->restore(); painter->setPen(_textPen); painter->setFont(_textFont); - painter->drawText(QRect(-50, -50, 100, 100), Qt::AlignCenter, + painter->drawText(QRect(-75, -75, 150, 150), Qt::AlignCenter, QStringLiteral("RV")); } - UpdateWidget::UpdateWidget(Updater *updater, QWidget *parent) : QWidget(parent), _updater(updater) { _elapsed = 0; - setFixedSize(200, 200); + setFixedSize(300, 300); } void UpdateWidget::animate() { diff --git a/src/RedisView/AppView/ValueDialog.cpp b/src/RedisView/AppView/ValueDialog.cpp new file mode 100644 index 0000000..14d98a4 --- /dev/null +++ b/src/RedisView/AppView/ValueDialog.cpp @@ -0,0 +1,121 @@ +/** +* @file ValueDialog.cpp +* @brief 键值查看 +* @author 王长春 +* @date 2021-04-21 +* @version 001 +* @copyright Copyright (c) 2021 +*/ +#include "AppView/ValueDialog.h" +#include "ui_valuedialog.h" + +ValueDialog::ValueDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::ValueDialog) +{ + ui->setupUi(this); + setWindowTitle(tr("查看")); + ui->_radioButtonJson->setChecked(false); + ui->_radioButtonText->setChecked(true); + ui->_radioButtonXml->setChecked(false); +} + +ValueDialog::~ValueDialog() +{ + delete ui; +} + +QString ValueDialog::getText() { + return ui->_valueTextEdit->document()->toPlainText(); +} + +void ValueDialog::on__pushButtonY_clicked() +{ + accept(); +} + +void ValueDialog::clear() { + ui->_valueTextEdit->clear(); +} + +void ValueDialog::on__pushButtonN_clicked() +{ + reject(); +} + +void ValueDialog::setEnableEdit(bool enableEdit) +{ + _enableEdit = enableEdit; + ui->_valueTextEdit->setReadOnly(!_enableEdit); + ui->_pushButtonY->setEnabled(_enableEdit); +} + +bool ValueDialog::getEnableEdit() const +{ + return _enableEdit; +} + +void ValueDialog::setText(const QString &text) +{ + if(ui->_radioButtonJson->isChecked()) { + QJsonDocument jsonDocument = QJsonDocument::fromJson(text.toLocal8Bit().data()); + if(jsonDocument.isNull()) { + ui->_radioButtonText->setChecked(true); + ui->_valueTextEdit->setPlainText(text); + } else { + ui->_valueTextEdit->setPlainText(jsonDocument.toJson(QJsonDocument::JsonFormat::Indented)); + } + } else if(ui->_radioButtonXml->isChecked()) { + QDomDocument domDocument; + if(domDocument.setContent(text)) { + ui->_valueTextEdit->setPlainText(domDocument.toString(4)); + } else { + ui->_radioButtonText->setChecked(true); + ui->_valueTextEdit->setPlainText(text); + } + } else if(ui->_radioButtonHtml->isChecked()) { + ui->_valueTextEdit->setHtml(text); + } else { + ui->_valueTextEdit->setPlainText(text); + } +} + +void ValueDialog::on__radioButtonXml_toggled(bool checked) +{ + if(!checked) + return; + QDomDocument domDocument; + if(domDocument.setContent(getText())) { + ui->_valueTextEdit->setPlainText(domDocument.toString(4)); + } else { + ui->_radioButtonText->setChecked(true); + QMessageBox::critical(this, tr("错误"), tr("非xml格式")); + } +} + +void ValueDialog::on__radioButtonJson_toggled(bool checked) +{ + if(!checked) + return; + + QJsonDocument jsonDocument = QJsonDocument::fromJson(getText().toLocal8Bit().data()); + if(jsonDocument.isNull()) { + ui->_radioButtonText->setChecked(true); + QMessageBox::critical(this, tr("错误"), tr("非json格式")); + } else { + ui->_valueTextEdit->setPlainText(jsonDocument.toJson(QJsonDocument::JsonFormat::Indented)); + } +} + +void ValueDialog::on__radioButtonText_toggled(bool checked) +{ + if(!checked) + return; +} + +void ValueDialog::on__radioButtonHtml_toggled(bool checked) +{ + if(!checked) + return; + ui->_valueTextEdit->setHtml(getText()); +} diff --git a/src/RedisView/AppView/ValueDialog.h b/src/RedisView/AppView/ValueDialog.h new file mode 100644 index 0000000..8abd7d7 --- /dev/null +++ b/src/RedisView/AppView/ValueDialog.h @@ -0,0 +1,47 @@ +/** +* @file ValueDialog.h +* @brief 键值查看 +* @author 王长春 +* @date 2021-04-21 +* @version 001 +* @copyright Copyright (c) 2021 +*/ +#ifndef VALUEDIALOG_H +#define VALUEDIALOG_H + +#include "Public/Publib.h" + +namespace Ui { +class ValueDialog; +} + +class ValueDialog : public QDialog +{ + Q_OBJECT + +public: + explicit ValueDialog(QWidget *parent = nullptr); + ~ValueDialog(); + + void clear(); + QString getText(); + void setText(const QString &text); + + bool getEnableEdit() const; + void setEnableEdit(bool enableEdit); + +private slots: + void on__pushButtonY_clicked(); + void on__pushButtonN_clicked(); + void on__radioButtonXml_toggled(bool checked); + void on__radioButtonJson_toggled(bool checked); + void on__radioButtonText_toggled(bool checked); + void on__radioButtonHtml_toggled(bool checked); + +private: + Ui::ValueDialog *ui; + QString _text; + bool _enableEdit; +}; + +#endif // VALUEDIALOG_H diff --git a/src/RedisView/AppView/VersionHistory.cpp b/src/RedisView/AppView/VersionHistory.cpp new file mode 100644 index 0000000..9b655dc --- /dev/null +++ b/src/RedisView/AppView/VersionHistory.cpp @@ -0,0 +1,52 @@ +/** +* @file VersionHistory.cpp +* @brief 说明信息 +* @author 王长春 +* @date 2021-04-21 +* @version 001 +* @copyright Copyright (c) 2021 +*/ +#include "AppView/VersionHistory.h" +#include "ui_versionhistory.h" + +VersionHistory::VersionHistory(int width, int height, QWidget *parent) : + QDialog(parent), + ui(new Ui::VersionHistory) +{ + ui->setupUi(this); + + setWindowTitle(tr("版本历史")); + setFixedSize(width * 1 / 2, height * 1 / 2); + ui->_textBrowser->setOpenExternalLinks(true); + ui->_textBrowser->setText(tr( + "
2021/04/21  Version 1.7.1  新增键值查看功能.
" + "
2019/06/26  Version 1.7.0  新增主题设置和数据库导入导出.
" + "
2019/06/01  Version 1.6.7  密码AES加密存储.
" + "
2019/05/30  Version 1.6.6  新增集群信息查看分析功能.
" + "
2019/05/08  Version 1.6.5  修复设置含空格值失败Bug.
" + "
2019/04/08  Version 1.6.4  修复值初始化模式Bug.
" + "
2019/04/05  Version 1.6.3  修复键值过长显示不全Bug.
" + "
2019/03/24  Version 1.6.2  增加操作进度提示,修复中文乱码Bug.
" + "
2019/03/15  Version 1.6.1  支持编码选择.
" + "
2019/02/21  Version 1.6.0  支持复制集模式.
" + "
2019/01/20  Version 1.5.0  增加批量删除键功能.
" + "
2019/01/19  Version 1.4.0  增加订阅发布模式.
" + "
2019/01/10  Version 1.3.0  界面调整,增加键值初始化扫描模式.
" + "
2019/01/07  Version 1.2.0  自定义值模型,内存优化;新增Mac、Linux版本.
" + "
2018/12/30  Version 1.1.0  自定义键模型,内存优化.
" + "
2018/12/25  Version 1.0.0  Windows初版发布.
" + ) + ); + ui->_textBrowser->setEnabled(true); + ui->_textBrowser->setReadOnly(true); +} + +VersionHistory::~VersionHistory() +{ + delete ui; +} + +void VersionHistory::on_pushButton_clicked() +{ + accept(); +} diff --git a/src/RedisView/AppView/VersionHistory.h b/src/RedisView/AppView/VersionHistory.h new file mode 100644 index 0000000..097cd5a --- /dev/null +++ b/src/RedisView/AppView/VersionHistory.h @@ -0,0 +1,33 @@ +/** +* @file VersionHistory.h +* @brief 说明信息 +* @author 王长春 +* @date 2018-11-24 +* @version 001 +* @copyright Copyright (c) 2018 +*/ +#ifndef VERSIONHISTORY_H +#define VERSIONHISTORY_H + +#include + +namespace Ui { +class VersionHistory; +} + +class VersionHistory : public QDialog +{ + Q_OBJECT + +public: + explicit VersionHistory(int width, int height, QWidget *parent = nullptr); + ~VersionHistory(); + +private slots: + void on_pushButton_clicked(); + +private: + Ui::VersionHistory *ui; +}; + +#endif // VERSIONHISTORY_H diff --git a/src/RedisView/AppView/contributordialog.ui b/src/RedisView/AppView/contributordialog.ui index 1b706a1..06b28cb 100644 --- a/src/RedisView/AppView/contributordialog.ui +++ b/src/RedisView/AppView/contributordialog.ui @@ -13,35 +13,39 @@ 鸣谢 - - - - 300 - 270 - 75 - 23 - - - - 确定 - - - - - - 10 - 10 - 381 - 251 - - - - TextLabel - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + 确定 + + + + + + + + diff --git a/src/RedisView/AppView/valuedialog.ui b/src/RedisView/AppView/valuedialog.ui new file mode 100644 index 0000000..6df2590 --- /dev/null +++ b/src/RedisView/AppView/valuedialog.ui @@ -0,0 +1,107 @@ + + + ValueDialog + + + + 0 + 0 + 825 + 454 + + + + Dialog + + + + + + + + 格式化: + + + + + + + text + + + + + + + json + + + + + + + xml + + + + + + + html + + + + + + + Qt::Horizontal + + + + 78 + 20 + + + + + + + + + + + + + + + Qt::Horizontal + + + + 118 + 20 + + + + + + + + 确定 + + + + + + + 关闭 + + + + + + + + + + diff --git a/src/RedisView/AppView/versionHistory.ui b/src/RedisView/AppView/versionHistory.ui new file mode 100644 index 0000000..3070279 --- /dev/null +++ b/src/RedisView/AppView/versionHistory.ui @@ -0,0 +1,61 @@ + + + VersionHistory + + + + 0 + 0 + 400 + 300 + + + + Dialog + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + 确定 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + diff --git a/src/RedisView/Public/Define.h b/src/RedisView/Public/Define.h index 45329de..7beaf69 100644 --- a/src/RedisView/Public/Define.h +++ b/src/RedisView/Public/Define.h @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -69,12 +70,12 @@ #endif // 定义字符串 -#define WindowTitle "RedisView Community v1.7.0" +#define WindowTitle "RedisView Community v1.7.1" #define IniFileName "conf.ini" #define LogName "process.log" #define OrganizationName "CC20110101" #define ApplicationName "RedisView" -#define ApplicationVersion "1.7.0" +#define ApplicationVersion "1.7.1" // 定义常量 #define BATCH_SCAN_NUM 5000 @@ -110,12 +111,20 @@ #define OPERATION_TIMEOUT 4 #define OPERATION_RENAME 5 +// 定义键类型 +#define KEY_NONE 0 +#define KEY_STRING 1 +#define KEY_HASH 2 +#define KEY_SET 3 +#define KEY_ZSET 4 +#define KEY_LIST 5 + // 定义样式 -#define DEEPDARK_THEME "DeepDarkTheme" -#define DARK_THEME "DarkTheme" -#define GRAY_THEME "GrayTheme" -#define PINK_THEME "PinkTheme" -#define NO_THEME "NoTheme" +#define DEEPDARK_THEME "DeepDarkTheme" +#define DARK_THEME "DarkTheme" +#define GRAY_THEME "GrayTheme" +#define PINK_THEME "PinkTheme" +#define NO_THEME "NoTheme" // 定义样式文件 #define DARK_THEME_FILE ":/Resources/DarkTheme.qss" @@ -166,6 +175,7 @@ #define ICON_REDISINFO ":/Resources/redisinfo.ico" #define ICON_FEEDBACK ":/Resources/feedback.ico" #define ICON_UPDATE ":/Resources/update.ico" +#define ICON_DETAILS ":/Resources/details.ico" #define GIF_WAIT ":/Resources/wait.gif" extern QMutex G_DB_MUTEX; @@ -233,8 +243,8 @@ class TaskMsg { _taskid = 0; _sequence = 0; _clientIndex = 0; + _type = KEY_NONE; _key.clear(); - _type.clear(); _host.clear(); _passwd.clear(); _list.clear(); @@ -271,8 +281,8 @@ class TaskMsg { int _sequence; int _clientIndex; int _dbIndex; + int _type; QString _key; - QByteArray _type; QString _host; QString _passwd; QString _keyPattern; @@ -294,7 +304,7 @@ class CmdMsg { _dbIndex = 0; _clientIndex = 0; _score = 0; - _type.clear(); + _type = KEY_NONE; _key.clear(); _value.clear(); _filed.clear(); @@ -380,9 +390,9 @@ class CmdMsg { int _operate; //1、2、3增删改 int _dbIndex; int _clientIndex; + int _type; double _score; qlonglong _valueIndex; - QByteArray _type; QString _key; QString _filed; QString _value; @@ -409,13 +419,13 @@ class InitValueMsg _dbindex = -1; _clientIndex = -1; _key.clear(); - _type.clear(); + _type = KEY_NONE; _valuePattern.clear(); } int _dbindex; int _clientIndex; - QByteArray _type; + int _type; QString _key; QString _valuePattern; }; @@ -433,9 +443,9 @@ typedef struct DbCfg { typedef struct ImpExpData { - int iState; - qlonglong lWeight; - qlonglong lTimeOut; + int32_t iState; + int64_t lWeight; + int64_t lTimeOut; QString sKey; QString sKeyType; QString sFiled; diff --git a/src/RedisView/Public/Publib.cpp b/src/RedisView/Public/Publib.cpp index a587620..a19fadd 100644 --- a/src/RedisView/Public/Publib.cpp +++ b/src/RedisView/Public/Publib.cpp @@ -8,7 +8,7 @@ */ #include "Public/Publib.h" -qlonglong PubLib::_sequenceId = 0; +int64_t PubLib::_sequenceId = 0; void PubLib::log(QString info) { QMutexLocker locker(&G_PUBLIC_LIB_MUTEX); @@ -26,12 +26,28 @@ void PubLib::log(QString info) { file.close(); } -void PubLib::setSequenceId(qlonglong sequenceId) { +int PubLib::getKeyType(const QByteArray & type) { + if(type == "hash") { + return KEY_HASH; + } else if(type == "zset") { + return KEY_ZSET; + } else if(type == "set") { + return KEY_SET; + } else if(type == "string") { + return KEY_STRING; + } else if(type == "list") { + return KEY_LIST; + } else { + return KEY_NONE; + } +} + +void PubLib::setSequenceId(int64_t sequenceId) { QMutexLocker locker(&G_SEQUENCE_MUTEX); _sequenceId = sequenceId; } -qlonglong PubLib::getSequenceId() { +int64_t PubLib::getSequenceId() { QMutexLocker locker(&G_SEQUENCE_MUTEX); ++ _sequenceId; return _sequenceId; diff --git a/src/RedisView/Public/Publib.h b/src/RedisView/Public/Publib.h index 4785221..4bfba80 100644 --- a/src/RedisView/Public/Publib.h +++ b/src/RedisView/Public/Publib.h @@ -19,8 +19,9 @@ class PubLib static QString getConfig(const QString & key, const QString &defaultValue = ""); static void setConfigB(const QString & key, const bool & value); static bool getConfigB(const QString & key, const bool &defaultValue = false); - static void setSequenceId(qlonglong sequenceId); - static qlonglong getSequenceId(); + static void setSequenceId(int64_t sequenceId); + static int getKeyType(const QByteArray & type); + static int64_t getSequenceId(); static void log(QString info); static QStringList getMacAddr(); static QString getCpuId(); @@ -32,7 +33,7 @@ class PubLib private: static void _getcpuid(unsigned int CPUInfo[4], unsigned int InfoType); static void _getcpuidex(unsigned int CPUInfo[4], unsigned int InfoType, unsigned int ECXValue); - static qlonglong _sequenceId; + static int64_t _sequenceId; }; #endif // PUBLIB_H diff --git a/src/RedisView/Public/WorkThread.cpp b/src/RedisView/Public/WorkThread.cpp index 775a41c..2441d9d 100644 --- a/src/RedisView/Public/WorkThread.cpp +++ b/src/RedisView/Public/WorkThread.cpp @@ -506,15 +506,15 @@ int WorkThread::exportData(std::vector &vImpExpData, int taskid) sql_query.prepare(_sql); QVariantList v0, v1, v2, v3, v4, v5, v6, v7, v8; for(std::size_t i = 0; i < vImpExpData.size(); ++i) { - v0 << QVariant(PubLib::getSequenceId()) ; - v1 << QVariant(vImpExpData[i].iState); - v2 << QVariant(vImpExpData[i].lWeight); - v3 << QVariant(vImpExpData[i].lTimeOut); - v4 << QVariant(vImpExpData[i].sKey); - v5 << QVariant(vImpExpData[i].sKeyType); - v6 << QVariant(vImpExpData[i].sFiled); - v7 << QVariant(vImpExpData[i].sValue); - v8 << QVariant(vImpExpData[i].sExpDate); + v0 << PubLib::getSequenceId() ; + v1 << vImpExpData[i].iState; + v2 << vImpExpData[i].lWeight; + v3 << vImpExpData[i].lTimeOut; + v4 << vImpExpData[i].sKey; + v5 << vImpExpData[i].sKeyType; + v6 << vImpExpData[i].sFiled; + v7 << vImpExpData[i].sValue; + v8 << vImpExpData[i].sExpDate; } sql_query.addBindValue(v0); sql_query.addBindValue(v1); @@ -571,7 +571,7 @@ void WorkThread::doValueListWork() { _sendMsg = *_taskMsg; _sendMsg._list.clear(); _sendMsg._respResult.init(); - if(_taskMsg->_type == "hash") { + if(_taskMsg->_type == KEY_HASH) { do { if(_redisClient->hscan(_sendMsg._key, _sendMsg._keyPattern, _sendMsg._respResult, _cursor, BATCH_SCAN_NUM)) { _cursor = _sendMsg._respResult._arrayValue[0]._stringValue.toLongLong(); @@ -583,7 +583,7 @@ void WorkThread::doValueListWork() { } _sendMsg._respResult.init(); } while(_cursor); - } else if(_taskMsg->_type == "zset") { + } else if(_taskMsg->_type == KEY_ZSET) { do { if(_redisClient->zscan(_sendMsg._key, _sendMsg._keyPattern, _sendMsg._respResult, _cursor, BATCH_SCAN_NUM)) { _cursor = _sendMsg._respResult._arrayValue[0]._stringValue.toLongLong(); @@ -595,7 +595,7 @@ void WorkThread::doValueListWork() { } _sendMsg._respResult.init(); } while(_cursor); - } else if(_taskMsg->_type == "set") { + } else if(_taskMsg->_type == KEY_SET) { do { if(_redisClient->sscan(_sendMsg._key, _sendMsg._keyPattern, _sendMsg._respResult , _cursor, BATCH_SCAN_NUM)) { _cursor = _sendMsg._respResult._arrayValue[0]._stringValue.toLongLong(); @@ -607,7 +607,7 @@ void WorkThread::doValueListWork() { } _sendMsg._respResult.init(); } while(_cursor); - } else if(_taskMsg->_type == "list") { + } else if(_taskMsg->_type == KEY_LIST) { int start = 0; int stop = start + BATCH_SCAN_NUM; do { @@ -623,7 +623,7 @@ void WorkThread::doValueListWork() { } _sendMsg._list.clear(); } while(_cursor); - } else if(_taskMsg->_type == "string") { + } else if(_taskMsg->_type == KEY_STRING) { if(_redisClient->get(_sendMsg._key, _byteArray)) { _sendMsg._list << _byteArray; emit sendData(_sendMsg); @@ -654,25 +654,25 @@ void WorkThread::doCommitValueWork() { for(int i =0; i < _cmd.size(); ++i) { switch (_cmd[i]._operate) { case OPERATION_ADD: - if(_cmd[i]._type == "hash") { + if(_cmd[i]._type == KEY_HASH) { if(!_redisClient->hset(_cmd[i]._key,_cmd[i]._filed,_cmd[i]._value,llret)) { _string = _redisClient->getErrorInfo(); emit runError(_taskMsg->_taskid,_string); continue; } - } else if(_cmd[i]._type == "zset") { + } else if(_cmd[i]._type == KEY_ZSET) { if(!_redisClient->zadd(_cmd[i]._key,_cmd[i]._value,_cmd[i]._score,llret)) { _string = _redisClient->getErrorInfo(); emit runError(_taskMsg->_taskid,_string); continue; } - } else if(_cmd[i]._type == "set") { + } else if(_cmd[i]._type == KEY_SET) { if(!_redisClient->sadd(_cmd[i]._key,_cmd[i]._value,llret)) { _string = _redisClient->getErrorInfo(); emit runError(_taskMsg->_taskid,_string); continue; } - } else if(_cmd[i]._type == "list") { + } else if(_cmd[i]._type == KEY_LIST) { if(_cmd[i]._valueIndex == 1) { if(!_redisClient->rpush(_cmd[i]._key,_cmd[i]._value,llret)) { _string = _redisClient->getErrorInfo(); @@ -689,25 +689,25 @@ void WorkThread::doCommitValueWork() { } break; case OPERATION_DELETE: - if(_cmd[i]._type == "hash") { + if(_cmd[i]._type == KEY_HASH) { if(!_redisClient->hdel(_cmd[i]._key,_cmd[i]._filed,llret)) { _string = _redisClient->getErrorInfo(); emit runError(_taskMsg->_taskid,_string); continue; } - } else if(_cmd[i]._type == "zset") { + } else if(_cmd[i]._type == KEY_ZSET) { if(!_redisClient->zrem(_cmd[i]._key,_cmd[i]._value,llret)) { _string = _redisClient->getErrorInfo(); emit runError(_taskMsg->_taskid,_string); continue; } - } else if(_cmd[i]._type == "set") { + } else if(_cmd[i]._type == KEY_SET) { if(!_redisClient->srem(_cmd[i]._key,_cmd[i]._value,llret)) { _string = _redisClient->getErrorInfo(); emit runError(_taskMsg->_taskid,_string); continue; } - } else if(_cmd[i]._type == "list") { + } else if(_cmd[i]._type == KEY_LIST) { if(_cmd[i]._valueIndex == 1) { if(!_redisClient->rpop(_cmd[i]._key,_byteArray)) { _string = _redisClient->getErrorInfo(); @@ -724,19 +724,19 @@ void WorkThread::doCommitValueWork() { } break; case OPERATION_ALTER: - if(_cmd[i]._type == "hash") { + if(_cmd[i]._type == KEY_HASH) { if(!_redisClient->hset(_cmd[i]._key,_cmd[i]._filed,_cmd[i]._value,llret)) { _string = _redisClient->getErrorInfo(); emit runError(_taskMsg->_taskid,_string); continue; } - } else if(_cmd[i]._type == "string") { + } else if(_cmd[i]._type == KEY_STRING) { if(!_redisClient->set(_cmd[i]._key,_cmd[i]._value)) { _string = _redisClient->getErrorInfo(); emit runError(_taskMsg->_taskid,_string); continue; } - } else if(_cmd[i]._type == "list") { + } else if(_cmd[i]._type == KEY_LIST) { if(!_redisClient->lset(_cmd[i]._key,_cmd[i]._valueIndex,_cmd[i]._value)) { _string = _redisClient->getErrorInfo(); emit runError(_taskMsg->_taskid,_string); diff --git a/src/RedisView/RedisView.pro b/src/RedisView/RedisView.pro index 2933ffe..074c097 100644 --- a/src/RedisView/RedisView.pro +++ b/src/RedisView/RedisView.pro @@ -7,6 +7,8 @@ SOURCES += \ AppView/MainWindow.cpp \ AppView/RedisInfoDialog.cpp \ AppView/UpdateSystem.cpp \ + AppView/ValueDialog.cpp \ + AppView/VersionHistory.cpp \ Public/AesEncrypt.cpp \ Public/DbMgr.cpp \ Public/Define.cpp \ @@ -44,6 +46,8 @@ HEADERS += \ AppView/MainWindow.h \ AppView/RedisInfoDialog.h \ AppView/UpdateSystem.h \ + AppView/ValueDialog.h \ + AppView/VersionHistory.h \ Public/AesEncrypt.h \ Public/DbMgr.h \ Public/Define.h \ @@ -78,7 +82,7 @@ TARGET = RedisView RESOURCES += icon.qrc -QT += gui widgets core network sql +QT += gui widgets core network sql xml RC_ICONS = Resources/tray.ico @@ -95,6 +99,8 @@ FORMS += \ AppView/clientdialog.ui \ AppView/pubsubdialog.ui \ AppView/batchoperatedialog.ui \ - AppView/redisinfodialog.ui + AppView/redisinfodialog.ui \ + AppView/valuedialog.ui \ + AppView/versionHistory.ui TRANSLATIONS = en.ts cn.ts diff --git a/src/RedisView/Resources/PinkTheme.qss b/src/RedisView/Resources/PinkTheme.qss index 6dd9a09..023d14b 100644 --- a/src/RedisView/Resources/PinkTheme.qss +++ b/src/RedisView/Resources/PinkTheme.qss @@ -96,7 +96,7 @@ QPushButton { border-radius: 5; padding: 3px; min-width: 13ex; - min-height: 3ex; + min-height: 5ex; } QPushButton:hover { @@ -198,8 +198,12 @@ QDialogButtonBox { button-layout: 0; } -QPushButton#_subscribeButton, QPushButton#_unSubcribeButton { - min-width: 90px; +QPushButton#_subscribeButton { + min-width: 100px; +} + +QPushButton#_unSubcribeButton { + min-width: 120px; } QTextEdit { diff --git a/src/RedisView/Resources/details.ico b/src/RedisView/Resources/details.ico new file mode 100644 index 0000000000000000000000000000000000000000..4a0adbe063bb03426889a7dd5fddb372338f1e77 GIT binary patch literal 64062 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 literal 0 HcmV?d00001 diff --git a/src/RedisView/Resources/en.qm b/src/RedisView/Resources/en.qm index d0b303a90981c3449133ac86ebc3864f1edeaabe..e62527fed131b737ed36303bd6c3f38132db4108 100644 GIT binary patch delta 4781 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 BZG->- delta 3629 zcmY+GcU%>^U45cL^pb_E1nyDr$Gk)~@)EHp*X z1T|Pmtf22jqhi7K6h#vwMgbEWit>KzywB%--aqr5d+*#k=brOB=iWP;*{XGHuC>XR z*GV_W2hLGa>S70*fe%(p5)I@C)j6{nv$?Elf zBKr(-aJotq`V+Y=#rX2>6ckVfZlYmBVu+4hpy9$yqT;tSB48o@cZWh$J%~)jXDMuE z1Cj9rjh}yqD5)1sSgR&V-b&N?MMTywC}lt`QC~AH3GyS_lSQj+Du}#iQi&sY$cs+R z%Os*o`e*hhqE*dwwKW*y`E;#wI#I_$sw;j+wCpeXL+(yw^O633a)C%4Lhs$9$euTzfhU?85po|yZI}bgK6X*+15Y|@7Br+w_tdl zory6fSZKu<)4*@`Fvb-Y`ZLB#OMgAHG-D@GZWXgSv@emofyuErAg_cuf7pwte*p6+ zx-C(V6Z4c*L=G`b>jQkhlwpO+XGBF=tQa`kM5Ov?d4WT2vCb#5iOf!{>ql^77~A)N z84FHhQ`5?b^1oo`6CC*65_Z)u*r889Hal-Lk<*tF-QC!2cM+M8Eo_lB4B8*XmZmKu ziqo)1_aP!}HnGPp2}C;t_S9q;Hmw{qwIiBgz>5`_2wH=C!S>)EU8!lteYyYvP~jlSoux! zN+flWyuKBhJ{&1;GTbGKuvf4born^hKxc4_LK}g7XEiH?9dn8NtrhJo(ld@$ICMS< zP42j)(8pRn$W=H}Hj-|uqIVFu@`j>!zNPJ>7?O+e?0Chbt!;_;;flr8rxDUL#qKav zk?oa=lH6fP_6cA-*sM5nF@VUCmDuaH;!bTNk|{^=V9q3>^lC+286qxjQPkB%A*7=> zDt-^VhVrpM>HTOc%1axi&vN{5QH|2)nx&nl^z9Q#)M1Ts(OFpD-=s8|4-@UuDpwCI zAySqq3!XK=BNvoqf7zj`yi}H7twplPm4|{YoUFW(gn9nsm3RBWBmP@eGIwP6{Hve| zFD0W?Y+VncUXd!zunZzilFB*rIi#Ufja#|_h84Zn;RZC8O1bfL~E= zE~$M?S@6KlnQGroFR?(r+V{^m?9@daaH9@cWUtN*KL?ktQ|CsYuqT~W=O&67jVPRn(3bztw|ww#QdUWp<^z@UZmM)<%kLQHOC*KKWB%g z!eF7N=3EdAo;O%?wYUtLNz~kVy^5&Mzcei)ZxPM1(X@m_gI{P`!j^-XnwBqafaf(W zV^0vxCX=Qm8tFaTPt!6V>YY7T)3O*9dG=HAC|Jf(AVQRu%_$X6v7?ooy7OOfrJ3uw z^D+9*a2_eO(8LYSv-%TJ&pL^zFS!9;G8nv*8XxYGrXh6xb=q!`70}j*v0B%g zaP6>Mt$XnqqJvG^p>C&$7LV1AIfpcJXx5G`*P~p_(9TMSf$T=@yygZhd|taP@i+qF$wXbGM9skY=ZmupMqjYM`AwWZGR#C&UQ`GNIBKTOgdb-#>)S)n~GJVgE{ zpT|ob(Hsr<2n+?`+BrGkZ{RiXccPT`;1h5h_y@QRL`YIh|z$iAE099a?`6 zGVZTC76cb&p43$|BZi|G-RZu4plVxPl}8lX8M=#+&v4d!qpP-vGBZl|XF8bWs(bkg zM@>c%FO!`FU3lT)0i^X05|6p@Z4Q~jAfkSJTR%tKcT~I$mq%3C%G=h#mF-{hokNp} z+E(xeCWL6fxBQT+NFUCQpK@6w@+#sJ2cW;yo=>cdBpTR@PxeR1rrrW?!UI|m9-KCi zPjP6#A=<)c_+f*C_wlPl{BOVmKHH?}fr>SRFN&!}`fz-CHwVQ27yf9I8&2V0_!G8v zMCCv8mjVvq-l63$1-9V663ky3{0Z$5{O$X%aR^59&-E~9_$dDUPw>!!-}w*cuM!1! z6jbMA*uWq`{Z%-TEJDz|!1`UI1fehHFK-k~ZEr8Y#j8lrry`c7{(|F+Wkf6X3Inq& z3=u+yrVs^&3-fj-;V{z++npdbZ?#Zh$i_nVga-p_ao@Tt)al((@iqvL3T6^{1PPD+ z_C!ecNc2b*ev54bgI7rmNEhm58Q91xlTaUtAIq&IimnnnO_r#)lh~_7qQ@?YUUwuG zBntIsksTg4g%_vCBH!(WSMl3%&k2_})F{09y9rs4BD_850M+xt+r|i#a=GxXX$V4W zzM<`C8k#S>d-)!IcNLm>__O_4iTY5HJq4+!I*KYo0diC)sv}{xr?05_gdFwzPUHsT zfGE5y@sLckx;zs8Un^QSegKb%9a=FzeTQh%fH>=NBp%)?cB+Pu#224wqISEa4y!g2 z?f%<#xF)r`_LSJmMPi?Pi9R)Ar|Y-`aAzfYX(SGRD$(>tbV$TWCVnM$NrJ({>P5#O zD13M)(cO7Hu5aB$_Z4|2SXO0ufs(2vcKu$WVZ21&Q4+&rCFc1`ESf0s@IBEG4uOPb zi(Zf6p^hYRguUoJ76S4L7Jd4_-|5puzv~c|Zlc7DH)6n;2~f@=y*Tm;P7beRaZJ}j zC?`mq5`>9-wYcoHMRDHZ8pU3u!Z>k*(-NX~SHvTJb;uz{@n|6gly4>88qVT?I4RaU zp`G4+2GOxu=6pZra+UC)gSn$~jrkug8Rem_Jw41HCPbHCoRA}Dv=hyl6}IN<$30~} z8@z4H9VBU5s~rVU z9O-E~rP36dN(0FCe{-V#?_ - + 注册 - + 软件码 - + 请输入注册码 - + 注册失败 @@ -310,25 +310,25 @@ - + 链头插入 - + 链尾插入 - + 删除链头 - + 删除链尾 @@ -338,70 +338,87 @@ - + 统计条数 - + 刷新重置 - + 插入数据 - + 删除数据 - + + 查看数据 + + + + 提交操作 - + 统计值总数为 - + 统计 - - - - + + + + 错误 - + 新KEY不可为空! - - - + + + 无数据行需要删除! - + + + 提示 - + 请先选择要删除的行! + + + 请先选择单元格! + + + + + 请选择单个单元格! + + DbCfgDialog @@ -772,7 +789,7 @@ - + 命令 @@ -1015,26 +1032,26 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + 错误 @@ -1067,71 +1084,71 @@ - + 获取键值失败! - + 获取键过期时间失败! - + 获取键编码信息失败! - + 获取键引用计数失败! - + 获取键空闲时间失败! - + 多条命令执行,分隔符不可为空! - + 配置出错,非json、resp、text格式之一 - + 发送频道不可为空! - + 发送消息不可为空! - - - + + + 客户端连接信息为空! - - - + + + 客户端连接失败! - + 订阅频道不可为空! - + 未执行订阅,无需取消订阅! @@ -1916,7 +1933,6 @@ - 版本历史 @@ -2062,13 +2078,7 @@ - <br><b>RedisView</b><br><br>作者 :王长春<br>版本 :Community v1.7.0<br>邮箱 :cc20110101@126.com<br>地址 :<a href='http://www.cc123.net.cn'>RedisView</a> <a href='https://github.com/cc20110101/RedisView'>GitHub</a><br>版权 :Copyright 2019 Powered By CC<br> - <br><b>RedisView</b><br><br>作者 :王长春<br>版本 :Community v1.7.0<br>邮箱 :cc20110101@126.com<br>地址 :<a href='http://www.cc123.net.cn'>RedisView</a><a href='https://github.com/cc20110101/RedisView'>GitHub</a><br>版权 :Copyright 2019 Powered By CC<br> - - - - - <br>2019/06/26&nbsp;&nbsp;Version 1.7.0&nbsp;&nbsp;新增主题设置和数据库导入导出.<br><br>2019/06/01&nbsp;&nbsp;Version 1.6.7&nbsp;&nbsp;密码AES加密存储.<br><br>2019/05/30&nbsp;&nbsp;Version 1.6.6&nbsp;&nbsp;新增集群信息查看分析功能.<br><br>2019/05/08&nbsp;&nbsp;Version 1.6.5&nbsp;&nbsp;修复设置含空格值失败Bug.<br><br>2019/04/08&nbsp;&nbsp;Version 1.6.4&nbsp;&nbsp;修复值初始化模式Bug.<br><br>2019/04/05&nbsp;&nbsp;Version 1.6.3&nbsp;&nbsp;修复键值过长显示不全Bug.<br><br>2019/03/24&nbsp;&nbsp;Version 1.6.2&nbsp;&nbsp;增加操作进度提示,修复中文乱码Bug.<br><br>2019/03/15&nbsp;&nbsp;Version 1.6.1&nbsp;&nbsp;支持编码选择.<br><br>2019/02/21&nbsp;&nbsp;Version 1.6.0&nbsp;&nbsp;支持复制集模式.<br><br>2019/01/20&nbsp;&nbsp;Version 1.5.0&nbsp;&nbsp;增加批量删除键功能.<br><br>2019/01/19&nbsp;&nbsp;Version 1.4.0&nbsp;&nbsp;增加订阅发布模式.<br><br>2019/01/10&nbsp;&nbsp;Version 1.3.0&nbsp;&nbsp;界面调整,增加键值初始化扫描模式.<br><br>2019/01/07&nbsp;&nbsp;Version 1.2.0&nbsp;&nbsp;自定义值模型,内存优化;新增Mac、Linux版本.<br><br>2018/12/30&nbsp;&nbsp;Version 1.1.0&nbsp;&nbsp;自定义键模型,内存优化.<br><br>2018/12/25&nbsp;&nbsp;Version 1.0.0&nbsp;&nbsp;Windows初版发布.<br> + <br><b>RedisView</b><br><br>作者 :王长春<br>版本 :Community v1.7.1<br>邮箱 :cc20110101@126.com<br>地址 :<a href='http://www.cc123.net.cn/'>RedisView</a> <a href='https://github.com/cc20110101/RedisView'>GitHub</a> <a href='https://sourceforge.net/projects/redisview/'>SourceForge</a><br>版权 :Copyright 2019 Powered By CC<br> @@ -2286,14 +2296,101 @@ - + 努力检查中,请稍后... - + 功能不实现,请到下载网站更新... + + ValueDialog + + + Dialog + + + + + 格式化: + + + + + text + + + + + json + + + + + xml + + + + + html + + + + + 确定 + + + + + 关闭 + + + + + 查看 + + + + + + 错误 + + + + + 非xml格式 + + + + + 非json格式 + + + + + VersionHistory + + + Dialog + + + + + 确定 + + + + + 版本历史 + + + + + <br>2021/04/21&nbsp;&nbsp;Version 1.7.1&nbsp;&nbsp;新增键值查看功能.<br><br>2019/06/26&nbsp;&nbsp;Version 1.7.0&nbsp;&nbsp;新增主题设置和数据库导入导出.<br><br>2019/06/01&nbsp;&nbsp;Version 1.6.7&nbsp;&nbsp;密码AES加密存储.<br><br>2019/05/30&nbsp;&nbsp;Version 1.6.6&nbsp;&nbsp;新增集群信息查看分析功能.<br><br>2019/05/08&nbsp;&nbsp;Version 1.6.5&nbsp;&nbsp;修复设置含空格值失败Bug.<br><br>2019/04/08&nbsp;&nbsp;Version 1.6.4&nbsp;&nbsp;修复值初始化模式Bug.<br><br>2019/04/05&nbsp;&nbsp;Version 1.6.3&nbsp;&nbsp;修复键值过长显示不全Bug.<br><br>2019/03/24&nbsp;&nbsp;Version 1.6.2&nbsp;&nbsp;增加操作进度提示,修复中文乱码Bug.<br><br>2019/03/15&nbsp;&nbsp;Version 1.6.1&nbsp;&nbsp;支持编码选择.<br><br>2019/02/21&nbsp;&nbsp;Version 1.6.0&nbsp;&nbsp;支持复制集模式.<br><br>2019/01/20&nbsp;&nbsp;Version 1.5.0&nbsp;&nbsp;增加批量删除键功能.<br><br>2019/01/19&nbsp;&nbsp;Version 1.4.0&nbsp;&nbsp;增加订阅发布模式.<br><br>2019/01/10&nbsp;&nbsp;Version 1.3.0&nbsp;&nbsp;界面调整,增加键值初始化扫描模式.<br><br>2019/01/07&nbsp;&nbsp;Version 1.2.0&nbsp;&nbsp;自定义值模型,内存优化;新增Mac、Linux版本.<br><br>2018/12/30&nbsp;&nbsp;Version 1.1.0&nbsp;&nbsp;自定义键模型,内存优化.<br><br>2018/12/25&nbsp;&nbsp;Version 1.0.0&nbsp;&nbsp;Windows初版发布.<br> + + + diff --git a/src/RedisView/en.ts b/src/RedisView/en.ts index 8b9bcc9..0fbc399 100644 --- a/src/RedisView/en.ts +++ b/src/RedisView/en.ts @@ -251,25 +251,25 @@ Cancel - + 注册 Register Register - + 软件码 Software Code Software Code - + 请输入注册码 Please enter the registration code Please enter the registration code - + 注册失败 Registration Failed Registration Failed @@ -364,28 +364,28 @@ - + 链头插入 InsertHead InsertHead - + 链尾插入 InsertTail InsertTail - + 删除链头 DeleteHead DeleteHead - + 删除链尾 DeleteTail DeleteTail @@ -397,82 +397,102 @@ Value Pattern: - + 统计条数 Count Count - + 刷新重置 Refresh Refresh - + 插入数据 Insert Insert - + 删除数据 Delete Delete - + + 查看数据 + View + View + + + 提交操作 Submit Submit - + 统计值总数为 The total number of value is The total number of value is - + 统计 Statistics Statistics - - - - + + + + 错误 Error Error - + 新KEY不可为空! New key cannot be empty! New key cannot be empty! - - - + + + 无数据行需要删除! No data rows need to be deleted! No data rows need to be deleted! - + + + 提示 Tips Tips - + 请先选择要删除的行! Please select the record to delete! Please select the record to delete! + + + 请先选择单元格! + Please select the cell first! + Please select the cell first! + + + + 请选择单个单元格! + Please select a single cell! + Please select a single cell! + DbCfgDialog @@ -910,7 +930,7 @@ the best, everything goes well... - + 命令 Command Command @@ -1194,26 +1214,26 @@ the best, everything goes well... - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + 错误 Error Error @@ -1221,8 +1241,8 @@ the best, everything goes well... 获取键超时时间失败 - Failed to get the key expiration time! - Failed to get the key expiration time! + Failed to get the key expiration time + Failed to get the key expiration time @@ -1252,83 +1272,83 @@ the best, everything goes well... Failed to get the key type! - + 获取键值失败! Failed to get key value! Failed to get key value! - + 获取键过期时间失败! Failed to get the key expiration time! Failed to get the key expiration time! - + 获取键编码信息失败! Failed to get keycode information! Failed to get keycode information! - + 获取键引用计数失败! Failed to get key reference coun! Failed to get key reference coun! - + 获取键空闲时间失败! Failed to get key idle time! Failed to get key idle time! - + 多条命令执行,分隔符不可为空! When multiple commands are executed, the separator cannot be empty! When multiple commands are executed, the separator cannot be empty! - + 配置出错,非json、resp、text格式之一 Configuration error, not one of json, resp, text format Configuration error, not one of json, resp, text format - + 发送频道不可为空! Send channel can't be empty! Send channel can't be empty! - + 发送消息不可为空! Sending messages can't be empty! Sending messages can't be empty! - - - + + + 客户端连接信息为空! Client connection information is empty! Client connection information is empty! - - - + + + 客户端连接失败! Client connection failed! Client connection failed! - + 订阅频道不可为空! Subscription channels cannot be empty! Subscription channels cannot be empty! - + 未执行订阅,无需取消订阅! No subscription, no cancellation! No subscription, no cancellation! @@ -2269,7 +2289,6 @@ the best, everything goes well... - 版本历史 Version Log Version Log @@ -2442,16 +2461,9 @@ the best, everything goes well... - <br><b>RedisView</b><br><br>作者 :王长春<br>版本 :Community v1.7.0<br>邮箱 :cc20110101@126.com<br>地址 :<a href='http://www.cc123.net.cn'>RedisView</a> <a href='https://github.com/cc20110101/RedisView'>GitHub</a><br>版权 :Copyright 2019 Powered By CC<br> - <br><b>RedisView</b><br><br>作者 :王长春<br>版本 :Community v1.7.0<br>邮箱 :cc20110101@126.com<br>地址 :<a href='http://www.cc123.net.cn'>RedisView</a><a href='https://github.com/cc20110101/RedisView'>GitHub</a><br>版权 :Copyright 2019 Powered By CC<br> - <br><b>RedisView</b><br><br>Author :WangChangchun<br>Version : Community v1.7.0<br>Mailbox :cc20110101@126.com<br>Address :<a href='<br><b>RedisView</b><br><br>Author :WangChangchun<br>Version : Community v1.7.0<br>Mailbox :cc20110101@126.com<br>Address :<a href='http://www.cc123.net.cn'>RedisView</a> <a href='https://github.com/cc20110101/RedisView'>GitHub</a> <br>Copyright :Copyright 2019 Powered By CC<br> - <br><b>RedisView</b><br><br>Author :WangChangchun<br>Version: Community v1.7.0<br>Mailbox :cc20110101@126.com<br>Address :<a href='<br><b>RedisView</b><br><br>Author :WangChangchun<br>Version : Community v1.7.0<br>Mailbox :cc20110101@126.com<br>Address :<a href='http://www.cc123.net.cn'>RedisView</a> <a href='https://github.com/cc20110101/RedisView'>GitHub</a><br>Copyright :Copyright 2019 Powered By CC<br> - - - - <br>2019/06/26&nbsp;&nbsp;Version 1.7.0&nbsp;&nbsp;新增主题设置和数据库导入导出.<br><br>2019/06/01&nbsp;&nbsp;Version 1.6.7&nbsp;&nbsp;密码AES加密存储.<br><br>2019/05/30&nbsp;&nbsp;Version 1.6.6&nbsp;&nbsp;新增集群信息查看分析功能.<br><br>2019/05/08&nbsp;&nbsp;Version 1.6.5&nbsp;&nbsp;修复设置含空格值失败Bug.<br><br>2019/04/08&nbsp;&nbsp;Version 1.6.4&nbsp;&nbsp;修复值初始化模式Bug.<br><br>2019/04/05&nbsp;&nbsp;Version 1.6.3&nbsp;&nbsp;修复键值过长显示不全Bug.<br><br>2019/03/24&nbsp;&nbsp;Version 1.6.2&nbsp;&nbsp;增加操作进度提示,修复中文乱码Bug.<br><br>2019/03/15&nbsp;&nbsp;Version 1.6.1&nbsp;&nbsp;支持编码选择.<br><br>2019/02/21&nbsp;&nbsp;Version 1.6.0&nbsp;&nbsp;支持复制集模式.<br><br>2019/01/20&nbsp;&nbsp;Version 1.5.0&nbsp;&nbsp;增加批量删除键功能.<br><br>2019/01/19&nbsp;&nbsp;Version 1.4.0&nbsp;&nbsp;增加订阅发布模式.<br><br>2019/01/10&nbsp;&nbsp;Version 1.3.0&nbsp;&nbsp;界面调整,增加键值初始化扫描模式.<br><br>2019/01/07&nbsp;&nbsp;Version 1.2.0&nbsp;&nbsp;自定义值模型,内存优化;新增Mac、Linux版本.<br><br>2018/12/30&nbsp;&nbsp;Version 1.1.0&nbsp;&nbsp;自定义键模型,内存优化.<br><br>2018/12/25&nbsp;&nbsp;Version 1.0.0&nbsp;&nbsp;Windows初版发布.<br> - <br>2019/06/26&nbsp;&nbsp;Version 1.7.7&nbsp;&nbsp;New theme settings and database import and export.<br><br>2019/06/01&nbsp;&nbsp;Version 1.6.7&nbsp;&nbsp;Password AES encrypted storage.<br><br>2019/05/30&nbsp;&nbsp;Version 1.6.6&nbsp;&nbsp;Added cluster viewing and analysis capabilities.<br><br>2019/05/08&nbsp;&nbsp;Version 1.6.5&nbsp;&nbsp;Fix setting bug with space value failed.<br><br>2019/04/08&nbsp;&nbsp;Version 1.6.4&nbsp;&nbsp;Fix value initialization pattern bug.<br><br>2019/04/05&nbsp;&nbsp;Version 1.6.3&nbsp;&nbsp;Repair incomplete display bug when key value is too long.<br><br>2019/03/24&nbsp;&nbsp;Version 1.6.2&nbsp;&nbsp;Increase progress hints,fix chinese garbled bug.<br><br>2019/03/15&nbsp;&nbsp;Version 1.6.1&nbsp;&nbsp;Support coding settings.<br><br>2019/02/21&nbsp;&nbsp;Version 1.6.0&nbsp;&nbsp;Support replication mode.<br><br>2019/01/20&nbsp;&nbsp;Version 1.5.0&nbsp;&nbsp;Add batch deletion key function.<br><br>2019/01/19&nbsp;&nbsp;Version 1.4.0&nbsp;&nbsp;Adding subscription publishing mode.<br><br>2019/01/10&nbsp;&nbsp;Version 1.3.0&nbsp;&nbsp;Adjust view interface,adding keys and values to initialize scan mode.<br><br>2019/01/07&nbsp;&nbsp;Version 1.2.0&nbsp;&nbsp;Custom value model, memory optimization; add mac and linux version.<br><br>2018/12/30&nbsp;&nbsp;Version 1.1.0&nbsp;&nbsp;Custom key model, memory optimization.<br><br>2018/12/25&nbsp;&nbsp;Version 1.0.0&nbsp;&nbsp;Initial release of windows.<br> - <br>2019/06/26&nbsp;&nbsp;Version 1.7.7&nbsp;&nbsp;New theme settings and database import and export.<br><br>2019/06/01&nbsp;&nbsp;Version 1.6.7&nbsp;&nbsp;Password AES encrypted storage.<br><br>2019/05/30&nbsp;&nbsp;Version 1.6.6&nbsp;&nbsp;Added cluster viewing and analysis capabilities.<br><br>2019/05/08&nbsp;&nbsp;Version 1.6.5&nbsp;&nbsp;Fix setting bug with space value failed.<br><br>2019/04/08&nbsp;&nbsp;Version 1.6.4&nbsp;&nbsp;Fix value initialization pattern bug.<br><br>2019/04/05&nbsp;&nbsp;Version 1.6.3&nbsp;&nbsp;Repair incomplete display bug when key value is too long.<br><br>2019/03/24&nbsp;&nbsp;Version 1.6.2&nbsp;&nbsp;Increase progress hints,fix chinese garbled bug.<br><br>2019/03/15&nbsp;&nbsp;Version 1.6.1&nbsp;&nbsp;Support coding settings.<br><br>2019/02/21&nbsp;&nbsp;Version 1.6.0&nbsp;&nbsp;Support replication mode.<br><br>2019/01/20&nbsp;&nbsp;Version 1.5.0&nbsp;&nbsp;Add batch deletion key function.<br><br>2019/01/19&nbsp;&nbsp;Version 1.4.0&nbsp;&nbsp;Adding subscription publishing mode.<br><br>2019/01/10&nbsp;&nbsp;Version 1.3.0&nbsp;&nbsp;Adjust view interface,adding keys and values to initialize scan mode.<br><br>2019/01/07&nbsp;&nbsp;Version 1.2.0&nbsp;&nbsp;Custom value model, memory optimization; add mac and linux version.<br><br>2018/12/30&nbsp;&nbsp;Version 1.1.0&nbsp;&nbsp;Custom key model, memory optimization.<br><br>2018/12/25&nbsp;&nbsp;Version 1.0.0&nbsp;&nbsp;Initial release of windows.<br> + <br><b>RedisView</b><br><br>作者 :王长春<br>版本 :Community v1.7.1<br>邮箱 :cc20110101@126.com<br>地址 :<a href='http://www.cc123.net.cn/'>RedisView</a> <a href='https://github.com/cc20110101/RedisView'>GitHub</a> <a href='https://sourceforge.net/projects/redisview/'>SourceForge</a><br>版权 :Copyright 2019 Powered By CC<br> + <br><b>RedisView</b><br><br>Author : WangChangchun<br>Version : Community v1.7.1<br>Mailbox : cc20110101@126.com<br>Address : <a href='http://www.cc123.net.cn/'>RedisView</a> <a href='https://github.com/cc20110101/RedisView'>GitHub</a> <a href='https://sourceforge.net/projects/redisview/'>SourceForge</a><br>Copyright : Copyright 2019 Powered By CC<br> + <br><b>RedisView</b><br><br>Author : WangChangchun<br>Version : Community v1.7.1<br>Mailbox : cc20110101@126.com<br>Address : <a href='http://www.cc123.net.cn/'>RedisView</a> <a href='https://github.com/cc20110101/RedisView'>GitHub</a> <a href='https://sourceforge.net/projects/redisview/'>SourceForge</a><br>Copyright : Copyright 2019 Powered By CC<br> @@ -2708,16 +2720,119 @@ the best, everything goes well... Check Update - + 努力检查中,请稍后... Try hard to check, please wait... Try hard to check, please wait... - + 功能不实现,请到下载网站更新... - Please check update from website - Please check update from website + Please check the official website for updates... + Please check the official website for updates... + + + + ValueDialog + + + Dialog + Dialog + Dialog + + + + 格式化: + Dormat: + Dormat: + + + + text + text + text + + + + json + json + json + + + + xml + xml + xml + + + + html + html + html + + + + 确定 + ok + ok + + + + 关闭 + no + no + + + + 查看 + View + View + + + + + 错误 + Error + Error + + + + 非xml格式 + Non-xml format + Non-xml format + + + + 非json格式 + Non-json format + Non-json format + + + + VersionHistory + + + Dialog + Dialog + Dialog + + + + 确定 + ok + ok + + + + 版本历史 + Version Log + Version Log + + + + <br>2021/04/21&nbsp;&nbsp;Version 1.7.1&nbsp;&nbsp;新增键值查看功能.<br><br>2019/06/26&nbsp;&nbsp;Version 1.7.0&nbsp;&nbsp;新增主题设置和数据库导入导出.<br><br>2019/06/01&nbsp;&nbsp;Version 1.6.7&nbsp;&nbsp;密码AES加密存储.<br><br>2019/05/30&nbsp;&nbsp;Version 1.6.6&nbsp;&nbsp;新增集群信息查看分析功能.<br><br>2019/05/08&nbsp;&nbsp;Version 1.6.5&nbsp;&nbsp;修复设置含空格值失败Bug.<br><br>2019/04/08&nbsp;&nbsp;Version 1.6.4&nbsp;&nbsp;修复值初始化模式Bug.<br><br>2019/04/05&nbsp;&nbsp;Version 1.6.3&nbsp;&nbsp;修复键值过长显示不全Bug.<br><br>2019/03/24&nbsp;&nbsp;Version 1.6.2&nbsp;&nbsp;增加操作进度提示,修复中文乱码Bug.<br><br>2019/03/15&nbsp;&nbsp;Version 1.6.1&nbsp;&nbsp;支持编码选择.<br><br>2019/02/21&nbsp;&nbsp;Version 1.6.0&nbsp;&nbsp;支持复制集模式.<br><br>2019/01/20&nbsp;&nbsp;Version 1.5.0&nbsp;&nbsp;增加批量删除键功能.<br><br>2019/01/19&nbsp;&nbsp;Version 1.4.0&nbsp;&nbsp;增加订阅发布模式.<br><br>2019/01/10&nbsp;&nbsp;Version 1.3.0&nbsp;&nbsp;界面调整,增加键值初始化扫描模式.<br><br>2019/01/07&nbsp;&nbsp;Version 1.2.0&nbsp;&nbsp;自定义值模型,内存优化;新增Mac、Linux版本.<br><br>2018/12/30&nbsp;&nbsp;Version 1.1.0&nbsp;&nbsp;自定义键模型,内存优化.<br><br>2018/12/25&nbsp;&nbsp;Version 1.0.0&nbsp;&nbsp;Windows初版发布.<br> + <br>2021/04/21&nbsp;&nbsp;Version 1.7.1&nbsp;&nbsp;Added key value view function.<br><br>2019/06/26&nbsp;&nbsp;Version 1.7.0&nbsp;&nbsp;New theme settings and database import and export.<br><br>2019/06/01&nbsp;&nbsp;Version 1.6.7&nbsp;&nbsp;Password AES encrypted storage.<br><br>2019/05/30&nbsp;&nbsp;Version 1.6.6&nbsp;&nbsp;Added cluster viewing and analysis capabilities.<br><br>2019/05/08&nbsp;&nbsp;Version 1.6.5&nbsp;&nbsp;Fix setting bug with space value failed.<br><br>2019/04/08&nbsp;&nbsp;Version 1.6.4&nbsp;&nbsp;Fix value initialization pattern bug.<br><br>2019/04/05&nbsp;&nbsp;Version 1.6.3&nbsp;&nbsp;Repair incomplete display bug when key value is too long.<br><br>2019/03/24&nbsp;&nbsp;Version 1.6.2&nbsp;&nbsp;Increase progress hints,fix chinese garbled bug.<br><br>2019/03/15&nbsp;&nbsp;Version 1.6.1&nbsp;&nbsp;Support coding settings.<br><br>2019/02/21&nbsp;&nbsp;Version 1.6.0&nbsp;&nbsp;Support replication mode.<br><br>2019/01/20&nbsp;&nbsp;Version 1.5.0&nbsp;&nbsp;Add batch deletion key function.<br><br>2019/01/19&nbsp;&nbsp;Version 1.4.0&nbsp;&nbsp;Adding subscription publishing mode.<br><br>2019/01/10&nbsp;&nbsp;Version 1.3.0&nbsp;&nbsp;Adjust view interface,adding keys and values to initialize scan mode.<br><br>2019/01/07&nbsp;&nbsp;Version 1.2.0&nbsp;&nbsp;Custom value model, memory optimization; add mac and linux version.<br><br>2018/12/30&nbsp;&nbsp;Version 1.1.0&nbsp;&nbsp;Custom key model, memory optimization.<br><br>2018/12/25&nbsp;&nbsp;Version 1.0.0&nbsp;&nbsp;Initial release of windows.<br> + <br>2021/04/21&nbsp;&nbsp;Version 1.7.1&nbsp;&nbsp;Added key value view function.<br><br>2019/06/26&nbsp;&nbsp;Version 1.7.0&nbsp;&nbsp;New theme settings and database import and export.<br><br>2019/06/01&nbsp;&nbsp;Version 1.6.7&nbsp;&nbsp;Password AES encrypted storage.<br><br>2019/05/30&nbsp;&nbsp;Version 1.6.6&nbsp;&nbsp;Added cluster viewing and analysis capabilities.<br><br>2019/05/08&nbsp;&nbsp;Version 1.6.5&nbsp;&nbsp;Fix setting bug with space value failed.<br><br>2019/04/08&nbsp;&nbsp;Version 1.6.4&nbsp;&nbsp;Fix value initialization pattern bug.<br><br>2019/04/05&nbsp;&nbsp;Version 1.6.3&nbsp;&nbsp;Repair incomplete display bug when key value is too long.<br><br>2019/03/24&nbsp;&nbsp;Version 1.6.2&nbsp;&nbsp;Increase progress hints,fix chinese garbled bug.<br><br>2019/03/15&nbsp;&nbsp;Version 1.6.1&nbsp;&nbsp;Support coding settings.<br><br>2019/02/21&nbsp;&nbsp;Version 1.6.0&nbsp;&nbsp;Support replication mode.<br><br>2019/01/20&nbsp;&nbsp;Version 1.5.0&nbsp;&nbsp;Add batch deletion key function.<br><br>2019/01/19&nbsp;&nbsp;Version 1.4.0&nbsp;&nbsp;Adding subscription publishing mode.<br><br>2019/01/10&nbsp;&nbsp;Version 1.3.0&nbsp;&nbsp;Adjust view interface,adding keys and values to initialize scan mode.<br><br>2019/01/07&nbsp;&nbsp;Version 1.2.0&nbsp;&nbsp;Custom value model, memory optimization; add mac and linux version.<br><br>2018/12/30&nbsp;&nbsp;Version 1.1.0&nbsp;&nbsp;Custom key model, memory optimization.<br><br>2018/12/25&nbsp;&nbsp;Version 1.0.0&nbsp;&nbsp;Initial release of windows.<br> diff --git a/src/RedisView/icon.qrc b/src/RedisView/icon.qrc index aeac495..5be4d7f 100644 --- a/src/RedisView/icon.qrc +++ b/src/RedisView/icon.qrc @@ -23,7 +23,6 @@ Resources/flush.ico Resources/commit.ico Resources/delhead.ico - Resources/deltail.ico Resources/inhead.ico Resources/intail.ico Resources/instruction.ico @@ -51,5 +50,7 @@ Resources/GrayTheme.qss Resources/DeepDarkTheme.qss Resources/PinkTheme.qss + Resources/details.ico + Resources/deltail.ico