mirror of
https://github.com/wxWidgets/wxWidgets.git
synced 2026-08-17 17:02:51 +08:00
This trivial function just performs the cast of size() of some container to int. Using it makes it possible to write the code using int indices without (or with fewer) casts. It doesn't check that the cast doesn't truncate currently, although perhaps it should -- but then it seems very unlikely that any of the containers we work with in wx can ever get close to INT_MAX size.
382 lines
14 KiB
C++
382 lines
14 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: wx/cmndata.h
|
|
// Purpose: Common GDI data classes
|
|
// Author: Julian Smart and others
|
|
// Created: 01/02/97
|
|
// Copyright: (c)
|
|
// Licence: wxWindows licence
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef _WX_CMNDATA_H_BASE_
|
|
#define _WX_CMNDATA_H_BASE_
|
|
|
|
#include "wx/defs.h"
|
|
|
|
#if wxUSE_PRINTING_ARCHITECTURE
|
|
|
|
#include "wx/gdicmn.h"
|
|
|
|
#if wxUSE_STREAMS
|
|
#include "wx/stream.h"
|
|
#endif
|
|
|
|
#include <vector>
|
|
|
|
class WXDLLIMPEXP_FWD_CORE wxPrintNativeDataBase;
|
|
|
|
/*
|
|
* wxPrintData
|
|
* Encapsulates printer information (not printer dialog information)
|
|
*/
|
|
|
|
enum wxPrintBin
|
|
{
|
|
wxPRINTBIN_DEFAULT,
|
|
|
|
wxPRINTBIN_ONLYONE,
|
|
wxPRINTBIN_LOWER,
|
|
wxPRINTBIN_MIDDLE,
|
|
wxPRINTBIN_MANUAL,
|
|
wxPRINTBIN_ENVELOPE,
|
|
wxPRINTBIN_ENVMANUAL,
|
|
wxPRINTBIN_AUTO,
|
|
wxPRINTBIN_TRACTOR,
|
|
wxPRINTBIN_SMALLFMT,
|
|
wxPRINTBIN_LARGEFMT,
|
|
wxPRINTBIN_LARGECAPACITY,
|
|
wxPRINTBIN_CASSETTE,
|
|
wxPRINTBIN_FORMSOURCE,
|
|
|
|
wxPRINTBIN_USER
|
|
};
|
|
|
|
const int wxPRINTMEDIA_DEFAULT = 0;
|
|
|
|
class WXDLLIMPEXP_CORE wxPrintData: public wxObject
|
|
{
|
|
public:
|
|
wxPrintData();
|
|
wxPrintData(const wxPrintData& printData);
|
|
virtual ~wxPrintData();
|
|
|
|
int GetNoCopies() const { return m_printNoCopies; }
|
|
bool GetCollate() const { return m_printCollate; }
|
|
wxPrintOrientation GetOrientation() const { return m_printOrientation; }
|
|
bool IsOrientationReversed() const { return m_printOrientationReversed; }
|
|
|
|
// Is this data OK for showing the print dialog?
|
|
bool Ok() const { return IsOk(); }
|
|
bool IsOk() const ;
|
|
|
|
const wxString& GetPrinterName() const { return m_printerName; }
|
|
bool GetColour() const { return m_colour; }
|
|
wxDuplexMode GetDuplex() const { return m_duplexMode; }
|
|
wxPaperSize GetPaperId() const { return m_paperId; }
|
|
const wxSize& GetPaperSize() const { return m_paperSize; }
|
|
wxPrintQuality GetQuality() const { return m_printQuality; }
|
|
wxPrintBin GetBin() const { return m_bin; }
|
|
wxPrintMode GetPrintMode() const { return m_printMode; }
|
|
int GetMedia() const { return m_media; }
|
|
|
|
void SetNoCopies(int v) { m_printNoCopies = v; }
|
|
void SetCollate(bool flag) { m_printCollate = flag; }
|
|
|
|
// Please use the overloaded method below
|
|
wxDEPRECATED_INLINE(void SetOrientation(int orient),
|
|
m_printOrientation = (wxPrintOrientation)orient; )
|
|
void SetOrientation(wxPrintOrientation orient) { m_printOrientation = orient; }
|
|
void SetOrientationReversed(bool reversed) { m_printOrientationReversed = reversed; }
|
|
|
|
void SetPrinterName(const wxString& name) { m_printerName = name; }
|
|
void SetColour(bool colour) { m_colour = colour; }
|
|
void SetDuplex(wxDuplexMode duplex) { m_duplexMode = duplex; }
|
|
void SetPaperId(wxPaperSize sizeId) { m_paperId = sizeId; }
|
|
void SetPaperSize(const wxSize& sz) { m_paperSize = sz; }
|
|
void SetQuality(wxPrintQuality quality) { m_printQuality = quality; }
|
|
void SetBin(wxPrintBin bin) { m_bin = bin; }
|
|
void SetMedia(int media) { m_media = media; }
|
|
void SetPrintMode(wxPrintMode printMode) { m_printMode = printMode; }
|
|
|
|
wxString GetFilename() const { return m_filename; }
|
|
void SetFilename( const wxString &filename ) { m_filename = filename; }
|
|
|
|
wxPrintData& operator=(const wxPrintData& data);
|
|
|
|
char* GetPrivData() { return m_privData.empty() ? nullptr : &m_privData[0]; }
|
|
const char* GetPrivData() const { return m_privData.empty() ? nullptr : &m_privData[0]; }
|
|
int GetPrivDataLen() const { return wxSsize(m_privData); }
|
|
void SetPrivData( char *privData, int len );
|
|
|
|
|
|
// Convert between wxPrintData and native data
|
|
void ConvertToNative();
|
|
void ConvertFromNative();
|
|
// Holds the native print data
|
|
wxPrintNativeDataBase *GetNativeData() const { return m_nativeData.get(); }
|
|
|
|
private:
|
|
wxPrintBin m_bin = wxPRINTBIN_DEFAULT;
|
|
int m_media = wxPRINTMEDIA_DEFAULT;
|
|
wxPrintMode m_printMode = wxPRINT_MODE_PRINTER;
|
|
|
|
int m_printNoCopies = 1;
|
|
wxPrintOrientation m_printOrientation = wxPORTRAIT;
|
|
bool m_printOrientationReversed = false;
|
|
bool m_printCollate = false;
|
|
|
|
wxString m_printerName;
|
|
bool m_colour = true;
|
|
wxDuplexMode m_duplexMode = wxDUPLEX_SIMPLEX;
|
|
wxPrintQuality m_printQuality = wxPRINT_QUALITY_HIGH;
|
|
|
|
// we intentionally don't initialize paper id and size at all, like this
|
|
// the default system settings will be used for them
|
|
wxPaperSize m_paperId = wxPAPER_NONE;
|
|
wxSize m_paperSize = wxDefaultSize;
|
|
|
|
wxString m_filename;
|
|
|
|
std::vector<char> m_privData;
|
|
|
|
wxObjectDataPtr<wxPrintNativeDataBase> m_nativeData;
|
|
|
|
private:
|
|
wxDECLARE_DYNAMIC_CLASS(wxPrintData);
|
|
};
|
|
|
|
/*
|
|
* wxPrintPageRange
|
|
* Defines a range of pages to be printed.
|
|
*/
|
|
|
|
class wxPrintPageRange
|
|
{
|
|
public:
|
|
wxPrintPageRange() = default;
|
|
wxPrintPageRange(int from, int to) : fromPage(from), toPage(to)
|
|
{
|
|
wxASSERT_MSG( IsValid(), "Invalid page range values" );
|
|
}
|
|
|
|
// check if both components are set/initialized correctly
|
|
bool IsValid() const { return fromPage > 0 && fromPage <= toPage; }
|
|
|
|
// get the number of pages in the range
|
|
int GetNumberOfPages() const { return toPage - fromPage + 1; }
|
|
|
|
int fromPage = 0;
|
|
int toPage = 0;
|
|
};
|
|
|
|
using wxPrintPageRanges = std::vector<wxPrintPageRange>;
|
|
|
|
/*
|
|
* wxPrintDialogData
|
|
* Encapsulates information displayed and edited in the printer dialog box.
|
|
* Contains a wxPrintData object which is filled in according to the values retrieved
|
|
* from the dialog.
|
|
*/
|
|
|
|
class WXDLLIMPEXP_CORE wxPrintDialogData: public wxObject
|
|
{
|
|
public:
|
|
wxPrintDialogData();
|
|
wxPrintDialogData(const wxPrintDialogData& dialogData) = default;
|
|
wxPrintDialogData(const wxPrintData& printData);
|
|
virtual ~wxPrintDialogData();
|
|
|
|
// These functions can be used only when printing all pages or a single
|
|
// continuous range of pages, use GetPageRanges() to support multiple
|
|
// ranges.
|
|
int GetFromPage() const;
|
|
int GetToPage() const;
|
|
|
|
int GetMinPage() const { return m_printMinPage; }
|
|
int GetMaxPage() const { return m_printMaxPage; }
|
|
int GetNoCopies() const { return m_printNoCopies; }
|
|
bool GetAllPages() const { return m_printWhat == Print::AllPages; }
|
|
bool GetSelection() const { return m_printWhat == Print::Selection; }
|
|
bool GetCurrentPage() const { return m_printWhat == Print::CurrentPage; }
|
|
bool GetSpecifiedPages() const { return m_printWhat == Print::SpecifiedPages; }
|
|
bool GetCollate() const { return m_printCollate; }
|
|
bool GetPrintToFile() const { return m_printToFile; }
|
|
|
|
// Similarly to the getters above, these functions can be used only to
|
|
// define a single continuous range of pages to print, use SetPageRanges()
|
|
// for anything else. Note that if you do use SetPageRanges() to specify
|
|
// multiple ranges, then these functions cannot be used.
|
|
void SetFromPage(int v);
|
|
void SetToPage(int v);
|
|
|
|
void SetMinPage(int v) { m_printMinPage = v; }
|
|
void SetMaxPage(int v) { m_printMaxPage = v; }
|
|
void SetNoCopies(int v) { m_printNoCopies = v; }
|
|
|
|
// Avoid calling these functions with flag == false as it's not really
|
|
// obvious what they do in this case.
|
|
void SetAllPages(bool flag = true) { DoSetWhat(Print::AllPages, flag); }
|
|
void SetSelection(bool flag = true) { DoSetWhat(Print::Selection, flag); }
|
|
void SetCurrentPage(bool flag = true) { DoSetWhat(Print::CurrentPage, flag); }
|
|
|
|
void SetCollate(bool flag) { m_printCollate = flag; }
|
|
void SetPrintToFile(bool flag) { m_printToFile = flag; }
|
|
|
|
void EnablePrintToFile(bool flag) { m_printEnablePrintToFile = flag; }
|
|
void EnableSelection(bool flag) { m_printEnableSelection = flag; }
|
|
void EnableCurrentPage(bool flag) { m_printEnableCurrentPage = flag; }
|
|
void EnablePageNumbers(bool flag) { m_printEnablePageNumbers = flag; }
|
|
void EnableHelp(bool flag) { m_printEnableHelp = flag; }
|
|
|
|
bool GetEnablePrintToFile() const { return m_printEnablePrintToFile; }
|
|
bool GetEnableSelection() const { return m_printEnableSelection; }
|
|
bool GetEnableCurrentPage() const { return m_printEnableCurrentPage; }
|
|
bool GetEnablePageNumbers() const { return m_printEnablePageNumbers; }
|
|
bool GetEnableHelp() const { return m_printEnableHelp; }
|
|
|
|
// Is this data OK for showing the print dialog?
|
|
bool Ok() const { return IsOk(); }
|
|
bool IsOk() const { return m_printData.IsOk() ; }
|
|
|
|
wxPrintData& GetPrintData() { return m_printData; }
|
|
void SetPrintData(const wxPrintData& printData) { m_printData = printData; }
|
|
|
|
void SetPageRanges(const wxPrintPageRanges& pageRanges) { m_printPageRanges = pageRanges; }
|
|
const wxPrintPageRanges& GetPageRanges() const { return m_printPageRanges; }
|
|
|
|
void SetMaxPageRanges(int maxPageRanges) { m_maxPageRanges = maxPageRanges; }
|
|
int GetMaxPageRanges() const { return m_maxPageRanges; }
|
|
|
|
wxPrintDialogData& operator=(const wxPrintDialogData& data) = default;
|
|
void operator=(const wxPrintData& data); // Sets internal m_printData member
|
|
|
|
private:
|
|
enum class Print
|
|
{
|
|
SpecifiedPages, // Default used if none of the other flags are selected.
|
|
AllPages,
|
|
Selection,
|
|
CurrentPage
|
|
};
|
|
|
|
void DoSetWhat(Print what, bool flag);
|
|
|
|
Print m_printWhat = Print::AllPages;
|
|
|
|
int m_printMinPage = 0;
|
|
int m_printMaxPage = 0;
|
|
int m_printNoCopies = 1;
|
|
|
|
bool m_printCollate = false;
|
|
bool m_printToFile = false;
|
|
bool m_printEnableSelection = false;
|
|
bool m_printEnableCurrentPage = false;
|
|
bool m_printEnablePageNumbers = true;
|
|
bool m_printEnableHelp = false;
|
|
bool m_printEnablePrintToFile = true;
|
|
wxPrintData m_printData;
|
|
|
|
// Maximum number of page ranges that the user can specify via the print dialog.
|
|
int m_maxPageRanges = 64;
|
|
|
|
// The page ranges to print. If this vector contains more then m_maxPageRanges
|
|
// elements, then the maximum number of page ranges that the user can specify
|
|
// via the print dialog is the size of this vector.
|
|
wxPrintPageRanges m_printPageRanges;
|
|
|
|
private:
|
|
wxDECLARE_DYNAMIC_CLASS(wxPrintDialogData);
|
|
};
|
|
|
|
/*
|
|
* This is the data used (and returned) by the wxPageSetupDialog.
|
|
*/
|
|
|
|
// Compatibility with old name
|
|
#define wxPageSetupData wxPageSetupDialogData
|
|
|
|
class WXDLLIMPEXP_CORE wxPageSetupDialogData: public wxObject
|
|
{
|
|
public:
|
|
wxPageSetupDialogData();
|
|
wxPageSetupDialogData(const wxPageSetupDialogData& dialogData) = default;
|
|
wxPageSetupDialogData(const wxPrintData& printData);
|
|
|
|
wxSize GetPaperSize() const { return m_paperSize; }
|
|
wxPaperSize GetPaperId() const { return m_printData.GetPaperId(); }
|
|
wxPoint GetMinMarginTopLeft() const { return m_minMarginTopLeft; }
|
|
wxPoint GetMinMarginBottomRight() const { return m_minMarginBottomRight; }
|
|
wxPoint GetMarginTopLeft() const { return m_marginTopLeft; }
|
|
wxPoint GetMarginBottomRight() const { return m_marginBottomRight; }
|
|
|
|
bool GetDefaultMinMargins() const { return m_defaultMinMargins; }
|
|
bool GetEnableMargins() const { return m_enableMargins; }
|
|
bool GetEnableOrientation() const { return m_enableOrientation; }
|
|
bool GetEnablePaper() const { return m_enablePaper; }
|
|
bool GetEnablePrinter() const { return m_enablePrinter; }
|
|
bool GetDefaultInfo() const { return m_getDefaultInfo; }
|
|
bool GetEnableHelp() const { return m_enableHelp; }
|
|
|
|
// Is this data OK for showing the page setup dialog?
|
|
bool Ok() const { return IsOk(); }
|
|
bool IsOk() const { return m_printData.IsOk() ; }
|
|
|
|
// If a corresponding paper type is found in the paper database, will set the m_printData
|
|
// paper size id member as well.
|
|
void SetPaperSize(const wxSize& sz);
|
|
|
|
void SetPaperId(wxPaperSize id) { m_printData.SetPaperId(id); }
|
|
|
|
// Sets the wxPrintData id, plus the paper width/height if found in the paper database.
|
|
void SetPaperSize(wxPaperSize id);
|
|
|
|
void SetMinMarginTopLeft(const wxPoint& pt) { m_minMarginTopLeft = pt; }
|
|
void SetMinMarginBottomRight(const wxPoint& pt) { m_minMarginBottomRight = pt; }
|
|
void SetMarginTopLeft(const wxPoint& pt) { m_marginTopLeft = pt; }
|
|
void SetMarginBottomRight(const wxPoint& pt) { m_marginBottomRight = pt; }
|
|
void SetDefaultMinMargins(bool flag) { m_defaultMinMargins = flag; }
|
|
void SetDefaultInfo(bool flag) { m_getDefaultInfo = flag; }
|
|
|
|
void EnableMargins(bool flag) { m_enableMargins = flag; }
|
|
void EnableOrientation(bool flag) { m_enableOrientation = flag; }
|
|
void EnablePaper(bool flag) { m_enablePaper = flag; }
|
|
void EnablePrinter(bool flag) { m_enablePrinter = flag; }
|
|
void EnableHelp(bool flag) { m_enableHelp = flag; }
|
|
|
|
// Use paper size defined in this object to set the wxPrintData
|
|
// paper id
|
|
void CalculateIdFromPaperSize();
|
|
|
|
// Use paper id in wxPrintData to set this object's paper size
|
|
void CalculatePaperSizeFromId();
|
|
|
|
wxPageSetupDialogData& operator=(const wxPageSetupDialogData& data) = default;
|
|
wxPageSetupDialogData& operator=(const wxPrintData& data);
|
|
|
|
wxPrintData& GetPrintData() { return m_printData; }
|
|
const wxPrintData& GetPrintData() const { return m_printData; }
|
|
void SetPrintData(const wxPrintData& printData);
|
|
|
|
private:
|
|
wxSize m_paperSize; // The dimensions selected by the user (on return, same as in wxPrintData?)
|
|
wxPoint m_minMarginTopLeft;
|
|
wxPoint m_minMarginBottomRight;
|
|
wxPoint m_marginTopLeft;
|
|
wxPoint m_marginBottomRight;
|
|
bool m_defaultMinMargins = false;
|
|
bool m_enableMargins = true;
|
|
bool m_enableOrientation = true;
|
|
bool m_enablePaper = true;
|
|
bool m_enablePrinter = true;
|
|
bool m_getDefaultInfo = false; // Equiv. to PSD_RETURNDEFAULT
|
|
bool m_enableHelp = false;
|
|
wxPrintData m_printData;
|
|
|
|
private:
|
|
wxDECLARE_DYNAMIC_CLASS(wxPageSetupDialogData);
|
|
};
|
|
|
|
#endif // wxUSE_PRINTING_ARCHITECTURE
|
|
|
|
#endif
|
|
// _WX_CMNDATA_H_BASE_
|