#!/usr/bin/perl use strict; use lib qw(/usr/lib/libDrakX); use standalone; use common; #use any; use ugtk2 qw(:all); use interactive; use Libconf::Glueconf::Samba; #use POSIX qw(mktime ceil); #use USER; #use Devel::Peek; #use Gtk2::Gdk::Keysyms; # for debugging purpose use Data::Dumper; # we ask glueconf to give us the structure representing /etc/samba/smb.conf my $samba = new Libconf::Glueconf::Samba('/etc/samba/smb.conf'); my $window = Gtk2::Window->new('toplevel'); $window->signal_connect(delete_event => sub { ugtk2->exit(0) }); $window->set_position('center'); $window->set_title(N('swat-clone, a non-destroying swat clone')); $window->set_size_request(500, 400); my $notebook = new Gtk2::Notebook; gtkadd($window, gtkpack_(Gtk2::VBox->new(0,10), 0, 'swat clone', 1, $notebook, 0, gtkadd(gtkset_layout(Gtk2::HButtonBox->new, 'end'), gtksignal_connect(new Gtk2::Button(N("OK")), clicked => sub { save_exit(); }), gtksignal_connect(new Gtk2::Button(N("Cancel")), clicked => sub { cancel_exit(); }) ) ) ); my %BASIC_GLOBAL_KEYWORDS = ( 'Base Options' => [ 'workgroup', 'netbios name', 'server string', 'interfaces', ], 'Security Options' => [ 'security', 'encrypt passwords', 'update encrypted', 'map to guest', 'guest account', 'hosts allow', 'hosts deny', ], 'Logging Options' => [ 'log level', 'log file', 'max log size', ], 'Tuning Options' => [ 'socket options', ], 'Browse Options' => [ 'os level', 'preferred master', 'local master', 'domain master', ], 'WINS Options' => [ 'dns proxy', 'wins server', 'wins support', ], ); my %current_global_keywords = %BASIC_GLOBAL_KEYWORDS; # my $data = Libconf::data{$struct->{libconf}{template_name}}; # gtkpack__(Gtk2::HBox->new(0,5), # if_($args->{with_help}, gtksignal_connect(new Gtk2::Button(N('Help')), clicked => sub { })), # $args->{atom_label} ? $args->{atom_label} : $args->{atom_name}, my $globals = gtkpack_(Gtk2::VBox->new(0,5), 0, 'Global Variables', 0, gtkadd(gtkset_layout(Gtk2::HButtonBox->new, 'start'), gtksignal_connect(new Gtk2::Button(N('Commit changes')), clicked => sub { save() }), gtksignal_connect(new Gtk2::Button(N('Reset values')), clicked => sub { set_defaults(%current_global_keywords); }), gtksignal_connect(new Gtk2::Button(N('Advanced view')), clicked => sub { }), ), 1, create_scrolled_window(gtkpack__(Gtk2::VBox->new(0,5), map { my $table = Gtk2::Table->new(0, 4, 0); $table->set_col_spacings(5); $table->set_row_spacings(5); my $count = 0; foreach (@{$current_global_keywords{$_}}) { $table->attach(Gtk2::Label->new(N('Help')), 0, 1, $count, $count + 1, ['fill', 'expand'], ['shrink', 'shrink'], 0, 0); $table->attach(gtkpack_(Gtk2::HBox->new(0,0), 1, Gtk2::HBox->new(0,0), 0, Gtk2::Label->new($_) ), 1, 2, $count, $count + 1, 'fill', ['shrink', 'shrink'], 0, 0); $table->attach(gtkentry(), 2, 3, $count, $count + 1, ['fill', 'expand'], ['shrink', 'shrink'], 0, 0); $table->attach(gtksignal_connect(new Gtk2::Button(N('Set default')), clicked => sub { set_defaults(%current_global_keywords); }), 3, 4, $count, $count + 1, ['fill', 'expand'], ['shrink', 'shrink'], 0, 0); $count++; } gtkset_border_width(gtkset_shadow_type(gtkadd(Gtk2::Frame->new($_), $table), 'etched_out'), 5); } ('Base Options', 'Security Options', 'Logging Options', 'Tuning Options', 'Browse Options', 'WINS Options') ) ), undef, 'none' ); foreach ([$globals, N('GLOBALS')], [my $shares, N('SHARES')], [my $printers, N('PRINTERS')], [my $wizard, N('WIZARD')], [my $status, N('STATUS')], [my $view, N('VIEW')], [my $password, N('PASSWORD')]) { $_->[0] ||= new Gtk2::Button($_->[1]); $notebook->append_page( $_->[0], new Gtk2::Label($_->[1]) ); } # we make everything visible in the window $window->show_all(); #and we start the Gtk2 main loop. Gtk2->main; sub set_defaults {} sub save { #$samba->writeconf(); } sub save_exit { # we ask the $samba object to write itself back to the real config file # he knows everything about himself, so no need to give him any arg. # the file is rewritten, without loosing any information or comments. save(); # we exit the gtk2 main loop Gtk2->main_quit(); } # the function called when the user clicks on the Cancel button sub cancel_exit { # we exit the gtk2 main loop Gtk2->main_quit(); }