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 wxGenericDirCtrl.
|
||||
|
@@ -43,6 +43,23 @@ class MyHtmlWindow(wxHtmlWindow):
|
||||
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):
|
||||
def __init__(self, parent, frame, log):
|
||||
wxPanel.__init__(self, parent, -1, style=wxNO_FULL_REPAINT_ON_RESIZE)
|
||||
@@ -52,6 +69,8 @@ class TestHtmlPanel(wxPanel):
|
||||
if not self.cwd:
|
||||
self.cwd = os.getcwd()
|
||||
|
||||
wxHtmlWindow_AddFilter(MyHtmlFilter(log))
|
||||
|
||||
self.html = MyHtmlWindow(self, -1, log)
|
||||
self.html.SetRelatedFrame(frame, "wxPython: (A Demonstration) -- %s")
|
||||
self.html.SetRelatedStatusBar(0)
|
||||
@@ -168,15 +187,27 @@ def runTest(frame, nb, log):
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
wxHtmlWindow is capable of parsing and rendering most simple HTML tags.
|
||||
overview = """<html><body>
|
||||
<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':
|
||||
# Set flags for Unix type platforms
|
||||
# Set flags for other Unix type platforms
|
||||
|
||||
WXDIR = '..' # assumes IN_CVS_TREE
|
||||
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']
|
||||
defines = [('SWIG_GLOBAL', None),
|
||||
@@ -357,7 +357,9 @@ else:
|
||||
# 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)
|
||||
|
||||
|
||||
|
@@ -11,4 +11,5 @@ wx.wxHtmlContainerCellPtr = wxHtmlContainerCellPtr
|
||||
wx.wxHtmlWidgetCellPtr = wxHtmlWidgetCellPtr
|
||||
wx.wxHtmlWindowPtr = wxHtmlWindowPtr
|
||||
wx.wxHtmlLinkInfoPtr = wxHtmlLinkInfoPtr
|
||||
wx.wxHtmlFilterPtr = wxHtmlFilterPtr
|
||||
|
||||
|
@@ -700,6 +700,14 @@ public:
|
||||
'''get the currently focused item or -1 if none'''
|
||||
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):
|
||||
'''return TRUE if the item is selected'''
|
||||
return self.GetItemState(idx, wxLIST_STATE_SELECTED) != 0
|
||||
|
@@ -21,6 +21,7 @@
|
||||
#include <wx/fs_zip.h>
|
||||
#include <wx/fs_inet.h>
|
||||
#include <wx/wfstream.h>
|
||||
#include <wx/filesys.h>
|
||||
|
||||
#include "printfw.h"
|
||||
%}
|
||||
@@ -37,8 +38,10 @@
|
||||
%extern controls.i
|
||||
%extern controls2.i
|
||||
%extern printfw.i
|
||||
|
||||
%extern utils.i
|
||||
%extern filesys.i
|
||||
%extern streams.i
|
||||
|
||||
|
||||
%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__CELLINTINT(OnCellMouseHover);
|
||||
DEC_PYCALLBACK__CELLINTINTME(OnCellClicked);
|
||||
// DEC_PYCALLBACK_BOOL_STRING(OnOpeningURL);
|
||||
PYPRIVATE;
|
||||
};
|
||||
|
||||
@@ -486,7 +552,6 @@ IMPLEMENT_ABSTRACT_CLASS( wxPyHtmlWindow, wxHtmlWindow );
|
||||
IMP_PYCALLBACK__STRING(wxPyHtmlWindow, wxHtmlWindow, OnSetTitle);
|
||||
IMP_PYCALLBACK__CELLINTINT(wxPyHtmlWindow, wxHtmlWindow, OnCellMouseHover);
|
||||
IMP_PYCALLBACK__CELLINTINTME(wxPyHtmlWindow, wxHtmlWindow, OnCellClicked);
|
||||
// IMP_PYCALLBACK_BOOL_STRING(wxPyHtmlWindow, wxHtmlWindow, OnOpeningURL);
|
||||
|
||||
|
||||
void wxPyHtmlWindow::OnLinkClicked(const wxHtmlLinkInfo& link) {
|
||||
@@ -564,18 +629,45 @@ public:
|
||||
%pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
|
||||
%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);
|
||||
|
||||
// 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);
|
||||
|
||||
// Append to current page
|
||||
bool AppendToPage(const wxString& source);
|
||||
|
||||
// Returns full location of opened page
|
||||
wxString GetOpenedPage();
|
||||
|
||||
// Returns anchor within opened page
|
||||
wxString GetOpenedAnchor();
|
||||
|
||||
// Returns <TITLE> of opened page or empty string otherwise
|
||||
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);
|
||||
wxFrame* GetRelatedFrame();
|
||||
|
||||
// After(!) calling SetRelatedFrame, this sets statusbar slot where messages
|
||||
// will be displayed. Default is -1 = no messages.
|
||||
void SetRelatedStatusBar(int bar);
|
||||
|
||||
//void SetFonts(wxString normal_face, wxString fixed_face, int *LIST);
|
||||
// Sets fonts to be used when displaying HTML page.
|
||||
%addmethods {
|
||||
void SetFonts(wxString normal_face, wxString fixed_face, PyObject* sizes) {
|
||||
int* temp = int_LIST_helper(sizes);
|
||||
@@ -587,20 +679,39 @@ public:
|
||||
}
|
||||
|
||||
void SetTitle(const wxString& title);
|
||||
|
||||
// Sets space between text and window borders.
|
||||
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 WriteCustomization(wxConfigBase *cfg, wxString path = wxPyEmptyString);
|
||||
|
||||
// Goes to previous/next page (in browsing history)
|
||||
// Returns TRUE if successful, FALSE otherwise
|
||||
bool HistoryBack();
|
||||
bool HistoryForward();
|
||||
bool HistoryCanBack();
|
||||
bool HistoryCanForward();
|
||||
|
||||
// Resets History
|
||||
void HistoryClear();
|
||||
|
||||
// Returns pointer to conteiners/cells structure.
|
||||
wxHtmlContainerCell* GetInternalRepresentation();
|
||||
|
||||
// Returns a pointer to the parser.
|
||||
wxHtmlWinParser* GetParser();
|
||||
|
||||
bool ScrollToAnchor(const wxString& anchor);
|
||||
bool HasAnchor(const wxString& anchor);
|
||||
|
||||
//Adds input filter
|
||||
static void AddFilter(wxPyHtmlFilter *filter);
|
||||
|
||||
|
||||
void base_OnLinkClicked(const wxHtmlLinkInfo& link);
|
||||
void base_OnSetTitle(const wxString& title);
|
||||
void base_OnCellMouseHover(wxHtmlCell *cell, wxCoord x, wxCoord y);
|
||||
@@ -609,12 +720,6 @@ public:
|
||||
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("wxHtmlWinTagHandler", "wxPyHtmlWinTagHandler");
|
||||
wxPyPtrTypeMap_Add("wxHtmlWindow", "wxPyHtmlWindow");
|
||||
wxPyPtrTypeMap_Add("wxHtmlFilter", "wxPyHtmlFilter");
|
||||
%}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
Reference in New Issue
Block a user