From 55c8f8c370abee9be6db6cd1067188084bfca2d6 Mon Sep 17 00:00:00 2001 From: Waldemar Kornewald Date: Fri, 26 Mar 2004 11:57:50 +0000 Subject: [PATCH] Fixed protocol handling. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@7068 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../kits/net/DialUpPreflet/DialUpView.cpp | 5 ++ src/tests/kits/net/DialUpPreflet/Jamfile | 2 + .../kits/net/DialUpPreflet/PPPoEAddon.cpp | 2 +- .../kits/net/DialUpPreflet/ProtocolsAddon.cpp | 56 +++++++++---------- .../kits/net/DialUpPreflet/ProtocolsAddon.h | 4 +- 5 files changed, 37 insertions(+), 32 deletions(-) diff --git a/src/tests/kits/net/DialUpPreflet/DialUpView.cpp b/src/tests/kits/net/DialUpPreflet/DialUpView.cpp index 7303a65315..f0cfcd2175 100644 --- a/src/tests/kits/net/DialUpPreflet/DialUpView.cpp +++ b/src/tests/kits/net/DialUpPreflet/DialUpView.cpp @@ -13,6 +13,7 @@ // built-in add-ons #include "GeneralAddon.h" +#include "IPCPAddon.h" #include "PPPoEAddon.h" #include "ProtocolsAddon.h" @@ -602,6 +603,10 @@ DialUpView::LoadAddons() GeneralAddon *generalAddon = new GeneralAddon(&fAddons); fAddons.AddPointer(DUN_TAB_ADDON_TYPE, generalAddon); fAddons.AddPointer(DUN_DELETE_ON_QUIT, generalAddon); + // "IPCP" protocol + IPCPAddon *ipcpAddon = new IPCPAddon(&fAddons); + fAddons.AddPointer(DUN_PROTOCOL_ADDON_TYPE, ipcpAddon); + fAddons.AddPointer(DUN_DELETE_ON_QUIT, ipcpAddon); // "PPPoE" device PPPoEAddon *pppoeAddon = new PPPoEAddon(&fAddons); fAddons.AddPointer(DUN_DEVICE_ADDON_TYPE, pppoeAddon); diff --git a/src/tests/kits/net/DialUpPreflet/Jamfile b/src/tests/kits/net/DialUpPreflet/Jamfile index fecd5b9e65..098a534be5 100644 --- a/src/tests/kits/net/DialUpPreflet/Jamfile +++ b/src/tests/kits/net/DialUpPreflet/Jamfile @@ -6,6 +6,7 @@ UseHeaders [ FDirName $(OBOS_TOP) src add-ons kernel network ppp shared libkerne # additonal headers for built-in add-ons: UseHeaders [ FDirName $(OBOS_TOP) src add-ons kernel network ppp pppoe ] ; # PPPoE +UseHeaders [ FDirName $(OBOS_TOP) src add-ons kernel network ppp ipcp ] ; # IPCP SimpleTest DialUpPreflet : DialUpApplication.cpp @@ -17,6 +18,7 @@ SimpleTest DialUpPreflet : # built-in add-ons GeneralAddon.cpp + IPCPAddon.cpp PPPoEAddon.cpp ProtocolsAddon.cpp ; diff --git a/src/tests/kits/net/DialUpPreflet/PPPoEAddon.cpp b/src/tests/kits/net/DialUpPreflet/PPPoEAddon.cpp index 8f8d3d77f5..562c04e66c 100644 --- a/src/tests/kits/net/DialUpPreflet/PPPoEAddon.cpp +++ b/src/tests/kits/net/DialUpPreflet/PPPoEAddon.cpp @@ -143,7 +143,7 @@ PPPoEAddon::IsModified(bool& settings, bool& profile) const return; } - settings = profile = false; + profile = false; settings = (fInterfaceName != fPPPoEView->InterfaceName() || fACName != fPPPoEView->ACName() || fServiceName != fPPPoEView->ServiceName()); diff --git a/src/tests/kits/net/DialUpPreflet/ProtocolsAddon.cpp b/src/tests/kits/net/DialUpPreflet/ProtocolsAddon.cpp index 134e790880..a5057da08c 100644 --- a/src/tests/kits/net/DialUpPreflet/ProtocolsAddon.cpp +++ b/src/tests/kits/net/DialUpPreflet/ProtocolsAddon.cpp @@ -82,15 +82,9 @@ ProtocolsAddon::LoadSettings(BMessage *settings, BMessage *profile, bool isNew) bool ProtocolsAddon::LoadProtocolSettings(const BMessage& parameter) { - // TODO: Maybe we should only load the first add-on because we cannot know - // whether the settings are acceptable for all listed protocols. - // In addition to this, maybe the protocol itself chose this format because - // it consists of two modules. - - // get protocols and ask them to load their settings + // get protocol and ask it to load its settings BString name; - for(int32 index = 0; parameter.FindString(MDSU_VALUES, index, &name) == B_OK; - index++) { + if(parameter.FindString(MDSU_VALUES, &name) == B_OK) { DialUpAddon *protocol; if(!GetProtocol(name, &protocol)) return false; @@ -326,20 +320,20 @@ ProtocolsView::MessageReceived(BMessage *message) switch(message->what) { case MSG_ADD_PROTOCOL: { BMenuItem *selected = fProtocolsMenu->Go(fAddButton->ConvertToScreen( - fAddButton->Bounds().RightTop())); - - RegisterProtocol(fProtocolsMenu->IndexOf(selected)); + fAddButton->Bounds().RightTop()), false, true); + int32 index = RegisterProtocol(fProtocolsMenu->IndexOf(selected)); UpdateButtons(); + + if(index > 0) + fListView->Select(index); } break; case MSG_REMOVE_PROTOCOL: { - AddonItem *selected = dynamic_cast( - fListView->RemoveItem(fListView->CurrentSelection())); - - UnregisterProtocol(fListView->IndexOf(selected)); - + UnregisterProtocol(fListView->CurrentSelection()); UpdateButtons(); + + fListView->Select(0); } break; case MSG_SHOW_PREFERENCES: { @@ -388,33 +382,33 @@ ProtocolsView::HasProtocol(const BString& moduleName) const } -void +int32 ProtocolsView::RegisterProtocol(const DialUpAddon *protocol) { if(!protocol) - return; + return -1; DialUpAddon *addon; BMenuItem *item; for(int32 index = 0; index < fProtocolsMenu->CountItems(); index++) { item = fProtocolsMenu->ItemAt(index); if(item && item->Message()->FindPointer("Addon", - reinterpret_cast(addon)) == B_OK && addon == protocol) { - RegisterProtocol(index); - return; - } + reinterpret_cast(&addon)) == B_OK && addon == protocol) + return RegisterProtocol(index); } + + return -1; } -void +int32 ProtocolsView::RegisterProtocol(int32 index) { DialUpAddon *addon; BMenuItem *remove = fProtocolsMenu->ItemAt(index); if(!remove || remove->Message()->FindPointer("Addon", - reinterpret_cast(addon)) != B_OK) - return; + reinterpret_cast(&addon)) != B_OK) + return -1; const char *label = remove->Label(); AddonItem *item = new AddonItem(label, addon); @@ -423,13 +417,16 @@ ProtocolsView::RegisterProtocol(int32 index) fListView->AddItem(item, index); fProtocolsMenu->RemoveItem(remove); delete remove; + + addon->LoadSettings(Addon()->Settings(), Addon()->Profile(), true); + return index; } void ProtocolsView::UnregisterProtocol(int32 index) { - AddonItem *remove = dynamic_cast(fListView->ItemAt(index)); + AddonItem *remove = dynamic_cast(fListView->RemoveItem(index)); if(!remove) return; @@ -448,18 +445,19 @@ ProtocolsView::UnregisterProtocol(int32 index) void ProtocolsView::UpdateButtons() { + AddonItem *item = dynamic_cast(fListView->ItemAt( + fListView->CurrentSelection())); + if(fProtocolsMenu->CountItems() == 0) fAddButton->SetEnabled(false); else fAddButton->SetEnabled(true); - if(CountProtocols() == 0) + if(!item) fRemoveButton->SetEnabled(false); else fRemoveButton->SetEnabled(true); - AddonItem *item = dynamic_cast(fListView->ItemAt( - fListView->CurrentSelection())); float width, height; if(!item || !item->Addon()->GetPreferredSize(&width, &height)) fPreferencesButton->SetEnabled(false); diff --git a/src/tests/kits/net/DialUpPreflet/ProtocolsAddon.h b/src/tests/kits/net/DialUpPreflet/ProtocolsAddon.h index 650a69fd65..9538f94e1e 100644 --- a/src/tests/kits/net/DialUpPreflet/ProtocolsAddon.h +++ b/src/tests/kits/net/DialUpPreflet/ProtocolsAddon.h @@ -80,8 +80,8 @@ class ProtocolsView : public BView { bool HasProtocol(const BString& moduleName) const; private: - void RegisterProtocol(const DialUpAddon *protocol); - void RegisterProtocol(int32 index); + int32 RegisterProtocol(const DialUpAddon *protocol); + int32 RegisterProtocol(int32 index); // moves the protocol from the pop-up menu to the list view void UnregisterProtocol(int32 index); // moves the protocol from the list view to the pop-up menu