source: extensions/pLoader/trunk/src/Uploader/GUI/wxPropertyGridPanel.pm @ 4134

Revision 4134, 5.1 KB checked in by ronosman, 10 years ago (diff)

Bug 1218 fixed : blur property can not be modified.

  • Property svn:eol-style set to LF
Line 
1# +-----------------------------------------------------------------------+
2# | pLoader - a Perl photo uploader for Piwigo                            |
3# +-----------------------------------------------------------------------+
4# | Copyright(C) 2008      Piwigo Team                  http://piwigo.org |
5# +-----------------------------------------------------------------------+
6# | This program is free software; you can redistribute it and/or modify  |
7# | it under the terms of the GNU General Public License as published by  |
8# | the Free Software Foundation                                          |
9# |                                                                       |
10# | This program is distributed in the hope that it will be useful, but   |
11# | WITHOUT ANY WARRANTY; without even the implied warranty of            |
12# | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
13# | General Public License for more details.                              |
14# |                                                                       |
15# | You should have received a copy of the GNU General Public License     |
16# | along with this program; if not, write to the Free Software           |
17# | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
18# | USA.                                                                  |
19# +-----------------------------------------------------------------------+
20package Uploader::GUI::wxPropertyGridPanel;
21use strict;
22use Wx qw/
23             wxDefaultSize
24             wxDefaultPosition
25         /;
26
27use base qw/Wx::Grid Uploader::Object2/;
28
29use Wx::Event qw/
30   EVT_GRID_CMD_CELL_CHANGE
31/;
32use Data::Dumper;
33
34__PACKAGE__->mk_accessors(     
35    qw/
36        frame_callbacks
37        renderer
38        editor
39        properties
40      /
41);
42
43
44
45sub new {
46    my ($this, $params) = @_;
47    #on recupere le nom de la classe en fonction du type d'appel de la méthode.
48    my $class = ref($this) || $this;
49
50
51    my $self = $class->SUPER::new( $params->{parentwnd}, -1, wxDefaultPosition, wxDefaultSize );
52
53    $self->renderer(
54        {
55            Bool     => sub { Wx::GridCellBoolRenderer->new },
56            Number   => sub { Wx::GridCellNumberRenderer->new },
57            Float    => sub { Wx::GridCellFloatRenderer->new(-1, 2) },
58            LongText => sub { Wx::GridCellAutoWrapStringRenderer->new },
59        }
60    );
61
62    $self->editor(
63        {
64            Bool     => sub { Wx::GridCellBoolEditor->new },
65            Number   => sub { Wx::GridCellNumberEditor->new },
66            Float    => sub { Wx::GridCellFloatEditor->new(-1, 2) },
67            Choice   => sub { Wx::GridCellChoiceEditor->new(@_) },
68            LongText => sub { Wx::GridCellAutoWrapStringEditor->new },
69        }
70    );
71
72
73    $self->properties(
74        $params->{properties}
75    );
76   
77    # a frame callback for each property
78    $self->frame_callbacks(
79        $params->{frame_callbacks}
80    );
81   
82    $self->Initialize;
83     
84    EVT_GRID_CMD_CELL_CHANGE( $self, $self, \&OnCellChanged );
85    $self;   
86}
87
88sub Initialize {
89    my ( $self ) = @_; 
90
91
92  $self->CreateGrid( scalar @{$self->properties}, 2 );
93 
94
95  $self->SetRowLabelSize(0);
96  $self->SetColLabelSize(0);
97  $self->SetColSize( 0, 200 );
98  $self->SetColSize( 1, 200 );
99 
100  $self->_init_property_grid();
101
102}
103
104sub Refresh {
105    my ( $self ) = @_;
106   
107    $self->ClearGrid;
108
109    my $row = 0;
110    map {
111        eval {
112
113            $self->SetCellValue(
114                $row,
115                0,
116                $_->{label},
117            ); 
118
119
120            $self->SetCellValue(
121                $row,
122                1,
123                $_->{value}->(),
124            ); 
125
126
127
128        };
129        $row++;
130    }@{$self->properties};
131       
132}
133
134sub _init_property_grid {
135    my ( $self ) = @_;
136
137    my $row = 0;
138    #print Dumper $self->properties;
139    map {
140        eval {
141            $self->SetCellEditor(
142                $row,
143                1,
144                &{
145                    sub { $self->editor->{
146                        $_->{type}
147                    }->( $_->{choice} ) },
148                },         
149            ) if $self->editor->{$_->{type}};
150
151            $self->SetCellRenderer(
152                $row,
153                1,
154                &{
155                    $self->renderer->{
156                        $_->{type}
157                    }
158                },         
159            ) if $self->renderer->{$_->{type}};
160
161            $self->SetReadOnly(
162                $row,
163                0,
164            );
165
166            $self->SetCellValue(
167                $row,
168                0,
169                $_->{label},
170            ); 
171
172            $self->SetCellValue(
173                $row,
174                1,
175                $_->{value}->(),
176            ); 
177
178            $self->SetReadOnly(
179                $row,
180                1,
181            ) if $_->{readonly};       
182
183
184        };
185        $row++;
186    }@{$self->properties};
187       
188}
189
190sub OnCellChanged {
191    my ( $self, $event ) = @_;
192
193    my( $row, $col ) = ( 
194        $event->GetRow,
195        $event->GetCol,
196    );
197   
198    my $value = $self->GetCellValue(
199        $row,
200        $col,
201    );
202
203    # set property
204    $self->properties->[$row]->{value}->($value);
205
206   
207    # execute the corresponding frame callback
208    $self->frame_callbacks->[$row]->() if defined $self->frame_callbacks->[$row];
209}
210
211
2121;
Note: See TracBrowser for help on using the repository browser.