diff --git a/src/qtgui/rclhelp.cpp b/src/qtgui/rclhelp.cpp new file mode 100644 index 00000000..64378087 --- /dev/null +++ b/src/qtgui/rclhelp.cpp @@ -0,0 +1,81 @@ +#ifndef lint +static char rcsid[] = "@(#$Id: rclmain_w.cpp,v 1.57 2008-10-13 07:57:12 dockes Exp $ (C) 2005 J.F.Dockes"; +#endif +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the + * Free Software Foundation, Inc., + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +#include "autoconfig.h" +#include + +#include +#include +#if (QT_VERSION < 0x040000) +#define Q34EVOVERRIDE QEvent::AccelOverride +#else +#define Q34EVOVERRIDE QEvent::ShortcutOverride +#endif + +#include "recoll.h" +#include "rclhelp.h" +#include "debuglog.h" + +map HelpClient::helpmap; + +void HelpClient::installMap(string wname, string section) +{ + helpmap[wname] = section; +} + +HelpClient::HelpClient(QObject *parent, const char *name) + : QObject(parent, name) +{ + parent->installEventFilter(this); +} + +bool HelpClient::eventFilter(QObject *obj, QEvent *event) +{ + static time_t last_start; + if (event->type() == QEvent::KeyPress || event->type() == Q34EVOVERRIDE) { + // LOGDEB(("HelpClient::eventFilter: %d\n", (int)event->type())); + QKeyEvent *ke = static_cast(event); + if (ke->key() == Qt::Key_F1 || ke->key() == Qt::Key_Help) { + if (obj->isWidgetType()) { + QWidget *widget = static_cast(obj)->focusWidget(); + map::iterator it = helpmap.end(); + while (widget) { + it = helpmap.find(widget->name()); + 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: %s->%s\n", + it->first.c_str(), it->second.c_str())); + startManual(it->second); + } else { + LOGDEB(("HelpClient::eventFilter: no help section\n")); + startManual(""); + } + } + } + return true; + } + } + return false; +} + diff --git a/src/qtgui/rclhelp.h b/src/qtgui/rclhelp.h new file mode 100644 index 00000000..97b54a69 --- /dev/null +++ b/src/qtgui/rclhelp.h @@ -0,0 +1,40 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the + * Free Software Foundation, Inc., + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +#ifndef RCLHELP_H +#define RCLHELP_H +#include + +#include +#include +using std::map; +using std::string; + +class HelpClient : public QObject +{ + Q_OBJECT +public: + HelpClient(QObject *parent, const char *name = 0); + + // Install mapping from widget name to manual section + static void installMap(string wname, string section); + +protected: + bool eventFilter(QObject *obj, QEvent *event); + static map helpmap; +}; + +#endif // RCLHELP_H