Changeset 5447 for extensions/pLoader
- Timestamp:
- Mar 29, 2010, 3:44:56 PM (14 years ago)
- Location:
- extensions/pLoader/trunk/src/Uploader/GUI
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
extensions/pLoader/trunk/src/Uploader/GUI/Frame.pm
r5390 r5447 139 139 use Uploader::GUI::wxImageReuploadDlg; 140 140 use Uploader::GUI::wxImageProcessingProgressDlg; 141 use Uploader::GUI::wxChoiceFilteredPanel;142 141 use Uploader::GUI::wxDestinationCategoryDlg; 143 142 use Uploader::GUI::wxCategoryTreeCtrl; … … 1431 1430 $self->piwigo_photo_properties_dlg->SetProperties if defined $self->piwigo_photo_properties_dlg; 1432 1431 $self->exif_dlg->Refresh; 1433 $self->piwigo_photo_properties_tags->Refresh ;1432 $self->piwigo_photo_properties_tags->RefreshChoices; 1434 1433 1435 1434 } -
extensions/pLoader/trunk/src/Uploader/GUI/wxChoiceFilteredPanel.pm
r5041 r5447 47 47 id_from_name 48 48 search 49 listchoices49 choices_list 50 50 btn_show 51 51 show_method … … 57 57 autocomplete_to 58 58 autocomplete_set_selection 59 current_show_mode 59 60 / 60 61 ); … … 66 67 my $class = ref($this) || $this; 67 68 68 69 69 my $self = $class->SUPER::new( $params->{parentwnd}, $params->{id}||-1, wxDefaultPosition, wxDefaultSize ); 70 $self->_init_panel; 71 $self->_init_properties($params); 72 73 $self->Refresh; 74 75 Wx::Event::EVT_CHECKLISTBOX( $self, $self->listchoices, \&OnCheck ); 76 Wx::Event::EVT_LISTBOX( $self, $self->listchoices, \&OnSelected ); 70 71 $self->init_panel; 72 $self->init_properties($params); 73 $self->init_event_handlers; 74 75 $self; 76 } 77 78 79 sub init_panel { 80 my ( $self ) = @_; 81 82 my( $vsizer ) = Wx::BoxSizer->new( wxVERTICAL ); 83 84 $self->search( 85 Wx::SearchCtrl->new( $self, -1, "", wxDefaultPosition, [-1,-1],wxTE_PROCESS_ENTER ) 86 ); 87 88 $self->search->ShowCancelButton( 1 ); 89 $vsizer->Add( $self->search, 0, wxEXPAND|wxALL, 2 ); 90 91 $self->choices_list( 92 Wx::CheckListBox->new( $self, -1, wxDefaultPosition, [-1,-1], [], 0 ) 93 ); 94 $vsizer->Add( $self->choices_list, 1, wxEXPAND|wxALL, 2 ); 95 96 $self->btn_show( 97 Wx::RadioBox->new( $self, -1, sprintf("%s :", gettext("Show")), wxDefaultPosition, [-1, -1], 98 [gettext("All"),gettext("Selection")] , 1, wxRA_SPECIFY_ROWS ) 99 ); 100 $vsizer->Add( $self->btn_show, 0, wxEXPAND|wxALL, 2 ); 101 102 $self->SetSizer( $vsizer ); 103 $vsizer->Fit( $self ); 104 } 105 106 107 sub init_properties { 108 my ( $self, $params ) = @_; 109 110 $self->choices( 111 $params->{choices}|| sub { [] } 112 ); 113 114 $self->selection( 115 $params->{selection}|| sub{ [] } 116 ); 117 118 $self->search_result( 119 [] 120 ); 121 122 $self->is_selected({}); 123 124 $self->creation_callback( 125 $params->{creation_callback} 126 ) if 'CODE' eq ref($params->{creation_callback}); 127 128 $self->show_method( 129 { 130 gettext("All") => sub { $self->show_all(@_) }, 131 gettext("Selection") => sub { $self->show_selected(@_) }, 132 } 133 ); 134 } 135 136 137 sub RefreshChoices { 138 my ( $self ) = @_; 139 140 $self->refresh_lookups( 141 $self->choices->() 142 ); 143 $self->refresh_is_selected; 144 my $show_mode = $self->current_show_mode||gettext("All"); 145 $self->show_method->{$show_mode}->(); 146 } 147 148 149 sub refresh_lookups { 150 my ( $self, $choices ) = @_; 151 152 $self->id_lookup({}); 153 $self->row_lookup({}); 154 $self->id_from_name({}); 155 156 my $row = 0; 157 #print Dumper $self->properties; 158 map { 159 $self->id_lookup->{$row} = $_->{id}; 160 $self->row_lookup->{$_->{id}} = $row; 161 $self->id_from_name->{$_->{name}} = $_->{id}; 162 $row++; 163 }@{$choices}; 164 165 } 166 167 168 sub refresh_is_selected { 169 my ( $self ) = @_; 170 171 my $selection = $self->selection->(); 172 $self->is_selected({}); 173 174 map { 175 $self->is_selected->{$_} = 1; 176 } @$selection; 177 178 } 179 180 181 sub show_all { 182 my ( $self ) = @_; 183 184 my $choices = $self->choices->(); 185 $self->current_show_mode( 186 gettext("All") 187 ); 188 $self->refresh_choices_list( 189 $self->choices->() 190 ); 191 } 192 193 194 sub show_selected { 195 my ( $self ) = @_; 196 197 $self->current_show_mode( 198 gettext("Selection") 199 ); 200 201 $self->refresh_choices_list( 202 $self->get_selected_choices() 203 ); 204 } 205 206 207 sub refresh_choices_list { 208 my ( $self, $choices ) = @_; 209 210 $self->choices_list->Freeze; 211 $self->choices_list->Clear; 212 213 #print Dumper $self->properties; 214 my $i=0; 215 map { 216 $self->choices_list->Append( 217 $_->{name}, 218 ); 219 $self->choices_list->Check( 220 $i, 221 $self->is_selected->{$_->{id}} 222 ); 223 $i++; 224 }@{$choices}; 225 $self->choices_list->Thaw; 226 } 227 228 229 sub get_selected_choices { 230 my ( $self ) = @_; 231 232 my $choices = $self->choices->()||[]; 233 # each choice item is { id => $id, name => $name, url_nam => $url_name } 234 my $selected = [ 235 grep { $self->is_selected->{$_->{id}} } @$choices 236 ]; 237 238 239 $selected; 240 } 241 242 243 sub ClearAllSelection { 244 my ( $self ) = @_; 245 246 my $row = 0; 247 248 my $choices = $self->choices->(); 249 $self->choices_list->Freeze; 250 map { 251 $self->choices_list->Check($row, 0) ; 252 $row++; 253 }@$choices; 254 $self->choices_list->Thaw; 255 } 256 257 258 sub init_event_handlers { 259 my ( $self ) = @_; 260 261 Wx::Event::EVT_CHECKLISTBOX( $self, $self->choices_list, \&OnCheck ); 262 Wx::Event::EVT_LISTBOX( $self, $self->choices_list, \&OnSelected ); 77 263 Wx::Event::EVT_SEARCHCTRL_SEARCH_BTN( $self, $self->search, \&OnSearch ); 78 264 Wx::Event::EVT_SEARCHCTRL_CANCEL_BTN( $self, $self->search, \&OnCancel ); … … 93 279 } 94 280 ); 95 96 $self; 97 } 98 99 sub _init_properties { 100 my ( $self, $params ) = @_; 101 102 $self->choices( 103 $params->{choices}|| sub { [] } 104 ); 105 106 $self->selection( 107 $params->{selection}|| sub{ [] } 108 ); 109 110 my $choices = $self->choices->(); 111 $self->search_result( 112 [] 113 ); 114 115 116 117 $self->is_selected({}); 118 119 $self->creation_callback( 120 $params->{creation_callback} 121 ) if 'CODE' eq ref($params->{creation_callback}); 122 123 $self->show_method( 124 { 125 gettext("All") => sub { $self->_show_all(@_) }, 126 gettext("Selected") => sub { $self->_show_selected(@_) }, 127 gettext("Not selected") => sub { $self->_show_notselected(@_) }, 128 } 129 ); 130 } 131 132 sub _init_panel { 133 my ( $self ) = @_; 134 135 my( $vsizer ) = Wx::BoxSizer->new( wxVERTICAL ); 136 137 $self->search( 138 Wx::SearchCtrl->new( $self, -1, "", wxDefaultPosition, [-1,-1],wxTE_PROCESS_ENTER ) 139 ); 140 141 $self->search->ShowCancelButton( 1 ); 142 143 $vsizer->AddWindow( $self->search, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxALL, 2 ); 144 145 $self->btn_show( 146 Wx::RadioBox->new( $self, -1, sprintf("%s :", gettext("Show")), wxDefaultPosition, [-1, -1], 147 [gettext("All"),gettext("Selected"),gettext("Not selected")] , 1, wxRA_SPECIFY_ROWS ) 148 ); 149 $vsizer->AddWindow( $self->btn_show, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxALL, 2 ); 150 151 152 $self->listchoices( 153 Wx::CheckListBox->new( $self, -1, wxDefaultPosition, [-1,-1], [], 0 ) 154 ); 155 $vsizer->AddWindow( $self->listchoices, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxALL, 2 ); 156 157 $self->SetSizer( $vsizer ); 158 $vsizer->SetSizeHints( $self ); 159 160 } 161 162 sub _init_choices { 163 my ( $self, $choices ) = @_; 164 165 $self->listchoices->Freeze; 166 $self->listchoices->Clear; 167 $self->id_lookup({}); 168 $self->row_lookup({}); 169 $self->id_from_name({}); 170 $self->is_selected({}); 171 172 my $row = 0; 173 #print Dumper $self->properties; 174 map { 175 $self->listchoices->Append( 176 $_->{name}, 177 ); 178 $self->id_lookup->{$row} = $_->{id}; 179 $self->row_lookup->{$_->{id}} = $row; 180 $self->id_from_name->{$_->{name}} = $_->{id}; 181 $row++; 182 }@{$choices}; 183 $self->listchoices->Thaw; 184 185 } 186 187 sub Refresh { 188 my ( $self, $choices, $selected ) = @_; 189 190 191 192 if (!defined $choices){ 193 $self->btn_show->SetStringSelection(gettext("All")); 194 $choices = $self->choices->(); 195 } 196 197 $self->_init_choices($choices); 198 $self->SetSelection($selected); 199 200 } 201 202 sub ClearAllSelection { 203 my ( $self ) = @_; 204 205 my $row = 0; 206 207 my $choices = $self->choices->(); 208 $self->listchoices->Freeze; 209 map { 210 $self->listchoices->Check($row, 0) ; 211 $row++; 212 }@$choices; 213 $self->listchoices->Thaw; 214 } 215 216 sub SetSelection { 217 my ( $self, $selected ) = @_; 218 219 my $selection = $self->selection->()||[]; 220 221 push @$selection, $self->id_from_name->{$selected} if defined $selected; 222 223 $self->listchoices->Freeze; 224 map { 225 $self->listchoices->Check( 226 $self->row_lookup->{$_}, 227 exists $self->row_lookup->{$_}, 228 ) if defined $self->row_lookup->{$_}; 229 $self->is_selected->{$_} = 1; 230 } 231 @{$selection}; 232 $self->listchoices->Thaw; 233 } 234 235 sub GetSelection { 236 my ( $self ) = @_; 237 238 my $row = 0; 239 my $selection = []; 240 241 my $choices = $self->choices->(); 242 map { 243 244 my $id = $self->id_lookup->{$row}; 245 $self->is_selected->{$id} = $self->listchoices->IsChecked($row) ; 246 $row++; 247 }@$choices; 248 249 [ 250 grep { $self->is_selected->{$_} } keys %{$self->is_selected} 251 ]; 252 } 253 254 sub OnCheck { 255 my ( $self ) = @_; 256 257 $self->selection->( 258 $self->GetSelection 259 ); 260 } 281 } 282 261 283 262 284 sub OnSelected { 263 285 my ( $self, $event ) = @_; 264 286 287 my $list = $event->GetEventObject; 265 288 my $row = $event->GetInt; 266 $self->listchoices->Check( 289 290 $list->Check( 267 291 $row, 268 !$self->listchoices->IsChecked($row) 269 ); 270 271 $self->OnCheck; 272 273 $event->Skip; 274 } 292 !$list->IsChecked($row) 293 ); 294 295 $self->OnCheck($event); 296 297 } 298 299 300 sub OnCheck { 301 my ( $self, $event ) = @_; 302 303 my $list = $event->GetEventObject; 304 my $indx = $event->GetInt; 305 my $item = $list->GetString($indx); 306 if($list->IsChecked($indx)){ 307 $self->add_to_selection($item); 308 } 309 else{ 310 $self->remove_from_selection($item); 311 } 312 313 } 314 315 316 sub add_to_selection { 317 my ( $self, $item ) = @_; 318 319 return if !defined $item; 320 321 my $id = $self->id_from_name->{$item}; 322 return if !defined $id; 323 324 $self->is_selected->{$id} = 1; 325 my $selection = $self->selection->(); 326 327 $self->selection->( 328 [ 329 $id, 330 @$selection 331 ] 332 ); 333 } 334 335 336 sub remove_from_selection { 337 my ( $self, $item ) = @_; 338 339 my $id = $self->id_from_name->{$item}; 340 my $selection = $self->selection->(); 341 $self->selection->( 342 [ 343 grep { $_ ne $id } @$selection 344 ] 345 ); 346 $self->refresh_is_selected; 347 } 348 275 349 276 350 sub OnShow { 277 351 my( $self, $event ) = @_; 278 352 279 my $show = $event->GetString();280 281 $self->show_method->{$show}->(); 282 } 353 my $show_mode = $event->GetString(); 354 $self->show_method->{$show_mode}->(); 355 } 356 283 357 284 358 sub OnSearchEnter { … … 286 360 287 361 my $searched = $self->search->GetValue; 288 $searched =~ s/\s+$//;362 eval { $searched =~ s/\s+$//; }; 289 363 $searched = $searched eq "" ? undef : $searched ; 290 364 … … 299 373 ); 300 374 301 $self-> _refresh_selected_searched($searched);375 $self->refresh_selected_searched($searched); 302 376 $cleanup = 1; 303 377 } 304 378 305 379 if( 1 == scalar @{$self->search_result}){ 306 $self-> _refresh_selected_searched($searched);380 $self->refresh_selected_searched($searched); 307 381 $cleanup = 1; 308 382 } … … 319 393 } 320 394 321 sub _refresh_selected_searched {395 sub refresh_selected_searched { 322 396 my ( $self, $searched ) = @_; 323 397 324 $self->Refresh; 325 $self->SetSelection($searched); 326 $self->_show_selected; 327 $self->btn_show->SetStringSelection(gettext("Selected")); 398 $self->refresh_lookups( 399 $self->choices->() 400 ); 401 $self->add_to_selection($searched); 402 $self->show_selected; 403 $self->btn_show->SetStringSelection(gettext("Selection")); 328 404 } 329 405 … … 336 412 337 413 $self->search_result( 338 $self-> _filter_choices(414 $self->search_in_choices( 339 415 $searched 340 416 ) 341 417 ); 342 418 343 $self-> Refresh(419 $self->refresh_choices_list( 344 420 $self->search_result 345 421 ); … … 367 443 } 368 444 445 446 sub search_in_choices { 447 my ( $self, $searched ) = @_; 448 449 my $choices = $self->choices->()||[]; 450 451 [ 452 grep { $_->{name} =~ /\b$searched/i} @$choices 453 ]; 454 } 455 456 369 457 sub OnCancel { 370 458 my( $self, $event ) = @_; 371 459 372 $self-> Refresh(460 $self->init_choices_list( 373 461 $self->choices->() 374 462 ); … … 378 466 379 467 380 sub _filter_choices {381 my ( $self, $searched ) = @_;382 383 my $choices = $self->choices->()||[];384 [385 grep { $_->{name} =~ /$searched/i} @$choices386 ]387 }388 389 sub _show_notselected {390 my ( $self ) = @_;391 392 $self->Refresh(393 $self->_filter_notselected()394 );395 }396 397 sub _show_selected {398 my ( $self ) = @_;399 400 $self->Refresh(401 $self->_filter_selected()402 );403 }404 405 sub _show_all {406 my ( $self ) = @_;407 408 $self->Refresh(409 $self->choices->()410 );411 }412 413 sub _filter_selected {414 my ( $self ) = @_;415 416 my $choices = $self->choices->()||[];417 [418 grep { $self->is_selected->{$_->{id}} } @$choices419 ]420 }421 422 sub _filter_notselected {423 my ( $self ) = @_;424 425 my $choices = $self->choices->()||[];426 [427 grep { !$self->is_selected->{$_->{id}} } @$choices428 ]429 }430 431 432 468 1;
Note: See TracChangeset
for help on using the changeset viewer.