3
#include <gtk/gtkframe.h>
4
#include <gtk/gtksizegroup.h>
5
#include <gtk/gtklabel.h>
6
#include <gtk/gtkfilesel.h>
7
#include <gtk/gtkfilechooser.h>
8
#include <gtk/gtkfilechooserdialog.h>
9
#include <gtk/gtkdialog.h>
10
#include <gtk/gtkmenuitem.h>
11
#include <gtk/gtkcheckmenuitem.h>
12
#include <gtk/gtkmain.h>
14
#include "stpui_widgets/stpui_combo.h"
15
#include "support/progressbar.h"
16
#include "support/tiffsave.h"
3
#include <gtk/gtkframe.h>
4
#include <gtk/gtksizegroup.h>
5
#include <gtk/gtklabel.h>
6
#include <gtk/gtkfilesel.h>
7
#include <gtk/gtkfilechooser.h>
8
#include <gtk/gtkfilechooserdialog.h>
9
#include <gtk/gtkdialog.h>
10
#include <gtk/gtkmenuitem.h>
11
#include <gtk/gtkcheckmenuitem.h>
12
#include <gtk/gtkimage.h>
13
#include <gtk/gtkmain.h>
14
#include <gtk/gtkuimanager.h>
16
#include "stpui_widgets/stpui_combo.h"
17
#include "support/progressbar.h"
18
#include "support/tiffsave.h"
17
19
#include "support/pathsupport.h"
20
#include "support/generaldialogs.h"
22
#include "support/generaldialogs.h"
21
23
#include "pixbufthumbnail/egg-pixbuf-thumbnail.h"
24
#include "pp_mainwindow.h"
31
static guint pp_mainwindow_signals[LAST_SIGNAL] = { 0 };
33
static void pp_mainwindow_class_init (pp_MainWindowClass *klass);
34
static void pp_mainwindow_init (pp_MainWindow *stpuicombo);
35
static void layout_changed(GtkWidget *wid,gpointer *ob);
37
// Functions invoked from the menus:
40
static void savegeometry(pp_MainWindow *mw)
43
gtk_window_get_position(GTK_WINDOW(mw),&x,&y);
44
gtk_window_get_size(GTK_WINDOW(mw),&w,&h);
46
mw->state->SetInt("Win_X",x);
47
mw->state->SetInt("Win_Y",y);
48
mw->state->SetInt("Win_W",w);
49
mw->state->SetInt("Win_H",h);
53
static void layout_selection_changed(GtkWidget *wid,gpointer *ob)
55
pp_MainWindow *mw=(pp_MainWindow *)ob;
57
pp_Menu *m=PP_MENU(mw->menu);
58
PP_ROTATION rotation=m->rotation;
59
bool allowcropping=m->allowcropping;
60
bool removeimage=true;
61
Layout_ImageInfo *ii=mw->state->layout->FirstSelected();
64
allowcropping=ii->allowcropping;
65
rotation=ii->rotation;
72
if(rotation!=ii->rotation)
73
rotation=PP_ROTATION_NONE;
74
allowcropping&=ii->allowcropping;
75
ii=mw->state->layout->NextSelected();
78
g_signal_handlers_block_matched (G_OBJECT(mw->menu),G_SIGNAL_MATCH_DATA,
79
0, 0, NULL, NULL, mw);
80
pp_menu_set_menu_state(m,allowcropping,rotation,removeimage);
81
g_signal_handlers_unblock_matched (G_OBJECT(mw->menu),G_SIGNAL_MATCH_DATA,
82
0, 0, NULL, NULL, mw);
86
static void layout_popupmenu(GtkWidget *wid,gpointer *ob)
88
layout_selection_changed(NULL,ob);
89
pp_MainWindow *mw=(pp_MainWindow *)ob;
90
pp_Menu *menu=PP_MENU(mw->menu);
91
gtk_menu_popup(GTK_MENU(menu->popupmenubar),NULL,NULL,NULL,NULL,3,gtk_get_current_event_time());
95
static void rebuild(pp_MainWindow *mw)
99
ProgressBar p("Transferring images...",true,GTK_WIDGET(mw));
100
if(mw->state->NewLayout(&p))
102
gtk_widget_destroy(mw->layout);
104
if((mw->layout=mw->state->layout->CreateWidget()))
106
gtk_box_pack_start(GTK_BOX(mw->vbox),mw->layout,TRUE,TRUE,0);
107
gtk_widget_show(mw->layout);
108
g_signal_connect(G_OBJECT(mw->layout),"changed",G_CALLBACK(layout_changed),mw);
109
g_signal_connect(G_OBJECT(mw->layout),"popupmenu",G_CALLBACK(layout_popupmenu),mw);
110
g_signal_connect(G_OBJECT(mw->layout),"selection_changed",G_CALLBACK(layout_selection_changed),mw);
113
int caps=mw->state->layout->GetCapabilities();
114
pp_menu_set_layout_capabilities(PP_MENU(mw->menu),caps);
115
pp_mainwindow_refresh(mw);
117
catch(const char *err)
119
ErrorMessage_Dialog(err);
124
static void open_preset(GtkWidget *wid,gpointer *ob)
126
pp_MainWindow *mw=(pp_MainWindow *)ob;
127
char *filename=File_Dialog("Open preset...",mw->state->filename);
131
mw->state->SetFilename(filename);
132
mw->state->ParseFile();
141
static void save_preset(GtkWidget *wid,gpointer *ob)
143
pp_MainWindow *mw=(pp_MainWindow *)ob;
145
mw->state->SaveFile();
149
static void save_as(GtkWidget *wid,gpointer *ob)
151
pp_MainWindow *mw=(pp_MainWindow *)ob;
153
char *filename=File_Save_Dialog("Save preset...",mw->state->filename,GTK_WIDGET(&mw->window));
157
mw->state->SetFilename(filename);
158
mw->state->SaveFile();
165
static void save_default(GtkWidget *wid,gpointer *ob)
167
pp_MainWindow *mw=(pp_MainWindow *)ob;
169
mw->state->SetDefaultFilename();
170
mw->state->SaveFile();
174
static void export_tiff(GtkWidget *wid,gpointer *ob)
176
pp_MainWindow *mw=(pp_MainWindow *)ob;
178
ExportTiff_Dialog(GTK_WINDOW(mw),*mw->state);
181
gchar *filename=File_Dialog("Export TIFF...",NULL);
187
CMTransformFactory *factory=mw->state->profilemanager.GetTransformFactory();
188
ImageSource *is=mw->state->layout->GetImageSource(mw->state->layout->GetCurrentPage(),CM_COLOURDEVICE_PRINTER,factory);
189
cerr << "Got imagesource" << endl;
190
// FIXME - deal with multiple pages
193
TIFFSaver ts(filename,is);
194
ProgressBar p("Saving TIFF",true,GTK_WIDGET(mw));
203
catch (const char *err)
205
ErrorMessage_Dialog(err,GTK_WIDGET(mw));
212
static void print_setup(GtkWidget *wid,gpointer *ob)
214
pp_MainWindow *mw=(pp_MainWindow *)ob;
215
PrintSetup_Dialog(GTK_WINDOW(mw),*mw->state);
216
pp_mainwindow_refresh(mw);
220
static void do_paths(GtkWidget *wid,gpointer *ob)
222
pp_MainWindow *mw=(pp_MainWindow *)ob;
223
Paths_Dialog(GTK_WINDOW(mw),*mw->state);
224
pp_mainwindow_refresh(mw);
227
static void doprint(GtkWidget *wid,gpointer *ob)
229
pp_MainWindow *mw=(pp_MainWindow *)ob;
230
ProgressBar p("Generating print data...",true,GTK_WIDGET(mw));
234
mw->state->layout->Print(&p);
236
catch (const char *err)
238
ErrorMessage_Dialog(err,GTK_WIDGET(mw));
243
static void colour_management(GtkWidget *wid,gpointer *ob)
245
pp_MainWindow *mw=(pp_MainWindow *)ob;
246
ColourManagement_Dialog(GTK_WINDOW(mw),*mw->state);
247
mw->state->layout->FlushThumbnails();
248
pp_mainwindow_refresh(mw);
252
static void units(GtkWidget *wid,gpointer *ob)
254
pp_MainWindow *mw=(pp_MainWindow *)ob;
255
Units_Dialog(GTK_WINDOW(mw),*mw->state);
256
(mw->state->layout->SetUnitFunc())(mw->layout,mw->state->GetUnits());
260
static void scaling(GtkWidget *wid,gpointer *ob)
262
pp_MainWindow *mw=(pp_MainWindow *)ob;
263
Scaling_Dialog(GTK_WINDOW(mw),*mw->state);
267
// Preview widget for file-selector...
269
static void updatepreview(GtkWidget *fc,void *ud)
271
GtkWidget *preview=GTK_WIDGET(ud);
272
gchar *fn=gtk_file_chooser_get_preview_filename(GTK_FILE_CHOOSER(fc));
24
#include "effects/effects_dialog.h"
25
#include "pp_menu_file.h"
26
#include "pp_menu_edit.h"
27
#include "pp_menu_layout.h"
28
#include "pp_menu_image.h"
29
#include "pp_menu_options.h"
30
#include "pp_menu_help.h"
34
#define _(x) gettext(x)
36
#include "pp_mainwindow.h"
43
static guint pp_mainwindow_signals[LAST_SIGNAL] = { 0 };
45
static void pp_mainwindow_class_init (pp_MainWindowClass *klass);
46
static void pp_mainwindow_init (pp_MainWindow *stpuicombo);
47
static void layout_changed(GtkWidget *wid,gpointer *ob);
51
// Functions invoked from the menus:
54
static void savegeometry(pp_MainWindow *mw)
57
gtk_window_get_position(GTK_WINDOW(mw),&x,&y);
58
gtk_window_get_size(GTK_WINDOW(mw),&w,&h);
60
mw->state->SetInt("Win_X",x);
61
mw->state->SetInt("Win_Y",y);
62
mw->state->SetInt("Win_W",w);
63
mw->state->SetInt("Win_H",h);
67
static void layout_selection_changed(GtkWidget *wid,gpointer *ob)
69
pp_MainWindow *mw=(pp_MainWindow *)ob;
71
PP_ROTATION rotation=ImageMenu_GetRotation(mw->uim);
72
bool allowcropping=ImageMenu_GetCropFlag(mw->uim);
73
bool removeimage=true;
74
Layout_ImageInfo *ii=mw->state->layout->FirstSelected();
277
GdkPixbuf *pb=egg_pixbuf_get_thumbnail_for_file(fn,EGG_PIXBUF_THUMBNAIL_NORMAL,&err);
280
gtk_image_set_from_pixbuf(GTK_IMAGE(preview),pb);
77
allowcropping=ii->allowcropping;
78
rotation=ii->rotation;
285
gtk_file_chooser_set_preview_widget_active(GTK_FILE_CHOOSER(fc),active);
289
static void add_image(GtkWidget *wid,gpointer *ob)
291
pp_MainWindow *mw=(pp_MainWindow *)ob;
292
PhotoPrint_State *state=mw->state;
294
GtkWidget *sel=gtk_file_selection_new("Add images...");
295
gtk_file_selection_set_select_multiple(GTK_FILE_SELECTION(sel),TRUE);
297
gtk_file_selection_set_filename(GTK_FILE_SELECTION(sel),mw->prevfile);
298
g_free(mw->prevfile);
301
gint result=gtk_dialog_run(GTK_DIALOG(sel));
302
if(result==GTK_RESPONSE_OK)
305
gchar **files=f=gtk_file_selection_get_selections(GTK_FILE_SELECTION(sel));
312
ProgressBar progress("Adding images...",true,GTK_WIDGET(mw));
318
pp_Menu *menu=PP_MENU(mw->menu);
319
lastpage=state->layout->AddImage(*f,menu->allowcropping,menu->rotation);
321
if(!(progress.DoProgress(i,count)))
327
mw->prevfile=g_strdup(*f);
328
state->layout->SetCurrentPage(lastpage);
332
gtk_widget_destroy(GTK_WIDGET(sel));
336
sel = gtk_file_chooser_dialog_new ("Open File",
337
GTK_WINDOW(GTK_WINDOW(&mw->window)),
338
GTK_FILE_CHOOSER_ACTION_OPEN,
339
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
340
GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
343
gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(sel),TRUE);
345
gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(sel),mw->prevfile);
349
char *dirname=substitute_homedir("$HOME\\My Documents\\My Pictures");
351
char *dirname=substitute_homedir("$HOME");
353
gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(sel),dirname);
355
g_free(mw->prevfile);
358
GtkWidget *preview=gtk_image_new();
359
gtk_file_chooser_set_preview_widget(GTK_FILE_CHOOSER(sel),GTK_WIDGET(preview));
360
g_signal_connect(G_OBJECT(sel),"selection-changed",G_CALLBACK(updatepreview),preview);
362
if (gtk_dialog_run (GTK_DIALOG (sel)) == GTK_RESPONSE_ACCEPT)
364
GSList *filenames=gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(sel));
365
GSList *current=filenames;
373
current=g_slist_next(current);
376
ProgressBar progress("Adding images...",true,GTK_WIDGET(mw));
383
char *fn=(char *)current->data;
385
pp_Menu *menu=PP_MENU(mw->menu);
386
lastpage=state->layout->AddImage(fn,menu->allowcropping,menu->rotation);
388
if(!(progress.DoProgress(i,count)))
392
current=g_slist_next(current);
394
mw->prevfile=g_strdup(fn);
397
state->layout->SetCurrentPage(lastpage);
398
g_slist_free(filenames);
85
if(rotation!=ii->rotation)
86
rotation=PP_ROTATION_NONE;
87
allowcropping&=ii->allowcropping;
88
ii=mw->state->layout->NextSelected();
91
ImageMenu_SetCropFlag(mw->uim,allowcropping);
92
ImageMenu_SetRotation(mw->uim,rotation);
96
static void layout_popupmenu(GtkWidget *wid,gpointer *ob)
98
layout_selection_changed(NULL,ob);
99
pp_MainWindow *mw=(pp_MainWindow *)ob;
100
ImageMenu_DoPopup(mw->uim);
104
static void layout_changed(GtkWidget *wid,gpointer *ob)
106
pp_MainWindow *mw=(pp_MainWindow *)ob;
109
mw->state->layout->RefreshWidget(mw->layout);
113
void pp_mainwindow_refresh(pp_MainWindow *ob)
115
cerr << "Refreshing window" << endl;
117
ob->state->layout->RefreshWidget(ob->layout);
119
LayoutMenu_SetLayout(ob->uim,ob->state->layout->GetType());
124
pp_mainwindow_new (PhotoPrint_State *state)
126
pp_MainWindow *ob=PP_MAINWINDOW(g_object_new (pp_mainwindow_get_type (), NULL));
128
gtk_window_set_title (GTK_WINDOW (ob), PACKAGE_STRING);
129
gtk_window_set_default_size(GTK_WINDOW(ob),state->FindInt("Win_W"),state->FindInt("Win_H"));
130
gtk_window_move(GTK_WINDOW(ob),state->FindInt("Win_X"),state->FindInt("Win_Y"));
133
ob->vbox=gtk_vbox_new(FALSE,0);
134
gtk_container_add(GTK_CONTAINER(ob),ob->vbox);
135
gtk_widget_show(ob->vbox);
140
GtkAccelGroup *accel_group;
141
ob->uim = gtk_ui_manager_new ();
143
BuildFileMenu(ob,ob->uim);
144
BuildEditMenu(ob,ob->uim);
145
BuildLayoutMenu(ob,ob->uim);
146
BuildImageMenu(ob,ob->uim);
147
BuildOptionsMenu(ob,ob->uim);
148
BuildHelpMenu(ob,ob->uim);
150
accel_group = gtk_ui_manager_get_accel_group (ob->uim);
151
gtk_window_add_accel_group (GTK_WINDOW (ob), accel_group);
154
tmp=gtk_ui_manager_get_widget(ob->uim,"/MainMenu/FileMenu/PrintPreview");
155
gtk_widget_set_sensitive(tmp,false);
156
tmp=gtk_ui_manager_get_widget(ob->uim,"/MainMenu/EditMenu/Cut");
157
gtk_widget_set_sensitive(tmp,false);
158
tmp=gtk_ui_manager_get_widget(ob->uim,"/MainMenu/EditMenu/Copy");
159
gtk_widget_set_sensitive(tmp,false);
160
tmp=gtk_ui_manager_get_widget(ob->uim,"/MainMenu/EditMenu/Paste");
161
gtk_widget_set_sensitive(tmp,false);
163
menubar = gtk_ui_manager_get_widget (ob->uim, "/MainMenu");
164
gtk_box_pack_start(GTK_BOX(ob->vbox),menubar,FALSE,TRUE,0);
165
gtk_widget_show(menubar);
168
if((ob->layout=state->layout->CreateWidget()))
170
gtk_box_pack_start(GTK_BOX(ob->vbox),ob->layout,TRUE,TRUE,0);
171
gtk_widget_show(ob->layout);
172
g_signal_connect(G_OBJECT(ob->layout),"changed",G_CALLBACK(layout_changed),ob);
173
g_signal_connect(G_OBJECT(ob->layout),"popupmenu",G_CALLBACK(layout_popupmenu),ob);
174
g_signal_connect(G_OBJECT(ob->layout),"selection_changed",G_CALLBACK(layout_selection_changed),ob);
177
int caps=ob->state->layout->GetCapabilities();
178
ImageMenu_SetLayoutCapabilities(ob->uim,caps);
180
pp_mainwindow_refresh(ob);
182
return(GTK_WIDGET(ob));
187
pp_mainwindow_get_type (void)
189
static GType stpuic_type = 0;
193
static const GTypeInfo pp_mainwindow_info =
195
sizeof (pp_MainWindowClass),
196
NULL, /* base_init */
197
NULL, /* base_finalize */
198
(GClassInitFunc) pp_mainwindow_class_init,
199
NULL, /* class_finalize */
200
NULL, /* class_data */
201
sizeof (pp_MainWindow),
203
(GInstanceInitFunc) pp_mainwindow_init,
205
stpuic_type = g_type_register_static (GTK_TYPE_WINDOW, "pp_MainWindow", &pp_mainwindow_info, (GTypeFlags)0);
212
pp_mainwindow_class_init (pp_MainWindowClass *klass)
214
pp_mainwindow_signals[CHANGED_SIGNAL] =
215
g_signal_new ("changed",
216
G_TYPE_FROM_CLASS (klass),
217
GSignalFlags(G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION),
218
G_STRUCT_OFFSET (pp_MainWindowClass, changed),
220
g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
225
pp_mainwindow_init (pp_MainWindow *ob)
233
void pp_mainwindow_rebuild(pp_MainWindow *mw)
237
ProgressBar p(_("Transferring images..."),true,GTK_WIDGET(mw));
238
if(mw->state->NewLayout(&p))
240
gtk_widget_destroy(mw->layout);
242
if((mw->layout=mw->state->layout->CreateWidget()))
244
gtk_box_pack_start(GTK_BOX(mw->vbox),mw->layout,TRUE,TRUE,0);
245
gtk_widget_show(mw->layout);
246
g_signal_connect(G_OBJECT(mw->layout),"changed",G_CALLBACK(layout_changed),mw);
247
g_signal_connect(G_OBJECT(mw->layout),"popupmenu",G_CALLBACK(layout_popupmenu),mw);
248
g_signal_connect(G_OBJECT(mw->layout),"selection_changed",G_CALLBACK(layout_selection_changed),mw);
250
mw->state->layout->FlushThumbnails();
401
gtk_widget_destroy (sel);
403
pp_mainwindow_refresh(mw);
407
static void clearlayout(GtkWidget *wid,gpointer *ob)
409
pp_MainWindow *mw=(pp_MainWindow *)ob;
410
mw->state->layout->Clear();
411
pp_mainwindow_refresh(mw);
415
static void layoutsingle(GtkWidget *wid,gpointer *ob)
417
pp_MainWindow *mw=(pp_MainWindow *)ob;
418
mw->state->layoutdb.SetString("LayoutType","Single");
421
mw->state->layout->LayoutToDB(mw->state->layoutdb);
427
static void layoutmultiple(GtkWidget *wid,gpointer *ob)
429
pp_MainWindow *mw=(pp_MainWindow *)ob;
430
mw->state->layoutdb.SetString("LayoutType","NUp");
433
mw->state->layout->LayoutToDB(mw->state->layoutdb);
439
static void layoutcarousel(GtkWidget *wid,gpointer *ob)
441
pp_MainWindow *mw=(pp_MainWindow *)ob;
442
mw->state->layoutdb.SetString("LayoutType","Carousel");
445
mw->state->layout->LayoutToDB(mw->state->layoutdb);
451
static void layoutposter(GtkWidget *wid,gpointer *ob)
453
pp_MainWindow *mw=(pp_MainWindow *)ob;
454
mw->state->layoutdb.SetString("LayoutType","Poster");
457
mw->state->layout->LayoutToDB(mw->state->layoutdb);
463
static void layout_changed(GtkWidget *wid,gpointer *ob)
465
pp_MainWindow *mw=(pp_MainWindow *)ob;
468
mw->state->layout->RefreshWidget(mw->layout);
472
static void layout_setbackground(GtkWidget *wid,gpointer *ob)
474
pp_MainWindow *mw=(pp_MainWindow *)ob;
475
static char *prevfile=NULL;
476
// Need to get existing filename...
478
char *bg=Background_Dialog(&mw->window,*mw->state,prevfile);
481
cerr << "Selected " << bg << endl;
483
mw->state->layout->SetBackground(bg);
487
pp_mainwindow_refresh(mw);
491
static void about(GtkWidget *wid,gpointer *ob)
493
pp_MainWindow *mw=(pp_MainWindow *)ob;
494
About_Dialog(GTK_WINDOW(mw));
498
static void image_remove(GtkWidget *wid,gpointer *ob)
500
pp_MainWindow *mw=(pp_MainWindow *)ob;
501
Layout_ImageInfo *ii=mw->state->layout->FirstSelected();
505
ii=mw->state->layout->FirstSelected();
507
mw->state->layout->Reflow();
508
pp_mainwindow_refresh(mw);
512
static void image_allowcropping(GtkWidget *wid,gpointer *ob)
514
pp_MainWindow *mw=(pp_MainWindow *)ob;
515
pp_Menu *menu=PP_MENU(mw->menu);
516
bool checked=menu->allowcropping;
517
cerr << "Checked:" << checked << endl;
519
Layout_ImageInfo *ii=mw->state->layout->FirstSelected();
522
ii->allowcropping=checked;
523
ii=mw->state->layout->NextSelected();
525
pp_mainwindow_refresh(mw);
529
static void image_rotation(GtkWidget *wid,gpointer *ob)
531
pp_MainWindow *mw=(pp_MainWindow *)ob;
532
pp_Menu *menu=PP_MENU(mw->menu);
533
enum PP_ROTATION rotation=menu->rotation;
535
Layout_ImageInfo *ii=mw->state->layout->FirstSelected();
538
ii->rotation=rotation;
539
ii=mw->state->layout->NextSelected();
541
pp_mainwindow_refresh(mw);
545
static void image_setmask(GtkWidget *wid,gpointer *ob)
547
pp_MainWindow *mw=(pp_MainWindow *)ob;
548
static char *prevfile=NULL;
549
// Need to get existing filename...
551
char *mask=ImageMask_Dialog(&mw->window,*mw->state,prevfile);
554
cerr << "Selected " << mask << endl;
555
Layout_ImageInfo *ii=mw->state->layout->FirstSelected();
559
ii=mw->state->layout->NextSelected();
564
pp_mainwindow_refresh(mw);
b'static void image_setcolourprofile(GtkWidget *wid,gpointer *ob)'
569
pp_MainWindow *mw=(pp_MainWindow *)ob;
570
static char *prevfile=NULL;
571
// Need to get existing filename...
573
Layout_ImageInfo *ii=mw->state->layout->FirstSelected();
575
SetCustomProfileDialog(&mw->window,*mw->state,ii);
576
pp_mainwindow_refresh(mw);
252
int caps=mw->state->layout->GetCapabilities();
253
ImageMenu_SetLayoutCapabilities(mw->uim,caps);
580
static void edit_selectall(GtkWidget *wid,gpointer *ob)
582
pp_MainWindow *mw=(pp_MainWindow *)ob;
583
mw->state->layout->SelectAll();
584
pp_mainwindow_refresh(mw);
588
static void edit_selectnone(GtkWidget *wid,gpointer *ob)
590
pp_MainWindow *mw=(pp_MainWindow *)ob;
591
mw->state->layout->SelectNone();
592
pp_mainwindow_refresh(mw);
596
void pp_mainwindow_refresh(pp_MainWindow *ob)
598
cerr << "Refreshing window" << endl;
600
ob->state->layout->RefreshWidget(ob->layout);
604
g_signal_handlers_block_matched (G_OBJECT(ob->menu),G_SIGNAL_MATCH_DATA,
605
0, 0, NULL, NULL, ob);
606
pp_menu_set_layout(PP_MENU(ob->menu),ob->state->layout->GetType());
607
pp_menu_refresh(PP_MENU(ob->menu));
608
g_signal_handlers_unblock_matched (G_OBJECT(ob->menu),G_SIGNAL_MATCH_DATA,
609
0, 0, NULL, NULL, ob);
615
pp_mainwindow_new (PhotoPrint_State *state)
617
pp_MainWindow *ob=PP_MAINWINDOW(g_object_new (pp_mainwindow_get_type (), NULL));
619
gtk_window_set_title (GTK_WINDOW (ob), PACKAGE_STRING);
620
gtk_window_set_default_size(GTK_WINDOW(ob),state->FindInt("Win_W"),state->FindInt("Win_H"));
621
gtk_window_move(GTK_WINDOW(ob),state->FindInt("Win_X"),state->FindInt("Win_Y"));
624
ob->vbox=gtk_vbox_new(FALSE,0);
625
gtk_container_add(GTK_CONTAINER(ob),ob->vbox);
626
gtk_widget_show(ob->vbox);
628
ob->menu=pp_menu_new();
629
gtk_window_add_accel_group (GTK_WINDOW (ob), pp_menu_get_accels(PP_MENU(ob->menu)));
630
gtk_box_pack_start(GTK_BOX(ob->vbox),ob->menu,FALSE,TRUE,0);
631
gtk_widget_show(ob->menu);
633
g_signal_connect(G_OBJECT(ob->menu),"file_openpreset",G_CALLBACK(open_preset),ob);
634
g_signal_connect(G_OBJECT(ob->menu),"file_savepreset",G_CALLBACK(save_preset),ob);
635
g_signal_connect(G_OBJECT(ob->menu),"file_saveas",G_CALLBACK(save_as),ob);
636
g_signal_connect(G_OBJECT(ob->menu),"file_savedefault",G_CALLBACK(save_default),ob);
637
g_signal_connect(G_OBJECT(ob->menu),"file_exporttiff",G_CALLBACK(export_tiff),ob);
638
g_signal_connect(G_OBJECT(ob->menu),"file_printsetup",G_CALLBACK(print_setup),ob);
639
g_signal_connect(G_OBJECT(ob->menu),"file_print",G_CALLBACK(doprint),ob);
641
g_signal_connect(G_OBJECT(ob->menu),"edit_selectall",G_CALLBACK(edit_selectall),ob);
642
g_signal_connect(G_OBJECT(ob->menu),"edit_selectnone",G_CALLBACK(edit_selectnone),ob);
644
g_signal_connect(G_OBJECT(ob->menu),"image_addimage",G_CALLBACK(add_image),ob);
645
g_signal_connect(G_OBJECT(ob->menu),"image_clearlayout",G_CALLBACK(clearlayout),ob);
647
g_signal_connect(G_OBJECT(ob->menu),"layout_single",G_CALLBACK(layoutsingle),ob);
648
g_signal_connect(G_OBJECT(ob->menu),"layout_multiple",G_CALLBACK(layoutmultiple),ob);
649
g_signal_connect(G_OBJECT(ob->menu),"layout_carousel",G_CALLBACK(layoutcarousel),ob);
650
g_signal_connect(G_OBJECT(ob->menu),"layout_poster",G_CALLBACK(layoutposter),ob);
651
g_signal_connect(G_OBJECT(ob->menu),"layout_setbackground",G_CALLBACK(layout_setbackground),ob);
653
g_signal_connect(G_OBJECT(ob->menu),"image_remove",G_CALLBACK(image_remove),ob);
654
g_signal_connect(G_OBJECT(ob->menu),"image_allowcropping",G_CALLBACK(image_allowcropping),ob);
655
g_signal_connect(G_OBJECT(ob->menu),"image_rotation",G_CALLBACK(image_rotation),ob);
656
g_signal_connect(G_OBJECT(ob->menu),"image_setmask",G_CALLBACK(image_setmask),ob);
657
g_signal_connect(G_OBJECT(ob->menu),"image_setcolourprofile",G_CALLBACK(image_setcolourprofile),ob);
659
g_signal_connect(G_OBJECT(ob->menu),"options_paths",G_CALLBACK(do_paths),ob);
660
g_signal_connect(G_OBJECT(ob->menu),"options_colourmanagement",G_CALLBACK(colour_management),ob);
661
g_signal_connect(G_OBJECT(ob->menu),"options_units",G_CALLBACK(units),ob);
662
g_signal_connect(G_OBJECT(ob->menu),"options_scaling",G_CALLBACK(scaling),ob);
664
g_signal_connect(G_OBJECT(ob->menu),"help_about",G_CALLBACK(about),ob);
666
if((ob->layout=state->layout->CreateWidget()))
668
gtk_box_pack_start(GTK_BOX(ob->vbox),ob->layout,TRUE,TRUE,0);
669
gtk_widget_show(ob->layout);
670
g_signal_connect(G_OBJECT(ob->layout),"changed",G_CALLBACK(layout_changed),ob);
671
g_signal_connect(G_OBJECT(ob->layout),"popupmenu",G_CALLBACK(layout_popupmenu),ob);
672
g_signal_connect(G_OBJECT(ob->layout),"selection_changed",G_CALLBACK(layout_selection_changed),ob);
674
int caps=ob->state->layout->GetCapabilities();
675
pp_menu_set_layout_capabilities(PP_MENU(ob->menu),caps);
677
pp_mainwindow_refresh(ob);
679
return(GTK_WIDGET(ob));
684
pp_mainwindow_get_type (void)
686
static GType stpuic_type = 0;
690
static const GTypeInfo pp_mainwindow_info =
692
sizeof (pp_MainWindowClass),
693
NULL, /* base_init */
694
NULL, /* base_finalize */
695
(GClassInitFunc) pp_mainwindow_class_init,
696
NULL, /* class_finalize */
697
NULL, /* class_data */
698
sizeof (pp_MainWindow),
700
(GInstanceInitFunc) pp_mainwindow_init,
702
stpuic_type = g_type_register_static (GTK_TYPE_WINDOW, "pp_MainWindow", &pp_mainwindow_info, (GTypeFlags)0);
709
pp_mainwindow_class_init (pp_MainWindowClass *klass)
711
pp_mainwindow_signals[CHANGED_SIGNAL] =
712
g_signal_new ("changed",
713
G_TYPE_FROM_CLASS (klass),
714
GSignalFlags(G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION),
715
G_STRUCT_OFFSET (pp_MainWindowClass, changed),
717
g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
722
pp_mainwindow_init (pp_MainWindow *ob)
255
pp_mainwindow_refresh(mw);
257
catch(const char *err)
259
ErrorMessage_Dialog(err);