~tualatrix/ubuntu-tweak/ubuntu-packing

« back to all changes in this revision

Viewing changes to src/interface.c

  • Committer: tualatrix
  • Date: 2007-11-08 15:07:03 UTC
  • Revision ID: git-v1:8d117e376f9c8db00737c22904dccb48f7aac788
add the new sources of Ubuntu Tweak 0.2

git-svn-id: https://ubuntu-tweak.googlecode.com/svn/trunk@61 89e9d5ea-4437-0410-aedb-dd2c2f29ea1f

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#ifdef HAVE_CONFIG_H
 
2
#  include <config.h>
 
3
#endif
 
4
 
 
5
#include "ubuntu-tweak.h"
 
6
#include "session_page.h"
 
7
#include "icon_page.h"
 
8
#include "compiz_page.h"
 
9
#include "gnome_page.h"
 
10
#include "nautilus_page.h"
 
11
#include "powermanager_page.h"
 
12
#include "security_page.h"
 
13
#include "about.h"
 
14
 
 
15
#define UT_LOGO         PACKAGE_PIXMAPS_DIR"/ubuntu-tweak.png"
 
16
#define UT_BANNER       PACKAGE_PIXMAPS_DIR"/banner.png"
 
17
#define UT_WELCOME      PACKAGE_PIXMAPS_DIR"/welcome.png"
 
18
#define UT_STARTUP      PACKAGE_PIXMAPS_DIR"/startup.png"
 
19
#define UT_DESKTOP      PACKAGE_PIXMAPS_DIR"/desktop.png"
 
20
#define UT_ICON         PACKAGE_PIXMAPS_DIR"/icon.png"
 
21
#define UT_COMPIZ       PACKAGE_PIXMAPS_DIR"/compiz-fusion.png"
 
22
#define UT_GNOME        PACKAGE_PIXMAPS_DIR"/gnome.png"
 
23
#define UT_NAUTILUS     PACKAGE_PIXMAPS_DIR"/nautilus.png"
 
24
#define UT_SYSTEM       PACKAGE_PIXMAPS_DIR"/system.png"
 
25
#define UT_POWER        PACKAGE_PIXMAPS_DIR"/power-manager.png"
 
26
#define UT_SECURITY     PACKAGE_PIXMAPS_DIR"/security.png"
 
27
#define UT_SECU_OPTIONS PACKAGE_PIXMAPS_DIR"/security-options.png"
 
28
#define UT_APPLICATION  PACKAGE_PIXMAPS_DIR"/applications.png"
 
29
#define UT_SESSION      PACKAGE_PIXMAPS_DIR"/session-properties.png"
 
30
 
 
31
enum
 
32
{
 
33
        COL_NUM = 0,
 
34
        COL_ICON,
 
35
        COL_TEXT,
 
36
        NUM_COLS
 
37
};
 
38
 
 
39
enum
 
40
{
 
41
        ITEM_FATHER,
 
42
        ITEM_CHILD
 
43
};
 
44
 
 
45
enum
 
46
{
 
47
        PAGE_WELCOME = 0,
 
48
        PAGE_SATRUP,
 
49
                PAGE_SESSION,
 
50
        PAGE_DESKTOP,
 
51
                PAGE_ICON,
 
52
                PAGE_COMPIZ,
 
53
                PAGE_GNOME,
 
54
                PAGE_NAUTILUS,
 
55
        PAGE_SYSTEM,
 
56
                PAGE_POWER,
 
57
        PAGE_SECUTIRY,
 
58
                PAGE_SECU_OPTTIONS,
 
59
        PAGE_APPLICATION,
 
60
        NUM_PAGE
 
61
};
 
62
 
 
63
typedef struct
 
64
{
 
65
        gint tree_type;
 
66
        gint page_num;
 
67
        gchar *icon;
 
68
        gchar *name;
 
69
}TweakItem;
 
70
 
 
71
TweakItem list[]=
 
72
{
 
73
        {ITEM_FATHER,PAGE_WELCOME,UT_WELCOME,"欢迎使用"},
 
74
        {ITEM_FATHER,PAGE_SATRUP,UT_STARTUP,"启动控制"},
 
75
                {ITEM_CHILD,PAGE_SESSION,UT_SESSION,"会话控制"},
 
76
        {ITEM_FATHER,PAGE_DESKTOP,UT_DESKTOP,"桌面设置"},
 
77
                {ITEM_CHILD,PAGE_ICON,UT_ICON,"桌面图标"},
 
78
                {ITEM_CHILD,PAGE_COMPIZ,UT_COMPIZ,"Compiz"},
 
79
                {ITEM_CHILD,PAGE_GNOME,UT_GNOME,"GNOME设置"},
 
80
                {ITEM_CHILD,PAGE_NAUTILUS,UT_NAUTILUS,"文件管理器"},
 
81
        {ITEM_FATHER,PAGE_SYSTEM,UT_SYSTEM,"系统设置"},
 
82
                {ITEM_CHILD,PAGE_POWER,UT_POWER,"高级电源管理"},
 
83
        {ITEM_FATHER,PAGE_SECUTIRY,UT_SECURITY,"安全相关"},
 
84
                {ITEM_CHILD,PAGE_SECU_OPTTIONS,UT_SECU_OPTIONS,"安全设置"},
 
85
        {ITEM_FATHER,PAGE_APPLICATION,UT_APPLICATION,"应用程序"},
 
86
        {ITEM_FATHER,NUM_PAGE,NULL,NULL}
 
87
};
 
88
 
 
89
static  GtkWidget *notebook;
 
90
 
 
91
GtkWidget *create_notebook(void)
 
92
{
 
93
        GtkWidget *notebook;
 
94
        GtkWidget *vbox,*hbox;
 
95
        GtkWidget *label,*page_label;
 
96
        
 
97
        notebook=gtk_notebook_new();
 
98
        gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook),GTK_POS_TOP);
 
99
        gtk_notebook_set_show_tabs(GTK_NOTEBOOK(notebook),FALSE);
 
100
 
 
101
        /*no.1 page-welcome*/
 
102
        label=gtk_label_new(NULL);
 
103
        gtk_label_set_markup (GTK_LABEL (label),_("<span size=\"xx-large\">Welcome to <b>Ubuntu Tweak!</b></span>\n\n\nThis is a tool for Ubuntu which makes it easy to change hidden \n system and desktop settings.\n\nUbuntu Tweak is currently only for the GNOME Desktop Environment.\n\nAlthough this application is only in early stages, I will keep developing it.\n\nIf you have any suggestions, please e-mail me. \n\nThankyou,\n- TualatriX"));
 
104
        gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_FILL);
 
105
        page_label=gtk_label_new("欢迎使用");
 
106
        gtk_notebook_append_page(GTK_NOTEBOOK(notebook),label,page_label);
 
107
 
 
108
//      label=gtk_label_new("欢迎进入启动控制");
 
109
        hbox=gtk_hbox_new(FALSE,0);
 
110
        label=gtk_tool_button_new_from_stock(GTK_STOCK_OK);
 
111
        gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,0);
 
112
        gtk_tool_button_set_label(GTK_TOOL_BUTTON(label),"hello");
 
113
        label=gtk_tool_button_new_from_stock(GTK_STOCK_ABOUT);
 
114
        gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,0);
 
115
        page_label=gtk_label_new("启动控制");
 
116
        gtk_notebook_append_page(GTK_NOTEBOOK(notebook),hbox,page_label);
 
117
        
 
118
        vbox=create_session_page();
 
119
        page_label=gtk_label_new("会话设置");
 
120
        gtk_notebook_append_page(GTK_NOTEBOOK(notebook),vbox,page_label);
 
121
 
 
122
        label=gtk_label_new("欢迎进入桌面设置");
 
123
        page_label=gtk_label_new("桌面设置");
 
124
        gtk_notebook_append_page(GTK_NOTEBOOK(notebook),label,page_label);
 
125
 
 
126
        vbox=create_icon_page();
 
127
        page_label=gtk_label_new("桌面图标");
 
128
        gtk_notebook_append_page(GTK_NOTEBOOK(notebook),vbox,page_label);
 
129
 
 
130
        vbox=create_compiz_page();
 
131
        page_label=gtk_label_new("Compiz设置");
 
132
        gtk_notebook_append_page(GTK_NOTEBOOK(notebook),vbox,page_label);
 
133
 
 
134
        vbox=create_gnome_page();
 
135
        page_label=gtk_label_new("GNOME");
 
136
        gtk_notebook_append_page(GTK_NOTEBOOK(notebook),vbox,page_label);
 
137
 
 
138
        vbox=create_nautilus_page();
 
139
        page_label=gtk_label_new("nautilus");
 
140
        gtk_notebook_append_page(GTK_NOTEBOOK(notebook),vbox,page_label);
 
141
 
 
142
        label=gtk_label_new("系统设置");
 
143
        page_label=gtk_label_new("欢迎进入系统设置");
 
144
        gtk_notebook_append_page(GTK_NOTEBOOK(notebook),label,page_label);
 
145
 
 
146
        vbox=create_powermanager_page();
 
147
        page_label=gtk_label_new("powermanager");
 
148
        gtk_notebook_append_page(GTK_NOTEBOOK(notebook),vbox,page_label);
 
149
 
 
150
        label=gtk_label_new("安全设置");
 
151
        page_label=gtk_label_new("欢迎进入安全设置");
 
152
        gtk_notebook_append_page(GTK_NOTEBOOK(notebook),label,page_label);
 
153
 
 
154
        vbox=create_disable_page();
 
155
        page_label=gtk_label_new("security");
 
156
        gtk_notebook_append_page(GTK_NOTEBOOK(notebook),vbox,page_label);
 
157
 
 
158
        return notebook;
 
159
}
 
160
 
 
161
static void
 
162
selection_cb(GtkTreeSelection *selection,
 
163
                GtkTreeModel *model)
 
164
{
 
165
        GtkTreeIter iter;
 
166
        GValue value={0,};
 
167
        
 
168
        if(!gtk_tree_selection_get_selected(selection,NULL,&iter))
 
169
                return;
 
170
 
 
171
        gtk_tree_model_get_value(model,&iter,
 
172
                        COL_NUM,&value);
 
173
 
 
174
        gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook),g_value_get_int(&value));
 
175
 
 
176
        g_value_unset(&value);
 
177
}
 
178
 
 
179
GtkTreeStore *
 
180
create_liststore(void)
 
181
{
 
182
        GtkTreeStore *store;
 
183
        GtkTreeIter     child,iter;
 
184
        GdkPixbuf     *icon;
 
185
        GError        *error = NULL;
 
186
        gint            i=0,j;
 
187
 
 
188
        store = gtk_tree_store_new(NUM_COLS, G_TYPE_INT, GDK_TYPE_PIXBUF, G_TYPE_STRING);
 
189
 
 
190
        while(list[i].name != NULL)
 
191
        {
 
192
                if(list[i].tree_type == ITEM_FATHER)
 
193
                {
 
194
                        icon = gdk_pixbuf_new_from_file(list[i].icon, &error);
 
195
 
 
196
                        j=i+1;
 
197
 
 
198
                        gtk_tree_store_append(store,&iter,NULL);
 
199
                        gtk_tree_store_set(store,&iter,
 
200
                                        COL_NUM,list[i].page_num,
 
201
                                        COL_ICON,icon,
 
202
                                        COL_TEXT,list[i].name,
 
203
                                        -1);
 
204
                }
 
205
                else
 
206
                {
 
207
                        icon = gdk_pixbuf_new_from_file(list[i].icon, &error);
 
208
 
 
209
                        gtk_tree_store_append(store,&child,&iter);
 
210
                        gtk_tree_store_set(store,&child,
 
211
                                        COL_NUM,list[i].page_num,
 
212
                                        COL_ICON,icon,
 
213
                                        COL_TEXT,list[i].name,
 
214
                                        -1);
 
215
                }
 
216
                
 
217
                i++;
 
218
        }       
 
219
                                        
 
220
        return store;
 
221
}
 
222
 
 
223
GtkWidget *
 
224
create_treeview(void)
 
225
{
 
226
        GtkTreeModel            *model;
 
227
        GtkTreeIter             iter;
 
228
        GtkTreeViewColumn       *col;
 
229
        GtkTreeSelection        *selection;
 
230
        GtkCellRenderer         *renderer;
 
231
        GtkWidget               *tree_view;
 
232
 
 
233
        model = GTK_TREE_MODEL(create_liststore());
 
234
        tree_view = gtk_tree_view_new_with_model(model);
 
235
        selection=gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view));
 
236
        gtk_tree_selection_set_mode(GTK_TREE_SELECTION(selection),
 
237
                                        GTK_SELECTION_BROWSE);
 
238
 
 
239
        renderer = gtk_cell_renderer_text_new();
 
240
        col=gtk_tree_view_column_new_with_attributes("num",renderer,
 
241
                                                        "text",COL_NUM,NULL);
 
242
        gtk_tree_view_column_set_visible(col,FALSE);
 
243
        gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), col);
 
244
 
 
245
        col = gtk_tree_view_column_new();
 
246
        gtk_tree_view_column_set_title(col, "Title");
 
247
 
 
248
        renderer = gtk_cell_renderer_pixbuf_new();
 
249
        gtk_tree_view_column_pack_start(col, renderer, FALSE);
 
250
        gtk_tree_view_column_set_attributes(col, renderer,
 
251
                                            "pixbuf", COL_ICON,
 
252
                                            NULL);
 
253
        renderer = gtk_cell_renderer_text_new();
 
254
        gtk_tree_view_column_pack_start(col, renderer, TRUE);
 
255
        gtk_tree_view_column_set_attributes(col, renderer,
 
256
                                            "text", COL_TEXT,
 
257
                                            NULL);
 
258
 
 
259
        gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree_view),FALSE);
 
260
        gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), col);
 
261
 
 
262
        gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model),&iter);
 
263
        gtk_tree_selection_select_iter(GTK_TREE_SELECTION(selection),&iter);
 
264
        
 
265
        g_signal_connect(selection,"changed",G_CALLBACK(selection_cb),model);
 
266
 
 
267
        gtk_widget_show_all(tree_view);
 
268
 
 
269
        return tree_view;
 
270
}
 
271
 
 
272
GtkWidget *create_main_window(void)
 
273
{
 
274
        GtkWidget *window;
 
275
        GtkWidget *tree_view;
 
276
        GtkWidget *scrolled_window;
 
277
        GtkWidget *banner;
 
278
        GtkWidget *vbox,*hbox;
 
279
        GtkWidget *button;
 
280
 
 
281
        gtk_window_set_default_icon_from_file(UT_LOGO,NULL);
 
282
/*创建主窗体,分别设置好窗口标题,默认尺寸,是否可调,默认放置位置,边框
 
283
 *并连接关闭的信号
 
284
 */ 
 
285
        window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
 
286
        gtk_window_set_title(GTK_WINDOW(window),"Ubuntu Tweak!");
 
287
        gtk_widget_set_size_request(GTK_WIDGET(window),650,680);
 
288
        gtk_window_set_resizable(GTK_WINDOW(window),FALSE);
 
289
        gtk_container_set_border_width(GTK_CONTAINER(window),10);
 
290
        gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
 
291
        g_signal_connect(window, "delete_event", gtk_main_quit, NULL); 
 
292
 
 
293
/*创建窗体的主vbox*/
 
294
        vbox=gtk_vbox_new(FALSE,0);
 
295
        gtk_container_add(GTK_CONTAINER(window),vbox);
 
296
 
 
297
/*将banner插入主vbox中*/
 
298
        banner=gtk_image_new_from_file(UT_BANNER);
 
299
        gtk_box_pack_start(GTK_BOX(vbox),banner,FALSE,FALSE,0);
 
300
 
 
301
/*创建一个hbox,用于包装Tree View和Notebook*/
 
302
        hbox=gtk_hbox_new(FALSE,5);
 
303
        gtk_box_pack_start(GTK_BOX(vbox),hbox,TRUE,TRUE,0);
 
304
 
 
305
/*创建Tree View,将其包装进scrolled_window里,再装进hbox里*/
 
306
        tree_view = create_treeview();
 
307
        scrolled_window=gtk_scrolled_window_new(NULL,NULL);
 
308
        gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window),
 
309
                                        GTK_POLICY_NEVER,
 
310
                                        GTK_POLICY_AUTOMATIC);
 
311
        gtk_box_pack_start(GTK_BOX(hbox),scrolled_window,FALSE,FALSE,0);
 
312
        gtk_container_add(GTK_CONTAINER(scrolled_window),tree_view);
 
313
 
 
314
/*创建notebook,包装进hbox里*/
 
315
        notebook=create_notebook();
 
316
        gtk_box_pack_start(GTK_BOX(hbox),notebook,TRUE,TRUE,0);
 
317
 
 
318
/*窗体下部的hbox,用于放置几个按钮*/
 
319
        hbox=gtk_hbox_new(FALSE,5);
 
320
        gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,5);
 
321
 
 
322
        button=gtk_button_new_from_stock(GTK_STOCK_ABOUT);
 
323
        g_signal_connect((button),"clicked",G_CALLBACK(show_about),NULL);
 
324
        gtk_box_pack_start(GTK_BOX(hbox),button,FALSE,FALSE,0);
 
325
 
 
326
        button=gtk_button_new_from_stock(GTK_STOCK_QUIT);
 
327
        g_signal_connect(button,"clicked",G_CALLBACK(gtk_main_quit),NULL);
 
328
        gtk_box_pack_end(GTK_BOX(hbox),button,FALSE,FALSE,0);
 
329
        
 
330
        button=gtk_button_new_from_stock(GTK_STOCK_OK);
 
331
        gtk_box_pack_end(GTK_BOX(hbox),button,FALSE,FALSE,0);
 
332
 
 
333
        return window;
 
334
}