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

View File

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

View File

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