added HTML printing

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4030 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Václav Slavík 1999-10-17 13:03:40 +00:00
parent 30760ce7e5
commit 3ce369e687
25 changed files with 1568 additions and 538 deletions

View File

@ -1,5 +1,5 @@
#
# This file was automatically generated by tmake at 14:54, 1999/10/14
# This file was automatically generated by tmake at 22:30, 1999/10/16
# DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE UNX.T!
#
@ -607,6 +607,7 @@ HTML_HEADERS = \
html/htmlpars.h \
html/htmltag.h \
html/htmlwin.h \
html/htmprint.h \
html/m_templ.h \
html/winpars.h
@ -1811,6 +1812,7 @@ HTMLOBJS = \
htmlpars.o \
htmltag.o \
htmlwin.o \
htmprint.o \
m_fonts.o \
m_hline.o \
m_image.o \
@ -1831,6 +1833,7 @@ HTMLDEPS = \
htmlpars.d \
htmltag.d \
htmlwin.d \
htmprint.d \
m_fonts.d \
m_hline.d \
m_image.d \

View File

@ -413,6 +413,7 @@ m_list.cpp H
m_pre.cpp H
m_tables.cpp H
search.cpp H
htmprint.cpp H
arrimpl.cpp W
listimpl.cpp W
@ -846,6 +847,7 @@ htmltag.h L
htmlwin.h L
winpars.h L
m_templ.h L
htmprint.h L
caret.h N
choicdgg.h N

View File

@ -90,9 +90,12 @@
\input htcell.tex
\input htcolor.tex
\input htcontnr.tex
\input htdcrend.tex
\input hteasypr.tex
\input htfilter.tex
\input hthelpct.tex
\input htparser.tex
\input htprint.tex
\input httag.tex
\input httaghnd.tex
\input httagmod.tex

129
docs/latex/wx/htdcrend.tex Normal file
View File

@ -0,0 +1,129 @@
%
% automatically generated by HelpGen from
% htmprint.h at 17/Oct/99 12:48:02
%
\section{\class{wxHtmlDCRenderer}}\label{wxhtmldcrenderer}
This class can render HTML document into specified area of DC. You can use it
in your own printing code, although use of \helpref{wxHtmlEasyPrinting}{wxhtmleasyprinting}
or \helpref{wxHtmlPrintout}{wxhtmlprintout} is strongly recommended.
\wxheading{Derived from}
\helpref{wxObject}{wxobject}
\latexignore{\rtfignore{\wxheading{Members}}}
\membersection{wxHtmlDCRenderer::wxHtmlDCRenderer}\label{wxhtmldcrendererwxhtmldcrenderer}
\func{}{wxHtmlDCRenderer}{\void}
Constructor.
\membersection{wxHtmlDCRenderer::SetDC}\label{wxhtmldcrenderersetdc}
\func{void}{SetDC}{\param{wxDC* }{dc}, \param{int }{maxwidth}}
Assign DC instance to the renderer.
\wxheading{Parameters}
\docparam{maxwidth}{width of the area (on this DC) that is equivalent to screen's width,
in pixels (you should set it to page width minus margins).
{\bf Note:} In current implementation
screen width is always 800 pixels : it gives best results and ensures (almost) same printed outputs
across platforms and differently configured desktops.}
Also see \helpref{SetSize}{wxhtmldcrenderersetsize}
\membersection{wxHtmlDCRenderer::SetSize}\label{wxhtmldcrenderersetsize}
\func{void}{SetSize}{\param{int }{width}, \param{int }{height}}
Set size of output rectangle, in pixels. Note that you {\bf can't} change
width of the rectangle between calls to \helpref{Render}{wxhtmldcrendererrender}!
(You can freely change height.)
If you set width equal to maxwidth then HTML is rendered as if it were displayed in fullscreen.
If you set width = 1/2 maxwidth the it is rendered as if it covered half the screen
and so on.
\membersection{wxHtmlDCRenderer::SetHtmlText}\label{wxhtmldcrenderersethtmltext}
\func{void}{SetHtmlText}{\param{const wxString\& }{html}, \param{const wxString\& }{basepath = wxEmptyString}, \param{bool }{isdir = TRUE}}
Assign text to the renderer. \helpref{Render}{wxhtmldcrendererrender} then draws
the text onto DC.
\wxheading{Parameters}
\docparam{html}{HTML text. (NOT file!)}
\docparam{basepath}{base directory (html string would be stored there if it was in
file). It is used to determine path for loading images, for example.}
\docparam{isdir}{FALSE if basepath is filename, TRUE if it is directory name
(see \helpref{wxFileSystem}{wxfilesystem} for detailed explanation)}
\membersection{wxHtmlDCRenderer::Render}\label{wxhtmldcrendererrender}
\func{int}{Render}{\param{int }{x}, \param{int }{y}, \param{int }{from = 0}, \param{int }{dont\_render = FALSE}}
Renders HTML text to the DC.
\wxheading{Parameters}
\docparam{x,y}{ position of upper-left corner of printing rectangle (see \helpref{SetSize}{wxhtmldcrenderersetsize})}
\docparam{from}{y-coordinate of the very first visible cell}
\docparam{dont\_render}{if TRUE then this method only returns y coordinate of the next page
and does not output anything}
Returned value is y coordinate of first cell than didn't fit onto page.
Use this value as {\it from} in next call to Render in order to print multipages
document.
\wxheading{Caution!}
Following 3 methods {\bf must} always be called before any call to Render (preferably
in this order):
\begin{itemize}
\item \helpref{SetDC}{wxhtmldcrenderersetdc}
\item \helpref{SetSize}{wxhtmldcrenderersetsize}
\item \helpref{SetHtmlText}{wxhtmldcrenderersethtmltext}
\end{itemize}
{\bf Render() changes DC's user scale and does NOT restore it!!}
\membersection{wxHtmlDCRenderer::GetTotalHeight}\label{wxhtmldcrenderergettotalheight}
\func{int}{GetTotalHeight}{\void}
Returns height of the HTML text. This is important if area height (see \helpref{SetSize}{wxhtmldcrenderersetsize})
is smaller that total height and thus the page cannot fit into it. In that case you're supposed to
call \helpref{Render}{wxhtmldcrendererrender} as long as it's return value is smaller than GetTotalHeight's.

151
docs/latex/wx/hteasypr.tex Normal file
View File

@ -0,0 +1,151 @@
%
% automatically generated by HelpGen from
% htmprint.h at 17/Oct/99 12:48:02
%
\section{\class{wxHtmlEasyPrinting}}\label{wxhtmleasyprinting}
This class provides very simple interface to printing
architecture. It allows you to print HTML documents only
with very few commands.
\wxheading{Note}
Do not create this class on stack only. You should create an instance on app
startup and use this instance for all printing operations. The reason is that
this class stores various settings in it.
\wxheading{Derived from}
\helpref{wxObject}{wxobject}
\latexignore{\rtfignore{\wxheading{Members}}}
\membersection{wxHtmlEasyPrinting::wxHtmlEasyPrinting}\label{wxhtmleasyprintingwxhtmleasyprinting}
\func{}{wxHtmlEasyPrinting}{\param{const wxString\& }{name = "Printing"}, \param{wxFrame* }{parent\_frame = NULL}}
Constructor.
\wxheading{Parameters}
\docparam{name}{Name of the printing. Used by preview frames and setup dialogs.}
\docparam{parent\_frame}{pointer to the frame that will own preview frame and setup dialogs. May be NULL.}
\membersection{wxHtmlEasyPrinting::PreviewFile}\label{wxhtmleasyprintingpreviewfile}
\func{void}{PreviewFile}{\param{const wxString\& }{htmlfile}}
Previews HTML file.
\membersection{wxHtmlEasyPrinting::PreviewText}\label{wxhtmleasyprintingpreviewtext}
\func{void}{PreviewText}{\param{const wxString\& }{htmltext}, \param{const wxString\& }{basepath = wxEmptyString}}
Previews HTML text (not file!).
\wxheading{Parameters}
\docparam{htmltext}{HTML text.}
\docparam{basepath}{base directory (html string would be stored there if it was in
file). It is used to determine path for loading images, for example.}
\membersection{wxHtmlEasyPrinting::PrintFile}\label{wxhtmleasyprintingprintfile}
\func{void}{PrintFile}{\param{const wxString\& }{htmlfile}}
Prints HTML file.
\membersection{wxHtmlEasyPrinting::PrintText}\label{wxhtmleasyprintingprinttext}
\func{void}{PrintText}{\param{const wxString\& }{htmltext}, \param{const wxString\& }{basepath = wxEmptyString}}
Prints HTML text (not file!).
\wxheading{Parameters}
\docparam{htmltext}{HTML text.}
\docparam{basepath}{base directory (html string would be stored there if it was in
file). It is used to determine path for loading images, for example.}
\membersection{wxHtmlEasyPrinting::PrinterSetup}\label{wxhtmleasyprintingprintersetup}
\func{void}{PrinterSetup}{\void}
Displays printer setup dialog and allows the user to modify settings.
\membersection{wxHtmlEasyPrinting::PageSetup}\label{wxhtmleasyprintingpagesetup}
\func{void}{PageSetup}{\void}
Displays page setup dialog and allows the user to modify settings.
\membersection{wxHtmlEasyPrinting::SetHeader}\label{wxhtmleasyprintingsetheader}
\func{void}{SetHeader}{\param{const wxString\& }{header}, \param{int }{pg = wxPAGE\_ALL}}
Sets page header.
\wxheading{Parameters}
\docparam{header}{HTML text to be used as header. You can use macros in it:
\begin{itemize}
\item @PAGENUM@ is replaced by page number
\item @PAGESCNT@ is replaced by total number of pages
\end{itemize}
}
\docparam{pg}{one of wxPAGE\_ODD, wxPAGE\_EVEN and wxPAGE\_ALL constants.}
\membersection{wxHtmlEasyPrinting::SetFooter}\label{wxhtmleasyprintingsetfooter}
\func{void}{SetFooter}{\param{const wxString\& }{footer}, \param{int }{pg = wxPAGE\_ALL}}
Sets page footer.
\wxheading{Parameters}
\docparam{footer}{HTML text to be used as footer. You can use macros in it:
\begin{itemize}
\item @PAGENUM@ is replaced by page number
\item @PAGESCNT@ is replaced by total number of pages
\end{itemize}
}
\docparam{pg}{one of wxPAGE\_ODD, wxPAGE\_EVEN and wxPAGE\_ALL constants.}
\membersection{wxHtmlEasyPrinting::GetPrintData}\label{wxhtmleasyprintinggetprintdata}
\func{wxPrintData*}{GetPrintData}{\void}
Returns pointer to \helpref{wxPrintData}{wxprintdata} instance used by this class. You can
set its parameters (via SetXXXX methods).
\membersection{wxHtmlEasyPrinting::GetPageSetupData}\label{wxhtmleasyprintinggetpagesetupdata}
\func{wxPageSetupDialogData*}{GetPageSetupData}{\void}
Returns pointer to \helpref{wxPageSetupDialogData}{wxpagesetupdialogdata} instance used by
this class. You can set its parameters (via SetXXXX methods).

View File

@ -1,63 +1,14 @@
\membersection{Printing}\label{printing}
\membersection{HTML Printing}\label{printing}
The wxHTML library provides printing facilities.
The wxHTML library provides printing facilities with several levels of complexity.
You can redirect output displayed by \helpref{wxHtmlWindow}{wxhtmlwindow}
to the printer DC using this (or similar) code (see {\bf printing} sample for
more details) :
The easiest way to print an HTML document is to use
\helpref{wxHtmlEasyPrinting class}{wxhtmleasyprinting}. It lets you print HTML documents with only one
command and you don't have to care about wxPrintouts etc. at all. It is only simple wrapper around
\helpref{wxHtmlPrintout}{wxhtmlprintout}, normal wxWindows printout class.
\begin{verbatim}
//
// This method prints page number one to dc:
//
void MyPrintout::DrawPageOne(wxDC *dc)
{
int leftMargin = 20;
int topMargin = 50;
// You must compute the margins there.
// Caution! These values are NOT in printer DC's units.
// These values are in screen pixels.
// (see bellow)
// Here we obtain internal cell representation of HTML document:
// (html is our pointer to wxHtmlWindow object)
wxHtmlContainerCell *cell = html -> GetInternalRepresentation();
// Now we have to check in case our real page size is reduced
// (e.g. because we're drawing to a print preview memory DC)
int pageWidth, pageHeight;
int w, h;
dc->GetSize(&w, &h); // DC size
GetPageSizePixels(&pageWidth, &pageHeight); // real size
// Now we must scale it. This equation will map wxHtmlWindow
// to page in this way:
// |--this is whole page as printed---------|
// | | | |
// | | | |
// |-margin-|-----wxHtmlWindow-----|-margin-|
//
// So page width is 2*leftMargin + [wxHtmlWindow size]
// (measured in screen pixels).
// We will scale the printer DC so that wxHtmlWindow's content
// spreads from left to right:
float scale = (float)(
(float)(pageWidth) /
(float)(2 * leftMargin + cell -> GetMaxLineWidth()));
// If printer pageWidth == current DC width, then this doesn't
// change. But w might be the preview bitmap width, so scale down.
float overallScale = scale * (float)(w/(float)pageWidth);
// Set the user scale so that our computations take effect:
dc->SetUserScale(overallScale, overallScale);
dc->SetBackgroundMode(wxTRANSPARENT);
// And this is - finally - HTML stuff:
cell -> Draw(*dc, leftMargin, topMargin, 0, cell -> GetHeight());
}
\end{verbatim}
(Thanks to Julian Smart for sample)
And finally there is low level class \helpref{wxHtmlDCRenderer}{wxhtmldcrenderer} which you can use to
render HTML into rectangular area on any DC. It supports rendering into multiple rectangles with same
width. (Most common use is placing one rectangle on each page or printing into two columns.)

96
docs/latex/wx/htprint.tex Normal file
View File

@ -0,0 +1,96 @@
%
% automatically generated by HelpGen from
% htmprint.h at 17/Oct/99 12:48:02
%
\section{\class{wxHtmlPrintout}}\label{wxhtmlprintout}
This class serves as printout class for HTML documents.
\wxheading{Derived from}
\helpref{wxPrintout}{wxprintout}
\latexignore{\rtfignore{\wxheading{Members}}}
\membersection{wxHtmlPrintout::wxHtmlPrintout}\label{wxhtmlprintoutwxhtmlprintout}
\func{}{wxHtmlPrintout}{\param{const wxString\& }{title = "Printout"}}
Constructor.
\membersection{wxHtmlPrintout::SetHtmlText}\label{wxhtmlprintoutsethtmltext}
\func{void}{SetHtmlText}{\param{const wxString\& }{html}, \param{const wxString\& }{basepath = wxEmptyString}, \param{bool }{isdir = TRUE}}
Prepare the class for printing this HTML text.
\wxheading{Parameters}
\docparam{html}{HTML text. (NOT file!)}
\docparam{basepath}{base directory (html string would be stored there if it was in
file). It is used to determine path for loading images, for example.}
\docparam{isdir}{FALSE if basepath is filename, TRUE if it is directory name
(see \helpref{wxFileSystem}{wxfilesystem} for detailed explanation)}
\membersection{wxHtmlPrintout::SetHtmlFile}\label{wxhtmlprintoutsethtmlfile}
\func{void}{SetHtmlFile}{\param{const wxString\& }{htmlfile}}
Prepare the class for printing this HTML {\bf file}. The file may be located on
any virtual file system or it may be normal file.
\membersection{wxHtmlPrintout::SetHeader}\label{wxhtmlprintoutsetheader}
\func{void}{SetHeader}{\param{const wxString\& }{header}, \param{int }{pg = wxPAGE\_ALL}}
Sets page header.
\wxheading{Parameters}
\docparam{header}{HTML text to be used as header. You can use macros in it:
\begin{itemize}
\item @PAGENUM@ is replaced by page number
\item @PAGESCNT@ is replaced by total number of pages
\end{itemize}
}
\docparam{pg}{one of wxPAGE\_ODD, wxPAGE\_EVEN and wxPAGE\_ALL constants.}
\membersection{wxHtmlPrintout::SetFooter}\label{wxhtmlprintoutsetfooter}
\func{void}{SetFooter}{\param{const wxString\& }{footer}, \param{int }{pg = wxPAGE\_ALL}}
Sets page footer.
\wxheading{Parameters}
\docparam{footer}{HTML text to be used as footer. You can use macros in it:
\begin{itemize}
\item @PAGENUM@ is replaced by page number
\item @PAGESCNT@ is replaced by total number of pages
\end{itemize}
}
\docparam{pg}{one of wxPAGE\_ODD, wxPAGE\_EVEN and wxPAGE\_ALL constants.}
\membersection{wxHtmlPrintout::SetMargins}\label{wxhtmlprintoutsetmargins}
\func{void}{SetMargins}{\param{float }{top = 25.2}, \param{float }{bottom = 25.2}, \param{float }{left = 25.2}, \param{float }{right = 25.2}, \param{float }{spaces = 5}}
Sets margins in milimeters. Defaults to 1 inch for margins and 0.5cm for space
between text and header and/or footer

239
include/wx/html/htmprint.h Normal file
View File

@ -0,0 +1,239 @@
/////////////////////////////////////////////////////////////////////////////
// Name: htmprint.h
// Purpose: html printing classes
// Author: Vaclav Slavik
// Created: 25/09/99
// RCS-ID: $Id$
// Copyright: (c)
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_HTMPRINT_H_
#define _WX_HTMPRINT_H_
#ifdef __GNUG__
#pragma interface
#endif
#include <wx/defs.h>
#if wxUSE_PRINTING_ARCHITECTURE
#include "wx/html/htmlcell.h"
#include "wx/html/winpars.h"
#include "wx/print.h"
#include "wx/printdlg.h"
//--------------------------------------------------------------------------------
// wxHtmlDCRenderer
// This class is capable of rendering HTML into specified
// portion of DC
//--------------------------------------------------------------------------------
class wxHtmlDCRenderer : public wxObject
{
public:
wxHtmlDCRenderer();
~wxHtmlDCRenderer();
// Following 3 methods *must* be called before any call to Render:
void SetDC(wxDC *dc, int maxwidth);
// asign DC to this render
// maxwidth is width of area (on this DC) that is equivalent to screen's width, in pixels
// (you should set it to page width minus margins)
// Also see SetSize
void SetSize(int width, int height);
// sets size of output rectangle, in pixels. Note that you *can't* change
// width of the rectangle between calls to Render! (You can freely change height.)
// If you set width = maxwidth then HTML is rendered as if it were displayed in fullscreen.
// If you set width = 1/2 maxwidth the it is rendered as if it covered half the screen
// and so on..
void SetHtmlText(const wxString& html, const wxString& basepath = wxEmptyString, bool isdir = TRUE);
// sets the text to be displayed
//
// basepath is base directory (html string would be stored there if it was in
// file). It is used to determine path for loading images, for example.
// isdir is FALSE if basepath is filename, TRUE if it is directory name
// (see wxFileSystem for detailed explanation)
int Render(int x, int y, int from = 0, int dont_render = FALSE);
// [x,y] is position of upper-left corner of printing rectangle (see SetSize)
// from is y-coordinate of the very first visible cell
// Returned value is y coordinate of first cell than didn't fit onto page.
// Use this value as 'from' in next call to Render in order to print multiple pages
// document
// If dont_render is TRUE then nothing is rendered into DC and it only counts
// pixels and return y coord of the next page
//
// CAUTION! Render() changes DC's user scale and does NOT restore it!
int GetTotalHeight();
// returns total height of the html document
// (compare Render's return value with this)
private:
wxDC *m_DC;
wxHtmlWinParser *m_Parser;
wxFileSystem *m_FS;
wxHtmlContainerCell *m_Cells;
int m_MaxWidth, m_Width, m_Height;
double m_Scale;
};
enum {
wxPAGE_ODD,
wxPAGE_EVEN,
wxPAGE_ALL
};
//--------------------------------------------------------------------------------
// wxHtmlPrintout
// This class is derived from standard wxWindows printout class
// and is used to print HTML documents.
//--------------------------------------------------------------------------------
class wxHtmlPrintout : public wxPrintout
{
public:
wxHtmlPrintout(const wxString& title = "Printout");
~wxHtmlPrintout();
void SetHtmlText(const wxString& html, const wxString &basepath = wxEmptyString, bool isdir = TRUE);
// prepares the class for printing this html document.
// Must be called before using the class, in fact just after constructor
//
// basepath is base directory (html string would be stored there if it was in
// file). It is used to determine path for loading images, for example.
// isdir is FALSE if basepath is filename, TRUE if it is directory name
// (see wxFileSystem for detailed explanation)
void SetHtmlFile(const wxString &htmlfile);
// same as SetHtmlText except that it takes regular file as the parameter
void SetHeader(const wxString& header, int pg = wxPAGE_ALL);
void SetFooter(const wxString& footer, int pg = wxPAGE_ALL);
// sets header/footer for the document. The argument is interpreted as HTML document.
// You can use macros in it:
// @PAGENUM@ is replaced by page number
// @PAGESCNT@ is replaced by total number of pages
//
// pg is one of wxPAGE_ODD, wxPAGE_EVEN and wx_PAGE_ALL constants.
// You can set different header/footer for odd and even pages
void SetMargins(float top = 25.2, float bottom = 25.2, float left = 25.2, float right = 25.2,
float spaces = 5);
// sets margins in milimeters. Defaults to 1 inch for margins and 0.5cm for space
// between text and header and/or footer
// wxPrintout stuff:
bool OnPrintPage(int page);
bool HasPage(int page);
void GetPageInfo(int *minPage, int *maxPage, int *selPageFrom, int *selPageTo);
bool OnBeginDocument(int start, int end);
private:
void RenderPage(wxDC *dc, int page);
// renders one page into dc
wxString TranslateHeader(const wxString& instr, int page);
// substitute @PAGENUM@ and @PAGESCNT@ by real values
void CountPages();
// counts pages and fills m_NumPages and m_PageBreaks
private:
int m_NumPages;
int m_PageBreaks[HTML_PRINT_MAX_PAGES];
wxString m_Document, m_BasePath;
bool m_BasePathIsDir;
wxString m_Headers[2], m_Footers[2];
int m_HeaderHeight, m_FooterHeight;
wxHtmlDCRenderer *m_Renderer, *m_RendererHdr;
float m_MarginTop, m_MarginBottom, m_MarginLeft, m_MarginRight, m_MarginSpace;
};
//--------------------------------------------------------------------------------
// wxHtmlEasyPrinting
// This class provides very simple interface to printing
// architecture. It allows you to print HTML documents only
// with very few commands.
//
// Note : do not create this class on stack only.
// You should create an instance on app startup and
// use this instance for all printing. Why? The class
// stores page&printer settings in it.
//--------------------------------------------------------------------------------
class wxHtmlEasyPrinting : public wxObject
{
public:
wxHtmlEasyPrinting(const wxString& name = "Printing", wxFrame *parent_frame = NULL);
~wxHtmlEasyPrinting();
void PreviewFile(const wxString &htmlfile);
void PreviewText(const wxString &htmltext, const wxString& basepath = wxEmptyString);
// Preview file / html-text for printing
// (and offers printing)
// basepath is base directory for opening subsequent files (e.g. from <img> tag)
void PrintFile(const wxString &htmlfile);
void PrintText(const wxString &htmltext, const wxString& basepath = wxEmptyString);
// Print file / html-text w/o preview
void PrinterSetup();
void PageSetup();
// pop up printer or page setup dialog
void SetHeader(const wxString& header, int pg = wxPAGE_ALL);
void SetFooter(const wxString& footer, int pg = wxPAGE_ALL);
// sets header/footer for the document. The argument is interpreted as HTML document.
// You can use macros in it:
// @PAGENUM@ is replaced by page number
// @PAGESCNT@ is replaced by total number of pages
//
// pg is one of wxPAGE_ODD, wxPAGE_EVEN and wx_PAGE_ALL constants.
// You can set different header/footer for odd and even pages
wxPrintData *GetPrintData() {return m_PrintData;}
wxPageSetupDialogData *GetPageSetupData() {return m_PageSetupData;}
// return page setting data objects.
// (You can set their parameters.)
private:
wxHtmlPrintout *CreatePrintout();
void DoPreview(wxHtmlPrintout *printout1, wxHtmlPrintout *printout2);
void DoPrint(wxHtmlPrintout *printout);
wxPrintData *m_PrintData;
wxPageSetupDialogData *m_PageSetupData;
wxString m_Name;
wxString m_Headers[2], m_Footers[2];
wxFrame *m_Frame;
};
#endif // wxUSE_PRINTING_ARCHITECTURE
#endif // _WX_HTMPRINT_H_

View File

@ -13,7 +13,7 @@ top_srcdir = @top_srcdir@
top_builddir = ../../..
program_dir = samples/html/printing
DATAFILES = test.htm pic.png
DATAFILES = test.htm
PROGRAM=printing

View File

@ -1,44 +0,0 @@
/* XPM */
static char *mondrian_xpm[] = {
/* columns rows colors chars-per-pixel */
"32 32 6 1",
" c Black",
". c Blue",
"X c #00bf00",
"o c Red",
"O c Yellow",
"+ c Gray100",
/* pixels */
" ",
" oooooo +++++++++++++++++++++++ ",
" oooooo +++++++++++++++++++++++ ",
" oooooo +++++++++++++++++++++++ ",
" oooooo +++++++++++++++++++++++ ",
" oooooo +++++++++++++++++++++++ ",
" oooooo +++++++++++++++++++++++ ",
" oooooo +++++++++++++++++++++++ ",
" ",
" ++++++ ++++++++++++++++++ .... ",
" ++++++ ++++++++++++++++++ .... ",
" ++++++ ++++++++++++++++++ .... ",
" ++++++ ++++++++++++++++++ .... ",
" ++++++ ++++++++++++++++++ .... ",
" ++++++ ++++++++++++++++++ ",
" ++++++ ++++++++++++++++++ ++++ ",
" ++++++ ++++++++++++++++++ ++++ ",
" ++++++ ++++++++++++++++++ ++++ ",
" ++++++ ++++++++++++++++++ ++++ ",
" ++++++ ++++++++++++++++++ ++++ ",
" ++++++ ++++++++++++++++++ ++++ ",
" ++++++ ++++++++++++++++++ ++++ ",
" ++++++ ++++++++++++++++++ ++++ ",
" ++++++ ++++++++++++++++++ ++++ ",
" ++++++ ++++ ",
" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
" ++++++ OOOOOOOOOOOO XXXXX ++++ ",
" "
};

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

View File

@ -1,312 +1,244 @@
/*
* File: printing.cc
* Purpose: Printing demo for wxWindows class library
* Author: Julian Smart
* modified by Vaclav Slavik (wxHTML stuffs)
* Created: 1995
* Updated:
* Copyright: (c) 1995, AIAI, University of Edinburgh
*/
/////////////////////////////////////////////////////////////////////////////
// Name: printimg.cpp
// Purpose: wxHtmlEasyPrinting testing example
/////////////////////////////////////////////////////////////////////////////
/* static const char sccsid[] = "%W% %G%"; */
#ifdef __GNUG__
#pragma implementation
#endif
// For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h"
#include <wx/wxprec.h>
#ifdef __BORLANDC__
#pragma hdrstop
#endif
// for all others, include the necessary headers (this file is usually all you
// need because it includes almost all "standard" wxWindows headers
#ifndef WX_PRECOMP
#include "wx/wx.h"
#include <wx/wx.h>
#endif
#if !wxUSE_PRINTING_ARCHITECTURE
#error You must set wxUSE_PRINTING_ARCHITECTURE to 1 in setup.h to compile this demo.
#endif
#include <wx/image.h>
#include <wx/html/htmlwin.h>
// Set this to 1 if you want to test PostScript printing under MSW.
// However, you'll also need to edit src/msw/makefile.nt.
//!!! DON'T DO THAT! This is wxHTML sample now
#define wxTEST_POSTSCRIPT_IN_MSW 0
#include <ctype.h>
#include "wx/metafile.h"
#include "wx/print.h"
#include "wx/printdlg.h"
#include "wx/accel.h"
#if wxTEST_POSTSCRIPT_IN_MSW
#include "wx/generic/printps.h"
#include "wx/generic/prntdlgg.h"
#endif
#include <wx/wxhtml.h>
#include <wx/wfstream.h>
#include "printing.h"
#ifndef __WXMSW__
#include "mondrian.xpm"
#endif
// Global print data, to remember settings during the session
wxPrintData *g_printData = (wxPrintData*) NULL ;
// Global page setup data
wxPageSetupData* g_pageSetupData = (wxPageSetupData*) NULL;
#include <wx/html/htmprint.h>
// Declare a frame
MyFrame *frame = (MyFrame *) NULL;
wxHtmlWindow *html = NULL;
int orientation = wxPORTRAIT;
// ----------------------------------------------------------------------------
// private classes
// ----------------------------------------------------------------------------
// Main proc
IMPLEMENT_APP(MyApp)
MyApp::MyApp()
// Define a new application type, each program should derive a class from wxApp
class MyApp : public wxApp
{
}
public:
// override base class virtuals
// ----------------------------
// The `main program' equivalent, creating the windows and returning the
// main frame
bool MyApp::OnInit(void)
// this one is called on application startup and is a good place for the app
// initialization (doing it here and not in the ctor allows to have an error
// return: if OnInit() returns false, the application terminates)
virtual bool OnInit();
};
// Define a new frame type: this is going to be our main frame
class MyFrame : public wxFrame
{
g_printData = new wxPrintData;
g_pageSetupData = new wxPageSetupDialogData;
public:
// ctor(s)
// Create the main frame window
frame = new MyFrame((wxFrame *) NULL, (char *) "wxWindows Printing Demo", wxPoint(0, 0), wxSize(600, 400));
MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size);
// Give it a status line
frame->CreateStatusBar(2);
// event handlers (these functions should _not_ be virtual)
void OnQuit(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event);
// Load icon and bitmap
frame->SetIcon( wxICON( mondrian) );
void OnPrintSetup(wxCommandEvent& event);
void OnPageSetup(wxCommandEvent& event);
void OnPrint(wxCommandEvent& event);
void OnPreview(wxCommandEvent& event);
void OnOpen(wxCommandEvent& event);
// Make a menubar
wxMenu *file_menu = new wxMenu;
private:
wxHtmlWindow *m_Html;
wxHtmlEasyPrinting *m_Prn;
wxString m_Name;
// any class wishing to process wxWindows events must use this macro
DECLARE_EVENT_TABLE()
};
file_menu->Append(WXPRINT_PRINT, "&Print...", "Print");
file_menu->Append(WXPRINT_PRINT_SETUP, "Print &Setup...", "Setup printer properties");
file_menu->Append(WXPRINT_PAGE_SETUP, "Page Set&up...", "Page setup");
file_menu->Append(WXPRINT_PREVIEW, "Print Pre&view", "Preview");
// ----------------------------------------------------------------------------
// constants
// ----------------------------------------------------------------------------
// Accelerators
wxAcceleratorEntry entries[1];
entries[0].Set(wxACCEL_CTRL, (int) 'V', WXPRINT_PREVIEW);
wxAcceleratorTable accel(1, entries);
frame->SetAcceleratorTable(accel);
file_menu->AppendSeparator();
file_menu->Append(WXPRINT_QUIT, "E&xit", "Exit program");
wxMenu *help_menu = new wxMenu;
help_menu->Append(WXPRINT_ABOUT, "&About", "About this demo");
wxMenuBar *menu_bar = new wxMenuBar;
menu_bar->Append(file_menu, "&File");
menu_bar->Append(help_menu, "&Help");
// Associate the menu bar with the frame
frame->SetMenuBar(menu_bar);
frame->Centre(wxBOTH);
frame->Show(TRUE);
frame->SetStatusText("Printing demo");
SetTopWindow(frame);
return TRUE;
}
int MyApp::OnExit()
// IDs for the controls and the menu commands
enum
{
delete g_printData;
delete g_pageSetupData;
return 1;
}
// menu items
Minimal_Quit = 1,
Minimal_About,
Minimal_Print,
Minimal_Preview,
Minimal_PageSetup,
Minimal_PrintSetup,
Minimal_Open
};
// ----------------------------------------------------------------------------
// event tables and other macros for wxWindows
// ----------------------------------------------------------------------------
// the event tables connect the wxWindows events with the functions (event
// handlers) which process them. It can be also done at run-time, but for the
// simple menu events like this the static method is much simpler.
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(WXPRINT_QUIT, MyFrame::OnExit)
EVT_MENU(WXPRINT_PRINT, MyFrame::OnPrint)
EVT_MENU(WXPRINT_PREVIEW, MyFrame::OnPrintPreview)
EVT_MENU(WXPRINT_PRINT_SETUP, MyFrame::OnPrintSetup)
EVT_MENU(WXPRINT_PAGE_SETUP, MyFrame::OnPageSetup)
EVT_MENU(WXPRINT_ABOUT, MyFrame::OnPrintAbout)
EVT_MENU(Minimal_Quit, MyFrame::OnQuit)
EVT_MENU(Minimal_About, MyFrame::OnAbout)
EVT_MENU(Minimal_Print, MyFrame::OnPrint)
EVT_MENU(Minimal_Preview, MyFrame::OnPreview)
EVT_MENU(Minimal_PageSetup, MyFrame::OnPageSetup)
EVT_MENU(Minimal_PrintSetup, MyFrame::OnPrintSetup)
EVT_MENU(Minimal_Open, MyFrame::OnOpen)
END_EVENT_TABLE()
// Define my frame constructor
MyFrame::MyFrame(wxFrame *frame, const wxString& title, const wxPoint& pos, const wxSize& size):
wxFrame(frame, -1, title, pos, size)
// Create a new application object: this macro will allow wxWindows to create
// the application object during program execution (it's better than using a
// static object for many reasons) and also declares the accessor function
// wxGetApp() which will return the reference of the right type (i.e. MyApp and
// not wxApp)
IMPLEMENT_APP(MyApp)
// ============================================================================
// implementation
// ============================================================================
// ----------------------------------------------------------------------------
// the application class
// ----------------------------------------------------------------------------
// `Main program' equivalent: the program execution "starts" here
bool MyApp::OnInit()
{
html = new wxHtmlWindow(this);
html -> LoadPage("test.htm");
#if wxUSE_LIBPNG
wxImage::AddHandler(new wxPNGHandler);
#endif
#if wxUSE_LIBJPEG
wxImage::AddHandler(new wxJPEGHandler);
#endif
#if wxUSE_GIF
wxImage::AddHandler(new wxGIFHandler);
#endif
MyFrame *frame = new MyFrame("Printing test",
wxPoint(150, 50), wxSize(640, 480));
// Show it and tell the application that it's our main window
// @@@ what does it do exactly, in fact? is it necessary here?
frame->Show(TRUE);
SetTopWindow(frame);
// success: wxApp::OnRun() will be called which will enter the main message
// loop and the application will run. If we returned FALSE here, the
// application would exit immediately.
return TRUE;
}
void MyFrame::OnExit(wxCommandEvent& WXUNUSED(event))
// ----------------------------------------------------------------------------
// main frame
// ----------------------------------------------------------------------------
// frame constructor
MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
: wxFrame((wxFrame *)NULL, -1, title, pos, size)
{
Close(TRUE);
// create a menu bar
wxMenu *menuFile = new wxMenu;
wxMenu *menuNav = new wxMenu;
menuFile->Append(Minimal_Open, "Open...\tCtrl-O");
menuFile->AppendSeparator();
menuFile->Append(Minimal_PageSetup, "Page Setup");
menuFile->Append(Minimal_PrintSetup, "Printer Setup");
menuFile->Append(Minimal_Print, "Print...");
menuFile->Append(Minimal_Preview, "Preview...");
menuFile->AppendSeparator();
menuFile->Append(Minimal_About, "&About");
menuFile->AppendSeparator();
menuFile->Append(Minimal_Quit, "&Exit");
// now append the freshly created menu to the menu bar...
wxMenuBar *menuBar = new wxMenuBar;
menuBar->Append(menuFile, "&File");
// ... and attach this menu bar to the frame
SetMenuBar(menuBar);
CreateStatusBar(1);
m_Html = new wxHtmlWindow(this);
m_Html -> SetRelatedFrame(this, "HTML : %s");
m_Html -> SetRelatedStatusBar(0);
m_Name = "test.htm";
m_Html -> LoadPage(m_Name);
m_Prn = new wxHtmlEasyPrinting("Easy Printing Demo", this);
m_Prn -> SetHeader(m_Name + "(@PAGENUM@/@PAGESCNT@)<hr>", wxPAGE_ALL);
}
void MyFrame::OnPrint(wxCommandEvent& WXUNUSED(event))
// event handlers
void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
{
wxPrinter printer;
MyPrintout printout("My printout");
if (!printer.Print(this, &printout, TRUE))
wxMessageBox("There was a problem printing.\nPerhaps your current printer is not set correctly?", "Printing", wxOK);
delete m_Prn;
// TRUE is to force the frame to close
Close(TRUE);
}
void MyFrame::OnPrintPreview(wxCommandEvent& WXUNUSED(event))
{
wxPrintData printData;
printData.SetOrientation(orientation);
// Pass two printout objects: for preview, and possible printing.
wxPrintPreview *preview = new wxPrintPreview(new MyPrintout, new MyPrintout, & printData);
if (!preview->Ok())
{
delete preview;
wxMessageBox("There was a problem previewing.\nPerhaps your current printer is not set correctly?", "Previewing", wxOK);
return;
}
wxPreviewFrame *frame = new wxPreviewFrame(preview, this, "Demo Print Preview", wxPoint(100, 100), wxSize(600, 650));
frame->Centre(wxBOTH);
frame->Initialize();
frame->Show(TRUE);
void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
{
wxMessageBox("HTML printing sample\n\n(c) Vaclav Slavik, 1999");
}
void MyFrame::OnPrintSetup(wxCommandEvent& WXUNUSED(event))
{
wxPrintDialogData printDialogData(* g_printData);
wxPrintDialog printerDialog(this, & printDialogData);
printerDialog.GetPrintDialogData().SetSetupDialog(TRUE);
printerDialog.ShowModal();
(*g_printData) = printerDialog.GetPrintDialogData().GetPrintData();
m_Prn -> PrinterSetup();
}
void MyFrame::OnPageSetup(wxCommandEvent& WXUNUSED(event))
{
(*g_pageSetupData) = * g_printData;
wxPageSetupDialog pageSetupDialog(this, g_pageSetupData);
pageSetupDialog.ShowModal();
(*g_printData) = pageSetupDialog.GetPageSetupData().GetPrintData();
(*g_pageSetupData) = pageSetupDialog.GetPageSetupData();
m_Prn -> PageSetup();
}
void MyFrame::OnPrintAbout(wxCommandEvent& WXUNUSED(event))
void MyFrame::OnPrint(wxCommandEvent& WXUNUSED(event))
{
(void)wxMessageBox("wxWindows printing demo\nAuthor: Julian Smart julian.smart@ukonline.co.uk\n\nModified by Vaclav Slavik to show wxHtml features",
"About wxWindows printing demo", wxOK|wxCENTRE);
m_Prn -> PrintFile(m_Name);
}
bool MyPrintout::OnPrintPage(int page)
void MyFrame::OnPreview(wxCommandEvent& WXUNUSED(event))
{
wxDC *dc = GetDC();
if (dc)
{
if (page == 1)
DrawPageOne(dc);
return TRUE;
}
else
return FALSE;
m_Prn -> PreviewFile(m_Name);
}
bool MyPrintout::OnBeginDocument(int startPage, int endPage)
void MyFrame::OnOpen(wxCommandEvent& WXUNUSED(event))
{
if (!wxPrintout::OnBeginDocument(startPage, endPage))
return FALSE;
wxFileDialog dialog(this, "Open HTML page", "", "", "*.htm", 0);
return TRUE;
}
void MyPrintout::GetPageInfo(int *minPage, int *maxPage, int *selPageFrom, int *selPageTo)
{
*minPage = 1;
*maxPage = 1;
*selPageFrom = 1;
*selPageTo = 1;
}
bool MyPrintout::HasPage(int pageNum)
{
return (pageNum == 1);
if (dialog.ShowModal() == wxID_OK)
{
m_Name = dialog.GetPath();
m_Html -> LoadPage(m_Name);
m_Prn -> SetHeader(m_Name + "(@PAGENUM@/@PAGESCNT@)<hr>", wxPAGE_ALL);
}
}
void MyPrintout::DrawPageOne(wxDC *dc)
{
int leftMargin = 20;
int topMargin = 40;
/* You might use THIS code to set the printer DC to ROUGHLY reflect
* the screen text size. This page also draws lines of actual length 5cm
* on the page.
*/
// Get the logical pixels per inch of screen and printer
int ppiScreenX, ppiScreenY;
GetPPIScreen(&ppiScreenX, &ppiScreenY);
int ppiPrinterX, ppiPrinterY;
GetPPIPrinter(&ppiPrinterX, &ppiPrinterY);
// Here we obtain internal cell representation of HTML document:
wxHtmlContainerCell *cell = html -> GetInternalRepresentation();
// Now we have to check in case our real page size is reduced
// (e.g. because we're drawing to a print preview memory DC)
int pageWidth, pageHeight;
int w, h;
dc->GetSize(&w, &h);
GetPageSizePixels(&pageWidth, &pageHeight);
// Now we must scale it somehow. The best would be to suppose that html window
// width is equal to page width:
float scale = (float)((float)(pageWidth - 0 * leftMargin)/((float)cell -> GetMaxLineWidth() + 2 * leftMargin));
// If printer pageWidth == current DC width, then this doesn't
// change. But w might be the preview bitmap width, so scale down.
float overallScale = scale * (float)(w/(float)pageWidth);
dc->SetUserScale(overallScale, overallScale);
// Calculate conversion factor for converting millimetres into
// logical units.
// There are approx. 25.1 mm to the inch. There are ppi
// device units to the inch. Therefore 1 mm corresponds to
// ppi/25.1 device units. We also divide by the
// screen-to-printer scaling factor, because we need to
// unscale to pass logical units to DrawLine.
dc->SetBackgroundMode(wxTRANSPARENT);
// TESTING
int pageWidthMM, pageHeightMM;
GetPageSizeMM(&pageWidthMM, &pageHeightMM);
// This is all the printing :
cell -> Draw(*dc, leftMargin, topMargin, 0, cell -> GetHeight());
}

View File

@ -1,76 +0,0 @@
/*
* File: printing.h
* Purpose: Printing demo for wxWindows class library
* Author: Julian Smart
* Created: 1995
* Updated:
* Copyright: (c) 1995, AIAI, University of Edinburgh
*/
/* sccsid[] = "%W% %G%" */
#ifdef __GNUG__
#pragma interface
#endif
// Define a new application
class MyApp: public wxApp
{
public:
MyApp() ;
bool OnInit();
int OnExit();
};
DECLARE_APP(MyApp)
class MyCanvas;
// Define a new canvas and frame
class MyFrame: public wxFrame
{
public:
MyFrame(wxFrame *frame, const wxString& title, const wxPoint& pos, const wxSize& size);
void OnPrint(wxCommandEvent& event);
void OnPrintPreview(wxCommandEvent& event);
void OnPrintSetup(wxCommandEvent& event);
void OnPageSetup(wxCommandEvent& event);
#if defined(__WXMSW__) && wxTEST_POSTSCRIPT_IN_MSW
void OnPrintPS(wxCommandEvent& event);
void OnPrintPreviewPS(wxCommandEvent& event);
void OnPrintSetupPS(wxCommandEvent& event);
void OnPageSetupPS(wxCommandEvent& event);
#endif
void OnExit(wxCommandEvent& event);
void OnPrintAbout(wxCommandEvent& event);
DECLARE_EVENT_TABLE()
};
class MyPrintout: public wxPrintout
{
public:
MyPrintout(char *title = "My printout"):wxPrintout(title) {}
bool OnPrintPage(int page);
bool HasPage(int page);
bool OnBeginDocument(int startPage, int endPage);
void GetPageInfo(int *minPage, int *maxPage, int *selPageFrom, int *selPageTo);
void DrawPageOne(wxDC *dc);
};
#define WXPRINT_QUIT 100
#define WXPRINT_PRINT 101
#define WXPRINT_PRINT_SETUP 102
#define WXPRINT_PAGE_SETUP 103
#define WXPRINT_PREVIEW 104
#define WXPRINT_PRINT_PS 105
#define WXPRINT_PRINT_SETUP_PS 106
#define WXPRINT_PAGE_SETUP_PS 107
#define WXPRINT_PREVIEW_PS 108
#define WXPRINT_ABOUT 109

View File

@ -1,126 +1,186 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="GENERATOR" CONTENT="Mozilla/4.06 [en] (X11; I; Linux 2.0.35 i686) [Netscape]">
<TITLE>wxWindows Roadmap</TITLE>
</HEAD>
<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#FF0000" ALINK="#000088">
This is - - default text, now switching to
<BODY>
<a name="top"></a>
<font face="Arial, Lucida Sans, Helvetica">
<table width=100% border=4 cellpadding=5 cellspacing=0>
<tr>
<td bgcolor="#660000">
<font size=+1 face="Arial, Lucida Sans, Helvetica" color="#FFFFFF">
wxWindows Roadmap
</font>
</td>
</tr>
</table>
<P>
<CENTER>
<P>center, now still ctr, now exiting</CENTER>
<a href="#schedule">Schedule</a> | <a href="#todo">To-Do List</a>
</CENTER>
<P>exited!.<A HREF="#downtown">[link to down]</A>
<P>Hello, this *is* default charset (helvetica, probably) and it is displayed
with one&nbsp; <FONT COLOR="#FF0000">COLOR CHANGE</FONT>. Of course we
can have as many color changes as we can, what about this <FONT COLOR="#FF0000">M</FONT><FONT COLOR="#FFFF00">A</FONT><FONT COLOR="#33FF33">D</FONT><B><FONT COLOR="#FFFFFF"><FONT SIZE=+1>N</FONT></FONT></B>E<FONT COLOR="#999999">S</FONT><FONT COLOR="#CC33CC">S?</FONT>
<P><FONT COLOR="#000000">There was a space above.</FONT>
<BR>
<HR WIDTH="100%">This was a line. <TT>(BTW we are in <B>fixed</B> font
/ <I><U>typewriter</U> font</I> right now :-)</TT>
<BR>This is in <B>BOLD</B> face. This is <I>ITALIC.</I> This is <B><I><U>E
V E R Y T H I N G</U></I></B>.
<BR>&nbsp;
<BR>&nbsp;
<BR>
<BR>
<BR>
<CENTER>
<P>Right now, <FONT COLOR="#0000FF"><FONT SIZE=+4>centered REALLY Big Text</FONT></FONT>,
how do you like (space) it?</CENTER>
<P>
<DIV ALIGN=right>RIGHT: <FONT SIZE=-2>text-2, </FONT><FONT SIZE=-1>text-1,
</FONT>text+0,
<FONT SIZE=+1>text+1,
</FONT><FONT COLOR="#FF0000"><FONT SIZE=+2>text+2,
</FONT></FONT><FONT SIZE=+3>text+3,
</FONT><FONT SIZE=+4>text+4</FONT>
<BR><U><FONT SIZE=+1>we are right now</FONT></U></DIV>
This page represents current thinking about where wxWindows is going in the near,
medium and long-term. It also serves as a schedule for new releases so
that both developers and users can know what to expect when, at least approximately.<P>
<CENTER><U><FONT SIZE=+1>we are center now</FONT></U></CENTER>
<U><FONT SIZE=+1>we are left now.</FONT></U>
<P><I><FONT COLOR="#3366FF">Blue italic text is displayed there....</FONT></I>
<H1>
Note (1): as the wxWindows effort is voluntary, these are not hard-and-fast deadlines:
but we will endeavour to follow them as closely as possible.<P>
<HR ALIGN=LEFT SIZE=10 WIDTH="50%">This is heading one.</H1>
this is normal
<CENTER>
<H1>
This is <FONT COLOR="#33FF33">CENTERED</FONT> heading one</H1></CENTER>
<IMG SRC="pic.png" ALT="Testing image image" >and this is text......
<BR>&nbsp;
<UL>
<LI>
item 1</LI>
Note (2): the releases described are for wxGTK, wxMSW and wxMotif ports. wxMac currently follows
its own development path. Also, minor snapshot releases for specific platforms may be
available at dates convenient to the developers.<P>
<LI>
item 2</LI>
<HR> <FONT SIZE=+2><I><B><a name="schedule">Schedule</a></B></I></FONT> <HR>
<P>
<UL>
<LI>
nested item</LI>
<H4>Release 2.1.10</H4>
<LI>
nested item 2</LI>
</UL>
<ul>
<li>Release date: October 3rd, 1999
<li>This beta is intended to be the last stable snapshot before wxWindows
is split into base and GUI libraries.
<li>New wxGrid in beta.
</ul>
<LI>
item 3</LI>
</UL>
<P>
<OL>
<LI>
item one</LI>
<H2>Release 2.1.11 (final)</H2>
<LI>
item two</LI>
<ul>
<li>Release date: November 7th, 1999
<li>Splits wxWindows into base and GUI libraries. Most, but not all makefiles
are expected to support this: for the rest, the makefiles will build a valid
combined base/GUI library for GUI applications only.
<li>New wxGrid.
<li>wxSocket working.
<li>wxHTML printing (possibly).
<li>Animation classes (possibly).
<li>PCX writing capability (possibly).
<li>wxImage handlers in separate .h and .cpp files.
<li>Rewritten timer.cpp, possible wxChrono class.
<li>Bug tracking system in place.
</ul>
<OL>
<LI>
nsted item</LI>
</OL>
<P>
<LI>
last numbered item</LI>
</OL>
<H4>Release 2.1.12</H4>
<H1>
Heading 1</H1>
<I>Italic text now...</I>
<H2>
<I>Heading 2</I></H2>
<I>and now?</I>
<H3>
Heading 3</H3>
<ul>
<li>Release date: January 9th, 2000
<li>Miscellaneous fixes and small enhancements.
</ul>
<H4>
Heading 4</H4>
<P>
<H5>
Heading 5</H5>
<H4>Release 2.1.13</H4>
<H6>
Heading 6</H6>
And this is normal text, once again :-)
<P>And yes, we're in <FONT SIZE=+4>HTML DOCUMENT, </FONT><FONT SIZE=+1>so
what about some nice <A HREF="fft.html">hypertext link</A>??</FONT>
<P>hello?
<CENTER>
<P>This is&nbsp;<A NAME="downtown"></A>centered paragraph</CENTER>
<ul>
<li>Release date: March 5th, 2000
<li>Miscellaneous fixes and small enhancements.
<li>wxDateTime class in beta.
</ul>
<P>Now, you will see some PRE text:
<PRE>// This is sample C++ code:
<P>
<H4>Release 2.2.0</H4>
<ul>
<li>Release date: May 7th, 2000
<li>Unicode compilation starting to work in wxGTK and wxMSW.
</ul>
<P>
<H2>Release 2.2.x (final)</H2>
<ul>
<li>Release date: c. July 2nd, 2000
<li>Unicode compilation working in wxGTK and wxMSW.
<li>wxDateTime class.
</ul>
<P>
<H2>Release 2.3.x (final)</H2>
<ul>
<li>Release date: unknown
<li>WinCE port available.
</ul>
<P>
<HR> <FONT SIZE=+2><I><B><a name="todo">To-Do List</a></B></I></FONT> <HR>
<P>
Developers: please feel free to add to these, and delete them when they are done.
<P>
<B><I>General</I></B><P>
<ul>
<li>wxHTML printing. When finished, this will allow an application to generate
printed reports with very little effort.
<li>wxSocket.
<li>Split library into several, for base (classes and functions usable by console and GUI
applications), console (classes and functions usable by console application only)
and GUI (classes and functions usable by GUI application only).
<li>Extend and unify drag and drop handling (e.g. we need to specify multiple drop targets
that can handle multiple formats).
<li>Expand the number of controls that can be specified in a WXR file.
<li>Rewrite Dialog Editor.
<li>PCX writing code.
<li>GIF animation code.
<li>Tidying of timer code, addition of wxChrono class.
<li>wxDateTime class.
<li>MGL port (see Backroom/Future Ports page).
<li>Rotated text support.
<li>FreeType support.
<li>Support for 'skins', perhaps using a set of alternative control and window classes
written generically in wxWindows.
<li>Book, tutorial.
<li>More examples.
</ul>
<P>
<B><I>wxMSW</I></B><P>
<ul>
<li>Windows CE port.
<li>Cure bug whereby in a panel within another panel, all buttons become
default buttons (heavy black border).
<li>Write a RC->WXR converter.
</ul>
<P>
<B><I>wxGTK</I></B><P>
<ul>
<li>GNOME/KDE integration libraries.
</ul>
<P>
<B><I>wxMotif</I></B><P>
<ul>
<li>Allow wxSystemSettings to be configurable, perhaps via a control
panel application.
</ul>
void main(int argc, char *argv[])
{
&nbsp;&nbsp;&nbsp; printf("Go away, man!\n");
&nbsp;&nbsp;&nbsp; i = 666;
&nbsp;&nbsp;&nbsp; printf("\n\n\nCRASH\n&nbsp; DOWN NOW. . .&nbsp; \n");
}</PRE>
<H3>
WWW</H3>
<A HREF="http://www.kde.org">This is WWW link to KDE site!</A>
<BR><A HREF="http://www.ms.mff.cuni.cz/~vsla8348/wxhtml/index.html">(one
folder up)</A>
</BODY>
</HTML>

570
src/html/htmprint.cpp Normal file
View File

@ -0,0 +1,570 @@
/////////////////////////////////////////////////////////////////////////////
// Name: htmprint.cpp
// Purpose: html printing classes
// Author: Vaclav Slavik
// Created: 25/09/99
// RCS-ID: $Id$
// Copyright: (c) Vaclav Slavik, 1999
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
#pragma implementation
#endif
// For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif
#if wxUSE_PRINTING_ARCHITECTURE
#include "wx/print.h"
#include "wx/printdlg.h"
#include "wx/html/htmprint.h"
#include "wx/wxhtml.h"
#include "wx/wfstream.h"
//--------------------------------------------------------------------------------
// wxHtmlDCRenderer
//--------------------------------------------------------------------------------
wxHtmlDCRenderer::wxHtmlDCRenderer() : wxObject()
{
m_DC = NULL;
m_Width = m_Height = 0;
m_Cells = NULL;
m_Parser = new wxHtmlWinParser(NULL);
m_FS = new wxFileSystem();
m_Parser -> SetFS(m_FS);
m_Scale = 1.0;
}
wxHtmlDCRenderer::~wxHtmlDCRenderer()
{
if (m_Cells) delete m_Cells;
if (m_Parser) delete m_Parser;
if (m_FS) delete m_FS;
}
void wxHtmlDCRenderer::SetDC(wxDC *dc, int maxwidth)
{
int dx, dy;
wxDisplaySize(&dx, &dy);
m_MaxWidth = maxwidth;
#if 0
m_Scale = (float)dx * 2 / 3 / (float)maxwidth;
// let the width of A4 is approximately 2/3 the screen width
#endif
m_Scale = (float)800 / (float)maxwidth;
// for now, assume screen width = 800 => good results
m_DC = dc;
m_Parser -> SetDC(dc);
}
void wxHtmlDCRenderer::SetSize(int width, int height)
{
m_Width = (int)(width * m_Scale);
m_Height = (int)(height * m_Scale);
}
void wxHtmlDCRenderer::SetHtmlText(const wxString& html, const wxString& basepath, bool isdir)
{
if (m_DC == NULL) return;
if (m_Cells != NULL) delete m_Cells;
m_FS -> ChangePathTo(basepath, isdir);
m_DC -> SetUserScale(1.0, 1.0);
m_Cells = (wxHtmlContainerCell*) m_Parser -> Parse(html);
m_Cells -> SetIndent(0, HTML_INDENT_ALL, HTML_UNITS_PIXELS);
m_Cells -> Layout(m_Width);
}
int wxHtmlDCRenderer::Render(int x, int y, int from, int dont_render)
{
int pbreak;
if (m_Cells == NULL || m_DC == NULL) return 0;
pbreak = (int)(from * m_Scale + m_Height);
while (m_Cells -> AdjustPagebreak(&pbreak)) {}
if (!dont_render) {
int w, h;
m_DC -> GetSize(&w, &h);
float overallScale = (float)(w/(float)m_MaxWidth) / m_Scale;
m_DC -> SetUserScale(overallScale, overallScale);
m_DC -> SetBrush(*wxWHITE_BRUSH);
m_DC -> SetClippingRegion(x * m_Scale, y * m_Scale, m_Width, m_Height);
m_Cells -> Draw(*m_DC,
x * m_Scale, (y - from) * m_Scale,
y * m_Scale, pbreak + (y - from) * m_Scale);
m_DC -> DestroyClippingRegion();
}
if (pbreak < m_Cells -> GetHeight()) return (int)(pbreak / m_Scale);
else return GetTotalHeight();
}
int wxHtmlDCRenderer::GetTotalHeight()
{
if (m_Cells) return (int)(m_Cells -> GetHeight() / m_Scale);
else return 0;
}
//--------------------------------------------------------------------------------
// wxHtmlPrintout
//--------------------------------------------------------------------------------
wxHtmlPrintout::wxHtmlPrintout(const wxString& title) : wxPrintout(title)
{
m_Renderer = new wxHtmlDCRenderer;
m_RendererHdr = new wxHtmlDCRenderer;
m_NumPages = HTML_PRINT_MAX_PAGES;
m_Document = m_BasePath = wxEmptyString; m_BasePathIsDir = TRUE;
m_Headers[0] = m_Headers[1] = wxEmptyString;
m_Footers[0] = m_Footers[1] = wxEmptyString;
m_HeaderHeight = m_FooterHeight = 0;
SetMargins(); // to default values
}
wxHtmlPrintout::~wxHtmlPrintout()
{
delete m_Renderer;
delete m_RendererHdr;
}
bool wxHtmlPrintout::OnBeginDocument(int start, int end)
{
int pageWidth, pageHeight, mm_w, mm_h;
float ppmm_h, ppmm_v;
if (!wxPrintout::OnBeginDocument(start, end)) return FALSE;
GetPageSizePixels(&pageWidth, &pageHeight);
GetPageSizeMM(&mm_w, &mm_h);
ppmm_h = (float)pageWidth / mm_w;
ppmm_v = (float)pageHeight / mm_h;
/* prepare headers/footers renderer: */
m_RendererHdr -> SetDC(GetDC(), pageWidth);
m_RendererHdr -> SetSize(ppmm_h * (mm_w - m_MarginLeft - m_MarginTop),
ppmm_v * (mm_h - m_MarginTop - m_MarginBottom));
if (m_Headers[0] != wxEmptyString) {
m_RendererHdr -> SetHtmlText(TranslateHeader(m_Headers[0], 1));
m_HeaderHeight = m_RendererHdr -> GetTotalHeight();
}
else if (m_Headers[1] != wxEmptyString) {
m_RendererHdr -> SetHtmlText(TranslateHeader(m_Headers[1], 1));
m_HeaderHeight = m_RendererHdr -> GetTotalHeight();
}
if (m_Footers[0] != wxEmptyString) {
m_RendererHdr -> SetHtmlText(TranslateHeader(m_Footers[0], 1));
m_FooterHeight = m_RendererHdr -> GetTotalHeight();
}
else if (m_Footers[1] != wxEmptyString) {
m_RendererHdr -> SetHtmlText(TranslateHeader(m_Footers[1], 1));
m_FooterHeight = m_RendererHdr -> GetTotalHeight();
}
/* prepare main renderer: */
m_Renderer -> SetDC(GetDC(), pageWidth);
m_Renderer -> SetSize(ppmm_h * (mm_w - m_MarginLeft - m_MarginTop),
ppmm_v * (mm_h - m_MarginTop - m_MarginBottom) -
m_FooterHeight - m_HeaderHeight -
((m_HeaderHeight == 0) ? 0 : m_MarginSpace * ppmm_v) -
((m_FooterHeight == 0) ? 0 : m_MarginSpace * ppmm_v)
);
m_Renderer -> SetHtmlText(m_Document, m_BasePath, m_BasePathIsDir);
CountPages();
return TRUE;
}
bool wxHtmlPrintout::OnPrintPage(int page)
{
wxDC *dc = GetDC();
if (dc) {
if (HasPage(page))
RenderPage(dc, page);
return TRUE;
} else
return FALSE;
}
void wxHtmlPrintout::GetPageInfo(int *minPage, int *maxPage, int *selPageFrom, int *selPageTo)
{
*minPage = 1;
*maxPage = HTML_PRINT_MAX_PAGES;
*selPageFrom = 1;
*selPageTo = 1;
}
bool wxHtmlPrintout::HasPage(int pageNum)
{
return (pageNum >= 1 && pageNum <= m_NumPages);
}
void wxHtmlPrintout::SetHtmlText(const wxString& html, const wxString &basepath, bool isdir)
{
m_Document = html;
m_BasePath = basepath;
m_BasePathIsDir = isdir;
}
void wxHtmlPrintout::SetHtmlFile(const wxString& htmlfile)
{
wxFileSystem fs;
wxFSFile *ff = fs.OpenFile(htmlfile);
wxInputStream *st = ff -> GetStream();
char *t = new char[st -> GetSize() + 1];
st -> Read(t, st -> GetSize());
t[st -> GetSize()] = 0;
wxString doc = wxString(t);
delete t;
delete ff;
SetHtmlText(doc, htmlfile, FALSE);
}
void wxHtmlPrintout::SetHeader(const wxString& header, int pg)
{
if (pg == wxPAGE_ALL || pg == wxPAGE_EVEN)
m_Headers[0] = header;
if (pg == wxPAGE_ALL || pg == wxPAGE_ODD)
m_Headers[1] = header;
}
void wxHtmlPrintout::SetFooter(const wxString& footer, int pg)
{
if (pg == wxPAGE_ALL || pg == wxPAGE_EVEN)
m_Footers[0] = footer;
if (pg == wxPAGE_ALL || pg == wxPAGE_ODD)
m_Footers[1] = footer;
}
void wxHtmlPrintout::CountPages()
{
wxBusyCursor wait;
int pageWidth, pageHeight, mm_w, mm_h;
float ppmm_h, ppmm_v;
GetPageSizePixels(&pageWidth, &pageHeight);
GetPageSizeMM(&mm_w, &mm_h);
ppmm_h = (float)pageWidth / mm_w;
ppmm_v = (float)pageHeight / mm_h;
int pos = 0;
m_NumPages = 0;
m_PageBreaks[0] = 0;
do {
pos = m_Renderer -> Render(ppmm_h * m_MarginLeft,
ppmm_v * (m_MarginTop + (m_HeaderHeight == 0 ? 0 : m_MarginSpace)) + m_HeaderHeight,
pos, TRUE);
m_PageBreaks[++m_NumPages] = pos;
} while (pos < m_Renderer -> GetTotalHeight());
}
void wxHtmlPrintout::RenderPage(wxDC *dc, int page)
{
wxBusyCursor wait;
int pageWidth, pageHeight, mm_w, mm_h;
float ppmm_h, ppmm_v;
GetPageSizePixels(&pageWidth, &pageHeight);
GetPageSizeMM(&mm_w, &mm_h);
ppmm_h = (float)pageWidth / mm_w;
ppmm_v = (float)pageHeight / mm_h;
m_Renderer -> SetDC(dc, pageWidth);
dc -> SetBackgroundMode(wxTRANSPARENT);
m_Renderer -> Render(ppmm_h * m_MarginLeft,
ppmm_v * (m_MarginTop + (m_HeaderHeight == 0 ? 0 : m_MarginSpace)) + m_HeaderHeight,
m_PageBreaks[page-1]);
m_RendererHdr -> SetDC(dc, pageWidth);
if (m_Headers[page % 2] != wxEmptyString) {
m_RendererHdr -> SetHtmlText(TranslateHeader(m_Headers[page % 2], page));
m_RendererHdr -> Render(ppmm_h * m_MarginLeft, ppmm_v * m_MarginTop);
}
if (m_Footers[page % 2] != wxEmptyString) {
m_RendererHdr -> SetHtmlText(TranslateHeader(m_Footers[page % 2], page));
m_RendererHdr -> Render(ppmm_h * m_MarginLeft, pageHeight - ppmm_v * m_MarginBottom - m_FooterHeight);
}
}
wxString wxHtmlPrintout::TranslateHeader(const wxString& instr, int page)
{
wxString r = instr;
wxString num;
num.Printf("%i", page);
r.Replace("@PAGENUM@", num);
num.Printf("%i", m_NumPages);
r.Replace("@PAGESCNT@", num);
return r;
}
void wxHtmlPrintout::SetMargins(float top, float bottom, float left, float right, float spaces)
{
m_MarginTop = top;
m_MarginBottom = bottom;
m_MarginLeft = left;
m_MarginRight = right;
m_MarginSpace = spaces;
}
//--------------------------------------------------------------------------------
// wxHtmlEasyPrinting
//--------------------------------------------------------------------------------
wxHtmlEasyPrinting::wxHtmlEasyPrinting(const wxString& name, wxFrame *parent_frame)
{
m_Frame = parent_frame;
m_Name = name;
m_PrintData = new wxPrintData;
m_PageSetupData = new wxPageSetupDialogData;
m_Headers[0] = m_Headers[1] = m_Footers[0] = m_Footers[1] = wxEmptyString;
m_PageSetupData -> EnableMargins(TRUE);
m_PageSetupData -> SetMarginTopLeft(wxPoint(25, 25));
m_PageSetupData -> SetMarginBottomRight(wxPoint(25, 25));
#if defined(__WXGTK__) || defined(__WXMOTIF__)
m_PrintData -> SetPrinterCommand("lpr");
#endif
}
wxHtmlEasyPrinting::~wxHtmlEasyPrinting()
{
delete m_PrintData;
delete m_PageSetupData;
}
void wxHtmlEasyPrinting::PreviewFile(const wxString &htmlfile)
{
wxHtmlPrintout *p1 = CreatePrintout();
p1 -> SetHtmlFile(htmlfile);
wxHtmlPrintout *p2 = CreatePrintout();
p2 -> SetHtmlFile(htmlfile);
DoPreview(p1, p2);
}
void wxHtmlEasyPrinting::PreviewText(const wxString &htmltext, const wxString &basepath)
{
wxHtmlPrintout *p1 = CreatePrintout();
p1 -> SetHtmlText(htmltext, basepath, TRUE);
wxHtmlPrintout *p2 = CreatePrintout();
p2 -> SetHtmlText(htmltext, basepath, TRUE);
DoPreview(p1, p2);
}
void wxHtmlEasyPrinting::PrintFile(const wxString &htmlfile)
{
wxHtmlPrintout *p = CreatePrintout();
p -> SetHtmlFile(htmlfile);
DoPrint(p);
}
void wxHtmlEasyPrinting::PrintText(const wxString &htmltext, const wxString &basepath)
{
wxHtmlPrintout *p = CreatePrintout();
p -> SetHtmlText(htmltext, basepath, TRUE);
DoPrint(p);
}
void wxHtmlEasyPrinting::DoPreview(wxHtmlPrintout *printout1, wxHtmlPrintout *printout2)
{
// Pass two printout objects: for preview, and possible printing.
wxPrintDialogData printDialogData(*m_PrintData);
wxPrintPreview *preview = new wxPrintPreview(printout1, printout2, &printDialogData);
if (!preview -> Ok()) {
delete preview;
wxMessageBox(_("There was a problem previewing.\nPerhaps your current printer is not set correctly?"), _("Previewing"), wxOK);
}
else {
wxPreviewFrame *frame = new wxPreviewFrame(preview, m_Frame,
m_Name + _(" Preview"),
wxPoint(100, 100), wxSize(500, 500));
frame -> Centre(wxBOTH);
frame -> Initialize();
frame -> Show(TRUE);
}
}
void wxHtmlEasyPrinting::DoPrint(wxHtmlPrintout *printout)
{
wxPrintDialogData printDialogData(*m_PrintData);
wxPrinter printer(&printDialogData);
if (!printer.Print(m_Frame, printout, TRUE))
wxMessageBox(_("There was a problem printing.\nPerhaps your current printer is not set correctly?"), _("Printing"), wxOK);
else
(*m_PrintData) = printer.GetPrintDialogData().GetPrintData();
}
void wxHtmlEasyPrinting::PrinterSetup()
{
wxPrintDialogData printDialogData(*m_PrintData);
wxPrintDialog printerDialog(m_Frame, &printDialogData);
printerDialog.GetPrintDialogData().SetSetupDialog(TRUE);
if (printerDialog.ShowModal() == wxID_OK)
(*m_PrintData) = printerDialog.GetPrintDialogData().GetPrintData();
}
void wxHtmlEasyPrinting::PageSetup()
{
m_PageSetupData -> SetPrintData(*m_PrintData);
wxPageSetupDialog pageSetupDialog(m_Frame, m_PageSetupData);
if (pageSetupDialog.ShowModal() == wxID_OK) {
(*m_PrintData) = pageSetupDialog.GetPageSetupData().GetPrintData();
(*m_PageSetupData) = pageSetupDialog.GetPageSetupData();
}
}
void wxHtmlEasyPrinting::SetHeader(const wxString& header, int pg)
{
if (pg == wxPAGE_ALL || pg == wxPAGE_EVEN)
m_Headers[0] = header;
if (pg == wxPAGE_ALL || pg == wxPAGE_ODD)
m_Headers[1] = header;
}
void wxHtmlEasyPrinting::SetFooter(const wxString& footer, int pg)
{
if (pg == wxPAGE_ALL || pg == wxPAGE_EVEN)
m_Footers[0] = footer;
if (pg == wxPAGE_ALL || pg == wxPAGE_ODD)
m_Footers[1] = footer;
}
wxHtmlPrintout *wxHtmlEasyPrinting::CreatePrintout()
{
wxHtmlPrintout *p = new wxHtmlPrintout(m_Name);
p -> SetHeader(m_Headers[0], wxPAGE_EVEN);
p -> SetHeader(m_Headers[1], wxPAGE_ODD);
p -> SetFooter(m_Footers[0], wxPAGE_EVEN);
p -> SetFooter(m_Footers[1], wxPAGE_ODD);
p -> SetMargins(m_PageSetupData -> GetMarginTopLeft().y,
m_PageSetupData -> GetMarginBottomRight().y,
m_PageSetupData -> GetMarginTopLeft().x,
m_PageSetupData -> GetMarginBottomRight().x);
return p;
}
#endif // wxUSE_PRINTING_ARCHITECTURE

View File

@ -1,6 +1,6 @@
# This file was automatically generated by tmake at 14:54, 1999/10/14
# This file was automatically generated by tmake at 22:30, 1999/10/16
# DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE B32.T!
#

View File

@ -1,6 +1,6 @@
# This file was automatically generated by tmake at 14:54, 1999/10/14
# This file was automatically generated by tmake at 22:30, 1999/10/16
# DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE BCC.T!
#

View File

@ -1,6 +1,6 @@
# This file was automatically generated by tmake at 14:54, 1999/10/14
# This file was automatically generated by tmake at 22:30, 1999/10/16
# DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE DOS.T!
#

View File

@ -1,5 +1,5 @@
# This file was automatically generated by tmake at 14:54, 1999/10/14
# This file was automatically generated by tmake at 22:30, 1999/10/16
# DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE G95.T!
#
@ -156,6 +156,7 @@ HTMLOBJS = \
$(HTMLDIR)/htmlpars.$(OBJSUFF) \
$(HTMLDIR)/htmltag.$(OBJSUFF) \
$(HTMLDIR)/htmlwin.$(OBJSUFF) \
$(HTMLDIR)/htmprint.$(OBJSUFF) \
$(HTMLDIR)/m_fonts.$(OBJSUFF) \
$(HTMLDIR)/m_hline.$(OBJSUFF) \
$(HTMLDIR)/m_image.$(OBJSUFF) \

View File

@ -1,6 +1,6 @@
# This file was automatically generated by tmake at 14:54, 1999/10/14
# This file was automatically generated by tmake at 22:30, 1999/10/16
# DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE SC.T!
# Symantec C++ makefile for the msw objects

View File

@ -1,4 +1,4 @@
# This file was automatically generated by tmake at 14:54, 1999/10/14
# This file was automatically generated by tmake at 22:30, 1999/10/16
# DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE VC.T!
# File: makefile.vc
@ -314,6 +314,7 @@ HTMLOBJS = ..\html\$D\helpctrl.obj \
..\html\$D\htmlpars.obj \
..\html\$D\htmltag.obj \
..\html\$D\htmlwin.obj \
..\html\$D\htmprint.obj \
..\html\$D\m_fonts.obj \
..\html\$D\m_hline.obj \
..\html\$D\m_image.obj \

View File

@ -1,6 +1,6 @@
# This file was automatically generated by tmake at 14:54, 1999/10/14
# This file was automatically generated by tmake at 22:30, 1999/10/16
# DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE WAT.T!
#!/binb/wmake.exe

View File

@ -563,6 +563,10 @@ SOURCE=.\html\htmlwin.cpp
# End Source File
# Begin Source File
SOURCE=.\html\htmprint.cpp
# End Source File
# Begin Source File
SOURCE=.\html\m_fonts.cpp
# End Source File
# Begin Source File

View File

@ -578,6 +578,10 @@ SOURCE=.\html\htmlwin.cpp
# End Source File
# Begin Source File
SOURCE=.\html\htmprint.cpp
# End Source File
# Begin Source File
SOURCE=.\html\m_fonts.cpp
# End Source File
# Begin Source File

View File

@ -571,6 +571,10 @@ SOURCE=.\html\htmlwin.cpp
# End Source File
# Begin Source File
SOURCE=.\html\htmprint.cpp
# End Source File
# Begin Source File
SOURCE=.\html\winpars.cpp
# End Source File
# Begin Source File