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