diff --git a/src/add-ons/network_settings/dnsclient/DNSSettingsView.cpp b/src/add-ons/network_settings/dnsclient/DNSSettingsView.cpp index 1d4c1c9cb1..5321eef0ee 100644 --- a/src/add-ons/network_settings/dnsclient/DNSSettingsView.cpp +++ b/src/add-ons/network_settings/dnsclient/DNSSettingsView.cpp @@ -115,6 +115,14 @@ DNSSettingsView::Revert() } +bool +DNSSettingsView::IsRevertable() const +{ + // TODO + return false; +} + + void DNSSettingsView::AttachedToWindow() { diff --git a/src/add-ons/network_settings/dnsclient/DNSSettingsView.h b/src/add-ons/network_settings/dnsclient/DNSSettingsView.h index 31f86d896c..f43a68c984 100644 --- a/src/add-ons/network_settings/dnsclient/DNSSettingsView.h +++ b/src/add-ons/network_settings/dnsclient/DNSSettingsView.h @@ -27,6 +27,7 @@ public: ~DNSSettingsView(); status_t Revert(); + bool IsRevertable() const; virtual void AttachedToWindow(); virtual void MessageReceived(BMessage* message); diff --git a/src/add-ons/network_settings/ftpd/FTPServiceAddOn.cpp b/src/add-ons/network_settings/ftpd/FTPServiceAddOn.cpp index f36508a367..4476e9ef65 100644 --- a/src/add-ons/network_settings/ftpd/FTPServiceAddOn.cpp +++ b/src/add-ons/network_settings/ftpd/FTPServiceAddOn.cpp @@ -109,14 +109,14 @@ FTPServiceItem::View() status_t FTPServiceItem::Revert() { - return B_OK; + return fView != NULL ? fView->Revert() : B_OK; } bool FTPServiceItem::IsRevertable() { - return false; + return fView != NULL ? fView->IsRevertable() : false; } diff --git a/src/add-ons/network_settings/ipv4/IPv4InterfaceAddOn.cpp b/src/add-ons/network_settings/ipv4/IPv4InterfaceAddOn.cpp index 9d263b7391..57ce7d7b6d 100644 --- a/src/add-ons/network_settings/ipv4/IPv4InterfaceAddOn.cpp +++ b/src/add-ons/network_settings/ipv4/IPv4InterfaceAddOn.cpp @@ -100,14 +100,14 @@ IPv4InterfaceItem::View() status_t IPv4InterfaceItem::Revert() { - return B_OK; + return fView != NULL ? fView->Revert() : B_OK; } bool IPv4InterfaceItem::IsRevertable() { - return false; + return fView != NULL ? fView->IsRevertable() : false; } diff --git a/src/add-ons/network_settings/ipv6/IPv6InterfaceAddOn.cpp b/src/add-ons/network_settings/ipv6/IPv6InterfaceAddOn.cpp index 3eb440c2ce..7eec1ca47b 100644 --- a/src/add-ons/network_settings/ipv6/IPv6InterfaceAddOn.cpp +++ b/src/add-ons/network_settings/ipv6/IPv6InterfaceAddOn.cpp @@ -100,14 +100,14 @@ IPv6InterfaceItem::View() status_t IPv6InterfaceItem::Revert() { - return B_OK; + return fView != NULL ? fView->Revert() : B_OK; } bool IPv6InterfaceItem::IsRevertable() { - return false; + return fView != NULL ? fView->IsRevertable() : false; } diff --git a/src/add-ons/network_settings/sshd/SSHServiceAddOn.cpp b/src/add-ons/network_settings/sshd/SSHServiceAddOn.cpp index 661769a013..70885a51cc 100644 --- a/src/add-ons/network_settings/sshd/SSHServiceAddOn.cpp +++ b/src/add-ons/network_settings/sshd/SSHServiceAddOn.cpp @@ -213,14 +213,14 @@ SSHServiceItem::View() status_t SSHServiceItem::Revert() { - return B_OK; + return fView != NULL ? fView->Revert() : B_OK; } bool SSHServiceItem::IsRevertable() { - return false; + return fView != NULL ? fView->IsRevertable() : false; } diff --git a/src/add-ons/network_settings/telnetd/TelnetServiceAddOn.cpp b/src/add-ons/network_settings/telnetd/TelnetServiceAddOn.cpp index 954464648c..f3de11eb71 100644 --- a/src/add-ons/network_settings/telnetd/TelnetServiceAddOn.cpp +++ b/src/add-ons/network_settings/telnetd/TelnetServiceAddOn.cpp @@ -111,14 +111,14 @@ TelnetServiceItem::View() status_t TelnetServiceItem::Revert() { - return B_OK; + return fView != NULL ? fView->Revert() : B_OK; } bool TelnetServiceItem::IsRevertable() { - return false; + return fView != NULL ? fView->IsRevertable() : false; } diff --git a/src/preferences/network/InterfaceAddressView.cpp b/src/preferences/network/InterfaceAddressView.cpp index 0ca4ff3eec..7d6af98e6c 100644 --- a/src/preferences/network/InterfaceAddressView.cpp +++ b/src/preferences/network/InterfaceAddressView.cpp @@ -99,8 +99,7 @@ InterfaceAddressView::InterfaceAddressView(int family, fApplyButton->SetExplicitAlignment( BAlignment(B_ALIGN_RIGHT, B_ALIGN_VERTICAL_UNSET)); - fSettings.GetInterface(interface, fOriginalInterface); - fInterfaceSettings = fOriginalInterface; + fSettings.GetInterface(interface, fOriginalSettings); _UpdateFields(); BLayoutBuilder::Group<>(this) @@ -162,33 +161,17 @@ InterfaceAddressView::MessageReceived(BMessage* message) status_t InterfaceAddressView::Revert() { - // Populate address fields with current settings + return fSettings.AddInterface(fOriginalSettings); +} -// TODO! -/* - int32 mode; - if (fSettings->AutoConfigure(fFamily)) { - mode = kModeAuto; - _EnableFields(false); - } else if (fSettings->IPAddr(fFamily).IsEmpty()) { - mode = kModeDisabled; - _EnableFields(false); - } else { - mode = kModeStatic; - _EnableFields(true); - } - BMenuItem* item = fModePopUpMenu->FindItem(mode); - if (item != NULL) - item->SetMarked(true); +bool +InterfaceAddressView::IsRevertable() const +{ + BMessage settings; + fSettings.GetInterface(fInterface.Name(), settings); - if (!fSettings->IPAddr(fFamily).IsEmpty()) { - fAddressField->SetText(fSettings->IP(fFamily)); - fNetmaskField->SetText(fSettings->Netmask(fFamily)); - fGatewayField->SetText(fSettings->Gateway(fFamily)); - } -*/ - return B_OK; + return !settings.HasSameData(fOriginalSettings); } @@ -225,9 +208,12 @@ InterfaceAddressView::_EnableFields(bool enable) void InterfaceAddressView::_UpdateFields() { - bool autoConfigure = fInterfaceSettings.IsEmpty(); + BMessage interfaceSettings; + fSettings.GetInterface(fInterface.Name(), interfaceSettings); + + bool autoConfigure = interfaceSettings.IsEmpty(); if (!autoConfigure) { - BNetworkInterfaceSettings settings(fInterfaceSettings); + BNetworkInterfaceSettings settings(interfaceSettings); autoConfigure = settings.IsAutoConfigure(fFamily); } diff --git a/src/preferences/network/InterfaceAddressView.h b/src/preferences/network/InterfaceAddressView.h index 408f166da7..7325cf481e 100644 --- a/src/preferences/network/InterfaceAddressView.h +++ b/src/preferences/network/InterfaceAddressView.h @@ -39,7 +39,7 @@ public: virtual void MessageReceived(BMessage* message); status_t Revert(); - status_t Save(); + bool IsRevertable() const; void ConfigurationUpdated(const BMessage& message); @@ -61,8 +61,7 @@ private: BNetworkSettings& fSettings; uint32 fLastMode; - BMessage fOriginalInterface; - BMessage fInterfaceSettings; + BMessage fOriginalSettings; BPopUpMenu* fModePopUpMenu; BMenuField* fModeField; diff --git a/src/preferences/network/NetworkWindow.cpp b/src/preferences/network/NetworkWindow.cpp index 5742e6b0cd..5cc11efd9d 100644 --- a/src/preferences/network/NetworkWindow.cpp +++ b/src/preferences/network/NetworkWindow.cpp @@ -112,7 +112,6 @@ NetworkWindow::NetworkWindow() fRevertButton = new BButton("revert", B_TRANSLATE("Revert"), new BMessage(kMsgRevert)); - // fRevertButton->SetEnabled(false); BMessage* message = new BMessage(kMsgToggleReplicant); BCheckBox* showReplicantCheckBox = new BCheckBox("showReplicantCheckBox", @@ -158,6 +157,7 @@ NetworkWindow::NetworkWindow() _ScanInterfaces(); _ScanAddOns(); + _UpdateRevertButton(); // Set size of the list view from its contents float width; @@ -249,6 +249,11 @@ NetworkWindow::MessageReceived(BMessage* message) _BroadcastSettingsUpdate(message->what); break; + case kMsgSettingsItemUpdated: + // TODO: update list item + _UpdateRevertButton(); + break; + default: inherited::MessageReceived(message); } @@ -518,6 +523,8 @@ NetworkWindow::_BroadcastSettingsUpdate(uint32 type) SettingsMap::const_iterator iterator = fSettingsMap.begin(); for (; iterator != fSettingsMap.end(); iterator++) iterator->second->SettingsUpdated(type); + + _UpdateRevertButton(); } @@ -538,6 +545,23 @@ NetworkWindow::_BroadcastConfigurationUpdate(const BMessage& message) // TODO: improve invalidated region to the one that matters fListView->Invalidate(); + _UpdateRevertButton(); +} + + +void +NetworkWindow::_UpdateRevertButton() +{ + bool enabled = false; + SettingsMap::const_iterator iterator = fSettingsMap.begin(); + for (; iterator != fSettingsMap.end(); iterator++) { + if (iterator->second->IsRevertable()) { + enabled = true; + break; + } + } + + fRevertButton->SetEnabled(enabled); } diff --git a/src/preferences/network/NetworkWindow.h b/src/preferences/network/NetworkWindow.h index c9a6502297..10d49b3c27 100644 --- a/src/preferences/network/NetworkWindow.h +++ b/src/preferences/network/NetworkWindow.h @@ -55,6 +55,7 @@ private: void _BroadcastSettingsUpdate(uint32 type); void _BroadcastConfigurationUpdate( const BMessage& message); + void _UpdateRevertButton(); bool _IsReplicantInstalled(); void _ShowReplicant(bool show); diff --git a/src/preferences/network/ServiceView.cpp b/src/preferences/network/ServiceView.cpp index 0c22f929b4..a0dd9b09a3 100644 --- a/src/preferences/network/ServiceView.cpp +++ b/src/preferences/network/ServiceView.cpp @@ -67,17 +67,19 @@ ServiceView::~ServiceView() bool -ServiceView::IsRevertable() +ServiceView::IsRevertable() const { return IsEnabled() != fWasEnabled; } -void +status_t ServiceView::Revert() { if (IsRevertable()) _Toggle(); + + return B_OK; } diff --git a/src/preferences/network/ServiceView.h b/src/preferences/network/ServiceView.h index d34dcd857a..9ffe81a03d 100644 --- a/src/preferences/network/ServiceView.h +++ b/src/preferences/network/ServiceView.h @@ -26,8 +26,8 @@ public: BNetworkSettings& settings); virtual ~ServiceView(); - bool IsRevertable(); - void Revert(); + bool IsRevertable() const; + status_t Revert(); void SettingsUpdated(uint32 which);