1#include <Application.h> 2#include <Resources.h> 3#include <Window.h> 4#include <Region.h> 5#include <Alert.h> 6#include <Button.h> 7#include "Mime.h" 8#include "FindDirectory.h" 9 10#include <string.h> 11#include <dirent.h> 12#include <stdlib.h> 13#include <stdio.h> 14 15#include "ColumnListView.h" 16#include "CLVColumn.h" 17#include "CLVListItem.h" 18#include "CLVEasyItem.h" 19#include "NewStrings.h" 20 21#include "ConsoleHeaderView.h" 22#include "UserProperties.h" 23#include "TreeControl.h" 24#include "ListControl.h" 25#include "Users.h" 26#include "Groups.h" 27#include "Servers.h" 28#include "Icons.h" 29 30const int32 MSG_ITEM_SELECT = 'ISel'; 31const int32 MSG_ITEM_INVOKE = 'IInv'; 32const int32 MSG_LIST_DESELECT = 'CLV0'; 33 34 35// ----- GenericWindow -------------------------------------------- 36 37class GenericWindow : public BWindow 38{ 39 public: 40 GenericWindow() : 41 BWindow(BRect(40, 40, 630, 430), "Domain Management Console", B_DOCUMENT_WINDOW, 0) 42 { 43 BRect r = Bounds(); 44 r.bottom = 82; 45 headerView = new ConsoleHeaderView(r); 46 AddChild(headerView); 47 48 r = Bounds(); 49 r.top = 85; 50 r.right = 160; 51 // r.bottom -= B_H_SCROLL_BAR_HEIGHT; 52 53 CLVContainerView *treeContView, *listContView; 54 55 treeView = new SmartTreeListView(r, &treeContView, NULL, B_FOLLOW_LEFT | B_FOLLOW_TOP_BOTTOM, 56 B_WILL_DRAW | B_FRAME_EVENTS | B_NAVIGABLE, B_SINGLE_SELECTION_LIST, 57 true, true, true, false, B_FANCY_BORDER); 58 treeView->AddColumn(new CLVColumn(NULL, 20.0, CLV_EXPANDER | CLV_LOCK_AT_BEGINNING | CLV_NOT_MOVABLE, 20.0)); 59 treeView->AddColumn(new CLVColumn(NULL, 16.0, CLV_LOCK_AT_BEGINNING | CLV_NOT_MOVABLE | 60 CLV_NOT_RESIZABLE | CLV_PUSH_PASS | CLV_MERGE_WITH_RIGHT, 16.0)); 61 treeView->AddColumn(new CLVColumn("Snap-ins", 125.0, CLV_SORT_KEYABLE, 50.0)); 62 treeView->SetSortFunction(TreeItem::MyCompare); 63 64 r = Bounds(); 65 r.top = 85; 66 r.left = 165 + B_V_SCROLL_BAR_WIDTH; 67 r.right -= B_V_SCROLL_BAR_WIDTH; 68 69 listView = new SmartColumnListView(r, &listContView, NULL, B_FOLLOW_ALL_SIDES, 70 B_WILL_DRAW | B_FRAME_EVENTS | B_NAVIGABLE, B_SINGLE_SELECTION_LIST, 71 false, true, true, false, B_FANCY_BORDER); 72 73 listView->SetSelectionMessage(new BMessage(MSG_ITEM_SELECT)); 74 listView->SetInvocationMessage(new BMessage(MSG_ITEM_INVOKE)); 75 76 AddTreeItems(treeView); 77 AddChild(treeContView); 78 AddChild(listContView); 79 80 SetSizeLimits(300, 2000, 150, 2000); 81 Show(); 82 } 83 84 ~GenericWindow() 85 { 86 be_app->PostMessage(B_QUIT_REQUESTED); 87 } 88 89 // MessageReceived() 90 // 91 void MessageReceived(BMessage *msg) 92 { 93 TreeItem *treeItem = NULL; 94 ListItem *listItem = NULL; 95 int32 curTreeItem = treeView->CurrentSelection(); 96 int32 curListItem = listView->CurrentSelection(); 97 98 if (curTreeItem >= 0) 99 treeItem = (TreeItem *) treeView->ItemAt(curTreeItem); 100 101 if (curListItem >= 0) 102 listItem = (ListItem *) listView->ItemAt(curListItem); 103 104 switch (msg->what) 105 { 106 case MSG_ITEM_INVOKE: 107 if (listItem) 108 if (listItem->ItemInvoked()) 109 if (treeItem) 110 treeItem->ListItemUpdated(curListItem, listItem); 111 break; 112 113 case MSG_ITEM_SELECT: 114 if (treeItem) 115 treeItem->ListItemSelected(); 116 if (listItem) 117 listItem->ItemSelected(); 118 break; 119 120 case MSG_LIST_DESELECT: 121 if (treeItem) 122 treeItem->ListItemDeselected(); 123 if (listItem) 124 listItem->ItemDeselected(); 125 break; 126 127 // If we get here, this may be a message we don't handle, or it may be one 128 // that comes from the header view and needs to be processed by the associated 129 // tree node. 130 default: 131 if (treeItem) 132 if (treeItem->HeaderMessageReceived(msg)) 133 break; 134 135 BWindow::MessageReceived(msg); 136 break; 137 } 138 } 139 140 void Quit() 141 { 142 TreeItem *item; 143 144 do 145 { 146 item = (TreeItem *) treeView->RemoveItem(int32(0)); 147 if (item) 148 delete item; 149 } while(item); 150 151 BWindow::Quit(); 152 } 153 154 private: 155 void AddTreeItems(ColumnListView* treeView) 156 { 157 treeView->AddItem(new TreeItem(0, true, true, ICON_NETADMIN_SMALL, headerView, listView, "Network Administration")); 158 treeView->AddItem(new TreeItem(1, true, true, ICON_DOMAIN_SMALL, headerView, listView, "Domains")); 159 treeView->AddItem(new TreeItem(2, true, true, ICON_DOMAIN_SMALL, headerView, listView, "default")); 160 treeView->AddItem(new GroupsItem(3, false, false, ICON_GROUP_SMALL, headerView, listView, "Groups")); 161 treeView->AddItem(new ServersItem(3, false, false, ICON_HOST_SMALL, headerView, listView, "Servers")); 162 treeView->AddItem(new UsersItem(3, false, false, ICON_USER_SMALL, headerView, listView, "Users")); 163 treeView->AddItem(new TreeItem(1, false, false, ICON_SERVICES_SMALL, headerView, listView, "Services")); 164 } 165 166 ConsoleHeaderView *headerView; 167 SmartTreeListView *treeView; 168 SmartColumnListView *listView; 169}; 170 171 172// ----- GenericApp --------------------------------------------------- 173 174class GenericApp : public BApplication 175{ 176 public: 177 GenericApp() : BApplication("application/x-vnd.Teldar-DomainManager") 178 { 179 checkMimeTypes(); 180 new GenericWindow; 181 } 182 183 ~GenericApp() 184 { 185 } 186 187 private: 188 void checkMimeTypes() 189 { 190 BMimeType mime; 191 mime.SetTo("application/x-vnd.BeServed-DomainManager"); 192 if (!mime.IsInstalled()) 193 { 194 mime.Install(); 195 mime.SetShortDescription("DomainManager"); 196 mime.SetLongDescription("BeServed Domain Management Console 1.2.6"); 197 setMimeIcon(&mime, ICON_BMC_LARGE, B_LARGE_ICON); 198 setMimeIcon(&mime, ICON_BMC_SMALL, B_MINI_ICON); 199 } 200 201 mime.SetTo("application/x-vnd.Teldar-User"); 202 if (!mime.IsInstalled()) 203 { 204 mime.Install(); 205 mime.SetShortDescription("User"); 206 mime.SetLongDescription("BeSure User Account"); 207 setMimeIcon(&mime, ICON_USER_LARGE, B_LARGE_ICON); 208 setMimeIcon(&mime, ICON_USER_SMALL, B_MINI_ICON); 209 } 210 211 mime.SetTo("application/x-vnd.Teldar-Group"); 212 if (!mime.IsInstalled()) 213 { 214 mime.Install(); 215 mime.SetShortDescription("User Group"); 216 mime.SetLongDescription("BeSure Group Account"); 217 setMimeIcon(&mime, ICON_GROUP_LARGE, B_LARGE_ICON); 218 setMimeIcon(&mime, ICON_GROUP_SMALL, B_MINI_ICON); 219 } 220 } 221 222 bool setMimeIcon(BMimeType *mime, int32 resourceID, icon_size which) 223 { 224 BMessage archive; 225 size_t size; 226 char *bits = (char *) be_app->AppResources()->LoadResource(type_code('BBMP'), resourceID, &size); 227 if (bits) 228 if (archive.Unflatten(bits) == B_OK) 229 { 230 BBitmap *icon = new BBitmap(&archive); 231 mime->SetIcon(icon, which); 232 return true; 233 } 234 235 return false; 236 } 237}; 238 239#include "besure_auth.h" 240 241int main() 242{ 243 new GenericApp; 244 be_app->Run(); 245 delete be_app; 246} 247