diff --git a/src/tests/kits/net/preflet/InterfacesAddOn/InterfaceAddressView.cpp b/src/tests/kits/net/preflet/InterfacesAddOn/InterfaceAddressView.cpp index 45d5a40771..90841276bb 100644 --- a/src/tests/kits/net/preflet/InterfacesAddOn/InterfaceAddressView.cpp +++ b/src/tests/kits/net/preflet/InterfacesAddOn/InterfaceAddressView.cpp @@ -31,20 +31,24 @@ InterfaceAddressView::InterfaceAddressView(BRect frame, const char* name, NULL, NULL, B_FOLLOW_LEFT | B_FOLLOW_TOP, B_WILL_DRAW); fNetmaskField = new BTextControl(frame, "netmask", "Netmask:", NULL, NULL, B_FOLLOW_LEFT | B_FOLLOW_TOP, B_WILL_DRAW); + fGatewayField = new BTextControl(frame, "gateway", "Gateway:", + NULL, NULL, B_FOLLOW_LEFT | B_FOLLOW_TOP, B_WILL_DRAW); fAddressField->GetPreferredSize(&textControlW, &textControlH); float labelSize = ( textControlW + 50 ) - fAddressField->StringWidth("XXX.XXX.XXX.XXX"); - _RevertFields(); + RevertFields(); // Do the initial field population fAddressField->SetDivider(labelSize); fNetmaskField->SetDivider(labelSize); + fGatewayField->SetDivider(labelSize); AddChild(BGroupLayoutBuilder(B_VERTICAL, 10) .Add(fAddressField) .Add(fNetmaskField) + .Add(fGatewayField) .AddGlue() .SetInsets(10, 10, 10, 10) ); @@ -58,11 +62,12 @@ InterfaceAddressView::~InterfaceAddressView() status_t -InterfaceAddressView::_RevertFields() +InterfaceAddressView::RevertFields() { // Populate address fields with current settings fAddressField->SetText(fSettings->IP(fFamily)); fNetmaskField->SetText(fSettings->Netmask(fFamily)); + fNetmaskField->SetText(fSettings->Gateway(fFamily)); return B_OK; } diff --git a/src/tests/kits/net/preflet/InterfacesAddOn/InterfaceAddressView.h b/src/tests/kits/net/preflet/InterfacesAddOn/InterfaceAddressView.h index d115ea12b4..a7fde1bfea 100644 --- a/src/tests/kits/net/preflet/InterfacesAddOn/InterfaceAddressView.h +++ b/src/tests/kits/net/preflet/InterfacesAddOn/InterfaceAddressView.h @@ -22,9 +22,9 @@ public: const char* name, int family, NetworkSettings* settings); virtual ~InterfaceAddressView(); + status_t RevertFields(); private: - status_t _RevertFields(); NetworkSettings* fSettings; int fFamily; diff --git a/src/tests/kits/net/preflet/InterfacesAddOn/InterfaceWindow.cpp b/src/tests/kits/net/preflet/InterfacesAddOn/InterfaceWindow.cpp index 6c51fd5fd3..f75ee83be9 100644 --- a/src/tests/kits/net/preflet/InterfacesAddOn/InterfaceWindow.cpp +++ b/src/tests/kits/net/preflet/InterfacesAddOn/InterfaceWindow.cpp @@ -8,7 +8,6 @@ #include "InterfaceWindow.h" -#include "InterfaceAddressView.h" #include @@ -17,7 +16,8 @@ InterfaceWindow::InterfaceWindow(NetworkSettings* settings) - : BWindow(BRect(50, 50, 370, 350), "Interface Settings", + : + BWindow(BRect(50, 50, 370, 350), "Interface Settings", B_TITLED_WINDOW_LOOK, B_MODAL_APP_WINDOW_FEEL, B_NOT_RESIZABLE | B_ASYNCHRONOUS_CONTROLS | B_NOT_ZOOMABLE, B_CURRENT_WORKSPACE) @@ -29,8 +29,8 @@ InterfaceWindow::InterfaceWindow(NetworkSettings* settings) fApplyButton = new BButton("apply", B_TRANSLATE("Apply"), new BMessage(APPLY_MSG)); - fCancelButton = new BButton("cancel", B_TRANSLATE("Cancel"), - new BMessage(CANCEL_MSG)); + fRevertButton = new BButton("revert", B_TRANSLATE("Revert"), + new BMessage(REVERT_MSG)); fTabView->SetResizingMode(B_FOLLOW_ALL); // ensure tab container matches window size @@ -43,7 +43,7 @@ InterfaceWindow::InterfaceWindow(NetworkSettings* settings) .Add(fTabView) .AddGroup(B_HORIZONTAL, 5) .AddGlue() - .Add(fCancelButton) + .Add(fRevertButton) .Add(fApplyButton) .End() .SetInsets(10, 10, 10, 10) @@ -60,6 +60,12 @@ void InterfaceWindow::MessageReceived(BMessage* message) { switch (message->what) { + case REVERT_MSG: + // RFC : we could check fTabView for Selection + // here and only revert the selected tab. + fIPv4TabView->RevertFields(); + fIPv6TabView->RevertFields(); + break; default: BWindow::MessageReceived(message); } @@ -71,18 +77,18 @@ status_t InterfaceWindow::_PopulateTabs() { BRect frame = fTabView->Bounds(); - BView* view4 = new InterfaceAddressView(frame, "net_settings_ipv4", + fIPv4TabView = new InterfaceAddressView(frame, "net_settings_ipv4", AF_INET, fNetworkSettings); - BView* view6 = new InterfaceAddressView(frame, "net_settings_ipv6", + fIPv6TabView = new InterfaceAddressView(frame, "net_settings_ipv6", AF_INET6, fNetworkSettings); BTab* tab4 = new BTab; BTab* tab6 = new BTab; - fTabView->AddTab(view4, tab4); + fTabView->AddTab(fIPv4TabView, tab4); tab4->SetLabel("IPv4"); - fTabView->AddTab(view6, tab6); + fTabView->AddTab(fIPv6TabView, tab6); tab6->SetLabel("IPv6"); return B_OK; diff --git a/src/tests/kits/net/preflet/InterfacesAddOn/InterfaceWindow.h b/src/tests/kits/net/preflet/InterfacesAddOn/InterfaceWindow.h index 82ee5682de..f5710665e8 100644 --- a/src/tests/kits/net/preflet/InterfacesAddOn/InterfaceWindow.h +++ b/src/tests/kits/net/preflet/InterfacesAddOn/InterfaceWindow.h @@ -11,6 +11,7 @@ #define INTERFACE_WINDOW_H #include "NetworkSettings.h" +#include "InterfaceAddressView.h" #include #include @@ -22,7 +23,7 @@ enum { APPLY_MSG = 'aply', - CANCEL_MSG = 'cncl' + REVERT_MSG = 'rvrt' }; @@ -38,8 +39,11 @@ private: NetworkSettings* fNetworkSettings; BButton* fApplyButton; - BButton* fCancelButton; + BButton* fRevertButton; BTabView* fTabView; + + InterfaceAddressView* fIPv4TabView; + InterfaceAddressView* fIPv6TabView; }; diff --git a/src/tests/kits/net/preflet/InterfacesAddOn/NetworkSettings.cpp b/src/tests/kits/net/preflet/InterfacesAddOn/NetworkSettings.cpp index 417a3d694d..ab60c9a3f5 100644 --- a/src/tests/kits/net/preflet/InterfacesAddOn/NetworkSettings.cpp +++ b/src/tests/kits/net/preflet/InterfacesAddOn/NetworkSettings.cpp @@ -109,7 +109,7 @@ NetworkSettings::ReadConfiguration() if ((route.flags & RTF_GATEWAY) != 0) { sockaddr_in* inetAddress = (sockaddr_in*)route.gateway; - fGateway = inet_ntoa(inetAddress->sin_addr); + fIPv4Gateway = inet_ntoa(inetAddress->sin_addr); } int32 addressSize = 0; @@ -235,6 +235,16 @@ NetworkSettings::Netmask(int family) } +const char* +NetworkSettings::Gateway(int family) +{ + if (family == AF_INET6) + return fIPv6Gateway.ToString(); + + return fIPv4Gateway.ToString(); +} + + int32 NetworkSettings::PrefixLen(int family) { diff --git a/src/tests/kits/net/preflet/InterfacesAddOn/NetworkSettings.h b/src/tests/kits/net/preflet/InterfacesAddOn/NetworkSettings.h index 7d731594ae..6a02149ced 100644 --- a/src/tests/kits/net/preflet/InterfacesAddOn/NetworkSettings.h +++ b/src/tests/kits/net/preflet/InterfacesAddOn/NetworkSettings.h @@ -41,9 +41,9 @@ public: const char* IP(int family); const char* Netmask(int family); + const char* Gateway(int family); int32 PrefixLen(int family); - const char* Gateway() { return fGateway.String(); } const char* Name() { return fName.String(); } const char* Domain() { return fDomain.String(); } bool AutoConfigure() { return fIPv4Auto; } @@ -60,15 +60,18 @@ private: BNetworkInterface fNetworkInterface; + // IPv4 address configuration bool fIPv4Auto; - bool fIPv6Auto; - BNetworkAddress fIPv4Addr; BNetworkAddress fIPv4Mask; + BNetworkAddress fIPv4Gateway; + + // IPv6 address configuration + bool fIPv6Auto; BNetworkAddress fIPv6Addr; BNetworkAddress fIPv6Mask; + BNetworkAddress fIPv6Gateway; - BString fGateway; BString fName; BString fDomain; bool fDisabled;