void NetPrefsServerView::MessageReceived (BMessage * msg) { switch (msg->what) { case M_SERVER_ITEM_SELECTED: { BRow *row (fServerList->CurrentSelection ()); if (row) { fEditButton->SetEnabled (true); fRemoveButton->SetEnabled (true); } else { fEditButton->SetEnabled (false); fRemoveButton->SetEnabled (false); } } break; case M_SERVER_ADD_ITEM: { BMessenger msgr (fEntryWin); if (msgr.IsValid ()) fEntryWin->Activate (); else { fEntryWin = new ServerEntryWindow (this, new BMessage (M_SERVER_RECV_DATA), NULL, 0); fEntryWin->Show (); } } break; case M_SERVER_EDIT_ITEM: { BMessenger msgr (fEntryWin); if (msgr.IsValid ()) fEntryWin->Activate (); else { BRow *row (fServerList->CurrentSelection ()); if (!row) break; int32 count (0); ssize_t size (0); type_code type; fActiveNetwork->GetInfo ("server", &type, &count); const ServerData *compData; for (int32 i = 0; i < count; i++) { fActiveNetwork->FindData ("server", B_RAW_TYPE, i, reinterpret_cast < const void **>(&compData), &size); if (!strcmp (compData->serverName, ((BStringField *) row->GetField (1))->String ())) break; } BMessage *invoke (new BMessage (M_SERVER_RECV_DATA)); invoke->AddBool ("edit", true); fEntryWin = new ServerEntryWindow (this, invoke, compData, size); fEntryWin->Show (); } } break; case M_SERVER_REMOVE_ITEM: { RemoveServer (); fNetWin.SendMessage (M_SERVER_DATA_CHANGED); } break; case M_SERVER_RECV_DATA: { const ServerData *data; ssize_t size; Window ()->DisableUpdates (); msg->FindData ("server", B_RAW_TYPE, reinterpret_cast < const void **>(&data), &size); if (msg->HasBool ("edit")) RemoveServer (); UpdateNetworkData (data); AddServer (data); Window ()->EnableUpdates (); fNetWin.SendMessage (M_SERVER_DATA_CHANGED); } break; default: BView::MessageReceived (msg); break; } }
void NetworkPrefsView::MessageReceived (BMessage * msg) { switch (msg->what) { case M_NETWORK_DEFAULTS: if (fActiveNetwork.HasString ("name")) vision_app->SetNetwork (fActiveNetwork.FindString ("name"), &fActiveNetwork); fActiveNetwork = vision_app->GetNetwork ("defaults"); fNetworkMenu->MenuItem ()->SetLabel ("Defaults"); SetupDefaults (fActiveNetwork); fDupeItem->SetEnabled (false); fRemoveItem->SetEnabled (false); break; case M_CHOOSE_NETWORK: { BMenuItem *item (NULL); msg->FindPointer ("source", reinterpret_cast < void **>(&item)); SaveCurrentNetwork (); fActiveNetwork = vision_app->GetNetwork (item->Label ()); fNetworkMenu->MenuItem ()->SetLabel (item->Label ()); UpdatePersonalData (fActiveNetwork); UpdateNetworkData (fActiveNetwork); if (BMessenger (fServerPrefs).IsValid ()) fServerPrefs->SetNetworkData (&fActiveNetwork); fDupeItem->SetEnabled (true); fRemoveItem->SetEnabled (true); } break; case M_ADD_NEW_NETWORK: { if (msg->HasString ("text")) { fNetPrompt = NULL; BString network (msg->FindString ("text")); network.RemoveAll (" "); BMenu *menu (fNetworkMenu->Menu ()); for (int32 i = 0; i < menu->CountItems (); i++) { BMenuItem *item (menu->ItemAt (i)); if (item && network == item->Label ()) { dynamic_cast < BInvoker * >(item)->Invoke (); return; } } BMessage newNet (VIS_NETWORK_DATA); newNet.AddString ("name", network.String ()); vision_app->SetNetwork (network.String (), &newNet); BMenuItem *item (new BMenuItem (network.String (), new BMessage (M_CHOOSE_NETWORK))); menu->AddItem (item, 0); item->SetTarget (this); dynamic_cast < BInvoker * >(item)->Invoke (); } else { BString promptText = B_TRANSLATE("Network Name"); promptText += ": "; fNetPrompt = new PromptWindow (BPoint (Window ()->Frame ().left + Window ()->Frame ().Width () / 2, Window ()->Frame ().top + Window ()->Frame ().Height () / 2), promptText.String(), B_TRANSLATE("Add Network"), NULL, this, new BMessage (M_ADD_NEW_NETWORK), NULL, false); fNetPrompt->Show (); } } break; case M_REMOVE_CURRENT_NETWORK: { const char *name (fActiveNetwork.FindString ("name")); vision_app->RemoveNetwork (name); BMenu *menu (fNetworkMenu->Menu ()); for (int32 i = 0; i < menu->CountItems (); i++) { BMenuItem *item (menu->ItemAt (i)); if (!strcmp (item->Label (), name)) { delete menu->RemoveItem (i); fActiveNetwork.MakeEmpty (); dynamic_cast < BInvoker * >(menu->ItemAt (0))->Invoke (); break; } } } break; case M_DUPE_CURRENT_NETWORK: { if (msg->HasString ("text")) { fDupePrompt = NULL; BString network (msg->FindString ("text")); network.RemoveAll (" "); BMenu *menu (fNetworkMenu->Menu ()); for (int32 i = 0; i < menu->CountItems (); i++) { BMenuItem *item (menu->ItemAt (i)); if (item && network == item->Label ()) { dynamic_cast < BInvoker * >(item)->Invoke (); return; } } BMessage newNet = fActiveNetwork; newNet.ReplaceString ("name", network.String ()); vision_app->SetNetwork (network.String (), &newNet); BMenuItem *item (new BMenuItem (network.String (), new BMessage (M_CHOOSE_NETWORK))); menu->AddItem (item, 0); item->SetTarget (this); dynamic_cast < BInvoker * >(item)->Invoke (); } else { BString promptText = B_TRANSLATE("Network Name"); promptText += ": "; fDupePrompt = new PromptWindow (BPoint (Window ()->Frame ().left + Window ()->Frame ().Width () / 2, Window ()->Frame ().top + Window ()->Frame ().Height () / 2), promptText.String(), B_TRANSLATE("Duplicate Current Network"), NULL, this, new BMessage (M_DUPE_CURRENT_NETWORK), NULL, false); fDupePrompt->Show (); } } break; case M_SERVER_DATA_CHANGED: { UpdateNetworkData (fActiveNetwork); } break; case M_SERVER_DIALOG: { BMessenger msgr (fServerPrefs); if (msgr.IsValid ()) fServerPrefs->Activate (); else { fServerPrefs = new NetPrefServerWindow (this); fServerPrefs->SetNetworkData (&fActiveNetwork); fServerPrefs->Show (); } } break; case M_NET_CHECK_LAG: { bool value = msg->FindInt32 ("be:value"); if (fActiveNetwork.HasBool ("lagCheck")) fActiveNetwork.ReplaceBool ("lagCheck", value); else fActiveNetwork.AddBool ("lagCheck", value); } break; case M_CONNECT_ON_STARTUP: { bool value = msg->FindInt32 ("be:value"); if (fActiveNetwork.HasBool ("connectOnStartup")) fActiveNetwork.ReplaceBool ("connectOnStartup", value); else fActiveNetwork.AddBool ("connectOnStartup", value); } break; case M_USE_NICK_DEFAULTS: { bool value = msg->FindInt32 ("be:value"); if (fActiveNetwork.HasBool ("useDefaults")) fActiveNetwork.ReplaceBool ("useDefaults", value); else fActiveNetwork.AddBool ("useDefaults", value); UpdatePersonalData (fActiveNetwork); } break; case M_NETPREFS_TEXT_INVOKE: { if (fActiveNetwork.HasString("autoexec")) fActiveNetwork.ReplaceString("autoexec", fTextView->Text()); else fActiveNetwork.AddString("autoexec", fTextView->Text()); } break; case M_ADD_NICK: if (msg->HasString ("text")) { fNickPrompt = NULL; BString nick (msg->FindString ("text")); nick.RemoveAll (" "); for (int32 i = 0; i < fListView->CountItems (); i++) { BStringItem *item ((BStringItem *) fListView->ItemAt (i)); if (item && nick == item->Text ()) return; } fActiveNetwork.AddString ("nick", nick.String ()); fListView->AddItem (new BStringItem (nick.String ())); } else { BString promptString = B_TRANSLATE("Nickname"); promptString += ": "; fNickPrompt = new PromptWindow (BPoint (Window ()->Frame ().left + Window ()->Frame ().Width () / 2, Window ()->Frame ().top + Window ()->Frame ().Height () / 2), promptString.String(), B_TRANSLATE("Add Nickname"), NULL, this, new BMessage (M_ADD_NICK), NULL, false); fNickPrompt->Show (); } break; case M_REMOVE_NICK: { int32 current (fListView->CurrentSelection ()); if (current >= 0) { delete fListView->RemoveItem (current); fActiveNetwork.RemoveData ("nick", current); } } break; case M_NICK_UP: { int32 current (fListView->CurrentSelection ()); BString nick1, nick2; nick1 = fActiveNetwork.FindString ("nick", current); nick2 = fActiveNetwork.FindString ("nick", current - 1); fListView->SwapItems (current, current - 1); fActiveNetwork.ReplaceString ("nick", current - 1, nick1.String ()); fActiveNetwork.ReplaceString ("nick", current, nick2.String ()); current = fListView->CurrentSelection (); Window ()->DisableUpdates (); fListView->DeselectAll (); fListView->Select (current); Window ()->EnableUpdates (); } break; case M_NICK_DOWN: { int32 current (fListView->CurrentSelection ()); BString nick1, nick2; nick1 = fActiveNetwork.FindString ("nick", current); nick2 = fActiveNetwork.FindString ("nick", current + 1); fListView->SwapItems (current, current + 1); fActiveNetwork.ReplaceString ("nick", current + 1, nick1.String ()); fActiveNetwork.ReplaceString ("nick", current, nick2.String ()); current = fListView->CurrentSelection (); Window ()->DisableUpdates (); fListView->DeselectAll (); fListView->Select (current); Window ()->EnableUpdates (); } break; case M_NICK_SELECTED: { int32 index (msg->FindInt32 ("index")); if (index >= 0 && !fNickDefaultsBox->Value ()) { fNickUpButton->SetEnabled (index > 0); fNickDnButton->SetEnabled (index != (fListView->CountItems () - 1)); fNickRemoveButton->SetEnabled (true); } else { fNickUpButton->SetEnabled (false); fNickDnButton->SetEnabled (false); fNickRemoveButton->SetEnabled (false); } } break; default: BView::MessageReceived (msg); break; } }