1
////////////////////////////////////////////////////////////////////////////
2
// NoteCase notes manager project <http://notecase.sf.net>
4
// This code is licensed under BSD license.See "license.txt" for more details.
6
// File: Dialog to prepare image for insertion into the document (resize + select format)
7
////////////////////////////////////////////////////////////////////////////
9
#include "PixPropertiesDlg.h"
11
#include "callbacks.h"
12
#include "lib/debug.h"
18
#define snprintf _snprintf
23
extern GtkWidget *window1;
24
int gtkMessageBox(const char *szText, int nButtons = GTK_BUTTONS_OK, int nIcon = GTK_MESSAGE_INFO);
26
static void on_resize_combo_selected (GtkComboBox *widget, gpointer user_data);
27
static void on_use_png_checked (GtkMenuItem *menuitem, gpointer user_data);
29
PixPropertiesDlg::PixPropertiesDlg()
33
PixPropertiesDlg::~PixPropertiesDlg()
36
gtk_window_present(GTK_WINDOW(window1)); //activate main window
39
void PixPropertiesDlg::Create()
41
m_pDialog = create_node_properties_dialog ();
43
GtkWidget *label25 = lookup_widget(m_pDialog, "label25");
45
sprintf(szBuffer, "%d x %d", m_nOrigWidth, m_nOrigHeight);
46
gtk_label_set_text(GTK_LABEL(label25), szBuffer);
48
//fill internal icons combo
49
GtkWidget *cbo2 = lookup_widget(m_pDialog, "comboboxentry2");
50
gtk_combo_box_append_text(GTK_COMBO_BOX(cbo2), "100%");
51
gtk_combo_box_append_text(GTK_COMBO_BOX(cbo2), "90%");
52
gtk_combo_box_append_text(GTK_COMBO_BOX(cbo2), "80%");
53
gtk_combo_box_append_text(GTK_COMBO_BOX(cbo2), "75%");
54
gtk_combo_box_append_text(GTK_COMBO_BOX(cbo2), "70%");
55
gtk_combo_box_append_text(GTK_COMBO_BOX(cbo2), "60%");
56
gtk_combo_box_append_text(GTK_COMBO_BOX(cbo2), "50%");
57
gtk_combo_box_append_text(GTK_COMBO_BOX(cbo2), "40%");
58
gtk_combo_box_append_text(GTK_COMBO_BOX(cbo2), "30%");
59
gtk_combo_box_append_text(GTK_COMBO_BOX(cbo2), "25%");
60
gtk_combo_box_append_text(GTK_COMBO_BOX(cbo2), "20%");
61
gtk_combo_box_append_text(GTK_COMBO_BOX(cbo2), "10%");
63
//select first entry in combo (must not be empty selection)
64
gtk_combo_box_set_active(GTK_COMBO_BOX(cbo2), 0);
69
GtkWidget* PixPropertiesDlg::create_node_properties_dialog ()
71
GtkWidget *node_properties_dialog;
72
GtkWidget *dialog_vbox5;
80
GtkWidget *comboboxentry2;
81
GtkWidget *dialog_action_area5;
82
GtkWidget *cancelbutton5;
85
node_properties_dialog = gtk_dialog_new ();
86
gtk_window_set_title (GTK_WINDOW (node_properties_dialog), _("Image Properties"));
87
gtk_window_set_type_hint (GTK_WINDOW (node_properties_dialog), GDK_WINDOW_TYPE_HINT_DIALOG);
88
gtk_window_set_modal (GTK_WINDOW (node_properties_dialog), TRUE);
89
gtk_window_set_skip_pager_hint (GTK_WINDOW (node_properties_dialog), TRUE);
90
#ifndef _WIN32 //TOFIX API is buggy on Win32 (kills modal dialog state)
91
gtk_window_set_skip_taskbar_hint (GTK_WINDOW (node_properties_dialog), TRUE);
93
gtk_window_set_position(GTK_WINDOW (node_properties_dialog), GTK_WIN_POS_CENTER_ON_PARENT);
94
gtk_window_set_transient_for(GTK_WINDOW (node_properties_dialog), GTK_WINDOW(window1)); //set parent
96
dialog_vbox5 = GTK_DIALOG (node_properties_dialog)->vbox;
97
gtk_widget_show (dialog_vbox5);
99
table4 = gtk_table_new (2, 2, FALSE);
100
gtk_widget_show (table4);
101
gtk_box_pack_start (GTK_BOX (dialog_vbox5), table4, TRUE, TRUE, 0);
103
label21 = gtk_label_new (_("Original size:"));
104
gtk_widget_show (label21);
105
gtk_table_attach (GTK_TABLE (table4), label21, 0, 1, 0, 1,
106
(GtkAttachOptions) (GTK_FILL),
107
(GtkAttachOptions) (0), 2, 2);
108
gtk_misc_set_alignment (GTK_MISC (label21), 0, 0.5);
110
label25 = gtk_label_new (_("unknown"));
111
gtk_widget_show (label25);
112
gtk_table_attach (GTK_TABLE (table4), label25, 1, 2, 0, 1,
113
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
114
(GtkAttachOptions) (0), 2, 2);
116
label27 = gtk_label_new (_("Selected size:"));
117
gtk_widget_show (label27);
118
gtk_table_attach (GTK_TABLE (table4), label27, 0, 1, 1, 2,
119
(GtkAttachOptions) (GTK_FILL),
120
(GtkAttachOptions) (0), 2, 2);
121
gtk_misc_set_alignment (GTK_MISC (label27), 0, 0.5);
123
label28 = gtk_label_new (_("unknown"));
124
gtk_widget_show (label28);
125
gtk_table_attach (GTK_TABLE (table4), label28, 1, 2, 1, 2,
126
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
127
(GtkAttachOptions) (0), 2, 2);
129
label26 = gtk_label_new (_("Resize to:"));
130
gtk_widget_show (label26);
131
gtk_table_attach (GTK_TABLE (table4), label26, 0, 1, 2, 3,
132
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
133
(GtkAttachOptions) (0), 2, 2);
134
gtk_misc_set_alignment (GTK_MISC (label26), 0, 0.5);
136
comboboxentry2 = gtk_combo_box_new_text ();
137
gtk_widget_show (comboboxentry2);
138
gtk_table_attach (GTK_TABLE (table4), comboboxentry2, 1, 2, 2, 3,
139
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
140
(GtkAttachOptions) (GTK_FILL), 2, 2);
142
chk1 = gtk_check_button_new_with_mnemonic (_("Store as PNG"));
143
gtk_widget_show (chk1);
144
gtk_table_attach (GTK_TABLE (table4), chk1, 0, 2, 3, 4,
145
(GtkAttachOptions) (GTK_FILL),
146
(GtkAttachOptions) (0), 2, 2);
148
dialog_action_area5 = GTK_DIALOG (node_properties_dialog)->action_area;
149
gtk_widget_show (dialog_action_area5);
150
gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area5), GTK_BUTTONBOX_END);
152
cancelbutton5 = gtk_button_new_from_stock ("gtk-cancel");
153
gtk_widget_show (cancelbutton5);
154
gtk_dialog_add_action_widget (GTK_DIALOG (node_properties_dialog), cancelbutton5, GTK_RESPONSE_CANCEL);
155
GTK_WIDGET_SET_FLAGS (cancelbutton5, GTK_CAN_DEFAULT);
157
okbutton5 = gtk_button_new_from_stock ("gtk-ok");
158
gtk_widget_show (okbutton5);
159
gtk_dialog_add_action_widget (GTK_DIALOG (node_properties_dialog), okbutton5, GTK_RESPONSE_OK);
160
GTK_WIDGET_SET_FLAGS (okbutton5, GTK_CAN_DEFAULT);
162
g_signal_connect (comboboxentry2, "changed", G_CALLBACK (on_resize_combo_selected), this);
163
g_signal_connect (chk1, "clicked", G_CALLBACK (on_use_png_checked), this);
165
/* Store pointers to all widgets, for use by lookup_widget(). */
166
GLADE_HOOKUP_OBJECT_NO_REF (node_properties_dialog, node_properties_dialog, "node_properties_dialog");
167
GLADE_HOOKUP_OBJECT_NO_REF (node_properties_dialog, dialog_vbox5, "dialog_vbox5");
168
GLADE_HOOKUP_OBJECT (node_properties_dialog, table4, "table4");
169
GLADE_HOOKUP_OBJECT (node_properties_dialog, label21, "label21");
170
GLADE_HOOKUP_OBJECT (node_properties_dialog, label25, "label25");
171
GLADE_HOOKUP_OBJECT (node_properties_dialog, label26, "label26");
172
GLADE_HOOKUP_OBJECT (node_properties_dialog, label27, "label27");
173
GLADE_HOOKUP_OBJECT (node_properties_dialog, label28, "label28");
174
GLADE_HOOKUP_OBJECT (node_properties_dialog, comboboxentry2, "comboboxentry2");
175
GLADE_HOOKUP_OBJECT_NO_REF (node_properties_dialog, dialog_action_area5, "dialog_action_area5");
176
GLADE_HOOKUP_OBJECT (node_properties_dialog, cancelbutton5, "cancelbutton5");
177
GLADE_HOOKUP_OBJECT (node_properties_dialog, okbutton5, "okbutton5");
179
return node_properties_dialog;
182
void PixPropertiesDlg::RecalcNewSize()
184
GtkWidget *cbo2 = lookup_widget(m_pDialog, "comboboxentry2");
185
int nIdx = gtk_combo_box_get_active(GTK_COMBO_BOX(cbo2));
188
const int arPercent[] = {100, 90, 80, 75, 70, 60, 50, 40, 30, 25, 20, 10 };
189
int nPercent = arPercent[nIdx];
191
m_nNewWidth = m_nOrigWidth * nPercent / 100;
192
m_nNewHeight = m_nOrigHeight * nPercent / 100;
194
GtkWidget *label28 = lookup_widget(m_pDialog, "label28");
196
sprintf(szBuffer, "%d x %d", m_nNewWidth, m_nNewHeight);
197
gtk_label_set_text(GTK_LABEL(label28), szBuffer);
200
void on_resize_combo_selected (GtkComboBox *widget, gpointer user_data)
202
PixPropertiesDlg *pDlg = (PixPropertiesDlg *)user_data;
203
pDlg->RecalcNewSize();
206
void on_use_png_checked (GtkMenuItem *menuitem, gpointer user_data)
208
PixPropertiesDlg *pDlg = (PixPropertiesDlg *)user_data;
209
pDlg->m_bUsePNG = (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(menuitem)) != FALSE);
1
////////////////////////////////////////////////////////////////////////////
2
// NoteCase notes manager project <http://notecase.sf.net>
4
// This code is licensed under BSD license.See "license.txt" for more details.
6
// File: Dialog to prepare image for insertion into the document (resize + select format)
7
////////////////////////////////////////////////////////////////////////////
9
#include "PixPropertiesDlg.h"
11
#include "callbacks.h"
12
#include "lib/debug.h"
18
#define snprintf _snprintf
23
extern GtkWidget *window1;
24
int gtkMessageBox(const char *szText, int nButtons = GTK_BUTTONS_OK, int nIcon = GTK_MESSAGE_INFO);
26
static void on_resize_combo_selected (GtkComboBox *widget, gpointer user_data);
27
static void on_use_png_checked (GtkMenuItem *menuitem, gpointer user_data);
29
PixPropertiesDlg::PixPropertiesDlg()
33
PixPropertiesDlg::~PixPropertiesDlg()
36
gtk_window_present(GTK_WINDOW(window1)); //activate main window
39
void PixPropertiesDlg::Create()
41
m_pDialog = create_node_properties_dialog ();
43
GtkWidget *label25 = lookup_widget(m_pDialog, "label25");
45
sprintf(szBuffer, "%d x %d", m_nOrigWidth, m_nOrigHeight);
46
gtk_label_set_text(GTK_LABEL(label25), szBuffer);
48
//fill internal icons combo
49
GtkWidget *cbo2 = lookup_widget(m_pDialog, "comboboxentry2");
50
gtk_combo_box_append_text(GTK_COMBO_BOX(cbo2), "100%");
51
gtk_combo_box_append_text(GTK_COMBO_BOX(cbo2), "90%");
52
gtk_combo_box_append_text(GTK_COMBO_BOX(cbo2), "80%");
53
gtk_combo_box_append_text(GTK_COMBO_BOX(cbo2), "75%");
54
gtk_combo_box_append_text(GTK_COMBO_BOX(cbo2), "70%");
55
gtk_combo_box_append_text(GTK_COMBO_BOX(cbo2), "60%");
56
gtk_combo_box_append_text(GTK_COMBO_BOX(cbo2), "50%");
57
gtk_combo_box_append_text(GTK_COMBO_BOX(cbo2), "40%");
58
gtk_combo_box_append_text(GTK_COMBO_BOX(cbo2), "30%");
59
gtk_combo_box_append_text(GTK_COMBO_BOX(cbo2), "25%");
60
gtk_combo_box_append_text(GTK_COMBO_BOX(cbo2), "20%");
61
gtk_combo_box_append_text(GTK_COMBO_BOX(cbo2), "10%");
63
//select first entry in combo (must not be empty selection)
64
gtk_combo_box_set_active(GTK_COMBO_BOX(cbo2), 0);
69
GtkWidget* PixPropertiesDlg::create_node_properties_dialog ()
71
GtkWidget *node_properties_dialog;
72
GtkWidget *dialog_vbox5;
80
GtkWidget *comboboxentry2;
81
GtkWidget *dialog_action_area5;
82
GtkWidget *cancelbutton5;
85
node_properties_dialog = gtk_dialog_new ();
86
gtk_window_set_title (GTK_WINDOW (node_properties_dialog), _("Image Properties"));
87
gtk_window_set_type_hint (GTK_WINDOW (node_properties_dialog), GDK_WINDOW_TYPE_HINT_DIALOG);
88
gtk_window_set_modal (GTK_WINDOW (node_properties_dialog), TRUE);
89
gtk_window_set_skip_pager_hint (GTK_WINDOW (node_properties_dialog), TRUE);
90
#ifndef _WIN32 //TOFIX API is buggy on Win32 (kills modal dialog state)
91
gtk_window_set_skip_taskbar_hint (GTK_WINDOW (node_properties_dialog), TRUE);
93
gtk_window_set_position(GTK_WINDOW (node_properties_dialog), GTK_WIN_POS_CENTER_ON_PARENT);
94
gtk_window_set_transient_for(GTK_WINDOW (node_properties_dialog), GTK_WINDOW(window1)); //set parent
96
dialog_vbox5 = GTK_DIALOG (node_properties_dialog)->vbox;
97
gtk_widget_show (dialog_vbox5);
99
table4 = gtk_table_new (2, 2, FALSE);
100
gtk_widget_show (table4);
101
gtk_box_pack_start (GTK_BOX (dialog_vbox5), table4, TRUE, TRUE, 0);
103
label21 = gtk_label_new (_("Original size:"));
104
gtk_widget_show (label21);
105
gtk_table_attach (GTK_TABLE (table4), label21, 0, 1, 0, 1,
106
(GtkAttachOptions) (GTK_FILL),
107
(GtkAttachOptions) (0), 2, 2);
108
gtk_misc_set_alignment (GTK_MISC (label21), 0, 0.5);
110
label25 = gtk_label_new (_("unknown"));
111
gtk_widget_show (label25);
112
gtk_table_attach (GTK_TABLE (table4), label25, 1, 2, 0, 1,
113
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
114
(GtkAttachOptions) (0), 2, 2);
116
label27 = gtk_label_new (_("Selected size:"));
117
gtk_widget_show (label27);
118
gtk_table_attach (GTK_TABLE (table4), label27, 0, 1, 1, 2,
119
(GtkAttachOptions) (GTK_FILL),
120
(GtkAttachOptions) (0), 2, 2);
121
gtk_misc_set_alignment (GTK_MISC (label27), 0, 0.5);
123
label28 = gtk_label_new (_("unknown"));
124
gtk_widget_show (label28);
125
gtk_table_attach (GTK_TABLE (table4), label28, 1, 2, 1, 2,
126
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
127
(GtkAttachOptions) (0), 2, 2);
129
label26 = gtk_label_new (_("Resize to:"));
130
gtk_widget_show (label26);
131
gtk_table_attach (GTK_TABLE (table4), label26, 0, 1, 2, 3,
132
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
133
(GtkAttachOptions) (0), 2, 2);
134
gtk_misc_set_alignment (GTK_MISC (label26), 0, 0.5);
136
comboboxentry2 = gtk_combo_box_new_text ();
137
gtk_widget_show (comboboxentry2);
138
gtk_table_attach (GTK_TABLE (table4), comboboxentry2, 1, 2, 2, 3,
139
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
140
(GtkAttachOptions) (GTK_FILL), 2, 2);
142
chk1 = gtk_check_button_new_with_mnemonic (_("Store as PNG"));
143
gtk_widget_show (chk1);
144
gtk_table_attach (GTK_TABLE (table4), chk1, 0, 2, 3, 4,
145
(GtkAttachOptions) (GTK_FILL),
146
(GtkAttachOptions) (0), 2, 2);
148
dialog_action_area5 = GTK_DIALOG (node_properties_dialog)->action_area;
149
gtk_widget_show (dialog_action_area5);
150
gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area5), GTK_BUTTONBOX_END);
152
cancelbutton5 = gtk_button_new_from_stock ("gtk-cancel");
153
gtk_widget_show (cancelbutton5);
154
gtk_dialog_add_action_widget (GTK_DIALOG (node_properties_dialog), cancelbutton5, GTK_RESPONSE_CANCEL);
155
GTK_WIDGET_SET_FLAGS (cancelbutton5, GTK_CAN_DEFAULT);
157
okbutton5 = gtk_button_new_from_stock ("gtk-ok");
158
gtk_widget_show (okbutton5);
159
gtk_dialog_add_action_widget (GTK_DIALOG (node_properties_dialog), okbutton5, GTK_RESPONSE_OK);
160
GTK_WIDGET_SET_FLAGS (okbutton5, GTK_CAN_DEFAULT);
162
g_signal_connect (comboboxentry2, "changed", G_CALLBACK (on_resize_combo_selected), this);
163
g_signal_connect (chk1, "clicked", G_CALLBACK (on_use_png_checked), this);
165
/* Store pointers to all widgets, for use by lookup_widget(). */
166
GLADE_HOOKUP_OBJECT_NO_REF (node_properties_dialog, node_properties_dialog, "node_properties_dialog");
167
GLADE_HOOKUP_OBJECT_NO_REF (node_properties_dialog, dialog_vbox5, "dialog_vbox5");
168
GLADE_HOOKUP_OBJECT (node_properties_dialog, table4, "table4");
169
GLADE_HOOKUP_OBJECT (node_properties_dialog, label21, "label21");
170
GLADE_HOOKUP_OBJECT (node_properties_dialog, label25, "label25");
171
GLADE_HOOKUP_OBJECT (node_properties_dialog, label26, "label26");
172
GLADE_HOOKUP_OBJECT (node_properties_dialog, label27, "label27");
173
GLADE_HOOKUP_OBJECT (node_properties_dialog, label28, "label28");
174
GLADE_HOOKUP_OBJECT (node_properties_dialog, comboboxentry2, "comboboxentry2");
175
GLADE_HOOKUP_OBJECT_NO_REF (node_properties_dialog, dialog_action_area5, "dialog_action_area5");
176
GLADE_HOOKUP_OBJECT (node_properties_dialog, cancelbutton5, "cancelbutton5");
177
GLADE_HOOKUP_OBJECT (node_properties_dialog, okbutton5, "okbutton5");
179
return node_properties_dialog;
182
void PixPropertiesDlg::RecalcNewSize()
184
GtkWidget *cbo2 = lookup_widget(m_pDialog, "comboboxentry2");
185
int nIdx = gtk_combo_box_get_active(GTK_COMBO_BOX(cbo2));
188
const int arPercent[] = {100, 90, 80, 75, 70, 60, 50, 40, 30, 25, 20, 10 };
189
int nPercent = arPercent[nIdx];
191
m_nNewWidth = m_nOrigWidth * nPercent / 100;
192
m_nNewHeight = m_nOrigHeight * nPercent / 100;
194
GtkWidget *label28 = lookup_widget(m_pDialog, "label28");
196
sprintf(szBuffer, "%d x %d", m_nNewWidth, m_nNewHeight);
197
gtk_label_set_text(GTK_LABEL(label28), szBuffer);
200
void on_resize_combo_selected (GtkComboBox *widget, gpointer user_data)
202
PixPropertiesDlg *pDlg = (PixPropertiesDlg *)user_data;
203
pDlg->RecalcNewSize();
206
void on_use_png_checked (GtkMenuItem *menuitem, gpointer user_data)
208
PixPropertiesDlg *pDlg = (PixPropertiesDlg *)user_data;
209
pDlg->m_bUsePNG = (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(menuitem)) != FALSE);