void DlgOption::SubExclude::onWMInitDialog() { TranslateDialogDefault(getHWnd()); // init clist HWND hCList = GetDlgItem(getHWnd(), IDC_CONTACTS); HIMAGELIST hIml = ImageList_Create(OS::smIconCX(), OS::smIconCY(), OS::imageListColor() | ILC_MASK, 2, 0); SendMessage(hCList, CLM_SETEXTRAIMAGELIST, 0, reinterpret_cast<LPARAM>(hIml)); staticRecreateIcons(reinterpret_cast<LPARAM>(this)); IconLib::registerCallback(staticRecreateIcons, reinterpret_cast<LPARAM>(this)); customizeList(hCList); SendMessage(hCList, CLM_SETEXTRACOLUMNS, 1, 0); CLCINFOITEM cii = { 0 }; cii.cbSize = sizeof(cii); cii.flags = CLCIIF_GROUPFONT; cii.pszText = TranslateT("** All contacts **"); m_hItemAll = reinterpret_cast<HANDLE>(SendMessage(hCList, CLM_ADDINFOITEM, 0, reinterpret_cast<LPARAM>(&cii))); // lock exlucde contacts g_bExcludeLock = true; }
BOOL DlgOption::SubOutput::handleMsg(UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_WINDOWPOSCHANGED: { RECT rClient, rWnd; GetClientRect(getHWnd(), &rClient); // options tree rWnd = utils::getWindowRect(getHWnd(), m_Options); rWnd.right = rClient.right; rWnd.bottom = rClient.bottom; utils::moveWindow(m_Options, rWnd); } break; case WM_NOTIFY: NMHDR* p = reinterpret_cast<NMHDR*>(lParam); if (p->idFrom == IDC_OPTIONS) { if (p->code == OptionsCtrl::OCN_MODIFIED) { OptionsCtrl::NMOPTIONSCTRL* pNM = reinterpret_cast<OptionsCtrl::NMOPTIONSCTRL*>(lParam); onChanged(pNM->hItem); return TRUE; } } break; } return FALSE; }
bool ViewerWindow::onCreate(LPCREATESTRUCT lps) { m_control.setWindow(m_hWnd); setClassCursor(LoadCursor(NULL, IDC_ARROW)); loadIcon(IDI_APPICON); m_toolbar.loadToolBarfromRes(IDB_TOOLBAR); m_toolbar.setButtonsRange(IDS_TB_NEWCONNECTION); m_toolbar.setViewAutoButtons(5, ToolBar::TB_Style_sep); m_toolbar.setViewAutoButtons(7, ToolBar::TB_Style_sep); m_toolbar.setViewAutoButtons(11, ToolBar::TB_Style_sep); m_toolbar.setViewAutoButtons(12, ToolBar::TB_Style_sep); m_toolbar.setViewAutoButtons(16, ToolBar::TB_Style_sep); m_toolbar.attachToolBar(getHWnd()); m_menu.getSystemMenu(getHWnd()); m_menu.loadMenu(); applySettings(); ViewerConfig *config = ViewerConfig::getInstance(); bool bShowToolbar = config->isToolbarShown(); if (!bShowToolbar) { m_toolbar.hide(); m_bToolBar = false; } m_menu.checkedMenuItem(IDS_TB_TOOLBAR, bShowToolbar); return true; }
void DlgOption::SubInput::onWMInitDialog() { TranslateDialogDefault(getHWnd()); // init options control m_Options << GetDlgItem(getHWnd(), IDC_OPTIONS); // settings OptionsCtrl::Item hTemp, hTemp2; hTemp = m_Options.insertGroup(NULL, TranslateT("History interpretation"), OptionsCtrl::OCF_ROOTGROUP); m_hChatSessionMinDur = m_Options.insertEdit(hTemp, TranslateT("Time a chat session must last to be counted (seconds)"), _T(""), OptionsCtrl::OCF_NUMBER); m_hChatSessionTimeout = m_Options.insertEdit(hTemp, TranslateT("Time between two chat sessions (seconds)"), _T(""), OptionsCtrl::OCF_NUMBER); m_hAverageMinTime = m_Options.insertEdit(hTemp, TranslateT("Minimum time to assume when calculating average (days)"), _T(""), OptionsCtrl::OCF_NUMBER); m_hWordDelimiters = m_Options.insertEdit(hTemp, TranslateT("Word delimiting characters")); hTemp = m_Options.insertGroup(NULL, TranslateT("Contact filtering"), OptionsCtrl::OCF_ROOTGROUP | OptionsCtrl::OCF_NODISABLECHILDS); m_hProtocols = m_Options.insertGroup(hTemp, TranslateT("Ignore all contacts with protocol...")); hTemp2 = m_Options.insertGroup(hTemp, TranslateT("History read mode for metacontacts"), 0); m_hMetaContactsMode = m_Options.insertRadio(hTemp2, NULL, TranslateT("Use only metacontact's history")); m_Options.insertRadio(hTemp2, m_hMetaContactsMode, TranslateT("Use only subcontacts' histories (for one metacontact)")); m_Options.insertRadio(hTemp2, m_hMetaContactsMode, TranslateT("Use metacontact's history and its subcontacts' histories")); m_Options.insertRadio(hTemp2, m_hMetaContactsMode, TranslateT("Treat metacontacts and subcontacts as normal contacts")); m_hMergeContacts = m_Options.insertCheck(hTemp, TranslateT("Merge contacts with same name"), OptionsCtrl::OCF_DISABLECHILDSONUNCHECK); m_hMergeContactsGroups = m_Options.insertCheck(m_hMergeContacts, TranslateT("Only merge if contacts are in the same group")); hTemp2 = m_Options.insertGroup(hTemp, TranslateT("Duplicate detection when reading merged contacts")); m_hMergeMode = m_Options.insertRadio(hTemp2, NULL, TranslateT("Merge events (tolerant)")); m_Options.insertRadio(hTemp2, m_hMergeMode, TranslateT("Merge events (strict)")); m_Options.insertRadio(hTemp2, m_hMergeMode, TranslateT("Don't merge events")); hTemp = m_Options.insertGroup(NULL, TranslateT("Message filtering"), OptionsCtrl::OCF_ROOTGROUP); hTemp2 = m_Options.insertGroup(hTemp, TranslateT("Ignore messages...")); m_hIgnoreOlder = m_Options.insertEdit(hTemp2, TranslateT("...older than (days, 0=no limit)"), _T(""), OptionsCtrl::OCF_NUMBER); m_hIgnoreBefore = m_Options.insertDateTime(hTemp2, TranslateT("...before date (none=no limit)"), 0, _T("%Y-%m-%d"), OptionsCtrl::OCF_ALLOWNONE); m_hIgnoreAfter = m_Options.insertDateTime(hTemp2, TranslateT("...after date (none=no limit)"), 0, _T("%Y-%m-%d"), OptionsCtrl::OCF_ALLOWNONE); m_hFilterRawRTF = m_Options.insertCheck(hTemp, TranslateT("Strip raw RTF control sequences from message")); m_hFilterBBCodes = m_Options.insertCheck(hTemp, TranslateT("Strip BBCode tags from messages")); // insert known protocols m_hProtosIgnore.clear(); PROTOACCOUNT **protoList; int protoCount; Proto_EnumAccounts(&protoCount, &protoList); upto_each_(i, protoCount) { m_hProtosIgnore.push_back(m_Options.insertCheck( m_hProtocols, Protocol::getDisplayName(protoList[i]->szModuleName).c_str(), 0, reinterpret_cast<INT_PTR>(protoList[i]->szModuleName))); }
void ViewerWindow::dialogConnectionInfo() { StringStorage host = m_conData->getHost(); std::vector<TCHAR> kbdName; kbdName.resize(KL_NAMELENGTH); memset(&kbdName[0], 0, sizeof(TCHAR) * KL_NAMELENGTH); if (!GetKeyboardLayoutName(&kbdName[0])) { kbdName[0] = _T('?'); kbdName[1] = _T('?'); kbdName[2] = _T('?'); } Rect geometry; int pixelSize = 0; m_dsktWnd.getServerGeometry(&geometry, &pixelSize); StringStorage str; str.format(StringTable::getString(IDS_CONNECTION_INFO_FORMAT), host.getString(), m_viewerCore->getRemoteDesktopName().getString(), m_viewerCore->getProtocolString().getString(), geometry.getWidth(), geometry.getHeight(), pixelSize, &kbdName[0]); MessageBox(getHWnd(), str.getString(), StringTable::getString(IDS_CONNECTION_INFO_CAPTION), MB_OK | MB_ICONINFORMATION); }
bool SampleBase::onInit() { m_frameCount = 0; m_fps = 0.0f; addChannel( MSG_DEV ); if ( !WinFrame::create( "Sample Test" , g_ScreenWidth , g_ScreenHeight , SysMsgHandler::MsgProc , false ) ) return false; if ( !CFly::initSystem() ) return false; mWorld = WorldManager::getInstance().createWorld( getHWnd() , g_ScreenWidth , g_ScreenHeight , 32 , false ); CFly::PluginManager::getInstance().registerLinker( "CW3" , new Cw3FileLinker ); if ( !mWorld ) return false; mWorld->setDir( DIR_OBJECT , SAMPLE_DATA_DIR ); mWorld->setDir( DIR_ACTOR , SAMPLE_DATA_DIR"/NPC" ); mWorld->setDir( DIR_TEXTURE, SAMPLE_DATA_DIR ); mWorld->setDir( DIR_SHADER , SAMPLE_DATA_DIR"/Shader" ); mMainViewport = mWorld->createViewport( 0 , 0 , g_ScreenWidth , g_ScreenHeight ); mMainScene = mWorld->createScene( 1 ); mMainScene->setAmbientLight( Color4f(1,1,1) ); mMainCamera = mMainScene->createCamera(); mMainCamera->setAspect( float( g_ScreenWidth ) / g_ScreenHeight ); mMainCamera->setNear(5.0f); mMainCamera->setFar(100000.0f); return onSetupSample(); }
void DesktopWindow::setNewFramebuffer(const FrameBuffer *framebuffer) { Dimension dimension = framebuffer->getDimension(); Dimension olddimension = m_framebuffer.getDimension(); bool isBackgroundDirty = dimension.width < olddimension.width || dimension.height < olddimension.height; m_logWriter->detail(_T("Desktop size: %d, %d"), dimension.width, dimension.height); { // FIXME: Nested locks should not be used. AutoLock al(&m_bufferLock); if (!dimension.isEmpty()) { // the width and height should be aligned to 4 int alignWidth = (dimension.width + 3) / 4; dimension.width = alignWidth * 4; int alignHeight = (dimension.height + 3) / 4; dimension.height = alignHeight * 4; m_framebuffer.setProperties(&dimension, &framebuffer->getPixelFormat(), getHWnd()); m_framebuffer.setColor(0, 0, 0); m_scManager.setScreenResolution(dimension.width, dimension.height); } } if (dimension.isEmpty()) { repaint(&dimension.getRect()); } else { m_isBackgroundDirty = isBackgroundDirty; } }
void ViewerWindow::onBell() { if (m_conConf->isDeiconifyOnRemoteBellEnabled()) { ShowWindow(getHWnd(), SW_RESTORE); setForegroundWindow(); } MessageBeep(MB_ICONASTERISK); }
void DesktopWindow::calcClientArea() { if (getHWnd()) { RECT rc; getClientRect(&rc); m_clientArea.fromWindowsRect(&rc); m_scManager.setWindow(&m_clientArea); } }
void MucConfigForm::MucConfigResultNotify(JabberDataBlockRef block) { if (block->getAttribute("type")=="error") { XmppError::ref xe= XmppError::findInStanza(block); //todo: error handling MessageBox(getHWnd(), utf8::utf8_wchar(xe->toString()).c_str() , L"MucConfig", MB_OK | MB_ICONEXCLAMATION ); return; } JabberDataBlockRef query=block->findChildNamespace("query","http://jabber.org/protocol/muc#owner"); this->xdata=query->findChildNamespace("x","jabber:x:data"); //non-descriptive result if (!xdata && plainText.empty()) plainText="done"; //todo: make more informative and localizabe PostMessage(getHWnd(), WM_HTML_UPDATE, 0, (LPARAM)""); return; }
BOOL VcardForm::savePhoto( LPCTSTR path ) { if (!vcard) return FALSE; JabberDataBlockRef vcardTemp=vcard->findChildNamespace("vCard", "vcard-temp"); if (!vcardTemp) return FALSE; JabberDataBlockRef photo=vcardTemp->getChildByName("PHOTO"); if (!photo) return FALSE; JabberDataBlockRef binval=photo->getChildByName("BINVAL"); if (!binval) return FALSE; const std::string &data=binval->getText(); int dstLen=base64::base64DecodeGetLength(data.length()); char *dst=new char[dstLen]; dstLen=base64::base64Decode2(dst, data.c_str(), data.length()); wchar_t filename[MAX_PATH]; if (!path) { wchar_t *extm=ext[detectMime(dst)]; *filename=0; wcscpy_s(filename, MAX_PATH, extm); OPENFILENAME ofn; memset(&ofn, 0, sizeof(OPENFILENAME)); ofn.lStructSize=sizeof(OPENFILENAME); ofn.hwndOwner=getHWnd(); ofn.hInstance=g_hInst; //GetModuleHandle(NULL); ofn.lpstrFilter=FILEIMGMASK; ofn.nFilterIndex=0; ofn.lpstrFile=filename; ofn.nMaxFile=MAX_PATH; //ofn.lpstrInitialDir = ; ofn.lpstrTitle=L"Save image as"; ofn.lpstrDefExt=extm+2; ofn.Flags=OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT; BOOL result = GetSaveFileNameEx(&ofn); if (!result) return FALSE; path=filename; } HANDLE file=CreateFile(path, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, 0, NULL); DWORD dwProcessed; if (file==INVALID_HANDLE_VALUE) { delete dst; return FALSE; } WriteFile(file, dst, dstLen, &dwProcessed, NULL); CloseHandle(file); delete dst; return TRUE; }
bool ViewerWindow::onDisconnect() { MessageBox(getHWnd(), m_disconnectMessage.getString(), formatWindowName().getString(), MB_OK); m_dsktWnd.destroyWindow(); destroyWindow(); return true; }
bool TabsCtrl::switchByWndRef( WndRef targetWnd ) { if (!targetWnd) return false; for (unsigned int i = 0; i < tabs.size(); i++) { if (tabs[i]->wndChild->getHWnd()==targetWnd->getHWnd()) { activeTab=i; InvalidateRect(getHWnd(), NULL, true); showActiveTab(); return true; } } return false; }
bool ViewerWindow::onError() { StringStorage error; error.format(_T("Error in %s: %s"), ProductNames::VIEWER_PRODUCT_NAME, m_error.getMessage()); MessageBox(getHWnd(), error.getString(), formatWindowName().getString(), MB_OK | MB_ICONERROR); m_dsktWnd.destroyWindow(); destroyWindow(); return true; }
bool DesktopWindow::onMouse(unsigned char msg, unsigned short wspeed, POINTS pt) { POINT p; p.x = pt.x; p.y = pt.y; if (m_conConf->isViewOnly()) { return true; } if (m_conConf->isMouseSwapEnabled() && msg) { bool bSecond = !!(msg & (1 << 1)); bool bThird = !!(msg & (1 << 2)); msg &= ~((1 << 1) | (1 << 2)); if (bSecond) { msg |= 1 << 2; } if (bThird) { msg |= 1 << 1; } } int mask = MOUSE_WUP | MOUSE_WDOWN; // we need to translate screen coordinate to client if (msg & mask) { if (!ScreenToClient(getHWnd(), &p)) { p.x = -1; p.y = -1; } } POINTS mousePos = getViewerCoord(p.x, p.y); Point pos; pos.x = mousePos.x; pos.y = mousePos.y; if (pos.y >= 0 && pos.x >= 0) { UINT8 keys; keys = msg; m_pViewerCore->sendPointerEvent(keys, &pos); if (msg & mask) { int i; m_pViewerCore->sendPointerEvent(keys & ~mask, &pos); for (i=0; i< wspeed-1; i++) { m_pViewerCore->sendPointerEvent(keys, &pos); m_pViewerCore->sendPointerEvent(keys & ~mask, &pos); } } } return true; }
void ViewerWindow::dialogConnectionOptions() { OptionsDialog dialog; dialog.setConnected(); dialog.setConnectionConfig(m_conConf); // FIXME: Removed Control from this code and another Control control = getHWnd(); dialog.setParent(&control); if (dialog.showModal() == 1) { m_conConf->saveToStorage(&m_ccsm); applySettings(); } }
ViewerWindow::ViewerWindow(WindowsApplication *application, ConnectionData *conData, ConnectionConfig *conConf, Logger *logger) : m_ccsm(RegistryPaths::VIEWER_PATH, conData->getHost().getString()), m_application(application), m_logWriter(logger), m_conConf(conConf), m_scale(100), m_isFullScr(false), m_ftDialog(0), m_viewerCore(0), m_fileTransfer(0), m_remoteProcess(0), m_conData(conData), m_dsktWnd(&m_logWriter, conConf), m_isConnected(false), m_sizeIsChanged(false), m_hooksEnabledFirstTime(true), m_requiresReconnect(false), m_stopped(false) { m_standardScale.push_back(10); m_standardScale.push_back(15); m_standardScale.push_back(25); m_standardScale.push_back(50); m_standardScale.push_back(75); m_standardScale.push_back(90); m_standardScale.push_back(100); m_standardScale.push_back(150); m_standardScale.push_back(200); m_standardScale.push_back(400); StringStorage windowClass = WindowNames::TVN_WINDOW_CLASS_NAME; StringStorage titleName = WindowNames::TVN_WINDOW_TITLE_NAME; StringStorage subTitleName = WindowNames::TVN_SUB_WINDOW_TITLE_NAME; setClass(&windowClass); createWindow(&titleName, WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS); m_dsktWnd.setClass(&windowClass); m_dsktWnd.createWindow(&subTitleName, WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CHILD, getHWnd()); SetTimer(m_hWnd, TIMER_DESKTOP_STATE, TIMER_DESKTOP_STATE_DELAY, (TIMERPROC)NULL); }
bool DesktopWindow::onDrawClipboard() { if (!IsWindowVisible(getHWnd()) || !m_conConf->isClipboardEnabled()) { return false; } StringStorage clipboardString; if (m_clipboard.getString(&clipboardString)) { // if string in clipboard got from server, then don't send him too if (clipboardString == m_strClipboard) { m_strClipboard = _T(""); return true; } m_strClipboard = _T(""); m_pViewerCore->sendCutTextEvent(&clipboardString); } return true; }
void TabsCtrl::processPopupMenu( bool cmdBar, int posX, int posY ) { HMENU hmenu = getContextMenu(); menuUserCmds(hmenu); if (hmenu==NULL) return; if (!cmdBar && activeTab>0) { BOOL result=InsertMenu(hmenu, 0, MF_STRING | MF_BYPOSITION, TabsCtrl::CLOSETAB, TEXT("Close")); result=InsertMenu(hmenu, 1, MF_SEPARATOR | MF_BYPOSITION, 0, NULL); } HWND hWnd=getHWnd(); POINT pt={posX, posY }; if (!cmdBar) ClientToScreen(hWnd, &pt); int cmd=TrackPopupMenuEx(hmenu, (cmdBar)? (TPM_BOTTOMALIGN | TPM_RETURNCMD) : (TPM_TOPALIGN | TPM_RETURNCMD), pt.x, pt.y, hWnd, NULL); if (cmd!=0) { MENUITEMINFO mi; mi.cbSize=sizeof(mi); mi.fMask=MIIM_DATA; GetMenuItemInfo(hmenu, cmd, FALSE, &mi); if (cmd>=TabsCtrl::SWITCH_TAB && cmd<TabsCtrl::USERCMD) { ODR *wt=(ODR*)((void *) mi.dwItemData); //switch to the selected tab switchByODR(wt); } if (cmd>=TabsCtrl::USERCMD) { menuUserActions(cmd, mi.dwItemData); } if (cmd==TabsCtrl::CLOSETAB) { PostMessage(hWnd, WM_COMMAND, cmd, mi.dwItemData); } } DestroyMenu(hmenu); }
void ViewerWindow::dialogProcessInfo() { auto core = m_remoteProcess->getCore(); ProcessDialog dialog(core); Control control = getHWnd(); dialog.setParent(&control); core->setRemoteProcessInterface(&dialog); dialog.onRefreshProcessList(); if (dialog.showModal() == IDOK) { applySettings(); } core->setRemoteProcessInterface(nullptr); }
void VirtualListView::notifyListUpdate( bool redraw ) { if (!odrlist) return; if (!redraw) return; /*int lastY=0; for (ODRList::const_iterator i = odrlist->begin(); i!=odrlist->end(); i++) { lastY+= i->get()->getHeight(); } SCROLLINFO si; si.cbSize=sizeof(SCROLLINFO); si.fMask=SIF_PAGE | SIF_RANGE; si.nPage=clientRect.bottom; si.nMin=0; si.nMax=lastY; SetScrollInfo(thisHWnd, SB_VERT, &si, TRUE);*/ InvalidateRect(getHWnd(), NULL, true); }
HRESULT InputKeyboard::init() { HRESULT hr = 0; LPDIRECTINPUT8 directInput = getDirectInput(); IFFAILED(hr = directInput->CreateDevice (GUID_SysKeyboard, &m_pDev, 0)) { //PUSHERROR("CreateDevice GUID_SysKeyboard error code = %d [/FATAL ERROR/]",hr); return hr; } IFFAILED(hr = m_pDev->SetDataFormat (&c_dfDIKeyboard) ) { //PUSHERROR("SetDataFormat error code = %d [/FATAL ERROR/]",hr); return hr; } HWND hWnd = getHWnd(); //Required for game editor //#ifdef _EDITOR IFFAILED(hr = m_pDev->SetCooperativeLevel( hWnd, DISCL_BACKGROUND | DISCL_NONEXCLUSIVE ) ) //#else //IFFAILED(hr = m_pDev->SetCooperativeLevel(m_InputCore->m_hWnd, DISCL_FOREGROUND | DISCL_EXCLUSIVE)) //#endif //IFFAILED(hr = m_pDev->SetCooperativeLevel (m_InputCore->m_hWnd , DISCL_FOREGROUND | DISCL_EXCLUSIVE)) { //PUSHERROR("SetCooperativeLevel [ DISCL_FOREGROUND | DISCL_NONEXCLUSIVE ] error code = %d [/FATAL ERROR/]",hr); return hr; } IFFAILED( hr = restore() ) { return hr; } setActive( true ); return 0; };
void MainTabs::menuUserActions( int cmdId, DWORD userData ) { Contact * contact= (Contact *)((void*) userData); if (!contact) return; WndRef chat=getWindowByODR(contact); if (!chat) { //Contact::ref r=roster.lock()->findContact(c->jid.getJid()); Contact::ref cref; if (dynamic_cast<MucRoom *>(contact)) { MucGroup::ref roomGrp=boost::dynamic_pointer_cast<MucGroup> (rc->roster->findGroup(contact->jid.getBareJid())); cref=roomGrp->room; } else cref=rc->roster->findContact(contact->jid.getJid()); BOOST_ASSERT(cref.get()); chat=WndRef(new ChatView(getHWnd(), cref)); addWindow(chat); } switchByWndRef(chat); }
void ClientInfoForm::infoArrivedNotify(){ PostMessage(getHWnd(), WM_HTML_UPDATE, 0, (LPARAM)""); }
void VcardForm::onHotSpot( LPCSTR url, LPCSTR param ) { std::string nurl=std::string(url); if (nurl=="load") { wchar_t filename[MAX_PATH]; *filename=0; OPENFILENAME ofn; memset(&ofn, 0, sizeof(OPENFILENAME)); ofn.lStructSize=sizeof(OPENFILENAME); ofn.hwndOwner=getHWnd(); ofn.hInstance=g_hInst; ofn.lpstrFilter=FILEIMGMASK; ofn.nFilterIndex=0; ofn.lpstrFile=filename; ofn.nMaxFile=MAX_PATH; ofn.lpstrTitle=L"Select image file"; ofn.Flags=OFN_FILEMUSTEXIST | OFN_EXPLORER; BOOL result=GetOpenFileNameEx(&ofn); if (!result) return; loadPhoto(filename); vcardArrivedNotify(vcard); return; } if (nurl=="save") { savePhoto(NULL); return; } if (nurl=="clear") { //todo: clear photo JabberDataBlockRef vcardTemp=vcard->findChildNamespace("vCard","vcard-temp"); if (!vcardTemp) return; vcardTemp->removeChild("PHOTO"); vcardArrivedNotify(vcard); return; } if (nurl=="reload") { //todo: re-request vcard return; } if (nurl=="publish") { //todo: publish vcard JabberDataBlockRef vcardTemp=vcard->findChildNamespace("vCard","vcard-temp"); if (!vcardTemp) { vcardTemp=JabberDataBlockRef(new JabberDataBlock("vCard")); vcardTemp->setAttribute("xmlns","vcard-temp"); } JabberDataBlock viq("iq"); viq.setAttribute("to",vcard->getAttribute("from")); viq.setAttribute("type","set"); viq.setAttribute("id","my-vcard-publish"); viq.addChild(vcardTemp); StringMapRef m=HtmlView::splitHREFtext(param); for (StringMap::iterator i=m->begin(); i!=m->end(); i++) { std::string key=i->first; std::string value=i->second; std::string key2; int k2=key.find('#'); if (k2>0) { key2=key.substr(k2+1, key.length()-k2-1); key=key.substr(0, k2); } JabberDataBlockRef child=vcardTemp->getChildByName(key.c_str()); if (!child) child=vcardTemp->addChild(key.c_str(), NULL); if (k2>0) { JabberDataBlockRef child2=child->getChildByName(key2.c_str()); if (!child2) child2=child->addChild(key2.c_str(), NULL); child=child2; } child->setText(value); } /*if (img) if (img->getHBmp()) { std::wstring imgFile=appRootPath+L"$tmpimg.jpg"; loadPhoto(imgFile.c_str()); }*/ //StringRef result=viq->toXML(); //todo: verify result rc.lock()->jabberStream->sendStanza(viq); vcardArrivedNotify(vcard); return; } }
BOOL VcardForm::savePhoto( LPCTSTR path ) { if (!vcard) return FALSE; JabberDataBlockRef vcardTemp=vcard->findChildNamespace("vCard", "vcard-temp"); if (!vcardTemp) return FALSE; JabberDataBlockRef photo=vcardTemp->getChildByName("PHOTO"); if (!photo) return FALSE; JabberDataBlockRef binval=photo->getChildByName("BINVAL"); if (!binval) return FALSE; const std::string &data=binval->getText(); int dstLen=base64::base64DecodeGetLength(data.length()); char *dst=new char[dstLen]; dstLen=base64::base64Decode2(dst, data.c_str(), data.length()); wchar_t filename[MAX_PATH]; if (!path) { wchar_t *extm=ext[detectMime(dst)]; *filename=0; wcscpy_s(filename, MAX_PATH, extm); OPENFILENAME ofn; memset(&ofn, 0, sizeof(OPENFILENAME)); ofn.lStructSize=sizeof(OPENFILENAME); ofn.hwndOwner=getHWnd(); ofn.hInstance=g_hInst; //GetModuleHandle(NULL); ofn.lpstrFilter=FILEIMGMASK; ofn.nFilterIndex=0; ofn.lpstrFile=filename; ofn.nMaxFile=MAX_PATH; //ofn.lpstrInitialDir = ; ofn.lpstrTitle=L"Save image as"; ofn.lpstrDefExt=extm+2; ofn.Flags=OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT; BOOL result = GetSaveFileNameEx(&ofn); if (!result) return FALSE; path=filename; } std::string vcard_to = vcard->getAttribute("from"); size_t i=0; while (i<vcard_to.length()) { if (vcard_to[i]=='/') { vcard_to[i]='.'; continue; } i++; } //Log::getInstance()->msg("[***]CASHED Image OK("+vcard_from.substr(0,vcard_from.find("/",0))+")"); std::wstring new_path = appRootPath + L"userdata\\avatars\\" + utf8::utf8_wchar(vcard_to) + L".jpg"; std::wstring imageFile=appRootPath + L"userdata\\avatars\\" + utf8::utf8_wchar(vcard_to) + L".jpg"; //int result=MessageBox(NULL, new_path.c_str(), TEXT("123"), MB_YESNO | MB_ICONWARNING ); LPCTSTR path_save=imageFile.c_str(); Log::getInstance()->msg("[***Get.]("+vcard_to+")"); HANDLE file=CreateFile(path_save, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, 0, NULL); DWORD dwProcessed; if (file==INVALID_HANDLE_VALUE) { delete dst; return FALSE; } WriteFile(file, dst, dstLen, &dwProcessed, NULL); CloseHandle(file); //создание файла Contact::ref contact; contact=rc.lock()->roster->getContactEntry(vcard_to); contact->img_avatar.reset(); contact->img_avatar=ImageRef(new Image(imageFile.c_str())); img.reset(); img=ImageRef(new Image(imageFile.c_str())); Log::getInstance()->msg("[***SUCCESS.]("+contact->statusMessage+")"); //привязка к контакту /* void Log::msg(const std::string &message){ addLog(utf8::utf8_wchar(message).c_str()); } void Log::addLog(const wchar_t * msg) {} */ delete dst; return TRUE; }
void VcardForm::vcardArrivedNotify(JabberDataBlockRef vcard){ this->vcard=vcard; PostMessage(getHWnd(), WM_HTML_UPDATE, 0, (LPARAM)""); }
BOOL DlgOption::SubExclude::handleMsg(UINT msg, WPARAM, LPARAM lParam) { switch (msg) { case WM_WINDOWPOSCHANGED: { RECT rClient, rWnd; GetClientRect(getHWnd(), &rClient); // clist rWnd = utils::getWindowRect(getHWnd(), IDC_CONTACTS); rWnd.right = rClient.right; rWnd.bottom = rClient.bottom; utils::moveWindow(getHWnd(), IDC_CONTACTS, rWnd); } break; case WM_NOTIFY: { NMHDR* p = reinterpret_cast<NMHDR*>(lParam); if (p->idFrom != IDC_CONTACTS) break; HWND hCList = GetDlgItem(getHWnd(), IDC_CONTACTS); switch (p->code) { case CLN_NEWCONTACT: case CLN_LISTREBUILT: updateAllContacts(hCList); updateAllGroups(hCList, reinterpret_cast<HANDLE>(SendMessage(hCList, CLM_GETNEXTITEM, CLGN_ROOT, 0)), m_hItemAll); break; case CLN_CONTACTMOVED: updateAllGroups(hCList, reinterpret_cast<HANDLE>(SendMessage(hCList, CLM_GETNEXTITEM, CLGN_ROOT, 0)), m_hItemAll); break; case CLN_OPTIONSCHANGED: customizeList(hCList); break; case NM_CLICK: NMCLISTCONTROL* pNM = reinterpret_cast<NMCLISTCONTROL*>(p); if (pNM->iColumn == -1) break; DWORD dwHitFlags = 0; HANDLE hItem = reinterpret_cast<HANDLE>(SendMessage(hCList, CLM_HITTEST, reinterpret_cast<WPARAM>(&dwHitFlags), MAKELPARAM(pNM->pt.x, pNM->pt.y))); if (!hItem || !(dwHitFlags & CLCHT_ONITEMEXTRA)) break; int iImage = SendMessage(hCList, CLM_GETEXTRAIMAGE, reinterpret_cast<WPARAM>(hItem), MAKELPARAM(pNM->iColumn, 0)); if (iImage != 0xFF) { iImage = (iImage == 0) ? 1 : 0; int itemType = SendMessage(hCList, CLM_GETITEMTYPE, reinterpret_cast<WPARAM>(hItem), 0); if (itemType == CLCIT_CONTACT) setAll(hCList, hItem, iImage, false); else if (itemType == CLCIT_INFO) setAll(hCList, hItem, iImage, true); else if (itemType == CLCIT_GROUP) { if (hItem = reinterpret_cast<HANDLE>(SendMessage(hCList, CLM_GETNEXTITEM, CLGN_CHILD, reinterpret_cast<LPARAM>(hItem)))) setAll(hCList, hItem, iImage, true); } // update groups updateAllGroups(hCList, reinterpret_cast<HANDLE>(SendMessage(hCList, CLM_GETNEXTITEM, CLGN_ROOT, 0)), m_hItemAll); // mark as dirty m_bChanged = true; getParent()->settingsChanged(); } break; } } break; case WM_DESTROY: IconLib::unregisterCallback(staticRecreateIcons, reinterpret_cast<LPARAM>(this)); ImageList_Destroy(reinterpret_cast<HIMAGELIST>(SendDlgItemMessage(getHWnd(), IDC_CONTACTS, CLM_GETEXTRAIMAGELIST, 0, 0))); break; } return FALSE; }
bool BaseWindow::wndProc(UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_COMMAND: return onCommand(wParam, lParam); case WM_NOTIFY: return onNotify((int)wParam, (LPNMHDR)lParam); case WM_SYSCOMMAND: return onSysCommand(wParam, lParam); case WM_LBUTTONDOWN: case WM_LBUTTONUP: case WM_MBUTTONDOWN: case WM_MBUTTONUP: case WM_RBUTTONDOWN: case WM_RBUTTONUP: case WM_MOUSEWHEEL: case WM_MOUSEMOVE: { unsigned char mouseButtons = 0; mouseButtons |= LOWORD(wParam) & MK_RBUTTON ? MOUSE_RDOWN : 0; mouseButtons |= LOWORD(wParam) & MK_MBUTTON ? MOUSE_MDOWN : 0; mouseButtons |= LOWORD(wParam) & MK_LBUTTON ? MOUSE_LDOWN : 0; // Translate position from LPARAM to POINT. POINTS points = MAKEPOINTS(lParam); POINT point; point.x = points.x; point.y = points.y; unsigned short wheelSpeed = 0; if (message == WM_MOUSEWHEEL) { // Get speed wheel and set mouse button. signed short wheelSignedSpeed = static_cast<signed short>(HIWORD(wParam)); if (wheelSignedSpeed < 0) { mouseButtons |= MOUSE_WDOWN; wheelSpeed = - wheelSignedSpeed / WHEEL_DELTA; } else { mouseButtons |= MOUSE_WUP; wheelSpeed = wheelSignedSpeed / WHEEL_DELTA; } // In some cases wheelSignedSpeed can be smaller than the WHEEL_DELTA, // then wheelSpeed set to 1, but not 0. if (wheelSpeed == 0) { wheelSpeed = 1; } // If windows-message is WHEEL, then need to translate screen coordinate to client. if (!ScreenToClient(getHWnd(), &point)) { point.x = -1; point.y = -1; } } // Notify window about mouse-event. return onMouse(mouseButtons, static_cast<unsigned short>(wheelSpeed), point); } } return onMessage(message, wParam, lParam); }
void VirtualListView::eventOk() { VirtualListElement *velement=dynamic_cast<VirtualListElement *>(cursorPos.get()); if (velement) velement->OnMenuCommand(IDOK, getHWnd(), NULL); }