Skip to content

Commit

Permalink
[Added] CHexBookmarks::GetCurrent.
Browse files Browse the repository at this point in the history
[Changes] Open bookmark manager with the current bookmark highlighted in the list control (#12).
  • Loading branch information
jovibor committed Apr 18, 2020
1 parent d1961e8 commit 8d61f0c
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 16 deletions.
5 changes: 5 additions & 0 deletions HexCtrl/src/CHexBookmarks.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,11 @@ void CHexBookmarks::GoBookmark(ULONGLONG ullIndex)
}
}

ULONGLONG CHexBookmarks::GetCurrent()
{
return static_cast<ULONGLONG>(m_llCurrent);
}

void CHexBookmarks::GoNext()
{
if (!m_pHex)
Expand Down
3 changes: 2 additions & 1 deletion HexCtrl/src/CHexBookmarks.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ namespace HEXCTRL::INTERNAL
[[nodiscard]] ULONGLONG GetCount();
[[nodiscard]] auto GetTouchTime()const->__time64_t;
void GoBookmark(ULONGLONG ullIndex);
ULONGLONG GetCurrent();
void GoNext();
void GoPrev();
[[nodiscard]] bool HasBookmarks()const;
Expand All @@ -39,7 +40,7 @@ namespace HEXCTRL::INTERNAL
std::deque<HEXBOOKMARKSTRUCT> m_deqBookmarks;
CHexCtrl* m_pHex { };
IHexBkmVirtual* m_pVirtual { };
LONGLONG m_llCurrent { }; //Current bookmark position in deque, to move next/prev.
LONGLONG m_llCurrent { }; //Current bookmark position, to move next/prev.
__time64_t m_time { }; //Last modification time.
bool m_fVirtual { false }; //Working in Virtual mode or not.
};
Expand Down
32 changes: 18 additions & 14 deletions HexCtrl/src/Dialogs/CHexDlgBookmarkMgr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,14 +40,14 @@ BOOL CHexDlgBookmarkMgr::OnInitDialog()
{
CDialogEx::OnInitDialog();

m_List->CreateDialogCtrl(IDC_HEXCTRL_BOOKMARKMGR_LIST, this);
m_List->SetSortable(true);
m_List->InsertColumn(0, L"\u2116", LVCFMT_RIGHT, 40);
m_List->InsertColumn(1, L"Offset", LVCFMT_RIGHT, 80);
m_List->InsertColumn(2, L"Size", LVCFMT_RIGHT, 80);
m_List->InsertColumn(3, L"Description", LVCFMT_LEFT, 210);
m_List->InsertColumn(4, L"Bk color", LVCFMT_LEFT, 65);
m_List->SetExtendedStyle(LVS_EX_HEADERDRAGDROP);
m_stList->CreateDialogCtrl(IDC_HEXCTRL_BOOKMARKMGR_LIST, this);
m_stList->SetSortable(true);
m_stList->InsertColumn(0, L"\u2116", LVCFMT_RIGHT, 40);
m_stList->InsertColumn(1, L"Offset", LVCFMT_RIGHT, 80);
m_stList->InsertColumn(2, L"Size", LVCFMT_RIGHT, 80);
m_stList->InsertColumn(3, L"Description", LVCFMT_LEFT, 210);
m_stList->InsertColumn(4, L"Bk color", LVCFMT_LEFT, 65);
m_stList->SetExtendedStyle(LVS_EX_HEADERDRAGDROP);

m_stMenuList.CreatePopupMenu();
m_stMenuList.AppendMenuW(MF_BYPOSITION, IDC_HEXCTRL_BOOKMARKMGR_MENU_NEW, L"New");
Expand All @@ -68,6 +68,10 @@ void CHexDlgBookmarkMgr::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimize
SetLayeredWindowAttributes(0, 255, LWA_ALPHA);
if (!m_time || m_time != m_pBookmarks->GetTouchTime())
UpdateList();

m_stList->SetItemState(-1, 0, LVIS_SELECTED);
m_stList->SetItemState(static_cast<int>(m_pBookmarks->GetCurrent()), LVIS_SELECTED, LVIS_SELECTED);
m_stList->EnsureVisible(static_cast<int>(m_pBookmarks->GetCurrent()), FALSE);
}

CDialogEx::OnActivate(nState, pWndOther, bMinimized);
Expand Down Expand Up @@ -240,7 +244,7 @@ void CHexDlgBookmarkMgr::OnListBkmRClick(NMHDR* pNMHDR, LRESULT* pResult)
m_stMenuList.EnableMenuItem(IDC_HEXCTRL_BOOKMARKMGR_MENU_EDIT, (fEnabled ? MF_ENABLED : MF_GRAYED) | MF_BYCOMMAND);
m_stMenuList.EnableMenuItem(IDC_HEXCTRL_BOOKMARKMGR_MENU_REMOVE, (fEnabled ? MF_ENABLED : MF_GRAYED) | MF_BYCOMMAND);
m_stMenuList.EnableMenuItem(IDC_HEXCTRL_BOOKMARKMGR_MENU_CLEARALL,
(m_List->GetItemCount() > 0 ? MF_ENABLED : MF_GRAYED) | MF_BYCOMMAND);
(m_stList->GetItemCount() > 0 ? MF_ENABLED : MF_GRAYED) | MF_BYCOMMAND);

POINT pt;
GetCursorPos(&pt);
Expand All @@ -251,15 +255,15 @@ void CHexDlgBookmarkMgr::OnListBkmRClick(NMHDR* pNMHDR, LRESULT* pResult)

void CHexDlgBookmarkMgr::UpdateList()
{
m_List->SetItemCountEx(static_cast<int>(m_pBookmarks->GetCount()), LVSICF_NOSCROLL);
m_stList->SetItemCountEx(static_cast<int>(m_pBookmarks->GetCount()), LVSICF_NOSCROLL);
m_time = m_pBookmarks->GetTouchTime();
}

void CHexDlgBookmarkMgr::SortBookmarks()
{
auto pData = m_pBookmarks->GetData();
const auto iColumn = m_List->GetSortColumn();
const auto fAscending = m_List->GetSortAscending();
const auto iColumn = m_stList->GetSortColumn();
const auto fAscending = m_stList->GetSortAscending();

//Sorts bookmarks according to clicked column.
std::sort(pData->begin(), pData->end(), [iColumn, fAscending](const HEXBOOKMARKSTRUCT& st1, const HEXBOOKMARKSTRUCT& st2)
Expand Down Expand Up @@ -315,13 +319,13 @@ void CHexDlgBookmarkMgr::SortBookmarks()
return fResult;
});

m_List->RedrawWindow();
m_stList->RedrawWindow();
}

void CHexDlgBookmarkMgr::OnDestroy()
{
CDialogEx::OnDestroy();

m_List->DestroyWindow();
m_stList->DestroyWindow();
m_stMenuList.DestroyMenu();
}
2 changes: 1 addition & 1 deletion HexCtrl/src/Dialogs/CHexDlgBookmarkMgr.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ namespace HEXCTRL::INTERNAL
void SortBookmarks();
DECLARE_MESSAGE_MAP()
private:
IListExPtr m_List { CreateListEx() };
IListExPtr m_stList { CreateListEx() };
CHexBookmarks* m_pBookmarks { };
CMenu m_stMenuList;
ULONGLONG m_ullCurrBkmIndex { }; //Currently selected bookmark index.
Expand Down

0 comments on commit 8d61f0c

Please sign in to comment.