xref: /haiku/src/apps/serialconnect/SerialWindow.cpp (revision e0bf43c16b891e3d41871a8300ba5f0322c525dc)
1dae0a4e0SAdrien Destugues - PulkoMandy /*
2d9e93152SAdrien Destugues  * Copyright 2012-2014, Adrien Destugues, pulkomandy@pulkomandy.tk
3dae0a4e0SAdrien Destugues - PulkoMandy  * Distributed under the terms of the MIT licence.
4dae0a4e0SAdrien Destugues - PulkoMandy  */
5dae0a4e0SAdrien Destugues - PulkoMandy 
6dae0a4e0SAdrien Destugues - PulkoMandy 
7dae0a4e0SAdrien Destugues - PulkoMandy #include "SerialWindow.h"
8dae0a4e0SAdrien Destugues - PulkoMandy 
904434656SAdrien Destugues - PulkoMandy #include <stdio.h>
1004434656SAdrien Destugues - PulkoMandy 
113cfd6956SRene Gollent #include <FilePanel.h>
12dae0a4e0SAdrien Destugues - PulkoMandy #include <GroupLayout.h>
13dae0a4e0SAdrien Destugues - PulkoMandy #include <Menu.h>
14dae0a4e0SAdrien Destugues - PulkoMandy #include <MenuBar.h>
15dae0a4e0SAdrien Destugues - PulkoMandy #include <MenuItem.h>
16b59ed154SAdrien Destugues #include <ScrollView.h>
17dae0a4e0SAdrien Destugues - PulkoMandy #include <SerialPort.h>
18dae0a4e0SAdrien Destugues - PulkoMandy 
19f441fd03SAdrien Destugues - PulkoMandy #include "SerialApp.h"
20dae0a4e0SAdrien Destugues - PulkoMandy #include "TermView.h"
21dae0a4e0SAdrien Destugues - PulkoMandy 
22dae0a4e0SAdrien Destugues - PulkoMandy 
23*e0bf43c1SAlexander von Gluck IV const int SerialWindow::kBaudrates[] = { 50, 75, 110, 134, 150, 200, 300, 600,
24*e0bf43c1SAlexander von Gluck IV 	1200, 1800, 2400, 4800, 9600, 19200, 31250, 38400, 57600, 115200, 230400
25ccc6b9beSAdrien Destugues };
26ccc6b9beSAdrien Destugues 
27ccc6b9beSAdrien Destugues 
28e2367275SAdrien Destugues // The values for these constants are not in the expected order, so we have to
29e2367275SAdrien Destugues // rely on this lookup table if we want to keep the menu items sorted.
30e2367275SAdrien Destugues const int SerialWindow::kBaudrateConstants[] = { B_50_BPS, B_75_BPS, B_110_BPS,
31e2367275SAdrien Destugues 	B_134_BPS, B_150_BPS, B_200_BPS, B_300_BPS, B_600_BPS, B_1200_BPS,
32e2367275SAdrien Destugues 	B_1800_BPS, B_2400_BPS, B_4800_BPS, B_9600_BPS, B_19200_BPS, B_31250_BPS,
33e2367275SAdrien Destugues 	B_38400_BPS, B_57600_BPS, B_115200_BPS, B_230400_BPS
34e2367275SAdrien Destugues };
35e2367275SAdrien Destugues 
36e2367275SAdrien Destugues 
37ccc6b9beSAdrien Destugues const char* SerialWindow::kWindowTitle = "SerialConnect";
38ccc6b9beSAdrien Destugues 
39ccc6b9beSAdrien Destugues 
40dae0a4e0SAdrien Destugues - PulkoMandy SerialWindow::SerialWindow()
41469e6cd2SAdrien Destugues - PulkoMandy 	: BWindow(BRect(100, 100, 400, 400), SerialWindow::kWindowTitle,
42f441fd03SAdrien Destugues - PulkoMandy 		B_DOCUMENT_WINDOW, B_QUIT_ON_WINDOW_CLOSE | B_AUTO_UPDATE_SIZE_LIMITS)
43469e6cd2SAdrien Destugues - PulkoMandy 	, fLogFilePanel(NULL)
44dae0a4e0SAdrien Destugues - PulkoMandy {
45b59ed154SAdrien Destugues 	BMenuBar* menuBar = new BMenuBar(Bounds(), "menuBar");
46b59ed154SAdrien Destugues 	menuBar->ResizeToPreferred();
47dae0a4e0SAdrien Destugues - PulkoMandy 
48b59ed154SAdrien Destugues 	BRect r = Bounds();
49b59ed154SAdrien Destugues 	r.top = menuBar->Bounds().bottom + 1;
50b59ed154SAdrien Destugues 	r.right -= B_V_SCROLL_BAR_WIDTH;
51b59ed154SAdrien Destugues 	fTermView = new TermView(r);
52b59ed154SAdrien Destugues 	fTermView->ResizeToPreferred();
53b59ed154SAdrien Destugues 
54b59ed154SAdrien Destugues 	r = fTermView->Frame();
55b59ed154SAdrien Destugues 	r.left = r.right + 1;
56b59ed154SAdrien Destugues 	r.right = r.left + B_V_SCROLL_BAR_WIDTH;
57b59ed154SAdrien Destugues 	r.top -= 1;
58b59ed154SAdrien Destugues 	r.bottom -= B_H_SCROLL_BAR_HEIGHT - 1;
59b59ed154SAdrien Destugues 	BScrollBar* scrollBar = new BScrollBar(r, "scrollbar", NULL, 0, 0,
60b59ed154SAdrien Destugues 		B_VERTICAL);
61b59ed154SAdrien Destugues 
62b59ed154SAdrien Destugues 	scrollBar->SetTarget(fTermView);
63b59ed154SAdrien Destugues 
64b59ed154SAdrien Destugues 	ResizeTo(r.right - 1, r.bottom + B_H_SCROLL_BAR_HEIGHT - 1);
65dae0a4e0SAdrien Destugues - PulkoMandy 
66dae0a4e0SAdrien Destugues - PulkoMandy 	AddChild(menuBar);
67f441fd03SAdrien Destugues - PulkoMandy 	AddChild(fTermView);
68b59ed154SAdrien Destugues 	AddChild(scrollBar);
69dae0a4e0SAdrien Destugues - PulkoMandy 
7004434656SAdrien Destugues - PulkoMandy 	fConnectionMenu = new BMenu("Connection");
71469e6cd2SAdrien Destugues - PulkoMandy 	BMenu* fileMenu = new BMenu("File");
72dae0a4e0SAdrien Destugues - PulkoMandy 	BMenu* settingsMenu = new BMenu("Settings");
73dae0a4e0SAdrien Destugues - PulkoMandy 
74469e6cd2SAdrien Destugues - PulkoMandy 	fConnectionMenu->SetRadioMode(true);
75469e6cd2SAdrien Destugues - PulkoMandy 
7604434656SAdrien Destugues - PulkoMandy 	menuBar->AddItem(fConnectionMenu);
77469e6cd2SAdrien Destugues - PulkoMandy 	menuBar->AddItem(fileMenu);
78dae0a4e0SAdrien Destugues - PulkoMandy 	menuBar->AddItem(settingsMenu);
79dae0a4e0SAdrien Destugues - PulkoMandy 
8004434656SAdrien Destugues - PulkoMandy 	// TODO edit menu - what's in it ?
81469e6cd2SAdrien Destugues - PulkoMandy 	//BMenu* editMenu = new BMenu("Edit");
82469e6cd2SAdrien Destugues - PulkoMandy 	//menuBar->AddItem(editMenu);
83469e6cd2SAdrien Destugues - PulkoMandy 
84469e6cd2SAdrien Destugues - PulkoMandy 	BMenuItem* logFile = new BMenuItem("Log to file" B_UTF8_ELLIPSIS,
85469e6cd2SAdrien Destugues - PulkoMandy 		new BMessage(kMsgLogfile));
86469e6cd2SAdrien Destugues - PulkoMandy 	fileMenu->AddItem(logFile);
87ccc6b9beSAdrien Destugues #if 0
88ccc6b9beSAdrien Destugues 	// TODO implement these
89469e6cd2SAdrien Destugues - PulkoMandy 	BMenuItem* xmodemSend = new BMenuItem("X/Y/ZModem send" B_UTF8_ELLIPSIS,
90469e6cd2SAdrien Destugues - PulkoMandy 		NULL);
91469e6cd2SAdrien Destugues - PulkoMandy 	fileMenu->AddItem(xmodemSend);
92469e6cd2SAdrien Destugues - PulkoMandy 	BMenuItem* xmodemReceive = new BMenuItem(
93469e6cd2SAdrien Destugues - PulkoMandy 		"X/Y/Zmodem receive" B_UTF8_ELLIPSIS, NULL);
94469e6cd2SAdrien Destugues - PulkoMandy 	fileMenu->AddItem(xmodemReceive);
95ccc6b9beSAdrien Destugues #endif
96dae0a4e0SAdrien Destugues - PulkoMandy 
9704434656SAdrien Destugues - PulkoMandy 	// Configuring all this by menus may be a bit unhandy. Make a setting
9804434656SAdrien Destugues - PulkoMandy 	// window instead ?
99ccc6b9beSAdrien Destugues 	fBaudrateMenu = new BMenu("Baud rate");
100ccc6b9beSAdrien Destugues 	fBaudrateMenu->SetRadioMode(true);
101ccc6b9beSAdrien Destugues 	settingsMenu->AddItem(fBaudrateMenu);
10204434656SAdrien Destugues - PulkoMandy 
103ccc6b9beSAdrien Destugues 	fParityMenu = new BMenu("Parity");
104ccc6b9beSAdrien Destugues 	fParityMenu->SetRadioMode(true);
105ccc6b9beSAdrien Destugues 	settingsMenu->AddItem(fParityMenu);
10604434656SAdrien Destugues - PulkoMandy 
107ccc6b9beSAdrien Destugues 	fStopbitsMenu = new BMenu("Stop bits");
108ccc6b9beSAdrien Destugues 	fStopbitsMenu->SetRadioMode(true);
109ccc6b9beSAdrien Destugues 	settingsMenu->AddItem(fStopbitsMenu);
11004434656SAdrien Destugues - PulkoMandy 
111ccc6b9beSAdrien Destugues 	fFlowcontrolMenu = new BMenu("Flow control");
112ccc6b9beSAdrien Destugues 	fFlowcontrolMenu->SetRadioMode(true);
113ccc6b9beSAdrien Destugues 	settingsMenu->AddItem(fFlowcontrolMenu);
11404434656SAdrien Destugues - PulkoMandy 
115ccc6b9beSAdrien Destugues 	fDatabitsMenu = new BMenu("Data bits");
116ccc6b9beSAdrien Destugues 	fDatabitsMenu->SetRadioMode(true);
117ccc6b9beSAdrien Destugues 	settingsMenu->AddItem(fDatabitsMenu);
11804434656SAdrien Destugues - PulkoMandy 
11904434656SAdrien Destugues - PulkoMandy 
12004434656SAdrien Destugues - PulkoMandy 	BMessage* message = new BMessage(kMsgSettings);
12104434656SAdrien Destugues - PulkoMandy 	message->AddInt32("parity", B_NO_PARITY);
12204434656SAdrien Destugues - PulkoMandy 	BMenuItem* parityNone = new BMenuItem("None", message);
12304434656SAdrien Destugues - PulkoMandy 
12404434656SAdrien Destugues - PulkoMandy 	message = new BMessage(kMsgSettings);
12504434656SAdrien Destugues - PulkoMandy 	message->AddInt32("parity", B_ODD_PARITY);
12604434656SAdrien Destugues - PulkoMandy 	BMenuItem* parityOdd = new BMenuItem("Odd", message);
12704434656SAdrien Destugues - PulkoMandy 
12804434656SAdrien Destugues - PulkoMandy 	message = new BMessage(kMsgSettings);
12904434656SAdrien Destugues - PulkoMandy 	message->AddInt32("parity", B_EVEN_PARITY);
13004434656SAdrien Destugues - PulkoMandy 	BMenuItem* parityEven = new BMenuItem("Even", message);
13104434656SAdrien Destugues - PulkoMandy 
132ccc6b9beSAdrien Destugues 	fParityMenu->AddItem(parityNone);
133ccc6b9beSAdrien Destugues 	fParityMenu->AddItem(parityOdd);
134ccc6b9beSAdrien Destugues 	fParityMenu->AddItem(parityEven);
135ccc6b9beSAdrien Destugues 	fParityMenu->SetTargetForItems(be_app);
13604434656SAdrien Destugues - PulkoMandy 
13704434656SAdrien Destugues - PulkoMandy 	message = new BMessage(kMsgSettings);
13804434656SAdrien Destugues - PulkoMandy 	message->AddInt32("databits", B_DATA_BITS_7);
13904434656SAdrien Destugues - PulkoMandy 	BMenuItem* data7 = new BMenuItem("7", message);
14004434656SAdrien Destugues - PulkoMandy 
14104434656SAdrien Destugues - PulkoMandy 	message = new BMessage(kMsgSettings);
14204434656SAdrien Destugues - PulkoMandy 	message->AddInt32("databits", B_DATA_BITS_8);
14304434656SAdrien Destugues - PulkoMandy 	BMenuItem* data8 = new BMenuItem("8", message);
14404434656SAdrien Destugues - PulkoMandy 
145ccc6b9beSAdrien Destugues 	fDatabitsMenu->AddItem(data7);
146ccc6b9beSAdrien Destugues 	fDatabitsMenu->AddItem(data8);
147ccc6b9beSAdrien Destugues 	fDatabitsMenu->SetTargetForItems(be_app);
14804434656SAdrien Destugues - PulkoMandy 
14904434656SAdrien Destugues - PulkoMandy 	message = new BMessage(kMsgSettings);
15004434656SAdrien Destugues - PulkoMandy 	message->AddInt32("stopbits", B_STOP_BITS_1);
151ccc6b9beSAdrien Destugues 	BMenuItem* stop1 = new BMenuItem("1", message);
15204434656SAdrien Destugues - PulkoMandy 
15304434656SAdrien Destugues - PulkoMandy 	message = new BMessage(kMsgSettings);
15404434656SAdrien Destugues - PulkoMandy 	message->AddInt32("stopbits", B_STOP_BITS_2);
155ccc6b9beSAdrien Destugues 	BMenuItem* stop2 = new BMenuItem("2", message);
15604434656SAdrien Destugues - PulkoMandy 
157ccc6b9beSAdrien Destugues 	fStopbitsMenu->AddItem(stop1);
158ccc6b9beSAdrien Destugues 	fStopbitsMenu->AddItem(stop2);
159ccc6b9beSAdrien Destugues 	fStopbitsMenu->SetTargetForItems(be_app);
16004434656SAdrien Destugues - PulkoMandy 
16104434656SAdrien Destugues - PulkoMandy 	// Loop backwards to add fastest rates at top of menu
162bc026197SAlexander von Gluck IV 	for (int i = sizeof(kBaudrates) / sizeof(kBaudrates[0]); --i >= 0;)
16304434656SAdrien Destugues - PulkoMandy 	{
16404434656SAdrien Destugues - PulkoMandy 		message = new BMessage(kMsgSettings);
165e2367275SAdrien Destugues 		message->AddInt32("baudrate", kBaudrateConstants[i]);
16604434656SAdrien Destugues - PulkoMandy 
16704434656SAdrien Destugues - PulkoMandy 		char buffer[7];
168ccc6b9beSAdrien Destugues 		sprintf(buffer, "%d", kBaudrates[i]);
16904434656SAdrien Destugues - PulkoMandy 		BMenuItem* item = new BMenuItem(buffer, message);
17004434656SAdrien Destugues - PulkoMandy 
171ccc6b9beSAdrien Destugues 		fBaudrateMenu->AddItem(item);
17204434656SAdrien Destugues - PulkoMandy 	}
17304434656SAdrien Destugues - PulkoMandy 
174ccc6b9beSAdrien Destugues 	fBaudrateMenu->SetTargetForItems(be_app);
17504434656SAdrien Destugues - PulkoMandy 
17604434656SAdrien Destugues - PulkoMandy 	message = new BMessage(kMsgSettings);
17704434656SAdrien Destugues - PulkoMandy 	message->AddInt32("flowcontrol", B_HARDWARE_CONTROL);
17804434656SAdrien Destugues - PulkoMandy 	BMenuItem* hardware = new BMenuItem("Hardware", message);
17904434656SAdrien Destugues - PulkoMandy 
18004434656SAdrien Destugues - PulkoMandy 	message = new BMessage(kMsgSettings);
18104434656SAdrien Destugues - PulkoMandy 	message->AddInt32("flowcontrol", B_SOFTWARE_CONTROL);
18204434656SAdrien Destugues - PulkoMandy 	BMenuItem* software = new BMenuItem("Software", message);
18304434656SAdrien Destugues - PulkoMandy 
18404434656SAdrien Destugues - PulkoMandy 	message = new BMessage(kMsgSettings);
18504434656SAdrien Destugues - PulkoMandy 	message->AddInt32("flowcontrol", B_HARDWARE_CONTROL | B_SOFTWARE_CONTROL);
18604434656SAdrien Destugues - PulkoMandy 	BMenuItem* both = new BMenuItem("Both", message);
18704434656SAdrien Destugues - PulkoMandy 
18804434656SAdrien Destugues - PulkoMandy 	message = new BMessage(kMsgSettings);
18904434656SAdrien Destugues - PulkoMandy 	message->AddInt32("flowcontrol", 0);
19004434656SAdrien Destugues - PulkoMandy 	BMenuItem* noFlow = new BMenuItem("None", message);
19104434656SAdrien Destugues - PulkoMandy 
192ccc6b9beSAdrien Destugues 	fFlowcontrolMenu->AddItem(hardware);
193ccc6b9beSAdrien Destugues 	fFlowcontrolMenu->AddItem(software);
194ccc6b9beSAdrien Destugues 	fFlowcontrolMenu->AddItem(both);
195ccc6b9beSAdrien Destugues 	fFlowcontrolMenu->AddItem(noFlow);
196ccc6b9beSAdrien Destugues 	fFlowcontrolMenu->SetTargetForItems(be_app);
19704434656SAdrien Destugues - PulkoMandy 
19804434656SAdrien Destugues - PulkoMandy 	CenterOnScreen();
19904434656SAdrien Destugues - PulkoMandy }
20004434656SAdrien Destugues - PulkoMandy 
201469e6cd2SAdrien Destugues - PulkoMandy 
202469e6cd2SAdrien Destugues - PulkoMandy SerialWindow::~SerialWindow()
203469e6cd2SAdrien Destugues - PulkoMandy {
204469e6cd2SAdrien Destugues - PulkoMandy 	delete fLogFilePanel;
205469e6cd2SAdrien Destugues - PulkoMandy }
206469e6cd2SAdrien Destugues - PulkoMandy 
20704434656SAdrien Destugues - PulkoMandy 
20804434656SAdrien Destugues - PulkoMandy void SerialWindow::MenusBeginning()
20904434656SAdrien Destugues - PulkoMandy {
21004434656SAdrien Destugues - PulkoMandy 	// remove all items from the menu
211c19e7bb3SUrias McCullough 	fConnectionMenu->RemoveItems(0, fConnectionMenu->CountItems(), true);
21204434656SAdrien Destugues - PulkoMandy 
21304434656SAdrien Destugues - PulkoMandy 	// fill it with the (updated) serial port list
214dae0a4e0SAdrien Destugues - PulkoMandy 	BSerialPort serialPort;
215dae0a4e0SAdrien Destugues - PulkoMandy 	int deviceCount = serialPort.CountDevices();
216ccc6b9beSAdrien Destugues 	bool connected = false;
217dae0a4e0SAdrien Destugues - PulkoMandy 
218dae0a4e0SAdrien Destugues - PulkoMandy 	for (int i = 0; i < deviceCount; i++)
219dae0a4e0SAdrien Destugues - PulkoMandy 	{
220dae0a4e0SAdrien Destugues - PulkoMandy 		char buffer[256];
221dae0a4e0SAdrien Destugues - PulkoMandy 		serialPort.GetDeviceName(i, buffer, 256);
222dae0a4e0SAdrien Destugues - PulkoMandy 
223f441fd03SAdrien Destugues - PulkoMandy 		BMessage* message = new BMessage(kMsgOpenPort);
224f441fd03SAdrien Destugues - PulkoMandy 		message->AddString("port name", buffer);
225f441fd03SAdrien Destugues - PulkoMandy 		BMenuItem* portItem = new BMenuItem(buffer, message);
226a2021beeSAdrien Destugues - PulkoMandy 		portItem->SetTarget(be_app);
22704434656SAdrien Destugues - PulkoMandy 
228ccc6b9beSAdrien Destugues 		const BString& connectedPort = ((SerialApp*)be_app)->GetPort();
229ccc6b9beSAdrien Destugues 
230ccc6b9beSAdrien Destugues 		if (connectedPort == buffer) {
231ccc6b9beSAdrien Destugues 			connected = true;
232ccc6b9beSAdrien Destugues 			portItem->SetMarked(true);
233ccc6b9beSAdrien Destugues 		}
234ccc6b9beSAdrien Destugues 
23504434656SAdrien Destugues - PulkoMandy 		fConnectionMenu->AddItem(portItem);
236dae0a4e0SAdrien Destugues - PulkoMandy 	}
237dae0a4e0SAdrien Destugues - PulkoMandy 
23804434656SAdrien Destugues - PulkoMandy 	if (deviceCount > 0) {
23904434656SAdrien Destugues - PulkoMandy 		fConnectionMenu->AddSeparatorItem();
240dae0a4e0SAdrien Destugues - PulkoMandy 
24104434656SAdrien Destugues - PulkoMandy 		BMenuItem* disconnect = new BMenuItem("Disconnect",
24204434656SAdrien Destugues - PulkoMandy 			new BMessage(kMsgOpenPort), 'Z', B_OPTION_KEY);
243ccc6b9beSAdrien Destugues 		if (!connected)
244ccc6b9beSAdrien Destugues 			disconnect->SetEnabled(false);
245d9e93152SAdrien Destugues 		disconnect->SetTarget(be_app);
24604434656SAdrien Destugues - PulkoMandy 		fConnectionMenu->AddItem(disconnect);
24704434656SAdrien Destugues - PulkoMandy 	} else {
24804434656SAdrien Destugues - PulkoMandy 		BMenuItem* noDevices = new BMenuItem("<no serial port available>", NULL);
24904434656SAdrien Destugues - PulkoMandy 		noDevices->SetEnabled(false);
25004434656SAdrien Destugues - PulkoMandy 		fConnectionMenu->AddItem(noDevices);
251dae0a4e0SAdrien Destugues - PulkoMandy 	}
252dae0a4e0SAdrien Destugues - PulkoMandy }
253dae0a4e0SAdrien Destugues - PulkoMandy 
254b59ed154SAdrien Destugues 
255f441fd03SAdrien Destugues - PulkoMandy void SerialWindow::MessageReceived(BMessage* message)
256f441fd03SAdrien Destugues - PulkoMandy {
257f441fd03SAdrien Destugues - PulkoMandy 	switch (message->what)
258f441fd03SAdrien Destugues - PulkoMandy 	{
259f441fd03SAdrien Destugues - PulkoMandy 		case kMsgDataRead:
260f441fd03SAdrien Destugues - PulkoMandy 		{
261f441fd03SAdrien Destugues - PulkoMandy 			const char* bytes;
262f441fd03SAdrien Destugues - PulkoMandy 			ssize_t length;
263492ac416SAdrien Destugues 			if (message->FindData("data", B_RAW_TYPE, (const void**)&bytes,
264492ac416SAdrien Destugues 					&length) == B_OK)
265f441fd03SAdrien Destugues - PulkoMandy 				fTermView->PushBytes(bytes, length);
266d9e93152SAdrien Destugues 			return;
267f441fd03SAdrien Destugues - PulkoMandy 		}
268469e6cd2SAdrien Destugues - PulkoMandy 		case kMsgLogfile:
269469e6cd2SAdrien Destugues - PulkoMandy 		{
270469e6cd2SAdrien Destugues - PulkoMandy 			// Let's lazy init the file panel
271469e6cd2SAdrien Destugues - PulkoMandy 			if (fLogFilePanel == NULL) {
272469e6cd2SAdrien Destugues - PulkoMandy 				fLogFilePanel = new BFilePanel(B_SAVE_PANEL, &be_app_messenger,
273469e6cd2SAdrien Destugues - PulkoMandy 					NULL, B_FILE_NODE, false);
274469e6cd2SAdrien Destugues - PulkoMandy 				fLogFilePanel->SetMessage(message);
275469e6cd2SAdrien Destugues - PulkoMandy 			}
276469e6cd2SAdrien Destugues - PulkoMandy 			fLogFilePanel->Show();
277d9e93152SAdrien Destugues 			return;
278469e6cd2SAdrien Destugues - PulkoMandy 		}
279ccc6b9beSAdrien Destugues 		case kMsgSettings:
280ccc6b9beSAdrien Destugues 		{
281ccc6b9beSAdrien Destugues 			int32 baudrate;
282ccc6b9beSAdrien Destugues 			stop_bits stopBits;
283ccc6b9beSAdrien Destugues 			data_bits dataBits;
284ccc6b9beSAdrien Destugues 			parity_mode parity;
285ccc6b9beSAdrien Destugues 			uint32 flowcontrol;
286ccc6b9beSAdrien Destugues 
287b59ed154SAdrien Destugues 			if (message->FindInt32("databits", (int32*)&dataBits) == B_OK) {
288b59ed154SAdrien Destugues 				for (int i = 0; i < fDatabitsMenu->CountItems(); i++) {
289ccc6b9beSAdrien Destugues 					BMenuItem* item = fDatabitsMenu->ItemAt(i);
290ccc6b9beSAdrien Destugues 					int32 code;
291ccc6b9beSAdrien Destugues 					item->Message()->FindInt32("databits", &code);
292ccc6b9beSAdrien Destugues 
293ccc6b9beSAdrien Destugues 					if (code == dataBits)
294ccc6b9beSAdrien Destugues 						item->SetMarked(true);
295ccc6b9beSAdrien Destugues 				}
296ccc6b9beSAdrien Destugues 			}
297ccc6b9beSAdrien Destugues 
298b59ed154SAdrien Destugues 			if (message->FindInt32("stopbits", (int32*)&stopBits) == B_OK) {
299b59ed154SAdrien Destugues 				for (int i = 0; i < fStopbitsMenu->CountItems(); i++) {
300ccc6b9beSAdrien Destugues 					BMenuItem* item = fStopbitsMenu->ItemAt(i);
301ccc6b9beSAdrien Destugues 					int32 code;
302ccc6b9beSAdrien Destugues 					item->Message()->FindInt32("stopbits", &code);
303ccc6b9beSAdrien Destugues 
304ccc6b9beSAdrien Destugues 					if (code == stopBits)
305ccc6b9beSAdrien Destugues 						item->SetMarked(true);
306ccc6b9beSAdrien Destugues 				}
307ccc6b9beSAdrien Destugues 			}
308ccc6b9beSAdrien Destugues 
309ccc6b9beSAdrien Destugues 			if (message->FindInt32("parity", (int32*)&parity) == B_OK)
310ccc6b9beSAdrien Destugues 			{
311b59ed154SAdrien Destugues 				for (int i = 0; i < fParityMenu->CountItems(); i++) {
312ccc6b9beSAdrien Destugues 					BMenuItem* item = fParityMenu->ItemAt(i);
313ccc6b9beSAdrien Destugues 					int32 code;
314ccc6b9beSAdrien Destugues 					item->Message()->FindInt32("parity", &code);
315ccc6b9beSAdrien Destugues 
316ccc6b9beSAdrien Destugues 					if (code == parity)
317ccc6b9beSAdrien Destugues 						item->SetMarked(true);
318ccc6b9beSAdrien Destugues 				}
319ccc6b9beSAdrien Destugues 			}
320ccc6b9beSAdrien Destugues 
321b59ed154SAdrien Destugues 			if (message->FindInt32("flowcontrol", (int32*)&flowcontrol)
322b59ed154SAdrien Destugues 					== B_OK) {
323b59ed154SAdrien Destugues 				for (int i = 0; i < fFlowcontrolMenu->CountItems(); i++) {
324ccc6b9beSAdrien Destugues 					BMenuItem* item = fFlowcontrolMenu->ItemAt(i);
325ccc6b9beSAdrien Destugues 					int32 code;
326ccc6b9beSAdrien Destugues 					item->Message()->FindInt32("flowcontrol", &code);
327ccc6b9beSAdrien Destugues 
328ccc6b9beSAdrien Destugues 					if (code == (int32)flowcontrol)
329ccc6b9beSAdrien Destugues 						item->SetMarked(true);
330ccc6b9beSAdrien Destugues 				}
331ccc6b9beSAdrien Destugues 			}
332ccc6b9beSAdrien Destugues 
333b59ed154SAdrien Destugues 			if (message->FindInt32("baudrate", &baudrate) == B_OK) {
334b59ed154SAdrien Destugues 				for (int i = 0; i < fBaudrateMenu->CountItems(); i++) {
335ccc6b9beSAdrien Destugues 					BMenuItem* item = fBaudrateMenu->ItemAt(i);
336ccc6b9beSAdrien Destugues 					int32 code;
337ccc6b9beSAdrien Destugues 					item->Message()->FindInt32("baudrate", &code);
338ccc6b9beSAdrien Destugues 
339e2367275SAdrien Destugues 					if (baudrate == code)
340ccc6b9beSAdrien Destugues 						item->SetMarked(true);
341ccc6b9beSAdrien Destugues 				}
342ccc6b9beSAdrien Destugues 			}
343ccc6b9beSAdrien Destugues 
344d9e93152SAdrien Destugues 			return;
345ccc6b9beSAdrien Destugues 		}
346d9e93152SAdrien Destugues 	}
347d9e93152SAdrien Destugues 
348f441fd03SAdrien Destugues - PulkoMandy 	BWindow::MessageReceived(message);
349f441fd03SAdrien Destugues - PulkoMandy }
350