16af4da5dSStephan Aßmus // Copyright 1999, Be Incorporated. All Rights Reserved. 26af4da5dSStephan Aßmus // Copyright 2000-2004, Jun Suzuki. All Rights Reserved. 3*1c992a52SStephan Aßmus // Copyright 2007, 2009 Stephan Aßmus. All Rights Reserved. 46af4da5dSStephan Aßmus // This file may be used under the terms of the Be Sample Code License. 5*1c992a52SStephan Aßmus 6*1c992a52SStephan Aßmus 76af4da5dSStephan Aßmus #include "MediaFileListView.h" 86af4da5dSStephan Aßmus 9*1c992a52SStephan Aßmus #include <new> 10*1c992a52SStephan Aßmus 116af4da5dSStephan Aßmus #include <Application.h> 126af4da5dSStephan Aßmus #include <MediaFile.h> 136af4da5dSStephan Aßmus #include <Messenger.h> 146af4da5dSStephan Aßmus 156af4da5dSStephan Aßmus #include "MediaConverterWindow.h" 166af4da5dSStephan Aßmus #include "MessageConstants.h" 176af4da5dSStephan Aßmus 186af4da5dSStephan Aßmus 196af4da5dSStephan Aßmus // #pragma mark - MediaFileListItem 206af4da5dSStephan Aßmus 216af4da5dSStephan Aßmus 226af4da5dSStephan Aßmus MediaFileListItem::MediaFileListItem(BMediaFile* file, const entry_ref& ref) 23*1c992a52SStephan Aßmus : 24*1c992a52SStephan Aßmus BStringItem(ref.name), 256af4da5dSStephan Aßmus fRef(ref), 266af4da5dSStephan Aßmus fMediaFile(file) 276af4da5dSStephan Aßmus { 286af4da5dSStephan Aßmus } 296af4da5dSStephan Aßmus 306af4da5dSStephan Aßmus 316af4da5dSStephan Aßmus MediaFileListItem::~MediaFileListItem() 326af4da5dSStephan Aßmus { 336af4da5dSStephan Aßmus delete fMediaFile; 346af4da5dSStephan Aßmus } 356af4da5dSStephan Aßmus 366af4da5dSStephan Aßmus 376af4da5dSStephan Aßmus // #pragma mark - MediaFileListView 386af4da5dSStephan Aßmus 396af4da5dSStephan Aßmus 406af4da5dSStephan Aßmus MediaFileListView::MediaFileListView(BRect frame, uint32 resizingMode) 416af4da5dSStephan Aßmus : BListView(frame, "MediaFileListView", B_SINGLE_SELECTION_LIST, resizingMode, 426af4da5dSStephan Aßmus B_WILL_DRAW | B_NAVIGABLE | B_FRAME_EVENTS) 436af4da5dSStephan Aßmus { 446af4da5dSStephan Aßmus fEnabled = true; 456af4da5dSStephan Aßmus } 466af4da5dSStephan Aßmus 476af4da5dSStephan Aßmus 486af4da5dSStephan Aßmus MediaFileListView::~MediaFileListView() 496af4da5dSStephan Aßmus { 506af4da5dSStephan Aßmus BListItem *item; 516af4da5dSStephan Aßmus while ((item = RemoveItem((int32)0)) != NULL) { 526af4da5dSStephan Aßmus delete item; 536af4da5dSStephan Aßmus } 546af4da5dSStephan Aßmus } 556af4da5dSStephan Aßmus 566af4da5dSStephan Aßmus 576af4da5dSStephan Aßmus void 586af4da5dSStephan Aßmus MediaFileListView::SetEnabled(bool enabled) 596af4da5dSStephan Aßmus { 606af4da5dSStephan Aßmus if (enabled == fEnabled) 616af4da5dSStephan Aßmus return; 626af4da5dSStephan Aßmus 636af4da5dSStephan Aßmus fEnabled = enabled; 646af4da5dSStephan Aßmus // TODO: visual indication of enabled status? 656af4da5dSStephan Aßmus } 666af4da5dSStephan Aßmus 676af4da5dSStephan Aßmus 686af4da5dSStephan Aßmus bool 696af4da5dSStephan Aßmus MediaFileListView::IsEnabled() const 706af4da5dSStephan Aßmus { 716af4da5dSStephan Aßmus return fEnabled; 726af4da5dSStephan Aßmus } 736af4da5dSStephan Aßmus 746af4da5dSStephan Aßmus 75*1c992a52SStephan Aßmus bool 76*1c992a52SStephan Aßmus MediaFileListView::AddMediaItem(BMediaFile* file, const entry_ref& ref) 776af4da5dSStephan Aßmus { 78*1c992a52SStephan Aßmus MediaFileListItem* item = new(std::nothrow) MediaFileListItem(file, ref); 79*1c992a52SStephan Aßmus if (item == NULL || !AddItem(item)) { 80*1c992a52SStephan Aßmus delete item; 81*1c992a52SStephan Aßmus return false; 82*1c992a52SStephan Aßmus } 836af4da5dSStephan Aßmus be_app_messenger.SendMessage(FILE_LIST_CHANGE_MESSAGE); 84*1c992a52SStephan Aßmus return true; 856af4da5dSStephan Aßmus } 866af4da5dSStephan Aßmus 876af4da5dSStephan Aßmus 886af4da5dSStephan Aßmus void 896af4da5dSStephan Aßmus MediaFileListView::KeyDown(const char *bytes, int32 numBytes) 906af4da5dSStephan Aßmus { 916af4da5dSStephan Aßmus switch (bytes[0]) { 926af4da5dSStephan Aßmus case B_DELETE: 936af4da5dSStephan Aßmus if (IsEnabled()) { 946af4da5dSStephan Aßmus int32 selection = CurrentSelection(); 956af4da5dSStephan Aßmus if (selection >= 0) { 966af4da5dSStephan Aßmus delete RemoveItem(selection); 976af4da5dSStephan Aßmus // select the previous item 986af4da5dSStephan Aßmus int32 count = CountItems(); 996af4da5dSStephan Aßmus if (selection >= count) 1006af4da5dSStephan Aßmus selection = count - 1; 1016af4da5dSStephan Aßmus Select(selection); 1026af4da5dSStephan Aßmus be_app_messenger.SendMessage(FILE_LIST_CHANGE_MESSAGE); 1036af4da5dSStephan Aßmus } 1046af4da5dSStephan Aßmus } 1056af4da5dSStephan Aßmus break; 1066af4da5dSStephan Aßmus default: 1076af4da5dSStephan Aßmus BListView::KeyDown(bytes, numBytes); 1086af4da5dSStephan Aßmus } 1096af4da5dSStephan Aßmus } 1106af4da5dSStephan Aßmus 1116af4da5dSStephan Aßmus 1126af4da5dSStephan Aßmus void 1136af4da5dSStephan Aßmus MediaFileListView::SelectionChanged() 1146af4da5dSStephan Aßmus { 1156af4da5dSStephan Aßmus MediaConverterWindow* win = dynamic_cast<MediaConverterWindow*>(Window()); 1166af4da5dSStephan Aßmus if (win != NULL) 1176af4da5dSStephan Aßmus win->SourceFileSelectionChanged(); 1186af4da5dSStephan Aßmus } 1196af4da5dSStephan Aßmus 120