Added a custom tool tip base class to handle common window management details.
This commit is contained in:
parent
e31384ab60
commit
baa0af5d7c
|
@ -4295,15 +4295,16 @@ QAsmView::QAsmView(QWidget *parent)
|
|||
this->setPalette(pal);
|
||||
this->setMouseTracking(true);
|
||||
|
||||
showByteCodes = false;
|
||||
displayROMoffsets = false;
|
||||
symbolicDebugEnable = true;
|
||||
registerNameEnable = true;
|
||||
|
||||
calcFontData();
|
||||
|
||||
vbar = NULL;
|
||||
hbar = NULL;
|
||||
asmPC = NULL;
|
||||
displayROMoffsets = false;
|
||||
symbolicDebugEnable = true;
|
||||
registerNameEnable = true;
|
||||
showByteCodes = false;
|
||||
maxLineLen = 0;
|
||||
pxLineWidth = 0;
|
||||
lineOffset = 0;
|
||||
|
@ -4796,16 +4797,16 @@ bool QAsmView::event(QEvent *event)
|
|||
}
|
||||
else
|
||||
{
|
||||
printf("Tool Tip Hide\n");
|
||||
//printf("Tool Tip Hide\n");
|
||||
QToolTip::hideText();
|
||||
event->ignore();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else if (event->type() == QEvent::Leave)
|
||||
{
|
||||
printf("QEvent::Leave\n");
|
||||
}
|
||||
//else if (event->type() == QEvent::Leave)
|
||||
//{
|
||||
// printf("QEvent::Leave\n");
|
||||
//}
|
||||
return QWidget::event(event);
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
|
@ -6268,10 +6269,10 @@ ppuCtrlRegDpy::ppuCtrlRegDpy( QWidget *parent )
|
|||
//----------------------------------------------------------------------------
|
||||
ppuCtrlRegDpy::~ppuCtrlRegDpy( void )
|
||||
{
|
||||
if ( popup != NULL )
|
||||
{
|
||||
popup->close();
|
||||
}
|
||||
//if ( popup != NULL )
|
||||
//{
|
||||
// popup->close();
|
||||
//}
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
bool ppuCtrlRegDpy::event(QEvent *event)
|
||||
|
@ -6279,36 +6280,23 @@ bool ppuCtrlRegDpy::event(QEvent *event)
|
|||
if (event->type() == QEvent::ToolTip)
|
||||
{
|
||||
QHelpEvent *helpEvent = static_cast<QHelpEvent *>(event);
|
||||
if ( popup == NULL )
|
||||
{
|
||||
printf("Tool Tip Show\n");
|
||||
popup = static_cast<ppuRegPopup*>(fceuCustomToolTipShow( helpEvent, new ppuRegPopup(this) ));
|
||||
}
|
||||
//if ( popup == NULL )
|
||||
//{
|
||||
// printf("Tool Tip Show\n");
|
||||
//}
|
||||
popup = static_cast<ppuRegPopup*>(fceuCustomToolTipShow( helpEvent, new ppuRegPopup(this) ));
|
||||
|
||||
QToolTip::hideText();
|
||||
event->ignore();
|
||||
return true;
|
||||
}
|
||||
else if (event->type() == QEvent::MouseMove)
|
||||
{
|
||||
printf("QEvent::MouseMove\n");
|
||||
}
|
||||
else if (event->type() == QEvent::Leave)
|
||||
{
|
||||
printf("QEvent::Leave\n");
|
||||
if ( popup )
|
||||
{
|
||||
popup->done(0);
|
||||
popup->deleteLater();
|
||||
popup = NULL;
|
||||
}
|
||||
}
|
||||
return QWidget::event(event);
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
//-- PPU Register Tool Tip Popup
|
||||
//----------------------------------------------------------------------------
|
||||
ppuRegPopup::ppuRegPopup( QWidget *parent )
|
||||
: QDialog( parent, Qt::ToolTip )
|
||||
: fceuCustomToolTip( parent )
|
||||
{
|
||||
QVBoxLayout *vbox, *vbox1;
|
||||
QGridLayout *grid, *grid1;
|
||||
|
@ -6330,10 +6318,10 @@ ppuRegPopup::ppuRegPopup( QWidget *parent )
|
|||
QCheckBox *iBlu_cbox;
|
||||
char stmp[32];
|
||||
|
||||
QPalette pal = this->palette();
|
||||
pal.setColor( QPalette::Window , pal.color(QPalette::ToolTipBase) );
|
||||
pal.setColor( QPalette::WindowText, pal.color(QPalette::ToolTipText) );
|
||||
setPalette(pal);
|
||||
//QPalette pal = this->palette();
|
||||
//pal.setColor( QPalette::Window , pal.color(QPalette::ToolTipBase) );
|
||||
//pal.setColor( QPalette::WindowText, pal.color(QPalette::ToolTipText) );
|
||||
//setPalette(pal);
|
||||
|
||||
vbox1 = new QVBoxLayout();
|
||||
vbox = new QVBoxLayout();
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
|
||||
#include "Qt/main.h"
|
||||
#include "Qt/SymbolicDebug.h"
|
||||
#include "Qt/ConsoleUtilities.h"
|
||||
#include "Qt/ColorMenu.h"
|
||||
#include "../../debug.h"
|
||||
|
||||
|
@ -273,7 +274,7 @@ class DebuggerStackDisplay : public QPlainTextEdit
|
|||
void sel4BytesPerLine(void);
|
||||
};
|
||||
|
||||
class ppuRegPopup : public QDialog
|
||||
class ppuRegPopup : public fceuCustomToolTip
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
|
|
|
@ -24,6 +24,8 @@
|
|||
|
||||
#include <QWindow>
|
||||
#include <QScreen>
|
||||
#include <QToolTip>
|
||||
#include <QApplication>
|
||||
|
||||
#if WIN32
|
||||
#include <Windows.h>
|
||||
|
@ -353,6 +355,141 @@ QDialog *fceuCustomToolTipShow( QHelpEvent *helpEvent, QDialog *popup )
|
|||
return popup;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
fceuCustomToolTip *fceuCustomToolTip::instance = 0;
|
||||
//---------------------------------------------------------------------------
|
||||
fceuCustomToolTip::fceuCustomToolTip( QWidget *parent )
|
||||
: QDialog( parent, Qt::ToolTip )
|
||||
{
|
||||
w = parent;
|
||||
|
||||
if ( instance )
|
||||
{
|
||||
instance->done(0);
|
||||
instance->deleteLater();
|
||||
instance = 0;
|
||||
}
|
||||
instance = this;
|
||||
|
||||
qApp->installEventFilter(this);
|
||||
setForegroundRole( QPalette::ToolTipText );
|
||||
setBackgroundRole( QPalette::ToolTipBase );
|
||||
setPalette( QToolTip::palette() );
|
||||
|
||||
setMouseTracking(true);
|
||||
|
||||
//printf("Create Tool Tip\n");
|
||||
|
||||
hideTimer = new QTimer( this );
|
||||
hideTimer->setSingleShot(true);
|
||||
|
||||
connect( hideTimer, &QTimer::timeout, this, &fceuCustomToolTip::hideTimerExpired );
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
fceuCustomToolTip::~fceuCustomToolTip( void )
|
||||
{
|
||||
//printf("Destroy Tool Tip\n");
|
||||
if ( instance == this )
|
||||
{
|
||||
instance = 0;
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void fceuCustomToolTip::hideTip(void)
|
||||
{
|
||||
if ( !hideTimer->isActive() )
|
||||
{
|
||||
hideTimer->start( 300 );
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void fceuCustomToolTip::hideTipImmediately(void)
|
||||
{
|
||||
close();
|
||||
deleteLater();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void fceuCustomToolTip::hideTimerExpired(void)
|
||||
{
|
||||
//printf("Hide Timer Expired:\n");
|
||||
hideTipImmediately();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
bool fceuCustomToolTip::eventFilter( QObject *obj, QEvent *event)
|
||||
{
|
||||
//printf("Event:%i %p\n", event->type(), obj);
|
||||
switch (event->type() )
|
||||
{
|
||||
case QEvent::Leave:
|
||||
|
||||
//if ( obj == w )
|
||||
//{
|
||||
// printf("Left parent\n");
|
||||
//}
|
||||
hideTip();
|
||||
break;
|
||||
case QEvent::Enter:
|
||||
|
||||
if ( obj == w )
|
||||
{
|
||||
if ( hideTimer->isActive() )
|
||||
{
|
||||
hideTimer->stop();
|
||||
}
|
||||
//printf("Enter parent\n");
|
||||
}
|
||||
break;
|
||||
|
||||
case QEvent::WindowActivate:
|
||||
case QEvent::WindowDeactivate:
|
||||
case QEvent::FocusIn:
|
||||
case QEvent::FocusOut:
|
||||
if ( obj != this )
|
||||
{
|
||||
hideTipImmediately();
|
||||
}
|
||||
break;
|
||||
case QEvent::Close:
|
||||
case QEvent::MouseButtonPress:
|
||||
case QEvent::MouseButtonRelease:
|
||||
case QEvent::MouseButtonDblClick:
|
||||
hideTipImmediately();
|
||||
break;
|
||||
|
||||
case QEvent::MouseMove:
|
||||
{
|
||||
if ( (obj == w) && !rect().isNull() &&
|
||||
!rect().contains(static_cast<QMouseEvent*>(event)->pos()))
|
||||
{
|
||||
hideTip();
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void fceuCustomToolTip::mouseMoveEvent(QMouseEvent *event)
|
||||
{
|
||||
//printf("QEvent::MouseMove\n");
|
||||
|
||||
if (!w->rect().isNull())
|
||||
{
|
||||
QPoint pos = event->globalPos();
|
||||
pos = mapFromGlobal(pos);
|
||||
|
||||
//printf("QEvent::MouseMove: (%i,%i) (%i,%i)\n",
|
||||
// event->globalPos().x(), event->globalPos().y(), pos.x(), pos.y() );
|
||||
|
||||
if (!w->rect().contains(pos))
|
||||
{
|
||||
done(0);
|
||||
deleteLater();
|
||||
}
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
// FCEU Data Entry Custom Validators
|
||||
//---------------------------------------------------------------------------
|
||||
fceuDecIntValidtor::fceuDecIntValidtor( int min, int max, QObject *parent)
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
#pragma once
|
||||
|
||||
#include <QColor>
|
||||
#include <QTimer>
|
||||
#include <QValidator>
|
||||
#include <QDialog>
|
||||
#include <QHelpEvent>
|
||||
|
@ -34,8 +35,8 @@ class fceuDecIntValidtor : public QValidator
|
|||
|
||||
class fceuHexIntValidtor : public QValidator
|
||||
{
|
||||
public:
|
||||
fceuHexIntValidtor( int min, int max, QObject *parent);
|
||||
public:
|
||||
fceuHexIntValidtor( int min, int max, QObject *parent);
|
||||
|
||||
QValidator::State validate(QString &input, int &pos) const;
|
||||
|
||||
|
@ -45,6 +46,28 @@ class fceuHexIntValidtor : public QValidator
|
|||
int max;
|
||||
};
|
||||
|
||||
class fceuCustomToolTip : public QDialog
|
||||
{
|
||||
public:
|
||||
fceuCustomToolTip( QWidget *parent = nullptr );
|
||||
~fceuCustomToolTip( void );
|
||||
|
||||
protected:
|
||||
bool eventFilter(QObject *obj, QEvent *event) override;
|
||||
void mouseMoveEvent( QMouseEvent *event ) override;
|
||||
|
||||
void hideTip(void);
|
||||
void hideTipImmediately(void);
|
||||
private:
|
||||
QWidget *w;
|
||||
QTimer *hideTimer;
|
||||
|
||||
static fceuCustomToolTip *instance;
|
||||
|
||||
private slots:
|
||||
void hideTimerExpired(void);
|
||||
};
|
||||
|
||||
QString fceuGetOpcodeToolTip( uint8_t *opcode, int size );
|
||||
|
||||
QDialog *fceuCustomToolTipShow( QHelpEvent *helpEvent, QDialog *popup );
|
||||
|
|
Loading…
Reference in New Issue