Files
create/src/Gui/DlgKeyboardImp.h
2023-04-05 16:23:15 +02:00

133 lines
5.9 KiB
C++

/***************************************************************************
* Copyright (c) 2005 Werner Mayer <wmayer[at]users.sourceforge.net> *
* *
* This file is part of the FreeCAD CAx development system. *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Library General Public *
* License as published by the Free Software Foundation; either *
* version 2 of the License, or (at your option) any later version. *
* *
* This library 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 Library General Public License for more details. *
* *
* You should have received a copy of the GNU Library General Public *
* License along with this library; see the file COPYING.LIB. If not, *
* write to the Free Software Foundation, Inc., 59 Temple Place, *
* Suite 330, Boston, MA 02111-1307, USA *
* *
***************************************************************************/
#ifndef GUI_DIALOG_DLGKEYBOARD_IMP_H
#define GUI_DIALOG_DLGKEYBOARD_IMP_H
#include <boost/signals2/connection.hpp>
#include <memory>
#include <QPointer>
#include <QAction>
#include "PropertyPage.h"
class QTreeWidget;
class QTreeWidgetItem;
class QComboBox;
class QLineEdit;
class QAbstractButton;
namespace Gui {
class AccelLineEdit;
namespace Dialog {
class Ui_DlgCustomKeyboard;
/** Shows an overview of all available commands of all groups and modules.
* You can customize your workbenches just by drag&dropping any commands
* onto the toolbars or commandbars. But you cannot modify any standard toolbars or
* commandbars such as "File, View, ...". It is only possible to
* customize your own toolbars or commandbars.
* \author Werner Mayer
*/
class DlgCustomKeyboardImp : public CustomizeActionPage
{
Q_OBJECT
public:
explicit DlgCustomKeyboardImp( QWidget* parent = nullptr );
~DlgCustomKeyboardImp() override;
/** Public helper function for handling command widgets
*
* @param commandTreeWidget: a tree widget listing commands
* @param separatorItem: optional separator item
* @param comboGroups: a combo box widget for choosing categories of commands
* @param editCommand: a line edit for searching command with auto complete
* @param priroityList: a tree widget listing commands with the same shortcut in order of priority
* @param buttonUp: a button widget to increase command priority
* @param buttonDown: a button widget to decrease command priority
* @param editShortcut: an accelerator editor for setting user defined shortcut
* @param currentShortcut: optional accelerator editor showing the current shortcut of a command
*
* @return Return a boost signal connection for monitoring command changes.
* Most disconnect the signal before widgets gets destroyed.
*/
static boost::signals2::connection
initCommandWidgets(QTreeWidget *commandTreeWidget,
QTreeWidgetItem *separatorItem,
QComboBox *comboGroups,
QLineEdit *editCommand,
QTreeWidget *priorityList = nullptr,
QAbstractButton *buttonUp = nullptr,
QAbstractButton *buttonDown = nullptr,
Gui::AccelLineEdit *editShortcut = nullptr,
Gui::AccelLineEdit *currentShortcut = nullptr);
protected:
/** @name Internal helper function for handling command list widgets
*/
//@{
static void initCommandCompleter(QLineEdit *,
QComboBox *combo,
QTreeWidget *treeWidget,
QTreeWidgetItem *separatorItem);
static boost::signals2::connection initCommandList(QTreeWidget *, QTreeWidgetItem *, QComboBox *combo);
static void initPriorityList(QTreeWidget *, QAbstractButton *buttonUp, QAbstractButton *buttonDown);
static void populateCommandGroups(QComboBox *);
static void populateCommandList(QTreeWidget *, QTreeWidgetItem *, QComboBox *);
static void populatePriorityList(QTreeWidget *priorityList,
AccelLineEdit *editor,
AccelLineEdit *current);
//@}
protected:
void setupConnections();
void onCategoryBoxActivated(int index);
void onCommandTreeWidgetCurrentItemChanged(QTreeWidgetItem*);
void onButtonAssignClicked();
void onButtonClearClicked();
void onButtonResetClicked();
void onButtonResetAllClicked();
void onEditShortcutTextChanged(const QString&);
protected Q_SLOTS:
void onAddMacroAction(const QByteArray&) override;
void onRemoveMacroAction(const QByteArray&) override;
void onModifyMacroAction(const QByteArray&) override;
protected:
void showEvent(QShowEvent* e) override;
void changeEvent(QEvent *e) override;
void setShortcutOfCurrentAction(const QString&);
private:
std::unique_ptr<Ui_DlgCustomKeyboard> ui;
bool firstShow;
boost::signals2::scoped_connection conn;
};
} // namespace Dialog
} // namespace Gui
#endif // GUI_DIALOG_DLGKEYBOARD_IMP_H