Files
pilotclient/src/blackgui/menus/menudelegate.h
Roland Winklmeier f4c2939253 Fix BlackGui header includes
* Include only what is used
* Use forward declaration when possible
* Sorted includes

refs #598
2016-05-20 01:31:11 +02:00

79 lines
2.5 KiB
C++

/* Copyright (C) 2015
* swift project Community / Contributors
*
* This file is part of swift Project. It is subject to the license terms in the LICENSE file found in the top-level
* directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project,
* including this file, may be copied, modified, propagated, or distributed except according to the terms
* contained in the LICENSE file.
*/
#ifndef BLACKGUI_MENUS_MENUDELEGATE_H
#define BLACKGUI_MENUS_MENUDELEGATE_H
#include "blackmisc/logcategorylist.h"
#include "blackgui/menus/menuaction.h"
#include <QMenu>
#include <QObject>
class QWidget;
namespace BlackGui
{
namespace Menus
{
/*!
* Interface to implement a custom menu
*/
class IMenuDelegate : public QObject
{
Q_OBJECT
public:
//! Display custom menu
virtual void customMenu(CMenuActions &menuActions) = 0;
//! Set nested delegate
void setNestedDelegate(IMenuDelegate *nestedDelegate) { m_nestedDelegate = nestedDelegate; }
//! Nested delegate
IMenuDelegate *getNestedDelegate() const { return m_nestedDelegate; }
//! Destructor
virtual ~IMenuDelegate() {}
//! Log categories
const BlackMisc::CLogCategoryList &getLogCategories()
{
static const BlackMisc::CLogCategoryList cats({BlackMisc::CLogCategory::guiComponent()});
return cats;
}
protected:
//! Constructor
IMenuDelegate(QWidget *parent = nullptr, bool separator = false) :
QObject(parent), m_separator(separator) {}
//! Delegate down one level
void nestedCustomMenu(CMenuActions &menuActions) const
{
if (!m_nestedDelegate) { return; }
m_nestedDelegate->customMenu(menuActions);
}
//! Does the previous (menu) item contain string?
bool previousMenuItemContains(const QString &str, const QMenu &menu, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
{
if (menu.isEmpty() || str.isEmpty()) { return false; }
const QString t(menu.actions().last()->text());
return t.contains(str, cs);
}
IMenuDelegate *m_nestedDelegate = nullptr; //!< nested delegate if any
bool m_separator = false; //!< at end, terminate with separator
};
} // ns
} // ns
#endif // guard