3
#include <gtk/gtkframe.h>
4
#include <gtk/gtksizegroup.h>
5
#include <gtk/gtklabel.h>
6
#include <gtk/gtkfilesel.h>
7
#include <gtk/gtkdialog.h>
8
#include <gtk/gtkscrolledwindow.h>
10
#include "stpui_widgets/stpui_combo.h"
11
#include "stpui_widgets/dimension.h"
12
#include "support/tiffsave.h"
15
#include "pp_pageextent.h"
16
#include "pp_layout_poster_pageview.h"
17
#include "pp_layout_poster.h"
22
SELECTIONCHANGED_SIGNAL,
26
static guint pp_layout_poster_signals[LAST_SIGNAL] = { 0 };
28
static void pp_layout_poster_class_init (pp_Layout_PosterClass *klass);
29
static void pp_layout_poster_init (pp_Layout_Poster *stpuicombo);
32
static void reflow(GtkWidget *wid,gpointer *ob)
34
pp_Layout_Poster *lo=(pp_Layout_Poster *)ob;
35
pp_Layout_Poster_PageView *pv=PP_LAYOUT_POSTER_PAGEVIEW(lo->pageview);
36
Layout_Poster *l=(Layout_Poster*)lo->state->layout;
38
pp_layout_poster_pageview_refresh(PP_LAYOUT_POSTER_PAGEVIEW(pv));
40
int pages=l->GetPages();
41
pages/=l->htiles*l->vtiles;
43
gtk_widget_set_sensitive(lo->page,pages>1);
44
gtk_spin_button_set_range(GTK_SPIN_BUTTON(lo->page),1.0,pages);
45
g_signal_emit(G_OBJECT (lo),pp_layout_poster_signals[CHANGED_SIGNAL], 0);
49
static void pe_changed(GtkWidget *wid,gpointer *ob)
51
pp_Layout_Poster *lo=(pp_Layout_Poster *)ob;
52
Layout_Poster *l=(Layout_Poster*)lo->state->layout;
54
pp_layout_poster_refresh(lo);
55
pp_Layout_Poster_PageView *pv=PP_LAYOUT_POSTER_PAGEVIEW(lo->pageview);
56
pp_layout_poster_pageview_refresh(pv);
57
g_signal_emit(G_OBJECT (ob),pp_layout_poster_signals[CHANGED_SIGNAL], 0);
61
static void posterwidth_changed(GtkWidget *wid,gpointer *ob)
63
pp_Layout_Poster *lo=(pp_Layout_Poster *)ob;
64
Layout_Poster *l=(Layout_Poster*)lo->state->layout;
66
l->posterwidth=int(dimension_get_pt(DIMENSION(lo->posterwidth)));
68
g_signal_emit(G_OBJECT (lo),pp_layout_poster_signals[CHANGED_SIGNAL], 0);
72
static void posterheight_changed(GtkWidget *wid,gpointer *ob)
74
pp_Layout_Poster *lo=(pp_Layout_Poster *)ob;
75
Layout_Poster *l=(Layout_Poster*)lo->state->layout;
77
l->posterheight=int(dimension_get_pt(DIMENSION(lo->posterheight)));
79
g_signal_emit(G_OBJECT (lo),pp_layout_poster_signals[CHANGED_SIGNAL], 0);
83
static void htiles_changed(GtkWidget *wid,gpointer *ob)
85
pp_Layout_Poster *lo=(pp_Layout_Poster *)ob;
86
Layout_Poster *l=(Layout_Poster*)lo->state->layout;
88
l->htiles=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(lo->htiles));
90
g_signal_emit(G_OBJECT (lo),pp_layout_poster_signals[CHANGED_SIGNAL], 0);
94
static void vtiles_changed(GtkWidget *wid,gpointer *ob)
96
pp_Layout_Poster *lo=(pp_Layout_Poster *)ob;
97
Layout_Poster *l=(Layout_Poster*)lo->state->layout;
99
cerr << "In VTiles_Changed" << endl;
101
l->vtiles=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(lo->vtiles));
103
g_signal_emit(G_OBJECT (lo),pp_layout_poster_signals[CHANGED_SIGNAL], 0);
107
static void hoverlap_changed(GtkWidget *wid,gpointer *ob)
109
pp_Layout_Poster *lo=(pp_Layout_Poster *)ob;
110
Layout_Poster *l=(Layout_Poster*)lo->state->layout;
112
l->hoverlap=int(dimension_get_pt(DIMENSION(lo->hoverlap)));
114
g_signal_emit(G_OBJECT (lo),pp_layout_poster_signals[CHANGED_SIGNAL], 0);
118
static void voverlap_changed(GtkWidget *wid,gpointer *ob)
120
pp_Layout_Poster *lo=(pp_Layout_Poster *)ob;
121
Layout_Poster *l=(Layout_Poster*)lo->state->layout;
123
l->voverlap=int(dimension_get_pt(DIMENSION(lo->voverlap)));
125
g_signal_emit(G_OBJECT (lo),pp_layout_poster_signals[CHANGED_SIGNAL], 0);
129
static void page_changed(GtkWidget *wid,gpointer *ob)
131
pp_Layout_Poster *lo=(pp_Layout_Poster *)ob;
132
pp_Layout_Poster_PageView *pv=PP_LAYOUT_POSTER_PAGEVIEW(lo->pageview);
133
int pagesperposter=pv->layout->htiles*pv->layout->vtiles;
135
pp_layout_poster_pageview_set_page(pv,pagesperposter*(gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(lo->page))-1));
136
g_signal_emit(G_OBJECT (lo),pp_layout_poster_signals[CHANGED_SIGNAL], 0);
140
static void pageview_changed(GtkWidget *wid,gpointer *ob)
142
pp_Layout_Poster *lo=(pp_Layout_Poster *)ob;
144
g_signal_emit(G_OBJECT (lo),pp_layout_poster_signals[CHANGED_SIGNAL], 0);
148
static void pageview_popupmenu(GtkWidget *wid,gpointer *ob)
150
pp_Layout_Poster *lo=(pp_Layout_Poster *)ob;
151
cerr << "Forwarding popupmenu signal..." << endl;
152
g_signal_emit(G_OBJECT (lo),pp_layout_poster_signals[POPUPMENU_SIGNAL], 0);
156
void pp_layout_poster_refresh(pp_Layout_Poster *ob)
158
Layout_Poster *l=(Layout_Poster *)ob->state->layout;
160
l->LayoutToDB(ob->state->layoutdb);
162
int pages=l->GetPages();
163
int cpage=l->GetCurrentPage();
164
pages/=l->htiles*l->vtiles;
165
cpage/=l->htiles*l->vtiles;
167
gtk_widget_set_sensitive(ob->page,pages!=1);
170
gtk_spin_button_set_range(GTK_SPIN_BUTTON(ob->page),1.0,pages);
171
gtk_spin_button_set_value(GTK_SPIN_BUTTON(ob->page),cpage+1);
174
g_signal_handlers_block_matched (G_OBJECT(ob->posterwidth),G_SIGNAL_MATCH_DATA,
175
0, 0, NULL, NULL, ob);
176
g_signal_handlers_block_matched (G_OBJECT(ob->posterheight),G_SIGNAL_MATCH_DATA,
177
0, 0, NULL, NULL, ob);
178
g_signal_handlers_block_matched (G_OBJECT(ob->htiles),G_SIGNAL_MATCH_DATA,
179
0, 0, NULL, NULL, ob);
180
g_signal_handlers_block_matched (G_OBJECT(ob->vtiles),G_SIGNAL_MATCH_DATA,
181
0, 0, NULL, NULL, ob);
182
g_signal_handlers_block_matched (G_OBJECT(ob->hoverlap),G_SIGNAL_MATCH_DATA,
183
0, 0, NULL, NULL, ob);
184
g_signal_handlers_block_matched (G_OBJECT(ob->voverlap),G_SIGNAL_MATCH_DATA,
185
0, 0, NULL, NULL, ob);
187
dimension_set_pt(DIMENSION(ob->posterwidth),l->posterwidth);
188
dimension_set_pt(DIMENSION(ob->posterheight),l->posterheight);
189
gtk_spin_button_set_value(GTK_SPIN_BUTTON(ob->htiles),l->htiles);
190
gtk_spin_button_set_value(GTK_SPIN_BUTTON(ob->vtiles),l->vtiles);
191
dimension_set_pt(DIMENSION(ob->hoverlap),l->hoverlap);
192
dimension_set_pt(DIMENSION(ob->voverlap),l->voverlap);
194
g_signal_handlers_unblock_matched (G_OBJECT(ob->posterwidth),G_SIGNAL_MATCH_DATA,
195
0, 0, NULL, NULL, ob);
196
g_signal_handlers_unblock_matched (G_OBJECT(ob->posterheight),G_SIGNAL_MATCH_DATA,
197
0, 0, NULL, NULL, ob);
198
g_signal_handlers_unblock_matched (G_OBJECT(ob->htiles),G_SIGNAL_MATCH_DATA,
199
0, 0, NULL, NULL, ob);
200
g_signal_handlers_unblock_matched (G_OBJECT(ob->vtiles),G_SIGNAL_MATCH_DATA,
201
0, 0, NULL, NULL, ob);
202
g_signal_handlers_unblock_matched (G_OBJECT(ob->hoverlap),G_SIGNAL_MATCH_DATA,
203
0, 0, NULL, NULL, ob);
204
g_signal_handlers_unblock_matched (G_OBJECT(ob->voverlap),G_SIGNAL_MATCH_DATA,
205
0, 0, NULL, NULL, ob);
207
pp_Layout_Poster_PageView *pv=PP_LAYOUT_POSTER_PAGEVIEW(ob->pageview);
209
pp_layout_poster_pageview_refresh(pv);
213
void pp_layout_poster_set_unit(GtkWidget *wid,enum Units unit)
215
pp_Layout_Poster *ob=PP_LAYOUT_POSTER(wid);
216
pp_pageextent_set_unit(PP_PAGEEXTENT(ob->pageextent),unit);
217
dimension_set_unit(DIMENSION(ob->posterwidth),unit);
218
dimension_set_unit(DIMENSION(ob->posterheight),unit);
223
pp_layout_poster_new (PhotoPrint_State *state)
225
pp_Layout_Poster *ob=PP_LAYOUT_POSTER(g_object_new (pp_layout_poster_get_type (), NULL));
227
gtk_container_set_border_width(GTK_CONTAINER(&ob->hbox),10);
237
ob->sizegroup = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
239
GtkWidget *frame = gtk_frame_new (NULL);
240
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
241
gtk_box_pack_start(GTK_BOX (&ob->hbox), frame,TRUE,TRUE,0);
242
gtk_widget_show (frame);
244
ob->pageview = pp_layout_poster_pageview_new ((Layout_Poster *)ob->state->layout);
245
g_signal_connect(G_OBJECT(ob->pageview),"changed",G_CALLBACK(pageview_changed),ob);
246
g_signal_connect(G_OBJECT(ob->pageview),"popupmenu",G_CALLBACK(pageview_popupmenu),ob);
247
g_signal_connect(G_OBJECT(ob->pageview),"reflow",G_CALLBACK(reflow),ob);
249
gtk_container_add (GTK_CONTAINER (frame), ob->pageview);
250
gtk_widget_show (ob->pageview);
252
GtkWidget *scrollwin=gtk_scrolled_window_new(NULL,NULL);
253
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrollwin),
254
GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
255
vbox = gtk_vbox_new (FALSE, 5);
256
gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrollwin), vbox);
257
gtk_box_pack_start(GTK_BOX(&ob->hbox),scrollwin,FALSE,FALSE,0);
258
gtk_widget_show (vbox);
259
gtk_widget_show (scrollwin);
261
enum Units unit=state->GetUnits();
263
#define PP_BUILDDIMENSION(spinlabel,var,min,max,unit,callback) \
264
hbox=gtk_hbox_new(FALSE,0); \
266
label=gtk_label_new(spinlabel); \
267
gtk_box_pack_start(GTK_BOX(hbox),label,TRUE,TRUE,5); \
268
gtk_widget_show(label); \
270
var=dimension_new(min,max,unit); \
271
g_signal_connect(G_OBJECT(var),"value-changed",G_CALLBACK(callback),ob); \
272
gtk_widget_show(var); \
274
gtk_size_group_add_widget(GTK_SIZE_GROUP(ob->sizegroup),var); \
275
gtk_box_pack_start(GTK_BOX(hbox),var,FALSE,FALSE,5); \
277
gtk_box_pack_start(GTK_BOX(vbox2),hbox,FALSE,FALSE,5); \
278
gtk_widget_show(hbox)
280
#define PP_BUILDSPIN(spinlabel,var,min,max,step,callback) \
281
hbox=gtk_hbox_new(FALSE,0); \
283
label=gtk_label_new(spinlabel); \
284
gtk_box_pack_start(GTK_BOX(hbox),label,TRUE,TRUE,5); \
285
gtk_widget_show(label); \
287
var=gtk_spin_button_new_with_range(min,max,step); \
288
g_signal_connect(G_OBJECT(var),"value-changed",G_CALLBACK(callback),ob); \
289
gtk_widget_show(var); \
291
gtk_size_group_add_widget(GTK_SIZE_GROUP(ob->sizegroup),var); \
292
gtk_box_pack_start(GTK_BOX(hbox),var,FALSE,FALSE,5); \
294
gtk_box_pack_start(GTK_BOX(vbox2),hbox,FALSE,FALSE,5); \
295
gtk_widget_show(hbox)
297
#define PP_BUILDFRAME(framelabel) \
298
frame=gtk_frame_new(framelabel); \
299
gtk_box_pack_start(GTK_BOX(vbox),frame,FALSE,FALSE,0); \
300
gtk_container_set_border_width(GTK_CONTAINER(frame),5); \
301
gtk_widget_show(frame); \
303
vbox2=gtk_vbox_new(FALSE,0); \
304
gtk_container_add(GTK_CONTAINER(frame),vbox2); \
305
gtk_widget_show(vbox2)
309
PP_BUILDFRAME("Poster Size:");
310
PP_BUILDDIMENSION("Width:",ob->posterwidth,350,10000,unit,posterwidth_changed);
311
PP_BUILDDIMENSION("Height:",ob->posterheight,350,10000,unit,posterheight_changed);
312
PP_BUILDSPIN("Tiles wide:",ob->htiles,1,10,1,htiles_changed);
313
PP_BUILDSPIN("Tiles high:",ob->vtiles,1,10,1,vtiles_changed);
315
PP_BUILDFRAME("Overlap:");
316
PP_BUILDDIMENSION("H:",ob->hoverlap,0,72,unit,hoverlap_changed);
317
PP_BUILDDIMENSION("V:",ob->voverlap,0,72,unit,voverlap_changed);
322
ob->pageextent=pp_pageextent_new((Layout_Poster *)ob->state->layout,ob->state,ob->sizegroup);
323
g_signal_connect(G_OBJECT(ob->pageextent),"changed",G_CALLBACK(pe_changed),ob);
324
gtk_box_pack_start(GTK_BOX(vbox),ob->pageextent,FALSE,FALSE,0);
325
gtk_widget_show(ob->pageextent);
330
tmp=gtk_vbox_new(FALSE,0);
331
gtk_box_pack_start(GTK_BOX(vbox),tmp,TRUE,TRUE,0);
332
gtk_widget_show(tmp);
337
hbox=gtk_hbox_new(FALSE,5);
338
label=gtk_label_new("Page:");
339
gtk_box_pack_start(GTK_BOX(hbox),label,TRUE,TRUE,0);
340
gtk_widget_show(label);
342
ob->page=gtk_spin_button_new_with_range(1.0,2.0,1.0);
343
g_signal_connect(G_OBJECT(ob->page),"value-changed",G_CALLBACK(page_changed),ob);
344
gtk_widget_show(ob->page);
346
gtk_box_pack_start(GTK_BOX(hbox),ob->page,FALSE,FALSE,0);
349
gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,0);
350
gtk_widget_show(hbox);
352
g_object_unref(G_OBJECT(ob->sizegroup));
355
pp_layout_poster_refresh(ob);
356
pp_pageextent_refresh(PP_PAGEEXTENT(ob->pageextent));
358
return(GTK_WIDGET(ob));
363
pp_layout_poster_get_type (void)
365
static GType stpuic_type = 0;
369
static const GTypeInfo pp_layout_poster_info =
371
sizeof (pp_Layout_PosterClass),
372
NULL, /* base_init */
373
NULL, /* base_finalize */
374
(GClassInitFunc) pp_layout_poster_class_init,
375
NULL, /* class_finalize */
376
NULL, /* class_data */
377
sizeof (pp_Layout_Poster),
379
(GInstanceInitFunc) pp_layout_poster_init,
381
stpuic_type = g_type_register_static (GTK_TYPE_HBOX, "pp_Layout_Poster", &pp_layout_poster_info, (GTypeFlags)0);
388
pp_layout_poster_class_init (pp_Layout_PosterClass *klass)
390
pp_layout_poster_signals[CHANGED_SIGNAL] =
391
g_signal_new ("changed",
392
G_TYPE_FROM_CLASS (klass),
393
GSignalFlags(G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION),
394
G_STRUCT_OFFSET (pp_Layout_PosterClass, changed),
396
g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
397
pp_layout_poster_signals[POPUPMENU_SIGNAL] =
398
g_signal_new ("popupmenu",
399
G_TYPE_FROM_CLASS (klass),
400
GSignalFlags(G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION),
401
G_STRUCT_OFFSET (pp_Layout_PosterClass, changed),
403
g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
404
pp_layout_poster_signals[SELECTIONCHANGED_SIGNAL] =
405
g_signal_new ("selection_changed",
406
G_TYPE_FROM_CLASS (klass),
407
GSignalFlags(G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION),
408
G_STRUCT_OFFSET (pp_Layout_PosterClass, changed),
410
g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
415
pp_layout_poster_init (pp_Layout_Poster *ob)
3
#include <gtk/gtkframe.h>
4
#include <gtk/gtksizegroup.h>
5
#include <gtk/gtklabel.h>
6
#include <gtk/gtkfilesel.h>
7
#include <gtk/gtkdialog.h>
8
#include <gtk/gtkscrolledwindow.h>
10
#include "stpui_widgets/stpui_combo.h"
11
#include "stpui_widgets/dimension.h"
12
#include "support/tiffsave.h"
15
#include "pp_pageextent.h"
16
#include "pp_layout_poster_pageview.h"
17
#include "pp_layout_poster.h"
21
#define _(x) gettext(x)
26
SELECTIONCHANGED_SIGNAL,
30
static guint pp_layout_poster_signals[LAST_SIGNAL] = { 0 };
32
static void pp_layout_poster_class_init (pp_Layout_PosterClass *klass);
33
static void pp_layout_poster_init (pp_Layout_Poster *stpuicombo);
36
static void reflow(GtkWidget *wid,gpointer *ob)
38
pp_Layout_Poster *lo=(pp_Layout_Poster *)ob;
39
pp_Layout_Poster_PageView *pv=PP_LAYOUT_POSTER_PAGEVIEW(lo->pageview);
40
Layout_Poster *l=(Layout_Poster*)lo->state->layout;
42
pp_layout_poster_pageview_refresh(PP_LAYOUT_POSTER_PAGEVIEW(pv));
44
int pages=l->GetPages();
45
pages/=l->htiles*l->vtiles;
47
gtk_widget_set_sensitive(lo->page,pages>1);
48
gtk_spin_button_set_range(GTK_SPIN_BUTTON(lo->page),1.0,pages);
49
g_signal_emit(G_OBJECT (lo),pp_layout_poster_signals[CHANGED_SIGNAL], 0);
53
static void pe_changed(GtkWidget *wid,gpointer *ob)
55
pp_Layout_Poster *lo=(pp_Layout_Poster *)ob;
56
Layout_Poster *l=(Layout_Poster*)lo->state->layout;
58
pp_layout_poster_refresh(lo);
59
pp_Layout_Poster_PageView *pv=PP_LAYOUT_POSTER_PAGEVIEW(lo->pageview);
60
pp_layout_poster_pageview_refresh(pv);
61
g_signal_emit(G_OBJECT (ob),pp_layout_poster_signals[CHANGED_SIGNAL], 0);
65
static void posterwidth_changed(GtkWidget *wid,gpointer *ob)
67
pp_Layout_Poster *lo=(pp_Layout_Poster *)ob;
68
Layout_Poster *l=(Layout_Poster*)lo->state->layout;
70
l->posterwidth=int(dimension_get_pt(DIMENSION(lo->posterwidth)));
72
g_signal_emit(G_OBJECT (lo),pp_layout_poster_signals[CHANGED_SIGNAL], 0);
76
static void posterheight_changed(GtkWidget *wid,gpointer *ob)
78
pp_Layout_Poster *lo=(pp_Layout_Poster *)ob;
79
Layout_Poster *l=(Layout_Poster*)lo->state->layout;
81
l->posterheight=int(dimension_get_pt(DIMENSION(lo->posterheight)));
83
g_signal_emit(G_OBJECT (lo),pp_layout_poster_signals[CHANGED_SIGNAL], 0);
87
static void htiles_changed(GtkWidget *wid,gpointer *ob)
89
pp_Layout_Poster *lo=(pp_Layout_Poster *)ob;
90
Layout_Poster *l=(Layout_Poster*)lo->state->layout;
92
l->htiles=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(lo->htiles));
94
g_signal_emit(G_OBJECT (lo),pp_layout_poster_signals[CHANGED_SIGNAL], 0);
98
static void vtiles_changed(GtkWidget *wid,gpointer *ob)
100
pp_Layout_Poster *lo=(pp_Layout_Poster *)ob;
101
Layout_Poster *l=(Layout_Poster*)lo->state->layout;
103
cerr << "In VTiles_Changed" << endl;
105
l->vtiles=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(lo->vtiles));
107
g_signal_emit(G_OBJECT (lo),pp_layout_poster_signals[CHANGED_SIGNAL], 0);
111
static void hoverlap_changed(GtkWidget *wid,gpointer *ob)
113
pp_Layout_Poster *lo=(pp_Layout_Poster *)ob;
114
Layout_Poster *l=(Layout_Poster*)lo->state->layout;
116
l->hoverlap=int(dimension_get_pt(DIMENSION(lo->hoverlap)));
118
g_signal_emit(G_OBJECT (lo),pp_layout_poster_signals[CHANGED_SIGNAL], 0);
122
static void voverlap_changed(GtkWidget *wid,gpointer *ob)
124
pp_Layout_Poster *lo=(pp_Layout_Poster *)ob;
125
Layout_Poster *l=(Layout_Poster*)lo->state->layout;
127
l->voverlap=int(dimension_get_pt(DIMENSION(lo->voverlap)));
129
g_signal_emit(G_OBJECT (lo),pp_layout_poster_signals[CHANGED_SIGNAL], 0);
133
static void page_changed(GtkWidget *wid,gpointer *ob)
135
pp_Layout_Poster *lo=(pp_Layout_Poster *)ob;
136
pp_Layout_Poster_PageView *pv=PP_LAYOUT_POSTER_PAGEVIEW(lo->pageview);
137
int pagesperposter=pv->layout->htiles*pv->layout->vtiles;
139
pp_layout_poster_pageview_set_page(pv,pagesperposter*(gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(lo->page))-1));
140
g_signal_emit(G_OBJECT (lo),pp_layout_poster_signals[CHANGED_SIGNAL], 0);
144
static void pageview_changed(GtkWidget *wid,gpointer *ob)
146
pp_Layout_Poster *lo=(pp_Layout_Poster *)ob;
148
g_signal_emit(G_OBJECT (lo),pp_layout_poster_signals[CHANGED_SIGNAL], 0);
152
static void pageview_popupmenu(GtkWidget *wid,gpointer *ob)
154
pp_Layout_Poster *lo=(pp_Layout_Poster *)ob;
155
cerr << "Forwarding popupmenu signal..." << endl;
156
g_signal_emit(G_OBJECT (lo),pp_layout_poster_signals[POPUPMENU_SIGNAL], 0);
160
void pp_layout_poster_refresh(pp_Layout_Poster *ob)
162
Layout_Poster *l=(Layout_Poster *)ob->state->layout;
164
l->LayoutToDB(ob->state->layoutdb);
166
int pages=l->GetPages();
167
int cpage=l->GetCurrentPage();
168
pages/=l->htiles*l->vtiles;
169
cpage/=l->htiles*l->vtiles;
171
gtk_widget_set_sensitive(ob->page,pages!=1);
174
gtk_spin_button_set_range(GTK_SPIN_BUTTON(ob->page),1.0,pages);
175
gtk_spin_button_set_value(GTK_SPIN_BUTTON(ob->page),cpage+1);
178
g_signal_handlers_block_matched (G_OBJECT(ob->posterwidth),G_SIGNAL_MATCH_DATA,
179
0, 0, NULL, NULL, ob);
180
g_signal_handlers_block_matched (G_OBJECT(ob->posterheight),G_SIGNAL_MATCH_DATA,
181
0, 0, NULL, NULL, ob);
182
g_signal_handlers_block_matched (G_OBJECT(ob->htiles),G_SIGNAL_MATCH_DATA,
183
0, 0, NULL, NULL, ob);
184
g_signal_handlers_block_matched (G_OBJECT(ob->vtiles),G_SIGNAL_MATCH_DATA,
185
0, 0, NULL, NULL, ob);
186
g_signal_handlers_block_matched (G_OBJECT(ob->hoverlap),G_SIGNAL_MATCH_DATA,
187
0, 0, NULL, NULL, ob);
188
g_signal_handlers_block_matched (G_OBJECT(ob->voverlap),G_SIGNAL_MATCH_DATA,
189
0, 0, NULL, NULL, ob);
191
dimension_set_pt(DIMENSION(ob->posterwidth),l->posterwidth);
192
dimension_set_pt(DIMENSION(ob->posterheight),l->posterheight);
193
gtk_spin_button_set_value(GTK_SPIN_BUTTON(ob->htiles),l->htiles);
194
gtk_spin_button_set_value(GTK_SPIN_BUTTON(ob->vtiles),l->vtiles);
195
dimension_set_pt(DIMENSION(ob->hoverlap),l->hoverlap);
196
dimension_set_pt(DIMENSION(ob->voverlap),l->voverlap);
198
g_signal_handlers_unblock_matched (G_OBJECT(ob->posterwidth),G_SIGNAL_MATCH_DATA,
199
0, 0, NULL, NULL, ob);
200
g_signal_handlers_unblock_matched (G_OBJECT(ob->posterheight),G_SIGNAL_MATCH_DATA,
201
0, 0, NULL, NULL, ob);
202
g_signal_handlers_unblock_matched (G_OBJECT(ob->htiles),G_SIGNAL_MATCH_DATA,
203
0, 0, NULL, NULL, ob);
204
g_signal_handlers_unblock_matched (G_OBJECT(ob->vtiles),G_SIGNAL_MATCH_DATA,
205
0, 0, NULL, NULL, ob);
206
g_signal_handlers_unblock_matched (G_OBJECT(ob->hoverlap),G_SIGNAL_MATCH_DATA,
207
0, 0, NULL, NULL, ob);
208
g_signal_handlers_unblock_matched (G_OBJECT(ob->voverlap),G_SIGNAL_MATCH_DATA,
209
0, 0, NULL, NULL, ob);
211
pp_Layout_Poster_PageView *pv=PP_LAYOUT_POSTER_PAGEVIEW(ob->pageview);
213
pp_layout_poster_pageview_refresh(pv);
217
void pp_layout_poster_set_unit(GtkWidget *wid,enum Units unit)
219
pp_Layout_Poster *ob=PP_LAYOUT_POSTER(wid);
220
pp_pageextent_set_unit(PP_PAGEEXTENT(ob->pageextent),unit);
221
dimension_set_unit(DIMENSION(ob->posterwidth),unit);
222
dimension_set_unit(DIMENSION(ob->posterheight),unit);
227
pp_layout_poster_new (PhotoPrint_State *state)
229
pp_Layout_Poster *ob=PP_LAYOUT_POSTER(g_object_new (pp_layout_poster_get_type (), NULL));
231
gtk_container_set_border_width(GTK_CONTAINER(&ob->hbox),10);
241
ob->sizegroup = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
243
GtkWidget *frame = gtk_frame_new (NULL);
244
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
245
gtk_box_pack_start(GTK_BOX (&ob->hbox), frame,TRUE,TRUE,0);
246
gtk_widget_show (frame);
248
ob->pageview = pp_layout_poster_pageview_new ((Layout_Poster *)ob->state->layout);
249
g_signal_connect(G_OBJECT(ob->pageview),"changed",G_CALLBACK(pageview_changed),ob);
250
g_signal_connect(G_OBJECT(ob->pageview),"popupmenu",G_CALLBACK(pageview_popupmenu),ob);
251
g_signal_connect(G_OBJECT(ob->pageview),"reflow",G_CALLBACK(reflow),ob);
253
gtk_container_add (GTK_CONTAINER (frame), ob->pageview);
254
gtk_widget_show (ob->pageview);
256
GtkWidget *scrollwin=gtk_scrolled_window_new(NULL,NULL);
257
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrollwin),
258
GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
259
vbox = gtk_vbox_new (FALSE, 5);
260
gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrollwin), vbox);
261
gtk_box_pack_start(GTK_BOX(&ob->hbox),scrollwin,FALSE,FALSE,0);
262
gtk_widget_show (vbox);
263
gtk_widget_show (scrollwin);
265
enum Units unit=state->GetUnits();
267
#define PP_BUILDDIMENSION(spinlabel,var,min,max,unit,callback) \
268
hbox=gtk_hbox_new(FALSE,0); \
270
label=gtk_label_new(spinlabel); \
271
gtk_box_pack_start(GTK_BOX(hbox),label,TRUE,TRUE,5); \
272
gtk_widget_show(label); \
274
var=dimension_new(min,max,unit); \
275
g_signal_connect(G_OBJECT(var),"value-changed",G_CALLBACK(callback),ob); \
276
gtk_widget_show(var); \
278
gtk_size_group_add_widget(GTK_SIZE_GROUP(ob->sizegroup),var); \
279
gtk_box_pack_start(GTK_BOX(hbox),var,FALSE,FALSE,5); \
281
gtk_box_pack_start(GTK_BOX(vbox2),hbox,FALSE,FALSE,5); \
282
gtk_widget_show(hbox)
284
#define PP_BUILDSPIN(spinlabel,var,min,max,step,callback) \
285
hbox=gtk_hbox_new(FALSE,0); \
287
label=gtk_label_new(spinlabel); \
288
gtk_box_pack_start(GTK_BOX(hbox),label,TRUE,TRUE,5); \
289
gtk_widget_show(label); \
291
var=gtk_spin_button_new_with_range(min,max,step); \
292
g_signal_connect(G_OBJECT(var),"value-changed",G_CALLBACK(callback),ob); \
293
gtk_widget_show(var); \
295
gtk_size_group_add_widget(GTK_SIZE_GROUP(ob->sizegroup),var); \
296
gtk_box_pack_start(GTK_BOX(hbox),var,FALSE,FALSE,5); \
298
gtk_box_pack_start(GTK_BOX(vbox2),hbox,FALSE,FALSE,5); \
299
gtk_widget_show(hbox)
301
#define PP_BUILDFRAME(framelabel) \
302
frame=gtk_frame_new(framelabel); \
303
gtk_box_pack_start(GTK_BOX(vbox),frame,FALSE,FALSE,0); \
304
gtk_container_set_border_width(GTK_CONTAINER(frame),5); \
305
gtk_widget_show(frame); \
307
vbox2=gtk_vbox_new(FALSE,0); \
308
gtk_container_add(GTK_CONTAINER(frame),vbox2); \
309
gtk_widget_show(vbox2)
313
PP_BUILDFRAME(_("Poster Size:"));
314
PP_BUILDDIMENSION(_("Width:"),ob->posterwidth,350,10000,unit,posterwidth_changed);
315
PP_BUILDDIMENSION(_("Height:"),ob->posterheight,350,10000,unit,posterheight_changed);
316
PP_BUILDSPIN(_("Tiles wide:"),ob->htiles,1,10,1,htiles_changed);
317
PP_BUILDSPIN(_("Tiles high:"),ob->vtiles,1,10,1,vtiles_changed);
319
PP_BUILDFRAME(_("Overlap:"));
320
PP_BUILDDIMENSION(_("H:"),ob->hoverlap,0,72,unit,hoverlap_changed);
321
PP_BUILDDIMENSION(_("V:"),ob->voverlap,0,72,unit,voverlap_changed);
326
ob->pageextent=pp_pageextent_new((Layout_Poster *)ob->state->layout,ob->state,ob->sizegroup);
327
g_signal_connect(G_OBJECT(ob->pageextent),"changed",G_CALLBACK(pe_changed),ob);
328
gtk_box_pack_start(GTK_BOX(vbox),ob->pageextent,FALSE,FALSE,0);
329
gtk_widget_show(ob->pageextent);
334
tmp=gtk_vbox_new(FALSE,0);
335
gtk_box_pack_start(GTK_BOX(vbox),tmp,TRUE,TRUE,0);
336
gtk_widget_show(tmp);
341
hbox=gtk_hbox_new(FALSE,5);
342
label=gtk_label_new(_("Page:"));
343
gtk_box_pack_start(GTK_BOX(hbox),label,TRUE,TRUE,0);
344
gtk_widget_show(label);
346
ob->page=gtk_spin_button_new_with_range(1.0,2.0,1.0);
347
g_signal_connect(G_OBJECT(ob->page),"value-changed",G_CALLBACK(page_changed),ob);
348
gtk_widget_show(ob->page);
350
gtk_box_pack_start(GTK_BOX(hbox),ob->page,FALSE,FALSE,0);
353
gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,0);
354
gtk_widget_show(hbox);
356
g_object_unref(G_OBJECT(ob->sizegroup));
359
pp_layout_poster_refresh(ob);
360
pp_pageextent_refresh(PP_PAGEEXTENT(ob->pageextent));
362
return(GTK_WIDGET(ob));
367
pp_layout_poster_get_type (void)
369
static GType stpuic_type = 0;
373
static const GTypeInfo pp_layout_poster_info =
375
sizeof (pp_Layout_PosterClass),
376
NULL, /* base_init */
377
NULL, /* base_finalize */
378
(GClassInitFunc) pp_layout_poster_class_init,
379
NULL, /* class_finalize */
380
NULL, /* class_data */
381
sizeof (pp_Layout_Poster),
383
(GInstanceInitFunc) pp_layout_poster_init,
385
stpuic_type = g_type_register_static (GTK_TYPE_HBOX, "pp_Layout_Poster", &pp_layout_poster_info, (GTypeFlags)0);
392
pp_layout_poster_class_init (pp_Layout_PosterClass *klass)
394
pp_layout_poster_signals[CHANGED_SIGNAL] =
395
g_signal_new ("changed",
396
G_TYPE_FROM_CLASS (klass),
397
GSignalFlags(G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION),
398
G_STRUCT_OFFSET (pp_Layout_PosterClass, changed),
400
g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
401
pp_layout_poster_signals[POPUPMENU_SIGNAL] =
402
g_signal_new ("popupmenu",
403
G_TYPE_FROM_CLASS (klass),
404
GSignalFlags(G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION),
405
G_STRUCT_OFFSET (pp_Layout_PosterClass, changed),
407
g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
408
pp_layout_poster_signals[SELECTIONCHANGED_SIGNAL] =
409
g_signal_new ("selection_changed",
410
G_TYPE_FROM_CLASS (klass),
411
GSignalFlags(G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION),
412
G_STRUCT_OFFSET (pp_Layout_PosterClass, changed),
414
g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
419
pp_layout_poster_init (pp_Layout_Poster *ob)