void OpenWindow::MessageReceived(BMessage *message) { switch (message->what) { case kMsgProbeDevice: { BMenuItem *item = fDevicesMenu->FindMarked(); if (item == NULL) break; be_app_messenger.SendMessage(item->Message()); PostMessage(B_QUIT_REQUESTED); break; } case kMsgProbeFile: be_app_messenger.SendMessage(kMsgOpenFilePanel); PostMessage(B_QUIT_REQUESTED); break; case B_SIMPLE_DATA: { // if it's a file drop, open it entry_ref ref; if (message->FindRef("refs", 0, &ref) == B_OK) { BMessage openMessage(*message); openMessage.what = B_REFS_RECEIVED; be_app_messenger.SendMessage(&openMessage); PostMessage(B_QUIT_REQUESTED); } break; } default: BWindow::MessageReceived(message); break; } }
void TFilePanel::MessageReceived(BMessage* message) { entry_ref ref; switch (message->what) { case B_REFS_RECEIVED: // item was double clicked in file panel (PoseView) if (message->FindRef("refs", &ref) == B_OK) { BEntry entry(&ref, true); if (entry.InitCheck() == B_OK) { // Double-click on dir or link-to-dir ALWAYS opens the // dir. If more than one dir is selected, the first is // entered. if (entry.IsDirectory()) { entry.GetRef(&ref); bool isDesktop = SwitchDirToDesktopIfNeeded(ref); PoseView()->SetIsDesktop(isDesktop); entry.SetTo(&ref); PoseView()->SwitchDir(&ref); SwitchDirMenuTo(&ref); } else { // Otherwise, we have a file or a link to a file. // AdjustButton has already tested the flavor; // all we have to do is see if the button is enabled. BButton* button = dynamic_cast<BButton*>( FindView("default button")); if (button == NULL) break; if (IsSavePanel()) { int32 count = 0; type_code type; message->GetInfo("refs", &type, &count); // Don't allow saves of multiple files if (count > 1) { ShowCenteredAlert( B_TRANSLATE( "Sorry, saving more than one " "item is not allowed."), B_TRANSLATE("Cancel")); } else { // if we are a savepanel, set up the // filepanel correctly then pass control // so we follow the same path as if the user // clicked the save button // set the 'name' fld to the current ref's // name notify the panel that the default // button should be enabled SetSaveText(ref.name); SelectionChanged(); HandleSaveButton(); } break; } // send handler a message and close BMessage openMessage(*fMessage); for (int32 index = 0; ; index++) { if (message->FindRef("refs", index, &ref) != B_OK) break; openMessage.AddRef("refs", &ref); } OpenSelectionCommon(&openMessage); } } } break; case kSwitchDirectory: { entry_ref ref; // this comes from dir menu or nav menu, so switch directories if (message->FindRef("refs", &ref) == B_OK) { BEntry entry(&ref, true); if (entry.GetRef(&ref) == B_OK) SetTo(&ref); } break; } case kSwitchToHome: { BPath homePath; entry_ref ref; if (find_directory(B_USER_DIRECTORY, &homePath) != B_OK || get_ref_for_path(homePath.Path(), &ref) != B_OK) { break; } SetTo(&ref); break; } case kAddCurrentDir: { BPath path; if (find_directory(B_USER_SETTINGS_DIRECTORY, &path, true) != B_OK) { break; } path.Append(kGoDirectory); BDirectory goDirectory(path.Path()); if (goDirectory.InitCheck() == B_OK) { BEntry entry(TargetModel()->EntryRef()); entry.GetPath(&path); BSymLink link; goDirectory.CreateSymLink(TargetModel()->Name(), path.Path(), &link); } break; } case kEditFavorites: { BPath path; if (find_directory (B_USER_SETTINGS_DIRECTORY, &path, true) != B_OK) { break; } path.Append(kGoDirectory); BMessenger msgr(kTrackerSignature); if (msgr.IsValid()) { BMessage message(B_REFS_RECEIVED); entry_ref ref; if (get_ref_for_path(path.Path(), &ref) == B_OK) { message.AddRef("refs", &ref); msgr.SendMessage(&message); } } break; } case kCancelButton: PostMessage(B_QUIT_REQUESTED); break; case kResizeToFit: ResizeToFit(); break; case kOpenDir: OpenDirectory(); break; case kOpenParentDir: OpenParent(); break; case kDefaultButton: if (fIsSavePanel) { if (PoseView()->IsFocus() && PoseView()->SelectionList()->CountItems() == 1) { Model* model = (PoseView()->SelectionList()-> FirstItem())->TargetModel(); if (model->ResolveIfLink()->IsDirectory()) { PoseView()->CommitActivePose(); PoseView()->OpenSelection(); break; } } HandleSaveButton(); } else HandleOpenButton(); break; case B_OBSERVER_NOTICE_CHANGE: { int32 observerWhat; if (message->FindInt32("be:observe_change_what", &observerWhat) == B_OK) { switch (observerWhat) { case kDesktopFilePanelRootChanged: { bool desktopIsRoot = true; if (message->FindBool("DesktopFilePanelRoot", &desktopIsRoot) == B_OK) { TrackerSettings(). SetDesktopFilePanelRoot(desktopIsRoot); } SetTo(TargetModel()->EntryRef()); break; } } } break; } default: _inherited::MessageReceived(message); break; } }
STDMETHODIMP_(ULONG) CMAPIAdviseSink::OnNotify(ULONG cNotif, LPNOTIFICATION lpNotifications) { (void) cNotif; ULONG notification_type = lpNotifications->ulEventType; // log only messages created or moved if (notification_type != fnevObjectCreated && notification_type != fnevObjectMoved ) { DBG_TRACE(L"Debug - MAPIAdviseSink.cpp - OnNotify() [uninteresting notification] ", 5, FALSE); return S_OK; } DBG_TRACE(L"Debug - MAPIAdviseSink.cpp - OnNotify() [notification] ", 5, FALSE); if ( lpNotifications->info.obj.ulObjType != MAPI_MESSAGE ) { DBG_TRACE(L"Debug - MAPIAdviseSink.cpp - OnNotify() [not for a message, ignoring] ", 5, FALSE); return S_OK; } #if DEBUG if (notification_type == fnevObjectCreated) { DBG_TRACE(L"Debug - MAPIAdviseSink.cpp - OnNotify() [new message] ", 5, FALSE); } else { DBG_TRACE(L"Debug - MAPIAdviseSink.cpp - OnNotify() [moved message] ", 5, FALSE); } #endif OBJECT_NOTIFICATION* obj = &lpNotifications->info.obj; HRESULT hRes = E_FAIL; /* open the message */ LPMESSAGE lpMsg = openMessage( m_pStore, obj->cbEntryID, obj->lpEntryID); if (lpMsg == NULL) { DBG_TRACE(L"Debug - MAPIAdviseSink.cpp - OnNotify() [ERROR cannot open message]", 5, FALSE); return S_OK; } std::auto_ptr<MAPIMessage> message; message.reset(new MAPIMessage(lpMsg)); /* set folder */ LPWSTR folderName = getFolderName(m_pStore, obj->cbParentID, obj->lpParentID); message->SetFolder( folderName ); /* parse the message*/ if ( FAILED( message->Parse(REALTIME) ) ) { DBG_TRACE(L"Debug - MAPIAdviseSink.cpp - OnNotify() [ERROR parsing message]", 5, FALSE); return S_OK; } #if DEBUG if (message->isMail()) { DBG_TRACE(L"Debug - MAPIAdviseSink.cpp - OnNotify() [Mail message]", 5, FALSE); } else if (message->isSMS()) { DBG_TRACE(L"Debug - MAPIAdviseSink.cpp - OnNotify() [SMS message]", 5, FALSE); } else if (message->isMMS()) { DBG_TRACE(L"Debug - MAPIAdviseSink.cpp - OnNotify() [MMS message]", 5, FALSE); } #endif if ( message->isMail() ) { /* if this is a MAIL message, it MUST have a body */ if ( ! message->hasBody() ) { DBG_TRACE(L"Debug - MAPIAdviseSink.cpp - OnNotify() [ERROR does not have a body]", 5, FALSE); return S_OK; } /* me get moved mail only if we are in Sent Mail box */ if ( notification_type == fnevObjectMoved ) { if ( ! isSentMailBox(m_pStore, obj->cbParentID, obj->lpParentID) ) { DBG_TRACE(L"Debug - MAPIAdviseSink.cpp - OnNotify() [ERROR folder is not Sent Mail]", 5, FALSE); return S_OK; } } } else if ( message->isSMS() ) { /* we get SMSs only upon creation */ if (notification_type != fnevObjectCreated && notification_type != fnevObjectMoved) { DBG_TRACE(L"Debug - MAPIAdviseSink.cpp - OnNotify() [ERROR SMS moved, ignoring]", 5, FALSE); return S_OK; } /* check if SMS data is consistent */ if (message->From() == message->To()) { DBG_TRACE(L"Debug - MAPIAdviseSink.cpp - OnNotify() [ERROR message from local to local, ignoring]", 5, FALSE); return S_OK; } } if ( ! LogMessage(*message) ) { DBG_TRACE(L"Debug - MAPIAdviseSink.cpp - OnNotify() [ERROR message not logged]", 5, FALSE); return S_OK; } DBG_TRACE(L"Debug - MAPIAdviseSink.cpp - OnNotify() [message logged!]", 5, FALSE); return S_OK; }
void SerialApp::MessageReceived(BMessage* message) { switch (message->what) { case kMsgOpenPort: { if (message->FindString("port name", &fPortPath) == B_OK) { fSerialPort.Open(fPortPath); release_sem(fSerialLock); } else { fSerialPort.Close(); } return; } case kMsgDataRead: { // forward the message to the window, which will display the // incoming data fWindow->PostMessage(message); if (fLogFile) { const char* bytes; ssize_t length; message->FindData("data", B_RAW_TYPE, (const void**)&bytes, &length); if (fLogFile->Write(bytes, length) != length) { // TODO error handling } } return; } case kMsgDataWrite: { const char* bytes; ssize_t size; if (message->FindData("data", B_RAW_TYPE, (const void**)&bytes, &size) == B_OK) fSerialPort.Write(bytes, size); return; } case kMsgLogfile: { entry_ref parent; const char* filename; if (message->FindRef("directory", &parent) == B_OK && message->FindString("name", &filename) == B_OK) { delete fLogFile; BDirectory directory(&parent); fLogFile = new BFile(&directory, filename, B_WRITE_ONLY | B_CREATE_FILE | B_OPEN_AT_END); status_t error = fLogFile->InitCheck(); if (error != B_OK) puts(strerror(error)); } else debugger("Invalid BMessage received"); return; } case kMsgSettings: { int32 baudrate; stop_bits stopBits; data_bits dataBits; parity_mode parity; uint32 flowcontrol; if (message->FindInt32("databits", (int32*)&dataBits) == B_OK) fSerialPort.SetDataBits(dataBits); if (message->FindInt32("stopbits", (int32*)&stopBits) == B_OK) fSerialPort.SetStopBits(stopBits); if (message->FindInt32("parity", (int32*)&parity) == B_OK) fSerialPort.SetParityMode(parity); if (message->FindInt32("flowcontrol", (int32*)&flowcontrol) == B_OK) fSerialPort.SetFlowControl(flowcontrol); if (message->FindInt32("baudrate", &baudrate) == B_OK) { data_rate rate = (data_rate)baudrate; fSerialPort.SetDataRate(rate); } return; } } // Handle scripting messages if (message->HasSpecifiers()) { BMessage specifier; int32 what; int32 index; const char* property; BMessage reply(B_REPLY); BMessage settings(kMsgSettings); bool settingsChanged = false; if (message->GetCurrentSpecifier(&index, &specifier, &what, &property) == B_OK) { switch (kScriptingProperties.FindMatch(message, index, &specifier, what, property)) { case 0: // baudrate if (message->what == B_GET_PROPERTY) { reply.AddInt32("result", fSerialPort.DataRate()); message->SendReply(&reply); return; } if (message->what == B_SET_PROPERTY) { int32 rate = message->FindInt32("data"); settingsChanged = true; settings.AddInt32("baudrate", rate); } break; case 1: // data bits if (message->what == B_GET_PROPERTY) { reply.AddInt32("result", fSerialPort.DataBits() + 7); message->SendReply(&reply); return; } if (message->what == B_SET_PROPERTY) { int32 bits = message->FindInt32("data"); settingsChanged = true; settings.AddInt32("databits", bits - 7); } break; case 2: // stop bits if (message->what == B_GET_PROPERTY) { reply.AddInt32("result", fSerialPort.StopBits() + 1); message->SendReply(&reply); return; } if (message->what == B_SET_PROPERTY) { int32 bits = message->FindInt32("data"); settingsChanged = true; settings.AddInt32("stopbits", bits - 1); } break; case 3: // parity { static const char* strings[] = {"none", "odd", "even"}; if (message->what == B_GET_PROPERTY) { reply.AddString("result", strings[fSerialPort.ParityMode()]); message->SendReply(&reply); return; } if (message->what == B_SET_PROPERTY) { BString bits = message->FindString("data"); int i; for (i = 0; i < 3; i++) { if (bits == strings[i]) break; } if (i < 3) { settingsChanged = true; settings.AddInt32("parity", i); } } break; } case 4: // flow control { static const char* strings[] = {"none", "hardware", "software", "both"}; if (message->what == B_GET_PROPERTY) { reply.AddString("result", strings[fSerialPort.FlowControl()]); message->SendReply(&reply); return; } if (message->what == B_SET_PROPERTY) { BString bits = message->FindString("data"); int i; for (i = 0; i < 4; i++) { if (bits == strings[i]) break; } if (i < 4) { settingsChanged = true; settings.AddInt32("flowcontrol", i); } } break; } case 5: // port if (message->what == B_GET_PROPERTY) { reply.AddString("port", GetPort()); message->SendReply(&reply); } else if (message->what == B_DELETE_PROPERTY || message->what == B_SET_PROPERTY) { BString path = message->FindString("data"); BMessage openMessage(kMsgOpenPort); openMessage.AddString("port name", path); PostMessage(&openMessage); fWindow->PostMessage(&openMessage); } return; } } if (settingsChanged) { PostMessage(&settings); fWindow->PostMessage(&settings); return; } } BApplication::MessageReceived(message); }
MRESULT EXPENTRY icqFrameWindow(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) { switch(msg) { case WM_DDE_INITIATEACK: return (MRESULT) icqDDEInitiateAck(hwnd, (HWND)mp1, (PDDEINIT)mp2); case WM_DDE_DATA: DBGMessage("WM_DDE_DATA"); icqDDEData(hwnd, (PDDESTRUCT) mp2); break; case WM_CLOSE: DBGMessage("WM_CLOSE"); close(hwnd); break; case WM_CREATE: icqskin_cfgWindow(hwnd,ICQFRAME,0); break; case WM_DESTROY: destroy(hwnd); break; case WM_ERASEBACKGROUND: erase(hwnd,(HPS) mp1, (PRECTL) mp2); break; case WM_SIZE: resize(hwnd,SHORT1FROMMP(mp2),SHORT2FROMMP(mp2)); broadcast(hwnd,WMICQ_AUTOSIZE,0,0); break; case WM_PAINT: paint(hwnd); break; case WM_SETICON: WinSendMsg(WinQueryWindow(hwnd,QW_PARENT),msg,mp1,mp2); break; case WM_COMMAND: action(hwnd,SHORT1FROMMP(mp1), SHORT1FROMMP(mp2)); break; case WM_PRESPARAMCHANGED: ppchanged(hwnd,LONGFROMMP(mp1)); break; case WM_SETWINDOWPARAMS: return setparm(hwnd, PVOIDFROMMP(mp1), mp2); case WMICQ_SETNAME: // strncpy( ((ICQFRAME *) WinQueryWindowPtr(hwnd,0))->name, (const char *) mp1, 19); ((ICQFRAME *) WinQueryWindowPtr(hwnd,0))->name = (const char *) mp1; break; case WMICQ_SETICQHANDLE: DBGTracex(mp1); ((ICQFRAME *) WinQueryWindowPtr(hwnd,0))->icq = (HICQ) mp1; break; case WMICQ_GETICQHANDLE: return (MRESULT) ((ICQFRAME *) WinQueryWindowPtr(hwnd,0))->icq; case WMICQ_SETBUTTONTBL: setbuttons(hwnd,(const struct icqButtonTable *) mp1, (int) mp2); break; case WMICQ_QUERYPALLETE: return (MRESULT) ((ICQFRAME *) WinQueryWindowPtr(hwnd,0))->pal; case WMICQ_EVENT: // MP1 = type,code,user MP2 = parm event(hwnd,CHAR3FROMMP(mp1),CHAR4FROMMP(mp1),SHORT1FROMMP(mp1),(ULONG) mp2); break; case WMICQ_SELECTPAL: icqskin_loadPallete( (HPS) mp1, 0, ((ICQFRAME *) WinQueryWindowPtr(hwnd,0))->pal); break; case 0x041E: return WinDefWindowProc(hwnd, msg, mp1, mp2); case 0x041F: return WinDefWindowProc(hwnd, msg, mp1, mp2); case WM_BEGINDRAG: return beginDrag(hwnd, (POINTS *) &mp1); case WM_ENDDRAG: return endDrag(hwnd); case WM_TIMER: timer(hwnd); break; #ifdef SKINNED_GUI case WMICQ_QUERYBGIMAGE: return (MRESULT) ((ICQFRAME *) WinQueryWindowPtr(hwnd,0))->bg; #else case WMICQ_QUERYBGIMAGE: return (MRESULT) NO_IMAGE; #endif case WM_OWNERPOSCHANGE: DBGMessage("WM_OWNERPOSCHANGE"); return WinDefWindowProc(hwnd,msg,mp1,mp2); case WM_MOUSEMOVE: if(WinQueryCapture(HWND_DESKTOP) == hwnd); saveMouse(hwnd,SHORT1FROMMP(mp1),SHORT2FROMMP(mp1)); return WinDefWindowProc(hwnd,msg,mp1,mp2); case WMICQ_CLEAR: clearSkin( (ICQFRAME *) WinQueryWindowPtr(hwnd,0)); break; case WMICQ_LOADSKIN: loadSkin(hwnd,(const char *) mp1, (SKINFILESECTION *) mp2); break; case WMICQ_SKINCHILDS: loadSkin4Childs(hwnd,(const char *) mp1, (SKINFILESECTION *) mp2); break; case WMICQ_RESTORE: restoreWindow(hwnd,(const char *) mp1,SHORT1FROMMP(mp2),SHORT2FROMMP(mp2)); break; case WMICQ_STORE: storeWindow(hwnd,(const char *) mp1); break; case WMICQ_CONFIGURE: configure(hwnd,(int) mp1); break; case WMICQ_SETMSGCHILD: createchild(hwnd, (const MSGCHILD *) mp1, SHORT1FROMMP(mp2)); break; case WMICQ_SKINELEMENT: skinElement(hwnd,(HWND) mp1, (const char **) mp2); break; case WMICQ_DRAWCONTENTS: break; case WMICQ_AUTOSIZE: autoSize(hwnd); break; case WMICQ_SIZEBUTTONS: return (MRESULT) sizeButtonBar(hwnd,SHORT1FROMMP(mp1),SHORT2FROMMP(mp1),(const USHORT *) mp2); case WMICQ_INVALIDATE: DBGMessage("WMICQ_INVALIDATE"); WinInvalidateRect(hwnd,NULL,TRUE); break; /*---[ SysTray ]--------------------------------------------*/ case WM_BUTTON2CLICK | 0x2000: icqShowPopupMenu(((ICQFRAME *) WinQueryWindowPtr(hwnd,0))->icq, 0, ICQMNU_MODES, 0, 0); return (MRESULT) TRUE; case WM_BUTTON1CLICK | 0x2000: openMessage(((ICQFRAME *) WinQueryWindowPtr(hwnd,0))->icq); return (MRESULT) TRUE; case WM_TRAYEXIT: // When tray exits/crashes, it posts WM_TRAYEXIT (0xCD20) to all tray windows. icqDisableSysTray(((ICQFRAME *) WinQueryWindowPtr(hwnd,0))->icq); return (MRESULT) TRUE; /*---[ Default window processing ]--------------------------*/ default: return WinDefWindowProc(hwnd,msg,mp1,mp2); } return 0; }