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 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 57 HostnameView::~HostnameView() 58 { 59 } 60 61 status_t 62 HostnameView::Revert() 63 { 64 return B_OK; 65 } 66 67 bool 68 HostnameView::IsRevertable() const 69 { 70 return false; 71 } 72 73 74 void 75 HostnameView::AttachedToWindow() 76 { 77 fApplyButton->SetTarget(this); 78 } 79 80 81 void 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 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 } else 110 111 return B_ERROR; 112 } 113 114 115 status_t 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