mirror of
https://github.com/wxWidgets/Phoenix.git
synced 2025-12-16 09:40:07 +01:00
Move axbase to an etg script, add tests
This commit is contained in:
101
etg/axbase.py
Normal file
101
etg/axbase.py
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
#---------------------------------------------------------------------------
|
||||||
|
# Name: etg/axbase.py
|
||||||
|
# Author: Robin Dunn
|
||||||
|
#
|
||||||
|
# Created: 13-May-2016
|
||||||
|
# Copyright: (c) 2016 by Total Control Software
|
||||||
|
# License: wxWindows License
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
import etgtools
|
||||||
|
import etgtools.tweaker_tools as tools
|
||||||
|
from etgtools import (ClassDef, MethodDef, ParamDef, TypedefDef)
|
||||||
|
|
||||||
|
PACKAGE = "wx"
|
||||||
|
MODULE = "_msw"
|
||||||
|
NAME = "axbase" # Base name of the file to generate to for this script
|
||||||
|
DOCSTRING = ""
|
||||||
|
|
||||||
|
# The classes and/or the basename of the Doxygen XML files to be processed by
|
||||||
|
# this script.
|
||||||
|
ITEMS = [ ]
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
def run():
|
||||||
|
# Parse the XML file(s) building a collection of Extractor objects
|
||||||
|
module = etgtools.ModuleDef(PACKAGE, MODULE, NAME, DOCSTRING)
|
||||||
|
etgtools.parseDoxyXML(module, ITEMS)
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------
|
||||||
|
# The wxPyAxBaseWindow class does not come from the parsed Doxygen xml,
|
||||||
|
# instead it is manufactured entirely in this ETG script. We're doing it
|
||||||
|
# here instead of in a raw .sip file so we can run the generators on it
|
||||||
|
# and get things like documentation and .pyi files generated like any
|
||||||
|
# normal class.
|
||||||
|
|
||||||
|
# First, output some C++ code
|
||||||
|
module.addHeaderCode("""\
|
||||||
|
class wxPyAxBaseWindow : public wxWindow
|
||||||
|
{
|
||||||
|
DECLARE_DYNAMIC_CLASS(wxPyAxBaseWindow)
|
||||||
|
public:
|
||||||
|
wxPyAxBaseWindow(wxWindow* parent, const wxWindowID id=-1,
|
||||||
|
const wxPoint& pos = wxDefaultPosition,
|
||||||
|
const wxSize& size = wxDefaultSize,
|
||||||
|
long style = 0,
|
||||||
|
const wxString& name = wxPanelNameStr)
|
||||||
|
: wxWindow(parent, id, pos, size, style, name) {}
|
||||||
|
wxPyAxBaseWindow() : wxWindow() {}
|
||||||
|
virtual bool MSWTranslateMessage(WXMSG* msg)
|
||||||
|
{
|
||||||
|
return wxWindow::MSWTranslateMessage(msg);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
""")
|
||||||
|
module.addCppCode("""\
|
||||||
|
IMPLEMENT_DYNAMIC_CLASS(wxPyAxBaseWindow, wxWindow);
|
||||||
|
""")
|
||||||
|
|
||||||
|
# Now create the extractor objects that will be run through the generators
|
||||||
|
module.addItem(TypedefDef(type='void', name='WXMSG'))
|
||||||
|
|
||||||
|
cls = ClassDef(name='wxPyAxBaseWindow', bases=['wxWindow'],
|
||||||
|
briefDoc="""\
|
||||||
|
A Window class for use with ActiveX controls.
|
||||||
|
|
||||||
|
This Window class exposes some low-level Microsoft Windows
|
||||||
|
specific methods which can be overridden in Python. Intended for
|
||||||
|
use as an ActiveX container, but could also be useful
|
||||||
|
elsewhere.""",
|
||||||
|
items=[
|
||||||
|
MethodDef(
|
||||||
|
name='wxPyAxBaseWindow', isCtor=True, items=[
|
||||||
|
ParamDef(type='wxWindow*', name='parent'),
|
||||||
|
ParamDef(type='wxWindowID', name='id', isConst=True, default='-1'),
|
||||||
|
ParamDef(type='wxPoint&', name='pos', isConst=True, default='wxDefaultPosition'),
|
||||||
|
ParamDef(type='wxSize&', name='size', isConst=True, default='wxDefaultSize'),
|
||||||
|
ParamDef(type='long', name='style', default='0'),
|
||||||
|
ParamDef(type='wxString&', name='name', isConst=True, default='wxPanelNameStr'),
|
||||||
|
],
|
||||||
|
overloads=[
|
||||||
|
MethodDef(
|
||||||
|
name='wxPyAxBaseWindow', isCtor=True),
|
||||||
|
]),
|
||||||
|
|
||||||
|
MethodDef(type='bool', name='MSWTranslateMessage', isVirtual=True, items=[
|
||||||
|
ParamDef(type='WXMSG*', name='msg')
|
||||||
|
])
|
||||||
|
])
|
||||||
|
|
||||||
|
module.addItem(cls)
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------
|
||||||
|
tools.doCommonTweaks(module)
|
||||||
|
tools.runGenerators(module)
|
||||||
|
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
if __name__ == '__main__':
|
||||||
|
run()
|
||||||
|
|
||||||
@@ -1,79 +0,0 @@
|
|||||||
//--------------------------------------------------------------------------
|
|
||||||
// Name: src/axbase.sip
|
|
||||||
// Purpose: A wxWindow class and wrapper interface that virtualizes
|
|
||||||
// MSWTranslateMessage for use in ActiveX Controls. See _axbase in Classic
|
|
||||||
//
|
|
||||||
// Author: Robin Dunn
|
|
||||||
//
|
|
||||||
// Created: 13-May-2016
|
|
||||||
// Copyright: (c) 2016 by Total Control Software
|
|
||||||
// Licence: wxWindows license
|
|
||||||
//--------------------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
%ModuleHeaderCode
|
|
||||||
class wxPyAxBaseWindow : public wxWindow
|
|
||||||
{
|
|
||||||
DECLARE_DYNAMIC_CLASS(wxPyAxBaseWindow)
|
|
||||||
|
|
||||||
public:
|
|
||||||
wxPyAxBaseWindow(wxWindow* parent, const wxWindowID id=-1,
|
|
||||||
const wxPoint& pos = wxDefaultPosition,
|
|
||||||
const wxSize& size = wxDefaultSize,
|
|
||||||
long style = 0,
|
|
||||||
const wxString& name = wxPanelNameStr)
|
|
||||||
: wxWindow(parent, id, pos, size, style, name) {}
|
|
||||||
|
|
||||||
wxPyAxBaseWindow() : wxWindow() {}
|
|
||||||
|
|
||||||
virtual bool MSWTranslateMessage(WXMSG* msg)
|
|
||||||
{
|
|
||||||
return wxWindow::MSWTranslateMessage(msg);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
wxPyAxBaseWindow* wxPyAxBaseWindow_FromHWND(wxWindow* parent, unsigned long _hWnd);
|
|
||||||
%End
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
%ModuleCode
|
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxPyAxBaseWindow, wxWindow);
|
|
||||||
|
|
||||||
wxPyAxBaseWindow* wxPyAxBaseWindow_FromHWND(wxWindow* parent, unsigned long _hWnd)
|
|
||||||
{
|
|
||||||
WXHWND hWnd = (WXHWND)_hWnd;
|
|
||||||
wxPyAxBaseWindow* win = new wxPyAxBaseWindow;
|
|
||||||
if (parent)
|
|
||||||
parent->AddChild(win);
|
|
||||||
win->SetEventHandler(win);
|
|
||||||
win->SetHWND(hWnd);
|
|
||||||
win->SubclassWin(hWnd);
|
|
||||||
win->AdoptAttributesFromHWND();
|
|
||||||
win->SetupColours();
|
|
||||||
return win;
|
|
||||||
}
|
|
||||||
%End
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
|
||||||
|
|
||||||
typedef void WXMSG;
|
|
||||||
|
|
||||||
|
|
||||||
class wxPyAxBaseWindow : wxWindow
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
wxPyAxBaseWindow(wxWindow* parent, const wxWindowID id=-1,
|
|
||||||
const wxPoint& pos = wxDefaultPosition,
|
|
||||||
const wxSize& size = wxDefaultSize,
|
|
||||||
long style = 0,
|
|
||||||
const wxString& name = wxPanelNameStr);
|
|
||||||
wxPyAxBaseWindow();
|
|
||||||
virtual bool MSWTranslateMessage(WXMSG* msg);
|
|
||||||
};
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
40
unittests/test_axbase.py
Normal file
40
unittests/test_axbase.py
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
import unittest
|
||||||
|
import wtc
|
||||||
|
import wx
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
class axbase_Tests(wtc.WidgetTestCase):
|
||||||
|
|
||||||
|
@unittest.skipIf('wxMSW' not in wx.PlatformInfo,
|
||||||
|
'PyAxBaseWindow only available on Windows')
|
||||||
|
def test_axbase1(self):
|
||||||
|
import wx.msw
|
||||||
|
w = wx.msw.PyAxBaseWindow(self.frame)
|
||||||
|
|
||||||
|
|
||||||
|
@unittest.skipIf('wxMSW' not in wx.PlatformInfo,
|
||||||
|
'PyAxBaseWindow only available on Windows')
|
||||||
|
def test_axbase2(self):
|
||||||
|
import wx.msw
|
||||||
|
w = wx.msw.PyAxBaseWindow()
|
||||||
|
w.Create(self.frame)
|
||||||
|
|
||||||
|
|
||||||
|
@unittest.skipIf('wxMSW' not in wx.PlatformInfo,
|
||||||
|
'PyAxBaseWindow only available on Windows')
|
||||||
|
def test_axbase3(self):
|
||||||
|
import wx.msw
|
||||||
|
w = wx.msw.PyAxBaseWindow(self.frame,
|
||||||
|
id=-1,
|
||||||
|
pos=wx.DefaultPosition,
|
||||||
|
size=wx.DefaultSize,
|
||||||
|
style=0,
|
||||||
|
name='testing')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main()
|
||||||
@@ -1,18 +1,18 @@
|
|||||||
import unittest
|
import unittest
|
||||||
import wtc
|
import wtc
|
||||||
import wx
|
import wx
|
||||||
import wx.msw
|
|
||||||
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
|
|
||||||
class MetafileDCTests(wtc.WidgetTestCase):
|
class MetafileDCTests(wtc.WidgetTestCase):
|
||||||
|
|
||||||
@unittest.skipIf('wxMSW' not in wx.PlatformInfo, "Metafile classes only imsplemented on Windows")
|
@unittest.skipIf('wxMSW' not in wx.PlatformInfo, "Metafile classes only implemented on Windows")
|
||||||
def test_MetafileDC1(self):
|
def test_MetafileDC1(self):
|
||||||
# Not testing with output file because it is not released soon enough
|
import wx.msw
|
||||||
# to be able to delete the file in this test, resulting in permission
|
# Not testing with output file because the file resource is not released
|
||||||
# errors.
|
# soon enough to be able to delete the file in this test, resulting in
|
||||||
|
# permission errors.
|
||||||
dc = wx.msw.MetafileDC()
|
dc = wx.msw.MetafileDC()
|
||||||
dc.DrawLine(0,0, 50,50)
|
dc.DrawLine(0,0, 50,50)
|
||||||
metafile = dc.Close()
|
metafile = dc.Close()
|
||||||
|
|||||||
Reference in New Issue
Block a user