1use glib;
6use glib::translate::*;
7use gtk_sys;
8use std;
9use std::fmt;
10use std::ptr;
11use Error;
12use PageOrientation;
13use PaperSize;
14use Unit;
15
16glib_wrapper! {
17 pub struct PageSetup(Object<gtk_sys::GtkPageSetup, PageSetupClass>);
18
19 match fn {
20 get_type => || gtk_sys::gtk_page_setup_get_type(),
21 }
22}
23
24impl PageSetup {
25 pub fn new() -> PageSetup {
26 assert_initialized_main_thread!();
27 unsafe { from_glib_full(gtk_sys::gtk_page_setup_new()) }
28 }
29
30 pub fn new_from_file<P: AsRef<std::path::Path>>(file_name: P) -> Result<PageSetup, Error> {
31 assert_initialized_main_thread!();
32 unsafe {
33 let mut error = ptr::null_mut();
34 let ret = gtk_sys::gtk_page_setup_new_from_file(
35 file_name.as_ref().to_glib_none().0,
36 &mut error,
37 );
38 if error.is_null() {
39 Ok(from_glib_full(ret))
40 } else {
41 Err(from_glib_full(error))
42 }
43 }
44 }
45
46 #[cfg(any(feature = "v3_22", feature = "dox"))]
47 pub fn new_from_gvariant(variant: &glib::Variant) -> PageSetup {
48 assert_initialized_main_thread!();
49 unsafe {
50 from_glib_full(gtk_sys::gtk_page_setup_new_from_gvariant(
51 variant.to_glib_none().0,
52 ))
53 }
54 }
55
56 pub fn new_from_key_file(
57 key_file: &glib::KeyFile,
58 group_name: Option<&str>,
59 ) -> Result<PageSetup, Error> {
60 assert_initialized_main_thread!();
61 unsafe {
62 let mut error = ptr::null_mut();
63 let ret = gtk_sys::gtk_page_setup_new_from_key_file(
64 key_file.to_glib_none().0,
65 group_name.to_glib_none().0,
66 &mut error,
67 );
68 if error.is_null() {
69 Ok(from_glib_full(ret))
70 } else {
71 Err(from_glib_full(error))
72 }
73 }
74 }
75
76 pub fn copy(&self) -> Option<PageSetup> {
77 unsafe { from_glib_full(gtk_sys::gtk_page_setup_copy(self.to_glib_none().0)) }
78 }
79
80 pub fn get_bottom_margin(&self, unit: Unit) -> f64 {
81 unsafe { gtk_sys::gtk_page_setup_get_bottom_margin(self.to_glib_none().0, unit.to_glib()) }
82 }
83
84 pub fn get_left_margin(&self, unit: Unit) -> f64 {
85 unsafe { gtk_sys::gtk_page_setup_get_left_margin(self.to_glib_none().0, unit.to_glib()) }
86 }
87
88 pub fn get_orientation(&self) -> PageOrientation {
89 unsafe {
90 from_glib(gtk_sys::gtk_page_setup_get_orientation(
91 self.to_glib_none().0,
92 ))
93 }
94 }
95
96 pub fn get_page_height(&self, unit: Unit) -> f64 {
97 unsafe { gtk_sys::gtk_page_setup_get_page_height(self.to_glib_none().0, unit.to_glib()) }
98 }
99
100 pub fn get_page_width(&self, unit: Unit) -> f64 {
101 unsafe { gtk_sys::gtk_page_setup_get_page_width(self.to_glib_none().0, unit.to_glib()) }
102 }
103
104 pub fn get_paper_height(&self, unit: Unit) -> f64 {
105 unsafe { gtk_sys::gtk_page_setup_get_paper_height(self.to_glib_none().0, unit.to_glib()) }
106 }
107
108 pub fn get_paper_size(&self) -> PaperSize {
109 unsafe {
110 from_glib_none(gtk_sys::gtk_page_setup_get_paper_size(
111 self.to_glib_none().0,
112 ))
113 }
114 }
115
116 pub fn get_paper_width(&self, unit: Unit) -> f64 {
117 unsafe { gtk_sys::gtk_page_setup_get_paper_width(self.to_glib_none().0, unit.to_glib()) }
118 }
119
120 pub fn get_right_margin(&self, unit: Unit) -> f64 {
121 unsafe { gtk_sys::gtk_page_setup_get_right_margin(self.to_glib_none().0, unit.to_glib()) }
122 }
123
124 pub fn get_top_margin(&self, unit: Unit) -> f64 {
125 unsafe { gtk_sys::gtk_page_setup_get_top_margin(self.to_glib_none().0, unit.to_glib()) }
126 }
127
128 pub fn load_file<P: AsRef<std::path::Path>>(&self, file_name: P) -> Result<(), Error> {
129 unsafe {
130 let mut error = ptr::null_mut();
131 let _ = gtk_sys::gtk_page_setup_load_file(
132 self.to_glib_none().0,
133 file_name.as_ref().to_glib_none().0,
134 &mut error,
135 );
136 if error.is_null() {
137 Ok(())
138 } else {
139 Err(from_glib_full(error))
140 }
141 }
142 }
143
144 pub fn load_key_file(
145 &self,
146 key_file: &glib::KeyFile,
147 group_name: Option<&str>,
148 ) -> Result<(), Error> {
149 unsafe {
150 let mut error = ptr::null_mut();
151 let _ = gtk_sys::gtk_page_setup_load_key_file(
152 self.to_glib_none().0,
153 key_file.to_glib_none().0,
154 group_name.to_glib_none().0,
155 &mut error,
156 );
157 if error.is_null() {
158 Ok(())
159 } else {
160 Err(from_glib_full(error))
161 }
162 }
163 }
164
165 pub fn set_bottom_margin(&self, margin: f64, unit: Unit) {
166 unsafe {
167 gtk_sys::gtk_page_setup_set_bottom_margin(
168 self.to_glib_none().0,
169 margin,
170 unit.to_glib(),
171 );
172 }
173 }
174
175 pub fn set_left_margin(&self, margin: f64, unit: Unit) {
176 unsafe {
177 gtk_sys::gtk_page_setup_set_left_margin(self.to_glib_none().0, margin, unit.to_glib());
178 }
179 }
180
181 pub fn set_orientation(&self, orientation: PageOrientation) {
182 unsafe {
183 gtk_sys::gtk_page_setup_set_orientation(self.to_glib_none().0, orientation.to_glib());
184 }
185 }
186
187 pub fn set_paper_size(&self, size: &PaperSize) {
188 unsafe {
189 gtk_sys::gtk_page_setup_set_paper_size(
190 self.to_glib_none().0,
191 mut_override(size.to_glib_none().0),
192 );
193 }
194 }
195
196 pub fn set_paper_size_and_default_margins(&self, size: &PaperSize) {
197 unsafe {
198 gtk_sys::gtk_page_setup_set_paper_size_and_default_margins(
199 self.to_glib_none().0,
200 mut_override(size.to_glib_none().0),
201 );
202 }
203 }
204
205 pub fn set_right_margin(&self, margin: f64, unit: Unit) {
206 unsafe {
207 gtk_sys::gtk_page_setup_set_right_margin(self.to_glib_none().0, margin, unit.to_glib());
208 }
209 }
210
211 pub fn set_top_margin(&self, margin: f64, unit: Unit) {
212 unsafe {
213 gtk_sys::gtk_page_setup_set_top_margin(self.to_glib_none().0, margin, unit.to_glib());
214 }
215 }
216
217 pub fn to_file<P: AsRef<std::path::Path>>(&self, file_name: P) -> Result<(), Error> {
218 unsafe {
219 let mut error = ptr::null_mut();
220 let _ = gtk_sys::gtk_page_setup_to_file(
221 self.to_glib_none().0,
222 file_name.as_ref().to_glib_none().0,
223 &mut error,
224 );
225 if error.is_null() {
226 Ok(())
227 } else {
228 Err(from_glib_full(error))
229 }
230 }
231 }
232
233 #[cfg(any(feature = "v3_22", feature = "dox"))]
234 pub fn to_gvariant(&self) -> Option<glib::Variant> {
235 unsafe { from_glib_none(gtk_sys::gtk_page_setup_to_gvariant(self.to_glib_none().0)) }
236 }
237
238 pub fn to_key_file(&self, key_file: &glib::KeyFile, group_name: Option<&str>) {
239 unsafe {
240 gtk_sys::gtk_page_setup_to_key_file(
241 self.to_glib_none().0,
242 key_file.to_glib_none().0,
243 group_name.to_glib_none().0,
244 );
245 }
246 }
247}
248
249impl Default for PageSetup {
250 fn default() -> Self {
251 Self::new()
252 }
253}
254
255impl fmt::Display for PageSetup {
256 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
257 write!(f, "PageSetup")
258 }
259}