1#include "Application.h"
2#include "Resources.h"
3#include "Window.h"
4#include "View.h"
5#include "Region.h"
6#include "Alert.h"
7#include "Button.h"
8#include "FindDirectory.h"
9#include "Mime.h"
10
11#include "string.h"
12#include "dirent.h"
13
14#include "ColumnListView.h"
15#include "CLVColumn.h"
16#include "CLVListItem.h"
17#include "CLVEasyItem.h"
18#include "NewStrings.h"
19
20#include "TreeControl.h"
21#include "ListControl.h"
22#include "Servers.h"
23#include "ServerProperties.h"
24#include "Icons.h"
25#include "besure_auth.h"
26
27void recvServerName(char *name, uint32 addr);
28
29const int32 MSG_SERVER_EDIT			= 'SEdt';
30
31ColumnListView *globalListView = NULL;
32BView *globalHeaderView = NULL;
33
34
35ServerItem::ServerItem(BView *headerView, ColumnListView *listView, const char *text0) :
36  ListItem(headerView, text0, "", "")
37{
38	BBitmap *icon;
39	BMessage archive;
40	size_t size;
41
42	list = listView;
43
44	char *bits = (char *) be_app->AppResources()->LoadResource(type_code('BBMP'), ICON_HOST_SMALL, &size);
45	if (bits)
46		if (archive.Unflatten(bits) == B_OK)
47		{
48			icon = new BBitmap(&archive);
49
50			SetColumnContent(0, icon, 2.0);
51			SetColumnContent(1, text0);
52		}
53}
54
55ServerItem::~ServerItem()
56{
57}
58
59bool ServerItem::ItemInvoked()
60{
61	BRect r;
62	BRect frame = GetAssociatedHeader()->Window()->Frame();
63//	status_t exitStatus;
64
65	r.Set(frame.left + 150, frame.top + 25, frame.left + 520, frame.top + 182);		// 370 x 350
66	ServerPropertiesPanel *info = new ServerPropertiesPanel(r, GetColumnContentText(1), NULL);
67//	wait_for_thread(info->Thread(), &exitStatus);
68	return true;
69//	return (!info->isCancelled());
70}
71
72void ServerItem::ItemSelected()
73{
74}
75
76void ServerItem::ItemDeselected()
77{
78}
79
80void ServerItem::ItemDeleted()
81{
82}
83
84bool ServerItem::IsDeleteable()
85{
86	return false;
87}
88
89
90ServersItem::ServersItem(uint32 level, bool superitem, bool expanded, int32 resourceID, BView *headerView, ColumnListView *listView, char *text) :
91  TreeItem(level, superitem, expanded, resourceID, headerView, listView, text)
92{
93}
94
95void ServersItem::ItemSelected()
96{
97	ColumnListView *listView;
98	BView *headerView;
99
100	PurgeRows();
101	PurgeColumns();
102	PurgeHeader();
103	BuildHeader();
104
105	listView = GetAssociatedList();
106	headerView = GetAssociatedHeader();
107
108	listView->AddColumn(new CLVColumn(NULL, 20.0, CLV_LOCK_AT_BEGINNING | CLV_NOT_MOVABLE |
109		CLV_NOT_RESIZABLE | CLV_PUSH_PASS | CLV_MERGE_WITH_RIGHT));
110	listView->AddColumn(new CLVColumn("Server", 100.0, CLV_SORT_KEYABLE, 50.0));
111
112	globalHeaderView = headerView;
113	globalListView = listView;
114	GetServerList(recvServerName);
115}
116
117void ServersItem::ListItemSelected()
118{
119	btnEdit->SetEnabled(true);
120}
121
122void ServersItem::ListItemDeselected()
123{
124	btnEdit->SetEnabled(false);
125}
126
127void ServersItem::ListItemUpdated(int index, ListItem *item)
128{
129	ColumnListView *list = GetAssociatedList();
130
131//	getGroupDesc((char *) item->GetColumnContentText(1), desc, sizeof(desc));
132
133	list->LockLooper();
134//	item->SetColumnContent(2, desc);
135	list->InvalidateItem(index);
136	list->UnlockLooper();
137}
138
139void ServersItem::BuildHeader()
140{
141	BRect r;
142	BView *headerView = GetAssociatedHeader();
143	if (headerView)
144	{
145		r.Set(10, 55, 90, 75);
146		btnEdit = new BButton(r, "EditServerBtn", "Properties", new BMessage(MSG_SERVER_EDIT));
147		btnEdit->SetEnabled(false);
148		headerView->AddChild(btnEdit);
149	}
150}
151
152bool ServersItem::HeaderMessageReceived(BMessage *msg)
153{
154	BRect r;
155	BRect frame = GetAssociatedHeader()->Window()->Frame();
156	r.Set(frame.left + 150, frame.top + 25, frame.left + 520, frame.top + 375);
157
158	SmartColumnListView *listView = (SmartColumnListView *) GetAssociatedList();
159	ServerItem *item = NULL;
160	int index = listView->CurrentSelection();
161	if (index >= 0)
162		item = (ServerItem *) listView->ItemAt(index);
163
164	switch (msg->what)
165	{
166		case MSG_SERVER_EDIT:
167			if (item)
168				if (item->ItemInvoked())
169					ListItemUpdated(index, item);
170			break;
171
172		default:
173			return false;
174	}
175
176	return false;
177}
178
179
180void recvServerName(char *name, uint32 addr)
181{
182	if (globalListView)
183	{
184		globalListView->LockLooper();
185		globalListView->AddItem(new ServerItem(globalHeaderView, globalListView, name));
186		globalListView->UnlockLooper();
187	}
188}
189