Author: ssawant
Date: Fri Jun 23 13:44:28 2017
New Revision: 75169
URL: 
http://svn.reactos.org/svn/reactos?rev=75169&view=rev
Log:
[QCKLNCH]
-Added IShellFolderBand and stubbed its methods.
-Implemented InitializeSFB.
-Tested enumeration of IShellFolder within CISFBand.
Modified:
    branches/GSoC_2017/shellext/reactos/dll/shellext/qcklnch/CISFBand.cpp
    branches/GSoC_2017/shellext/reactos/dll/shellext/qcklnch/CISFBand.h
Modified: branches/GSoC_2017/shellext/reactos/dll/shellext/qcklnch/CISFBand.cpp
URL:
http://svn.reactos.org/svn/reactos/branches/GSoC_2017/shellext/reactos/dll/…
==============================================================================
--- branches/GSoC_2017/shellext/reactos/dll/shellext/qcklnch/CISFBand.cpp
[iso-8859-1] (original)
+++ branches/GSoC_2017/shellext/reactos/dll/shellext/qcklnch/CISFBand.cpp
[iso-8859-1] Fri Jun 23 13:44:28 2017
@@ -14,86 +14,106 @@
 WINE_DEFAULT_DEBUG_CHANNEL(qcklnch);
-//Toolbar
-
-HWND CreateSimpleToolbar(HWND hWndParent, HINSTANCE hInst)
+//Misc Methods:
+//Subclassing Button
+
+LRESULT CALLBACK MyWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR
uIdSubclass, DWORD_PTR dwRefData)
+{
+    switch (uMsg)
+    {
+    case WM_COMMAND:
+    {
+        MessageBox(0, L"Button Clicked!!", L"Testing", MB_OK |
MB_ICONINFORMATION);
+    }
+    }
+    return DefSubclassProc(hWnd, uMsg, wParam, lParam);
+}
+
+//*****************************************************************************************
+//CISFBand
+
+CISFBand::CISFBand() : m_hWnd(NULL), m_BandID(0) {}
+
+CISFBand::~CISFBand() {}
+
+//ToolbarTest
+
+HWND CISFBand::CreateSimpleToolbar(HWND hWndParent, HINSTANCE hInst)
 {
     //This ought to be global.. (currently testing)
     //HIMAGELIST g_hImageList = NULL;
-    // Declare and initialize local constants.
+    // Declare and initialize local constants.
     const int ImageListID = 0;
-    const int numButtons = 3;
     const int bitmapSize = 16;
     const DWORD buttonStyles = BTNS_AUTOSIZE;
     // Create the toolbar.
     HWND hWndToolbar = CreateWindowEx(0, TOOLBARCLASSNAME, NULL,
-        WS_CHILD | TBSTYLE_WRAPABLE | TBSTYLE_FLAT | CCS_NORESIZE, CW_USEDEFAULT,
CW_USEDEFAULT, 0, 0,
+        WS_CHILD | TBSTYLE_WRAPABLE | TBSTYLE_LIST | CCS_NORESIZE, CW_USEDEFAULT,
CW_USEDEFAULT, 0, 0,
         hWndParent, NULL, hInst, NULL);
-
     if (hWndToolbar == NULL)
         return NULL;
     // Create the image list.
-   /* g_hImageList = ImageList_Create(bitmapSize, bitmapSize,   // Dimensions of
individual bitmaps.
-        ILC_COLOR16 | ILC_MASK,   // Ensures transparent background.
-        numButtons, 0);
+    /* g_hImageList = ImageList_Create(bitmapSize, bitmapSize,   // Dimensions of
individual bitmaps.
+    ILC_COLOR16 | ILC_MASK,   // Ensures transparent background.
+    numButtons, 0);
     // Set the image list.
     SendMessage(hWndToolbar, TB_SETIMAGELIST,
-        (WPARAM)ImageListID,
-        (LPARAM)g_hImageList);
+    (WPARAM)ImageListID,
+    (LPARAM)g_hImageList);
     // Load the button images.
     SendMessage(hWndToolbar, TB_LOADIMAGES,
-        (WPARAM)IDB_STD_SMALL_COLOR,
-        (LPARAM)HINST_COMMCTRL);*/
+    (WPARAM)IDB_STD_SMALL_COLOR,
+    (LPARAM)HINST_COMMCTRL);*/
     // Initialize button info.
-    // IDM_NEW, IDM_OPEN, and IDM_SAVE are application-defined command constants.
-
-    TBBUTTON tbButtons[numButtons] =
-    {
-        { MAKELONG(STD_FILENEW,  ImageListID), IDM_NEW,  TBSTATE_ENABLED, buttonStyles,{
0 }, 0, (INT_PTR)L"New" },
-        { MAKELONG(STD_FILEOPEN, ImageListID), IDM_OPEN, TBSTATE_ENABLED, buttonStyles,{
0 }, 0, (INT_PTR)L"Open" },
-        { MAKELONG(STD_FILESAVE, ImageListID), IDM_SAVE, 0,               buttonStyles,{
0 }, 0, (INT_PTR)L"Save" }
-    };
-
+    // IDM_NEW, IDM_OPEN, and IDM_SAVE are application-defined command constants.
+    /*{
+    { MAKELONG(STD_FILENEW,  ImageListID), IDM_NEW,  TBSTATE_ENABLED, buttonStyles,{ 0 },
0, (INT_PTR)L"New" },
+    { MAKELONG(STD_FILEOPEN, ImageListID), IDM_OPEN, TBSTATE_ENABLED, buttonStyles,{ 0 },
0, (INT_PTR)L"Open" },
+    { MAKELONG(STD_FILESAVE, ImageListID), IDM_SAVE, 0,               buttonStyles,{ 0 },
0, (INT_PTR)L"Save" }
+    };*/
     // Add buttons.
-    SendMessage(hWndToolbar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
-    SendMessage(hWndToolbar, TB_ADDBUTTONS, (WPARAM)numButtons, (LPARAM)&tbButtons);
-
-    //SendMessage(hWndToolbar, TB_INSERTBUTTON, /*(WPARAM)numButtons*/ 0,
(LPARAM)&tbButtons[0]);
+    /*SendMessage(hWndToolbar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
+    SendMessage(hWndToolbar, TB_ADDBUTTONS, (WPARAM)nb, (LPARAM)&tbButtons);*/
+
+    //Enumerate objects
+    CComPtr<IEnumIDList> pedl;
+    HRESULT hr = m_pISF->EnumObjects(0, SHCONTF_FOLDERS | SHCONTF_NONFOLDERS,
&pedl);
+    LPITEMIDLIST pidl = NULL;
+    STRRET stret;
+    //LPWSTR pstr = NULL;
+
+    if (SUCCEEDED(hr))
+    {
+        for (int i=0; pedl->Next(MAX_PATH, &pidl, 0) != S_FALSE; i++)
+        {
+            WCHAR sz[MAX_PATH];
+            m_pISF->GetDisplayNameOf(pidl, SHGDN_NORMAL, &stret);
+            //StrRetToStr(&stret, pidl, &pstr);
+            StrRetToBuf(&stret, pidl, sz, sizeof(sz));
+            //MessageBox(0, sz, L"Namespace Object Found!", MB_OK |
MB_ICONINFORMATION);
+
+            TBBUTTON tb = { MAKELONG(I_IMAGENONE,  ImageListID), i, TBSTATE_ENABLED,
buttonStyles,{ 0 }, 0, (INT_PTR)sz };
+            SendMessage(hWndToolbar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
+            SendMessage(hWndToolbar, TB_INSERTBUTTONW, 0, (LPARAM)&tb);
+        }
+    }
     // Resize the toolbar, and then show it.
     SendMessage(hWndToolbar, TB_AUTOSIZE, 0, 0);
     ShowWindow(hWndToolbar, TRUE);
+    CoTaskMemFree((void*)pidl);
+    //CoTaskMemFree((void*)pstr);
     return hWndToolbar;
 }
-//Subclassing Button
-
-    LRESULT CALLBACK MyWndProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam,
UINT_PTR uIdSubclass, DWORD_PTR dwRefData)
-    {
-        switch (uMsg)
-        {
-            case WM_COMMAND:
-            {
-                MessageBox(0, L"Button Clicked!!", L"Testing", MB_OK
| MB_ICONINFORMATION);
-            }
-        }
-        return DefSubclassProc(hWnd, uMsg, wParam, lParam);
-    }
-
-//CISFBand
-
-    CISFBand::CISFBand() : m_hWnd(NULL), m_BandID(0) {}
-
-    CISFBand::~CISFBand() {}
-
 /*****************************************************************************/
 //IObjectWithSite
@@ -118,6 +138,7 @@
         //SetWindowSubclass(hwndParent, MyWndProc, 0, 0); //when button is clicked,
parent receives WM_COMMAND, and thus subclassed to show a test message box
         m_hWnd = CreateSimpleToolbar(hwndParent, m_hInstance);
+        SetWindowSubclass(hwndParent, MyWndProc, 0, 0);
         return S_OK;
     }
@@ -257,7 +278,7 @@
                 pdbi->ptActual = actualSize;
             }
             if (pdbi->dwMask & DBIM_TITLE)
-                wcscpy(pdbi->wszTitle, L"");
+                wcscpy(pdbi->wszTitle, L"Quick Launch");
             if (pdbi->dwMask & DBIM_MODEFLAGS)
             {
                 pdbi->dwModeFlags = DBIMF_NORMAL | DBIMF_VARIABLEHEIGHT;
@@ -427,11 +448,38 @@
         UNIMPLEMENTED;
         return E_NOTIMPL;
-    }
+    }
+
+//IShellFolderBand
+    HRESULT STDMETHODCALLTYPE CISFBand::GetBandInfoSFB(PBANDINFOSFB pbi)
+    {
+        return E_NOTIMPL;
+    }
+
+    HRESULT STDMETHODCALLTYPE CISFBand::InitializeSFB(IShellFolder *psf,
PCIDLIST_ABSOLUTE pidl)
+    {
+        if (pidl != NULL)
+        {
+            psf->BindToObject(pidl, 0, IID_IShellFolder, (void**)&m_pISF);
+            m_pidl = pidl;
+        }
+        else
+        {
+            m_pISF = psf;
+            m_pidl = pidl;
+        }
+
+        return S_OK;
+    }
+
+    HRESULT STDMETHODCALLTYPE CISFBand::SetBandInfoSFB( PBANDINFOSFB pbi)
+    {
+        return E_NOTIMPL;
+    }
 //C Constructor
     extern "C"
-    HRESULT WINAPI CIFSBand_CreateInstance(REFIID riid, void** ppv)
+    HRESULT WINAPI CISFBand_CreateInstance(REFIID riid, void** ppv)
     {
         return ShellObjectCreator<CISFBand>(riid, ppv);
     }
Modified: branches/GSoC_2017/shellext/reactos/dll/shellext/qcklnch/CISFBand.h
URL:
http://svn.reactos.org/svn/reactos/branches/GSoC_2017/shellext/reactos/dll/…
==============================================================================
--- branches/GSoC_2017/shellext/reactos/dll/shellext/qcklnch/CISFBand.h [iso-8859-1]
(original)
+++ branches/GSoC_2017/shellext/reactos/dll/shellext/qcklnch/CISFBand.h [iso-8859-1] Fri
Jun 23 13:44:28 2017
@@ -16,11 +16,13 @@
     public IDeskBar,
     public IPersistStream,
     public IWinEventHandler,
-    public IOleCommandTarget
+    public IOleCommandTarget,
+    public IShellFolderBand
 {
     HINSTANCE m_hInstance;
     CComPtr<IUnknown> m_Site;
     CComPtr<IShellFolder> m_pISF;
+    PCIDLIST_ABSOLUTE m_pidl;
     HWND m_hWnd;
     HWND m_hWndStartButton;
     DWORD m_BandID;
@@ -29,6 +31,9 @@
     CISFBand();
     virtual ~CISFBand();
+
+//Personal Methods
+    HWND CreateSimpleToolbar(HWND hWndParent, HINSTANCE hInst);
 //IObjectWithSite
@@ -149,6 +154,20 @@
       /*[in, out]*/       OLECMDTEXT *pCmdText
     );
+//IShellFolderBand
+    virtual HRESULT STDMETHODCALLTYPE GetBandInfoSFB(
+        PBANDINFOSFB pbi
+    );
+
+    virtual HRESULT STDMETHODCALLTYPE InitializeSFB(
+        IShellFolder      *psf,
+        PCIDLIST_ABSOLUTE pidl
+    );
+
+    virtual HRESULT STDMETHODCALLTYPE SetBandInfoSFB(
+        PBANDINFOSFB pbi
+    );
+
//*****************************************************************************************************
     DECLARE_NOT_AGGREGATABLE(CISFBand)
@@ -162,9 +181,10 @@
         COM_INTERFACE_ENTRY_IID(IID_IPersistStream, IPersistStream)
         COM_INTERFACE_ENTRY_IID(IID_IWinEventHandler, IWinEventHandler)
         COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget, IOleCommandTarget)
+        COM_INTERFACE_ENTRY_IID(IID_IShellFolderBand, IShellFolderBand)
     END_COM_MAP()
 };
 //C Constructor
 extern "C"
-HRESULT WINAPI CIFSBand_CreateInstance(REFIID riid, void** ppv);
+HRESULT WINAPI CISFBand_CreateInstance(REFIID riid, void** ppv);