示例#1
0
        protected void RegisterColumn(Guid formatId, int propertyId, string title, uint defaultWidthInCharacters,
                                      ListViewAlignment format = ListViewAlignment.Left, ShellColumnState state = ShellColumnState.TypeString)
        {
            var columnId = new ShellColumnId {
                FormatId = formatId, PropertyId = propertyId
            };

            // Note: description field is not used by the shell.
            var columnInfo = new ShellColumnInfo
            {
                ColumnId = columnId,
                Title    = title,
                DefaultWidthInCharacters = defaultWidthInCharacters,
                Format      = format,
                State       = state | ShellColumnState.Extended | ShellColumnState.SecondaryUI,
                variantType = 0
            };

            // Note: VT_LPSTR/VT_BSTR works ok. Other types seems to have issues with sorting.
            // TODO = VT_BSTR

            columnInfos.Add(columnInfo);
        }
示例#2
0
        int IColumnProvider.GetItemData(ref ShellColumnId columnId, ref ShellColumnData columnData, object data)
        {
            Debug.WriteLine("[{0}] ColumnProviderBase.IColumnProvider.GetItemData, columnId.FormatId={1}, columnId.PropertyId={2}",
                            Id, columnId.FormatId, columnId.PropertyId);

            if (!initialized)
            {
                throw new COMException("Initialize was not called");
            }

            if (!IsSupportedItem(ref columnData))
            {
                ////VariantInit(pvarData); // must initialise out args as we return a success code.
                return(HResults.False);
            }

            bool   flushCache = columnData.Flags.HasFlag(ShellColumnDataOptions.UpdateItem);
            var    fileName   = Path.GetFileName(columnData.File);
            object info       = null;

            if (!flushCache)
            {
                // User of this interface (explorer.exe) are expected to ask
                // all active item data per file.
                info = FindInLastUsedCache(fileName);
            }

            if (info == null)
            {
                info = GetAndCacheFileInfo(fileName, columnData.File, flushCache);
            }

            ////pvarData->bstrVal = (*pCachedInfo)[GetIndex(*pscid)].AllocSysString();
            ////pvarData->vt = VT_BSTR;

            return(HResults.Ok);
        }
示例#3
0
        protected void RegisterColumn(Guid formatId, int propertyId, string title, uint defaultWidthInCharacters,
                                      ListViewAlignment format = ListViewAlignment.Left, ShellColumnState state = ShellColumnState.TypeString)
        {
            Contract.Requires(title != null);
            Contract.Requires(title.Length < ShellColumnInfo.MaxTitleLength);

            var columnId = new ShellColumnId {
                FormatId = formatId, PropertyId = propertyId
            };

            // Note: description field is not used by the shell.
            var columnInfo = new ShellColumnInfo();

            columnInfo.ColumnId = columnId;
            columnInfo.Title    = title;
            columnInfo.DefaultWidthInCharacters = defaultWidthInCharacters;
            columnInfo.Format = format;
            columnInfo.State  = state | ShellColumnState.Extended | ShellColumnState.SecondaryUI;

            // Note: VT_LPSTR/VT_BSTR works ok. Other types seems to have issues with sorting.
            columnInfo.variantType = 0; // TODO = VT_BSTR

            columnInfos.Add(columnInfo);
        }