Add F1 map for shortcut help

This commit is contained in:
Jean-Francois Dockes 2021-03-03 17:58:09 +01:00
parent ae2b4577c3
commit 8a50e63ca2
3 changed files with 56 additions and 24 deletions

View File

@ -19,6 +19,7 @@
#include <qevent.h>
#include <qwidget.h>
#include <QTabWidget>
#include "recoll.h"
#include "rclhelp.h"
@ -40,34 +41,54 @@ HelpClient::HelpClient(QObject *parent, const char *)
bool HelpClient::eventFilter(QObject *obj, QEvent *event)
{
static time_t last_start;
if (event->type() == QEvent::KeyPress ||
event->type() == QEvent::ShortcutOverride) {
// LOGDEB("HelpClient::eventFilter: " << ((int)event->type()) << "\n" );
if (event->type() != QEvent::KeyPress &&
event->type() != QEvent::ShortcutOverride) {
return false;
}
QKeyEvent *ke = static_cast<QKeyEvent *>(event);
if (ke->key() == Qt::Key_F1 || ke->key() == Qt::Key_Help) {
if (obj->isWidgetType()) {
QWidget *widget = static_cast<QWidget *>(obj)->focusWidget();
map<string, string>::iterator it = helpmap.end();
while (widget) {
it = helpmap.find((const char *)widget->objectName().toUtf8());
if (ke->key() != Qt::Key_F1 && ke->key() != Qt::Key_Help) {
return false;
}
if (!obj->isWidgetType()) {
return false;
}
QWidget *widget = dynamic_cast<QWidget *>(obj);
if (nullptr == widget) {
// ??
return false;
}
widget = widget->focusWidget();
auto it = helpmap.end();
std::string onm;
while (widget) {
QTabWidget *tw = dynamic_cast<QTabWidget*>(widget);
if (nullptr != tw) {
onm = qs2utf8s(tw->currentWidget()->objectName());
LOGDEB1("HelpClient: tab name " << onm << "\n");
it = helpmap.find(onm);
if (it != helpmap.end())
break;
}
onm = qs2utf8s(widget->objectName());
LOGDEB1("HelpClient: object name " << onm << "\n");
it = helpmap.find(onm);
if (it != helpmap.end())
break;
widget = widget->parentWidget();
}
if (time(0) - last_start > 5) {
last_start = time(0);
if (it != helpmap.end()) {
LOGDEB("HelpClient::eventFilter: " << (it->first) << "->" << (it->second) << "\n" );
widget = widget->parentWidget();
}
if (time(0) - last_start > 5) {
last_start = time(0);
if (it != helpmap.end()) {
LOGDEB("HelpClient::eventFilter: " << it->first << "->" << it->second << "\n");
startManual(it->second);
} else {
LOGDEB("HelpClient::eventFilter: no help section\n" );
} else {
LOGDEB("HelpClient::eventFilter: no help section\n");
startManual("");
}
}
}
return true;
}
}
return false;
return true;
}

View File

@ -20,7 +20,7 @@
<item>
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
<number>0</number>
<number>1</number>
</property>
<widget class="QWidget" name="tab">
<attribute name="title">
@ -581,6 +581,13 @@
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>Use F1 to access the manual</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
@ -1520,7 +1527,7 @@ May be slow for big documents.</string>
<resources/>
<connections/>
<buttongroups>
<buttongroup name="buttonGroup"/>
<buttongroup name="buttonGroup_2"/>
<buttongroup name="buttonGroup"/>
</buttongroups>
</ui>

View File

@ -57,6 +57,7 @@
#include "rclmain_w.h"
#include "ptrans_w.h"
#include "scbase.h"
#include "rclhelp.h"
void UIPrefsDialog::init()
{
@ -102,6 +103,9 @@ void UIPrefsDialog::init()
connect(ssNoCompleteCB, SIGNAL(toggled(bool)),
ssSearchOnCompleteCB, SLOT(setDisabled(bool)));
connect(resetscPB, SIGNAL(clicked()), this, SLOT(resetShortcuts()));
(void)new HelpClient(this);
HelpClient::installMap("sctab", "RCL.SEARCH.GUI.SHORTCUTS");
setFromPrefs();
}