#include "MediaFileListView.h"
#include <new>
#include <Application.h>
#include <MediaFile.h>
#include <Messenger.h>
#include "MediaConverterWindow.h"
#include "MessageConstants.h"
MediaFileListItem::MediaFileListItem(BMediaFile* file, const entry_ref& ref)
:
BStringItem(ref.name),
fRef(ref),
fMediaFile(file)
{
}
MediaFileListItem::~MediaFileListItem()
{
delete fMediaFile;
}
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;
}
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);
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<MediaConverterWindow*>(Window());
if (win != NULL)
win->SourceFileSelectionChanged();
}