summaryrefslogtreecommitdiffstats
path: root/control-center3
diff options
context:
space:
mode:
authorDaouda Lo <daouda@mandriva.com>2001-01-31 17:26:27 +0000
committerDaouda Lo <daouda@mandriva.com>2001-01-31 17:26:27 +0000
commit66674428100cb977c5e26fde9be040291e8cf8a9 (patch)
tree1b6747a46a435eab29f40bed7396df732c91d7d6 /control-center3
parenta7dbc762f84d4a97f3c9d10fc9c339bf1e12601e (diff)
downloadcontrol-center-66674428100cb977c5e26fde9be040291e8cf8a9.tar
control-center-66674428100cb977c5e26fde9be040291e8cf8a9.tar.gz
control-center-66674428100cb977c5e26fde9be040291e8cf8a9.tar.bz2
control-center-66674428100cb977c5e26fde9be040291e8cf8a9.tar.xz
control-center-66674428100cb977c5e26fde9be040291e8cf8a9.zip
new fork : we use a tree widget for groups and applis instead of hash
Diffstat (limited to 'control-center3')
-rwxr-xr-xcontrol-center3436
1 files changed, 436 insertions, 0 deletions
diff --git a/control-center3 b/control-center3
new file mode 100755
index 00000000..0cd15430
--- /dev/null
+++ b/control-center3
@@ -0,0 +1,436 @@
+#!/usr/bin/perl -w
+
+# Control-center
+
+# Copyright (C) 1999 MandrakeSoft
+# Damien Krotkine (damien@mandrakesoft.com)
+# Daouda Lo (daouda@mandrakesoft.com)
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+
+use Gtk;
+use Config;
+use POSIX;
+
+init Gtk;
+use Data::Dumper;
+
+my %pixmaps_global;
+my $xpm_path="pixmaps";
+
+my $window_global = new Gtk::Window -toplevel;
+$window_global->set_usize(640, 480);
+$window_global->signal_connect ( delete_event => sub { Gtk->exit(0); });
+$window_global->set_position(1);
+$window_global->set_title("Mandrake Control Center");
+$window_global->border_width(0);
+
+$vbox_global = new Gtk::VBox(0, 0);
+$window_global->add($vbox_global);
+
+######### menus
+my @item_factory_entries = (
+ ["/_File", undef, 0, "<Branch>"],
+ ["/File/tearoff1", undef, 0, "<Tearoff>"],
+ #["/File/_Quit", "<control>Q", 5],
+ {
+ 'path' => "/File/_Quit",
+ 'accelerator' => "<control>Q",
+ 'action' => 1,
+ 'type' => '<Item>'
+ },
+ ["/_Help", undef, 0, "<Branch>"],
+ ["/Help/_Mandrake Control Center", undef, 30],
+ ["/Help/_Report Bug", undef, 30],
+ ["/Help/_About", undef, 30]
+ );
+
+my ($accel_group, $item_factory, $box1, $label, $box2);
+my ($separator, $button, $dummy);
+
+$accel_group = new Gtk::AccelGroup;
+$item_factory = new Gtk::ItemFactory('Gtk::MenuBar', "<main>", $accel_group);
+
+$accel_group->attach($window_global);
+foreach (@item_factory_entries) {
+ $item_factory->create_item($_, \&item_factory_cb);
+}
+
+$vbox_global->pack_start($item_factory->get_widget('<main>'), 0, 0, 0);
+$hseparator_global = new Gtk::HSeparator;
+$vbox_global->pack_start($hseparator_global, 0, 1, 0);
+######### menus end
+
+
+my $hbox_global = new Gtk::HBox(0,0);
+$vbox_global->pack_start($hbox_global, 1, 1, 0);
+$hbox_global->border_width(5);
+my $scrolled_global = new Gtk::ScrolledWindow;
+$scrolled_global->set_policy('automatic','automatic');
+$scrolled_global->set_usize(120, 0);
+$scrolled_global->set_name("icons_back");
+#$scrolled_global->window->draw_rectangle(nil,1, 0, 0, 70, 70); #$scrolled_global->window->style->bg_gc('normal')
+$hbox_global->pack_start($scrolled_global,0,1,0);
+my $vseparator_global = new Gtk::VSeparator;
+$hbox_global->pack_start($vseparator_global,0,1,0);
+
+my $notebook_global = new Gtk::Notebook;
+$notebook_global->set_show_border(0);
+$notebook_global->set_show_tabs(0);
+$hbox_global->pack_start($notebook_global,1,1,0);
+
+#-------------------------------- splash screeen --------------------------------------------------------
+
+my $hbox1= new Gtk::HBox(0,20);
+my ($pix_about_map, $pix_about_mask) = Gtk::Gdk::Pixmap->create_from_xpm(NULL, Gtk::Widget->get_default_style->bg('normal'), "$xpm_path/logo.xpm");
+my $pix_about = new Gtk::Pixmap ($pix_about_map, $pix_about_mask);
+$pix_about->set_alignment(10,0);
+$hbox1->pack_start($pix_about, 0, 1, 0);
+my $style = new Gtk::Style;
+$style->font(Gtk::Gdk::Font->load('-adobe-times-bold-r-normal--25-180-100-100-p-132-iso8859-1'));
+my $label_about2 = new Gtk::Label ("Mandrake Control Center");
+$label_about2->set_alignment(0,0);
+$label_about2->set_style($style);
+$hbox1->pack_start($label_about2, 0, 1, 0);
+my $vbox_about = new Gtk::VBox(0,10);
+$vbox_about->pack_start($hbox1, 0, 1, 0);
+my $label_about3 = new Gtk::Label ("This is the Mandrake Control Center, The place where you can configure your Mandrake Box");
+$vbox_about->pack_start($label_about3, 0, 0, 0);
+
+my $table_info1 = new Gtk::Table(6,2,1);
+$table_info1->set_row_spacings(15);
+$table_info1->set_col_spacings(10);
+
+my @revtree;
+my @infotree;
+open VERS, "/etc/redhat-release" or die "cannot open this file for read :$!";
+while (<VERS>) {
+ push (@revtree,$_);
+}
+@info_tree = split / /, $revtree[0];
+
+my ($sysname, $nodename, $release, $version, $machine ) = POSIX::uname();
+my $username= POSIX::cuserid();
+
+my $style1 = new Gtk::Style;
+$style1->font(Gtk::Gdk::Font->load('-adobe-times-bold-r-normal--14-100-100-100-p-76-iso8859-1'));
+
+my $ld = new Gtk::Label("$username");
+$table_info1->attach($ld, 1, 2, 0, 1, 0, 0, 0, 0);
+my $label_user = new Gtk::Label("User: ");
+$label_user->set_style($style1);
+$label_user->set_justify('right');
+$table_info1->attach($label_user, 0, 1, 0, 1, 0, 0, 0, 0);
+my $ld1 = new Gtk::Label("$info_tree[0] $info_tree[1] $info_tree[3] $info_tree[4] ");
+$table_info1->attach($ld1, 1, 2, 1, 2, 0, 0, 0, 0);
+my $ld2 = new Gtk::Label("$nodename");
+$table_info1->attach($ld2, 1, 2, 2, 3, 0, 0, 0, 0);
+my $ld3 = new Gtk::Label("$release $version");
+$table_info1->attach($ld3, 1, 2, 3, 4, 0, 0, 0, 0);
+my $ld4 = new Gtk::Label("$machine");
+$table_info1->attach($ld4, 1, 2, 4, 5, 0, 0, 0, 0);
+my $label_os = new Gtk::Label("System: ");
+$label_os->set_style($style1);
+$label_os->set_justify('right');
+$table_info1->attach($label_os, 0, 1, 1, 2, 0, 0, 0, 0);
+my $label_host = new Gtk::Label("Hostname: ");
+$label_host->set_style($style1);
+$table_info1->attach_defaults($label_host, 0, 1, 2, 3);
+my $label_kernel = new Gtk::Label("Kernel Version : ");
+$label_kernel->set_style($style1);
+$table_info1->attach_defaults($label_kernel, 0, 1, 3, 4);
+my $label_box = new Gtk::Label("Machine: ");
+$label_box->set_style($style1);
+$table_info1->attach_defaults($label_box, 0, 1, 4, 5);
+
+$vbox_about->set_spacing(30);
+$vbox_about->pack_start($table_info1, 0, 0, 0);
+$vbox_about->reorder_child($table_info1,150);
+
+
+$notebook_global->append_page($vbox_about, "$arg");
+my $vbox_global_left = new Gtk::VBox(0,0);
+$scrolled_global->add_with_viewport($vbox_global_left);
+
+$window_global->realize;
+#map {
+# $pixmaps_global{$_ . '_pixmap'} =
+# Gtk::Gdk::Pixmap->create_from_xpm($window_global->window, Gtk::Widget->get_default_style->bg('normal'), "$xpm_path/$_.xpm");
+#} ('item1', 'item2', 'item3', 'item4', 'item5','draknet1','draknet2','draknet3','draknet4', 'draknet5', 'drakgw');
+
+
+my $tree= new Gtk::Tree;
+$vbox_global_left->pack_start($tree,1,1,0);
+map {
+ create_treeitem($tree,"$xpm_path/logo.xpm",$_);
+ } ('Boot Conf', 'Hard Conf', 'Encule', 'Ta race', 'Salope');
+
+
+my $rc = "control-center.rc";
+Gtk::Rc->parse($rc);
+$window_global->show_all;
+#for (my $i=0; $i<$tree{nb_groups}; $i++) {
+# for (my $j=0; $j<$tree[$i]{nb_applis}; $j++) {
+# $tree[$i]{applis}[$j]{darea}->hide;
+# $tree[$i]{applis}[$j]{label}->hide;
+# }
+#}
+
+print "num : " . $notebook_global->page_num($vbox_about) . "\n";
+$notebook_global->set_page(0);
+$SIG{USR1} = sub { $notebook_global->set_page(0); }; # embedded applications will send me that signal in order to "hide" them
+
+Gtk->main;
+
+#sub about_mdk_cc()
+#{
+#}
+
+sub create_treeitem()
+{
+ my ($parent_tree, $pixmap, $label) =@_;
+
+ my (
+ $tree_item,
+ $treebox
+ );
+
+ $treeitem = new Gtk::TreeItem;
+ $treebox = xpm_label_box($window_global,$pixmap,$label);
+ $treeitem->add($treebox);
+ $treebox->show();
+ $parent_tree->append($treeitem);
+}
+
+sub create_subtree
+{
+ my($item, $box, $level) = @_;
+
+ my(
+ $item_subtree,
+ $item_new,
+ $nb_item,
+ $no_root_item
+ );
+
+
+}
+
+sub xpm_label_box
+{
+ my ( $parent, $xpm_filename, $label_text ) = @_;
+
+ my $box;
+ my $style;
+ my $pixmap;
+ my $mask;
+ my $pixmapwid;
+ my $label;
+
+ # Create box for xpm and label
+ $box = new Gtk::HBox( $false, 0 );
+
+ # Get the style of the button to get the background color.
+ $style = $parent->get_style()->bg( 'normal' );
+
+ # Now on to the xpm stuff
+ ( $pixmap, $mask ) = Gtk::Gdk::Pixmap->create_from_xpm($parent->window, $style, $xpm_filename );
+ $pixmapwid = new Gtk::Pixmap( $pixmap, $mask );
+
+ # Create a label for the button
+ $label = new Gtk::Label( $label_text );
+
+ # Pack the pixmap and label into the box
+ $box->pack_start( $pixmapwid, $false, $false, 3 );
+ $box->pack_start( $label, $false, $false, 3 );
+
+ $box->border_width( 2 );
+ $pixmapwid->show();
+ $label->show();
+
+ return ( $box );
+ }
+
+
+
+
+sub draw_icon {
+ my ($width, $height, $icon_name, $decalage, $exec_string, $name, $number ) = @_;
+ my %hash;
+ if ($exec_string) {
+ my $socket = new Gtk::Socket;
+ $socket->show;
+ $notebook_global->append_page($socket, "");
+ $socket->realize;
+ print ("The XID of the sockets window n°$arg is [" . $socket->window->XWINDOW . "]\nMy PID is [" . $$ . "]\n");
+ my $a = $exec_string . " --embedded " . $socket->window->XWINDOW . " " . $$ . "&";
+ print "$a\n";
+ system ($a);
+ }
+ $hash{PIX_W} = $width;
+ $hash{PIX_H} = $height;
+ $hash{actual_pixmap}=1;
+ $hash{save_pixmap}=0;
+ $hash{anim_idle}=undef;
+ $hash{timeout}=undef;
+ $hash{darea} = new Gtk::DrawingArea;
+ $hash{label} = new Gtk::DrawingArea;
+ $hash{label}->set_usize(50, 12);
+ $hash{label}->signal_connect(expose_event => sub {
+ my $font = $hash{label}->style->font;
+ my $w = $font->string_width($name);
+ $hash{label}->window->draw_string($font, $hash{label}->style->fg_gc('normal'), ($hash{label}->allocation->[2] - $w) / 2 * 0 + $decalage*20, 9, $name );
+#($hash{label}->allocation->[3]-40)/2
+#$hash{label}->window->draw_string($font, $hash{label}->style->bg_gc('normal'), 0, 10, "QQWWylt"); #($hash{label}->allocation->[3]-40)/2
+});
+
+ if ($exec_string) {
+ $tree[$group]{applis}[$item]{darea} = $hash{darea};
+ $tree[$group]{applis}[$item]{label} = $hash{label};
+ }
+ $hash{darea}->set_usize($width,$height);
+ $hash{darea}->set_events(['exposure_mask', 'enter_notify_mask', 'leave_notify_mask', 'button_press_mask', 'button_release_mask' ]);
+ $hash{darea}->signal_connect
+ (expose_event => sub {
+ $hash{darea}->window->draw_pixmap
+ ($hash{darea}->style->bg_gc('normal'),
+ $pixmaps_global{ $icon_name . $hash{actual_pixmap} . '_pixmap'}, 0, 0,
+ ($hash{darea}->allocation->[2]-$hash{PIX_W})/2*0+($decalage * 20),
+ ($hash{darea}->allocation->[3]-$hash{PIX_H})/2,
+ $hash{PIX_W} , $hash{PIX_H} );
+ });
+
+
+ $hash{darea}->signal_connect
+ (enter_notify_event => sub {
+ $hash{anim_idle} ||= Gtk->idle_add
+ ( sub {
+ $hash{actual_pixmap}==$hash{save_pixmap} and return 1;
+ $hash{darea}->window->draw_pixmap
+ ($hash{darea}->style->bg_gc('normal'),
+ $pixmaps_global{ $icon_name . 1 . '_pixmap'}, # $hash{actual_pixmap} . '_pixmap'},
+ 0, 0,
+ ($hash{darea}->allocation->[2]-$hash{PIX_W})/2*0+($decalage * 20),
+ ($hash{darea}->allocation->[3]-$hash{PIX_H})/2,
+ $hash{PIX_W} , $hash{PIX_H} );
+ $hash{save_pixmap}=$hash{actual_pixmap};
+ return 1;
+ });
+
+ $hash{timeout} ||= Gtk->timeout_add
+ ( 50, sub {
+ $hash{actual_pixmap}++;
+ $hash{actual_pixmap}>5 and $hash{actual_pixmap}=1;
+ return 1;
+ });
+ });
+
+
+ $hash{darea}->signal_connect
+ (leave_notify_event => sub {
+ Gtk->main_iteration() while ($hash{save_pixmap}!=1);
+ Gtk->idle_remove($hash{anim_idle});
+ Gtk->timeout_remove($hash{timeout});
+ undef $hash{anim_idle};
+ undef $hash{timeout};
+ });
+ # $hash{darea}->signal_connect(button_press_event => sub { });
+ if ($exec_string) {
+ $hash{darea}->signal_connect(button_release_event => sub { $notebook_global->set_page($number+1); });
+ } else {
+ $hash{darea}->signal_connect(button_release_event => sub {
+ print "group : $number\n";
+ for (my $i=0; $i<$tree{nb_groups}; $i++) {
+ for (my $j=0; $j<$tree[$i]{nb_applis}; $j++) {
+ if ($i==$number) {
+ #print "yep i : $i ; j : $j\n";
+ #print Data::Dumper->Dump([$tree[$i]{applis}[$j]{darea}], ['darea-->']) . "\n";
+ $tree[$i]{applis}[$j]{darea}->show;
+ $tree[$i]{applis}[$j]{label}->show;
+ } else {
+ #print "nope i : $i ; j : $j\n";
+ $tree[$i]{applis}[$j]{darea}->hide;
+ $tree[$i]{applis}[$j]{label}->hide;
+ }
+ }
+ }
+ });
+ }
+ $vbox_global_left->pack_start($hash{darea},0,1,0);
+ $vbox_global_left->pack_start($hash{label},0,1,0);
+}
+
+sub item_factory_cb {
+ my ($widget, $action, @data) = @_;
+
+ print "ItemFactory: activated ", $widget->item_factory_path(), " -> ", $action, "\n";
+ $action == 1 and Gtk->exit(0);
+}
+
+
+sub create_item_factory {
+ if (!defined $item_factory_window) {
+ my ($accel_group, $item_factory, $box1, $label, $box2);
+ my ($separator, $button, $dummy);
+
+
+ $item_factory_window = new Gtk::Window('toplevel');
+ signal_connect $item_factory_window destroy => \&destroy_window, \$item_factory_window;
+ signal_connect $item_factory_window "delete-event" => \&destroy_window, \$item_factory_window;
+
+ $accel_group = new Gtk::AccelGroup;
+ $item_factory = new Gtk::ItemFactory('Gtk::MenuBar', "<main>", $accel_group);
+
+ #$item_factory_window->set_data('<main>', $item_factory);
+ $accel_group->attach($item_factory_window);
+ # $item_factory->create_items();
+ foreach (@item_factory_entries) {
+ $item_factory->create_item($_, \&item_factory_cb);
+ }
+
+ $item_factory_window->set_title("Item Factory");
+ $item_factory_window->set_border_width(0);
+
+ $box1 = new Gtk::VBox(0, 0);
+ $item_factory_window->add($box1);
+ $box1->pack_start($item_factory->get_widget('<main>'), 0, 0, 0);
+
+ $label = new Gtk::Label "Type\n<alt>\nto start";
+
+ $label->set_usize(200, 200);
+ $label->set_alignment(0.5, 0.5);
+ $box1->pack_start($label, 1, 1, 0);
+
+ $separator = new Gtk::HSeparator;
+ $box1->pack_start($separator, 0, 1, 0);
+
+ $box2 = new Gtk::VBox(0, 10);
+ $box2->set_border_width(10);
+ $box1->pack_start($box2, 0, 1, 0);
+
+ $button = new Gtk::Button("close");
+ $button->signal_connect('clicked', sub {$item_factory_window->destroy;});
+ $box2->pack_start($button, 1, 1, 0);
+ $button->can_default(1);
+ $button->grab_default;
+
+ }
+ if (!visible $item_factory_window) {
+ show_all $item_factory_window;
+ } else {
+ destroy $item_factory_window;
+ }
+}