File: pix_selection.c

package info (click to toggle)
melon 1.4-1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 956 kB
  • ctags: 158
  • sloc: ansic: 2,427; makefile: 91; sh: 58
file content (159 lines) | stat: -rw-r--r-- 4,734 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
/* pix_selection.c -- pixmaps configuration 
 *
 * Copyright(C) 2001-2002 Elisa Manara <e@entropika.net>
 * This code is released under the GPL License version 2 */

#include <gtk/gtk.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <dirent.h>
#include "melon.h"

void set_melon_position (void);
void set_pix( GtkWidget		*clist,
		gint		row,
		GdkEventButton	*event );

gint select_pixmaps (GtkWidget *widget, gpointer data)
{
	GtkWidget *sel_window;
	GtkWidget *vbox;
	GtkWidget *scroll_win, *p_list;
	GtkWidget *button;
	GdkPixmap *gdk_pix1, *gdk_pix2;
	GdkBitmap *mask1, *mask2;
	GtkStyle *style;
	gchar *titles[3] = { "Style", "Default", "New Mail" };
	gchar *dir_data[3];
	int row = 0;
	int c;

	/* window */
	sel_window = gtk_window_new( GTK_WINDOW_DIALOG);
	gtk_window_set_position(GTK_WINDOW (sel_window), GTK_WIN_POS_MOUSE);
	gtk_widget_set_usize( GTK_WIDGET (sel_window), 240, 280);
	gtk_window_set_title(GTK_WINDOW (sel_window), "Pixmaps Selection");
	gtk_widget_show(sel_window);

	/* vbox */
	vbox = gtk_vbox_new( FALSE, 0 );
	gtk_container_add( GTK_CONTAINER( sel_window ), vbox );
	gtk_widget_show( vbox );

	/* scrolled window */
	scroll_win = gtk_scrolled_window_new( NULL, NULL );
	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW( scroll_win ),  
		GTK_POLICY_ALWAYS, GTK_POLICY_ALWAYS);
	gtk_box_pack_start( GTK_BOX( vbox ), scroll_win, FALSE, FALSE, 0 );
	gtk_widget_show(scroll_win);

	/* clist for pixmaps selection */
	p_list = gtk_clist_new_with_titles (3, titles);

	gtk_signal_connect(GTK_OBJECT(p_list), "select_row",
		GTK_SIGNAL_FUNC(set_pix), NULL);

	gtk_widget_set_usize( GTK_WIDGET (p_list), 240, 240);
	gtk_clist_set_row_height( GTK_CLIST (p_list), 30);
	gtk_clist_column_titles_passive( GTK_CLIST( p_list ));
	gtk_clist_set_shadow_type (GTK_CLIST(p_list), GTK_SHADOW_OUT);
	gtk_clist_set_selection_mode( GTK_CLIST( p_list ),
		GTK_SELECTION_SINGLE);
	
	gtk_clist_set_column_width(GTK_CLIST( p_list ), 0, 90);
	gtk_clist_set_column_width(GTK_CLIST( p_list ), 1, 50);
	gtk_clist_set_column_width(GTK_CLIST( p_list ), 2, 50);

	gtk_container_add( GTK_CONTAINER( scroll_win ), p_list );

	/* insert pixmaps and text into clist */
	for(c = 0; c < MAX_STYLE_DIRS; c++)
	{
		if (p_data[c].pix_name[0] == '\0')
			break;

		dir_data[0] = p_data[c].pix_name;
		dir_data[1] = NULL;
		dir_data[2] = NULL;
		gtk_clist_append(GTK_CLIST (p_list), dir_data);

		style = gtk_widget_get_default_style();

		gdk_pix1 = gdk_pixmap_create_from_xpm( sel_window->window, &mask1,
			&style->bg[GTK_STATE_NORMAL],
			p_data[c].no_mail_pix);
		gdk_pix2 = gdk_pixmap_create_from_xpm( sel_window->window, &mask2,
			&style->bg[GTK_STATE_NORMAL],
			p_data[c].new_mail_pix);

		gtk_clist_set_pixmap(GTK_CLIST( p_list ), row, 1, gdk_pix1, mask1);
		gtk_clist_set_pixmap(GTK_CLIST( p_list ), row, 2, gdk_pix2, mask2);
		/* freep pixmaps */
		gdk_pixmap_unref(gdk_pix1);
		gdk_pixmap_unref(gdk_pix2);
		row++;
	}

	gtk_widget_show(p_list);

	/* CLOSE button */
	button = gtk_button_new_with_label ("Close");
	gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
		GTK_SIGNAL_FUNC(gtk_widget_destroy),
		GTK_OBJECT (sel_window));
	gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
	gtk_widget_show (button);

	return 1;
}

void set_pix( GtkWidget		*p_list,
		gint		row,
		GdkEventButton	*event )
{

	GdkBitmap *mask1, *mask2;
	GtkStyle *style;

	style = gtk_widget_get_default_style();

	if(!pixmap_exist(p_data[row].no_mail_pix) || !pixmap_exist(p_data[row].new_mail_pix)) {
		dialog_message(" Cannot load new pixmaps ");
		return;
	}

	/* free pixmaps */
	gdk_pixmap_unref(w_data.gdk_pixmap);
	gdk_pixmap_unref(w_data.new_gdk_pixmap);
	/* set new pixmaps */
	w_data.gdk_pixmap = gdk_pixmap_create_from_xpm( w_data.window->window, &mask1,
		&style->bg[GTK_STATE_NORMAL],
		p_data[row].no_mail_pix);
	w_data.new_gdk_pixmap = gdk_pixmap_create_from_xpm( w_data.window->window, &mask2,
		&style->bg[GTK_STATE_NORMAL],
		p_data[row].new_mail_pix);
	w_data.mask1 = mask1;
	w_data.mask2 = mask2;

	/* set icon position */
	set_melon_position();

	/* This masks out everything except for the image itself */
	if(none_active_mbox()) {
		gtk_widget_shape_combine_mask( w_data.window, w_data.mask1, 0, 0 );
		gtk_pixmap_set( GTK_PIXMAP(w_data.pixmap), w_data.gdk_pixmap, w_data.mask1 );

	} else {
		gtk_widget_shape_combine_mask( w_data.window, w_data.mask2, 0, 0 );
		gtk_pixmap_set( GTK_PIXMAP(w_data.pixmap), w_data.new_gdk_pixmap, w_data.mask2 );
	}

	strncpy(cfg_data.no_mail_pix, p_data[row].no_mail_pix, MAX_PLEN);
	strncpy(cfg_data.new_mail_pix, p_data[row].new_mail_pix, MAX_PLEN);

	/* update melon.cfg file for next startup */
	config_update();

	/* check_mbox ("new_selection"); */
}