2 * Copyright 2015 Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
6 * Axel Dörfler, <axeld@pinc-software.de>
10 #include "ServiceView.h"
14 #include <LayoutBuilder.h>
15 #include <MessageRunner.h>
16 #include <StringView.h>
20 static const uint32 kMsgToggleService
= 'tgls';
21 static const uint32 kMsgEnableToggleButton
= 'entg';
23 static const bigtime_t kDisableDuration
= 500000;
26 #undef B_TRANSLATION_CONTEXT
27 #define B_TRANSLATION_CONTEXT "ServiceView"
30 ServiceView::ServiceView(const char* name
, const char* executable
,
31 const char* title
, const char* description
, BNetworkSettings
& settings
)
35 fExecutable(executable
),
38 BStringView
* titleView
= new BStringView("service", title
);
39 titleView
->SetFont(be_bold_font
);
40 titleView
->SetExplicitMaxSize(BSize(B_SIZE_UNLIMITED
, B_SIZE_UNSET
));
42 BTextView
* descriptionView
= new BTextView("description");
43 descriptionView
->SetText(description
);
44 descriptionView
->SetViewUIColor(B_PANEL_BACKGROUND_COLOR
);
45 descriptionView
->MakeEditable(false);
47 fEnableButton
= new BButton("toggler", B_TRANSLATE("Enable"),
48 new BMessage(kMsgToggleService
));
50 BLayoutBuilder::Group
<>(this, B_VERTICAL
)
54 .AddGroup(B_HORIZONTAL
)
58 SetExplicitMinSize(BSize(200, B_SIZE_UNSET
));
59 _UpdateEnableButton();
61 fWasEnabled
= IsEnabled();
65 ServiceView::~ServiceView()
71 ServiceView::IsRevertable() const
73 return IsEnabled() != fWasEnabled
;
88 ServiceView::SettingsUpdated(uint32 which
)
90 if (which
== BNetworkSettings::kMsgServiceSettingsUpdated
)
91 _UpdateEnableButton();
96 ServiceView::AttachedToWindow()
98 fEnableButton
->SetTarget(this);
103 ServiceView::MessageReceived(BMessage
* message
)
105 switch (message
->what
) {
106 case kMsgToggleService
:
110 case kMsgEnableToggleButton
:
111 fEnableButton
->SetEnabled(true);
112 _UpdateEnableButton();
116 BView::MessageReceived(message
);
123 ServiceView::IsEnabled() const
125 return fSettings
.Service(fName
).IsRunning();
130 ServiceView::Enable()
132 BNetworkServiceSettings settings
;
133 settings
.SetName(fName
);
134 settings
.AddArgument(fExecutable
);
137 if (settings
.GetMessage(service
) == B_OK
)
138 fSettings
.AddService(service
);
143 ServiceView::Disable()
145 fSettings
.RemoveService(fName
);
150 ServiceView::_Toggle()
157 fEnableButton
->SetEnabled(false);
158 BMessage
reenable(kMsgEnableToggleButton
);
159 BMessageRunner::StartSending(this, &reenable
, kDisableDuration
, 1);
164 ServiceView::_UpdateEnableButton()
166 fEnableButton
->SetLabel(IsEnabled()
167 ? B_TRANSLATE("Disable") : B_TRANSLATE("Enable"));