1 /*
2 * Copyright 2019 Haiku Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 * Adrien Destugues, pulkomandy@pulkomandy.tk
7 * Rob Gill, <rrobgill@protonmail.com>
8 */
9
10
11 #include "HostnameView.h"
12
13 #include <stdio.h>
14 #include <string.h>
15
16 #include <Box.h>
17 #include <Button.h>
18 #include <Catalog.h>
19 #include <ControlLook.h>
20 #include <LayoutBuilder.h>
21 #include <SeparatorView.h>
22 #include <StringView.h>
23
24
25 static const int32 kMsgApply = 'aply';
26
27
28 #undef B_TRANSLATION_CONTEXT
29 #define B_TRANSLATION_CONTEXT "HostnameView"
30
31
HostnameView(BNetworkSettingsItem * item)32 HostnameView::HostnameView(BNetworkSettingsItem* item)
33 :
34 BView("hostname", 0),
35 fItem(item)
36 {
37 BStringView* titleView = new BStringView("title",
38 B_TRANSLATE("Hostname settings"));
39 titleView->SetFont(be_bold_font);
40 titleView->SetExplicitMaxSize(BSize(B_SIZE_UNLIMITED, B_SIZE_UNSET));
41
42 fHostname = new BTextControl(B_TRANSLATE("Hostname:"), "", NULL);
43 fApplyButton = new BButton(B_TRANSLATE("Apply"), new BMessage(kMsgApply));
44
45 BLayoutBuilder::Group<>(this, B_VERTICAL)
46 .Add(titleView)
47 .Add(fHostname)
48 .AddGlue()
49 .AddGroup(B_HORIZONTAL)
50 .AddGlue()
51 .Add(fApplyButton);
52
53 _LoadHostname();
54 }
55
56
~HostnameView()57 HostnameView::~HostnameView()
58 {
59 }
60
61 status_t
Revert()62 HostnameView::Revert()
63 {
64 return B_OK;
65 }
66
67 bool
IsRevertable() const68 HostnameView::IsRevertable() const
69 {
70 return false;
71 }
72
73
74 void
AttachedToWindow()75 HostnameView::AttachedToWindow()
76 {
77 fApplyButton->SetTarget(this);
78 }
79
80
81 void
MessageReceived(BMessage * message)82 HostnameView::MessageReceived(BMessage* message)
83 {
84 switch (message->what) {
85 case kMsgApply:
86 if (_SaveHostname() == B_OK)
87 fItem->NotifySettingsUpdated();
88 break;
89
90 default:
91 BView::MessageReceived(message);
92 break;
93 }
94 }
95
96
97 status_t
_LoadHostname()98 HostnameView::_LoadHostname()
99 {
100 BString fHostnameString;
101 char hostname[MAXHOSTNAMELEN];
102
103 if (gethostname(hostname, MAXHOSTNAMELEN) == 0) {
104
105 fHostnameString.SetTo(hostname, MAXHOSTNAMELEN);
106 fHostname->SetText(fHostnameString);
107
108 return B_OK;
109 }
110
111 return B_ERROR;
112 }
113
114
115 status_t
_SaveHostname()116 HostnameView::_SaveHostname()
117 {
118 BString hostnamestring("");
119
120 size_t hostnamelen(strlen(fHostname->Text()));
121
122 if (hostnamelen == 0)
123 return B_ERROR;
124
125 if (hostnamelen > MAXHOSTNAMELEN) {
126 hostnamestring.Truncate(MAXHOSTNAMELEN);
127 hostnamelen = MAXHOSTNAMELEN;
128 }
129
130 hostnamestring << fHostname->Text();
131
132 if (sethostname(hostnamestring, hostnamelen) == 0)
133 return B_OK;
134
135 return B_ERROR;
136 }
137