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