Merge branch 'new-frontend' into 'new-frontend'
Fix best list bug; Optimize up and down key switching logic; Dynamically get... See merge request kylin-desktop/ukui-search!107
This commit is contained in:
commit
9d34095932
|
@ -66,7 +66,7 @@ void TitleLabel::paintEvent(QPaintEvent * event) {
|
||||||
|
|
||||||
void TitleLabel::onListLengthChanged(const int &length)
|
void TitleLabel::onListLengthChanged(const int &length)
|
||||||
{
|
{
|
||||||
m_showMoreLabel->setVisible(length >= NUM_LIMIT_SHOWN_DEFAULT);
|
m_showMoreLabel->setVisible(length > NUM_LIMIT_SHOWN_DEFAULT);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TitleLabel::lableReset()
|
void TitleLabel::lableReset()
|
||||||
|
|
|
@ -37,6 +37,7 @@ using namespace Zeeker;
|
||||||
#define ACTION_NORMAL_COLOR QColor(55, 144, 250, 255)
|
#define ACTION_NORMAL_COLOR QColor(55, 144, 250, 255)
|
||||||
#define ACTION_HOVER_COLOR QColor(64, 169, 251, 255)
|
#define ACTION_HOVER_COLOR QColor(64, 169, 251, 255)
|
||||||
#define ACTION_PRESS_COLOR QColor(41, 108, 217, 255)
|
#define ACTION_PRESS_COLOR QColor(41, 108, 217, 255)
|
||||||
|
#define TITLE_HEIGHT 30
|
||||||
|
|
||||||
ResultArea::ResultArea(QWidget *parent) : QScrollArea(parent)
|
ResultArea::ResultArea(QWidget *parent) : QScrollArea(parent)
|
||||||
{
|
{
|
||||||
|
@ -127,7 +128,7 @@ void ResultArea::pressDown()
|
||||||
QModelIndex setIndex = m_bestListWidget->getModlIndex(++row, 0);
|
QModelIndex setIndex = m_bestListWidget->getModlIndex(++row, 0);
|
||||||
m_bestListWidget->setResultSelection(setIndex);
|
m_bestListWidget->setResultSelection(setIndex);
|
||||||
sendKeyPressSignal(m_selectedPluginID);
|
sendKeyPressSignal(m_selectedPluginID);
|
||||||
} else if (index.row() == maxNum - 1 or index.row() < 0) {//跳转下一个widget
|
} else if (index.row() >= maxNum - 1 or index.row() < 0) {//跳转下一个widget
|
||||||
m_bestListWidget->clearResultSelection();
|
m_bestListWidget->clearResultSelection();
|
||||||
for (ResultWidget * plugin : m_widget_list) {
|
for (ResultWidget * plugin : m_widget_list) {
|
||||||
if (plugin->getResultNum() != 0) {
|
if (plugin->getResultNum() != 0) {
|
||||||
|
@ -153,7 +154,7 @@ void ResultArea::pressDown()
|
||||||
QModelIndex setIndex = plugin->getModlIndex(++row, 0);
|
QModelIndex setIndex = plugin->getModlIndex(++row, 0);
|
||||||
plugin->setResultSelection(setIndex);
|
plugin->setResultSelection(setIndex);
|
||||||
sendKeyPressSignal(m_selectedPluginID);
|
sendKeyPressSignal(m_selectedPluginID);
|
||||||
} else if (index.row() == maxNum - 1 or index.row() < 0) {//跳转下一个widget
|
} else if (index.row() >= maxNum - 1 or index.row() < 0) {//跳转下一个widget
|
||||||
plugin->clearResultSelection();
|
plugin->clearResultSelection();
|
||||||
int indexNum = m_widget_list.indexOf(plugin);
|
int indexNum = m_widget_list.indexOf(plugin);
|
||||||
bool findNextWidget = false;
|
bool findNextWidget = false;
|
||||||
|
@ -217,7 +218,7 @@ void ResultArea::pressUp()
|
||||||
int maxNum = m_bestListWidget->getExpandState() ?
|
int maxNum = m_bestListWidget->getExpandState() ?
|
||||||
m_bestListWidget->getResultNum() : (m_bestListWidget->getResultNum() < NUM_LIMIT_SHOWN_DEFAULT ?
|
m_bestListWidget->getResultNum() : (m_bestListWidget->getResultNum() < NUM_LIMIT_SHOWN_DEFAULT ?
|
||||||
m_bestListWidget->getResultNum() : NUM_LIMIT_SHOWN_DEFAULT);
|
m_bestListWidget->getResultNum() : NUM_LIMIT_SHOWN_DEFAULT);
|
||||||
if (index.row() > 0) {
|
if (index.row() > 0 and index.row() < maxNum) {
|
||||||
int row = index.row();
|
int row = index.row();
|
||||||
QModelIndex setIndex = m_bestListWidget->getModlIndex(--row, 0);
|
QModelIndex setIndex = m_bestListWidget->getModlIndex(--row, 0);
|
||||||
m_bestListWidget->setResultSelection(setIndex);
|
m_bestListWidget->setResultSelection(setIndex);
|
||||||
|
@ -225,13 +226,18 @@ void ResultArea::pressUp()
|
||||||
} else if (index.row() == 0) {
|
} else if (index.row() == 0) {
|
||||||
//已到最上层,暂不处理
|
//已到最上层,暂不处理
|
||||||
} else {
|
} else {
|
||||||
qWarning() << "QModelIndex error ! row:" << index.row() << "maxNum:" << maxNum;
|
QModelIndex setIndex = m_bestListWidget->getModlIndex(--maxNum, 0);
|
||||||
|
m_bestListWidget->setResultSelection(setIndex);
|
||||||
|
sendKeyPressSignal(m_selectedPluginID);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (ResultWidget * plugin : m_widget_list) {
|
for (ResultWidget * plugin : m_widget_list) {
|
||||||
if (m_selectedPluginID == plugin->pluginId()) {
|
if (m_selectedPluginID == plugin->pluginId()) {
|
||||||
|
int indexMaxNum = plugin->getExpandState() ?
|
||||||
|
plugin->getResultNum() : (plugin->getResultNum() < NUM_LIMIT_SHOWN_DEFAULT ?
|
||||||
|
plugin->getResultNum() : NUM_LIMIT_SHOWN_DEFAULT);
|
||||||
QModelIndex index = plugin->getCurrentSelection();
|
QModelIndex index = plugin->getCurrentSelection();
|
||||||
if (index.row() > 0) {
|
if (index.row() > 0 and index.row() < indexMaxNum) {
|
||||||
int row = index.row();
|
int row = index.row();
|
||||||
QModelIndex setIndex = plugin->getModlIndex(--row, 0);
|
QModelIndex setIndex = plugin->getModlIndex(--row, 0);
|
||||||
plugin->setResultSelection(setIndex);
|
plugin->setResultSelection(setIndex);
|
||||||
|
@ -268,10 +274,7 @@ void ResultArea::pressUp()
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
int maxNum = plugin->getExpandState() ?
|
QModelIndex setIndex = plugin->getModlIndex(indexMaxNum - 1, 0);
|
||||||
plugin->getResultNum() : (plugin->getResultNum() < NUM_LIMIT_SHOWN_DEFAULT ?
|
|
||||||
plugin->getResultNum() : NUM_LIMIT_SHOWN_DEFAULT);
|
|
||||||
QModelIndex setIndex = plugin->getModlIndex(maxNum - 1, 0);
|
|
||||||
plugin->setResultSelection(setIndex);
|
plugin->setResultSelection(setIndex);
|
||||||
sendKeyPressSignal(m_selectedPluginID);
|
sendKeyPressSignal(m_selectedPluginID);
|
||||||
}
|
}
|
||||||
|
@ -288,10 +291,11 @@ bool ResultArea::getSelectedState()
|
||||||
void ResultArea::sendKeyPressSignal(QString &pluginID)
|
void ResultArea::sendKeyPressSignal(QString &pluginID)
|
||||||
{
|
{
|
||||||
int height(0);
|
int height(0);
|
||||||
|
int resultHeight = m_bestListWidget->getResultHeight();
|
||||||
if (pluginID == m_bestListWidget->getWidgetName()) {
|
if (pluginID == m_bestListWidget->getWidgetName()) {
|
||||||
QModelIndex index = m_bestListWidget->getCurrentSelection();
|
QModelIndex index = m_bestListWidget->getCurrentSelection();
|
||||||
height = index.row() == 0 ? 0 : index.row() * 35 + 30;//35为modol单个结果高度,30为title高度
|
height = index.row() == 0 ? 0 : index.row() * resultHeight + TITLE_HEIGHT;
|
||||||
height = (height - 35) < 0 ? 0 : height - 35;
|
height = (height - resultHeight) < 0 ? 0 : height - resultHeight;
|
||||||
this->ensureVisible(0, height, 0, 0);
|
this->ensureVisible(0, height, 0, 0);
|
||||||
if (m_detail_open_state) {
|
if (m_detail_open_state) {
|
||||||
Q_EMIT this->keyPressChanged(m_bestListWidget->getPluginInfo(index), m_bestListWidget->getIndexResultInfo(index));
|
Q_EMIT this->keyPressChanged(m_bestListWidget->getPluginInfo(index), m_bestListWidget->getIndexResultInfo(index));
|
||||||
|
@ -301,10 +305,10 @@ void ResultArea::sendKeyPressSignal(QString &pluginID)
|
||||||
for (ResultWidget *plugin : m_widget_list) {
|
for (ResultWidget *plugin : m_widget_list) {
|
||||||
if (pluginID == plugin->pluginId()) {
|
if (pluginID == plugin->pluginId()) {
|
||||||
QModelIndex index = plugin->getCurrentSelection();
|
QModelIndex index = plugin->getCurrentSelection();
|
||||||
height += index.row() == 0 ? 0 : index.row() * 35 + 30;//35为modol单个结果高度,30为title高度
|
height += index.row() == 0 ? 0 : index.row() * resultHeight + TITLE_HEIGHT;
|
||||||
int moreHeight = index.row() == 0 ? (30 + 35 * 2) : (35 * 2);
|
int moreHeight = index.row() == 0 ? (TITLE_HEIGHT + resultHeight * 2) : (resultHeight * 2);
|
||||||
this->ensureVisible(0, height + moreHeight, 0, 0);
|
this->ensureVisible(0, height + moreHeight, 0, 0);
|
||||||
height = (height - 35) < 0 ? 0 : height - 35;
|
height = (height - resultHeight) < 0 ? 0 : height - resultHeight;
|
||||||
this->ensureVisible(0, height, 0, 0);
|
this->ensureVisible(0, height, 0, 0);
|
||||||
if (m_detail_open_state) {
|
if (m_detail_open_state) {
|
||||||
Q_EMIT this->keyPressChanged(m_selectedPluginID, plugin->getIndexResultInfo(index));
|
Q_EMIT this->keyPressChanged(m_selectedPluginID, plugin->getIndexResultInfo(index));
|
||||||
|
|
|
@ -518,7 +518,6 @@ void MainWindow::setSearchMethod(const bool &is_index_search) {
|
||||||
*/
|
*/
|
||||||
void MainWindow::keyPressEvent(QKeyEvent *event)
|
void MainWindow::keyPressEvent(QKeyEvent *event)
|
||||||
{
|
{
|
||||||
qDebug() << "press:" << event->key();
|
|
||||||
if (event->key() == Qt::Key_Escape) {
|
if (event->key() == Qt::Key_Escape) {
|
||||||
tryHideMainwindow();
|
tryHideMainwindow();
|
||||||
} else if (event->key() == Qt::Key_Return or event->key() == Qt::Key_Enter) {
|
} else if (event->key() == Qt::Key_Return or event->key() == Qt::Key_Enter) {
|
||||||
|
|
|
@ -59,6 +59,11 @@ const QString BestListView::getPluginInfo(const QModelIndex& index)
|
||||||
return this->m_model->getPluginInfo(index);
|
return this->m_model->getPluginInfo(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int BestListView::getResultHeight()
|
||||||
|
{
|
||||||
|
return this->rowHeight(this->model()->index(0, 0, QModelIndex()));
|
||||||
|
}
|
||||||
|
|
||||||
void BestListView::clearSelectedRow()
|
void BestListView::clearSelectedRow()
|
||||||
{
|
{
|
||||||
if (!m_is_selected) {
|
if (!m_is_selected) {
|
||||||
|
@ -111,7 +116,9 @@ void BestListView::onItemListChanged(const int &count)
|
||||||
|
|
||||||
void BestListView::setExpanded(const bool &is_expanded)
|
void BestListView::setExpanded(const bool &is_expanded)
|
||||||
{
|
{
|
||||||
|
QModelIndex index = this->currentIndex();
|
||||||
m_model->setExpanded(is_expanded);
|
m_model->setExpanded(is_expanded);
|
||||||
|
this->setCurrentIndex(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
const bool &BestListView::isExpanded()
|
const bool &BestListView::isExpanded()
|
||||||
|
@ -164,7 +171,13 @@ void BestListView::initConnections()
|
||||||
connect(this, &BestListView::clicked, this, &BestListView::onRowSelectedSlot);
|
connect(this, &BestListView::clicked, this, &BestListView::onRowSelectedSlot);
|
||||||
connect(this, &BestListView::activated, this, &BestListView::onRowDoubleClickedSlot);
|
connect(this, &BestListView::activated, this, &BestListView::onRowDoubleClickedSlot);
|
||||||
connect(m_model, &BestListModel::itemListChanged, this, &BestListView::onItemListChanged);
|
connect(m_model, &BestListModel::itemListChanged, this, &BestListView::onItemListChanged);
|
||||||
connect(this, &BestListView::sendBestListData, m_model, &BestListModel::appendInfo);
|
connect(this, &BestListView::sendBestListData, this, [=] (const QString &plugin, const SearchPluginIface::ResultInfo&info) {
|
||||||
|
QModelIndex index = this->currentIndex();
|
||||||
|
this->m_model->appendInfo(plugin, info);
|
||||||
|
if (index.isValid()) {
|
||||||
|
this->setCurrentIndex(index);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
BestListWidget::BestListWidget(QWidget *parent) : QWidget(parent)
|
BestListWidget::BestListWidget(QWidget *parent) : QWidget(parent)
|
||||||
|
@ -196,13 +209,14 @@ int BestListWidget::getResultNum()
|
||||||
|
|
||||||
void BestListWidget::setResultSelection(const QModelIndex &index)
|
void BestListWidget::setResultSelection(const QModelIndex &index)
|
||||||
{
|
{
|
||||||
this->m_bestListView->selectionModel()->clearSelection();
|
//this->m_bestListView->selectionModel()->clearSelection();
|
||||||
this->m_bestListView->selectionModel()->setCurrentIndex(index, QItemSelectionModel::Select);
|
this->m_bestListView->setCurrentIndex(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BestListWidget::clearResultSelection()
|
void BestListWidget::clearResultSelection()
|
||||||
{
|
{
|
||||||
this->m_bestListView->selectionModel()->clearSelection();
|
//this->m_bestListView->selectionModel()->clearSelection();
|
||||||
|
this->m_bestListView->setCurrentIndex(QModelIndex());
|
||||||
}
|
}
|
||||||
|
|
||||||
QModelIndex BestListWidget::getModlIndex(int row, int column)
|
QModelIndex BestListWidget::getModlIndex(int row, int column)
|
||||||
|
@ -235,6 +249,10 @@ const QString BestListWidget::getPluginInfo(const QModelIndex&index)
|
||||||
return this->m_bestListView->getPluginInfo(index);
|
return this->m_bestListView->getPluginInfo(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int BestListWidget::getResultHeight()
|
||||||
|
{
|
||||||
|
return this->m_bestListView->getResultHeight();
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* @brief BestListWidget::expandListSlot 展开列表的槽函数
|
* @brief BestListWidget::expandListSlot 展开列表的槽函数
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -25,6 +25,7 @@ public:
|
||||||
QModelIndex getModlIndex(int row, int column);
|
QModelIndex getModlIndex(int row, int column);
|
||||||
SearchPluginIface::ResultInfo getIndexResultInfo(QModelIndex &index);
|
SearchPluginIface::ResultInfo getIndexResultInfo(QModelIndex &index);
|
||||||
const QString getPluginInfo(const QModelIndex&index);
|
const QString getPluginInfo(const QModelIndex&index);
|
||||||
|
int getResultHeight();
|
||||||
|
|
||||||
public Q_SLOTS:
|
public Q_SLOTS:
|
||||||
void clearSelectedRow();
|
void clearSelectedRow();
|
||||||
|
@ -75,6 +76,7 @@ public:
|
||||||
bool getExpandState();
|
bool getExpandState();
|
||||||
SearchPluginIface::ResultInfo getIndexResultInfo(QModelIndex &index);
|
SearchPluginIface::ResultInfo getIndexResultInfo(QModelIndex &index);
|
||||||
const QString getPluginInfo(const QModelIndex&index);
|
const QString getPluginInfo(const QModelIndex&index);
|
||||||
|
int getResultHeight();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void initUi();
|
void initUi();
|
||||||
|
|
|
@ -35,13 +35,15 @@ int ResultWidget::getResultNum()
|
||||||
|
|
||||||
void ResultWidget::setResultSelection(const QModelIndex &index)
|
void ResultWidget::setResultSelection(const QModelIndex &index)
|
||||||
{
|
{
|
||||||
this->m_resultView->selectionModel()->clearSelection();
|
//this->m_resultView->selectionModel()->clearSelection();
|
||||||
this->m_resultView->selectionModel()->setCurrentIndex(index, QItemSelectionModel::Select);
|
//this->m_resultView->setCurrentIndex(QModelIndex());
|
||||||
|
this->m_resultView->setCurrentIndex(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ResultWidget::clearResultSelection()
|
void ResultWidget::clearResultSelection()
|
||||||
{
|
{
|
||||||
this->m_resultView->selectionModel()->clearSelection();
|
//this->m_resultView->selectionModel()->clearSelection();
|
||||||
|
this->m_resultView->setCurrentIndex(QModelIndex());
|
||||||
}
|
}
|
||||||
|
|
||||||
QModelIndex ResultWidget::getModlIndex(int row, int column)
|
QModelIndex ResultWidget::getModlIndex(int row, int column)
|
||||||
|
|
Loading…
Reference in New Issue