1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#!/Perl/bin/perl
use strict;
use warnings;
use Data::Dumper();
use Data::Serializer;
use Tk;
use DirHandle;
use DBI;
use DBD::MySQL;
use Tk::Dialog;
use Tk::DialogBox;
use Tk::Font;
use Tk::ToolBar;
use Tk::FileSelect;
use FindBin qw($Bin);
use FileHandle;
use UNIVERSAL qw(isa);
my $mw = MainWindow->new(
-width=>800,
-height=>600,
);
main::getScreen_ConfigDumpEdit($mw);
MainLoop;
sub getScreen_ConfigDumpEdit {
my $mw = shift;
$mw->packPropagate(0); # don't resize
# speichern ob eine Datei geöffnet wurde
my $isOpen = 0;
my $openFile = undef;
# create the text-widget
my $text = $mw->Scrolled('Text',
-wrap => 'none',
-borderwidth => 3,
-relief => 'groove',
-scrollbars => 'se',
-height => '20',
-width => 80,
);
# create ToolBar (open & save-dialog)
my $tb = $mw->ToolBar(qw/-movable 0 -side top/);
$tb->ToolButton(
-image => 'fileopen22',
-tip => 'back',
-command =>
sub{
my $wantedFile = main::getFileDialog("$Bin/config");
my $dataStructure = main::restoreData($wantedFile);
main::insertText($text,$dataStructure);
$isOpen = 1;
$openFile = $wantedFile;
},
);
$tb->ToolButton(
-image => 'filesave22',
-tip => 'back',
-command =>
sub{
if( $isOpen ){
main::storeConfig($openFile,$text->get("1.0", "end"));
$text->delete("1.0","end");
my $d = $mw->DialogBox(-title => "Gesichert", -buttons => ["OK"]);
$d->add("label", 'Ihre Änderungen wurden gesichert.');
$d->Show();
}else{
my $d = $mw->DialogBox(-title => "Keine Datei offen", -buttons => ["OK"]);
$d->add("label", 'Sie müssen zuerst eine Datei öffnen!');
$d->Show();
}
},
);
# alles zusammenpacken
$text->pack(); #-side=>'left', -anchor=>'n'
# if( $mw->width() < $screen->width ){ put scrollbars on $mw
} # /getScreen_ConfigDumpEdit
sub getFileDialog {
my $startDir = shift || $Bin;
$startDir = $Bin unless -e $startDir;
my $FSref = $mw->FileSelect(-directory => $startDir);
# print "FileDialog selected: ".$FSref->Show() . "\n";
return $FSref->Show();
} # /getFileDialog
sub getFilec {
my $file = shift or return 'keine Datei angegeben';
return "Datei $file existiert nicht" unless -e $file;
my @filec = (); # where to store the filecontent
my $fh = new FileHandle;
if ($fh->open("< $file")) {
@filec = $fh->getlines();
$fh->close;
}
return \@filec;
} # /getFilec
sub insertText {
my $text = shift or die 'Kein Textfeld übergeben';
my $data = shift or die 'kein Text übergeben';
# print "insertText\n";
# clear Text
$text->delete("1.0","end");
# insert2Text
$text->insert("end", Data::Dumper::Dumper($data));
} # /insert Text
sub restoreData {
my $file = shift or die 'xml2data: keine Datei übergeben!';
unless( -e $file or -e $Bin.$file ){
die "restoreData: Datei existiert nicht!";
}
my $obj = Data::Serializer->new();
return $obj->retrieve($file);
} # /restoreData
sub storeConfig {
my $file = shift or die 'storeConfig: Keine Datei übergeben!';
my $data = shift or die 'storeConfig: keine Daten übergeben';
my $obj = Data::Serializer->new();
my $fh = new FileHandle "> $file";
if (defined $fh) {
$obj->store($data,$fh);
$fh->close;
}
return 1;
}