diff options
author | Mystery Man <unknown@mandriva.org> | 2003-05-19 14:55:45 +0000 |
---|---|---|
committer | Mystery Man <unknown@mandriva.org> | 2003-05-19 14:55:45 +0000 |
commit | 7994644e1353db36673c5125ca86b3a6683110f5 (patch) | |
tree | eb390d9388c306c4a05d2d62b9715aca30563628 /perl-install/standalone/drakfont | |
parent | bfb5c11017c5a7a76c860d3e01c70ce562231b3f (diff) | |
download | drakx-backup-do-not-use-9_1_38mdk.tar drakx-backup-do-not-use-9_1_38mdk.tar.gz drakx-backup-do-not-use-9_1_38mdk.tar.bz2 drakx-backup-do-not-use-9_1_38mdk.tar.xz drakx-backup-do-not-use-9_1_38mdk.zip |
This commit was manufactured by cvs2svn to create tag 'V9_1_38mdk'.V9_1_38mdk
Diffstat (limited to 'perl-install/standalone/drakfont')
-rwxr-xr-x | perl-install/standalone/drakfont | 912 |
1 files changed, 0 insertions, 912 deletions
diff --git a/perl-install/standalone/drakfont b/perl-install/standalone/drakfont deleted file mode 100755 index 4efd6d815..000000000 --- a/perl-install/standalone/drakfont +++ /dev/null @@ -1,912 +0,0 @@ -#!/usr/bin/perl -# -# Copyright (C) 2001-2002 by MandrakeSoft -# DUPONT Sebastien -# Damien Chaumette <dchaumette@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. -# -# drakfont Future Overview -# - Fonts import: -# pfb ( Adobe Type 1 binary ) -# pfa ( Adobe Type 1 ASCII ) -# ttf ( True-Type ) -# pcf.gz -# Speedo -# and Bitmap (PCF, BDF, and SNF) -# - Features -# - Install fonts from any directory -# - Get windows fonts on any vfat partitions -# - Get fonts on any partitions. -# - UN-installation of any fonts (even if not installed through drakfont) -# - Support -# - Xfs -# - ghostscript & printer -# - Staroffice & printer -# - abiword -# - netscape -# - Koffice, Gnumeric, ... studying -# - all fonts supported by printer -# - anti-aliases by RENDER in Xfree86 .... -# supported by KDE. -# will be supported by gnome 1.2. -# Visual Interface: -# Window interface: -# - Fontselectiondialog widget -# - Command buttons under Fontselectiondialog (like the actual frontend). -# Commands buttons: -# - import from windows partition. -# import from all fat32 partitions and look for winnt/windows/font -# and import all (delete doubles) but don't import if they already exist. -# - import from directory -# look to see if each font exists and do not delete the original. -# (replace all, no, none) -# expert options: -# specify the directory, and look to see if it exists before -# if it exists ask: (replace all, no, none) -# - uninstall with list per font type -# Expert additional switch -# - option support: ghostscript, Staroffice, etc... -# check-button. (by default all check) -# - Printer Application Fonts Support... -# check-button. (by default all check) -# -# TODO: -# - abiword, Koffice, Gnumeric, ... -# - Speedo and Bitmap (PCF, BDF, and SNF) -# - option strong: strong verification with ttmkfdir -c ? -# -# REQUIRE: -# - font-tools.*.mdk.i586.rpm -# -# USING: -# - pfm2afm: by Ken Borgendale: Convert a Windows .pfm file to a .afm (Adobe Font Metrics) -# - type1inst: by James Macnicol: type1inst generates files fonts.dir fonts.scale & Fontmap. -# - ttf2pt1: by Andrew Weeks, Frank Siegert, Thomas Henlich, Sergey Babkin convert ttf font files to afm and pfb fonts -# -# -# directory to install fonts /usr/X11R6/lib/X11/fonts/ -# -->> /usr/X11R6/lib/X11/fonts/drakfont - -use strict; -use diagnostics; - -use lib qw(/usr/lib/libDrakX); - -use standalone; #- warning, standalone must be loaded very first, for 'explanations' - -use ugtk2 qw(:helpers :wrappers :create); -use common; - -require_root_capability(); - -# global variables needed by each functions -my $xlsfonts = 0; -my $windows = 0; -my $strong; -my $replace; -my $application; -my $install; -my $uninstall; -my $so = 1; -my $gs = 1; -my $abi = 1; -my $printer = 1; -my $mode = -1; -my @application; -my @install; -my @uninstall; -my $interactive; -my $text; -my $vscrollbar; -my $check4; -my $check1; -my $check2; -my $check3; -my $pbar; -my $pbar1; -my $pbar2; -my $pbar3; -my $font_box; -my $central_widget; -my $label1; -my $label2; -my $label3; -my $label4; -my $list_path; -my $path_list; -my $current_path; -my $model; -my $list; -my $list_all_font_path; -my $left_list; -my $right_list; -my $left_model; -my $right_model; - -foreach (@ARGV) { - /--list|-l/ and $list_all_font_path = 1, $mode = -1; - /--xls_fonts/ and $xlsfonts = 1, $mode = -1; - /--windows_import|-wi/ and $windows = 1, $mode = -1; - /--strong|-s/ and $strong = 1, $mode = -1; - /--replace|-r/ and $replace = 1, $mode = -1; - /--application/ and $mode = 0, next; - $mode == 0 and push @application, $_; - /--install/ and $mode = 1, next; - $mode == 1 and push @install, $_; - /--uninstall/ and $mode = 2, next; - $mode == 2 and push @uninstall, $_; -} - -foreach my $i (@application) { - if ($i =~ /so/i) { - if ($gs != 2) { $gs = 0 } - $so = 2; - } - if ($i =~ /gs/i) { - if ($so != 2) { $so = 0 } - $gs = 2; - } -} - -# PATH and binary full path -my $xfs_conffile = '/etc/fonts/fonts.conf'; -my $drakfont_dir = '/usr/X11R6/lib/X11/fonts/drakfont'; -my $ttf2pt1 = '/usr/sbin/ttf2pt1'; -my $pfm2afm = '/usr/sbin/pfm2afm'; -my $type1inst = '/usr/sbin/type1inst'; -my $chkfontpath = '/usr/sbin/chkfontpath'; -# mkttfdir only knows about iso-8859-1, using ttmkfdir -u instead -- pablo -my $ttmkfdir = '/usr/sbin/ttmkfdir'; -my $fccache = '/usr/bin/fc-cache'; -my $ghostscript; - -my @font_list; # list of fonts to install -my @installed_fonts; # list of installed fonts -my @installed_fonts_path; # list of path included in xfs -my @fontsdir_to_install; # list of fonts to uninstall -my @fontsdir_to_uninstall; # path to remove in xfs font file -my @installed_fonts_full_path; # full path list of fonts to uninstall - -sub list_fontpath() { - foreach (grep { /\d+:\s/ } `$chkfontpath -l`) { - chomp; - s/\d+:\s//gi; - s/:\w*$//gi; - push @installed_fonts_path, $_; - } -} - -sub chk_empty_xfs_path() { - foreach my $tmp_path (@installed_fonts_path) { - if (!(any { if_(!(/^fonts/ || /^type/), $_) } all($tmp_path))) { - system("chkfontpath -r $tmp_path ") - or print "PERL::system command failed during chkfontpath\n"; - } - } -} - -sub search_installed_fonts() { - list_fontpath(); - interactive_progress($pbar, 0.1, N("Search installed fonts")); - push @installed_fonts, all($_) foreach @installed_fonts_path; - interactive_progress($pbar, 0.1, N("Unselect fonts installed")); -} - -sub search_installed_fonts_full_path() { - list_fontpath(); - foreach my $i (@installed_fonts_path) { - foreach my $j (all($i)) { - push @installed_fonts_full_path, "$i/$j"; - } - } -} - -sub search_windows_font() { - foreach my $fstab_line (grep { /vfat|ntfs/ } cat_('/etc/mtab')) { - my $win_dir = (split('\s', $fstab_line))[1]; - my @list_fonts_win = all("$win_dir/windows/fonts"); - my @list_fonts_winnt = all("$win_dir/winnt/fonts"); - my $nb_dir = @list_fonts_win + @list_fonts_winnt; - foreach ([ \@list_fonts_win, "windows" ], - [ \@list_fonts_winnt, "winnt" ]) { - foreach my $i (@{ $_->[0] }) { - if ($interactive) { - if ($nb_dir) { - progress($pbar, 0.25 / $nb_dir, N("parse all fonts")); - } else { - display_error(N("no fonts found")); - return 0; - } - } - !$replace && any { /$i/ } @installed_fonts and next; - grep { /$i$/ } @font_list or push @font_list, "$win_dir/$_->[1]/fonts/$i"; - } - } - $interactive && $nb_dir and progress($pbar, 1, N("done")); - } - if (!@font_list) { - print "[35mdrakfont:: could not find any font in /win*/fonts [0m\n"; - $interactive - and display_error( - N("could not find any font in your mounted partitions")); - return 0; - } - 1; -} - -sub is_a_font($) { - my ($file) = @_; - any { $file =~ /\Q.$_\E$/i } qw(ttf pfa pfb pcf pcf.gz pfm gsf); -} - -# Optimisation de cette etape indispensable -sub search_dir_font() { - foreach my $fn (@install) { - my @font_list_tmp; - my $dir; - if (!(-e $fn)) { print "$fn :: no such file or directory \n" } - else { - if (-d $fn) { - $dir = $fn; - foreach my $i (all($fn)) { - if (is_a_font($i)) { - push @font_list_tmp, $i; - foreach my $i (@font_list_tmp) { - !$replace && any { /$i/ } @installed_fonts and next; - grep { /$i/ } @font_list or push @font_list, "$fn/$i"; - } - } - } - } - elsif (is_a_font($fn)) { - !$replace && any { /$fn/ } @installed_fonts and next; - !grep { /$fn/ } @installed_fonts and push @font_list, $fn; - } - } - interactive_progress($pbar, 0.50 / @install, N("Reselect correct fonts")); - } - interactive_progress($pbar, 1, N("done")); - !@font_list && $interactive and display_error(N("could not find any font.\n")); -} - -sub search_dir_font_uninstall { - my ($fn) = @_; - my @font_list_tmp; - if (-d $fn) { - @font_list_tmp = map { if_(is_a_font($_), $_) } all($fn); - } else { - push @font_list_tmp, $fn if is_a_font($fn); - } - @font_list = uniq(@font_list, @installed_fonts_full_path); - print "Fonts to uninstal: " . $_ . "\n" foreach @font_list; -} - -sub search_dir_font_uninstall_gi() { - @font_list = @uninstall; - interactive_progress($pbar, 1, N("Search for fonts in installed list")); -} - -sub print_list() { - print "Font(s) to Install:\n\n"; - print "$_\n" foreach @font_list; -} - -sub dir_created() { - -e $drakfont_dir or mkdir_p($drakfont_dir); - -e $drakfont_dir . "/Type1" or mkdir_p($drakfont_dir . "/Type1"); - -e $drakfont_dir . "/ttf" or mkdir_p($drakfont_dir . "/ttf"); - -e $drakfont_dir . "/tmp" or mkdir_p($drakfont_dir . "/tmp"); - -e $drakfont_dir . "/tmp/ttf" or mkdir_p($drakfont_dir . "/tmp/ttf"); - -e $drakfont_dir . "/tmp/Type1" or mkdir_p($drakfont_dir . "/tmp/Type1"); - -e $drakfont_dir . "/tmp/tmp" or mkdir_p($drakfont_dir . "/tmp/tmp"); -} - - -sub convert_fonts { - my ($fonts, $converter, $font_type, $o_generate_pfb) = @_; - $o_generate_pfb = $o_generate_pfb ? "-b" : ""; - foreach my $fontname (@$fonts) { - system("cd $drakfont_dir/tmp/tmp && $converter $o_generate_pfb $fontname"); - interactive_progress($pbar2, 0.50 / @$fontname, N("%s fonts conversion", $font_type)); - } -} - -sub convert_ttf_fonts { - my ($fonts, $o_generate_pfb) = @_; - convert_fonts($fonts, $o_generate_pfb, "TTF", $ttf2pt1); -} - - - -sub put_font_dir() { - -e "/usr/share/ghostscript" or do { $gs = 0; print "ghostscript is not installed on your system...\n" }; - if (@font_list) { - dir_created(); - foreach my $i (@font_list) { - cp_af($i, $drakfont_dir . "/tmp/tmp"); - interactive_progress($pbar1, 1 / @font_list, N("Fonts copy")); - } - interactive_progress($pbar1, 0.01, N("done")); - interactive_progress($pbar2, 0.10, N("True Type fonts installation")); - glob("$drakfont_dir/tmp/tmp/*.TTF") - and system('cd ' . $drakfont_dir . '/tmp/tmp ; for foo in *.TTF; do mv $foo `basename $foo .TTF`.ttf; done'); - system('cd ' . $drakfont_dir . '/tmp/tmp && cp *.ttf ../../ttf'); - interactive_progress($pbar2, 0.20, N("please wait during ttmkfdir...")); - - my $ttfdir = $drakfont_dir . "/ttf"; - system("cd $ttfdir && $fccache && $ttmkfdir -u > fonts.dir"); - interactive_progress($pbar2, 0.10, N("True Type install done")); - my $update_chkfontpath = "$chkfontpath -a $drakfont_dir/ttf"; - - if ($so && $gs) { - my @glob_drak = glob("$drakfont_dir/tmp/tmp/*.ttf"); - convert_ttf_fonts(\@glob_drak, 1); - system("cd $drakfont_dir/tmp/tmp && mv *.gsf *.pfb *.pfm *.afm ../Type1"); - system("cd $drakfont_dir/tmp/Type1 && $type1inst"); - interactive_progress($pbar2, 0.10, N("type1inst building")); - -e "$drakfont_dir/tmp/Type1/Fontmap" - and system("cd $drakfont_dir/tmp/Type1 && cat Fontmap >> `rpm -ql ghostscript | grep Fontmap.GS` "); - system("cd $drakfont_dir/tmp/Type1 && mv *.pfm *.gsf *.afm *.pfb ../../Type1 "); - my $type1dir = $drakfont_dir . "/Type1"; - system("cd $type1dir && $fccache && $type1inst"); - interactive_progress($pbar2, 0.05, N("Ghostscript referencing")); - $update_chkfontpath .= "; $chkfontpath -a $drakfont_dir/Type1"; - } - - if (!$so && $gs) { - convert_ttf_fonts([ glob("$/drakfont_dir/tmp/tmp/*.ttf") ], 1); - system("cd $drakfont_dir/tmp/tmp && mv *.gsf *.pfb *.pfm ../Type1"); - system("cd $drakfont_dir/tmp/Type1 && $type1inst"); - interactive_progress($pbar2, 0.1, N("type1inst building")); - system("cd $drakfont_dir/tmp/Type1 && cat Fontmap >> `rpm -ql ghostscript | grep Fontmap.GS` "); - system("cd $drakfont_dir/tmp/Type1 && mv *.pfm *.afm *.gsf *.pfb ../../Type1 "); - my $type1dir = $drakfont_dir . "/Type1"; - system("cd $type1dir && $fccache && $type1inst"); - interactive_progress($pbar2, 0.05, N("Ghostscript referencing")); - $update_chkfontpath .= "; $chkfontpath -a $drakfont_dir/Type1"; - } - - if ($so && !$gs) { - convert_ttf_fonts([ glob("$drakfont_dir/tmp/tmp/*.ttf") ]); - convert_fonts([ glob("$drakfont_dir/tmp/tmp/*.pfm") ], $pfm2afm, "PFM"); - system("cd $drakfont_dir/tmp/tmp && mv *.afm ../Type1"); - system("cd $drakfont_dir/tmp/Type1 && mv *.afm ../../Type1 "); - my $type1dir = $drakfont_dir . "/Type1"; - system("cd $type1dir && $fccache && $type1inst"); - interactive_progress($pbar2, 0.14, N("type1inst building")); - $update_chkfontpath .= "; $chkfontpath -a $drakfont_dir/Type1"; - } - - interactive_progress($pbar2, 1, N("done")); - interactive_progress($pbar3, 0.25, N("Suppress Temporary Files")); - rm_rf("$drakfont_dir/tmp/"); - print "\n\nretarting xfs......\n"; - interactive_progress($pbar3, 0.5, N("Restart XFS")); - system($update_chkfontpath); - system('/etc/rc.d/init.d/xfs restart'); - system('xset fp rehash'); - interactive_progress($pbar3, 0.30, N("done")); - } -} - -sub remove_gs_fonts() { - my @Fontmap_new; - - if (all("$drakfont_dir/remove")) { - system(" cd $drakfont_dir/remove && $type1inst"); - my @Fontmap_out = cat_("$drakfont_dir/remove/Fontmap"); - my $FontmapGS = `rpm -ql ghostscript | grep Fontmap.GS`; - chomp($FontmapGS); - my @FontmapGS_list = cat_($FontmapGS); - foreach my $font_gs (@FontmapGS_list) { - my @tmp_list = split(' ', $font_gs); - grep { /$tmp_list[0]/ } @Fontmap_out or push @Fontmap_new, $font_gs; - } - print $_ foreach @Fontmap_new; - output($FontmapGS, @Fontmap_new); - } - -} - -sub remove_fonts() { - my @list_dir; - -e $drakfont_dir . "/remove" or mkdir_p($drakfont_dir . "/remove"); - interactive_progress($pbar, 1, N("done")); - - foreach my $i (@font_list) { - local $_ = $i; - if (/.pfb$/ || /.gsf$/ || /.pfm$/ || /.pfa$/) { - system("mv $_ $drakfont_dir/remove "); - } else { - if (/.ttf$/) { - rm_rf($_); - # rebuild of the fonts.dir and fc-cache files - system("cd `dirname $_` && $fccache && $ttmkfdir -u > fonts.dir"); - } else { rm_rf($i) } - } - $i =~ s!/\w*\.\w*!!gi; - grep { $i } @list_dir or push @list_dir, $i; - interactive_progress($pbar1, 1 / @font_list, N("Suppress Fonts Files")); - } - interactive_progress($pbar1, 0.01, N("done")); - -e "/usr/share/ghostscript" and remove_gs_fonts(); - foreach my $i (@list_dir) { - if (listlength all($i) < 3) { - system("chkfontpath -r $i") or print "PERL::system command failed during chkfontpath\n"; - } else { - system("cd $i && type1inst") or print "PERL::system command failed during cd or type1inst\n"; - } - interactive_progress($pbar2, 1 / @list_dir, N("Suppress Fonts Files")); - } - interactive_progress($pbar2, 0.01, N("xfs restart")); - system("/etc/rc.d/init.d/xfs restart"); - system('xset fp rehash'); - -e "/usr/share/ghostscript" and rm_rf("$drakfont_dir/remove"); - interactive_progress($pbar2, 0.01, N("done")); -} - -sub license_msg() { - print N("Before installing any fonts, be sure that you have the right to use and install them on your system.\n\n-You can install the fonts the normal way. In rare cases, bogus fonts may hang up your X Server.") . "\n"; -} - -sub backend_mod() { - $xlsfonts and system("xlsfonts"); - $list_all_font_path and system($chkfontpath); - - if ($windows) { - license_msg(); - print "\nWindows fonts Installation........\n"; - search_installed_fonts(); - if (search_windows_font()) { - print_list(); - put_font_dir(); - } - print "\nThe End...........................\n"; - } - - if (@install) { - license_msg(); - print "\nInstall Specifics Fonts...........\n"; - search_installed_fonts(); - search_dir_font(); - print "Font to install: " . $_ . "\n" foreach @font_list; - put_font_dir(); - print "\nThe End...........................\n"; - } - - if (@uninstall) { - print "\nUninstall Specifics Fonts.........\n"; - search_installed_fonts_full_path(); - if ($interactive) { search_dir_font_uninstall_gi() } - else { search_dir_font_uninstall() foreach @uninstall } - remove_fonts(); - print "\nThe End............................\n"; - } -} - -sub create_fontsel() { - my $font_sel; - gtkpack($font_box, $font_sel = new Gtk2::FontSelection,); - $central_widget = \$font_sel; -} - -sub display_error { - my ($message) = @_; - my $error_box; - $$central_widget->destroy(); - gtkpack($font_box, - $error_box = gtkpack_(new Gtk2::VBox(0, 0), 1, - new Gtk2::Label($message), 0, - gtkadd(gtkset_layout(new Gtk2::HButtonBox, 'spread'), - gtksignal_connect(new Gtk2::Button(N("OK")), - clicked => sub { $$central_widget->destroy(); create_fontsel() } - ), - ), - ) - ); - $central_widget = \$error_box; -} - -sub interactive_mode() { - my $font_sel; - $interactive = 1; - my $window1 = ugtk2->new('drakfont'); - $window1->{rwindow}->signal_connect(delete_event => sub { ugtk2->exit(0) }); - unless ($::isEmbedded) { - $window1->{rwindow}->set_position('center'); - $window1->{rwindow}->set_title(N("Import Fonts")); - } - my ($adv_opt_button, $font_button); - gtkadd($window1->{window}, - gtkpack_(new Gtk2::VBox(0, 2), if_(!$::isEmbedded, 0, gtkcreate_img("drakfont.620x57")), 1, - gtkpack_(new Gtk2::HBox(0, 2), 1, - gtkpack_(new Gtk2::VBox(0, 2), 1, - gtkpack($font_box = new Gtk2::VBox(0, 5), $font_sel = new Gtk2::FontSelection,), 1, - gtkpack_(new Gtk2::HBox(0, 2), 0, - gtkadd(gtkset_layout(new Gtk2::VButtonBox, 'end'), - gtksignal_connect(new Gtk2::Button(N("Get Windows Fonts")), - clicked => sub { - $$central_widget->destroy(); - $windows = 1; - appli_choice(); - }), - gtksignal_connect(new Gtk2::Button(N("Uninstall Fonts")), - clicked => sub { - $$central_widget->destroy(); - uninstall(); - }), - ), 0, - gtkadd(gtkset_layout(new Gtk2::VButtonBox, 'end'), - gtksignal_connect($adv_opt_button = new Gtk2::Button(N("Advanced Options")), - clicked => sub { - $font_button->set_sensitive(1); - $adv_opt_button->set_sensitive(0); - $$central_widget->destroy(); - $windows = 0; - advanced_install(); - }), - gtksignal_connect($font_button = new Gtk2::Button(N("Font List")), - clicked => sub { - $font_button->set_sensitive(0); - $adv_opt_button->set_sensitive(1); - $$central_widget->destroy(); - create_fontsel(); - }), - ), 1, - new Gtk2::HBox(0, 2), 0, - gtkadd(gtkset_layout(new Gtk2::VButtonBox, 'end'), - gtksignal_connect(new Gtk2::Button(N("About")), clicked => \&help), - gtksignal_connect(new Gtk2::Button(N("Close")), clicked => sub { Gtk2->main_quit() }), - ), - ), - ), - ), - ), - ); - $central_widget = \$font_sel; - $font_button->set_sensitive(0); - $window1->{rwindow}->show_all; - $window1->{rwindow}->realize; - $window1->main; - ugtk2->exit(0); -} - -$list_all_font_path || $xlsfonts || $windows || @install || @uninstall ? backend_mod() : interactive_mode(); - -sub text_view { - my ($text) = @_; - my $box; - gtkpack($font_box, - $box = gtkpack_(new Gtk2::VBox(0,10), 1, - gtkpack_(new Gtk2::HBox(0,0), 1, - create_scrolled_window(gtktext_insert(new Gtk2::TextView, [ [ $text ] ])) - ), 0, - gtkadd(gtkset_layout(new Gtk2::HButtonBox, 'spread'), - gtksignal_connect(new Gtk2::Button(N("OK")), - clicked => sub { $$central_widget->destroy() }), - ), - ) - ); - $central_widget = \$box; - $font_box->show_all(); -} - -sub help() { - ugtk2::create_dialog(N("Help"), N(" - Copyright (C) 2001-2002 by MandrakeSoft - DUPONT Sebastien (original version) - CHAUMETTE Damien <dchaumette\@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. - - Thanks: - - pfm2afm: - by Ken Borgendale: - Convert a Windows .pfm file to a .afm (Adobe Font Metrics) - - type1inst: - by James Macnicol: - type1inst generates files fonts.dir fonts.scale & Fontmap. - - ttf2pt1: - by Andrew Weeks, Frank Siegert, Thomas Henlich, Sergey Babkin - Convert ttf font files to afm and pfb fonts -")); -} - -sub appli_choice() { - my $choice_box; - my $text = new Gtk2::TextView; - gtkpack($font_box, - $choice_box = gtkpack_(new Gtk2::HBox(0, 10), 0, - new Gtk2::VBox(0, 10), 0, - new Gtk2::VBox(0, 10), 1, - gtkpack_(new Gtk2::VBox(0, 10), 1, - gtkpack_(new Gtk2::VBox(0, 10), 1, - gtkpack(new Gtk2::HBox(0, 10), - new Gtk2::HBox(0, 10), - N("Choose the applications that will support the fonts:"), - new Gtk2::HBox(0, 10), - ), 0, - new Gtk2::HBox(0, 10), 0, - gtkpack_(new Gtk2::HBox(0, 10), 0, - N("Ghostscript"), 1, - new Gtk2::HBox(0, 10), 0, - my $check11 = new Gtk2::CheckButton(), - ), 0, - gtkpack_(new Gtk2::HBox(0, 10), 0, - N("StarOffice"), 1, - new Gtk2::HBox(0, 10), 0, - my $check22 = new Gtk2::CheckButton(), - ), 0, - gtkpack_(new Gtk2::HBox(0, 10), 0, - N("Abiword"), 1, - new Gtk2::HBox(0, 10), 0, - my $check33 = new Gtk2::CheckButton(), - ), 0, - gtkpack_(new Gtk2::HBox(0, 10), 0, - N("Generic Printers"), 1, - new Gtk2::HBox(0, 10), 0, - my $check44 = new Gtk2::CheckButton(), - ), - ), 0, - gtkpack_(new Gtk2::HBox(0, 10), 1, - gtktext_insert(gtkset_editable($text, 0), - [ [ N("Before installing any fonts, be sure that you have the right to use and install them on your system.\n\n-You can install the fonts the normal way. In rare cases, bogus fonts may hang up your X Server.") ] ] - ), 0, - new Gtk2::VBox(0, 10), - ), 0, - gtkadd(gtkset_layout(new Gtk2::HButtonBox, 'spread'), - gtksignal_connect(new Gtk2::Button(N("OK")), - clicked => sub { - $$central_widget->destroy(); - import_status(); - }), - gtksignal_connect(new Gtk2::Button(N("Cancel")), - clicked => sub { - @install = (); - $$central_widget->destroy(); - create_fontsel(); - }), - ), - ), 0, - new Gtk2::VBox(0, 10), 0, - new Gtk2::VBox(0, 10), - ), - ); - foreach ([ $check11, \$gs ], [ $check22, \$so ], [ $check33, \$abi ], [ $check44, \$printer ]) { - my $ref = $_->[1]; - gtksignal_connect(gtkset_active($_->[0], $$ref), toggled => sub { $$ref = $$ref ? 0 : 1 }); - } - $central_widget = \$choice_box; - $font_box->show_all(); -} - -my $select_font_msg; - -sub font_choice() { - my $file_dialog; - $select_font_msg = N("Select the font file or directory and click on 'Add'"); - $file_dialog = gtksignal_connect(new Gtk2::FileSelection(N("File Selection")), destroy => sub { $file_dialog->destroy() }); - $file_dialog->ok_button->signal_connect(clicked => \&file_ok_sel, $file_dialog); - $file_dialog->ok_button->set_label(N("Add")); - $file_dialog->cancel_button->signal_connect(clicked => sub { $file_dialog->destroy() }); - $file_dialog->cancel_button->set_label(N("Close")); - $file_dialog->set_filename($select_font_msg); - $file_dialog->show(); -} - -sub file_ok_sel { - my ($_widget, $file_selection) = @_; - my $file_name = $file_selection->get_filename(); - if ($file_name =~ /$select_font_msg/) { - create_dialog(N("Error"), N("You've not selected any font")); - } else { - print "-- @install\n"; - if (!member($file_name, @install)) { - push @install, $file_name; - $model->append_set(undef, [ 0 => $file_name ]); - } - } -} - -sub list_remove() { #- TODO : multi-selection - my ($treeStore, $iter) = $list->get_selection->get_selected; - my $to_remove = $treeStore->get($iter, 0); - my ($index) = map_index { if_($_ eq $to_remove, $::i) } @install; - splice @install, $index, 1; - $treeStore->remove($iter); -} - -sub advanced_install() { - my $adv_box; - $model = Gtk2::TreeStore->new(Gtk2::GType->STRING); - $list = Gtk2::TreeView->new_with_model($model); - $list->append_column(Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::CellRendererText->new, 'text' => 0)); - $list->set_headers_visible(0); - $list->get_selection->set_mode('browse'); - $list->set_rules_hint(1); - - gtkpack($font_box, - $adv_box = gtkpack_(new Gtk2::VBox(0, 10), 1, - gtkpack_(new Gtk2::HBox(0, 4), 1, create_scrolled_window($list),), 0, - gtkadd(gtkset_layout(new Gtk2::HButtonBox, 'spread'), - gtksignal_connect(new Gtk2::Button(N("Add")), clicked => sub { font_choice() }), - gtksignal_connect(new Gtk2::Button(N("Remove Selected")), clicked => \&list_remove), - gtksignal_connect(new Gtk2::Button(N("Install List")), - clicked => sub { - if (@install) { - $$central_widget->destroy(); - appli_choice(); - } - }) - ) - ) - ); - $central_widget = \$adv_box; - $adv_box->show_all(); -} - -sub list_to_remove() { - #my @files_path = grep(!/fonts/, all($current_path)); garbage ? - gtkflush(); - my ($tree, @tux) = $left_list->get_selection->get_selected_rows(); #- get tree & paths - push @uninstall, map { $tree->get($tree->get_iter($_), 0) } @tux; - #push @uninstall, $current_path . "/" . $files_path[$_] foreach @number_to_remove; garbage ? - $$central_widget->destroy(); - show_list_to_remove(); -} - -sub show_list_to_remove() { - my $show_box; - my $model = Gtk2::TreeStore->new(Gtk2::GType->STRING); - my $list = Gtk2::TreeView->new_with_model($model); - $list->append_column(Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::CellRendererText->new, 'text' => 0)); - $list->set_headers_visible(0); - $list->get_selection->set_mode('browse'); - $list->set_rules_hint(1); - - $model->append_set(undef, [ 0 => $_ ]) foreach @uninstall; - - gtkpack($font_box, - $show_box = gtkpack_(new Gtk2::VBox(0, 10), 1, - gtkpack_(new Gtk2::HBox(0, 4), 1, create_scrolled_window($list)), 0, - gtkadd(gtkset_layout(new Gtk2::HButtonBox, 'spread'), - gtksignal_connect(new Gtk2::Button(N("click here if you are sure.")), - clicked => sub { - $$central_widget->destroy(); - import_status_uninstall(); - }), - gtksignal_connect(new Gtk2::Button(N("here if no.")), - clicked => - sub { $$central_widget->destroy(); create_fontsel() } - ), - ), - ) - ); - $central_widget = \$show_box; - $show_box->show_all(); -} - -sub uninstall() { #- TODO : add item to right list with gtksignal_connect - my $uninst_box; - @install = (); - @installed_fonts_path = (); - list_fontpath(); - chk_empty_xfs_path(); - - #- left part - $left_model = Gtk2::TreeStore->new(Gtk2::GType->STRING); - $left_list = Gtk2::TreeView->new_with_model($left_model); - $left_list->append_column(Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::CellRendererText->new, 'text' => 0)); - $left_list->set_headers_visible(0); - $left_list->set_rules_hint(1); - $left_list->get_selection->set_mode('multiple'); - - $left_model->append_set(undef, [ 0 => $_ ]) foreach @installed_fonts_path; - - #- right part - $right_model = Gtk2::TreeStore->new(Gtk2::GType->STRING);; - $right_list = Gtk2::TreeView->new_with_model($right_model); - $right_list->append_column(Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::CellRendererText->new, 'text' => 0)); - $right_list->set_headers_visible(0); - $right_list->get_selection->set_mode('multiple'); - $right_list->set_rules_hint(1); - - gtkpack($font_box, - $uninst_box = gtkpack_(new Gtk2::VBox(0, 10), 1, - gtkpack_(new Gtk2::HBox(0, 4), 1, - create_scrolled_window($left_list), #1, - #create_scrolled_window($right_list) - ), 0, - gtkadd(gtkset_layout(new Gtk2::HButtonBox, 'spread'), - gtksignal_connect(new Gtk2::Button(N("Unselected All")), - clicked => sub { $left_list->get_selection->unselect_all() } - ), - gtksignal_connect(new Gtk2::Button(N("Selected All")), - clicked => sub { $left_list->get_selection->select_all() } - ), - gtksignal_connect(new Gtk2::Button(N("Remove List")), clicked => sub { list_to_remove() }), - ), - ) - ); - $central_widget = \$uninst_box; - $uninst_box->show_all(); -} - -sub import_status() { - my $table; - $pbar = new Gtk2::ProgressBar; - $pbar1 = new Gtk2::ProgressBar; - $pbar2 = new Gtk2::ProgressBar; - $pbar3 = new Gtk2::ProgressBar; - gtkpack( - $font_box, - $table = create_packtable({ col_spacings => 10, row_spacings => 50 }, - [ "", "" ], - [ N("Initial tests"), $pbar, $pbar->set_text(' ') ], - [ N("Copy fonts on your system"), $pbar1, $pbar1->set_text(' ') ], - [ N("Install & convert Fonts"), $pbar2, $pbar2->set_text(' ') ], - [ N("Post Install"), $pbar3, $pbar3->set_text(' ') ], - ), - ); - $central_widget = \$table; - $font_box->show_all(); - gtkflush(); - backend_mod(); -} - -sub import_status_uninstall() { - my $table; - $pbar = new Gtk2::ProgressBar; - $pbar1 = new Gtk2::ProgressBar; - $pbar2 = new Gtk2::ProgressBar; - gtkpack( - $font_box, - $table = create_packtable({ col_spacings => 10, row_spacings => 50 }, - [ "", "" ], - [ "", "" ], - [ N("Initial tests"), $pbar, $pbar->set_text(' ') ], - [ N("Remove fonts on your system"), $pbar1, $pbar1->set_text(' ') ], - [ N("Post Uninstall"), $pbar2, $pbar2->set_text(' ') ], - ), - ); - $central_widget = \$table; - $font_box->show_all(); - gtkflush(); - backend_mod(); -} - -sub progress { - my ($progressbar, $incr, $label_text) = @_; - $progressbar->set_fraction(min(1, $progressbar->get_fraction + $incr)); - $progressbar->set_text($label_text); - gtkflush(); -} - -sub interactive_progress { - $interactive and progress(@_); -} |