Browse Source

Tooltip Events hinzugefügt

Kolja Strohm 5 years ago
parent
commit
d4cc94d6e1
4 changed files with 50 additions and 1 deletions
  1. 27 1
      ToolTip.cpp
  2. 9 0
      ToolTip.h
  3. 10 0
      Zeichnung.cpp
  4. 4 0
      Zeichnung.h

+ 27 - 1
ToolTip.cpp

@@ -22,7 +22,9 @@ ToolTip::ToolTip( Bildschirm *zScreen )
     alpha( 0 ),
     sichtbar( 0 ),
     zeichnen( 0 ),
-    bildschirm( zScreen )
+    bildschirm( zScreen ),
+    onShow( 0 ),
+    onHide( 0 )
 {
     members = new RCArray< Zeichnung >();
     bildschirm->addToolTip( (ToolTip*)this->getThis() );
@@ -41,6 +43,20 @@ void ToolTip::addMember( Zeichnung *m )
     members->add( m );
 }
 
+// setzt eine Funktion, die aufgerufen wird, sobald der Tooltip angezeigt wird
+//  onShow: Die Funktion
+void ToolTip::setShowEvent( std::function< void( ToolTip * ) > onShow )
+{
+    this->onShow = onShow;
+}
+
+// setzt eine Funktion, die aufgerufen wird, sobald der Tooltip nicht mehr angezeigt wird
+//  onShow: Die Funktion
+void ToolTip::setHideEvent( std::function< void( ToolTip * ) > onHide )
+{
+    this->onHide = onHide;
+}
+
 void ToolTip::setWarten( double warten )
 {
     this->warten = warten;
@@ -57,7 +73,11 @@ void ToolTip::setMausIn( bool mausIn )
         rend = 1;
     this->mausIn = mausIn;
     if( !mausIn && !mausIn2 )
+    {
+        if( sichtbar && onHide )
+            onHide( this );
         sichtbar = 0;
+    }
 }
 
 void ToolTip::wartenReset()
@@ -101,6 +121,8 @@ bool ToolTip::tick( double tickVal )
             wartenCount += tickVal;
             if( wartenCount >= warten )
             {
+                if( onShow )
+                    onShow( this );
                 sichtbar = 1;
                 wartenCount = 0;
                 alpha = 0xFF;
@@ -136,7 +158,11 @@ void ToolTip::doMausEreignis( MausEreignis &me )
         pos.x = me.mx, pos.y = me.my + 15;
     mausIn2 = me.mx >= pos.x && me.my >= pos.y && me.mx <= pos.x + getBreite() && me.my <= pos.y + getHeight();
     if( !mausIn && !mausIn2 )
+    {
+        if( onHide && sichtbar )
+            onHide( this );
         sichtbar = 0;
+    }
     me.mx -= pos.x;
     me.my -= pos.y;
     for( auto z = members->getIterator(); z; z++ )

+ 9 - 0
ToolTip.h

@@ -3,6 +3,7 @@
 
 #include "Array.h"
 #include "Zeichnung.h"
+#include <functional>
 
 namespace Framework
 {
@@ -29,6 +30,8 @@ namespace Framework
         bool zeichnen;
         bool mausIn2;
         Bildschirm *bildschirm;
+        std::function< void( ToolTip * ) > onShow;
+        std::function< void( ToolTip * ) > onHide;
 
     public:
         // Konstruktor
@@ -38,6 +41,12 @@ namespace Framework
         // Fügt eine Zeichnung zum Tooltip hinzu
         //  m: die neue Zeichnung
         __declspec( dllexport ) void addMember( Zeichnung *m );
+        // setzt eine Funktion, die aufgerufen wird, sobald der Tooltip angezeigt wird
+        //  onShow: Die Funktion
+        __declspec( dllexport ) void setShowEvent( std::function< void( ToolTip * ) > onShow );
+        // setzt eine Funktion, die aufgerufen wird, sobald der Tooltip nicht mehr angezeigt wird
+        //  onShow: Die Funktion
+        __declspec( dllexport ) void setHideEvent( std::function< void( ToolTip * ) > onHide );
         // Setzt die anzahl an Seunden, de gewartet wird bis der Tipp erscheint
         //  warten: Die Anzahl an Sekunden
         __declspec( dllexport ) void setWarten( double warten );

+ 10 - 0
Zeichnung.cpp

@@ -34,6 +34,7 @@ Zeichnung::Zeichnung()
     toolTip( 0 ),
     style( 0 ),
     rend( 0 ),
+    onNeedToolTip( 0 ),
     ref( 1 )
 {}
 
@@ -78,6 +79,13 @@ void Zeichnung::setToolTipText( const char *txt, Bildschirm *zScreen, Schrift *z
     }
 }
 
+// setzt eine Funktion, die beim erstmaligen gebrauch des tooltips einen tooltip erstellt, falls es noch keinen gibt
+//  initToolTip: die Funktion
+void Zeichnung::setNeedToolTipEvent( std::function< void( Zeichnung * ) > onNeedToolTip )
+{
+    this->onNeedToolTip = onNeedToolTip;
+}
+
 // legt den tooltip fest
 // tt: der tooltip
 void Zeichnung::setToolTipZ( ToolTip *tt )
@@ -160,6 +168,8 @@ void Zeichnung::doMausEreignis( MausEreignis &me ) // ruft Mak auf
         mausIn = 1;
         if( toolTip )
             toolTip->setMausIn( 1 );
+        else if( onNeedToolTip )
+            onNeedToolTip( this );
         MausEreignis me2;
         me2.id = ME_Betritt;
         me2.mx = me.mx;

+ 4 - 0
Zeichnung.h

@@ -50,6 +50,7 @@ namespace Framework
         __int64 style;
         bool rend;
         std::queue< std::function< void() > > actions;
+        std::function< void( Zeichnung * ) > onNeedToolTip;
         int ref;
 
     public:
@@ -66,6 +67,9 @@ namespace Framework
         //  zScreen: Ein Zeiger auf das Verwendete Bildschirm Objekt ohne erhöhten Reference Counter
         //  zSchrift: Ein Zeiger auf die Schrift, die verwendet werden soll ohne erhöhten Reference Counter
         __declspec( dllexport ) void setToolTipText( const char *txt, Bildschirm *zScreen, Schrift *zSchrift );
+        // setzt eine Funktion, die aufgerufen wird, falls ein Tooltip benötigt wird und noch keiner gesetzt wurde
+        //  initToolTip: die Funktion
+        __declspec( dllexport ) void setNeedToolTipEvent( std::function< void( Zeichnung * ) > onNeedTooltip );
         // legt den tooltip fest
         // tt: der tooltip
         __declspec( dllexport ) void setToolTipZ( ToolTip *tt );