mirror of
https://github.com/wxWidgets/Phoenix.git
synced 2025-12-15 17:20: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 wtc
|
||||
import wx
|
||||
import wx.msw
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
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):
|
||||
# Not testing with output file because it is not released soon enough
|
||||
# to be able to delete the file in this test, resulting in permission
|
||||
# errors.
|
||||
import wx.msw
|
||||
# Not testing with output file because the file resource is not released
|
||||
# soon enough to be able to delete the file in this test, resulting in
|
||||
# permission errors.
|
||||
dc = wx.msw.MetafileDC()
|
||||
dc.DrawLine(0,0, 50,50)
|
||||
metafile = dc.Close()
|
||||
|
||||
Reference in New Issue
Block a user