Пример #1
0
// **********************************************************
//		get_ErrorMsg
// **********************************************************
STDMETHODIMP CUndoList::get_ErrorMsg(long ErrorCode, BSTR *pVal)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState())
		USES_CONVERSION;
	*pVal = A2BSTR(ErrorMsg(ErrorCode));
	return S_OK;
}
Пример #2
0
void __declspec(dllexport) __stdcall
vbCSLToVariant( char **papszList, VARIANT *out_list )

{
    USES_CONVERSION;
    SAFEARRAYBOUND sBounds;
    SAFEARRAY *result;
    long i, nLength = CSLCount( papszList );

/* -------------------------------------------------------------------- */
/*      Create safe array result.                                       */
/* -------------------------------------------------------------------- */
    sBounds.lLbound = 1;
    sBounds.cElements = nLength;

    result = SafeArrayCreate( VT_BSTR, 1, &sBounds );

    for( i = 1; i <= nLength; i++ )
    {
        SafeArrayPutElement( result, &i,
                             SysAllocString( A2BSTR(papszList[i-1]) ) );
//        MessageBox( NULL, papszList[i-1], "Metadata Item", MB_OK );
    }

/* -------------------------------------------------------------------- */
/*      Assign to variant.                                              */
/* -------------------------------------------------------------------- */
    VariantClear( out_list );

    out_list->vt = VT_BSTR | VT_ARRAY;
    out_list->parray = result;
}
Пример #3
0
void UPnP::ClosePort()
{
    if(remote_port_ == 0)
        return;

#ifdef _MSC_VER
    HRESULT hr;

    IUPnPNAT* upnpnat;
    hr = CoCreateInstance (CLSID_UPnPNAT, NULL, CLSCTX_INPROC_SERVER, IID_IUPnPNAT, (void**)&upnpnat);
    if(FAILED(hr) || !upnpnat)
        return;

    IStaticPortMappingCollection* upnpspmc = NULL;
    hr = upnpnat->get_StaticPortMappingCollection(&upnpspmc);
    if(FAILED(hr) || !upnpspmc)
        return;

    BSTR bstrProtocol = A2BSTR("TCP");

    hr = upnpspmc->Remove(remote_port_, bstrProtocol);

    if(FAILED(hr))
        LOG.getlasterror("Automatisches Entfernen des Portforwardings mit UPnP fehlgeschlagen\nFehler");

    SysFreeString(bstrProtocol);

    if(FAILED(hr))
        return;
#else
    int hr;
    UPNPDev* devicelist = NULL;
#ifdef UPNPDISCOVER_SUCCESS
    int upnperror = 0;
    devicelist = upnpDiscover(2000, NULL, NULL, 0, 0 /* ipv6 */, &upnperror);
#else
    devicelist = upnpDiscover(2000, NULL, NULL, 0);
#endif
    if(!devicelist)
        return;

    UPNPUrls urls;
    IGDdatas data;
    hr = UPNP_GetValidIGD(devicelist, &urls, &data, NULL, 0);
    if(hr == 1 || hr == 2)
    {
        std::stringstream p;
        p << remote_port_;
        hr = UPNP_DeletePortMapping(urls.controlURL, data.first.servicetype, p.str().c_str(), "TCP", NULL);
    }

    freeUPNPDevlist(devicelist);

    if(hr != 0)
        return;
#endif

    remote_port_ = 0;
}
Пример #4
0
// *****************************************************************
//		SetDrawingKey()
// *****************************************************************
void CMapView::SetDrawingKey(long DrawHandle, LPCTSTR lpszNewValue)
{
	if( IsValidDrawList (DrawHandle) )
	{	
		::SysFreeString(_allDrawLists[DrawHandle]->key);
		_allDrawLists[DrawHandle]->key = A2BSTR(lpszNewValue);
	}
	else
		ErrorMessage(tkINVALID_DRAW_HANDLE);
}
Пример #5
0
int __declspec(dllexport) __stdcall
vbCStringToVB6( VARIANT *vResult, char *pszInput )

{
    USES_CONVERSION;

    VariantClear( vResult );

    if( pszInput != NULL )
    {
        vResult->vt = VT_BSTR;
        vResult->bstrVal = SysAllocString( A2BSTR(pszInput) );
        return 0;
    }
    else
        return 1;
}
/*
================
CSyntaxRichEditCtrl::FindNext
================
*/
bool CSyntaxRichEditCtrl::FindNext(const char *find, bool matchCase, bool matchWholeWords, bool searchForward)
{
	long selStart, selEnd, flags, search, length, start;
	tom::ITextRange *range;

	if (find[0] == '\0') {
		return false;
	}

	GetSel(selStart, selEnd);

	flags = 0;
	flags |= matchCase ? tom::tomMatchCase : 0;
	flags |= matchWholeWords ? tom::tomMatchWord : 0;

	if (searchForward) {
		m_TextDoc->Range(selEnd, GetTextLength(), &range);
		search = GetTextLength() - selEnd;
	} else {
		m_TextDoc->Range(0, selStart, &range);
		search = -selStart;
	}

	if (range->FindShit(A2BSTR(find), search, flags, &length) == S_OK) {

		m_TextDoc->Freeze(NULL);

		range->get_Start(&start);
		range->Release();

		SetSel(start, start + length);

		int line = Max((int) LineFromChar(start) - 5, 0);
		LineScroll(line - GetFirstVisibleLine(), 0);

		UpdateVisibleRange();

		m_TextDoc->Unfreeze(NULL);
		return true;
	} else {
		range->Release();
		return false;
	}
}
Пример #7
0
STDMETHODIMP CSub::GetOpName(BSTR *pOpName)
{
	*pOpName = A2BSTR(_T("Sub"));
	return S_OK;
}
Пример #8
0
STDMETHODIMP CPlus::GetOpName(BSTR *pOpName)
{
	*pOpName = A2BSTR(_T("Plus"));
	return S_OK;
}
Пример #9
0
/**
 *  Erstellt per UPnP ein Portforwarding.
 *
 *  @author FloSoft
 */
bool UPnP::OpenPort(const unsigned short& port)
{
    if(remote_port_ != 0)
        ClosePort();

    remote_port_ = port;

#ifdef _MSC_VER
    HRESULT hr;

    CoInitialize(NULL);

    IUPnPNAT* upnpnat;
    hr = CoCreateInstance (CLSID_UPnPNAT, NULL, CLSCTX_INPROC_SERVER, IID_IUPnPNAT, (void**)&upnpnat);
    if(FAILED(hr) || !upnpnat)
    {
        if(!upnpnat)
            hr = E_NOINTERFACE;
        SetLastError(hr);
        return false;
    }

    IStaticPortMappingCollection* upnpspmc = NULL;
    hr = upnpnat->get_StaticPortMappingCollection(&upnpspmc);
    if(FAILED(hr) || !upnpspmc)
    {
        if(!upnpspmc)
            hr = E_NOINTERFACE;
        SetLastError(hr);
        return false;
    }

    std::string local_address;
    std::vector<std::string> addresses = GetAllv4Addresses();

    // if we have multiple addresses, search the private one
    if(addresses.size() > 1)
    {
        for(std::vector<std::string>::iterator addr = addresses.begin(); addr != addresses.end(); ++addr)
        {
            std::string ss = *addr;
            std::stringstream s, sc;
            s << ss;
            std::getline(s, ss, '.');
            sc << ss << " ";
            std::getline(s, ss, '.');
            sc << ss << " ";

            int a, b;
            sc >> a;
            sc >> b;

            int ab = (a << 24) | (b << 16);

            if( (ab & 0xff000000) == 0x0a000000 || // 10.0.0.0/8
                    (ab & 0xff000000) == 0x7f000000 || // 127.0.0.0/8
                    (ab & 0xfff00000) == 0xac100000 || // 172.16.0.0/12
                    (ab & 0xffff0000) == 0xc0a80000 )  // 192.168.0.0/16
                local_address = *addr;
        }
    }

    // otherwise use the first one
    if(local_address == "" && !addresses.empty())
        local_address = addresses.front();

    // I hope we found one ...
    if(local_address == "")
    {
        SetLastError(E_FAIL);
        return false;
    }

    BSTR bstrProtocol = A2BSTR("TCP");
    BSTR bstrLocalAddress = A2BSTR(local_address.c_str());
    BSTR bstrDescription = A2BSTR("Return To The Roots");

    IStaticPortMapping* upnpspm = NULL;
    hr = upnpspmc->Add(port, bstrProtocol, port, bstrLocalAddress, VARIANT_TRUE, bstrDescription, &upnpspm);

    SysFreeString(bstrProtocol);
    SysFreeString(bstrLocalAddress);
    SysFreeString(bstrDescription);

    if(SUCCEEDED(hr) && !upnpspm)
        hr = E_NOINTERFACE;

    SetLastError(hr);

    if(SUCCEEDED(hr) && upnpspm)
        return true;
#else
    int hr;
    UPNPDev* devicelist = NULL;
#ifdef UPNPDISCOVER_SUCCESS
    int upnperror = 0;
    devicelist = upnpDiscover(2000, NULL, NULL, 0, 0 /* ipv6 */, &upnperror);
#else
    devicelist = upnpDiscover(2000, NULL, NULL, 0);
#endif
    if(!devicelist)
        return false;

    UPNPUrls urls;
    IGDdatas data;
    char lanAddr[64];
    hr = UPNP_GetValidIGD(devicelist, &urls, &data, lanAddr, sizeof(lanAddr));

    if(hr == 1 || hr == 2)
    {
        std::stringstream p;
        p << port;

#ifdef UPNPDISCOVER_SUCCESS
        hr = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype, p.str().c_str(), p.str().c_str(), lanAddr, "Return To The Roots", "TCP", NULL, NULL);
#else
        hr = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype, p.str().c_str(), p.str().c_str(), lanAddr, "Return To The Roots", "TCP", NULL);
#endif
    }

    freeUPNPDevlist(devicelist);

    if(hr == 0)
        return true;
#endif
    return false;
}
Пример #10
0
// --------------------------------------------------------------------------------------------
// EditierDialog anzeigen;
// in ulCnt wird die Anzahl und in ppIOG werden die ObjektGeometrien der aktuell editierten
// Objekte übergeben;
// wenn Linienobjekte verlängert werden sollen, werden in iCloseCnt, plCloseX und plCloseY
// die Anzahl und die Koordinaten der Endpunkte dieser Linienobjekte erwartet;
// in piResult wird das Ergebnis der DialogBedienung (OK, Abbrechen, Fortsetzen, Inselbeginn)
// zurückgegeben
STDMETHODIMP CGeoEditExtension::ShowEditDialog (LPCSTR pcCapt, LPCSTR pcRegKey, ulong ulCnt,
	 IUnknown** ppIOG, int* piGrabCnt, long* pGrabPktX, long* pGrabPktY, HRESULT hrComBorder,
	 long lComONr, int iCloseCnt, long* plCloseX, long* plCloseY, int* piResult)
{
	_ASSERTE (pcRegKey != NULL);
	_ASSERTE (piResult != NULL);

// Neueditierung (true) oder Modifizierung (false), also z.B. Linienverlängerung bzw.
// Inselergänzung
bool bNewEdit = (0 == strcmp (g_cbGeoEditNewPoint, pcRegKey) ||
				 0 == strcmp (g_cbGeoEditNewLine, pcRegKey) ||
				 0 == strcmp (g_cbGeoEditNewArea, pcRegKey));

// !!!! es wird vorläufig nur EIN ppIOG-Objekt berücksichtigt !!!!!
WObjektGeometrie wObj = *ppIOG;		// mit implizitem QueryInterface

CEditDlg sheetED (pcCapt, wObj, lComONr, piGrabCnt);
// eigene Pages zum	Einfügen in sheetED
CEditBaseDlg pageEB (pGrabPktX, pGrabPktY, hrComBorder, iCloseCnt,
					 plCloseX, plCloseY, bNewEdit);
CEditCoordDlg pageEC (iCloseCnt, plCloseX, plCloseY);

	sheetED.AddPage (&pageEB);	// 1. Page einfügen
	sheetED.AddPage (&pageEC);	// nächste Page hinzufügen

	// zusätzliche Pages über die Registry nachladen
	sheetED.LoadExtPagesFromRegistry (pcRegKey, ulCnt, ppIOG);

	sheetED.Show();

	if (piGrabCnt) *piGrabCnt = sheetED.GetGrabCnt();

	*piResult = sheetED.Result();

int iMarkGr;	// Markergröße
Rectangle Rec;	// rechteckiger Bereich, der (evtl.) gezeichnet werden soll

	m_wTopObjs->GetMarkerSizeBS (&iMarkGr);
	wObj->RectangleToDraw2 ((RECT*)&Rec, iMarkGr);

HRESULT hrRet = S_OK;

	switch (*piResult)
	{
		case IDOK:
			if (bNewEdit)
			{
			BSTR bsObjName = A2BSTR("");	// noch leerer Objektname  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

				hrRet = StoreNewObject (wObj, bsObjName);
				if (S_FALSE == hrRet) {
				// Objekt wurde wieder gelöscht, IDCANCEL simulieren
					if (piGrabCnt) 
						*piGrabCnt = 0;
					DEX_RePaintRectWait (Rec);	// Objekt auf Bildschirm durch Zeichnen löschen
					*piResult = IDCANCEL;
					return S_FALSE;
				}
			}
			// die Linienverlängerungen werden in LineElongation.cpp abgespeichert;
			// Flächenobjekte mit hinzugefügten Inseln werden in IslandAdd.cpp abgespeichert
			else if	(0 != strcmp (g_cbGeoEditLineElongat, pcRegKey) &&
					 0 != strcmp (g_cbGeoEditIslandAdd, pcRegKey))
			{
				_ASSERTE (false);
				hrRet = E_UNEXPECTED;
			}

			if (piGrabCnt) *piGrabCnt = 0;

			// für "Insel hinzufügen" erfolgt das Zeichnen wegen evtl. Geometriefehler auf
			// jeden Fall in StoreAreaWithNewIsland()
			if (0 != strcmp (g_cbGeoEditIslandAdd, pcRegKey))
				DEX_RePaintRectWait (Rec);
			break;

		case IDCANCEL:
			if (piGrabCnt) *piGrabCnt = 0;
			DEX_RePaintRectWait (Rec);	// Objekt auf Bildschirm durch Zeichnen löschen
			break;

		case IDB_CONTINUE:
		case IDB_ISLAND:
			break;

		default:
			_ASSERTE (false);
			hrRet = E_UNEXPECTED;
			break;
	}

	return hrRet;

} // ShowEditDialog
Пример #11
0
// --------------------------------------------------------------------------------------------
// Doppelklick auf linke Maustaste
void CNewArea::LeftDoubleClick (void)
{
// Zeichenoperation beenden
    if (m_wDragObj.IsValid())
	{
		m_wDragObj->DragTerminate();
		m_wDragObj.Assign (NULL);
	}

    m_pVWnd->MouseTrap (FALSE);

// letzte Kontur (evtl.) noch schließen
KoOrd* plXK; KoOrd* plYK;
long lCnt;
long* plCnt;

	m_wObj->GetX ((void**)&plXK);
	m_wObj->GetY ((void**)&plYK);
	m_wObj->GetCnt (&lCnt);
	m_wObj->GetKCnt (&m_iKCnt);
	m_wObj->GetLPCnt (&plCnt);

long lSPA = plCnt[m_iKCnt-1];	// Anzahl der Stützpunkte der letzten Kontur
long lInd = lCnt - lSPA;		// Index des Anfangspunktes der letzten Kontur
	
	if (lSPA >= 2 &&
		(plXK[lInd] != plXK[lCnt-1] ||	// Kontur ist noch nicht
		plYK[lInd] != plYK[lCnt-1]))	//  zugezogen
		m_wObj->AddPunkt (plXK[lInd], plYK[lInd], -1, m_iKCnt-1);	// zuziehen

ulong ulLastIdent = DEX_GetLastIdent();

// Bereich neu zeichnen vorbereiten
int iMarkGr;	// Markergröße
Rectangle Rec;	// umschließendes Rechteck des aktuell editierten Objektes

    m_wTopObjs->GetMarkerSizeBS (&iMarkGr);
    m_wObj->RectangleToDraw2 ((RECT*)&Rec, iMarkGr);

	if (0 != ulLastIdent && (ulong)-1 != ulLastIdent)	// in der Projekt-INI steht ein gültiger Identifikator
	{
	// Identifikator sowie Objektname hinzufügen und neues Objekt speichern
   		m_wObj->SetIdent (ulLastIdent);

	BSTR bsObjName = A2BSTR("");	// noch leerer Objektname  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	
		m_wEdExSite->StoreNewObject (m_wObj, bsObjName);
	}
	else					// in der Projekt-INI steht kein gültiger Identifikator
		ShowDialogForArea();

// Bereich neu zeichnen
	m_wTopObjs->DeleteTopicalObjectGeometry (m_wObj);
   	m_wObj.Assign (NULL);
    DEX_RePaintRectWait (Rec);
    m_pVWnd->Update();		// sofort zeichnen

	if (m_wRestrLine1.IsValid() || m_wRestrLine2.IsValid())
		DEX_ChangeActiveTool (ID_TOOL_DESIGNSTOP);	// DesignMode beenden

/* Können die nachfolgenden Zeilen wegen des am 24.02.99 in CGeoEditExtension::WindowsNotification
   (GeoEdit.cpp) eingefügten "case WM_MOUSEMOVE:" jetzt wegfallen ????????
CursForm CF;	// wieder Erläuterung der aktuellen CursorForm in Statuszeile

    m_wEdExSite->GetCursor (&CF);
   	m_wEdExSite->SetCursor (CF, TRUE);
*/
} // LeftDoubleClick
Пример #12
0
LRESULT CLXWebSiteApp::OnFileNewSite(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
//	USES_CONVERSION;

	CComPtr<ILXFrameworkFrame> lxframe;
	m_spAddinSite->GetFrame(&lxframe);

	CComQIPtr<IUIWnd> wnd = lxframe;
	HWND hWnd;
	wnd->get_hwnd(&hWnd);

	if (TRUE)
	{
		CPropertySheet* sheet = new CPropertySheet("New Site", 0, hWnd);
	//	sheet->SetWizardMode();
	//	sheet->m_psh.dwFlags |= PSH_WIZARD97;
		sheet->SetWatermark(MAKEINTRESOURCE(IDB_NEWSITE_WATERMARK));

		CNewSiteData data;

		CNewSiteBeginDlg begindlg;
		begindlg.m_psp.dwFlags |= PSP_HIDEHEADER;
		begindlg.SetHeaderTitle("LocalSite");

		CNewSiteFinishDlg finishdlg;
		finishdlg.m_psp.dwFlags |= PSP_HIDEHEADER;
		finishdlg.SetHeaderTitle("LocalSite");

		CNewSiteSingleWorkgroupDlg singleworkdlg;
		singleworkdlg.m_data = &data;
		singleworkdlg.m_nWorkgroup = 0;
		singleworkdlg.SetHeaderTitle("SingleWorkgroup");

		CNewSiteLocalSiteOptionsDlg localsitedlg;
		localsitedlg.m_data = &data;
		localsitedlg.m_nLocalSite = 0;
		localsitedlg.SetHeaderTitle("LocalSite");

		CNewSiteLocalNameDlg localnamedlg;
		localnamedlg.m_data = &data;
		localnamedlg.SetHeaderTitle("LocalName");

		CNewSiteFTPDlg ftpdlg;
		ftpdlg.m_data = &data;
		ftpdlg.SetHeaderTitle("FTP");

		CNewSiteWorkgroupOptionsDlg workoptionsdlg;
		workoptionsdlg.m_data = &data;
		workoptionsdlg.SetHeaderTitle("FTP");

		CNewSiteWorkgroupLogonDlg worklogondlg;
		worklogondlg.m_data = &data;
		worklogondlg.m_server = L"213.115.5.39";
		worklogondlg.m_username = L"Sigurd";
		worklogondlg.m_password = L"testing";
		worklogondlg.SetHeaderTitle("Workgroup Logon");

		sheet->AddPage(begindlg);
		sheet->AddPage(singleworkdlg);
		sheet->AddPage(localsitedlg);
		sheet->AddPage(localnamedlg);
		sheet->AddPage(ftpdlg);
		sheet->AddPage(finishdlg);
		sheet->AddPage(workoptionsdlg);
		sheet->AddPage(worklogondlg);

		sheet->DoModal();

		if (singleworkdlg.m_nWorkgroup == 0)
		{
			if (localnamedlg.m_localSitePath.GetLength() && localnamedlg.m_siteName.GetLength())
			{
				CComObject<CWebSite>* pWebSite;
				CComObject<CWebSite>::CreateInstance(&pWebSite);
				if (pWebSite)
				{
					pWebSite->AddRef();

					pWebSite->SetApp(this);

					HRESULT hr = pWebSite->m_webSite.CoCreateInstance(CLSID_LXLocalWebSite);
					if (SUCCEEDED(hr))
					{
						HRESULT hr = pWebSite->m_webSite->NewDocument(A2BSTR(localnamedlg.m_localSitePath), A2BSTR(localnamedlg.m_siteName));

						if (SUCCEEDED(hr))
						{
							CComQIPtr<IEFrame> eframe = lxframe;
							pWebSite->ShowViews(eframe);

							return 0;
						}
						else
						{
						// TODO, use IErrorInfo etc
							MessageBox(hWnd, "Failed to create Local WebSite", "LXWebSite", MB_OK);
						}
					}

					pWebSite->Release();
				}
			}
		}
		else if (singleworkdlg.m_nWorkgroup == 1)
		{
#if 0
			COAUTHIDENTITY cauthid;
			cauthid.User = worklogondlg.m_username;
			cauthid.UserLength = worklogondlg.m_username.length();
			cauthid.Domain = L"WORKGROUP";
			cauthid.DomainLength = wcslen(cauthid.Domain);
			cauthid.Password = worklogondlg.m_password;
			cauthid.PasswordLength = worklogondlg.m_password.length();
			cauthid.Flags = SEC_WINNT_AUTH_IDENTITY_UNICODE;

			COAUTHINFO cauthi;
			cauthi.dwAuthnSvc = RPC_C_AUTHN_WINNT;
			cauthi.dwAuthzSvc = RPC_C_AUTHZ_NONE;
			cauthi.pwszServerPrincName = NULL;
			cauthi.dwAuthnLevel = RPC_C_AUTHN_LEVEL_CONNECT;
			cauthi.dwImpersonationLevel = RPC_C_IMP_LEVEL_IMPERSONATE;
			cauthi.pAuthIdentityData = &cauthid;
			cauthi.dwCapabilities = EOAC_NONE;

			COSERVERINFO csi;
			csi.dwReserved1 = 0;
			csi.pwszName = worklogondlg.m_server;
			csi.pAuthInfo = &cauthi;
			csi.dwReserved2 = 0;

			MULTI_QI qi;
			qi.pIID = &XMILLWEBLib::IID_IXmillWebSite;
			qi.pItf = NULL;
			qi.hr = 0;

			HRESULT hr = CoCreateInstanceEx(XMILLWEBLib::CLSID_XmillWebSite, NULL, CLSCTX_SERVER/*CLSCTX_ALL*/, &csi, 1, &qi);

			if (SUCCEEDED(qi.hr))
			{
				XMILLWEBLib::IXmillWebSitePtr webSite;//(L"XMillWeb.WebSite");

				CComQIPtr<IClientSecurity> csec = qi.pItf;

				hr = CoSetProxyBlanket(qi.pItf, 
					cauthi.dwAuthnSvc,
					cauthi.dwAuthzSvc,
					cauthi.pwszServerPrincName,
					cauthi.dwAuthnLevel,
					cauthi.dwImpersonationLevel,
					cauthi.pAuthIdentityData,
					cauthi.dwCapabilities);

				webSite = qi.pItf;
				qi.pItf->Release();

				try
				{
					CComPtr<ILDOMDocument> document;
					document.CoCreateInstance(CLSID_LDOMDocument);
					VARIANT_BOOL bsuccess;
					document->loadXML(L"<website/>", &bsuccess);

					CComPtr<ILDOMElement> documentElement;
					document->get_documentElement(&documentElement);
					documentElement->setAttribute(L"name", L"TestSite1");

					BSTR bxml;
					document->saveXML(NULL, &bxml);
					_bstr_t xml = _bstr_t(bxml, false);

					long websiteID = webSite->NewWebSite(xml);
				}
				catch (_com_error &e)
				{
					ComError(e);
				}
			}
#endif
		}
	}
	return 0;
}
Пример #13
0
STDMETHODIMP CMapiWrapper::GetProfilelist(VARIANT *Profiles,BSTR *statusmessage)
{
    // TODO: Add your implementation code here
    dlog.trace(L" Begin Mapiwrapper GetProfilelist");
    HRESULT hr = S_OK;
	CComBSTR status = L"";

    hr = MAPIInitialize(NULL);
	if( hr != S_OK)
	{
            
		
		LPCSTR temp = format_error(hr).c_str();
		
		status.AppendBSTR(L" MapiInitialize error ");
		status.AppendBSTR(A2BSTR(temp));
		
                dlog.err(status);
		*statusmessage =  status;

                return hr;
	}

    Zimbra::Mapi::Memory::SetMemAllocRoutines(NULL, MAPIAllocateBuffer, MAPIAllocateMore,
        MAPIFreeBuffer);

    vector<string> vProfileList;
     hr = exchadmin->GetAllProfiles(vProfileList);

	 if( hr != S_OK)
	{
		
		LPCSTR temp = format_error(hr).c_str();
		
		status.AppendBSTR(L" GetAllProfiles error ");
		status.AppendBSTR(A2BSTR(temp));
		dlog.err(status);
		*statusmessage =  status;

     return hr;
	}
         if(vProfileList.size() == 0)
         {
            dlog.err(L"No profiles returned for GetAllProfiles");
			status = L"No profiles";
            *statusmessage =  status;
			status.Detach();
            return S_OK;

         }
    vector<CComBSTR> tempvectors;

    std::vector<string>::iterator its;

    for (its = (vProfileList.begin()); its != vProfileList.end(); its++)
    {
        string str = (*its).c_str();
        CComBSTR temp = SysAllocString(str_to_wstr(str).c_str());

        tempvectors.push_back(temp);
    }
    VariantInit(Profiles);
    Profiles->vt = VT_ARRAY | VT_BSTR;

    SAFEARRAY *psa;
    SAFEARRAYBOUND bounds = { (ULONG)vProfileList.size(), 0 };

    psa = SafeArrayCreate(VT_BSTR, 1, &bounds);

    BSTR *bstrArray;

    SafeArrayAccessData(psa, (void **)&bstrArray);

    std::vector<CComBSTR>::iterator it;
    int i = 0;

    for (it = (tempvectors.begin()); it != tempvectors.end(); it++, i++)
        bstrArray[i] = SysAllocString((*it).m_str);
    SafeArrayUnaccessData(psa);
    Profiles->parray = psa;

	*statusmessage =  status;
        status.Detach();

	MAPIUninitialize();

        dlog.trace(L" End Mapiwrapper GetProfilelist");
    return hr;
}
Пример #14
0
STDMETHODIMP
CSVNStatus::get_name(BSTR *pVal)
{
	*pVal = A2BSTR(pszName);
	return S_OK;
}
Пример #15
0
LRESULT CLXWebSiteApp::OnFileServers(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
	CComPtr<ILXFrameworkFrame> lxframe;
	m_spAddinSite->GetFrame(&lxframe);

	CComQIPtr<IUIWnd> wnd = lxframe;
	HWND hWnd;
	wnd->get_hwnd(&hWnd);

	CServersDlg dlg;

	for (int i = 0; i < m_servers.GetSize(); i++)
	{
		CComObject<CServer>* pServer;
		CComObject<CServer>::CreateInstance(&pServer);
		pServer->AddRef();

		*pServer = *m_servers[i];
		dlg.m_servers.Add(pServer);
	}

	if (dlg.DoModal() == IDOK)
	{
		int i;
		for (i = 0; i < m_servers.GetSize(); i++)
		{
			m_servers[i]->Release();
		}
		m_servers.RemoveAll();

		for (i = 0; i < dlg.m_servers.GetSize(); i++)
		{
			CComObject<CServer>* pServer;
			CComObject<CServer>::CreateInstance(&pServer);
			pServer->AddRef();

			*pServer = *dlg.m_servers[i];
			m_servers.Add(pServer);
		}

		TCHAR appdata[MAX_PATH];
		SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, 0, appdata);

		TCHAR pathname[MAX_PATH];
		_makepath(pathname, NULL, appdata, "LXFramework", NULL);

		_mkdir(pathname);

		TCHAR filename[MAX_PATH];
		_makepath(filename, NULL, pathname, "servers.xml", NULL);

		CComPtr<ILDOMDocument> xmldocument;
		if (SUCCEEDED(xmldocument.CoCreateInstance(CLSID_LDOMDocument)))
		{
			VARIANT_BOOL success;
			xmldocument->loadXML(L"<servers/>", &success);
			if (success)
			{
				CComPtr<ILDOMElement> documentElement;
				xmldocument->get_documentElement(&documentElement);

				for (int i = 0; i < m_servers.GetSize(); i++)
				{
					CServer* pServer = m_servers[i];

					CComPtr<ILDOMElement> element;
					xmldocument->createElement(L"server", &element);
					if (element)
					{
						element->setAttribute(L"name", pServer->m_name);
						element->setAttribute(L"serverName", pServer->m_serverName);
						element->setAttribute(L"userName", pServer->m_userName);
						element->setAttribute(L"password", pServer->m_password);
						element->setAttribute(L"directory", pServer->m_directory);

						documentElement->appendChild(element, NULL);
					}
				}

				xmldocument->save(A2BSTR(filename), &success);
				if (success)
				{
					return 0;
				}
			}
		}

		MessageBox(hWnd, "Failed to save servers configuration", "LXWebSite", MB_OK);
	}

	return 0;
}
Пример #16
0
LRESULT CLXWebSiteApp::OnFileOpenSite(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
	CComPtr<ILXFrameworkFrame> lxframe;
	m_spAddinSite->GetFrame(&lxframe);

	CComQIPtr<IUIWnd> wnd = lxframe;
	HWND hWnd;
	wnd->get_hwnd(&hWnd);

	static LPCTSTR FilesFilter = _T(	"All Files\0*.*\0"
												"Site (*.lxsite)\0*.lxsite\0"
												);

	TCHAR sbuffer[4096];
	strcpy(sbuffer, "");	// Initial filename
	
	TCHAR curdir[MAX_PATH];
	GetCurrentDirectory(sizeof(curdir), curdir);

	OPENFILENAME	ofn = {0};
	ofn.lStructSize = sizeof(OPENFILENAME);
	ofn.hwndOwner = hWnd;
	ofn.hInstance = _Module.m_hInst;
	ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY;
	ofn.lpstrFile = sbuffer;
	ofn.nMaxFile = sizeof(sbuffer);
	ofn.lpstrInitialDir = curdir;
	ofn.lpstrFilter = FilesFilter;
	ofn.nFilterIndex = 2;
	
	if (GetOpenFileName(&ofn))
	{
		CComObject<CWebSite>* pWebSite;
		CComObject<CWebSite>::CreateInstance(&pWebSite);
		if (pWebSite)
		{
			pWebSite->AddRef();

			pWebSite->SetApp(this);

			HRESULT hr = pWebSite->LoadDocument(A2BSTR(sbuffer));
			if (SUCCEEDED(hr))
			{
				CComQIPtr<IEFrame> eframe = lxframe;
				pWebSite->ShowViews(eframe);

				return 0;
			}
			else
			{
				MessageBox(hWnd, "Failed to open website", "LXWebSite", MB_OK);
			}

			pWebSite->Release();
		}
		else
		{
			MessageBox(hWnd, "Failed to create website document", "LXWebSite", MB_OK);
		}
	}

	return 0;
}
Пример #17
0
STDMETHODIMP CLXWebSiteApp::SetSite(ILXAddinSite* pSite)
{
	m_spAddinSite = pSite;

	{
		TCHAR appdata[MAX_PATH];
		SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, 0, appdata);

		TCHAR pathname[MAX_PATH];
		_makepath(pathname, NULL, appdata, "LXFramework", NULL);

		TCHAR filename[MAX_PATH];
		_makepath(filename, NULL, pathname, "servers.xml", NULL);

		CComPtr<ILDOMDocument> xmldocument;
		if (SUCCEEDED(xmldocument.CoCreateInstance(CLSID_LDOMDocument)))
		{
			VARIANT_BOOL success;
			xmldocument->load(A2BSTR(filename), &success);

			CComPtr<ILDOMElement> documentElement;
			xmldocument->get_documentElement(&documentElement);
			if (documentElement)
			{
				CComPtr<ILDOMNode> node;
				documentElement->get_firstChild(&node);
				while (node)
				{
					CComQIPtr<ILDOMElement> element = node;
					if (element)
					{
						CComBSTR tagName;
						element->get_tagName(&tagName);
						if (!wcscmp(tagName, L"server"))
						{
							CComObject<CServer>* pServer;
							CComObject<CServer>::CreateInstance(&pServer);
							pServer->AddRef();

							element->getAttribute(L"name", &pServer->m_name);
							element->getAttribute(L"serverName", &pServer->m_serverName);
							element->getAttribute(L"directory", &pServer->m_directory);
							element->getAttribute(L"userName", &pServer->m_userName);
							element->getAttribute(L"password", &pServer->m_password);

							m_servers.Add(pServer);
						}
					}
					CComPtr<ILDOMNode> nextSibling;
					node->get_nextSibling(&nextSibling);
					node = nextSibling;
				}
			}
		}
	}

	if (m_spAddinSite)
	{
		CComPtr<ILXFrameworkFrame> lxframe;
		m_spAddinSite->GetFrame(&lxframe);

		CComQIPtr<IUIFrame> frame = lxframe;

		CComPtr<IUIManager> uiManager;
		m_spAddinSite->GetUIManager((IUnknown**)&uiManager);

		{
			CComPtr<IUIMenuDlg> menuDlg;
			uiManager->CreateMenuDlg(&menuDlg);

			CComPtr<IMenuItem> menuItem;
			uiManager->FindMenu(_Module.GetResourceInstance(), IDR_MAINFRAME, &menuItem);

			CComPtr<IMenuItem> menuItem0 = menuItem;
			//menuItem->GetSubMenu(0, &menuItem0);

			menuDlg->InitMenu(menuItem0, this/*CComQIPtr<ICommandTarget>(GetFrame())*/, -1);

			CComPtr<IUIDlgSite> dlgsite;
			uiManager->CreateDlgSite(L"MenuBar", NULL, menuDlg, &dlgsite);

			frame->FloatControlBar(dlgsite, CPoint(0,0), CBRS_SIZE_DYNAMIC);
		}
#if 0
		{
			CComPtr<IUIRegisteredDlg> rdlg;
			uiManager->RegisterDlg(70/*TODO?IDR_MAINFRAME*/, L"Menubar", 0, &rdlg);

			CComPtr<IUIDlg> dlg;
			rdlg->CreateDlg(&dlg);

			CComPtr<IUIDlgSite> dlgsite;
			uiManager->CreateDlgSite(dlg, &dlgsite);

			frame->FloatControlBar(dlgsite, CPoint(0,0), CBRS_SIZE_DYNAMIC);
		}
#endif
	}

	return S_OK;
}