graphics/ToolTipProducer.py
author Laurent Bessard
Fri, 11 Oct 2013 10:07:56 +0200
changeset 1360 ebfe9c22af2a
parent 1177 4cbbc58b91b4
child 1571 486f94a8032c
permissions -rw-r--r--
Fixed bug when debugging PLC with Graphic Viewer in debug open and re-transfer PLC
#!/usr/bin/env python
# -*- coding: utf-8 -*-

#This file is part of PLCOpenEditor, a library implementing an IEC 61131-3 editor
#based on the plcopen standard. 
#
#Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD
#
#See COPYING file for copyrights details.
#
#This library is free software; you can redistribute it and/or
#modify it under the terms of the GNU General Public
#License as published by the Free Software Foundation; either
#version 2.1 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
#General Public License for more details.
#
#You should have received a copy of the GNU General Public
#License along with this library; if not, write to the Free Software
#Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

import wx

from controls.CustomToolTip import CustomToolTip, TOOLTIP_WAIT_PERIOD
    
#-------------------------------------------------------------------------------
#                           Tool Tip Producer class
#-------------------------------------------------------------------------------

"""
Class that implements an element that generate Tool Tip
"""

class ToolTipProducer:
    
    def __init__(self, parent):
        """
        Constructor
        @param parent: Parent Viewer
        """
        self.Parent = parent
        
        self.ToolTip = None
        self.ToolTipPos = None
        
        # Timer for firing Tool tip display
        self.ToolTipTimer = wx.Timer(self.Parent, -1)
        self.Parent.Bind(wx.EVT_TIMER, 
            self.OnToolTipTimer, 
            self.ToolTipTimer)
    
    def __del__(self):
        """
        Destructor
        """
        self.DestroyToolTip()
    
    def OnToolTipTimer(self, event):
        """
        Callback for Tool Tip firing timer Event
        @param event: Tool tip text
        """
        # Get Tool Tip text
        value = self.GetToolTipValue()
        
        if value is not None and self.ToolTipPos is not None:
            # Create Tool Tip
            self.ToolTip = CustomToolTip(self.Parent, value)
            self.ToolTip.SetToolTipPosition(self.ToolTipPos)
            self.ToolTip.Show()
    
    def GetToolTipValue(self):
        """
        Return tool tip text
        Have to be overridden by inherited classes 
        @return: Tool tip text (None if not overridden) 
        """
        return None
    
    def DisplayToolTip(self, pos):
        """
        Display Tool tip
        @param pos: Tool tip position
        """
        # Destroy current displayed Tool tip
        self.DestroyToolTip()
        
        # Save Tool Tip position
        self.ToolTipPos = pos
        # Start Tool tip firing timer
        self.ToolTipTimer.Start(
            int(TOOLTIP_WAIT_PERIOD * 1000), 
            oneShot=True)
    
    def SetToolTipText(self, text):
        """
        Set current Tool tip text
        @param text: Tool tip Text
        """
        if self.ToolTip is not None:
            self.ToolTip.SetTip(text)
    
    def DestroyToolTip(self):
        """
        Destroy current displayed Tool Tip
        """
        # Stop Tool tip firing timer
        self.ToolTipTimer.Stop()
        self.ToolTipPos = None
        
        # Destroy Tool Tip
        if self.ToolTip is not None:
            self.ToolTip.Destroy()
            self.ToolTip = None