//
//  FUNCTION: UpdateProperty()
//
//  PURPOSE: Called by the Ribbon framework when a command property (PKEY) needs to be updated.
//
//  COMMENTS:
//
//    This function is used to initialize the contents and selection of the gallery.
//
//
STDMETHODIMP CLayoutHandler::UpdateProperty(UINT nCmdID,
                              __in REFPROPERTYKEY key,
                              __in_opt const PROPVARIANT* ppropvarCurrentValue,
                              __out PROPVARIANT* ppropvarNewValue)
{
    UNREFERENCED_PARAMETER(nCmdID);

    HRESULT hr = E_FAIL;

    if (key == UI_PKEY_ItemsSource)
    {
        IUICollection* pCollection;
        hr = ppropvarCurrentValue->punkVal->QueryInterface(IID_PPV_ARGS(&pCollection));
        if (FAILED(hr))
        {
            pCollection->Release();
            return hr;
        }

        int labelIds[] = {IDS_LAYOUT_1, IDS_LAYOUT_2, IDS_LAYOUT_3};

        // Populate the combobox with the three layout options.
        for (int i=0; i<_countof(labelIds); i++)
        {
            // Create a new property set for each item.
            CPropertySet* pItem;
            hr = CPropertySet::CreateInstance(&pItem);
            if (FAILED(hr))
            {
                pCollection->Release();
                return hr;
            }
  
            // Load the label from the resource file.
            WCHAR wszLabel[MAX_RESOURCE_LENGTH];
            LoadString(GetModuleHandle(NULL), labelIds[i], wszLabel, MAX_RESOURCE_LENGTH);

            // Initialize the property set with no image, the label that was just loaded, and no category.
            pItem->InitializeItemProperties(NULL, wszLabel, UI_COLLECTION_INVALIDINDEX);

            pCollection->Add(pItem);
        }
        pCollection->Release();
        hr = S_OK;
    }
    else if (key == UI_PKEY_Categories)
    {
        // A return value of S_FALSE or E_NOTIMPL will result in a gallery with no categories.
        // If you return any error other than E_NOTIMPL, the contents of the gallery will not display.
        hr = S_FALSE;
    }
    else if (key == UI_PKEY_SelectedItem)
    {
        // Use the first layout as the default selection.
        hr = UIInitPropertyFromUInt32(UI_PKEY_SelectedItem, 0, ppropvarNewValue);
    }
    return hr;
}
예제 #2
0
//
//  FUNCTION: UpdateProperty()
//
//  PURPOSE: Called by the Ribbon framework when a command property (PKEY) needs to be updated.
//
//  COMMENTS:
//
//    This function is used to populate the gallery.
//
//
STDMETHODIMP CNewDocumentHandler::UpdateProperty(UINT nCmdID,
                              __in REFPROPERTYKEY key,
                              __in_opt const PROPVARIANT* ppropvarCurrentValue,
                              __out PROPVARIANT* ppropvarNewValue)
{
    HRESULT hr = S_FALSE;
	
    if (key == UI_PKEY_ItemsSource)
    {
		objectTypes.clear();
	    IUICollection* pCollection;
        hr = ppropvarCurrentValue->punkVal->QueryInterface( 
                                                      IID_PPV_ARGS(&pCollection));
        
		pCollection->Clear();

		Array docTypes = getAllConcreteDocumentTypes();
		for(int i=0; i<docTypes.size(); i++){
			Object doc = docTypes[i].getObject();
			objectTypes.push_back(doc);
			// Create a new property set for each item.
			CPropertySet* pItem;
			hr = CPropertySet::CreateInstance(&pItem);
        
			string key = doc["label"].getString();
			wstring wkey = s2ws(key);
		
			// Load the label from the resource file.
			WCHAR wszLabel[MAX_RESOURCE_LENGTH];
			wcscpy_s(wszLabel, MAX_RESOURCE_LENGTH, wkey.c_str());
            
			IUIImage* pImg;
			MAKEINTRESOURCE(IDR_SMALL_ADD_BITMAP);

			HRESULT a = CreateUIImageFromBitmapResource(MAKEINTRESOURCE(IDR_SMALL_ADD_BITMAP), &pImg);


			// Initialize the property set with no image, the label that was just
			// loaded, and no category.
			pItem->InitializeItemProperties(pImg, wszLabel, UI_COLLECTION_INVALIDINDEX);

			pCollection->Add(pItem);
        }
        
     
        pCollection->Release();
        hr = S_OK;
    }
    
    return hr;
}
예제 #3
0
INT_PTR CALLBACK NewPerspective(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	UNREFERENCED_PARAMETER(lParam);
	switch (message)
	{
	case WM_INITDIALOG:
		LoadRoles(GetDlgItem(hDlg, IDC_ROLE_COMBO));
		return (INT_PTR)TRUE;

	case WM_COMMAND:

		if ( LOWORD(wParam) == IDOK ){
			HWND nameEdit = GetDlgItem(hDlg, IDC_NAME_COMBO);
			HWND combo = GetDlgItem(hDlg, IDC_ROLE_COMBO);

			int len = GetWindowTextLength(nameEdit) + 1;
			LPWSTR nameStr = new WCHAR[len];
			GetWindowText(nameEdit, nameStr, len);

			int roleIndex = ComboBox_GetCurSel(combo);

			string name = ws2s(nameStr);
			string label = name;

			for(unsigned int i=0; i<name.length(); i++){
				if ( name[i] == ' ' ) name[i] = '_';
				name[i] = tolower(name[i]);
			}

			Object role = roles[roleIndex].getObject();
			Object roleDoc = role["doc"].getObject();


			Object newPerspective;
			newPerspective["cinch_type"] = "perspective_definition";
			newPerspective["name"] = name;
			newPerspective["label"] = label;
			Array appliesTo = Array();
			appliesTo.push_back(roleDoc["name"]);
			newPerspective["applies_to_roles"] = appliesTo;

			Document doc = db.createDocument(JsonBox::Value(newPerspective));
			Object updatedObj = doc.getData().getObject();
			PROPVARIANT val;
			HRESULT res = g_pFramework->GetUICommandProperty(IDR_CMD_SWITCHPERSPECTIVE, UI_PKEY_ItemsSource, &val);
			if ( res == S_OK ){
				IUICollection* pCollection;
				res = val.punkVal->QueryInterface(IID_PPV_ARGS(&pCollection));
			
				perspectiveHandler->AddPerspective(pCollection, updatedObj);
				 
				pCollection->Release();
				val.punkVal->Release();
			}
			delete nameStr;
			

		}

		if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
		{
			EndDialog(hDlg, LOWORD(wParam));
			return (INT_PTR)TRUE;
		}
		break;
	}
	return (INT_PTR)FALSE;
}
//
//  FUNCTION: UpdateProperty()
//
//  PURPOSE: Called by the Ribbon framework when a command property (PKEY) needs to be updated.
//
//  COMMENTS:
//
//    This function is used to populate the gallery.
//
//
STDMETHODIMP CSizeAndColorHandler::UpdateProperty(UINT nCmdID,
                              __in REFPROPERTYKEY key,
                              __in_opt const PROPVARIANT* ppropvarCurrentValue,
                              __out PROPVARIANT* ppropvarNewValue)
{
    UNREFERENCED_PARAMETER(nCmdID);
    UNREFERENCED_PARAMETER(ppropvarNewValue);

    HRESULT hr = E_FAIL;

    if(key == UI_PKEY_Categories)
    {
        IUICollection* pCollection;
        hr = ppropvarCurrentValue->punkVal->QueryInterface(IID_PPV_ARGS(&pCollection));
        if (FAILED(hr))
        {
            return hr;
        }

        // Create a property set for the Size category.
        CPropertySet *pSize;
        hr = CPropertySet::CreateInstance(&pSize);
        if (FAILED(hr))
        {
            pCollection->Release();
            return hr;
        }

        // Load the label for the Size category from the resource file.
        WCHAR wszSizeLabel[MAX_RESOURCE_LENGTH];
        LoadString(GetModuleHandle(NULL), IDS_SIZE_CATEGORY, wszSizeLabel, MAX_RESOURCE_LENGTH);

        // Initialize the property set with the label that was just loaded and a category id of 0.
        pSize->InitializeCategoryProperties(wszSizeLabel, 0);

        // Add the newly-created property set to the collection supplied by the framework.
        pCollection->Add(pSize);

        pSize->Release();


        // Create a property set for the Color category.
        CPropertySet *pColor;
        hr = CPropertySet::CreateInstance(&pColor);
        if (FAILED(hr))
        {
            pCollection->Release();
            return hr;
        }

        // Load the label for the Color category from the resource file.
        WCHAR wszColorLabel[MAX_RESOURCE_LENGTH];
        LoadString(GetModuleHandle(NULL), IDS_COLOR_CATEGORY, wszColorLabel, MAX_RESOURCE_LENGTH);

        // Initialize the property set with the label that was just loaded and a category id of 1.
        pColor->InitializeCategoryProperties(wszColorLabel, 1);
        
        // Add the newly-created property set to the collection supplied by the framework.
        pCollection->Add(pColor);

        pColor->Release();
        pCollection->Release();

        hr = S_OK;
    }
    else if(key == UI_PKEY_ItemsSource)
    {
        IUICollection* pCollection;
        hr = ppropvarCurrentValue->punkVal->QueryInterface(IID_PPV_ARGS(&pCollection));
        if (FAILED(hr))
        {
            return hr;
        }

        int commandIds[] = {IDR_CMD_SMALL, IDR_CMD_MEDIUM, IDR_CMD_LARGE, IDR_CMD_RED, IDR_CMD_GREEN, IDR_CMD_BLUE};
        int categoryIds[] = {0, 0, 0, 1, 1, 1};

        // Populate the gallery with the three size and three colors in two separate categories.
        for (int i=0; i<_countof(commandIds); i++)
        {
            // Create a new property set for each item.
            CPropertySet* pCommand;
            hr = CPropertySet::CreateInstance(&pCommand);
            if (FAILED(hr))
            {
                pCollection->Release();
                return hr;
            }

            // Initialize the property set with the appropriate command id and category id and type Boolean (which makes these appear as ToggleButtons).
            pCommand->InitializeCommandProperties(categoryIds[i], commandIds[i], UI_COMMANDTYPE_BOOLEAN);

            // Add the newly-created property set to the collection supplied by the framework.
            pCollection->Add(pCommand);

            pCommand->Release();
        }
        pCollection->Release();
        hr = S_OK;
    }
    return hr;
}