File indexing completed on 2024-04-21 04:02:02
0001 /* 0002 KBlackBox - A simple game inspired by an emacs module 0003 0004 SPDX-FileCopyrightText: 1999-2000 Robert Cimrman <cimrman3@students.zcu.cz> 0005 SPDX-FileCopyrightText: 2007 Nicolas Roffet <nicolas-kde@roffet.com> 0006 0007 SPDX-License-Identifier: GPL-2.0-or-later 0008 */ 0009 0010 #ifndef KBBGRAPHICSITEMRAYRESULT_H 0011 #define KBBGRAPHICSITEMRAYRESULT_H 0012 0013 0014 0015 class QGraphicsScene; 0016 class QGraphicsSvgItem; 0017 0018 0019 #include "kbbgraphicsitem.h" 0020 #include "kbbgraphicsitemborder.h" 0021 #include "kbbitemwithposition.h" 0022 class KBBScalableGraphicWidget; 0023 class KBBThemeManager; 0024 0025 0026 0027 /** 0028 * @brief Result of a laser ray shoot in the black box 0029 * 0030 * There 3 kinds of ray results: 0031 * - HIT: if the laser ray hits a ball in the black box by entering at the considered position. 0032 * - REFLECTION: if the laser ray exits the black box at the entrance point. 0033 * - A number to display both positions where the laser ray entered and exited the black box. Both positions are opposite positions of each other and belong together. 0034 */ 0035 class KBBGraphicsItemRayResult : public KBBGraphicsItemBorder, public KBBGraphicsItem, public KBBItemWithPosition 0036 { 0037 public: 0038 KBBGraphicsItemRayResult(KBBScalableGraphicWidget* parent, KBBThemeManager* themeManager, QGraphicsScene* scene, const int borderPosition, const int columns, const int rows, const int rayNumber); 0039 0040 0041 /** 0042 * @brief Destructor of the class and dependent object 0043 * Call this methode to destroy simultaneously this QGraphicsItem and all other dependent QGraphicsItems: The number or the sign. 0044 */ 0045 void cleanDelete() override; 0046 0047 /** 0048 * @brief Highlight the item 0049 * 0050 * Usually used when the mouse goes over the item or over the opposite item. 0051 */ 0052 void highlight(bool state) override; 0053 0054 /** 0055 * @brief Highlight the item and the opposite one 0056 */ 0057 void highlightBoth(bool state) override; 0058 0059 /** 0060 * @brief Get the border position 0061 */ 0062 int position() override; 0063 0064 /** 0065 * @brief Define the opposite "ray result" item 0066 * 0067 * Used if the result is not a HIT and not a REFLECTION. In the other case, the opoosite is the item itself and this method doesn't need to be called. 0068 * @param opposite Correspondent item with the same "number". 0069 */ 0070 void setOpposite(KBBGraphicsItemRayResult* opposite); 0071 0072 /** 0073 * @brief Set the pause state 0074 */ 0075 void setPause(bool state) override; 0076 0077 0078 private: 0079 void hoverEnterEvent (QGraphicsSceneHoverEvent*) override; 0080 void hoverLeaveEvent (QGraphicsSceneHoverEvent*) override; 0081 0082 QString m_elementIdResultBackground; 0083 QString m_elementIdResultBackgroundHighlight; 0084 QGraphicsSvgItem* m_notNumber; 0085 QGraphicsSimpleTextItem* m_number; 0086 KBBGraphicsItemRayResult* m_opposite; 0087 bool m_pause; 0088 QGraphicsScene* m_scene; 0089 KBBScalableGraphicWidget* m_widget; 0090 }; 0091 0092 #endif // KBBGRAPHICSITEMRAYRESULT_H