xref: /haiku/src/apps/devices/PropertyList.cpp (revision b36bd5f7d5dcf6e62c2f9bed064603241adbd10c)
1 /*
2  * Copyright 2009 Haiku Inc. All rights reserved.
3  * Distributed under the terms of the MIT license.
4  *
5  * Authors:
6  *		Pieter Panman
7  */
8 
9 
10 #include "PropertyList.h"
11 
12 #include <Catalog.h>
13 #include <Clipboard.h>
14 #include <ColumnTypes.h>
15 
16 #undef B_TRANSLATION_CONTEXT
17 #define B_TRANSLATION_CONTEXT "PropertyList"
18 
19 
PropertyRow(const char * name,const char * value)20 PropertyRow::PropertyRow(const char* name, const char* value)
21 	: BRow(),
22 	fName(name), fValue(value)
23 {
24 	SetField(new BStringField(name), kNameColumn);
25 	SetField(new BStringField(value), kValueColumn);
26 }
27 
28 
~PropertyRow()29 PropertyRow::~PropertyRow()
30 {
31 }
32 
33 
34 void
SetName(const char * name)35 PropertyRow::SetName(const char* name)
36 {
37 	fName = name;
38 	SetField(new BStringField(name), kNameColumn);
39 }
40 
41 
42 void
SetValue(const char * value)43 PropertyRow::SetValue(const char* value)
44 {
45 	fValue = value;
46 	SetField(new BStringField(value), kValueColumn);
47 }
48 
49 
PropertyList(const char * name)50 PropertyList::PropertyList(const char* name)
51 	: BColumnListView(BRect(0.0, 0.0, 1.0, 1.0), name, B_FOLLOW_ALL, 0,
52 		B_NO_BORDER, true)
53 {
54 	BStringColumn* nameColumn;
55 	AddColumn(nameColumn = new BStringColumn(B_TRANSLATE("Name"), 150, 50, 500,
56 			B_TRUNCATE_MIDDLE),
57 		kNameColumn);
58 	AddColumn(new BStringColumn(B_TRANSLATE("Value"), 300, 50, 500,
59 		B_TRUNCATE_END), kValueColumn);
60 	SetSortColumn(nameColumn, false, true);
61 }
62 
63 
~PropertyList()64 PropertyList::~PropertyList()
65 {
66 	RemoveAll();
67 }
68 
69 
70 void
AddAttributes(const Attributes & attributes)71 PropertyList::AddAttributes(const Attributes& attributes)
72 {
73 	RemoveAll();
74 	for (unsigned int i = 0; i < attributes.size(); i++) {
75 		AddRow(new PropertyRow(attributes[i].fName, attributes[i].fValue));
76 	}
77 }
78 
79 
80 void
RemoveAll()81 PropertyList::RemoveAll()
82 {
83 	BRow *row;
84 	while ((row = RowAt((int32)0, NULL))!=NULL) {
85 		RemoveRow(row);
86 		delete row;
87 	}
88 }
89 
90 
91 void
SelectionChanged()92 PropertyList::SelectionChanged()
93 {
94 }
95 
96 
97 void
MessageReceived(BMessage * msg)98 PropertyList::MessageReceived(BMessage* msg)
99 {
100 	switch (msg->what) {
101 		case B_COPY:
102 		{
103 			BString strings;
104 			uint32 rowsCount = CountRows();
105 
106 			for (uint32 i = 0; i < rowsCount; i++) {
107 				PropertyRow* current = (PropertyRow*)RowAt(i);
108 				if (current->IsSelected())
109 					strings << current->Name()
110 						<< "\t" << current->Value() << "\n";
111 			}
112 
113 			if (!be_clipboard->Lock())
114 				break;
115 
116 			be_clipboard->Clear();
117 			BMessage* data = be_clipboard->Data();
118 			if (data != NULL) {
119 				data->AddData("text/plain", B_MIME_TYPE,
120 						strings, strings.Length());
121 				be_clipboard->Commit();
122 			}
123 
124 			be_clipboard->Unlock();
125 			break;
126 		}
127 		default:
128 			BColumnListView::MessageReceived(msg);
129 			break;
130 	}
131 }
132