~ubuntu-branches/ubuntu/karmic/photoprint/karmic

« back to all changes in this revision

Viewing changes to pp_menu_layout.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Milan Zamazal
  • Date: 2007-05-01 16:32:13 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20070501163213-ni1933khtg9fdvn5
Tags: 0.3.5-2
Move to unstable.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include <iostream>
 
2
 
 
3
#include <gtk/gtkstock.h>
 
4
#include <gtk/gtkradioaction.h>
 
5
#include <gtk/gtkcheckmenuitem.h>
 
6
#include <gtk/gtkmain.h>
 
7
 
 
8
#include "pp_menu_layout.h"
 
9
#include "pp_mainwindow.h"
 
10
#include "dialogs.h"
 
11
#include "support/generaldialogs.h"
 
12
#include "support/progressbar.h"
 
13
 
 
14
#include "config.h"
 
15
#include "gettext.h"
 
16
#define _(x) gettext(x)
 
17
#define N_(x) gettext_noop(x)
 
18
 
 
19
using namespace std;
 
20
 
 
21
enum LAYOUTRADIOOPTIONS {LAYOUT_NUP,LAYOUT_SINGLE,LAYOUT_POSTER,LAYOUT_CAROUSEL};
 
22
 
 
23
 
 
24
static void layoutmenu_clearlayout(GtkAction *act,gpointer *ob)
 
25
{
 
26
        pp_MainWindow *mw=(pp_MainWindow *)ob;
 
27
        mw->state->layout->Clear();
 
28
        pp_mainwindow_refresh(mw);
 
29
}
 
30
 
 
31
 
 
32
static void layoutmenu_single(gpointer *ob)
 
33
{
 
34
        pp_MainWindow *mw=(pp_MainWindow *)ob;
 
35
        mw->state->layoutdb.SetString("LayoutType","Single");
 
36
        
 
37
        if(mw->layout)
 
38
                mw->state->layout->LayoutToDB(mw->state->layoutdb);
 
39
 
 
40
        pp_mainwindow_rebuild(mw);
 
41
}
 
42
 
 
43
 
 
44
static void layoutmenu_nup(gpointer *ob)
 
45
{
 
46
        pp_MainWindow *mw=(pp_MainWindow *)ob;
 
47
        mw->state->layoutdb.SetString("LayoutType","NUp");
 
48
 
 
49
        if(mw->layout)
 
50
                mw->state->layout->LayoutToDB(mw->state->layoutdb);
 
51
 
 
52
        pp_mainwindow_rebuild(mw);
 
53
}
 
54
 
 
55
 
 
56
static void layoutmenu_carousel(gpointer *ob)
 
57
{
 
58
        pp_MainWindow *mw=(pp_MainWindow *)ob;
 
59
        mw->state->layoutdb.SetString("LayoutType","Carousel");
 
60
 
 
61
        if(mw->layout)
 
62
                mw->state->layout->LayoutToDB(mw->state->layoutdb);
 
63
 
 
64
        pp_mainwindow_rebuild(mw);
 
65
}
 
66
 
 
67
 
 
68
static void layoutmenu_poster(gpointer *ob)
 
69
{
 
70
        pp_MainWindow *mw=(pp_MainWindow *)ob;
 
71
        mw->state->layoutdb.SetString("LayoutType","Poster");
 
72
 
 
73
        if(mw->layout)
 
74
                mw->state->layout->LayoutToDB(mw->state->layoutdb);
 
75
 
 
76
        pp_mainwindow_rebuild(mw);
 
77
}
 
78
 
 
79
 
 
80
static void layoutmenu_radio_dispatch(GtkAction *act,GtkRadioAction *ra,gpointer *ob)
 
81
{
 
82
        switch(gtk_radio_action_get_current_value(ra))
 
83
        {
 
84
                case LAYOUT_NUP:
 
85
                        layoutmenu_nup(ob);
 
86
                        break;
 
87
                case LAYOUT_SINGLE:
 
88
                        layoutmenu_single(ob);
 
89
                        break;
 
90
                case LAYOUT_CAROUSEL:
 
91
                        layoutmenu_carousel(ob);
 
92
                        break;
 
93
                case LAYOUT_POSTER:
 
94
                        layoutmenu_poster(ob);
 
95
                        break;
 
96
        }
 
97
}
 
98
 
 
99
 
 
100
static void layoutmenu_setbackground(GtkAction *act,gpointer *ob)
 
101
{
 
102
        pp_MainWindow *mw=(pp_MainWindow *)ob;
 
103
        static char *prevfile=NULL;
 
104
        // Need to get existing filename...
 
105
 
 
106
        char *bg=Background_Dialog(&mw->window,*mw->state,prevfile);
 
107
 
 
108
        if(bg)
 
109
                cerr << "Selected " << bg << endl;
 
110
 
 
111
        mw->state->layout->SetBackground(bg);
 
112
//      if(prevfile)
 
113
//              free(prevfile);
 
114
        prevfile=bg;
 
115
        pp_mainwindow_refresh(mw);
 
116
}
 
117
 
 
118
 
 
119
 
 
120
 
 
121
static GtkActionEntry layoutmenu_entries[] = {
 
122
  { "LayoutMenu", NULL, N_("_Layout") },
 
123
  
 
124
  { "ClearLayout", NULL, N_("_Clear Layout"), "<control>K", N_("Remove all images from the layout"), G_CALLBACK(layoutmenu_clearlayout) },
 
125
  { "Set Background", NULL, N_("Set _Background"), "<control>B", N_("Set a background image for the current layout"), G_CALLBACK(layoutmenu_setbackground) },
 
126
};
 
127
 
 
128
 
 
129
static GtkRadioActionEntry layoutmenu_radio_entries[] = {
 
130
  { "AutoLayout", NULL, N_("_Auto Layout"), NULL, N_("Automatically place images in a grid"), LAYOUT_NUP },
 
131
  { "Poster", NULL, N_("_Poster"), NULL, N_("Print an image in multiple pages, to be assembled into a poster"), LAYOUT_POSTER },
 
132
  { "Carousel", NULL, N_("_Carousel"), NULL, N_("Fade images into a circular 'carousel' - ideal for CD labels."), LAYOUT_CAROUSEL },
 
133
  { "ManualSize", NULL, N_("_Manual Size"), NULL, N_("Print images on a single sheet, at a specified scale."), LAYOUT_SINGLE }
 
134
};
 
135
 
 
136
 
 
137
static const char *layoutmenu_ui_description =
 
138
"<ui>"
 
139
"  <menubar name='MainMenu'>"
 
140
"    <menu action='LayoutMenu'>"
 
141
"      <menuitem action='ClearLayout'/>"
 
142
"      <menuitem action='Set Background'/>"
 
143
"      <separator/>"
 
144
"      <menuitem action='AutoLayout'/>"
 
145
"      <menuitem action='Poster'/>"
 
146
"      <menuitem action='Carousel'/>"
 
147
"      <menuitem action='ManualSize'/>"
 
148
"    </menu>"
 
149
"  </menubar>"
 
150
"</ui>";
 
151
 
 
152
 
 
153
void BuildLayoutMenu(void *userdata,GtkUIManager *ui_manager)
 
154
{
 
155
        GError *error=NULL;
 
156
        GtkActionGroup *action_group;
 
157
        action_group = gtk_action_group_new ("LayoutMenuActions");
 
158
        gtk_action_group_set_translation_domain(action_group,PACKAGE);
 
159
        gtk_action_group_add_actions (action_group, layoutmenu_entries, G_N_ELEMENTS (layoutmenu_entries), userdata);
 
160
        gtk_action_group_add_radio_actions (action_group, layoutmenu_radio_entries, G_N_ELEMENTS (layoutmenu_radio_entries), 0, G_CALLBACK(layoutmenu_radio_dispatch), userdata);
 
161
        gtk_ui_manager_insert_action_group (ui_manager, action_group, 0);
 
162
        
 
163
        if (!gtk_ui_manager_add_ui_from_string (ui_manager, layoutmenu_ui_description, -1, &error))
 
164
                throw error->message;
 
165
}
 
166
 
 
167
 
 
168
void LayoutMenu_SetLayout(GtkUIManager *ui_manager,const char *layouttype)
 
169
{
 
170
        enum LAYOUTRADIOOPTIONS item=LAYOUT_NUP;
 
171
        if(strcmp(layouttype,"Single")==0)
 
172
                item=LAYOUT_SINGLE;
 
173
        if(strcmp(layouttype,"NUp")==0)
 
174
                item=LAYOUT_NUP;
 
175
        if(strcmp(layouttype,"Poster")==0)
 
176
                item=LAYOUT_POSTER;
 
177
        if(strcmp(layouttype,"Carousel")==0)
 
178
                item=LAYOUT_CAROUSEL;
 
179
 
 
180
        cerr << "Setting layout radio option to... " << item << endl;
 
181
 
 
182
#if 0
 
183
        GtkAction *act=gtk_ui_manager_get_action(ui_manager,"/MainMenu/LayoutMenu/AutoLayout");
 
184
        if(act)
 
185
                gtk_radio_action_set_current_value(GTK_RADIO_ACTION(act),item);
 
186
 
 
187
#else
 
188
        const char *menupaths[]=
 
189
        {
 
190
                "/MainMenu/LayoutMenu/AutoLayout",
 
191
                "/MainMenu/LayoutMenu/ManualSize",
 
192
                "/MainMenu/LayoutMenu/Poster",
 
193
                "/MainMenu/LayoutMenu/Carousel"
 
194
        };
 
195
 
 
196
        GtkWidget *w;
 
197
 
 
198
        for(unsigned int i=0;i<(sizeof(menupaths)/sizeof(const char *));++i)
 
199
        {
 
200
                w=gtk_ui_manager_get_widget(ui_manager,menupaths[i]);
 
201
                if(w)
 
202
                {
 
203
                        cerr << menupaths[i] << " -> " << (i==item) << endl;
 
204
                        gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(w),i==item);
 
205
                }
 
206
        }
 
207
#endif
 
208
}