Network: made the revert button (somewhat) work.

* DNS add-on does not yet support it, the rest does.
* However, there seems to be some problems with the net_server when
  changing interfaces -- not just with revert.
This commit is contained in:
Axel Dörfler
2015-03-27 13:25:27 +01:00
parent 3d7aaa308c
commit 6a29020593
13 changed files with 67 additions and 46 deletions
@@ -115,6 +115,14 @@ DNSSettingsView::Revert()
}
bool
DNSSettingsView::IsRevertable() const
{
// TODO
return false;
}
void
DNSSettingsView::AttachedToWindow()
{
@@ -27,6 +27,7 @@ public:
~DNSSettingsView();
status_t Revert();
bool IsRevertable() const;
virtual void AttachedToWindow();
virtual void MessageReceived(BMessage* message);
@@ -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;
}
@@ -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;
}
@@ -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;
}
@@ -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;
}
@@ -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;
}
@@ -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);
}
@@ -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;
+25 -1
View File
@@ -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);
}
+1
View File
@@ -55,6 +55,7 @@ private:
void _BroadcastSettingsUpdate(uint32 type);
void _BroadcastConfigurationUpdate(
const BMessage& message);
void _UpdateRevertButton();
bool _IsReplicantInstalled();
void _ShowReplicant(bool show);
+4 -2
View File
@@ -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;
}
+2 -2
View File
@@ -26,8 +26,8 @@ public:
BNetworkSettings& settings);
virtual ~ServiceView();
bool IsRevertable();
void Revert();
bool IsRevertable() const;
status_t Revert();
void SettingsUpdated(uint32 which);