~braiampe/ubuntu/trusty/overlay-scrollbar/fix-for-1262022

« back to all changes in this revision

Viewing changes to tests/test-os.c

  • Committer: Bazaar Package Importer
  • Author(s): Ken VanDine
  • Date: 2011-03-30 14:29:24 UTC
  • Revision ID: james.westby@ubuntu.com-20110330142924-0eaim5ooup97vlvl
Tags: upstream-0.1.5
Import upstream version 0.1.5

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* overlay-scrollbar
 
2
 *
 
3
 * Copyright © 2011 Canonical Ltd
 
4
 *
 
5
 * This library is free software; you can redistribute it and/or
 
6
 * modify it under the terms of the GNU Lesser General Public
 
7
 * License as published by the Free Software Foundation; either
 
8
 * version 2.1 of the License, or (at your option) any later version.
 
9
 *
 
10
 * This library is distributed in the hope that it will be useful,
 
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
13
 * Lesser General Public License for more details.
 
14
 *
 
15
 * You should have received a copy of the GNU Lesser General Public
 
16
 * License along with this library; if not, write to the
 
17
 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 
18
 * Boston, MA 02110-1301 USA
 
19
 *
 
20
 * Authored by Andrea Cimitan <andrea.cimitan@canonical.com>
 
21
 */
 
22
 
 
23
/*
 
24
 * This test only creates an overlay scrollbar, subclass of GtkWindow,
 
25
 * to test g_object creation.
 
26
 */
 
27
 
 
28
#include <os/os.h>
 
29
 
 
30
static char text0[] = "Ubuntu is gonna rock!\n\
 
31
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
32
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
33
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
34
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
35
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
36
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
37
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
38
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
39
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
40
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!";
 
41
 
 
42
static char text1[] = "Ubuntu is gonna rock!\n\
 
43
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
44
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
45
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
46
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
47
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
48
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
49
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
50
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
51
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
52
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
53
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
54
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
55
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
56
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
57
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
58
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
59
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
60
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
61
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
62
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
63
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
64
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
65
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
66
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
67
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
68
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
69
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
70
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
71
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
72
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
73
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
74
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
75
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
76
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
77
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!\n\
 
78
Ubuntu is gonna rock!\nUbuntu is gonna rock!\nUbuntu is gonna rock!";
 
79
 
 
80
typedef struct
 
81
{
 
82
  const gboolean  check;
 
83
  const gchar    *description;
 
84
}
 
85
List;
 
86
 
 
87
enum
 
88
{
 
89
  COLUMN_CHECK,
 
90
  COLUMN_DESCRIPTION,
 
91
  COLUMN_ACTIVE,
 
92
  NUM_COLUMNS
 
93
};
 
94
 
 
95
static List data[] =
 
96
{
 
97
  { FALSE, "Ubuntu really rocks." },
 
98
  { TRUE,  "Ubuntu will rock soon!" },
 
99
  { FALSE, "Nokia and Microsoft are gonna rock." },
 
100
  { TRUE,  "Cimi needs a vacation!" },
 
101
  { FALSE, "I prefer rain to sunshine." },
 
102
  { TRUE,  "I wonna flight with Mark's jet." },
 
103
  { FALSE, "Gtk+ 2.0 and X11 rocks." },
 
104
  { FALSE, "Nokia won't kill Qt with this move." },
 
105
  { TRUE,  "Can't wait for the sun to ride my bike." },
 
106
  { TRUE,  "UDS in Florida was awesome!" },
 
107
  { FALSE, "I'm not bored at all of writing there." },
 
108
  { TRUE,  "A developer should be tanned." },
 
109
  { FALSE, "Firefox is faster than Chromium." },
 
110
  { TRUE, "Please Cimi, stop writing!" },
 
111
};
 
112
 
 
113
static GtkTreeModel* model_create (void);
 
114
 
 
115
static void renderer_check_toggled_cb (GtkCellRendererToggle *cell,
 
116
                                       gchar                 *path_str,
 
117
                                       gpointer               user_data);
 
118
 
 
119
static void tree_view_add_columns (GtkTreeView *treeview);
 
120
 
 
121
static void window_destroy_cb (GtkWidget *widget,
 
122
                               gpointer   user_data);
 
123
 
 
124
/**
 
125
 * model_create:
 
126
 * create GtkTreeModel
 
127
 **/
 
128
static GtkTreeModel*
 
129
model_create (void)
 
130
{
 
131
  gint i = 0;
 
132
  gint length;
 
133
  GtkListStore *store;
 
134
  GtkTreeIter iter;
 
135
 
 
136
  /* create list store */
 
137
  store = gtk_list_store_new (NUM_COLUMNS,
 
138
                              G_TYPE_BOOLEAN,
 
139
                              G_TYPE_STRING,
 
140
                              G_TYPE_BOOLEAN);
 
141
 
 
142
  /* add data to the list store */
 
143
  length = (gint) G_N_ELEMENTS (data);
 
144
  for (i = 0; i < length; i++)
 
145
    {
 
146
      gtk_list_store_append (store, &iter);
 
147
      gtk_list_store_set (store, &iter,
 
148
                          COLUMN_CHECK, data[i].check,
 
149
                          COLUMN_DESCRIPTION, data[i].description,
 
150
                          COLUMN_ACTIVE, FALSE,
 
151
                          -1);
 
152
    }
 
153
 
 
154
  return GTK_TREE_MODEL (store);
 
155
}
 
156
 
 
157
/**
 
158
 * renderer_check_toggled_cb:
 
159
 * callback for "toggled" signal
 
160
 **/
 
161
static void
 
162
renderer_check_toggled_cb (GtkCellRendererToggle *cell,
 
163
                           gchar                 *path_str,
 
164
                           gpointer               user_data)
 
165
{
 
166
  GtkTreeModel *model = (GtkTreeModel*)user_data;
 
167
  GtkTreeIter  iter;
 
168
  GtkTreePath *path = gtk_tree_path_new_from_string (path_str);
 
169
  gboolean check;
 
170
 
 
171
  /* get toggled iter */
 
172
  gtk_tree_model_get_iter (model, &iter, path);
 
173
  gtk_tree_model_get (model, &iter, COLUMN_CHECK, &check, -1);
 
174
 
 
175
  /* do something with the value */
 
176
  check ^= 1;
 
177
 
 
178
  /* set new value */
 
179
  gtk_list_store_set (GTK_LIST_STORE (model), &iter, COLUMN_CHECK, check, -1);
 
180
 
 
181
  /* clean up */
 
182
  gtk_tree_path_free (path);
 
183
}
 
184
 
 
185
/**
 
186
 * tree_view_add_columns:
 
187
 * add columns to the GtkTreeView
 
188
 **/
 
189
static void
 
190
tree_view_add_columns (GtkTreeView *treeview)
 
191
{
 
192
  GtkCellRenderer *renderer;
 
193
  GtkTreeViewColumn *column;
 
194
  GtkTreeModel *model = gtk_tree_view_get_model (treeview);
 
195
 
 
196
  /* column for fixed toggles */
 
197
  renderer = gtk_cell_renderer_toggle_new ();
 
198
  g_signal_connect (renderer, "toggled",
 
199
                    G_CALLBACK (renderer_check_toggled_cb), model);
 
200
 
 
201
  column = gtk_tree_view_column_new_with_attributes ("True?",
 
202
                                                     renderer,
 
203
                                                     "active", COLUMN_CHECK,
 
204
                                                     NULL);
 
205
 
 
206
  /* set this column to a fixed sizing (of 50 pixels) */
 
207
  gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column),
 
208
                                   GTK_TREE_VIEW_COLUMN_FIXED);
 
209
  gtk_tree_view_column_set_fixed_width (GTK_TREE_VIEW_COLUMN (column), 50);
 
210
  gtk_tree_view_append_column (treeview, column);
 
211
 
 
212
  /* column for description */
 
213
  renderer = gtk_cell_renderer_text_new ();
 
214
  column = gtk_tree_view_column_new_with_attributes ("Description",
 
215
                                                     renderer,
 
216
                                                     "text",
 
217
                                                     COLUMN_DESCRIPTION,
 
218
                                                     NULL);
 
219
  gtk_tree_view_column_set_sort_column_id (column, COLUMN_DESCRIPTION);
 
220
  gtk_tree_view_append_column (treeview, column);
 
221
}
 
222
 
 
223
/**
 
224
 * window_destroy_cb:
 
225
 * destroy callback for window
 
226
 **/
 
227
static void
 
228
window_destroy_cb (GtkWidget *widget,
 
229
                   gpointer   user_data)
 
230
{
 
231
  gtk_main_quit ();
 
232
}
 
233
 
 
234
/**
 
235
 * main:
 
236
 * main routine
 
237
 **/
 
238
int
 
239
main (int   argc,
 
240
      char *argv[])
 
241
{
 
242
  GtkWidget *scrolled_window_text0, *scrolled_window_text1, *scrolled_window_tree_view;
 
243
  GtkWidget *vbox;
 
244
  GtkWidget *hbox;
 
245
  GtkWidget *text_view0, *text_view1;
 
246
  GtkWidget *tree_view;
 
247
  GtkTreeModel *model;
 
248
  GtkTextBuffer *text_buffer0, *text_buffer1;
 
249
  GtkWidget *window;
 
250
/*  GtkWidget *vscrollbar0, *vscrollbar1, *vscrollbar2;*/
 
251
  /* GtkWidget *overlay_scrollbar0, *overlay_scrollbar1, *overlay_scrollbar2; */
 
252
 
 
253
  gtk_init (&argc, &argv);
 
254
 
 
255
  /* window */
 
256
  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
 
257
  gtk_window_set_default_size (GTK_WINDOW (window), 400, 500);
 
258
  gtk_window_set_title (GTK_WINDOW (window), "Vertical \"Overlay Scrollbar\" test");
 
259
 
 
260
  /* vbox */
 
261
  vbox = gtk_vbox_new (TRUE, 2);
 
262
 
 
263
  /* hbox */
 
264
  hbox = gtk_hbox_new (TRUE, 2);
 
265
 
 
266
  /* scrolled_window_text0 */
 
267
  scrolled_window_text0 = gtk_scrolled_window_new (NULL, NULL);
 
268
 
 
269
  /* text_view0 */
 
270
  text_view0 = gtk_text_view_new ();
 
271
  gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window_text0), text_view0);
 
272
  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window_text0), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
 
273
 
 
274
  /* text_buffer0 */
 
275
  text_buffer0 = gtk_text_view_get_buffer(GTK_TEXT_VIEW (text_view0));
 
276
  gtk_text_buffer_set_text (text_buffer0, text0, -1);
 
277
 
 
278
  /* overlar_scrollbar0 */
 
279
/*  vscrollbar0 = gtk_scrolled_window_get_vscrollbar (GTK_SCROLLED_WINDOW (scrolled_window_text0));*/
 
280
/*  overlay_scrollbar0 = overlay_scrollbar_new (GTK_ORIENTATION_VERTICAL,*/
 
281
/*                                              gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window_text0)));*/
 
282
/*  gtk_widget_set_parent (overlay_scrollbar0, scrolled_window_text0);*/
 
283
 
 
284
  /* scrolled_window_text1 */
 
285
  scrolled_window_text1 = gtk_scrolled_window_new (NULL, NULL);
 
286
 
 
287
  /* text_view1 */
 
288
  text_view1 = gtk_text_view_new ();
 
289
  gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window_text1), text_view1);
 
290
  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window_text1), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
 
291
 
 
292
  /* text_buffer1 */
 
293
  text_buffer1 = gtk_text_view_get_buffer(GTK_TEXT_VIEW (text_view1));
 
294
  gtk_text_buffer_set_text (text_buffer1, text1, -1);
 
295
 
 
296
  /* overlar_scrollbar1 */
 
297
/*  vscrollbar1 = gtk_scrolled_window_get_vscrollbar (GTK_SCROLLED_WINDOW (scrolled_window_text1));*/
 
298
/*  overlay_scrollbar1 = overlay_scrollbar_new (GTK_ORIENTATION_VERTICAL,*/
 
299
/*                                              gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window_text1)));*/
 
300
/*  gtk_widget_set_parent (overlay_scrollbar1, scrolled_window_text1);*/
 
301
 
 
302
  /* model */
 
303
  model = model_create ();
 
304
 
 
305
  /* tree_view */
 
306
  tree_view = gtk_tree_view_new_with_model (model);
 
307
  gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view), TRUE);
 
308
  gtk_tree_view_set_search_column (GTK_TREE_VIEW (tree_view),
 
309
                                   COLUMN_DESCRIPTION);
 
310
  tree_view_add_columns (GTK_TREE_VIEW (tree_view));
 
311
 
 
312
  g_object_unref (model);
 
313
 
 
314
  /* scrolled_window_tree_view */
 
315
  scrolled_window_tree_view = gtk_scrolled_window_new (NULL, NULL);
 
316
  gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window_tree_view),
 
317
                                       GTK_SHADOW_ETCHED_IN);
 
318
  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window_tree_view),
 
319
                                  GTK_POLICY_NEVER,
 
320
                                  GTK_POLICY_AUTOMATIC);
 
321
  gtk_container_add (GTK_CONTAINER (scrolled_window_tree_view), tree_view);
 
322
 
 
323
  /* overlar_scrollbar2 */
 
324
/*  vscrollbar2 = gtk_scrolled_window_get_vscrollbar (GTK_SCROLLED_WINDOW (scrolled_window_tree_view));*/
 
325
/*  overlay_scrollbar2 = overlay_scrollbar_new (GTK_ORIENTATION_VERTICAL,*/
 
326
/*                                              gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrolled_window_tree_view)));*/
 
327
/*  gtk_widget_set_parent (overlay_scrollbar2, scrolled_window_tree_view);*/
 
328
 
 
329
  /* containers */
 
330
  gtk_container_set_border_width (GTK_CONTAINER (window), 2);
 
331
  gtk_container_add (GTK_CONTAINER (hbox), scrolled_window_text0);
 
332
  gtk_container_add (GTK_CONTAINER (hbox), scrolled_window_text1);
 
333
  gtk_container_add (GTK_CONTAINER (vbox), hbox);
 
334
  gtk_container_add (GTK_CONTAINER (vbox), scrolled_window_tree_view);
 
335
  gtk_container_add (GTK_CONTAINER (window), vbox);
 
336
 
 
337
  /* signals */
 
338
  g_signal_connect (G_OBJECT (window), "destroy",
 
339
                    G_CALLBACK (window_destroy_cb), NULL);
 
340
 
 
341
  gtk_widget_show_all (window);
 
342
 
 
343
  gtk_main ();
 
344
 
 
345
  return 0;
 
346
}