]> git.lyx.org Git - lyx.git/blob - src/PrinterParams.h
Don't launch that Alert if the graphics file isn't found. It doesn't work
[lyx.git] / src / PrinterParams.h
1 // -*- C++ -*-
2 /* This file is part of
3  * ======================================================
4  *
5  *          LyX, The Document Processor
6  *
7  *          Copyright 1995 Matthias Ettrich
8  *          Copyright 1995-2001 The LyX Team
9  *
10  *          This file Copyright 1999-2001
11  *          Allan Rae
12  *======================================================
13  */
14
15 #ifndef PRINTERPARAMS_H
16 #define PRINTERPARAMS_H
17
18 #include "lyxrc.h"
19
20 #ifdef ENABLE_ASSERTIONS
21 #include "support/LAssert.h"
22 extern bool containsOnly(string const &, char const *);
23 #endif
24
25
26 /**
27   This struct contains (or should contain) all the parameters required for
28   printing a buffer.  Some work still needs to be done on this struct and
29   printing handling in general to make it nice and full-featured.
30   The main things I'd like to add now is the ability to print a read-only
31   document with different orientation, papersize or single/duplex state
32   than the document's settings. ARRae 20000423
33 */
34 struct PrinterParams {
35         ///
36         enum Target {
37                 ///
38                 PRINTER,
39                 ///
40                 FILE
41         };
42         ///
43         Target target;
44         ///
45         string printer_name;
46         ///
47         string file_name;
48         /// We allow printing of even pages in a range and so on.
49         enum WhichPages{
50                 ///
51                 ALL,
52                 ///
53                 ODD,
54                 ///
55                 EVEN
56         };
57         ///
58         WhichPages which_pages;
59         /** Print a page range. Both from_page and to_page used to be strings
60             because they're actually easier to work with that way.  I've
61             switched to_page to be an int.  However, from_page will remain a
62             string because I want the from_page field to be able to be used as
63             a page range "1,3-5" and so on.
64             I've modified the invariant test to match. ARRae 20000518
65          */
66         string from_page;
67         ///
68         int to_page;
69         ///
70         bool reverse_order;
71         ///
72         bool unsorted_copies;
73         ///
74         int count_copies;
75         // The settings below should allow us to print any read-only doc in
76         // whatever size/orientation we want it -- overriding the documents
77         // settings.
78         // Override the documents orientation
79         // bool orientation;
80         // Print n pages per physical sheet
81         // unsigned int nup;
82         // Override document settings for duplex.
83         // bool duplex;
84
85         /** Test that all the fields contain valid entries.  It's unlikely
86             that the internal code will get this wrong (at least for the
87             xforms code anyway) however new ports and external scripts
88             might drive the wrong values in.
89          */
90         void testInvariant() const
91                 {
92 #ifdef ENABLE_ASSERTIONS
93                         if (!from_page.empty()) {
94                                 // Assert(from_page == number or empty)
95                                 lyx::Assert(containsOnly(from_page,
96                                                          "1234567890"));
97                         }
98                         if (to_page) {
99                                 // Assert(to_page == empty
100                                 //        or number iff from_page set)
101                                 lyx::Assert(!from_page.empty());
102                         }
103                         switch (target) {
104                         case PRINTER:
105 //                              Assert(!printer_name.empty());
106                                 break;
107                         case FILE:
108                                 lyx::Assert(!file_name.empty());
109                                 break;
110                         default:
111                                 lyx::Assert(false);
112                                 break;
113                         }
114                         switch (which_pages) {
115                         case ALL:
116                         case ODD:
117                         case EVEN:
118                                 break;
119                         default:
120                                 lyx::Assert(false);
121                                 break;
122                         }
123 #endif
124                 }
125
126         ///
127         PrinterParams(Target const & t = PRINTER,
128                       string const & pname = lyxrc.printer,
129                       string const & fname = string(),
130                       WhichPages const wp = ALL,
131                       string const & from = string(),
132                       int const & to = 0,
133                       bool const reversed = false,
134                       bool const unsorted = false,
135                       int const & num_copies = 1)
136                 : target(t),
137                   printer_name(pname),
138                   file_name(fname),
139                   which_pages(wp),
140                   from_page(from),
141                   to_page(to),
142                   reverse_order(reversed),
143                   unsorted_copies(unsorted),
144                   count_copies(num_copies)
145                 {
146                         testInvariant();
147                 }
148         ///
149         PrinterParams(PrinterParams const & pp)
150                 : target(pp.target),
151                   printer_name(pp.printer_name),
152                   file_name(pp.file_name),
153                   which_pages(pp.which_pages),
154                   from_page(pp.from_page),
155                   to_page(pp.to_page),
156                   reverse_order(pp.reverse_order),
157                   unsorted_copies(pp.unsorted_copies),
158                   count_copies(pp.count_copies)
159                 {
160                         testInvariant();
161                 }
162 };
163
164 #endif