OSDN Git Service

Merge with stable
authorsdottaka <sdottaka@sourceforge.net>
Thu, 30 Oct 2014 09:41:37 +0000 (18:41 +0900)
committersdottaka <sdottaka@sourceforge.net>
Thu, 30 Oct 2014 09:41:37 +0000 (18:41 +0900)
1  2 
Src/DirCmpReport.cpp
Src/IListCtrl.h
Src/IListCtrlImpl.h
Src/ImgMergeFrm.cpp
Src/MergeDoc.cpp

Simple merge
diff --cc Src/IListCtrl.h
@@@ -9,12 -9,11 +9,16 @@@ struct IListCtr
        virtual int GetRowCount() const = 0;
        virtual String GetColumnName(int col) const = 0;
        virtual String GetItemText(int row, int col) const = 0;
 +      virtual void *GetItemData(int row) const = 0;
        virtual int GetBackColor(int row) const = 0;
 +      virtual bool IsSelectedItem(int sel) const = 0;
 +      virtual int GetNextItem(int sel, bool selected = false, bool reverse = false) const = 0;
 +      virtual int GetNextSelectedItem(int sel, bool reverse = false) const = 0;
 +      virtual unsigned GetSelectedCount() const = 0;
+       virtual int GetIndent(int row) const = 0;
+       virtual int GetIconIndex(int row) const = 0;
+       virtual int GetIconCount() const = 0;
+       virtual std::string GetIconPNGData(int iconIndex) const = 0;
  };
  
  #endif
@@@ -57,26 -49,71 +58,91 @@@ public
                return nmlvcd.clrTextBk;
        }
  
 -
 +      bool IsSelectedItem(int sel) const
 +      {
 +              return !!ListView_GetItemState(m_hwndListCtrl, sel, LVIS_SELECTED);
 +      }
 +
 +      int GetNextItem(int sel, bool selected = false, bool reverse = false) const
 +      {
 +              return ListView_GetNextItem(m_hwndListCtrl, sel, (selected ? LVNI_SELECTED : 0) | (reverse ? LVNI_ABOVE : 0));          
 +      }
 +
 +      int GetNextSelectedItem(int sel, bool reverse = false) const
 +      {
 +              return ListView_GetNextItem(m_hwndListCtrl, sel, LVNI_SELECTED | (reverse ? LVNI_ABOVE : 0));           
 +      }
 +
 +      unsigned GetSelectedCount() const
 +      {
 +              return ListView_GetSelectedCount(m_hwndListCtrl);
 +      }
 +
+       int GetIndent(int row) const
+       {
+               LVITEM item = {0};
+               item.mask = LVIF_INDENT;
+               item.iItem = row;
+               ListView_GetItem(m_hwndListCtrl, &item);
+               return item.iIndent;
+       }
+       int GetIconIndex(int row) const
+       {
+               LVITEM item = {0};
+               item.mask = LVIF_IMAGE;
+               item.iItem = row;
+               ListView_GetItem(m_hwndListCtrl, &item);
+               return item.iImage;
+       }
+       int GetIconCount() const
+       {
+               HIMAGELIST hImageList = ListView_GetImageList(m_hwndListCtrl, LVSIL_SMALL);
+               return ImageList_GetImageCount(hImageList);
+       }
+       std::string GetIconPNGData(int iconIndex) const
+       {
+               HIMAGELIST hImageList = ListView_GetImageList(m_hwndListCtrl, LVSIL_SMALL);
+               IMAGEINFO imageInfo = {0};
+               LARGE_INTEGER li = {0};
+               IStream *pStream = NULL;
+               CImage image;
+               ImageList_GetImageInfo(hImageList, iconIndex, &imageInfo);
+               int w = imageInfo.rcImage.right - imageInfo.rcImage.left;
+               int h = imageInfo.rcImage.bottom - imageInfo.rcImage.top;
+               CreateStreamOnHGlobal(NULL, TRUE, &pStream);
+               HDC hdcMem = CreateCompatibleDC(NULL);
+               BITMAPINFO bmpinfo = {0};
+               bmpinfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
+               bmpinfo.bmiHeader.biWidth = w;
+               bmpinfo.bmiHeader.biHeight = h;
+               bmpinfo.bmiHeader.biPlanes = 1;
+               bmpinfo.bmiHeader.biBitCount = 32;
+               bmpinfo.bmiHeader.biCompression = BI_RGB;
+               HBITMAP hbmpImage = CreateDIBSection( NULL, &bmpinfo, DIB_RGB_COLORS, NULL, NULL, NULL);
+               HBITMAP hbmpOld = (HBITMAP)SelectObject(hdcMem, hbmpImage);
+               ImageList_Draw(hImageList, iconIndex, hdcMem, 0, 0, ILD_TRANSPARENT);
+               image.Attach(hbmpImage);
+ #if _MSC_VER >= 1400
+               image.SetHasAlphaChannel(true);
+ #endif
+               image.Save(pStream, Gdiplus::ImageFormatPNG);
+               STATSTG stat;
+               pStream->Stat(&stat, STATFLAG_NONAME);
+               std::string ret(stat.cbSize.LowPart, 0);
+               pStream->Seek(li, STREAM_SEEK_SET, NULL);
+               pStream->Read(&ret[0], stat.cbSize.LowPart, NULL);
+               pStream->Release();
+               SelectObject(hdcMem, hbmpOld);
+               DeleteObject(hdcMem);
+               DeleteObject(hbmpImage);
+               return ret;
+       }
++\r
  protected:
        HWND m_hwndListCtrl;
  };
Simple merge
Simple merge