Files
wxWidgets/src/qt/utils.cpp
Tim Stahlhut fb5d1a002c Fixes for wxQt build under Cygwin
Include the missing headers, notable QtGui/QFont from wx/fontutil.h which uses
a QFont object.

Closes #16750.
2015-10-25 18:00:05 +01:00

175 lines
4.5 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// Name: src/qt/utils.cpp
// Author: Peter Most, Javier Torres, Mariano Reingart
// Copyright: (c) 2010 wxWidgets dev team
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#include <QtGui/QCursor>
#include <QtWidgets/QApplication>
#include <QtWidgets/QDesktopWidget>
#include <QtGui/QDesktopServices>
#include <QtCore/QUrl>
#ifndef WX_PRECOMP
#include "wx/cursor.h"
#include "wx/log.h"
#include "wx/window.h"
#endif // WX_PRECOMP
#include "wx/utils.h"
#include "wx/qt/private/utils.h"
#include "wx/qt/private/converter.h"
void wxMissingImplementation( const char fileName[], unsigned lineNumber,
const char feature[] )
{
// Make it look similar to the assert messages:
fprintf( stderr, "%s(%d): Missing implementation of \"%s\"\n", fileName, lineNumber, feature );
}
void wxQtFillMouseButtons( Qt::MouseButtons buttons, wxMouseState *state )
{
state->SetLeftDown( buttons.testFlag( Qt::LeftButton ) );
state->SetRightDown( buttons.testFlag( Qt::RightButton ) );
state->SetMiddleDown( buttons.testFlag( Qt::MidButton ) );
state->SetAux1Down( buttons.testFlag( Qt::XButton1 ) );
state->SetAux2Down( buttons.testFlag( Qt::XButton2 ) );
}
#if wxUSE_GUI
wxPoint wxGetMousePosition()
{
return wxQtConvertPoint( QCursor::pos() );
}
void wxGetMousePosition( int *x, int *y )
{
wxPoint position = wxGetMousePosition();
*x = position.x;
*y = position.y;
}
#endif
#if wxUSE_GUI
wxMouseState wxGetMouseState()
{
wxMouseState ms;
wxQtFillMouseButtons( QApplication::mouseButtons(), &ms );
return ms;
}
#endif
wxWindow *wxFindWindowAtPoint(const wxPoint& pt)
{
/* Another option is to use QApplication::topLevelAt()
* but that gives the QWidget so the wxWindow list must
* be traversed comparing with this, or use the pointer from
* a wxQtWidget/wxQtFrame to the window, but they have
* no standard interface to return that. */
return wxGenericFindWindowAtPoint( pt );
}
wxWindow *wxFindWindowAtPointer(wxPoint& pt)
{
pt = wxQtConvertPoint( QCursor::pos() );
return wxFindWindowAtPoint( pt );
}
bool wxGetKeyState(wxKeyCode key)
{
/* FIXME: Qt doesn't provide a method to check the state of keys others
* than modifiers (shift, control, alt, meta). A platform-specific method
* is needed, probably one per platform Qt runs on. */
switch ( key )
{
case WXK_CONTROL:
return QApplication::keyboardModifiers().testFlag(Qt::ControlModifier);
case WXK_SHIFT:
return QApplication::keyboardModifiers().testFlag(Qt::ShiftModifier);
case WXK_ALT:
return QApplication::keyboardModifiers().testFlag(Qt::AltModifier);
case WXK_WINDOWS_LEFT:
return QApplication::keyboardModifiers().testFlag(Qt::MetaModifier);
default:
wxMISSING_IMPLEMENTATION( "wxGetKeyState for non-modifiers keys" );
return false;
}
}
int wxDisplayDepth()
{
return QApplication::desktop()->depth();
}
void wxDisplaySize(int *width, int *height)
{
if ( width != NULL )
*width = QApplication::desktop()->width();
if ( height != NULL )
*height = QApplication::desktop()->height();
}
void wxDisplaySizeMM(int *width, int *height)
{
if ( width != NULL )
*width = QApplication::desktop()->widthMM();
if ( height != NULL )
*height = QApplication::desktop()->heightMM();
}
void wxBell()
{
QApplication::beep();
}
void wxClientDisplayRect(int *x, int *y, int *width, int *height)
{
QRect r = QApplication::desktop()->availableGeometry();
*x = r.x();
*y = r.y();
*width = r.width();
*height = r.height();
}
wxWindow *wxGetActiveWindow()
{
QWidget *w = QApplication::activeWindow();
wxWindowList::compatibility_iterator node = wxTopLevelWindows.GetLast();
while (node)
{
wxWindow* win = node->GetData();
if ( win->GetHandle() == w )
return win;
node = node->GetPrevious();
}
return NULL;
}
bool wxColourDisplay()
{
return QApplication::desktop()->depth() > 1;
}
bool wxLaunchDefaultApplication(const wxString& path, int WXUNUSED( flags ) )
{
return QDesktopServices::openUrl( QUrl::fromLocalFile( wxQtConvertString( path ) ) );
}