summaryrefslogtreecommitdiffstats
path: root/perl-install/install
diff options
context:
space:
mode:
authorThierry Vignaud <tv@mandriva.org>2007-09-04 18:21:24 +0000
committerThierry Vignaud <tv@mandriva.org>2007-09-04 18:21:24 +0000
commit4038e34eaa6d4606cc9b27ca891ecdd67fb77772 (patch)
tree83cd25f32b09b23e6098db8132353136d4317cb1 /perl-install/install
parenta6a386385efe308dd3a53014f80ae04e64d5ad5d (diff)
downloaddrakx-4038e34eaa6d4606cc9b27ca891ecdd67fb77772.tar
drakx-4038e34eaa6d4606cc9b27ca891ecdd67fb77772.tar.gz
drakx-4038e34eaa6d4606cc9b27ca891ecdd67fb77772.tar.bz2
drakx-4038e34eaa6d4606cc9b27ca891ecdd67fb77772.tar.xz
drakx-4038e34eaa6d4606cc9b27ca891ecdd67fb77772.zip
(summary_prompt) add an horizontal bar between elements
Diffstat (limited to 'perl-install/install')
-rw-r--r--perl-install/install/NEWS1
-rw-r--r--perl-install/install/steps_gtk.pm13
2 files changed, 11 insertions, 3 deletions
diff --git a/perl-install/install/NEWS b/perl-install/install/NEWS
index 743080195..1fcfe224c 100644
--- a/perl-install/install/NEWS
+++ b/perl-install/install/NEWS
@@ -1,5 +1,6 @@
- summary screen:
o add spacing between elements
+ o add an horizontal bar between elements
Version 10.4.188 - 4 September 2007, by Thierry Vignaud
diff --git a/perl-install/install/steps_gtk.pm b/perl-install/install/steps_gtk.pm
index 4859e1025..b5716a069 100644
--- a/perl-install/install/steps_gtk.pm
+++ b/perl-install/install/steps_gtk.pm
@@ -587,10 +587,14 @@ sub summary_prompt {
my $w = ugtk2->new(N("Summary"), icon => 'banner-summary');
my $set_entry_labels;
- my @table;
- my $group;
+ my (@table, @widget_list);
+ my ($group, $count);
foreach my $e (@$l) {
if ($group ne $e->{group}) {
+ push @widget_list, [ @table ] if @table;
+ @table = ();
+ push @widget_list, gtknew('HSeparator') if $count;
+ $count++;
$group = $e->{group};
push @table, [ gtknew('HBox', children_tight => [ gtknew('Title1', label => escape_text_for_TextView_markup_format($group)) ]), '' ];
}
@@ -624,7 +628,10 @@ sub summary_prompt {
ugtk2::gtkadd($w->{window},
gtknew('VBox', spacing => 5, children => [
- 1, gtknew('ScrolledWindow', child => gtknew('Table', mcc => 1, row_spacings => 2, children => \@table)),
+ 1, gtknew('ScrolledWindow',
+ child => gtknew('VBox', children_tight => [ map {
+ ref($_) eq 'ARRAY' ? gtknew('Table', mcc => 1, row_spacings => 2, children => $_) : $_;
+ } @widget_list ])),
0, $w->create_okcancel(undef, '', '', if_($help_sub, [ N("Help"), $help_sub, 1 ]))
]));
n> VOID_STAR *addr) { _SLang_IStruct_Type *s; SLang_IStruct_Field_Type *f; char *struct_addr; /* Note: There is no need to free this object */ if (-1 == SLclass_pop_ptr_obj (SLANG_ISTRUCT_TYPE, (VOID_STAR *) &s)) return NULL; if (NULL == (struct_addr = *(char **)s->addr)) { SLang_verror (SL_INTRINSIC_ERROR, "%s is NULL. Unable to access field", s->name); return NULL; } f = s->fields; while (f->field_name != NULL) { /* Since both these are slstrings, just test pointers */ if (f->field_name != name) { f++; continue; } if (no_readonly && f->read_only) { SLang_verror (SL_READONLY_ERROR, "%s.%s is read-only", s->name, name); return NULL; } *addr = (VOID_STAR) (struct_addr + f->offset); return f; } SLang_verror (SL_TYPE_MISMATCH, "%s has no field called %s", s->name, name); return NULL; } static int istruct_sget (unsigned char type, char *name) { SLang_IStruct_Field_Type *f; VOID_STAR addr; SLang_Class_Type *cl; if (NULL == (f = istruct_pop_field (name, 0, &addr))) return -1; type = f->type; cl = _SLclass_get_class (type); return (cl->cl_push_intrinsic)(f->type, addr); } static int istruct_sput (unsigned char type, char *name) { SLang_IStruct_Field_Type *f; VOID_STAR addr; SLang_Class_Type *cl; if (NULL == (f = istruct_pop_field (name, 1, &addr))) return -1; type = f->type; cl = _SLclass_get_class (type); return (*cl->cl_pop) (type, addr); } static int istruct_push (unsigned char type, VOID_STAR ptr) { _SLang_IStruct_Type *s; s = *(_SLang_IStruct_Type **) ptr; if ((s == NULL) || (s->addr == NULL) || (*(char **) s->addr == NULL)) return SLang_push_null (); return SLclass_push_ptr_obj (type, (VOID_STAR) s); } static int istruct_pop (unsigned char type, VOID_STAR ptr) { return SLclass_pop_ptr_obj (type, (VOID_STAR *)ptr); } static void istruct_destroy (unsigned char type, VOID_STAR ptr) { (void) type; (void) ptr; } /* Intrinsic struct objects are not stored in a variable. So, the address that * is passed here is actually a pointer to the struct. So, pass its address * to istruct_push since v is a variable. Confusing, n'est pas? */ static int istruct_push_intrinsic (unsigned char type, VOID_STAR v) { return istruct_push (type, (VOID_STAR) &v); } static int init_intrin_struct (void) { SLang_Class_Type *cl; static int initialized; if (initialized) return 0; if (NULL == (cl = SLclass_allocate_class ("IStruct_Type"))) return -1; cl->cl_pop = istruct_pop; cl->cl_push = istruct_push; cl->cl_sget = istruct_sget; cl->cl_sput = istruct_sput; cl->cl_destroy = istruct_destroy; cl->cl_push_intrinsic = istruct_push_intrinsic; if (-1 == SLclass_register_class (cl, SLANG_ISTRUCT_TYPE, sizeof (_SLang_IStruct_Type *), SLANG_CLASS_TYPE_PTR)) return -1; initialized = 1; return 0; } int SLadd_istruct_table (SLang_IStruct_Field_Type *fields, VOID_STAR addr, char *name) { _SLang_IStruct_Type *s; SLang_IStruct_Field_Type *f; if (-1 == init_intrin_struct ()) return -1; if (addr == NULL) { SLang_verror (SL_INVALID_PARM, "SLadd_istruct_table: address must be non-NULL"); return -1; } if (fields == NULL) return -1; /* Make the field names slstrings so that only the pointers need to be * compared. However, this table may have been already been added for * another instance of the intrinsic object. So, check for the presence * of an slstring. */ f = fields; while (f->field_name != NULL) { char *fname; fname = SLang_create_slstring (f->field_name); if (fname == NULL) return -1; /* Here is the check for the slstring */ if (f->field_name == fname) SLang_free_slstring (fname); else /* replace string literal with slstring */ f->field_name = fname; f++; } s = (_SLang_IStruct_Type *)SLmalloc (sizeof (_SLang_IStruct_Type)); if (s == NULL) return -1; memset ((char *)s, 0, sizeof (_SLang_IStruct_Type)); if (NULL == (s->name = SLang_create_slstring (name))) { SLfree ((char *) s); return -1; } s->addr = addr; s->fields = fields; if (-1 == SLadd_intrinsic_variable (name, (VOID_STAR) s, SLANG_ISTRUCT_TYPE, 1)) { SLang_free_slstring (s->name); SLfree ((char *) s); return -1; } return 0; }