You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
openmw/apps/opencs/view/widget/scenetooltoggle.hpp

78 lines
1.9 KiB
C++

#ifndef CSV_WIDGET_SCENETOOL_TOGGLE_H
#define CSV_WIDGET_SCENETOOL_TOGGLE_H
#include "scenetool.hpp"
#include <map>
#include <string>
class QHBoxLayout;
class QRect;
class QObject;
class QPoint;
class QWidget;
namespace CSVWidget
{
class SceneToolbar;
class PushButton;
///< \brief Multi-Toggle tool
class SceneToolToggle : public SceneTool
{
Q_OBJECT
struct ButtonDesc
{
unsigned int mMask;
std::string mSmallIcon;
QString mName;
int mIndex;
};
std::string mEmptyIcon;
QWidget* mPanel;
QHBoxLayout* mLayout;
std::map<PushButton*, ButtonDesc> mButtons; // widget, id
int mButtonSize;
int mIconSize;
QString mToolTip;
PushButton* mFirst;
void adjustToolTip();
void adjustIcon();
QRect getIconBox(int index) const;
public:
SceneToolToggle(SceneToolbar* parent, const QString& toolTip, const std::string& emptyIcon);
void showPanel(const QPoint& position) override;
/// \attention After the last button has been added, setSelection must be called at
/// least once to finalise the layout.
///
/// \note The layout algorithm can not handle more than 9 buttons. To prevent this An
/// attempt to add more will result in an exception being thrown.
/// The small icons will be sized at (x-4)/3 (where x is the main icon size).
void addButton(const std::string& icon, unsigned int mask, const std::string& smallIcon, const QString& name,
const QString& tooltip = "");
unsigned int getSelectionMask() const;
/// \param or'ed button masks. buttons that do not exist will be ignored.
void setSelectionMask(unsigned int selection);
signals:
void selectionChanged();
private slots:
void selected();
};
}
#endif