mirror of
https://github.com/reactos/reactos.git
synced 2024-12-26 17:14:41 +00:00
display icons in search dialog
svn path=/trunk/; revision=6241
This commit is contained in:
parent
93e9630e67
commit
26e9ba9eda
5 changed files with 87 additions and 29 deletions
|
@ -71,15 +71,18 @@ void CollectProgramsThread::collect_programs(const ShellPath& path)
|
||||||
collect_programs(shell_entry->create_absolute_pidl());
|
collect_programs(shell_entry->create_absolute_pidl());
|
||||||
else if (entry->_shell_attribs & SFGAO_LINK)
|
else if (entry->_shell_attribs & SFGAO_LINK)
|
||||||
if (_alive)
|
if (_alive)
|
||||||
_callback(dir._folder, shell_entry, _hwnd);
|
_callback(dir._folder, shell_entry, _para);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#pragma warning(disable: 4355)
|
||||||
|
|
||||||
FindProgramTopicDlg::FindProgramTopicDlg(HWND hwnd)
|
FindProgramTopicDlg::FindProgramTopicDlg(HWND hwnd)
|
||||||
: super(hwnd),
|
: super(hwnd),
|
||||||
_list_ctrl(GetDlgItem(hwnd, IDC_MAILS_FOUND)),
|
_list_ctrl(GetDlgItem(hwnd, IDC_MAILS_FOUND)),
|
||||||
_thread(collect_programs_callback, _list_ctrl)
|
_himl(ImageList_Create(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), ILC_COLOR32, 0, 0)),
|
||||||
|
_thread(collect_programs_callback, hwnd, this)
|
||||||
{
|
{
|
||||||
SetWindowIcon(hwnd, IDI_REACTOS/*IDI_SEARCH*/);
|
SetWindowIcon(hwnd, IDI_REACTOS/*IDI_SEARCH*/);
|
||||||
|
|
||||||
|
@ -90,7 +93,9 @@ FindProgramTopicDlg::FindProgramTopicDlg(HWND hwnd)
|
||||||
|
|
||||||
_haccel = LoadAccelerators(g_Globals._hInstance, MAKEINTRESOURCE(IDA_SEARCH_PROGRAM));
|
_haccel = LoadAccelerators(g_Globals._hInstance, MAKEINTRESOURCE(IDA_SEARCH_PROGRAM));
|
||||||
|
|
||||||
LV_COLUMN column = {LVCF_TEXT|LVCF_FMT|LVCF_WIDTH, LVCFMT_LEFT, 250};
|
ListView_SetImageList(_list_ctrl, _himl, LVSIL_SMALL);
|
||||||
|
|
||||||
|
LV_COLUMN column = {LVCF_FMT|LVCF_WIDTH|LVCF_TEXT, LVCFMT_LEFT, 250};
|
||||||
|
|
||||||
column.pszText = _T("Name");
|
column.pszText = _T("Name");
|
||||||
ListView_InsertColumn(_list_ctrl, 0, &column);
|
ListView_InsertColumn(_list_ctrl, 0, &column);
|
||||||
|
@ -104,6 +109,12 @@ FindProgramTopicDlg::FindProgramTopicDlg(HWND hwnd)
|
||||||
Refresh();
|
Refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FindProgramTopicDlg::~FindProgramTopicDlg()
|
||||||
|
{
|
||||||
|
ImageList_Destroy(_himl);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void FindProgramTopicDlg::Refresh()
|
void FindProgramTopicDlg::Refresh()
|
||||||
{
|
{
|
||||||
WaitCursor wait;
|
WaitCursor wait;
|
||||||
|
@ -129,25 +140,31 @@ void FindProgramTopicDlg::collect_programs_callback(ShellFolder& folder, const S
|
||||||
hr = pShellLink->GetPath(path, MAX_PATH-1, (WIN32_FIND_DATA*)&wfd, SLGP_UNCPRIORITY);
|
hr = pShellLink->GetPath(path, MAX_PATH-1, (WIN32_FIND_DATA*)&wfd, SLGP_UNCPRIORITY);
|
||||||
|
|
||||||
if (SUCCEEDED(hr)) {
|
if (SUCCEEDED(hr)) {
|
||||||
if (_tcsstr(path, _T(".exe"))) { //@@
|
String lwr_path = path;
|
||||||
HWND list_ctrl = (HWND)param;
|
String lwr_name = entry->_display_name;
|
||||||
|
|
||||||
LV_ITEM item = {LVIF_TEXT, INT_MAX};
|
_tcslwr((LPTSTR)lwr_path.c_str());
|
||||||
|
_tcslwr((LPTSTR)lwr_name.c_str());
|
||||||
|
|
||||||
|
if (_tcsstr(lwr_path, _T(".exe")) && //@@ filter on ".exe" suffix
|
||||||
|
!_tcsstr(lwr_name, _T("uninstal")) && !_tcsstr(lwr_name, _T("deinstal"))) { //@@ filter out deinstallation links
|
||||||
|
FindProgramTopicDlg* pThis = (FindProgramTopicDlg*) param;
|
||||||
|
|
||||||
|
LV_ITEM item = {LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM, INT_MAX};
|
||||||
|
|
||||||
item.pszText = entry->_display_name;
|
item.pszText = entry->_display_name;
|
||||||
item.iItem = ListView_InsertItem(list_ctrl, &item);
|
item.iImage = ImageList_AddIcon(pThis->_himl, entry->_hIcon);
|
||||||
|
item.lParam = 0; //@@
|
||||||
item.iSubItem = 1;
|
|
||||||
item.pszText = path;
|
|
||||||
ListView_SetItem(list_ctrl, &item);
|
|
||||||
|
|
||||||
int icon;
|
|
||||||
hr = pShellLink->GetIconLocation(path, MAX_PATH-1, &icon);
|
|
||||||
|
|
||||||
//TODO: display icon
|
|
||||||
|
|
||||||
//TODO: store info in ShellPathWithFolder
|
//TODO: store info in ShellPathWithFolder
|
||||||
|
|
||||||
|
item.iItem = ListView_InsertItem(pThis->_list_ctrl, &item);
|
||||||
|
|
||||||
|
item.mask = LVIF_TEXT;
|
||||||
|
item.iSubItem = 1;
|
||||||
|
item.pszText = path;
|
||||||
|
|
||||||
|
ListView_SetItem(pThis->_list_ctrl, &item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -179,3 +196,30 @@ int FindProgramTopicDlg::Command(int id, int code)
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int FindProgramTopicDlg::Notify(int id, NMHDR* pnmh)
|
||||||
|
{
|
||||||
|
switch(pnmh->code) {
|
||||||
|
case LVN_GETDISPINFO: {
|
||||||
|
LV_DISPINFO* pDispInfo = (LV_DISPINFO*) pnmh;
|
||||||
|
|
||||||
|
if (pnmh->hwndFrom == _list_ctrl) {
|
||||||
|
/*
|
||||||
|
if (pDispInfo->item.mask & LVIF_IMAGE) {
|
||||||
|
int icon;
|
||||||
|
HRESULT hr = pShellLink->GetIconLocation(path, MAX_PATH-1, &icon);
|
||||||
|
|
||||||
|
HICON hIcon = ExtractIcon();
|
||||||
|
pDispInfo->item.iImage = ImageList_AddIcon(_himl, hIcon);
|
||||||
|
|
||||||
|
pDispInfo->item.mask |= LVIF_DI_SETITEM;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
break;}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
|
@ -28,7 +28,8 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
|
|
||||||
struct ShellPathWithFolder {
|
struct ShellPathWithFolder
|
||||||
|
{
|
||||||
ShellPathWithFolder(const ShellFolder& folder, const ShellPath& path)
|
ShellPathWithFolder(const ShellFolder& folder, const ShellPath& path)
|
||||||
: _folder(folder), _path(path) {}
|
: _folder(folder), _path(path) {}
|
||||||
|
|
||||||
|
@ -41,9 +42,10 @@ typedef void (*COLLECT_CALLBACK)(ShellFolder& folder, const ShellEntry* entry, v
|
||||||
|
|
||||||
struct CollectProgramsThread : public Thread
|
struct CollectProgramsThread : public Thread
|
||||||
{
|
{
|
||||||
CollectProgramsThread(COLLECT_CALLBACK callback, HWND hwnd)
|
CollectProgramsThread(COLLECT_CALLBACK callback, HWND hwnd, void* para)
|
||||||
: _callback(callback),
|
: _callback(callback),
|
||||||
_hwnd(hwnd)
|
_hwnd(hwnd),
|
||||||
|
_para(para)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,6 +54,7 @@ struct CollectProgramsThread : public Thread
|
||||||
protected:
|
protected:
|
||||||
COLLECT_CALLBACK _callback;
|
COLLECT_CALLBACK _callback;
|
||||||
HWND _hwnd;
|
HWND _hwnd;
|
||||||
|
void* _para;
|
||||||
|
|
||||||
void CollectProgramsThread::collect_programs(const ShellPath& path);
|
void CollectProgramsThread::collect_programs(const ShellPath& path);
|
||||||
};
|
};
|
||||||
|
@ -62,15 +65,19 @@ struct FindProgramTopicDlg : public ResizeController<Dialog>
|
||||||
typedef ResizeController<Dialog> super;
|
typedef ResizeController<Dialog> super;
|
||||||
|
|
||||||
FindProgramTopicDlg(HWND hwnd);
|
FindProgramTopicDlg(HWND hwnd);
|
||||||
|
~FindProgramTopicDlg();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
CommonControlInit _usingCmnCtrl;
|
||||||
HWND _list_ctrl;
|
HWND _list_ctrl;
|
||||||
HACCEL _haccel;
|
HACCEL _haccel;
|
||||||
|
HIMAGELIST _himl;
|
||||||
|
|
||||||
CollectProgramsThread _thread;
|
CollectProgramsThread _thread;
|
||||||
|
|
||||||
virtual LRESULT WndProc(UINT message, WPARAM wparam, LPARAM lparam);
|
virtual LRESULT WndProc(UINT message, WPARAM wparam, LPARAM lparam);
|
||||||
virtual int Command(int id, int code);
|
virtual int Command(int id, int code);
|
||||||
|
virtual int Notify(int id, NMHDR* pnmh);
|
||||||
|
|
||||||
void Refresh();
|
void Refresh();
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
// Generated from the TEXTINCLUDE 2 resource.
|
// Generated from the TEXTINCLUDE 2 resource.
|
||||||
//
|
//
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <winuser.h>
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
#undef APSTUDIO_READONLY_SYMBOLS
|
#undef APSTUDIO_READONLY_SYMBOLS
|
||||||
|
@ -143,12 +142,21 @@ IDB_LOGOV BITMAP DISCARDABLE "res/logov.bmp"
|
||||||
// Accelerator
|
// Accelerator
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#ifdef __WINE__
|
||||||
IDA_EXPLORER ACCELERATORS DISCARDABLE
|
IDA_EXPLORER ACCELERATORS DISCARDABLE
|
||||||
BEGIN
|
BEGIN
|
||||||
VK_X, ID_FILE_EXIT, VIRTKEY, ALT, NOINVERT
|
VK_X, ID_FILE_EXIT, VIRTKEY, ALT, NOINVERT
|
||||||
VK_S, ID_VIEW_FULLSCREEN, VIRTKEY, SHIFT, CONTROL,
|
VK_S, ID_VIEW_FULLSCREEN, VIRTKEY, SHIFT, CONTROL,
|
||||||
NOINVERT
|
NOINVERT
|
||||||
END
|
END
|
||||||
|
#else
|
||||||
|
IDA_EXPLORER ACCELERATORS DISCARDABLE
|
||||||
|
BEGIN
|
||||||
|
"X", ID_FILE_EXIT, VIRTKEY, ALT, NOINVERT
|
||||||
|
"S", ID_VIEW_FULLSCREEN, VIRTKEY, SHIFT, CONTROL,
|
||||||
|
NOINVERT
|
||||||
|
END
|
||||||
|
#endif
|
||||||
|
|
||||||
IDA_SEARCH_PROGRAM ACCELERATORS DISCARDABLE
|
IDA_SEARCH_PROGRAM ACCELERATORS DISCARDABLE
|
||||||
BEGIN
|
BEGIN
|
||||||
|
@ -559,7 +567,7 @@ BEGIN
|
||||||
PUSHBUTTON "&Help",254,158,43,47,14
|
PUSHBUTTON "&Help",254,158,43,47,14
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_SEARCH_PROGRAM DIALOGEX 0, 0, 144, 65
|
IDD_SEARCH_PROGRAM DIALOGEX 120, 100, 144, 65
|
||||||
STYLE WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION |
|
STYLE WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION |
|
||||||
WS_SYSMENU | WS_THICKFRAME
|
WS_SYSMENU | WS_THICKFRAME
|
||||||
EXSTYLE WS_EX_APPWINDOW
|
EXSTYLE WS_EX_APPWINDOW
|
||||||
|
@ -567,7 +575,7 @@ CAPTION "Search Program in Startmenu"
|
||||||
FONT 8, "MS Sans Serif"
|
FONT 8, "MS Sans Serif"
|
||||||
BEGIN
|
BEGIN
|
||||||
EDITTEXT IDC_TOPIC,7,7,130,14,ES_AUTOHSCROLL
|
EDITTEXT IDC_TOPIC,7,7,130,14,ES_AUTOHSCROLL
|
||||||
CONTROL "List1",IDC_MAILS_FOUND,"SysListView32",LVS_REPORT |
|
CONTROL "List1",IDC_MAILS_FOUND,"SysListView32",LVS_REPORT | LVS_SINGLESEL|
|
||||||
LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,7,25,130,33
|
LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,7,25,130,33
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -773,15 +773,14 @@ int StartMenuRoot::Command(int id, int code)
|
||||||
CreateSubmenu(id, CSIDL_COMMON_PROGRAMS, CSIDL_PROGRAMS);
|
CreateSubmenu(id, CSIDL_COMMON_PROGRAMS, CSIDL_PROGRAMS);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IDC_SEARCH_PROGRAM: {
|
case IDC_SEARCH_PROGRAM:
|
||||||
HWND hwndDesktopBar = GetWindow(_hwnd, GW_OWNER);
|
|
||||||
CloseStartMenu(id);
|
CloseStartMenu(id);
|
||||||
Dialog::DoModal(IDD_SEARCH_PROGRAM, WINDOW_CREATOR(FindProgramTopicDlg), hwndDesktopBar);
|
Dialog::DoModal(IDD_SEARCH_PROGRAM, WINDOW_CREATOR(FindProgramTopicDlg));
|
||||||
break;}
|
break;
|
||||||
|
|
||||||
case IDC_EXPLORE:
|
case IDC_EXPLORE:
|
||||||
explorer_show_frame(_hwnd, SW_SHOWNORMAL);
|
|
||||||
CloseStartMenu(id);
|
CloseStartMenu(id);
|
||||||
|
explorer_show_frame(_hwnd, SW_SHOWNORMAL);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IDC_LAUNCH: {
|
case IDC_LAUNCH: {
|
||||||
|
|
|
@ -333,8 +333,8 @@ struct Dialog : public Window
|
||||||
Dialog(HWND);
|
Dialog(HWND);
|
||||||
~Dialog();
|
~Dialog();
|
||||||
|
|
||||||
static int DoModal(UINT nid, CREATORFUNC creator, HWND hwndParent);
|
static int DoModal(UINT nid, CREATORFUNC creator, HWND hwndParent=0);
|
||||||
static int DoModal(UINT nid, CREATORFUNC creator, const void* info, HWND hwndParent);
|
static int DoModal(UINT nid, CREATORFUNC creator, const void* info, HWND hwndParent=0);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
LRESULT WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam);
|
LRESULT WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam);
|
||||||
|
|
Loading…
Reference in a new issue