// Copyright 1999, Be Incorporated. All Rights Reserved. // Copyright 2000-2004, Jun Suzuki. All Rights Reserved. // Copyright 2007, 2009 Stephan Aßmus. All Rights Reserved. // This file may be used under the terms of the Be Sample Code License. #include "MediaFileListView.h" #include #include #include #include #include "MediaConverterWindow.h" #include "MessageConstants.h" // #pragma mark - MediaFileListItem MediaFileListItem::MediaFileListItem(BMediaFile* file, const entry_ref& ref) : BStringItem(ref.name), fRef(ref), fMediaFile(file) { } MediaFileListItem::~MediaFileListItem() { delete fMediaFile; } // #pragma mark - MediaFileListView MediaFileListView::MediaFileListView() : BListView("MediaFileListView", B_SINGLE_SELECTION_LIST, B_WILL_DRAW | B_NAVIGABLE | B_FRAME_EVENTS) { fEnabled = true; } MediaFileListView::~MediaFileListView() { BListItem *item; while ((item = RemoveItem((int32)0)) != NULL) { delete item; } } void MediaFileListView::SetEnabled(bool enabled) { if (enabled == fEnabled) return; fEnabled = enabled; // TODO: visual indication of enabled status? } bool MediaFileListView::IsEnabled() const { return fEnabled; } bool MediaFileListView::AddMediaItem(BMediaFile* file, const entry_ref& ref) { MediaFileListItem* item = new(std::nothrow) MediaFileListItem(file, ref); if (item == NULL || !AddItem(item)) { delete item; return false; } be_app_messenger.SendMessage(FILE_LIST_CHANGE_MESSAGE); return true; } void MediaFileListView::KeyDown(const char *bytes, int32 numBytes) { switch (bytes[0]) { case B_DELETE: if (IsEnabled()) { int32 selection = CurrentSelection(); if (selection >= 0) { delete RemoveItem(selection); // select the previous item int32 count = CountItems(); if (selection >= count) selection = count - 1; Select(selection); be_app_messenger.SendMessage(FILE_LIST_CHANGE_MESSAGE); } } break; default: BListView::KeyDown(bytes, numBytes); break; } } void MediaFileListView::SelectionChanged() { MediaConverterWindow* win = dynamic_cast(Window()); if (win != NULL) win->SourceFileSelectionChanged(); }