Changeset 5390


Ignore:
Timestamp:
03/26/10 21:04:59 (10 years ago)
Author:
ronosman
Message:

Feature 1539 added : When uploading, display a dialog box with the categories list when no category is selected

Location:
extensions/pLoader/trunk/src
Files:
3 added
5 edited

Legend:

Unmodified
Added
Removed
  • extensions/pLoader/trunk/src/Uploader/GUI/DlgCommon.pm

    r5184 r5390  
    5050                              Wx::Event::EVT_TEXT( $ctrl, $ctrl, sub { $self->OnComboBoxText(@_) } ); 
    5151                          }, 
     52        'Uploader::GUI::wxCategoryTreeCtrl' => sub { my ( $ctrl ) = @_; 
     53                                                   Wx::Event::EVT_TREE_SEL_CHANGED( 
     54                                                       $ctrl, 
     55                                                       $ctrl, 
     56                                                       sub {  
     57                                                           $self->OnCategoryTreeSelChanged(@_);  
     58                                                       } 
     59                                                   ); 
     60                                               }, 
    5261    }; 
    5362     
    5463    map { 
    5564        my $ctrl =$self->FindWindow($_); 
     65 
    5666        if(defined $ctrl){ 
    5767            $ctrl_handlers->{ ref $ctrl}->($ctrl) if exists $ctrl_handlers->{ ref $ctrl}; 
     
    257267}; 
    258268 
     269 
     270sub OnCategoryTreeSelChanged { 
     271    my ( $self, $ctrl, $event ) = @_; 
     272 
     273    my $id = $ctrl->GetId; 
     274 
     275    # change the property value. 
     276    $self->properties->{$id}->{id_selection}->( 
     277        $event->GetEventObject->GetSelectionsIds 
     278    ) if exists $self->properties->{$id}->{id_selection}; 
     279 
     280    #printf("OnCategoryTreeSelChanged %s\n", Dumper $self->properties->{$id}->{id_selection}->()); 
     281 
     282    # exec the callback 
     283    $self->properties->{$id}->{frame_callback}->($self, $ctrl, $event) if exists 
     284        $self->properties->{$id}->{frame_callback};     
     285     
     286    $event->Skip; 
     287} 
     288 
     289 
    259290my $clear_value = { 
    260291    'Wx::TextCtrl' => sub { my ($ctrl) = @_; $ctrl->Clear}, 
    261292    'Wx::CheckBox' => sub { my ($ctrl) = @_; $ctrl->SetValue(0)}, 
    262293    'Wx::DatePickerCtrl' => sub { my ($ctrl) = @_; $ctrl->SetValue(Wx::DateTime->new->SetToCurrent)}, 
     294    'Uploader::GUI::wxCategoryTreeCtrl' => sub { my ( $ctrl ) = @_; 
     295                                               $ctrl->SelectItem($ctrl->GetRootItem); 
     296                                           }, 
    263297};     
    264298 
  • extensions/pLoader/trunk/src/Uploader/GUI/Frame.pm

    r5261 r5390  
    101101          categories 
    102102          imagelist 
    103           image_preview 
     103          image_preview_dlg 
    104104          image_prop_piwigo 
    105           image_prop_exif 
     105          exif_dlg 
    106106          image_prop_tags 
    107           global_settings_panel 
     107          global_settings_dlg 
    108108          piwigo_property_list 
    109109          exif_properties 
     
    119119          image_tags 
    120120          piwigo_photo_properties 
    121           dlg_piwigo_photo_properties 
     121          piwigo_photo_properties_dlg 
    122122          piwigo_photo_properties_tags 
    123           image_preview_refresh 
     123          image_preview_need_refresh 
    124124          imageviewer_refresh 
    125125          imageviewer_item_refresh 
    126126          horizontal_splitter 
     127          destination_category_dlg 
     128          destination_categories 
     129          categories_treectrl 
    127130      /; 
    128131__PACKAGE__->mk_accessors( @properties ); 
     
    137140use Uploader::GUI::wxImageProcessingProgressDlg; 
    138141use Uploader::GUI::wxChoiceFilteredPanel; 
     142use Uploader::GUI::wxDestinationCategoryDlg; 
     143use Uploader::GUI::wxCategoryTreeCtrl; 
    139144use utf8; 
    140145$|=1; 
     
    146151sub new { 
    147152    my( $class, $params ) = @_; 
     153 
    148154    my $self  = $class->SUPER::new(  
    149155        undef,  
     
    158164    $self->pwg( $params->{pwg} ); 
    159165    $self->imagelist( $params->{imagelist} ); 
     166 
     167 
     168    $self->imagelist->pwg( 
     169        $self->pwg 
     170    ); 
     171 
     172    $self->imagelist->categories( 
     173        [] 
     174    ); 
     175 
     176 
     177    $self->init_gui_callbacks; 
     178    $self->init_properties_dlg_bindings; 
     179    $self->init_frame; 
     180    $self->init_menus; 
     181    $self->init_event_handlers; 
     182    $self->init_image_types;    
     183 
     184    $self->imageviewer->SelectItem( 
     185        $self->current_imageviewer_index 
     186    ) if $self->imageviewer->GetItemCount; 
     187    
     188    # if file in command line parameters, try to load 
     189    my $files = wxTheApp->argv; 
     190    $self->SetNewFiles($files) if scalar @$files; 
     191 
     192    $self->Show; 
     193    $self; 
     194} 
     195 
     196 
     197sub init_gui_callbacks { 
     198    my ( $self ) = @_; 
    160199 
    161200    # callback for GUI refresh : add thumbnail images to the imageviewer control 
     
    249288        sub { $self->UploadDisplayEndInfo(@_) } 
    250289    ); 
    251  
    252  
    253     $self->imagelist->pwg( 
    254         $self->pwg 
    255     ); 
    256  
    257     $self->imagelist->categories( 
    258         [] 
    259     ); 
    260  
    261  
    262     $self->_set_setting_properties; 
    263     $self->_initFrame; 
    264     $self->_initMenus; 
    265     $self->_initEventHandlers; 
    266     $self->_initImgTypes;    
    267  
    268     $self->imageviewer->SelectItem( 
    269         $self->current_imageviewer_index 
    270     ) if $self->imageviewer->GetItemCount; 
    271     
    272     # if file in command line parameters, try to load 
    273     my $files = wxTheApp->argv; 
    274     $self->SetNewFiles($files) if scalar @$files; 
    275  
    276     $self->Show; 
    277     $self; 
    278 } 
    279  
    280  
    281 sub _initImgTypes { 
    282     my ( $self ) = @_; 
    283  
    284     $self->{IMGTYPE} = { 
    285         'jpg' => wxBITMAP_TYPE_JPEG, 
    286         'gif' => wxBITMAP_TYPE_GIF, 
    287         'png' => wxBITMAP_TYPE_PNG, 
    288     }; 
    289 } 
    290  
    291  
    292 sub GetWxBitmapType { 
    293     my ( $self, $type ) = @_; 
    294      
    295     $self->{IMGTYPE}->{$type}; 
    296 } 
    297  
    298  
    299  
    300 sub _set_setting_properties { 
     290} 
     291 
     292 
     293sub init_properties_dlg_bindings { 
    301294    my ( $self ) = @_; 
    302295 
     
    665658} 
    666659 
     660sub init_image_types { 
     661    my ( $self ) = @_; 
     662 
     663    $self->{IMGTYPE} = { 
     664        'jpg' => wxBITMAP_TYPE_JPEG, 
     665        'gif' => wxBITMAP_TYPE_GIF, 
     666        'png' => wxBITMAP_TYPE_PNG, 
     667    }; 
     668} 
     669 
     670 
     671sub init_frame { 
     672    my ( $self ) = @_; 
     673     
     674    $self->create_toolbar; 
     675 
     676    my $sizer_h = Wx::BoxSizer->new( wxHORIZONTAL ); 
     677     
     678 
     679 
     680    $self->imageviewer( 
     681        Uploader::GUI::wxImageListCtrl->new(  
     682            {  
     683                parentwnd => $self, 
     684                imagelist => $self->imagelist, 
     685                image_size => $self->imagelist->wx_thumb_size, 
     686                columns => $self->piwigo_property_list, 
     687            } 
     688        ) 
     689    ); 
     690 
     691 
     692    $self->piwigo_photo_properties_dlg ( 
     693        Uploader::GUI::wxPhotoProperties->new( 
     694            { 
     695                parentwnd  => $self, 
     696                categories => [ @{$self->pwg->categories}], 
     697                properties => $self->piwigo_photo_properties, 
     698                tags       => 
     699                { 
     700                    id => $main::PHOTO_PROPERTIES_TAG, 
     701                    choices => $self->piwigo_tags, 
     702                    selection => $self->image_tags, 
     703                    creation_callback => sub { $self->_create_piwigo_tag(@_) }, 
     704               }, 
     705            } 
     706        ) 
     707    ); 
     708 
     709    $self->piwigo_photo_properties_tags( 
     710        $self->piwigo_photo_properties_dlg->FindWindow($main::PHOTO_PROPERTIES_TAG) 
     711    ); 
     712 
     713    $self->tree( 
     714        $self->piwigo_photo_properties_dlg->FindWindow($main::PHOTO_PROPERTIES_CATEGORIES) 
     715    ); 
     716 
     717    $self->init_dnd_targets; 
     718    $self->init_dialogs; 
     719    $self->show_hide_pwg_categories_empty_msg; 
     720 
     721    if( $self->imagelist->wx_thumb_imglist->GetImageCount){ 
     722        $self->ShowImageViewer; 
     723         
     724        $self->imageviewer->Refresh( 
     725            $self->imagelist->wx_thumb_imglist 
     726        ); 
     727        
     728        $self->OnUpdateImageviewerNotEmpty; 
     729    } 
     730    else{ 
     731        $self->OnUpdateImageviewerEmpty; 
     732    } 
     733 
     734    # the imageviewer has a stretch factor of 1 : expands its size on frame resize 
     735    $sizer_h->Add( $self->imageviewer, 1, wxEXPAND|wxALL, 2 ); 
     736    $sizer_h->Add( $self->piwigo_photo_properties_dlg, 0, wxEXPAND|wxALL, 2 ); 
     737 
     738 
     739    $self->SetSizer( 
     740        $sizer_h 
     741    ); 
     742    my $new_size = $sizer_h->Fit( 
     743        $self 
     744    ); 
     745    $self->SetMinSize([600, 660]); 
     746    $self->Center; 
     747} 
     748 
     749 
    667750sub _create_piwigo_tag { 
    668751    my ( $self, $name ) = @_; 
     
    684767} 
    685768 
    686 sub _refreshFrame { 
    687     my ( $self ) = @_; 
    688      
    689     eval { $self->_set_setting_properties; }; 
    690     $self->_refresh_settings_panels_properties; 
    691     map { 
    692         $_->Refresh; 
    693     } 
    694     ( 
    695         $self->image_prop_exif, 
    696         $self->global_settings_panel, 
    697         $self->piwigo_photo_properties_tags 
    698     ); 
    699      
    700 } 
    701  
    702 #  
    703 sub _initFrame { 
    704     my ( $self ) = @_; 
    705      
    706     $self->create_toolbar; 
    707  
    708     my $sizer_h = Wx::BoxSizer->new( wxHORIZONTAL ); 
    709      
    710  
    711  
    712     $self->imageviewer( 
    713         Uploader::GUI::wxImageListCtrl->new(  
    714             {  
    715                 parentwnd => $self, 
    716                 imagelist => $self->imagelist, 
    717                 image_size => $self->imagelist->wx_thumb_size, 
    718                 columns => $self->piwigo_property_list, 
    719             } 
    720         ) 
    721     ); 
    722  
    723     # message displayed in the image listctrl when empty 
    724     $self->imageviewer->InitEmptyMsg; 
    725  
    726     $self->init_panels; 
    727  
    728     $self->dlg_piwigo_photo_properties ( 
    729         Uploader::GUI::wxPhotoProperties->new( 
    730             { 
    731                 parentwnd       => $self, 
    732                 properties      => $self->piwigo_photo_properties, 
    733                 tags            => 
    734                 { 
    735                     id => $main::PHOTO_PROPERTIES_TAG, 
    736                     choices => $self->piwigo_tags, 
    737                     selection => $self->image_tags, 
    738                     creation_callback => sub { $self->_create_piwigo_tag(@_) }, 
    739                }, 
    740             } 
    741         ) 
    742     ); 
    743  
    744     $self->piwigo_photo_properties_tags( 
    745         $self->dlg_piwigo_photo_properties->FindWindow($main::PHOTO_PROPERTIES_TAG) 
    746     ); 
    747  
    748     $self->create_tree( 
    749         $self->dlg_piwigo_photo_properties->FindWindow($main::PHOTO_PROPERTIES_CATEGORIES) 
    750     ); 
    751  
    752     $self->init_empty_category_msg; 
    753     $self->set_empty_tree_panel_evt_paint; 
    754     $self->show_pwg_categories_empty_msg; 
    755  
    756     $self->init_dnd_targets; 
    757  
    758     if( $self->imagelist->wx_thumb_imglist->GetImageCount){ 
    759         $self->ShowImageViewer; 
    760          
    761         $self->imageviewer->Refresh( 
    762             $self->imagelist->wx_thumb_imglist 
    763         ); 
    764         
    765         $self->OnUpdateImageviewerNotEmpty; 
    766     } 
    767     else{ 
    768         $self->OnUpdateImageviewerEmpty; 
    769     } 
    770  
    771     # the imageviewer has a stretch factor of 1 : expands its size on frame resize 
    772     $sizer_h->Add( $self->imageviewer, 1, wxEXPAND|wxALL, 2 ); 
    773     $sizer_h->Add( $self->dlg_piwigo_photo_properties, 0, wxEXPAND|wxALL, 2 ); 
    774  
    775  
    776     $self->SetSizer( 
    777         $sizer_h 
    778     ); 
    779     my $new_size = $sizer_h->Fit( 
    780         $self 
    781     ); 
    782     $self->SetMinSize([600, 660]); 
    783     $self->Center; 
    784 } 
    785769 
    786770sub OnUpdateImageviewerEmpty { 
    787771    my ( $self ) = @_; 
    788772 
    789     $self->dlg_piwigo_photo_properties->{_properties_notebook}->Enable(0); 
     773    $self->piwigo_photo_properties_dlg->{_properties_notebook}->Enable(0); 
    790774    $self->imageviewer->OnEmpty; 
    791775} 
     
    794778    my ( $self ) = @_; 
    795779 
    796     $self->dlg_piwigo_photo_properties->{_properties_notebook}->Enable(1); 
     780    $self->piwigo_photo_properties_dlg->{_properties_notebook}->Enable(1); 
    797781    $self->imageviewer->OnNotEmpty; 
    798782} 
    799783 
    800784 
    801 sub _refresh_settings_panels_properties { 
     785sub init_dialogs { 
    802786    my ( $self ) = @_;     
    803787 
    804     $self->dlg_piwigo_photo_properties->properties( 
    805         $self->piwigo_photo_properties 
    806     ); 
    807  
    808      
    809     $self->image_prop_exif->properties( 
    810         $self->exif_properties 
    811     ); 
    812  
    813     $self->global_settings_panel->properties( 
    814         $self->global_settings 
    815     );     
    816  
    817 } 
    818  
    819 sub _init_settings_panels { 
    820     my ( $self ) = @_;     
    821  
    822  
    823     $self->image_prop_exif( 
     788 
     789    $self->exif_dlg( 
    824790        Uploader::GUI::wxPropertyListDlg->new(  
    825791            {  
     
    830796        ) 
    831797    ); 
    832     $self->image_prop_exif->Hide; 
    833  
    834     $self->global_settings_panel( 
     798    $self->exif_dlg->Hide; 
     799 
     800    $self->global_settings_dlg( 
    835801        Uploader::GUI::wxGlobalSettings->new(  
    836802            {  
     
    841807        ) 
    842808    ); 
    843     $self->global_settings_panel->Hide; 
    844  
    845  
    846  
    847     $self->image_preview( 
     809    $self->global_settings_dlg->Hide; 
     810 
     811    $self->image_preview_dlg( 
    848812        Uploader::GUI::wxImagePreview->new( 
    849813            {  
     
    854818    ); 
    855819 
    856 } 
    857  
    858 sub init_panels { 
    859     my ( $self ) = @_; 
    860      
    861     $self->_init_settings_panels;     
    862 } 
    863  
    864 # HTML code for getting started dialog box 
     820    $self->destination_category_dlg( 
     821        Uploader::GUI::wxDestinationCategoryDlg->new( 
     822            {  
     823                parentwnd    => $self, 
     824                caption      => gettext("Upload to Piwigo"), 
     825                categories   => [@{$self->pwg->categories}], 
     826                properties   => { 
     827                                    $main::CHOOSE_DESTINATION => { label => wxTheApp->branding->{'What is the destination category?'} }, 
     828                                    $main::DESTINATION_CATEGORIES_OK => { label=>gettext("Upload to Piwigo")}, 
     829                                    $main::DESTINATION_CATEGORIES_CANCEL => { label=>gettext("Cancel")}, 
     830                                    $main::DESTINATION_CATEGORIES => { 
     831                                        id_selection => sub { $self->imagelist->categories(@_) }, 
     832                                        frame_callback => sub { 
     833                                            my ( $dlg, $ctrl, $evt ) = @_; 
     834                                            $dlg->FindWindow($main::DESTINATION_CATEGORIES_OK)->Enable(scalar @{$self->imagelist->categories}); 
     835                                        }, 
     836                                    }, 
     837                                }, 
     838                frame_callback => sub { $self->OnRefreshCategories }, 
     839            } 
     840        ) 
     841    ); 
     842 
     843    $self->destination_category_dlg->Hide; 
     844 
     845    $self->destination_categories( 
     846        $self->destination_category_dlg->FindWindow($main::DESTINATION_CATEGORIES) 
     847    ); 
     848 
     849    $self->categories_treectrl( 
     850        [ 
     851            $self->destination_categories, 
     852            $self->tree, 
     853        ] 
     854    ); 
     855 
     856} 
    865857 
    866858 
     
    883875 
    884876 
    885  
    886877sub OnPhotoProperties { 
    887878    my ( $self ) = @_; 
    888879 
    889     $self->image_prop_exif->Show(1); 
    890 } 
     880    $self->exif_dlg->Show(1); 
     881} 
     882 
    891883 
    892884sub OnPreview { 
    893885    my ( $self ) = @_; 
    894886 
    895     $self->image_preview->Show(1); 
    896  
    897  
    898  
     887    $self->image_preview_dlg->Show(1); 
    899888} 
    900889 
     
    903892    my ( $self ) = @_; 
    904893 
    905     $self->global_settings_panel->Show(1); 
     894    $self->global_settings_dlg->Show(1); 
    906895} 
    907896 
     
    913902} 
    914903 
     904 
    915905sub OnGeneralSettingsClose { 
    916906    my ( $self, $event ) = @_; 
    917907 
    918     $self->global_settings_panel->Hide; 
    919 } 
     908    $self->global_settings_dlg->Hide; 
     909} 
     910 
    920911 
    921912sub OnImageExifPropClose { 
     
    925916} 
    926917 
    927 sub create_tree { 
    928     my ( $self, $tree ) = @_; 
    929  
    930     my $images = [ 
    931         map { 
    932             Wx::Bitmap->new( $_, wxBITMAP_TYPE_PNG ) 
    933              
    934         } 
    935         ( 
    936           wxTheApp->resource_path('tree_pwg.png'), 
    937           wxTheApp->resource_path('tree_folder.png'), 
    938         )     
    939     ]; 
    940  
    941     $self->treeimglist( Wx::ImageList->new( 16, 16, 1 ) ); 
     918 
     919 
     920 
     921sub show_hide_pwg_categories_empty_msg { 
     922    my ( $self ) = @_; 
     923 
    942924    map { 
    943         $self->treeimglist->Add($_); 
    944     } 
    945     @$images; 
    946     
    947     $self->tree(  
    948         $tree || Wx::TreeCtrl->new(  
    949            $self->horizontal_splitter,  
    950            -1,  
    951            wxDefaultPosition,  
    952            wxDefaultSize,  
    953            wxCLIP_CHILDREN| 
    954            wxTR_HAS_BUTTONS| 
    955            wxTR_EDIT_LABELS  
    956         )  
    957     ); 
    958  
    959     $self->tree->SetImageList( $self->treeimglist ); 
    960     if(wxTheApp->use_offline){ 
    961         $self->tree->Enable(0); 
    962     } 
    963     else{ 
    964         $self->populate_tree_categories ; 
    965     } 
    966  
    967     $self->tree ; 
    968 } 
    969  
    970  
    971 sub set_empty_tree_panel_evt_paint{ 
    972     my ( $self ) = @_; 
    973     Wx::Event::EVT_PAINT( $self->tree, sub { 
    974             my ( $tree, $event ) = @_; 
    975             if(exists $tree->{_empty_panel} and ! exists $tree->{_empty_panel}{_paint}){ 
    976                 my ($w, $h) = $tree->GetSizeWH; 
    977                 my ($x, $y) = $tree->{_empty_panel}->GetPositionXY; 
    978  
    979                 $tree->{_empty_panel}{x} = $x if !exists $tree->{_empty_panel}{x} ; 
    980                 $tree->{_empty_panel}{y} = $y if !exists $tree->{_empty_panel}{y}; 
    981                 my ($wp, $hp) = $tree->{_empty_panel}->GetSizeWH; 
    982                 my $x_off = ($w-$wp)/2 > 0 ? ($w-$wp)/2 : 0; 
    983                 my $y_off = ($h-$hp)/2 > 0 ? ($h-$hp)/2 : 0; 
    984                 $tree->{_empty_panel}->Move( 
    985                     [ 
    986                         $tree->{_empty_panel}{x}+$x_off, 
    987                         $tree->{_empty_panel}{y}+$y_off 
    988                     ] 
    989                 ); 
    990                 $tree->{_empty_panel}{_paint} = 1; 
    991             } 
    992             $event->Skip; 
    993         } 
    994     ) if 1; 
    995  
    996 } 
    997  
    998  
    999 sub init_empty_category_msg { 
    1000  
    1001     my ( $self ) = @_; 
    1002     # add a panel 
    1003     my $empty_panel = Wx::Panel->new($self->tree, -1, wxDefaultPosition, wxDefaultSize); 
    1004     my( $item0 ) = Wx::BoxSizer->new( wxVERTICAL ); 
    1005      
    1006     my $fb = Wx::Font->new( 12, wxSWISS, wxNORMAL, wxBOLD ); 
    1007  
    1008  
    1009     my( $item1 ) = Wx::Button->new( 
    1010         $empty_panel, 
    1011         $main::CATEGORIES_ADD, 
    1012         wxTheApp->branding->{'Add new category'}, 
    1013         wxDefaultPosition, 
    1014         [-1,40], 
    1015         0 
    1016     ); 
    1017     my $btfont = Wx::Font->new(12, wxSWISS, wxNORMAL, wxNORMAL ); 
    1018     $item1->SetFont($btfont); 
    1019     $item0->AddWindow( $item1, 0, wxALIGN_CENTER|wxALL, 5 ); 
    1020  
    1021  
    1022     $empty_panel->SetSizer( $item0 ); 
    1023     $item0->SetSizeHints( $empty_panel ); 
    1024  
    1025     $self->tree->{_empty_panel} = $empty_panel; 
    1026     $self->tree->{_empty_panel}->SetBackgroundColour(wxWHITE); 
    1027  
    1028     my ($wp, $hp) = $self->tree->{_empty_panel}->GetSizeWH; 
    1029  
    1030     $self->tree->SetMinSize( [20+$wp, -1 ]); 
    1031  
    1032 } 
    1033  
    1034  
    1035 sub pwg_categories_are_empty { 
    1036     my ( $self ) = @_; 
    1037  
    1038     scalar @{wxTheApp->pwg->categories} < 1 ? 1 : 0 ; 
    1039 } 
    1040  
    1041  
    1042 sub populate_tree_categories { 
    1043     my ( $self ) = @_; 
    1044  
    1045     $self->populate_tree( 
    1046         $self->tree, 
    1047         wxTheApp->pwg->categories, 
    1048     ) if defined wxTheApp->pwg ; 
    1049 } 
    1050  
    1051  
    1052 sub show_pwg_categories_empty_msg { 
    1053     my ( $self ) = @_; 
    1054  
    1055     if($self->pwg_categories_are_empty){ 
    1056         $self->tree->{_empty_panel}->Show(1); 
    1057     } 
    1058     else{ 
    1059         $self->tree->{_empty_panel}->Show(0); 
    1060     } 
    1061 } 
    1062  
    1063  
    1064  
    1065 # returns a valid itemData 
    1066 sub itemData { Wx::TreeItemData->new( $_[0] ) } 
    1067  
    1068 sub populate_tree { 
    1069     my ( $self, $tree, $tree_items ) = @_; 
    1070     my $root = shift @{$tree_items}; 
    1071  
    1072     $self->tree_root( 
    1073         $tree->AddRoot(  
    1074             $root->[0],  
    1075             $root->[3],  
    1076             $root->[4],  
    1077             itemData( $root->[2] )  
    1078         ) 
    1079     ); 
    1080  
    1081   $self->populate_tree_helper( $tree, $self->tree_root, $tree_items ); 
    1082    
    1083   $tree->SelectItem( $self->tree_root ); 
    1084   $tree->Expand( $self->tree_root ); 
    1085 } 
    1086  
    1087 sub populate_tree_helper { 
    1088   my ( $self, $tree, $parent_id, $tree_items ) = @_; 
    1089  
    1090   my $id; 
    1091  
    1092   map { 
    1093       my $name = $_->[0]; 
    1094  
    1095       $id = $tree->AppendItem(  
    1096                                    $parent_id,  
    1097                                    $name, 
    1098                                    defined($_->[3]) ? $_->[3] : 0,  
    1099                                    defined($_->[4]) ? $_->[4] : 0,  
    1100                                    itemData( $_->[2])  
    1101                               ); 
    1102       $self->tree_item_default($id) if ! defined $self->tree_item_default; 
    1103       # current item has children 
    1104       if( ref( $_->[1] ) eq 'ARRAY' ) { 
    1105           $self->populate_tree_helper( $tree, $id, $_->[1] ); 
    1106       }  
    1107   } 
    1108   @{$tree_items}; 
    1109  
    1110 } 
    1111  
    1112 sub _initMenus { 
     925        $_->GetCount > 1 ? 
     926            $_->HideEmptyMsg : 
     927            $_->ShowEmptyMsg; 
     928    }@{$self->categories_treectrl}; 
     929 
     930} 
     931 
     932 
     933sub init_menus { 
    1113934    my ( $self ) = @_ ; 
    1114935 
     
    12211042} 
    12221043 
    1223 sub _initEventHandlers { 
     1044sub init_event_handlers { 
    12241045    my ( $self ) = @_ ; 
    12251046     
     
    12431064    Wx::Event::EVT_CLOSE( $self, \&OnClose ); 
    12441065 
    1245     Wx::Event::EVT_MENU( $self, 1+$ID_TREE_CTX_MENU, \&OnAddCategories ); 
     1066    Wx::Event::EVT_MENU( $self, 1+$ID_TREE_CTX_MENU, \&OnAddCategory ); 
    12461067    Wx::Event::EVT_MENU( $self, 2+$ID_TREE_CTX_MENU, \&OnRefreshCategories ); 
    12471068    Wx::Event::EVT_MENU( $self, 3+$ID_TREE_CTX_MENU, \&OnExpandCategories ); 
     
    12541075    Wx::Event::EVT_BUTTON( $self, $self->imageviewer->add_button->GetId, \&OnAddImages ); 
    12551076 
    1256     Wx::Event::EVT_BUTTON( $self, $main::CATEGORIES_ADD, \&OnAddCategories ); 
    12571077 
    12581078    # only refresh when calling event is finished 
     
    12621082            my ( $self, $event ) = @_; 
    12631083 
    1264             if ( $self->image_preview_refresh and $self->image_preview->IsShown ){ 
     1084            if ( $self->image_preview_need_refresh and $self->image_preview_dlg->IsShown ){ 
    12651085                $self->set_preview_image;  
    1266                 $self->image_preview->Refresh; 
    1267                 $self->image_preview_refresh(0); 
     1086                $self->image_preview_dlg->Refresh; 
     1087                $self->image_preview_need_refresh(0); 
    12681088            } 
    12691089 
     
    12831103            } 
    12841104 
    1285             if(!scalar @{$self->imageviewer->GetSelectedItems} and $self->dlg_piwigo_photo_properties->{_properties_notebook}->IsEnabled){ 
    1286                 $self->dlg_piwigo_photo_properties->{_properties_notebook}->Enable(0); 
     1105            if(!scalar @{$self->imageviewer->GetSelectedItems} and $self->piwigo_photo_properties_dlg->{_properties_notebook}->IsEnabled){ 
     1106                $self->piwigo_photo_properties_dlg->{_properties_notebook}->Enable(0); 
    12871107            } 
    12881108 
     
    13141134} 
    13151135 
     1136 
    13161137sub OnUpdateToolbar { 
    13171138    my( $self ) = @_; 
    13181139     
    1319     if($self->global_settings_panel->IsShown){ 
     1140    if($self->global_settings_dlg->IsShown){ 
    13201141        $self->toolbar->EnableTool(104, 0); 
    13211142    } 
     
    13241145    } 
    13251146 
    1326     if($self->global_settings_panel->IsShown){ 
     1147    if($self->global_settings_dlg->IsShown){ 
    13271148        $self->toolbar->EnableTool(104, 0); 
    13281149    } 
     
    13421163 
    13431164    if (!$self->imageviewer->GetItemCount){ 
    1344         $self->image_preview->image( 
     1165        $self->image_preview_dlg->image( 
    13451166            0 
    13461167        );  
    13471168        # have to reset 
    1348         $self->dlg_piwigo_photo_properties->ClearProperties; 
     1169        $self->piwigo_photo_properties_dlg->ClearProperties; 
    13491170        $self->piwigo_photo_properties_tags->ClearAllSelection; 
    13501171        $self->imagelist->SetCurrentImage(-1); 
     
    13591180    } 
    13601181 
    1361     $self->image_preview->Refresh; 
    1362     $self->image_prop_exif->Refresh; 
     1182    $self->image_preview_dlg->Refresh; 
     1183    $self->exif_dlg->Refresh; 
    13631184} 
    13641185 
     
    14021223} 
    14031224 
     1225 
    14041226sub OnTreeSelChanged { 
    14051227    my( $self, $event ) = @_; 
    1406    
    1407     my @items = $self->tree->GetSelections; 
    14081228 
    14091229    $self->imagelist->categories( 
    1410         [ 
    1411             map { 
    1412                 my $category = $self->tree->GetPlData( $_ ); 
    1413                 $category->{id} if $category != -1; 
    1414             } 
    1415             @items 
    1416         ] 
     1230        $event->GetEventObject->GetSelectionsIds 
    14171231    ); 
    14181232} 
     
    15061320} 
    15071321 
    1508 sub OnAddCategories { 
     1322sub OnAddCategory { 
    15091323    my ( $self, $event ) = @_; 
    15101324 
    1511     my $parent_item = $self->tree->GetSelection; 
    1512  
    1513     my $category = $self->tree->GetPlData($parent_item); 
    1514     my $category_id; 
    1515      
    1516     $category_id = $category->{id} if 'HASH' eq ref($category) ; 
    1517  
    1518     my $dialog = Wx::TextEntryDialog->new(  
    1519         $self,  
    1520         wxTheApp->branding->{'Category name'},  
    1521         wxTheApp->branding->{'Add new category'}, 
    1522         wxTheApp->branding->{'New category'},  
    1523     ); 
    1524  
    1525     if( $dialog->ShowModal != wxID_CANCEL ) { 
    1526         my $name = $dialog->GetValue; 
    1527         my ( $success, $status_msg, $content ) = $self->pwg->AddCategories( $name, $category_id); 
    1528  
    1529         if($success){ 
    1530             $self->tree->{_empty_panel}->Show(0); 
    1531             $self->_append_category($parent_item, $name, $content->{result}{id}); 
    1532         } 
    1533     } 
    1534  
    1535  
    1536     $dialog->Destroy; 
    1537 } 
     1325    $self->tree->AddCategory; 
     1326 
     1327} 
     1328 
    15381329 
    15391330sub OnRefreshCategories { 
     
    15451336 
    15461337sub _refresh_all_categories_helper { 
    1547     my ( $self ) = @_;     
     1338    my ( $self ) = @_; 
    15481339 
    15491340    my $busycursor = Wx::BusyCursor->new(); 
    15501341    $self->tree->CollapseAll; 
    15511342    $self->tree->DeleteAllItems; 
    1552     $self->imagelist->categories([]); 
    15531343    $self->pwg->RefreshCategories(); 
    1554     $self->populate_tree_categories; 
    1555     $self->show_pwg_categories_empty_msg; 
    1556 } 
    1557  
    1558 sub _append_category { 
    1559     my ( $self, $parent_id, $name, $id ) = @_; 
    1560  
    1561     $self->tree->SelectItem( 
    1562         $self->tree->AppendItem( 
    1563             $parent_id,  
    1564             $name,  
    1565             1,  
    1566             -1,  
    1567             Wx::TreeItemData->new( { id => $id } ) 
    1568         ) 
    1569     ); 
    1570 } 
     1344    $self->tree->categories( 
     1345        $self->pwg->categories 
     1346    ); 
     1347    $self->tree->Populate; 
     1348    $self->show_hide_pwg_categories_empty_msg; 
     1349} 
     1350 
    15711351 
    15721352sub OnImageViewerEndLabelEdit { 
     
    15781358    ); 
    15791359         
    1580     $self->dlg_piwigo_photo_properties->SetProperties; 
     1360    $self->piwigo_photo_properties_dlg->SetProperties; 
    15811361} 
    15821362 
     
    15981378    my $indx = $event->GetIndex; 
    15991379 
    1600     $self->dlg_piwigo_photo_properties->{_properties_notebook}->Enable(1)  
    1601         if !$self->dlg_piwigo_photo_properties->{_properties_notebook}->IsEnabled; 
     1380    $self->piwigo_photo_properties_dlg->{_properties_notebook}->Enable(1)  
     1381        if !$self->piwigo_photo_properties_dlg->{_properties_notebook}->IsEnabled; 
    16021382    $self->_on_imageviewer_item_selected($indx); 
    16031383 
     
    16471427    # and when current event is processed 
    16481428    # see call to EVT_IDLE 
    1649     $self->image_preview_refresh(1); 
    1650  
    1651     $self->dlg_piwigo_photo_properties->SetProperties if defined $self->dlg_piwigo_photo_properties; 
    1652     $self->image_prop_exif->Refresh; 
     1429    $self->image_preview_need_refresh(1); 
     1430 
     1431    $self->piwigo_photo_properties_dlg->SetProperties if defined $self->piwigo_photo_properties_dlg; 
     1432    $self->exif_dlg->Refresh; 
    16531433    $self->piwigo_photo_properties_tags->Refresh; 
    16541434 
     
    16651445 
    16661446 
    1667     $self->dlg_piwigo_photo_properties->{_multi_selection_mode_panel}{_text1}->SetLabel( 
     1447    $self->piwigo_photo_properties_dlg->{_multi_selection_mode_panel}{_text1}->SetLabel( 
    16681448        sprintf(gettext("You have selected a batch of %s photos"), $self->imageviewer->GetSelectectItemsCount ) 
    16691449    ); 
    16701450 
    1671     $self->dlg_piwigo_photo_properties->{_multi_selection_mode_panel}{_text2}->SetLabel( 
     1451    $self->piwigo_photo_properties_dlg->{_multi_selection_mode_panel}{_text2}->SetLabel( 
    16721452        gettext("Changes apply to the whole batch") 
    16731453    ); 
    16741454 
    1675     $self->dlg_piwigo_photo_properties->{_multi_selection_mode_panel}->Show(1); 
    1676     $self->dlg_piwigo_photo_properties->Layout; 
     1455    $self->piwigo_photo_properties_dlg->{_multi_selection_mode_panel}->Show(1); 
     1456    $self->piwigo_photo_properties_dlg->Layout; 
    16771457} 
    16781458 
     
    16801460    my( $self ) = @_; 
    16811461 
    1682     $self->dlg_piwigo_photo_properties->{_multi_selection_mode_panel}->Show(0); 
    1683     $self->dlg_piwigo_photo_properties->Layout; 
     1462    $self->piwigo_photo_properties_dlg->{_multi_selection_mode_panel}->Show(0); 
     1463    $self->piwigo_photo_properties_dlg->Layout; 
    16841464 
    16851465} 
     
    17081488    } 
    17091489 
    1710     $self->image_preview->image_size( 
     1490    $self->image_preview_dlg->image_size( 
    17111491        [$image->GetWidth, $image->GetHeight, ] 
    17121492    );         
    17131493 
    1714     $self->image_preview->image( 
     1494    $self->image_preview_dlg->image( 
    17151495        $image 
    17161496    );         
     
    17511531 
    17521532    if(!$self->imageviewer->GetItemCount){ 
    1753         $self->image_preview->image(0); 
     1533        $self->image_preview_dlg->image(0); 
    17541534        $self->OnUpdateImageviewerEmpty; 
    17551535    } 
     
    17631543    } 
    17641544 
    1765     $self->image_preview->Refresh; 
     1545    $self->image_preview_dlg->Refresh; 
    17661546    Wx::Yield(); 
    17671547} 
     
    18501630        $self->imageviewer->Show(1); 
    18511631    } 
    1852 } 
    1853  
    1854  
    1855 sub ActivateImageViewer { 
    1856     my ( $self ) = @_;     
    1857      
    18581632} 
    18591633 
     
    18831657 
    18841658 
     1659sub GetWxBitmapType { 
     1660    my ( $self, $type ) = @_; 
     1661     
     1662    $self->{IMGTYPE}->{$type}; 
     1663} 
     1664 
    18851665 
    18861666# prepare and upload image_selection 
     
    18911671 
    18921672    if( $self->destination_categories_are_empty ){ 
    1893         Wx::MessageBox(  
    1894             sprintf( 
    1895                 "%s",  
    1896                 wxTheApp->branding->{'What is the destination category?'} 
    1897             ), 
    1898             gettext("Piwigo upload error"), 
    1899             wxOK | wxICON_EXCLAMATION,  
    1900         ); 
    1901  
    1902     } 
    1903     else { 
     1673        return unless $self->destination_category_dlg->ShowModal != wxID_CANCEL; 
     1674    } 
     1675#    else { 
    19041676        # all selected is implicit 
    19051677        if(!scalar @{$self->imageviewer->GetSelectedItems}){ 
     
    19391711            ); 
    19401712        } 
    1941     } 
     1713    #} 
    19421714} 
    19431715 
     
    20091781 
    20101782    #destroy hidden dialogs 
    2011     $self->global_settings_panel->Destroy; 
    2012     $self->image_preview->Destroy; 
    2013     $self->image_prop_exif->Destroy; 
     1783    $self->global_settings_dlg->Destroy; 
     1784    $self->image_preview_dlg->Destroy; 
     1785    $self->exif_dlg->Destroy; 
     1786    $self->destination_category_dlg->Destroy; 
    20141787 
    20151788    $self->progressdlg->Destroy if defined $self->progressdlg; 
  • extensions/pLoader/trunk/src/Uploader/GUI/Layout/PhotoPropertiesCategoriesTags.pm

    r5261 r5390  
    33use Wx::DateTime; 
    44use strict; 
    5  
     5use Data::Dumper; 
    66# Custom source 
    77use Uploader::GUI::wxChoiceFilteredPanel; 
     
    2626 
    2727sub PhotoPropertiesCategoriesTags { 
    28     my( $parent ) = @_; 
     28    my( $parent, $categories ) = @_; 
     29 
     30 
    2931    my( $topsizer ) = Wx::BoxSizer->new( wxVERTICAL ); 
    3032 
     
    6163    $topsizer->Add( $item1, 2, wxEXPAND|wxALL, 5 ); 
    6264 
    63     my( $item3 ) = Wx::TreeCtrl->new( $parent, $main::PHOTO_PROPERTIES_CATEGORIES, wxDefaultPosition, [450,160], wxTR_HAS_BUTTONS|wxTR_LINES_AT_ROOT ); 
    6465    # the notebook has adaptive size : stretch factor 1, wxEXPAND 
    65     $topsizer->AddWindow( $item3, 1, wxEXPAND|wxALL, 5 ); 
     66    my ( $tree_categories ) = Uploader::GUI::wxCategoryTreeCtrl->new( 
     67        { 
     68            parentwnd  => $parent, 
     69            id         => $main::PHOTO_PROPERTIES_CATEGORIES, 
     70            categories => $categories, 
     71        } 
     72    ); 
     73    $tree_categories->Populate; 
     74    $topsizer->AddWindow( $tree_categories, 1, wxEXPAND|wxALL, 5 ); 
    6675 
    6776    my( $item4 ) = Wx::StaticLine->new( $parent, $main::ID_LINE, wxDefaultPosition, [20,-1], wxLI_HORIZONTAL ); 
     
    7180    my $btfont = Wx::Font->new(16, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD ); 
    7281    $item5->SetFont($btfont); 
    73 #    $item5->SetForegroundColour( Wx::wxGREEN ); 
    7482    $item5->SetForegroundColour( Wx::Colour->new(255, 51, 99) ); 
    7583    $topsizer->AddWindow( $item5, 0, wxEXPAND|wxALL, 5 ); 
  • extensions/pLoader/trunk/src/Uploader/PWG.pm

    r4779 r5390  
    5353 
    5454    if(!$self->use_offline){ 
    55         $self->RefreshCategories;        
     55        $self->RefreshCategories; 
    5656        $self->RefreshTags; 
    5757    } 
  • extensions/pLoader/trunk/src/ploader.pl

    r4974 r5390  
    3333use Uploader::GUI::Layout::PhotoPropertiesCategoriesTags; 
    3434use Uploader::GUI::Layout::PhotoPropertiesExif; 
     35use Uploader::GUI::Layout::DestinationCategory; 
    3536use JSON; 
    3637use Wx::Locale qw/:default/; 
     
    3839use File::HomeDir; 
    3940 
    40 #$SIG{__DIE__} = \&OnDieHandler; 
     41$SIG{__DIE__} = \&OnDieHandler; 
    4142 
    4243eval { 
Note: See TracChangeset for help on using the changeset viewer.