/***************************************************************************
 * $Id: trayhoverpopup.cpp,v 1.4 2008/07/31 19:56:28 hoganrobert Exp $
 *   Copyright (C) 2006 - 2008 Robert Hogan                                *
 *   robert@roberthogan.net                                                *
 *                                                                         *
 *   This program 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 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program 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 program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.              *
 ***************************************************************************/
/***************************************************************************
 *   Copyright (C) 2005 by Joris Guisson                                   *
 *   joris.guisson@gmail.com                                               *
 *                                                                         *
 *   This program 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 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program 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 program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.          *
 ***************************************************************************/
#include <ntqvbox.h>
#include <ntqhbox.h>
#include <ntqlabel.h>
#include <ntqtooltip.h>
#include <ntqpixmap.h>
#include <kdialog.h>
#include "trayhoverpopup.h"


TrayHoverPopup::TrayHoverPopup(const TQPixmap & pix,TQWidget *parent, const char *name )
	: KPassivePopup(KPassivePopup::Boxed,parent,name),pix(pix)
{
	setTimeout(0);
	setAutoDelete(false);
	connect(&hover_timer,SIGNAL(timeout()),this,SLOT(onHoverTimeout()));
	connect(&show_timer,SIGNAL(timeout()),this,SLOT(onShowTimeout()));
	create();
	setPalette(TQToolTip::palette());
	setLineWidth(1);
	context_menu_shown = false;
	cursor_over_icon = false;
}


TrayHoverPopup::~TrayHoverPopup()
{}

void TrayHoverPopup::contextMenuAboutToShow()
{
	context_menu_shown = true;
	if (isShown())
	{
		hide();
		hover_timer.stop();
	}
}

void TrayHoverPopup::contextMenuAboutToHide()
{
	context_menu_shown = false;
}
			

void TrayHoverPopup::enterEvent()
{
	cursor_over_icon = true;
	if (isHidden() && !context_menu_shown)
	{
		// start the show timer
		show_timer.start(1000,true);
	}
	else
		hover_timer.stop(); // stop timeout
}

void TrayHoverPopup::leaveEvent()
{
	cursor_over_icon = false;
	// to avoid problems with a quick succession of enter and leave events, because the cursor
	// is on the edge, use a timer to expire the popup
	// in enterEvent we will stop the timer
	if (isShown())
		hover_timer.start(2000,true);
}

void TrayHoverPopup::onHoverTimeout()
{
	hide();
	show_timer.stop();
}

void TrayHoverPopup::onShowTimeout()
{
	if (!context_menu_shown && cursor_over_icon)
		show();
}

void TrayHoverPopup::updateText(const TQString & msg)
{
	text->setText(msg);
}

void TrayHoverPopup::create()
{
	TQVBox *vb = new TQVBox(this);
	vb->setSpacing(KDialog::spacingHint());
	 
	TQHBox *hb=0;
	if (!pix.isNull()) 
	{
		hb = new TQHBox(vb);
		hb->setMargin(0);
		hb->setSpacing(KDialog::spacingHint());
		TQLabel* pix_lbl = new TQLabel(hb,"title_icon");
		pix_lbl->setPixmap(pix);
		pix_lbl->setAlignment(AlignLeft);
	}
	 
	
	TQLabel* title = new TQLabel("Tor Status", hb ? hb : vb, "title_label" );
	TQFont fnt = title->font();
	fnt.setBold( true );
	title->setFont( fnt );
	title->setAlignment( TQt::AlignHCenter );
	if ( hb )
		hb->setStretchFactor(title, 10 ); // enforce centering

	// text will be filled later
	text = new TQLabel( "Dummy", vb, "msg_label" );
				text->setAlignment( AlignLeft );
	setView(vb);
}
	

#include "trayhoverpopup.moc"