… | |
… | |
3 | |
3 | |
4 | gce - gtk (perl) crossfire editor |
4 | gce - gtk (perl) crossfire editor |
5 | |
5 | |
6 | =cut |
6 | =cut |
7 | |
7 | |
|
|
8 | our $VERSION='0.1'; |
|
|
9 | |
8 | use Gtk2 -init; |
10 | use Gtk2 -init; |
|
|
11 | |
9 | use Crossfire; |
12 | use Crossfire; |
10 | use Crossfire::Gtk2; |
13 | use Crossfire::Tilecache; |
11 | |
14 | |
12 | my $VARDIR = "$ENV{HOME}/.gcfedit"; |
15 | our $VARDIR = "$ENV{HOME}/.gcfedit"; |
|
|
16 | |
13 | mkdir $VARDIR; |
17 | mkdir $VARDIR; |
14 | |
18 | our $PICKDIR = "$Crossfire::LIB/maps/editor/picks"; |
15 | Crossfire::init ($VARDIR); |
19 | our $CFG; |
16 | Crossfire::Gtk2::init_tilecache ($VARDIR.'/tilecache'); |
|
|
17 | |
20 | |
18 | use GCE::MainWindow; |
21 | use GCE::MainWindow; |
|
|
22 | use Data::Dumper; |
|
|
23 | |
|
|
24 | read_cfg ($VARDIR . '/config'); |
19 | my $w = GCE::MainWindow->new; |
25 | my $w = GCE::MainWindow->new; |
|
|
26 | |
|
|
27 | $w->load_layout; |
20 | |
28 | |
21 | $w->show_all; |
29 | $w->show_all; |
22 | |
30 | |
23 | Gtk2->main; |
31 | Gtk2->main; |
|
|
32 | |
|
|
33 | sub read_cfg { |
|
|
34 | my ($file) = @_; |
|
|
35 | |
|
|
36 | open CFG, $file |
|
|
37 | or return; |
|
|
38 | |
|
|
39 | $CFG = eval join '', <CFG>; |
|
|
40 | |
|
|
41 | close CFG; |
|
|
42 | } |
|
|
43 | |
|
|
44 | sub write_cfg { |
|
|
45 | my ($file) = @_; |
|
|
46 | |
|
|
47 | open CFG, ">$file" |
|
|
48 | or return; |
|
|
49 | |
|
|
50 | { |
|
|
51 | local $Data::Dumper::Purity = 1; |
|
|
52 | print CFG Data::Dumper->Dump ([$CFG], [qw/CFG/]); |
|
|
53 | } |
|
|
54 | |
|
|
55 | close CFG; |
|
|
56 | } |
|
|
57 | |
|
|
58 | # following 2 functions are taken from CV :) |
|
|
59 | sub find_rcfile($) { |
|
|
60 | my $path; |
|
|
61 | |
|
|
62 | for (@INC) { |
|
|
63 | |
|
|
64 | $path = "$_/GCE/$_[0]"; |
|
|
65 | return $path if -r $path; |
|
|
66 | } |
|
|
67 | |
|
|
68 | die "FATAL: can't find required file $_[0]\n"; |
|
|
69 | } |
|
|
70 | |
|
|
71 | sub require_image($) { |
|
|
72 | new_from_file Gtk2::Gdk::Pixbuf find_rcfile "images/$_[0]"; |
|
|
73 | } |
|
|
74 | |
|
|
75 | sub get_pos_and_size { |
|
|
76 | my ($window) = @_; |
|
|
77 | |
|
|
78 | my ($x, $y) = $window->get_position; |
|
|
79 | my ($w, $h) = $window->get_size; |
|
|
80 | |
|
|
81 | return [$x, $y, $w, $h]; |
|
|
82 | } |
|
|
83 | |
|
|
84 | sub set_pos_and_size { |
|
|
85 | my ($window, $p_and_s) = @_; |
|
|
86 | |
|
|
87 | $window->set_default_size ($p_and_s->[2], $p_and_s->[3]); |
|
|
88 | |
|
|
89 | # FIXME: This sucks, moving it after showing it can't be a good thing. |
|
|
90 | $window->show_all; |
|
|
91 | $window->move ($p_and_s->[0], $p_and_s->[1]); |
|
|
92 | } |
24 | |
93 | |
25 | =head1 AUTHOR |
94 | =head1 AUTHOR |
26 | |
95 | |
27 | Marc Lehmann <schmorp@schmorp.de> |
96 | Marc Lehmann <schmorp@schmorp.de> |
28 | http://home.schmorp.de/ |
97 | http://home.schmorp.de/ |