xref: /haiku/src/apps/serialconnect/SerialWindow.cpp (revision ccc6b9be5b6527d14bb35b6ce57dcb422c0422f0)
1dae0a4e0SAdrien Destugues - PulkoMandy /*
2dae0a4e0SAdrien Destugues - PulkoMandy  * Copyright 2012, Adrien Destugues, pulkomandy@gmail.com
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 
11469e6cd2SAdrien Destugues - PulkoMandy #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>
16dae0a4e0SAdrien Destugues - PulkoMandy #include <SerialPort.h>
17dae0a4e0SAdrien Destugues - PulkoMandy 
18f441fd03SAdrien Destugues - PulkoMandy #include "SerialApp.h"
19dae0a4e0SAdrien Destugues - PulkoMandy #include "TermView.h"
20dae0a4e0SAdrien Destugues - PulkoMandy 
21dae0a4e0SAdrien Destugues - PulkoMandy 
22*ccc6b9beSAdrien Destugues const int SerialWindow::kBaudrates[] = { 50, 75, 110, 134, 150, 200, 300, 600,
23*ccc6b9beSAdrien Destugues 	1200, 1800, 2400, 4800, 9600, 19200, 31250, 38400, 57600, 115200, 230400
24*ccc6b9beSAdrien Destugues };
25*ccc6b9beSAdrien Destugues 
26*ccc6b9beSAdrien Destugues 
27*ccc6b9beSAdrien Destugues const char* SerialWindow::kWindowTitle = "SerialConnect";
28*ccc6b9beSAdrien Destugues 
29*ccc6b9beSAdrien Destugues 
30dae0a4e0SAdrien Destugues - PulkoMandy SerialWindow::SerialWindow()
31469e6cd2SAdrien Destugues - PulkoMandy 	: BWindow(BRect(100, 100, 400, 400), SerialWindow::kWindowTitle,
32f441fd03SAdrien Destugues - PulkoMandy 		B_DOCUMENT_WINDOW, B_QUIT_ON_WINDOW_CLOSE | B_AUTO_UPDATE_SIZE_LIMITS)
33469e6cd2SAdrien Destugues - PulkoMandy 	, fLogFilePanel(NULL)
34dae0a4e0SAdrien Destugues - PulkoMandy {
35dae0a4e0SAdrien Destugues - PulkoMandy 	SetLayout(new BGroupLayout(B_VERTICAL, 0.0f));
36dae0a4e0SAdrien Destugues - PulkoMandy 
37dae0a4e0SAdrien Destugues - PulkoMandy 	BMenuBar* menuBar = new BMenuBar("menuBar");
38f441fd03SAdrien Destugues - PulkoMandy 	fTermView = new TermView();
39dae0a4e0SAdrien Destugues - PulkoMandy 
40dae0a4e0SAdrien Destugues - PulkoMandy 	AddChild(menuBar);
41f441fd03SAdrien Destugues - PulkoMandy 	AddChild(fTermView);
42dae0a4e0SAdrien Destugues - PulkoMandy 
4304434656SAdrien Destugues - PulkoMandy 	fConnectionMenu = new BMenu("Connection");
44469e6cd2SAdrien Destugues - PulkoMandy 	BMenu* fileMenu = new BMenu("File");
45dae0a4e0SAdrien Destugues - PulkoMandy 	BMenu* settingsMenu = new BMenu("Settings");
46dae0a4e0SAdrien Destugues - PulkoMandy 
47469e6cd2SAdrien Destugues - PulkoMandy 	fConnectionMenu->SetRadioMode(true);
48469e6cd2SAdrien Destugues - PulkoMandy 
4904434656SAdrien Destugues - PulkoMandy 	menuBar->AddItem(fConnectionMenu);
50469e6cd2SAdrien Destugues - PulkoMandy 	menuBar->AddItem(fileMenu);
51dae0a4e0SAdrien Destugues - PulkoMandy 	menuBar->AddItem(settingsMenu);
52dae0a4e0SAdrien Destugues - PulkoMandy 
5304434656SAdrien Destugues - PulkoMandy 	// TODO edit menu - what's in it ?
54469e6cd2SAdrien Destugues - PulkoMandy 	//BMenu* editMenu = new BMenu("Edit");
55469e6cd2SAdrien Destugues - PulkoMandy 	//menuBar->AddItem(editMenu);
56469e6cd2SAdrien Destugues - PulkoMandy 
57469e6cd2SAdrien Destugues - PulkoMandy 	BMenuItem* logFile = new BMenuItem("Log to file" B_UTF8_ELLIPSIS,
58469e6cd2SAdrien Destugues - PulkoMandy 		new BMessage(kMsgLogfile));
59469e6cd2SAdrien Destugues - PulkoMandy 	fileMenu->AddItem(logFile);
60*ccc6b9beSAdrien Destugues #if 0
61*ccc6b9beSAdrien Destugues 	// TODO implement these
62469e6cd2SAdrien Destugues - PulkoMandy 	BMenuItem* xmodemSend = new BMenuItem("X/Y/ZModem send" B_UTF8_ELLIPSIS,
63469e6cd2SAdrien Destugues - PulkoMandy 		NULL);
64469e6cd2SAdrien Destugues - PulkoMandy 	fileMenu->AddItem(xmodemSend);
65469e6cd2SAdrien Destugues - PulkoMandy 	BMenuItem* xmodemReceive = new BMenuItem(
66469e6cd2SAdrien Destugues - PulkoMandy 		"X/Y/Zmodem receive" B_UTF8_ELLIPSIS, NULL);
67469e6cd2SAdrien Destugues - PulkoMandy 	fileMenu->AddItem(xmodemReceive);
68*ccc6b9beSAdrien Destugues #endif
69dae0a4e0SAdrien Destugues - PulkoMandy 
7004434656SAdrien Destugues - PulkoMandy 	// Configuring all this by menus may be a bit unhandy. Make a setting
7104434656SAdrien Destugues - PulkoMandy 	// window instead ?
72*ccc6b9beSAdrien Destugues 	fBaudrateMenu = new BMenu("Baud rate");
73*ccc6b9beSAdrien Destugues 	fBaudrateMenu->SetRadioMode(true);
74*ccc6b9beSAdrien Destugues 	settingsMenu->AddItem(fBaudrateMenu);
7504434656SAdrien Destugues - PulkoMandy 
76*ccc6b9beSAdrien Destugues 	fParityMenu = new BMenu("Parity");
77*ccc6b9beSAdrien Destugues 	fParityMenu->SetRadioMode(true);
78*ccc6b9beSAdrien Destugues 	settingsMenu->AddItem(fParityMenu);
7904434656SAdrien Destugues - PulkoMandy 
80*ccc6b9beSAdrien Destugues 	fStopbitsMenu = new BMenu("Stop bits");
81*ccc6b9beSAdrien Destugues 	fStopbitsMenu->SetRadioMode(true);
82*ccc6b9beSAdrien Destugues 	settingsMenu->AddItem(fStopbitsMenu);
8304434656SAdrien Destugues - PulkoMandy 
84*ccc6b9beSAdrien Destugues 	fFlowcontrolMenu = new BMenu("Flow control");
85*ccc6b9beSAdrien Destugues 	fFlowcontrolMenu->SetRadioMode(true);
86*ccc6b9beSAdrien Destugues 	settingsMenu->AddItem(fFlowcontrolMenu);
8704434656SAdrien Destugues - PulkoMandy 
88*ccc6b9beSAdrien Destugues 	fDatabitsMenu = new BMenu("Data bits");
89*ccc6b9beSAdrien Destugues 	fDatabitsMenu->SetRadioMode(true);
90*ccc6b9beSAdrien Destugues 	settingsMenu->AddItem(fDatabitsMenu);
9104434656SAdrien Destugues - PulkoMandy 
9204434656SAdrien Destugues - PulkoMandy 
9304434656SAdrien Destugues - PulkoMandy 	BMessage* message = new BMessage(kMsgSettings);
9404434656SAdrien Destugues - PulkoMandy 	message->AddInt32("parity", B_NO_PARITY);
9504434656SAdrien Destugues - PulkoMandy 	BMenuItem* parityNone = new BMenuItem("None", message);
9604434656SAdrien Destugues - PulkoMandy 
9704434656SAdrien Destugues - PulkoMandy 	message = new BMessage(kMsgSettings);
9804434656SAdrien Destugues - PulkoMandy 	message->AddInt32("parity", B_ODD_PARITY);
9904434656SAdrien Destugues - PulkoMandy 	BMenuItem* parityOdd = new BMenuItem("Odd", message);
10004434656SAdrien Destugues - PulkoMandy 
10104434656SAdrien Destugues - PulkoMandy 	message = new BMessage(kMsgSettings);
10204434656SAdrien Destugues - PulkoMandy 	message->AddInt32("parity", B_EVEN_PARITY);
10304434656SAdrien Destugues - PulkoMandy 	BMenuItem* parityEven = new BMenuItem("Even", message);
10404434656SAdrien Destugues - PulkoMandy 
105*ccc6b9beSAdrien Destugues 	fParityMenu->AddItem(parityNone);
106*ccc6b9beSAdrien Destugues 	fParityMenu->AddItem(parityOdd);
107*ccc6b9beSAdrien Destugues 	fParityMenu->AddItem(parityEven);
108*ccc6b9beSAdrien Destugues 	fParityMenu->SetTargetForItems(be_app);
10904434656SAdrien Destugues - PulkoMandy 
11004434656SAdrien Destugues - PulkoMandy 	message = new BMessage(kMsgSettings);
11104434656SAdrien Destugues - PulkoMandy 	message->AddInt32("databits", B_DATA_BITS_7);
11204434656SAdrien Destugues - PulkoMandy 	BMenuItem* data7 = new BMenuItem("7", message);
11304434656SAdrien Destugues - PulkoMandy 
11404434656SAdrien Destugues - PulkoMandy 	message = new BMessage(kMsgSettings);
11504434656SAdrien Destugues - PulkoMandy 	message->AddInt32("databits", B_DATA_BITS_8);
11604434656SAdrien Destugues - PulkoMandy 	BMenuItem* data8 = new BMenuItem("8", message);
11704434656SAdrien Destugues - PulkoMandy 
118*ccc6b9beSAdrien Destugues 	fDatabitsMenu->AddItem(data7);
119*ccc6b9beSAdrien Destugues 	fDatabitsMenu->AddItem(data8);
120*ccc6b9beSAdrien Destugues 	fDatabitsMenu->SetTargetForItems(be_app);
12104434656SAdrien Destugues - PulkoMandy 
12204434656SAdrien Destugues - PulkoMandy 	message = new BMessage(kMsgSettings);
12304434656SAdrien Destugues - PulkoMandy 	message->AddInt32("stopbits", B_STOP_BITS_1);
124*ccc6b9beSAdrien Destugues 	BMenuItem* stop1 = new BMenuItem("1", message);
12504434656SAdrien Destugues - PulkoMandy 
12604434656SAdrien Destugues - PulkoMandy 	message = new BMessage(kMsgSettings);
12704434656SAdrien Destugues - PulkoMandy 	message->AddInt32("stopbits", B_STOP_BITS_2);
128*ccc6b9beSAdrien Destugues 	BMenuItem* stop2 = new BMenuItem("2", message);
12904434656SAdrien Destugues - PulkoMandy 
130*ccc6b9beSAdrien Destugues 	fStopbitsMenu->AddItem(stop1);
131*ccc6b9beSAdrien Destugues 	fStopbitsMenu->AddItem(stop2);
132*ccc6b9beSAdrien Destugues 	fStopbitsMenu->SetTargetForItems(be_app);
13304434656SAdrien Destugues - PulkoMandy 
13404434656SAdrien Destugues - PulkoMandy 	// Loop backwards to add fastest rates at top of menu
135*ccc6b9beSAdrien Destugues 	for (int i = sizeof(kBaudrates) / sizeof(char*); --i >= 0;)
13604434656SAdrien Destugues - PulkoMandy 	{
13704434656SAdrien Destugues - PulkoMandy 		message = new BMessage(kMsgSettings);
138*ccc6b9beSAdrien Destugues 		message->AddInt32("baudrate", kBaudrates[i]);
13904434656SAdrien Destugues - PulkoMandy 
14004434656SAdrien Destugues - PulkoMandy 		char buffer[7];
141*ccc6b9beSAdrien Destugues 		sprintf(buffer,"%d", kBaudrates[i]);
14204434656SAdrien Destugues - PulkoMandy 		BMenuItem* item = new BMenuItem(buffer, message);
14304434656SAdrien Destugues - PulkoMandy 
144*ccc6b9beSAdrien Destugues 		fBaudrateMenu->AddItem(item);
14504434656SAdrien Destugues - PulkoMandy 	}
14604434656SAdrien Destugues - PulkoMandy 
147*ccc6b9beSAdrien Destugues 	fBaudrateMenu->SetTargetForItems(be_app);
14804434656SAdrien Destugues - PulkoMandy 
14904434656SAdrien Destugues - PulkoMandy 	message = new BMessage(kMsgSettings);
15004434656SAdrien Destugues - PulkoMandy 	message->AddInt32("flowcontrol", B_HARDWARE_CONTROL);
15104434656SAdrien Destugues - PulkoMandy 	BMenuItem* hardware = new BMenuItem("Hardware", message);
15204434656SAdrien Destugues - PulkoMandy 
15304434656SAdrien Destugues - PulkoMandy 	message = new BMessage(kMsgSettings);
15404434656SAdrien Destugues - PulkoMandy 	message->AddInt32("flowcontrol", B_SOFTWARE_CONTROL);
15504434656SAdrien Destugues - PulkoMandy 	BMenuItem* software = new BMenuItem("Software", message);
15604434656SAdrien Destugues - PulkoMandy 
15704434656SAdrien Destugues - PulkoMandy 	message = new BMessage(kMsgSettings);
15804434656SAdrien Destugues - PulkoMandy 	message->AddInt32("flowcontrol", B_HARDWARE_CONTROL | B_SOFTWARE_CONTROL);
15904434656SAdrien Destugues - PulkoMandy 	BMenuItem* both = new BMenuItem("Both", message);
16004434656SAdrien Destugues - PulkoMandy 
16104434656SAdrien Destugues - PulkoMandy 	message = new BMessage(kMsgSettings);
16204434656SAdrien Destugues - PulkoMandy 	message->AddInt32("flowcontrol", 0);
16304434656SAdrien Destugues - PulkoMandy 	BMenuItem* noFlow = new BMenuItem("None", message);
16404434656SAdrien Destugues - PulkoMandy 
165*ccc6b9beSAdrien Destugues 	fFlowcontrolMenu->AddItem(hardware);
166*ccc6b9beSAdrien Destugues 	fFlowcontrolMenu->AddItem(software);
167*ccc6b9beSAdrien Destugues 	fFlowcontrolMenu->AddItem(both);
168*ccc6b9beSAdrien Destugues 	fFlowcontrolMenu->AddItem(noFlow);
169*ccc6b9beSAdrien Destugues 	fFlowcontrolMenu->SetTargetForItems(be_app);
17004434656SAdrien Destugues - PulkoMandy 
17104434656SAdrien Destugues - PulkoMandy 	CenterOnScreen();
17204434656SAdrien Destugues - PulkoMandy }
17304434656SAdrien Destugues - PulkoMandy 
174469e6cd2SAdrien Destugues - PulkoMandy 
175469e6cd2SAdrien Destugues - PulkoMandy 
176469e6cd2SAdrien Destugues - PulkoMandy SerialWindow::~SerialWindow()
177469e6cd2SAdrien Destugues - PulkoMandy {
178469e6cd2SAdrien Destugues - PulkoMandy 	delete fLogFilePanel;
179469e6cd2SAdrien Destugues - PulkoMandy }
180469e6cd2SAdrien Destugues - PulkoMandy 
18104434656SAdrien Destugues - PulkoMandy 
18204434656SAdrien Destugues - PulkoMandy void SerialWindow::MenusBeginning()
18304434656SAdrien Destugues - PulkoMandy {
18404434656SAdrien Destugues - PulkoMandy 	// remove all items from the menu
18504434656SAdrien Destugues - PulkoMandy 	while(fConnectionMenu->RemoveItem(0L));
18604434656SAdrien Destugues - PulkoMandy 
18704434656SAdrien Destugues - PulkoMandy 	// fill it with the (updated) serial port list
188dae0a4e0SAdrien Destugues - PulkoMandy 	BSerialPort serialPort;
189dae0a4e0SAdrien Destugues - PulkoMandy 	int deviceCount = serialPort.CountDevices();
190*ccc6b9beSAdrien Destugues 	bool connected = false;
191dae0a4e0SAdrien Destugues - PulkoMandy 
192dae0a4e0SAdrien Destugues - PulkoMandy 	for(int i = 0; i < deviceCount; i++)
193dae0a4e0SAdrien Destugues - PulkoMandy 	{
194dae0a4e0SAdrien Destugues - PulkoMandy 		char buffer[256];
195dae0a4e0SAdrien Destugues - PulkoMandy 		serialPort.GetDeviceName(i, buffer, 256);
196dae0a4e0SAdrien Destugues - PulkoMandy 
197f441fd03SAdrien Destugues - PulkoMandy 		BMessage* message = new BMessage(kMsgOpenPort);
198f441fd03SAdrien Destugues - PulkoMandy 		message->AddString("port name", buffer);
199f441fd03SAdrien Destugues - PulkoMandy 		BMenuItem* portItem = new BMenuItem(buffer, message);
200a2021beeSAdrien Destugues - PulkoMandy 		portItem->SetTarget(be_app);
20104434656SAdrien Destugues - PulkoMandy 
202*ccc6b9beSAdrien Destugues 		const BString& connectedPort = ((SerialApp*)be_app)->GetPort();
203*ccc6b9beSAdrien Destugues 
204*ccc6b9beSAdrien Destugues 		if(connectedPort == buffer) {
205*ccc6b9beSAdrien Destugues 			connected = true;
206*ccc6b9beSAdrien Destugues 			portItem->SetMarked(true);
207*ccc6b9beSAdrien Destugues 		}
208*ccc6b9beSAdrien Destugues 
20904434656SAdrien Destugues - PulkoMandy 		fConnectionMenu->AddItem(portItem);
210dae0a4e0SAdrien Destugues - PulkoMandy 	}
211dae0a4e0SAdrien Destugues - PulkoMandy 
21204434656SAdrien Destugues - PulkoMandy 	if (deviceCount > 0) {
21304434656SAdrien Destugues - PulkoMandy 		fConnectionMenu->AddSeparatorItem();
214dae0a4e0SAdrien Destugues - PulkoMandy 
21504434656SAdrien Destugues - PulkoMandy 		BMenuItem* disconnect = new BMenuItem("Disconnect",
21604434656SAdrien Destugues - PulkoMandy 			new BMessage(kMsgOpenPort), 'Z', B_OPTION_KEY);
217*ccc6b9beSAdrien Destugues 		if(!connected)
218*ccc6b9beSAdrien Destugues 			disconnect->SetEnabled(false);
21904434656SAdrien Destugues - PulkoMandy 		fConnectionMenu->AddItem(disconnect);
22004434656SAdrien Destugues - PulkoMandy 	} else {
22104434656SAdrien Destugues - PulkoMandy 		BMenuItem* noDevices = new BMenuItem("<no serial port available>", NULL);
22204434656SAdrien Destugues - PulkoMandy 		noDevices->SetEnabled(false);
22304434656SAdrien Destugues - PulkoMandy 		fConnectionMenu->AddItem(noDevices);
224dae0a4e0SAdrien Destugues - PulkoMandy 	}
225dae0a4e0SAdrien Destugues - PulkoMandy }
226dae0a4e0SAdrien Destugues - PulkoMandy 
227f441fd03SAdrien Destugues - PulkoMandy void SerialWindow::MessageReceived(BMessage* message)
228f441fd03SAdrien Destugues - PulkoMandy {
229f441fd03SAdrien Destugues - PulkoMandy 	switch(message->what)
230f441fd03SAdrien Destugues - PulkoMandy 	{
23104434656SAdrien Destugues - PulkoMandy 		case kMsgOpenPort:
23204434656SAdrien Destugues - PulkoMandy 		{
23304434656SAdrien Destugues - PulkoMandy 			BMenuItem* disconnectMenu;
23404434656SAdrien Destugues - PulkoMandy 			if(message->FindPointer("source", (void**)&disconnectMenu) == B_OK)
23504434656SAdrien Destugues - PulkoMandy 				disconnectMenu->SetMarked(false);
23604434656SAdrien Destugues - PulkoMandy 			be_app->PostMessage(new BMessage(*message));
23704434656SAdrien Destugues - PulkoMandy 			break;
23804434656SAdrien Destugues - PulkoMandy 		}
239f441fd03SAdrien Destugues - PulkoMandy 		case kMsgDataRead:
240f441fd03SAdrien Destugues - PulkoMandy 		{
241f441fd03SAdrien Destugues - PulkoMandy 			const char* bytes;
242f441fd03SAdrien Destugues - PulkoMandy 			ssize_t length;
24347b44bbeSPhilippe Houdoin 			message->FindData("data", B_RAW_TYPE, (const void**)&bytes, &length);
244f441fd03SAdrien Destugues - PulkoMandy 			fTermView->PushBytes(bytes, length);
245f441fd03SAdrien Destugues - PulkoMandy 			break;
246f441fd03SAdrien Destugues - PulkoMandy 		}
247469e6cd2SAdrien Destugues - PulkoMandy 		case kMsgLogfile:
248469e6cd2SAdrien Destugues - PulkoMandy 		{
249469e6cd2SAdrien Destugues - PulkoMandy 			// Let's lazy init the file panel
250469e6cd2SAdrien Destugues - PulkoMandy 			if(fLogFilePanel == NULL) {
251469e6cd2SAdrien Destugues - PulkoMandy 				fLogFilePanel = new BFilePanel(B_SAVE_PANEL, &be_app_messenger,
252469e6cd2SAdrien Destugues - PulkoMandy 					NULL, B_FILE_NODE, false);
253469e6cd2SAdrien Destugues - PulkoMandy 				fLogFilePanel->SetMessage(message);
254469e6cd2SAdrien Destugues - PulkoMandy 			}
255469e6cd2SAdrien Destugues - PulkoMandy 			fLogFilePanel->Show();
256469e6cd2SAdrien Destugues - PulkoMandy 			break;
257469e6cd2SAdrien Destugues - PulkoMandy 		}
258*ccc6b9beSAdrien Destugues 		case kMsgSettings:
259*ccc6b9beSAdrien Destugues 		{
260*ccc6b9beSAdrien Destugues 			int32 baudrate;
261*ccc6b9beSAdrien Destugues 			stop_bits stopBits;
262*ccc6b9beSAdrien Destugues 			data_bits dataBits;
263*ccc6b9beSAdrien Destugues 			parity_mode parity;
264*ccc6b9beSAdrien Destugues 			uint32 flowcontrol;
265*ccc6b9beSAdrien Destugues 
266*ccc6b9beSAdrien Destugues 			if(message->FindInt32("databits", (int32*)&dataBits) == B_OK)
267*ccc6b9beSAdrien Destugues 			{
268*ccc6b9beSAdrien Destugues 				for(int i = 0; i < fDatabitsMenu->CountItems(); i++)
269*ccc6b9beSAdrien Destugues 				{
270*ccc6b9beSAdrien Destugues 					BMenuItem* item = fDatabitsMenu->ItemAt(i);
271*ccc6b9beSAdrien Destugues 					int32 code;
272*ccc6b9beSAdrien Destugues 					item->Message()->FindInt32("databits", &code);
273*ccc6b9beSAdrien Destugues 
274*ccc6b9beSAdrien Destugues 					if(code == dataBits)
275*ccc6b9beSAdrien Destugues 						item->SetMarked(true);
276*ccc6b9beSAdrien Destugues 				}
277*ccc6b9beSAdrien Destugues 			}
278*ccc6b9beSAdrien Destugues 
279*ccc6b9beSAdrien Destugues 			if(message->FindInt32("stopbits", (int32*)&stopBits) == B_OK)
280*ccc6b9beSAdrien Destugues 			{
281*ccc6b9beSAdrien Destugues 				for(int i = 0; i < fStopbitsMenu->CountItems(); i++)
282*ccc6b9beSAdrien Destugues 				{
283*ccc6b9beSAdrien Destugues 					BMenuItem* item = fStopbitsMenu->ItemAt(i);
284*ccc6b9beSAdrien Destugues 					int32 code;
285*ccc6b9beSAdrien Destugues 					item->Message()->FindInt32("stopbits", &code);
286*ccc6b9beSAdrien Destugues 
287*ccc6b9beSAdrien Destugues 					if(code == stopBits)
288*ccc6b9beSAdrien Destugues 						item->SetMarked(true);
289*ccc6b9beSAdrien Destugues 				}
290*ccc6b9beSAdrien Destugues 			}
291*ccc6b9beSAdrien Destugues 
292*ccc6b9beSAdrien Destugues 			if(message->FindInt32("parity", (int32*)&parity) == B_OK)
293*ccc6b9beSAdrien Destugues 			{
294*ccc6b9beSAdrien Destugues 				for(int i = 0; i < fParityMenu->CountItems(); i++)
295*ccc6b9beSAdrien Destugues 				{
296*ccc6b9beSAdrien Destugues 					BMenuItem* item = fParityMenu->ItemAt(i);
297*ccc6b9beSAdrien Destugues 					int32 code;
298*ccc6b9beSAdrien Destugues 					item->Message()->FindInt32("parity", &code);
299*ccc6b9beSAdrien Destugues 
300*ccc6b9beSAdrien Destugues 					if(code == parity)
301*ccc6b9beSAdrien Destugues 						item->SetMarked(true);
302*ccc6b9beSAdrien Destugues 				}
303*ccc6b9beSAdrien Destugues 			}
304*ccc6b9beSAdrien Destugues 
305*ccc6b9beSAdrien Destugues 			if(message->FindInt32("flowcontrol", (int32*)&flowcontrol) == B_OK)
306*ccc6b9beSAdrien Destugues 			{
307*ccc6b9beSAdrien Destugues 				for(int i = 0; i < fFlowcontrolMenu->CountItems(); i++)
308*ccc6b9beSAdrien Destugues 				{
309*ccc6b9beSAdrien Destugues 					BMenuItem* item = fFlowcontrolMenu->ItemAt(i);
310*ccc6b9beSAdrien Destugues 					int32 code;
311*ccc6b9beSAdrien Destugues 					item->Message()->FindInt32("flowcontrol", &code);
312*ccc6b9beSAdrien Destugues 
313*ccc6b9beSAdrien Destugues 					if(code == (int32)flowcontrol)
314*ccc6b9beSAdrien Destugues 						item->SetMarked(true);
315*ccc6b9beSAdrien Destugues 				}
316*ccc6b9beSAdrien Destugues 			}
317*ccc6b9beSAdrien Destugues 
318*ccc6b9beSAdrien Destugues 			if(message->FindInt32("baudrate", &baudrate) == B_OK)
319*ccc6b9beSAdrien Destugues 			{
320*ccc6b9beSAdrien Destugues 				for(int i = 0; i < fBaudrateMenu->CountItems(); i++)
321*ccc6b9beSAdrien Destugues 				{
322*ccc6b9beSAdrien Destugues 					BMenuItem* item = fBaudrateMenu->ItemAt(i);
323*ccc6b9beSAdrien Destugues 					int32 code;
324*ccc6b9beSAdrien Destugues 					item->Message()->FindInt32("baudrate", &code);
325*ccc6b9beSAdrien Destugues 
326*ccc6b9beSAdrien Destugues 					if(code == kBaudrates[baudrate])
327*ccc6b9beSAdrien Destugues 						item->SetMarked(true);
328*ccc6b9beSAdrien Destugues 				}
329*ccc6b9beSAdrien Destugues 			}
330*ccc6b9beSAdrien Destugues 
331*ccc6b9beSAdrien Destugues 			break;
332*ccc6b9beSAdrien Destugues 		}
333f441fd03SAdrien Destugues - PulkoMandy 		default:
334f441fd03SAdrien Destugues - PulkoMandy 			BWindow::MessageReceived(message);
335f441fd03SAdrien Destugues - PulkoMandy 	}
336f441fd03SAdrien Destugues - PulkoMandy }
337