2008-07-01 22:57:50 +00:00
/* GTK - The GIMP Toolkit
2005-09-29 00:19:32 +00:00
* testcellrenderertext . c : Tests for the various properties of GtkCellRendererText
* Copyright ( C ) 2005 , Novell , Inc .
*
* Authors :
* Federico Mena - Quintero < federico @ novell . com >
*
* This library is free software ; you can redistribute it and / or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation ; either
* version 2 of the License , or ( at your option ) any later version .
*
* This library is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
* Lesser General Public License for more details .
*
* You should have received a copy of the GNU Lesser General Public
2012-02-27 13:01:10 +00:00
* License along with this library . If not , see < http : //www.gnu.org/licenses/>.
2005-09-29 00:19:32 +00:00
*/
# include <gtk/gtk.h>
2006-03-14 19:44:59 +00:00
# define COL_BACKGROUND 15
# define COL_LINE_NUM 16
# define NUM_COLS 17 /* change this when adding columns */
2005-09-29 00:19:32 +00:00
struct cell_params {
2020-03-06 17:05:43 +00:00
const char * description ; /* 0 */
const char * test ; /* 1 */
2005-09-29 00:19:32 +00:00
int xpad ; /* 2 */
int ypad ; /* 3 */
double xalign ; /* 4 */
double yalign ; /* 5 */
gboolean sensitive ; /* 6 */
int width ; /* 7 */
int height ; /* 8 */
int width_chars ; /* 9 */
int wrap_width ; /* 10 */
PangoWrapMode wrap_mode ; /* 11 */
gboolean single_paragraph_mode ; /* 12 */
PangoEllipsizeMode ellipsize ; /* 13 */
2006-03-14 19:44:59 +00:00
PangoAlignment alignment ; /* 14 */
/* COL_BACKGROUND */ /* 15 */
/* COL_LINE_NUM */ /* 16 */
2005-09-29 00:19:32 +00:00
} ;
# define WO PANGO_WRAP_WORD
# define CH PANGO_WRAP_CHAR
# define WC PANGO_WRAP_WORD_CHAR
# define NO PANGO_ELLIPSIZE_NONE
# define ST PANGO_ELLIPSIZE_START
# define MI PANGO_ELLIPSIZE_MIDDLE
# define EN PANGO_ELLIPSIZE_END
2006-03-14 19:44:59 +00:00
# define AL PANGO_ALIGN_LEFT
# define AC PANGO_ALIGN_CENTER
# define AR PANGO_ALIGN_RIGHT
2005-09-29 00:19:32 +00:00
# define TESTL "LEFT JUSTIFIED This is really truly verily some very long text\n\330\247\331\204\330\263\331\204\330\247\331\205 \330\271\331\204\331\212\331\203\331\205 \330\247\331\204\330\263\331\204\330\247\331\205 \330\271\331\204\331\212\331\203\331\205 \330\247\331\204\330\263\331\204\330\247\331\205 \330\271\331\204\331\212\331\203\331\205"
# define TESTC "CENTERED This is really truly verily some very long text\n\330\247\331\204\330\263\331\204\330\247\331\205 \330\271\331\204\331\212\331\203\331\205 \330\247\331\204\330\263\331\204\330\247\331\205 \330\271\331\204\331\212\331\203\331\205 \330\247\331\204\330\263\331\204\330\247\331\205 \330\271\331\204\331\212\331\203\331\205"
# define TESTR "RIGHT JUSTIFIED This is really truly verily some very long text\n\330\247\331\204\330\263\331\204\330\247\331\205 \330\271\331\204\331\212\331\203\331\205 \330\247\331\204\330\263\331\204\330\247\331\205 \330\271\331\204\331\212\331\203\331\205 \330\247\331\204\330\263\331\204\330\247\331\205 \330\271\331\204\331\212\331\203\331\205"
2005-09-29 00:26:41 +00:00
/* DO NOT CHANGE THE ROWS! They are numbered so that we can refer to
* problematic rows in bug reports . If you need a different test , just add a
* new row at the bottom . Also , please add your new row numbers to this column - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
* to keep things tidy . v
*/
2005-09-29 00:19:32 +00:00
static const struct cell_params cell_params [ ] = {
2005-09-29 00:26:41 +00:00
{ " xp yp xa ya se wi he wc ww wm sp el " , " " , 0 , 0 , 0.0 , 0.5 , TRUE , - 1 , - 1 , - 1 , - 1 , CH , FALSE , NO } , /* 0 */
2005-09-29 00:19:32 +00:00
/* Test alignment */
2006-03-14 19:44:59 +00:00
{ " 0 0 0 0 T -1 -1 -1 -1 CH F NO " , TESTL , 0 , 0 , 0.0 , 0.0 , TRUE , - 1 , - 1 , - 1 , - 1 , CH , FALSE , NO , AL } , /* 1 */
{ " 0 0 .5 0 T -1 -1 -1 -1 CH F NO " , TESTC , 0 , 0 , 0.5 , 0.0 , TRUE , - 1 , - 1 , - 1 , - 1 , CH , FALSE , NO , AL } , /* 2 */
{ " 0 0 1 0 T -1 -1 -1 -1 CH F NO " , TESTR , 0 , 0 , 1.0 , 0.0 , TRUE , - 1 , - 1 , - 1 , - 1 , CH , FALSE , NO , AL } , /* 3 */
{ " 0 0 0 .5 T -1 -1 -1 -1 CH F NO " , TESTL , 0 , 0 , 0.0 , 0.5 , TRUE , - 1 , - 1 , - 1 , - 1 , CH , FALSE , NO , AL } , /* 4 */
{ " 0 0 .5 .5 T -1 -1 -1 -1 CH F NO " , TESTC , 0 , 0 , 0.5 , 0.5 , TRUE , - 1 , - 1 , - 1 , - 1 , CH , FALSE , NO , AL } , /* 5 */
{ " 0 0 1 .5 T -1 -1 -1 -1 CH F NO " , TESTR , 0 , 0 , 1.0 , 0.5 , TRUE , - 1 , - 1 , - 1 , - 1 , CH , FALSE , NO , AL } , /* 6 */
{ " 0 0 0 1 T -1 -1 -1 -1 CH F NO " , TESTL , 0 , 0 , 0.0 , 1.0 , TRUE , - 1 , - 1 , - 1 , - 1 , CH , FALSE , NO , AL } , /* 7 */
{ " 0 0 .5 1 T -1 -1 -1 -1 CH F NO " , TESTC , 0 , 0 , 0.5 , 1.0 , TRUE , - 1 , - 1 , - 1 , - 1 , CH , FALSE , NO , AL } , /* 8 */
{ " 0 0 1 1 T -1 -1 -1 -1 CH F NO " , TESTR , 0 , 0 , 1.0 , 1.0 , TRUE , - 1 , - 1 , - 1 , - 1 , CH , FALSE , NO , AL } , /* 9 */
2005-09-29 00:19:32 +00:00
/* Test padding */
2006-03-14 19:44:59 +00:00
{ " 10 10 0 0 T -1 -1 -1 -1 CH F NO " , TESTL , 10 , 10 , 0.0 , 0.0 , TRUE , - 1 , - 1 , - 1 , - 1 , CH , FALSE , NO , AL } , /* 10 */
{ " 10 10 .5 0 T -1 -1 -1 -1 CH F NO " , TESTC , 10 , 10 , 0.5 , 0.0 , TRUE , - 1 , - 1 , - 1 , - 1 , CH , FALSE , NO , AL } , /* 11 */
{ " 10 10 1 0 T -1 -1 -1 -1 CH F NO " , TESTR , 10 , 10 , 1.0 , 0.0 , TRUE , - 1 , - 1 , - 1 , - 1 , CH , FALSE , NO , AL } , /* 12 */
{ " 10 10 0 .5 T -1 -1 -1 -1 CH F NO " , TESTL , 10 , 10 , 0.0 , 0.5 , TRUE , - 1 , - 1 , - 1 , - 1 , CH , FALSE , NO , AL } , /* 13 */
{ " 10 10 .5 .5 T -1 -1 -1 -1 CH F NO " , TESTC , 10 , 10 , 0.5 , 0.5 , TRUE , - 1 , - 1 , - 1 , - 1 , CH , FALSE , NO , AL } , /* 14 */
{ " 10 10 1 .5 T -1 -1 -1 -1 CH F NO " , TESTR , 10 , 10 , 1.0 , 0.5 , TRUE , - 1 , - 1 , - 1 , - 1 , CH , FALSE , NO , AL } , /* 15 */
{ " 10 10 0 1 T -1 -1 -1 -1 CH F NO " , TESTL , 10 , 10 , 0.0 , 1.0 , TRUE , - 1 , - 1 , - 1 , - 1 , CH , FALSE , NO , AL } , /* 16 */
{ " 10 10 .5 1 T -1 -1 -1 -1 CH F NO " , TESTC , 10 , 10 , 0.5 , 1.0 , TRUE , - 1 , - 1 , - 1 , - 1 , CH , FALSE , NO , AL } , /* 17 */
{ " 10 10 1 1 T -1 -1 -1 -1 CH F NO " , TESTR , 10 , 10 , 1.0 , 1.0 , TRUE , - 1 , - 1 , - 1 , - 1 , CH , FALSE , NO , AL } , /* 18 */
/* Test Pango alignment (not xalign) */
{ " 0 0 0 0 T -1 -1 -1 -1 CH F NO AL " , TESTL , 0 , 0 , 0.0 , 0.0 , TRUE , - 1 , - 1 , - 1 , 20 , WO , FALSE , NO , AL } , /* 19 */
{ " 0 0 0 0 T -1 -1 -1 -1 CH F NO AC " , TESTC , 0 , 0 , 0.0 , 0.0 , TRUE , - 1 , - 1 , - 1 , 20 , WO , FALSE , NO , AC } , /* 20 */
{ " 0 0 0 0 T -1 -1 -1 -1 CH F NO AR " , TESTR , 0 , 0 , 0.0 , 0.0 , TRUE , - 1 , - 1 , - 1 , 20 , WO , FALSE , NO , AR } , /* 21 */
2005-09-29 00:19:32 +00:00
} ;
static GtkListStore *
create_list_store ( void )
{
GtkListStore * list_store ;
int i ;
list_store = gtk_list_store_new ( NUM_COLS ,
G_TYPE_STRING , /* 0 */
G_TYPE_STRING , /* 1 */
G_TYPE_INT , /* 2 */
G_TYPE_INT , /* 3 */
G_TYPE_DOUBLE , /* 4 */
G_TYPE_DOUBLE , /* 5 */
G_TYPE_BOOLEAN , /* 6 */
G_TYPE_INT , /* 7 */
G_TYPE_INT , /* 8 */
G_TYPE_INT , /* 9 */
G_TYPE_INT , /* 10 */
PANGO_TYPE_WRAP_MODE , /* 11 */
G_TYPE_BOOLEAN , /* 12 */
PANGO_TYPE_ELLIPSIZE_MODE , /* 13 */
2006-03-14 19:44:59 +00:00
PANGO_TYPE_ALIGNMENT , /* 14 */
G_TYPE_STRING , /* 15 */
G_TYPE_STRING ) ; /* 16 */
2005-09-29 00:19:32 +00:00
for ( i = 0 ; i < G_N_ELEMENTS ( cell_params ) ; i + + )
{
const struct cell_params * p ;
GtkTreeIter iter ;
char buf [ 50 ] ;
p = cell_params + i ;
2006-01-06 12:05:28 +00:00
g_snprintf ( buf , sizeof ( buf ) , " %d " , i ) ;
2005-09-29 00:19:32 +00:00
gtk_list_store_append ( list_store , & iter ) ;
gtk_list_store_set ( list_store , & iter ,
0 , p - > description ,
1 , p - > test ,
2 , p - > xpad ,
3 , p - > ypad ,
4 , p - > xalign ,
5 , p - > yalign ,
6 , p - > sensitive ,
7 , p - > width ,
8 , p - > height ,
9 , p - > width_chars ,
10 , p - > wrap_width ,
11 , p - > wrap_mode ,
12 , p - > single_paragraph_mode ,
13 , p - > ellipsize ,
2006-03-14 19:44:59 +00:00
14 , p - > alignment ,
15 , ( i % 2 = = 0 ) ? " gray50 " : " gray80 " ,
16 , buf ,
2005-09-29 00:19:32 +00:00
- 1 ) ;
}
return list_store ;
}
static GtkWidget *
create_tree ( gboolean rtl )
{
GtkWidget * sw ;
GtkWidget * treeview ;
GtkListStore * list_store ;
GtkTreeViewColumn * column ;
GtkCellRenderer * renderer ;
GdkPixbuf * pixbuf ;
sw = gtk_scrolled_window_new ( NULL , NULL ) ;
2020-04-17 03:25:06 +00:00
gtk_scrolled_window_set_has_frame ( GTK_SCROLLED_WINDOW ( sw ) , TRUE ) ;
2005-09-29 00:19:32 +00:00
gtk_widget_set_direction ( sw , rtl ? GTK_TEXT_DIR_RTL : GTK_TEXT_DIR_LTR ) ;
list_store = create_list_store ( ) ;
treeview = gtk_tree_view_new_with_model ( GTK_TREE_MODEL ( list_store ) ) ;
gtk_widget_set_direction ( treeview , rtl ? GTK_TEXT_DIR_RTL : GTK_TEXT_DIR_LTR ) ;
gtk_container_add ( GTK_CONTAINER ( sw ) , treeview ) ;
/* Line number */
renderer = gtk_cell_renderer_text_new ( ) ;
column = gtk_tree_view_column_new_with_attributes ( " # " ,
renderer ,
" text " , COL_LINE_NUM ,
NULL ) ;
gtk_tree_view_append_column ( GTK_TREE_VIEW ( treeview ) , column ) ;
/* Description */
renderer = gtk_cell_renderer_text_new ( ) ;
g_object_set ( renderer ,
" font " , " monospace " ,
NULL ) ;
column = gtk_tree_view_column_new_with_attributes ( " Description " ,
renderer ,
" text " , 0 ,
NULL ) ;
gtk_tree_view_append_column ( GTK_TREE_VIEW ( treeview ) , column ) ;
/* Test text */
renderer = gtk_cell_renderer_text_new ( ) ;
column = gtk_tree_view_column_new_with_attributes ( " Test " ,
renderer ,
" text " , 1 ,
" xpad " , 2 ,
" ypad " , 3 ,
" xalign " , 4 ,
" yalign " , 5 ,
" sensitive " , 6 ,
" width " , 7 ,
" height " , 8 ,
" width_chars " , 9 ,
" wrap_width " , 10 ,
" wrap_mode " , 11 ,
" single_paragraph_mode " , 12 ,
" ellipsize " , 13 ,
2006-03-14 19:44:59 +00:00
" alignment " , 14 ,
" cell_background " , 15 ,
2005-09-29 00:19:32 +00:00
NULL ) ;
gtk_tree_view_column_set_resizable ( column , TRUE ) ;
gtk_tree_view_append_column ( GTK_TREE_VIEW ( treeview ) , column ) ;
/* Empty column */
pixbuf = gdk_pixbuf_new_from_file ( " apple-red.png " , NULL ) ;
renderer = gtk_cell_renderer_pixbuf_new ( ) ;
g_object_set ( renderer ,
" pixbuf " , pixbuf ,
" xpad " , 10 ,
" ypad " , 10 ,
NULL ) ;
column = gtk_tree_view_column_new_with_attributes ( " Empty " ,
renderer ,
NULL ) ;
gtk_tree_view_append_column ( GTK_TREE_VIEW ( treeview ) , column ) ;
return sw ;
}
2020-02-10 03:24:47 +00:00
static void
quit_cb ( GtkWidget * widget ,
gpointer data )
{
gboolean * done = data ;
* done = TRUE ;
g_main_context_wakeup ( NULL ) ;
}
2005-09-29 00:19:32 +00:00
int
main ( int argc , char * * argv )
{
GtkWidget * window ;
GtkWidget * vbox ;
GtkWidget * label ;
GtkWidget * tree ;
2020-02-10 03:24:47 +00:00
gboolean done = FALSE ;
2005-09-29 00:19:32 +00:00
2016-12-28 13:53:22 +00:00
gtk_init ( ) ;
2005-09-29 00:19:32 +00:00
2020-02-14 19:55:36 +00:00
window = gtk_window_new ( ) ;
2005-09-29 00:19:32 +00:00
g_signal_connect ( window , " destroy " ,
2020-02-10 03:24:47 +00:00
G_CALLBACK ( quit_cb ) , & done ) ;
2005-09-29 00:19:32 +00:00
2010-10-31 17:07:20 +00:00
vbox = gtk_box_new ( GTK_ORIENTATION_VERTICAL , 12 ) ;
2005-09-29 00:19:32 +00:00
gtk_container_add ( GTK_CONTAINER ( window ) , vbox ) ;
/* LTR */
label = gtk_label_new ( " Left to right " ) ;
2018-12-26 07:20:34 +00:00
gtk_container_add ( GTK_CONTAINER ( vbox ) , label ) ;
2005-09-29 00:19:32 +00:00
tree = create_tree ( FALSE ) ;
2017-04-21 16:59:59 +00:00
gtk_widget_set_vexpand ( tree , TRUE ) ;
2018-12-26 07:20:34 +00:00
gtk_container_add ( GTK_CONTAINER ( vbox ) , tree ) ;
2005-09-29 00:19:32 +00:00
/* RTL */
label = gtk_label_new ( " Right to left " ) ;
2018-12-26 07:20:34 +00:00
gtk_container_add ( GTK_CONTAINER ( vbox ) , label ) ;
2005-09-29 00:19:32 +00:00
tree = create_tree ( TRUE ) ;
2017-04-21 16:59:59 +00:00
gtk_widget_set_vexpand ( tree , TRUE ) ;
2018-12-26 07:20:34 +00:00
gtk_container_add ( GTK_CONTAINER ( vbox ) , tree ) ;
2005-09-29 00:19:32 +00:00
2017-01-19 09:02:04 +00:00
gtk_widget_show ( window ) ;
2020-02-10 03:24:47 +00:00
while ( ! done )
g_main_context_iteration ( NULL , TRUE ) ;
2005-09-29 00:19:32 +00:00
return 0 ;
}