haiku/src/apps/devices/PropertyList.cpp

132 lines
2.3 KiB
C++

/*
* Copyright 2009 Haiku Inc. All rights reserved.
* Distributed under the terms of the MIT license.
*
* Authors:
* Pieter Panman
*/
#include "PropertyList.h"
#include <Catalog.h>
#include <Clipboard.h>
#include <ColumnTypes.h>
#undef B_TRANSLATION_CONTEXT
#define B_TRANSLATION_CONTEXT "PropertyList"
PropertyRow::PropertyRow(const char* name, const char* value)
: BRow(),
fName(name), fValue(value)
{
SetField(new BStringField(name), kNameColumn);
SetField(new BStringField(value), kValueColumn);
}
PropertyRow::~PropertyRow()
{
}
void
PropertyRow::SetName(const char* name)
{
fName = name;
SetField(new BStringField(name), kNameColumn);
}
void
PropertyRow::SetValue(const char* value)
{
fValue = value;
SetField(new BStringField(value), kValueColumn);
}
PropertyList::PropertyList(const char* name)
: BColumnListView(BRect(0.0, 0.0, 1.0, 1.0), name, B_FOLLOW_ALL, 0,
B_NO_BORDER, true)
{
BStringColumn* nameColumn;
AddColumn(nameColumn = new BStringColumn(B_TRANSLATE("Name"), 150, 50, 500,
B_TRUNCATE_MIDDLE),
kNameColumn);
AddColumn(new BStringColumn(B_TRANSLATE("Value"), 150, 50, 500,
B_TRUNCATE_END), kValueColumn);
SetSortColumn(nameColumn, false, true);
}
PropertyList::~PropertyList()
{
RemoveAll();
}
void
PropertyList::AddAttributes(const Attributes& attributes)
{
RemoveAll();
for (unsigned int i = 0; i < attributes.size(); i++) {
AddRow(new PropertyRow(attributes[i].fName, attributes[i].fValue));
}
}
void
PropertyList::RemoveAll()
{
BRow *row;
while ((row = RowAt((int32)0, NULL))!=NULL) {
RemoveRow(row);
delete row;
}
}
void
PropertyList::SelectionChanged()
{
}
void
PropertyList::MessageReceived(BMessage* msg)
{
switch (msg->what) {
case B_COPY:
{
BString strings;
uint32 rowsCount = CountRows();
for (uint32 i = 0; i < rowsCount; i++) {
PropertyRow* current = (PropertyRow*)RowAt(i);
if (current->IsSelected())
strings << current->Name()
<< "\t" << current->Value() << "\n";
}
if (!be_clipboard->Lock())
break;
be_clipboard->Clear();
BMessage* data = be_clipboard->Data();
if (data != NULL) {
data->AddData("text/plain", B_MIME_TYPE,
strings, strings.Length());
be_clipboard->Commit();
}
be_clipboard->Unlock();
break;
}
default:
BColumnListView::MessageReceived(msg);
break;
}
}