Added wxHtmlFilter
Also some minor tweaks and additions git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_4_BRANCH@17422 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -2,8 +2,21 @@ CHANGES.txt for wxPython
|
|||||||
|
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
2.3.3
|
2.3.3.2
|
||||||
-----
|
-------
|
||||||
|
Updated XRCed and wxTimeCtrl contribs.
|
||||||
|
|
||||||
|
Show a couple new wxGrid features in the demo.
|
||||||
|
|
||||||
|
Several bug fixes in wxWindows.
|
||||||
|
|
||||||
|
Added wxHtmlFilter.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
2.3.3.1
|
||||||
|
-------
|
||||||
Added wxSplashScreen.
|
Added wxSplashScreen.
|
||||||
|
|
||||||
Added wxGenericDirCtrl.
|
Added wxGenericDirCtrl.
|
||||||
|
@@ -43,6 +43,23 @@ class MyHtmlWindow(wxHtmlWindow):
|
|||||||
self.base_OnCellClicked(cell, x, y, evt)
|
self.base_OnCellClicked(cell, x, y, evt)
|
||||||
|
|
||||||
|
|
||||||
|
# This filter doesn't really do anything but show how to use filters
|
||||||
|
class MyHtmlFilter(wxHtmlFilter):
|
||||||
|
def __init__(self, log):
|
||||||
|
wxHtmlFilter.__init__(self)
|
||||||
|
self.log = log
|
||||||
|
|
||||||
|
# This method decides if this filter is able to read the file
|
||||||
|
def CanRead(self, fsfile):
|
||||||
|
self.log.write("CanRead: %s\n" % fsfile.GetMimeType())
|
||||||
|
return FALSE
|
||||||
|
|
||||||
|
# If CanRead returns true then this method is called to actually
|
||||||
|
# read the file and return the contents.
|
||||||
|
def ReadFile(self, fsfile):
|
||||||
|
return ""
|
||||||
|
|
||||||
|
|
||||||
class TestHtmlPanel(wxPanel):
|
class TestHtmlPanel(wxPanel):
|
||||||
def __init__(self, parent, frame, log):
|
def __init__(self, parent, frame, log):
|
||||||
wxPanel.__init__(self, parent, -1, style=wxNO_FULL_REPAINT_ON_RESIZE)
|
wxPanel.__init__(self, parent, -1, style=wxNO_FULL_REPAINT_ON_RESIZE)
|
||||||
@@ -52,6 +69,8 @@ class TestHtmlPanel(wxPanel):
|
|||||||
if not self.cwd:
|
if not self.cwd:
|
||||||
self.cwd = os.getcwd()
|
self.cwd = os.getcwd()
|
||||||
|
|
||||||
|
wxHtmlWindow_AddFilter(MyHtmlFilter(log))
|
||||||
|
|
||||||
self.html = MyHtmlWindow(self, -1, log)
|
self.html = MyHtmlWindow(self, -1, log)
|
||||||
self.html.SetRelatedFrame(frame, "wxPython: (A Demonstration) -- %s")
|
self.html.SetRelatedFrame(frame, "wxPython: (A Demonstration) -- %s")
|
||||||
self.html.SetRelatedStatusBar(0)
|
self.html.SetRelatedStatusBar(0)
|
||||||
@@ -168,15 +187,27 @@ def runTest(frame, nb, log):
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
overview = """\
|
overview = """<html><body>
|
||||||
wxHtmlWindow is capable of parsing and rendering most simple HTML tags.
|
<h2>wxHtmlWindow</h2>
|
||||||
|
|
||||||
It is not intended to be a high-end HTML browser. If you're looking for something like that try http://www.mozilla.org - there's a chance you'll be able to make their widget wxWindows-compatible. I'm sure everyone will enjoy your work in that case...
|
<p>wxHtmlWindow is capable of parsing and rendering most
|
||||||
|
simple HTML tags.
|
||||||
|
|
||||||
|
<p>It is not intended to be a high-end HTML browser. If you're
|
||||||
|
looking for something like that try http://www.mozilla.org - there's a
|
||||||
|
chance you'll be able to make their widget wxWindows-compatible. I'm
|
||||||
|
sure everyone will enjoy your work in that case...
|
||||||
|
|
||||||
|
</body></html>
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
import sys,os
|
||||||
|
import run
|
||||||
|
run.main(['', os.path.basename(sys.argv[0])])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@@ -322,11 +322,11 @@ elif os.name == 'posix' and sys.platform[:6] == "darwin":
|
|||||||
|
|
||||||
|
|
||||||
elif os.name == 'posix':
|
elif os.name == 'posix':
|
||||||
# Set flags for Unix type platforms
|
# Set flags for other Unix type platforms
|
||||||
|
|
||||||
WXDIR = '..' # assumes IN_CVS_TREE
|
WXDIR = '..' # assumes IN_CVS_TREE
|
||||||
WXPLAT = '__WXGTK__' # and assumes GTK...
|
WXPLAT = '__WXGTK__' # and assumes GTK...
|
||||||
GENDIR = 'gtk' # Need to allow for Motif eventually too
|
GENDIR = 'gtk' # Need to allow for X11 and/or Motif eventually too
|
||||||
|
|
||||||
includes = ['src']
|
includes = ['src']
|
||||||
defines = [('SWIG_GLOBAL', None),
|
defines = [('SWIG_GLOBAL', None),
|
||||||
@@ -357,7 +357,9 @@ else:
|
|||||||
# Check if the version file needs updated
|
# Check if the version file needs updated
|
||||||
#----------------------------------------------------------------------
|
#----------------------------------------------------------------------
|
||||||
|
|
||||||
#if IN_CVS_TREE and newer('setup.py', 'src/__version__.py'):
|
# Always do it since the version string can change based on the UNICODE flag
|
||||||
|
|
||||||
|
##if IN_CVS_TREE and newer('setup.py', 'src/__version__.py'):
|
||||||
open('src/__version__.py', 'w').write("ver = '%s'\n" % VERSION)
|
open('src/__version__.py', 'w').write("ver = '%s'\n" % VERSION)
|
||||||
|
|
||||||
|
|
||||||
|
@@ -11,4 +11,5 @@ wx.wxHtmlContainerCellPtr = wxHtmlContainerCellPtr
|
|||||||
wx.wxHtmlWidgetCellPtr = wxHtmlWidgetCellPtr
|
wx.wxHtmlWidgetCellPtr = wxHtmlWidgetCellPtr
|
||||||
wx.wxHtmlWindowPtr = wxHtmlWindowPtr
|
wx.wxHtmlWindowPtr = wxHtmlWindowPtr
|
||||||
wx.wxHtmlLinkInfoPtr = wxHtmlLinkInfoPtr
|
wx.wxHtmlLinkInfoPtr = wxHtmlLinkInfoPtr
|
||||||
|
wx.wxHtmlFilterPtr = wxHtmlFilterPtr
|
||||||
|
|
||||||
|
@@ -700,6 +700,14 @@ public:
|
|||||||
'''get the currently focused item or -1 if none'''
|
'''get the currently focused item or -1 if none'''
|
||||||
return self.GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_FOCUSED)
|
return self.GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_FOCUSED)
|
||||||
|
|
||||||
|
def GetFirstSelected(self, item):
|
||||||
|
'''return first selected item, or -1 when none'''
|
||||||
|
return self.GetNextSelected(-1)
|
||||||
|
|
||||||
|
def GetNextSelected(self, item):
|
||||||
|
'''return subsequent selected items, or -1 when no more'''
|
||||||
|
return self.GetNextItem(item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED)
|
||||||
|
|
||||||
def IsSelected(self, idx):
|
def IsSelected(self, idx):
|
||||||
'''return TRUE if the item is selected'''
|
'''return TRUE if the item is selected'''
|
||||||
return self.GetItemState(idx, wxLIST_STATE_SELECTED) != 0
|
return self.GetItemState(idx, wxLIST_STATE_SELECTED) != 0
|
||||||
|
@@ -21,6 +21,7 @@
|
|||||||
#include <wx/fs_zip.h>
|
#include <wx/fs_zip.h>
|
||||||
#include <wx/fs_inet.h>
|
#include <wx/fs_inet.h>
|
||||||
#include <wx/wfstream.h>
|
#include <wx/wfstream.h>
|
||||||
|
#include <wx/filesys.h>
|
||||||
|
|
||||||
#include "printfw.h"
|
#include "printfw.h"
|
||||||
%}
|
%}
|
||||||
@@ -37,8 +38,10 @@
|
|||||||
%extern controls.i
|
%extern controls.i
|
||||||
%extern controls2.i
|
%extern controls2.i
|
||||||
%extern printfw.i
|
%extern printfw.i
|
||||||
|
|
||||||
%extern utils.i
|
%extern utils.i
|
||||||
|
%extern filesys.i
|
||||||
|
%extern streams.i
|
||||||
|
|
||||||
|
|
||||||
%pragma(python) code = "import wx"
|
%pragma(python) code = "import wx"
|
||||||
|
|
||||||
@@ -442,9 +445,73 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
// wxHtmlFilter
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
%{ // here's the C++ version
|
||||||
|
class wxPyHtmlFilter : public wxHtmlFilter {
|
||||||
|
DECLARE_ABSTRACT_CLASS(wxPyHtmlFilter);
|
||||||
|
public:
|
||||||
|
wxPyHtmlFilter() : wxHtmlFilter() {}
|
||||||
|
|
||||||
|
// returns TRUE if this filter is able to open&read given file
|
||||||
|
virtual bool CanRead(const wxFSFile& file) const {
|
||||||
|
bool rval = FALSE;
|
||||||
|
bool found;
|
||||||
|
wxPyBeginBlockThreads();
|
||||||
|
if ((found = wxPyCBH_findCallback(m_myInst, "CanRead"))) {
|
||||||
|
PyObject* obj = wxPyMake_wxObject((wxFSFile*)&file); // cast away const
|
||||||
|
rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(O)", obj));
|
||||||
|
Py_DECREF(obj);
|
||||||
|
}
|
||||||
|
wxPyEndBlockThreads();
|
||||||
|
return rval;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Reads given file and returns HTML document.
|
||||||
|
// Returns empty string if opening failed
|
||||||
|
virtual wxString ReadFile(const wxFSFile& file) const {
|
||||||
|
wxString rval;
|
||||||
|
bool found;
|
||||||
|
wxPyBeginBlockThreads();
|
||||||
|
if ((found = wxPyCBH_findCallback(m_myInst, "ReadFile"))) {
|
||||||
|
PyObject* obj = wxPyMake_wxObject((wxFSFile*)&file); // cast away const
|
||||||
|
PyObject* ro;
|
||||||
|
ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("(O)", obj));
|
||||||
|
Py_DECREF(obj);
|
||||||
|
if (ro) {
|
||||||
|
rval = Py2wxString(ro);
|
||||||
|
Py_DECREF(ro);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
wxPyEndBlockThreads();
|
||||||
|
return rval;
|
||||||
|
}
|
||||||
|
|
||||||
|
PYPRIVATE;
|
||||||
|
};
|
||||||
|
|
||||||
|
IMPLEMENT_ABSTRACT_CLASS(wxPyHtmlFilter, wxHtmlFilter);
|
||||||
|
%}
|
||||||
|
|
||||||
|
|
||||||
|
// And now the version seen by SWIG
|
||||||
|
|
||||||
|
%name(wxHtmlFilter) class wxPyHtmlFilter : wxObject {
|
||||||
|
public:
|
||||||
|
wxPyHtmlFilter();
|
||||||
|
|
||||||
|
void _setCallbackInfo(PyObject* self, PyObject* _class);
|
||||||
|
%pragma(python) addtomethod = "__init__:self._setCallbackInfo(self, wxHtmlFilter)"
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
//---------------------------------------------------------------------------
|
// wxHtmlWindow
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
%{
|
%{
|
||||||
@@ -478,7 +545,6 @@ public:
|
|||||||
DEC_PYCALLBACK__STRING(OnSetTitle);
|
DEC_PYCALLBACK__STRING(OnSetTitle);
|
||||||
DEC_PYCALLBACK__CELLINTINT(OnCellMouseHover);
|
DEC_PYCALLBACK__CELLINTINT(OnCellMouseHover);
|
||||||
DEC_PYCALLBACK__CELLINTINTME(OnCellClicked);
|
DEC_PYCALLBACK__CELLINTINTME(OnCellClicked);
|
||||||
// DEC_PYCALLBACK_BOOL_STRING(OnOpeningURL);
|
|
||||||
PYPRIVATE;
|
PYPRIVATE;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -486,7 +552,6 @@ IMPLEMENT_ABSTRACT_CLASS( wxPyHtmlWindow, wxHtmlWindow );
|
|||||||
IMP_PYCALLBACK__STRING(wxPyHtmlWindow, wxHtmlWindow, OnSetTitle);
|
IMP_PYCALLBACK__STRING(wxPyHtmlWindow, wxHtmlWindow, OnSetTitle);
|
||||||
IMP_PYCALLBACK__CELLINTINT(wxPyHtmlWindow, wxHtmlWindow, OnCellMouseHover);
|
IMP_PYCALLBACK__CELLINTINT(wxPyHtmlWindow, wxHtmlWindow, OnCellMouseHover);
|
||||||
IMP_PYCALLBACK__CELLINTINTME(wxPyHtmlWindow, wxHtmlWindow, OnCellClicked);
|
IMP_PYCALLBACK__CELLINTINTME(wxPyHtmlWindow, wxHtmlWindow, OnCellClicked);
|
||||||
// IMP_PYCALLBACK_BOOL_STRING(wxPyHtmlWindow, wxHtmlWindow, OnOpeningURL);
|
|
||||||
|
|
||||||
|
|
||||||
void wxPyHtmlWindow::OnLinkClicked(const wxHtmlLinkInfo& link) {
|
void wxPyHtmlWindow::OnLinkClicked(const wxHtmlLinkInfo& link) {
|
||||||
@@ -564,18 +629,45 @@ public:
|
|||||||
%pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
|
%pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
|
||||||
%pragma(python) addtomethod = "wxPreHtmlWindow:val._setOORInfo(val)"
|
%pragma(python) addtomethod = "wxPreHtmlWindow:val._setOORInfo(val)"
|
||||||
|
|
||||||
|
// Set HTML page and display it. !! source is HTML document itself,
|
||||||
|
// it is NOT address/filename of HTML document. If you want to
|
||||||
|
// specify document location, use LoadPage() istead
|
||||||
|
// Return value : FALSE if an error occured, TRUE otherwise
|
||||||
bool SetPage(const wxString& source);
|
bool SetPage(const wxString& source);
|
||||||
|
|
||||||
|
// Load HTML page from given location. Location can be either
|
||||||
|
// a) /usr/wxGTK2/docs/html/wx.htm
|
||||||
|
// b) http://www.somewhere.uk/document.htm
|
||||||
|
// c) ftp://ftp.somesite.cz/pub/something.htm
|
||||||
|
// In case there is no prefix (http:,ftp:), the method
|
||||||
|
// will try to find it itself (1. local file, then http or ftp)
|
||||||
|
// After the page is loaded, the method calls SetPage() to display it.
|
||||||
|
// Note : you can also use path relative to previously loaded page
|
||||||
|
// Return value : same as SetPage
|
||||||
bool LoadPage(const wxString& location);
|
bool LoadPage(const wxString& location);
|
||||||
|
|
||||||
|
// Append to current page
|
||||||
bool AppendToPage(const wxString& source);
|
bool AppendToPage(const wxString& source);
|
||||||
|
|
||||||
|
// Returns full location of opened page
|
||||||
wxString GetOpenedPage();
|
wxString GetOpenedPage();
|
||||||
|
|
||||||
|
// Returns anchor within opened page
|
||||||
wxString GetOpenedAnchor();
|
wxString GetOpenedAnchor();
|
||||||
|
|
||||||
|
// Returns <TITLE> of opened page or empty string otherwise
|
||||||
wxString GetOpenedPageTitle();
|
wxString GetOpenedPageTitle();
|
||||||
|
|
||||||
|
// Sets frame in which page title will be displayed. Format is format of
|
||||||
|
// frame title, e.g. "HtmlHelp : %s". It must contain exactly one %s
|
||||||
void SetRelatedFrame(wxFrame* frame, const wxString& format);
|
void SetRelatedFrame(wxFrame* frame, const wxString& format);
|
||||||
wxFrame* GetRelatedFrame();
|
wxFrame* GetRelatedFrame();
|
||||||
|
|
||||||
|
// After(!) calling SetRelatedFrame, this sets statusbar slot where messages
|
||||||
|
// will be displayed. Default is -1 = no messages.
|
||||||
void SetRelatedStatusBar(int bar);
|
void SetRelatedStatusBar(int bar);
|
||||||
|
|
||||||
//void SetFonts(wxString normal_face, wxString fixed_face, int *LIST);
|
// Sets fonts to be used when displaying HTML page.
|
||||||
%addmethods {
|
%addmethods {
|
||||||
void SetFonts(wxString normal_face, wxString fixed_face, PyObject* sizes) {
|
void SetFonts(wxString normal_face, wxString fixed_face, PyObject* sizes) {
|
||||||
int* temp = int_LIST_helper(sizes);
|
int* temp = int_LIST_helper(sizes);
|
||||||
@@ -587,20 +679,39 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void SetTitle(const wxString& title);
|
void SetTitle(const wxString& title);
|
||||||
|
|
||||||
|
// Sets space between text and window borders.
|
||||||
void SetBorders(int b);
|
void SetBorders(int b);
|
||||||
|
|
||||||
|
// Saves custom settings into cfg config. it will use the path 'path'
|
||||||
|
// if given, otherwise it will save info into currently selected path.
|
||||||
|
// saved values : things set by SetFonts, SetBorders.
|
||||||
void ReadCustomization(wxConfigBase *cfg, wxString path = wxPyEmptyString);
|
void ReadCustomization(wxConfigBase *cfg, wxString path = wxPyEmptyString);
|
||||||
void WriteCustomization(wxConfigBase *cfg, wxString path = wxPyEmptyString);
|
void WriteCustomization(wxConfigBase *cfg, wxString path = wxPyEmptyString);
|
||||||
|
|
||||||
|
// Goes to previous/next page (in browsing history)
|
||||||
|
// Returns TRUE if successful, FALSE otherwise
|
||||||
bool HistoryBack();
|
bool HistoryBack();
|
||||||
bool HistoryForward();
|
bool HistoryForward();
|
||||||
bool HistoryCanBack();
|
bool HistoryCanBack();
|
||||||
bool HistoryCanForward();
|
bool HistoryCanForward();
|
||||||
|
|
||||||
|
// Resets History
|
||||||
void HistoryClear();
|
void HistoryClear();
|
||||||
|
|
||||||
|
// Returns pointer to conteiners/cells structure.
|
||||||
wxHtmlContainerCell* GetInternalRepresentation();
|
wxHtmlContainerCell* GetInternalRepresentation();
|
||||||
|
|
||||||
|
// Returns a pointer to the parser.
|
||||||
wxHtmlWinParser* GetParser();
|
wxHtmlWinParser* GetParser();
|
||||||
|
|
||||||
bool ScrollToAnchor(const wxString& anchor);
|
bool ScrollToAnchor(const wxString& anchor);
|
||||||
bool HasAnchor(const wxString& anchor);
|
bool HasAnchor(const wxString& anchor);
|
||||||
|
|
||||||
|
//Adds input filter
|
||||||
|
static void AddFilter(wxPyHtmlFilter *filter);
|
||||||
|
|
||||||
|
|
||||||
void base_OnLinkClicked(const wxHtmlLinkInfo& link);
|
void base_OnLinkClicked(const wxHtmlLinkInfo& link);
|
||||||
void base_OnSetTitle(const wxString& title);
|
void base_OnSetTitle(const wxString& title);
|
||||||
void base_OnCellMouseHover(wxHtmlCell *cell, wxCoord x, wxCoord y);
|
void base_OnCellMouseHover(wxHtmlCell *cell, wxCoord x, wxCoord y);
|
||||||
@@ -609,12 +720,6 @@ public:
|
|||||||
const wxMouseEvent& event);
|
const wxMouseEvent& event);
|
||||||
};
|
};
|
||||||
|
|
||||||
// Static methods are mapped to stand-alone functions
|
|
||||||
%inline %{
|
|
||||||
void wxHtmlWindow_AddFilter(wxHtmlFilter *filter) {
|
|
||||||
wxHtmlWindow::AddFilter(filter);
|
|
||||||
}
|
|
||||||
%}
|
|
||||||
|
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
@@ -702,6 +807,7 @@ public:
|
|||||||
wxPyPtrTypeMap_Add("wxHtmlTagHandler", "wxPyHtmlTagHandler");
|
wxPyPtrTypeMap_Add("wxHtmlTagHandler", "wxPyHtmlTagHandler");
|
||||||
wxPyPtrTypeMap_Add("wxHtmlWinTagHandler", "wxPyHtmlWinTagHandler");
|
wxPyPtrTypeMap_Add("wxHtmlWinTagHandler", "wxPyHtmlWinTagHandler");
|
||||||
wxPyPtrTypeMap_Add("wxHtmlWindow", "wxPyHtmlWindow");
|
wxPyPtrTypeMap_Add("wxHtmlWindow", "wxPyHtmlWindow");
|
||||||
|
wxPyPtrTypeMap_Add("wxHtmlFilter", "wxPyHtmlFilter");
|
||||||
%}
|
%}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
Reference in New Issue
Block a user