1*6af4da5dSStephan Aßmus // Copyright 1999, Be Incorporated. All Rights Reserved. 2*6af4da5dSStephan Aßmus // Copyright 2000-2004, Jun Suzuki. All Rights Reserved. 3*6af4da5dSStephan Aßmus // Copyright 2007, Stephan Aßmus. All Rights Reserved. 4*6af4da5dSStephan Aßmus // This file may be used under the terms of the Be Sample Code License. 5*6af4da5dSStephan Aßmus #include "MediaFileListView.h" 6*6af4da5dSStephan Aßmus 7*6af4da5dSStephan Aßmus #include <Application.h> 8*6af4da5dSStephan Aßmus #include <MediaFile.h> 9*6af4da5dSStephan Aßmus #include <Messenger.h> 10*6af4da5dSStephan Aßmus 11*6af4da5dSStephan Aßmus #include "MediaConverterWindow.h" 12*6af4da5dSStephan Aßmus #include "MessageConstants.h" 13*6af4da5dSStephan Aßmus 14*6af4da5dSStephan Aßmus 15*6af4da5dSStephan Aßmus // #pragma mark - MediaFileListItem 16*6af4da5dSStephan Aßmus 17*6af4da5dSStephan Aßmus 18*6af4da5dSStephan Aßmus MediaFileListItem::MediaFileListItem(BMediaFile* file, const entry_ref& ref) 19*6af4da5dSStephan Aßmus : BStringItem(ref.name), 20*6af4da5dSStephan Aßmus fRef(ref), 21*6af4da5dSStephan Aßmus fMediaFile(file) 22*6af4da5dSStephan Aßmus { 23*6af4da5dSStephan Aßmus } 24*6af4da5dSStephan Aßmus 25*6af4da5dSStephan Aßmus 26*6af4da5dSStephan Aßmus MediaFileListItem::~MediaFileListItem() 27*6af4da5dSStephan Aßmus { 28*6af4da5dSStephan Aßmus delete fMediaFile; 29*6af4da5dSStephan Aßmus } 30*6af4da5dSStephan Aßmus 31*6af4da5dSStephan Aßmus 32*6af4da5dSStephan Aßmus // #pragma mark - MediaFileListView 33*6af4da5dSStephan Aßmus 34*6af4da5dSStephan Aßmus 35*6af4da5dSStephan Aßmus MediaFileListView::MediaFileListView(BRect frame, uint32 resizingMode) 36*6af4da5dSStephan Aßmus : BListView(frame, "MediaFileListView", B_SINGLE_SELECTION_LIST, resizingMode, 37*6af4da5dSStephan Aßmus B_WILL_DRAW | B_NAVIGABLE | B_FRAME_EVENTS) 38*6af4da5dSStephan Aßmus { 39*6af4da5dSStephan Aßmus fEnabled = true; 40*6af4da5dSStephan Aßmus } 41*6af4da5dSStephan Aßmus 42*6af4da5dSStephan Aßmus 43*6af4da5dSStephan Aßmus MediaFileListView::~MediaFileListView() 44*6af4da5dSStephan Aßmus { 45*6af4da5dSStephan Aßmus BListItem *item; 46*6af4da5dSStephan Aßmus while ((item = RemoveItem((int32)0)) != NULL) { 47*6af4da5dSStephan Aßmus delete item; 48*6af4da5dSStephan Aßmus } 49*6af4da5dSStephan Aßmus } 50*6af4da5dSStephan Aßmus 51*6af4da5dSStephan Aßmus 52*6af4da5dSStephan Aßmus void 53*6af4da5dSStephan Aßmus MediaFileListView::SetEnabled(bool enabled) 54*6af4da5dSStephan Aßmus { 55*6af4da5dSStephan Aßmus if (enabled == fEnabled) 56*6af4da5dSStephan Aßmus return; 57*6af4da5dSStephan Aßmus 58*6af4da5dSStephan Aßmus fEnabled = enabled; 59*6af4da5dSStephan Aßmus // TODO: visual indication of enabled status? 60*6af4da5dSStephan Aßmus } 61*6af4da5dSStephan Aßmus 62*6af4da5dSStephan Aßmus 63*6af4da5dSStephan Aßmus bool 64*6af4da5dSStephan Aßmus MediaFileListView::IsEnabled() const 65*6af4da5dSStephan Aßmus { 66*6af4da5dSStephan Aßmus return fEnabled; 67*6af4da5dSStephan Aßmus } 68*6af4da5dSStephan Aßmus 69*6af4da5dSStephan Aßmus 70*6af4da5dSStephan Aßmus void 71*6af4da5dSStephan Aßmus MediaFileListView::AddItem(BMediaFile* file, const entry_ref& ref) 72*6af4da5dSStephan Aßmus { 73*6af4da5dSStephan Aßmus BListView::AddItem(new MediaFileListItem(file, ref)); 74*6af4da5dSStephan Aßmus be_app_messenger.SendMessage(FILE_LIST_CHANGE_MESSAGE); 75*6af4da5dSStephan Aßmus } 76*6af4da5dSStephan Aßmus 77*6af4da5dSStephan Aßmus 78*6af4da5dSStephan Aßmus void 79*6af4da5dSStephan Aßmus MediaFileListView::KeyDown(const char *bytes, int32 numBytes) 80*6af4da5dSStephan Aßmus { 81*6af4da5dSStephan Aßmus switch (bytes[0]) { 82*6af4da5dSStephan Aßmus case B_DELETE: 83*6af4da5dSStephan Aßmus if (IsEnabled()) { 84*6af4da5dSStephan Aßmus int32 selection = CurrentSelection(); 85*6af4da5dSStephan Aßmus if (selection >= 0) { 86*6af4da5dSStephan Aßmus delete RemoveItem(selection); 87*6af4da5dSStephan Aßmus // select the previous item 88*6af4da5dSStephan Aßmus int32 count = CountItems(); 89*6af4da5dSStephan Aßmus if (selection >= count) 90*6af4da5dSStephan Aßmus selection = count - 1; 91*6af4da5dSStephan Aßmus Select(selection); 92*6af4da5dSStephan Aßmus be_app_messenger.SendMessage(FILE_LIST_CHANGE_MESSAGE); 93*6af4da5dSStephan Aßmus } 94*6af4da5dSStephan Aßmus } 95*6af4da5dSStephan Aßmus break; 96*6af4da5dSStephan Aßmus default: 97*6af4da5dSStephan Aßmus BListView::KeyDown(bytes, numBytes); 98*6af4da5dSStephan Aßmus } 99*6af4da5dSStephan Aßmus } 100*6af4da5dSStephan Aßmus 101*6af4da5dSStephan Aßmus 102*6af4da5dSStephan Aßmus void 103*6af4da5dSStephan Aßmus MediaFileListView::SelectionChanged() 104*6af4da5dSStephan Aßmus { 105*6af4da5dSStephan Aßmus MediaConverterWindow* win = dynamic_cast<MediaConverterWindow *>(Window()); 106*6af4da5dSStephan Aßmus if (win != NULL) 107*6af4da5dSStephan Aßmus win->SourceFileSelectionChanged(); 108*6af4da5dSStephan Aßmus } 109*6af4da5dSStephan Aßmus 110