[DEVMGMT]

Implement the 'View/Devices by Connection' feature. It runs very well on windows XP but fails on ReactOS. Needs to be investigated.

svn path=/trunk/; revision=56197
This commit is contained in:
Eric Kohl 2012-03-20 22:11:51 +00:00
parent f2162e8335
commit 8f0db19a99
24 changed files with 452 additions and 159 deletions

View file

@ -421,6 +421,165 @@ ListDevicesByType(HWND hTreeView,
} }
static HTREEITEM
AddDeviceToTree(HWND hTreeView,
HTREEITEM hRoot,
DEVINST dnDevInst)
{
TCHAR DevName[MAX_DEV_LEN];
TCHAR FriendlyName[MAX_DEV_LEN];
TCHAR ClassGuidString[MAX_GUID_STRING_LEN];
GUID ClassGuid;
ULONG ulLength;
LPTSTR DeviceID;
INT ClassImage = 24;
CONFIGRET cr;
cr = CM_Get_Device_ID(dnDevInst,
DevName,
MAX_DEV_LEN,
0);
if (cr != CR_SUCCESS)
return NULL;
ulLength = MAX_DEV_LEN * sizeof(TCHAR);
cr = CM_Get_DevNode_Registry_Property(dnDevInst,
CM_DRP_FRIENDLYNAME,
NULL,
FriendlyName,
&ulLength,
0);
if (cr != CR_SUCCESS)
{
ulLength = MAX_DEV_LEN * sizeof(TCHAR);
cr = CM_Get_DevNode_Registry_Property(dnDevInst,
CM_DRP_DEVICEDESC,
NULL,
FriendlyName,
&ulLength,
0);
if (cr != CR_SUCCESS)
return NULL;
}
ulLength = MAX_GUID_STRING_LEN * sizeof(TCHAR);
cr = CM_Get_DevNode_Registry_Property(dnDevInst,
CM_DRP_CLASSGUID,
NULL,
ClassGuidString,
&ulLength,
0);
if (cr == CR_SUCCESS)
{
pSetupGuidFromString(ClassGuidString, &ClassGuid);
if (!SetupDiGetClassImageIndex(&ImageListData,
&ClassGuid,
&ClassImage))
{
/* FIXME: can we do this?
* Set the blank icon: IDI_SETUPAPI_BLANK = 41
* it'll be image 24 in the imagelist */
ClassImage = 24;
}
}
if (DevName != NULL)
{
DeviceID = HeapAlloc(GetProcessHeap(),
0,
(lstrlen(DevName) + 1) * sizeof(TCHAR));
if (DeviceID == NULL)
{
return NULL;
}
lstrcpy(DeviceID, DevName);
}
return InsertIntoTreeView(hTreeView,
hRoot,
FriendlyName,
DeviceID,
ClassImage,
0);
}
static VOID
EnumChildDevices(HWND hTreeView,
HTREEITEM hRoot,
DEVINST dnParentDevInst)
{
HTREEITEM hDevItem;
DEVINST dnDevInst;
CONFIGRET cr;
cr = CM_Get_Child(&dnDevInst,
dnParentDevInst,
0);
if (cr != CR_SUCCESS)
return;
hDevItem = AddDeviceToTree(hTreeView,
hRoot,
dnDevInst);
if (hDevItem == NULL)
return;
EnumChildDevices(hTreeView,
hDevItem,
dnDevInst);
while (cr == CR_SUCCESS)
{
cr = CM_Get_Sibling(&dnDevInst,
dnDevInst,
0);
if (cr != CR_SUCCESS)
break;
hDevItem = AddDeviceToTree(hTreeView,
hRoot,
dnDevInst);
if (hDevItem == NULL)
break;
EnumChildDevices(hTreeView,
hDevItem,
dnDevInst);
}
(void)TreeView_SortChildren(hTreeView,
hRoot,
0);
}
VOID
ListDevicesByConnection(HWND hTreeView,
HTREEITEM hRoot)
{
DEVINST devInst;
CONFIGRET cr;
cr = CM_Locate_DevNode(&devInst,
NULL,
CM_LOCATE_DEVNODE_NORMAL);
if (cr == CR_SUCCESS)
EnumChildDevices(hTreeView,
hRoot,
devInst);
(void)TreeView_Expand(hTreeView,
hRoot,
TVE_EXPAND);
(void)TreeView_SelectItem(hTreeView,
hRoot);
}
HTREEITEM HTREEITEM
InitTreeView(HWND hTreeView) InitTreeView(HWND hTreeView)
{ {

View file

@ -1,4 +1,4 @@
LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT
IDR_MAINMENU MENU IDR_MAINMENU MENU
BEGIN BEGIN
@ -16,10 +16,10 @@ BEGIN
END END
POPUP "Изглед" POPUP "Изглед"
BEGIN BEGIN
MENUITEM "Устройствата според вид", IDC_DEVBYTYPE, CHECKED MENUITEM "Устройствата според вид", IDC_DEVBYTYPE
MENUITEM "Устройствата според свързването", IDC_STATIC, GRAYED MENUITEM "Устройствата според свързването", IDC_DEVBYCONN
MENUITEM "Средствата според вида", IDC_STATIC, GRAYED MENUITEM "Средствата според вида", IDC_RESBYTYPE, GRAYED
MENUITEM "Средствата според свързването", IDC_STATIC, GRAYED MENUITEM "Средствата според свързването", IDC_RESBYCONN, GRAYED
END END
POPUP "Помощ" POPUP "Помощ"
BEGIN BEGIN

View file

@ -16,10 +16,10 @@ BEGIN
END END
POPUP "&Zobrazení" POPUP "&Zobrazení"
BEGIN BEGIN
MENUITEM "Zařízení podle typu", IDC_DEVBYTYPE, CHECKED MENUITEM "Zařízení podle typu", IDC_DEVBYTYPE
MENUITEM "Zařízení podle připojení", IDC_STATIC, GRAYED MENUITEM "Zařízení podle připojení", IDC_DEVBYCONN
MENUITEM "Prostředky podle typu", IDC_STATIC, GRAYED MENUITEM "Prostředky podle typu", IDC_RESBYTYPE, GRAYED
MENUITEM "Prostředky podle připojení", IDC_STATIC, GRAYED MENUITEM "Prostředky podle připojení", IDC_RESBYCONN, GRAYED
END END
POPUP "Nápověda" POPUP "Nápověda"
BEGIN BEGIN

View file

@ -4,27 +4,27 @@ IDR_MAINMENU MENU
BEGIN BEGIN
POPUP "&Datei" POPUP "&Datei"
BEGIN BEGIN
MENUITEM "&Beenden", IDC_EXIT MENUITEM "&Beenden", IDC_EXIT
END END
POPUP "Aktion" POPUP "Aktion"
BEGIN BEGIN
MENUITEM "Drucken", IDC_PRINT, GRAYED MENUITEM "Drucken", IDC_PRINT, GRAYED
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "Eigenschaften", IDC_PROP, GRAYED MENUITEM "Eigenschaften", IDC_PROP, GRAYED
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "Hilfe", IDC_PROGHELP, GRAYED MENUITEM "Hilfe", IDC_PROGHELP, GRAYED
END END
POPUP "Ansicht" POPUP "Ansicht"
BEGIN BEGIN
MENUITEM "Geräte nach Typ", IDC_DEVBYTYPE, CHECKED MENUITEM "Geräte nach Typ", IDC_DEVBYTYPE
MENUITEM "Geräte nach Verbindung", IDC_STATIC, GRAYED MENUITEM "Geräte nach Verbindung", IDC_DEVBYCONN
MENUITEM "Resourcen nach Typ", IDC_STATIC, GRAYED MENUITEM "Resourcen nach Typ", IDC_RESBYTYPE, GRAYED
MENUITEM "Resourcen nach Verbindung", IDC_STATIC, GRAYED MENUITEM "Resourcen nach Verbindung", IDC_RESBYCONN, GRAYED
END END
POPUP "&?" POPUP "&?"
BEGIN BEGIN
MENUITEM "Hilfe", IDC_PROGHELP MENUITEM "Hilfe", IDC_PROGHELP
MENUITEM "Info", IDC_ABOUT MENUITEM "Info", IDC_ABOUT
END END
END END
@ -32,9 +32,9 @@ IDR_POPUP MENU
BEGIN BEGIN
POPUP "popup" POPUP "popup"
BEGIN BEGIN
MENUITEM "Eigenschaften", IDC_PROP, GRAYED MENUITEM "Eigenschaften", IDC_PROP, GRAYED
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "Hilfe", IDC_PROGHELP MENUITEM "Hilfe", IDC_PROGHELP
END END
END END

View file

@ -1,4 +1,4 @@
LANGUAGE LANG_GREEK, SUBLANG_DEFAULT LANGUAGE LANG_GREEK, SUBLANG_DEFAULT
IDR_MAINMENU MENU IDR_MAINMENU MENU
BEGIN BEGIN
@ -16,10 +16,10 @@ BEGIN
END END
POPUP "Εμφάνιση" POPUP "Εμφάνιση"
BEGIN BEGIN
MENUITEM "Συσκευές ανά τύπο", IDC_DEVBYTYPE, CHECKED MENUITEM "Συσκευές ανά τύπο", IDC_DEVBYTYPE
MENUITEM "Συσκευές ανά σύνδεση", IDC_STATIC, GRAYED MENUITEM "Συσκευές ανά σύνδεση", IDC_DEVBYCONN
MENUITEM "Πηγές ανά τύπο", IDC_STATIC, GRAYED MENUITEM "Πηγές ανά τύπο", IDC_RESBYTYPE, GRAYED
MENUITEM "Πηγές ανά σύνδεση", IDC_STATIC, GRAYED MENUITEM "Πηγές ανά σύνδεση", IDC_RESBYCONN, GRAYED
END END
POPUP "Βοήθεια" POPUP "Βοήθεια"
BEGIN BEGIN

View file

@ -16,10 +16,10 @@ BEGIN
END END
POPUP "View" POPUP "View"
BEGIN BEGIN
MENUITEM "Devices by type", IDC_DEVBYTYPE, CHECKED MENUITEM "Devices by type", IDC_DEVBYTYPE
MENUITEM "Devices by connection", IDC_STATIC, GRAYED MENUITEM "Devices by connection", IDC_DEVBYCONN
MENUITEM "Resources by type", IDC_STATIC, GRAYED MENUITEM "Resources by type", IDC_RESBYTYPE, GRAYED
MENUITEM "Resources by connection", IDC_STATIC, GRAYED MENUITEM "Resources by connection", IDC_RESBYCONN, GRAYED
END END
POPUP "Help" POPUP "Help"
BEGIN BEGIN

View file

@ -1,4 +1,4 @@
/* /*
* Spanish Language resource file * Spanish Language resource file
* Traducido por: Javier Remacha 2007-12-21 * Traducido por: Javier Remacha 2007-12-21
*/ */
@ -21,10 +21,10 @@ BEGIN
END END
POPUP "Ver" POPUP "Ver"
BEGIN BEGIN
MENUITEM "Dispositivos por tipo", IDC_DEVBYTYPE, CHECKED MENUITEM "Dispositivos por tipo", IDC_DEVBYTYPE
MENUITEM "Dispositivos por conexión", IDC_STATIC, GRAYED MENUITEM "Dispositivos por conexión", IDC_DEVBYCONN
MENUITEM "Recursos por tipo", IDC_STATIC, GRAYED MENUITEM "Recursos por tipo", IDC_RESBYTYPE, GRAYED
MENUITEM "Recursos por conexión", IDC_STATIC, GRAYED MENUITEM "Recursos por conexión", IDC_RESBYCONN, GRAYED
END END
POPUP "Ayuda" POPUP "Ayuda"
BEGIN BEGIN

View file

@ -1,4 +1,4 @@
LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
IDR_MAINMENU MENU IDR_MAINMENU MENU
BEGIN BEGIN
@ -16,10 +16,10 @@ BEGIN
END END
POPUP "Affichage" POPUP "Affichage"
BEGIN BEGIN
MENUITEM "Périphériques par type", IDC_DEVBYTYPE, CHECKED MENUITEM "Périphériques par type", IDC_DEVBYTYPE
MENUITEM "Périphériques par connexion", IDC_STATIC, GRAYED MENUITEM "Périphériques par connexion", IDC_DEVBYCONN
MENUITEM "Ressources par type", IDC_STATIC, GRAYED MENUITEM "Ressources par type", IDC_RESBYTYPE, GRAYED
MENUITEM "Ressources par connexion", IDC_STATIC, GRAYED MENUITEM "Ressources par connexion", IDC_RESBYCONN, GRAYED
END END
POPUP "Aide" POPUP "Aide"
BEGIN BEGIN

View file

@ -16,10 +16,10 @@ BEGIN
END END
POPUP "Lihat" POPUP "Lihat"
BEGIN BEGIN
MENUITEM "Device dengan tipe", IDC_DEVBYTYPE, CHECKED MENUITEM "Device dengan tipe", IDC_DEVBYTYPE
MENUITEM "Device dengan koneksi", IDC_STATIC, GRAYED MENUITEM "Device dengan koneksi", IDC_DEVBYCONN
MENUITEM "Resource dengan tipe", IDC_STATIC, GRAYED MENUITEM "Resource dengan tipe", IDC_RESBYTYPE, GRAYED
MENUITEM "Resource dengan koneksi", IDC_STATIC, GRAYED MENUITEM "Resource dengan koneksi", IDC_RESBYCONN, GRAYED
END END
POPUP "Bantuan" POPUP "Bantuan"
BEGIN BEGIN

View file

@ -1,4 +1,4 @@
LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
IDR_MAINMENU MENU IDR_MAINMENU MENU
BEGIN BEGIN
@ -16,10 +16,10 @@ BEGIN
END END
POPUP "Visualizza" POPUP "Visualizza"
BEGIN BEGIN
MENUITEM "Dispositivi per tipo", IDC_DEVBYTYPE, CHECKED MENUITEM "Dispositivi per tipo", IDC_DEVBYTYPE
MENUITEM "Dispositivi per connessione", IDC_STATIC, GRAYED MENUITEM "Dispositivi per connessione", IDC_DEVBYCONN
MENUITEM "Risorse per tipo", IDC_STATIC, GRAYED MENUITEM "Risorse per tipo", IDC_RESBYTYPE, GRAYED
MENUITEM "Risorse per connessione", IDC_STATIC, GRAYED MENUITEM "Risorse per connessione", IDC_RESBYCONN, GRAYED
END END
POPUP "Aiuto" POPUP "Aiuto"
BEGIN BEGIN

View file

@ -1,4 +1,4 @@
LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
IDR_MAINMENU MENU IDR_MAINMENU MENU
BEGIN BEGIN
@ -16,10 +16,10 @@ BEGIN
END END
POPUP "表 示" POPUP "表 示"
BEGIN BEGIN
MENUITEM "デバイス (種類別)", IDC_DEVBYTYPE, CHECKED MENUITEM "デバイス (種類別)", IDC_DEVBYTYPE
MENUITEM "デバイス (接続別)", IDC_STATIC, GRAYED MENUITEM "デバイス (接続別)", IDC_DEVBYCONN
MENUITEM "リソ ース (種類別)", IDC_STATIC, GRAYED MENUITEM "リソ ース (種類別)", IDC_RESBYTYPE, GRAYED
MENUITEM "リソ ース (接続別)", IDC_STATIC, GRAYED MENUITEM "リソ ース (接続別)", IDC_RESBYCONN, GRAYED
END END
POPUP "ヘルプ" POPUP "ヘルプ"
BEGIN BEGIN

View file

@ -1,4 +1,4 @@
/* /*
* Korean translation by manatails007(www.manatails007.org) * Korean translation by manatails007(www.manatails007.org)
*/ */
@ -20,10 +20,10 @@ BEGIN
END END
POPUP "보기" POPUP "보기"
BEGIN BEGIN
MENUITEM "Devices by type", IDC_DEVBYTYPE, CHECKED MENUITEM "Devices by type", IDC_DEVBYTYPE
MENUITEM "Devices by connection", IDC_STATIC, GRAYED MENUITEM "Devices by connection", IDC_DEVBYCONN
MENUITEM "Resources by type", IDC_STATIC, GRAYED MENUITEM "Resources by type", IDC_RESBYTYPE, GRAYED
MENUITEM "Resources by connection", IDC_STATIC, GRAYED MENUITEM "Resources by connection", IDC_RESBYCONN, GRAYED
END END
POPUP "도움말" POPUP "도움말"
BEGIN BEGIN

View file

@ -1,4 +1,4 @@
LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL
IDR_MAINMENU MENU IDR_MAINMENU MENU
BEGIN BEGIN
@ -16,10 +16,10 @@ BEGIN
END END
POPUP "Vis" POPUP "Vis"
BEGIN BEGIN
MENUITEM "Enheter etter type", IDC_DEVBYTYPE, CHECKED MENUITEM "Enheter etter type", IDC_DEVBYTYPE
MENUITEM "Enheter etter tilkobling", IDC_STATIC, GRAYED MENUITEM "Enheter etter tilkobling", IDC_DEVBYCONN
MENUITEM "Ressurser etter type", IDC_STATIC, GRAYED MENUITEM "Ressurser etter type", IDC_RESBYTYPE, GRAYED
MENUITEM "Ressurser etter tilkobling", IDC_STATIC, GRAYED MENUITEM "Ressurser etter tilkobling", IDC_RESBYCONN, GRAYED
END END
POPUP "Hjelp" POPUP "Hjelp"
BEGIN BEGIN

View file

@ -1,4 +1,4 @@
/* /*
* translated by xrogers * translated by xrogers
* xxrogers@users.sourceforge.net * xxrogers@users.sourceforge.net
* https://sourceforge.net/projects/reactospl * https://sourceforge.net/projects/reactospl
@ -23,10 +23,10 @@ BEGIN
END END
POPUP "&Widok" POPUP "&Widok"
BEGIN BEGIN
MENUITEM "Urządzenia w&edług typu", IDC_DEVBYTYPE, CHECKED MENUITEM "Urządzenia w&edług typu", IDC_DEVBYTYPE
MENUITEM "Ur&ządzenia według połączenia", IDC_STATIC, GRAYED MENUITEM "Ur&ządzenia według połączenia", IDC_DEVBYCONN
MENUITEM "Zaso&by według typu", IDC_STATIC, GRAYED MENUITEM "Zaso&by według typu", IDC_RESBYTYPE, GRAYED
MENUITEM "Za&soby według połączenia", IDC_STATIC, GRAYED MENUITEM "Za&soby według połączenia", IDC_RESBYCONN, GRAYED
END END
POPUP "Pomo&c" POPUP "Pomo&c"
BEGIN BEGIN

View file

@ -1,4 +1,4 @@
//2011.10.19 - Fulea Ștefan: minor changes //2011.10.19 - Fulea Ștefan: minor changes
LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL
IDR_MAINMENU MENU IDR_MAINMENU MENU
@ -17,10 +17,10 @@ BEGIN
END END
POPUP "&Afișare" POPUP "&Afișare"
BEGIN BEGIN
MENUITEM "Dispozitive după &tip", IDC_DEVBYTYPE, CHECKED MENUITEM "Dispozitive după &tip", IDC_DEVBYTYPE
MENUITEM "Dispozitive după &conexiune", IDC_STATIC, GRAYED MENUITEM "Dispozitive după &conexiune", IDC_DEVBYCONN
MENUITEM "Resurse după t&ip", IDC_STATIC, GRAYED MENUITEM "Resurse după t&ip", IDC_RESBYTYPE, GRAYED
MENUITEM "Resurse după c&onexiune", IDC_STATIC, GRAYED MENUITEM "Resurse după c&onexiune", IDC_RESBYCONN, GRAYED
END END
POPUP "&?" POPUP "&?"
BEGIN BEGIN

View file

@ -1,4 +1,4 @@
// Russian language resource file (Dmitry Chapyshev, 2007-06-10) // Russian language resource file (Dmitry Chapyshev, 2007-06-10)
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
@ -18,10 +18,10 @@ BEGIN
END END
POPUP "Вид" POPUP "Вид"
BEGIN BEGIN
MENUITEM "Устройства по типу", IDC_DEVBYTYPE, CHECKED MENUITEM "Устройства по типу", IDC_DEVBYTYPE
MENUITEM "Устройства по подключению", IDC_STATIC, GRAYED MENUITEM "Устройства по подключению", IDC_DEVBYCONN
MENUITEM "Ресурсы по типу", IDC_STATIC, GRAYED MENUITEM "Ресурсы по типу", IDC_RESBYTYPE, GRAYED
MENUITEM "Ресурсы по подключению", IDC_STATIC, GRAYED MENUITEM "Ресурсы по подключению", IDC_RESBYCONN, GRAYED
END END
POPUP "Справка" POPUP "Справка"
BEGIN BEGIN

View file

@ -1,4 +1,4 @@
/* TRANSLATOR: Mário Kačmár /Mario Kacmar/ aka Kario (kario@szm.sk) /* TRANSLATOR: Mário Kačmár /Mario Kacmar/ aka Kario (kario@szm.sk)
* DATE OF TR.: 14-02-2008 * DATE OF TR.: 14-02-2008
* LAST CHANGE: 29-08-2008 * LAST CHANGE: 29-08-2008
*/ */
@ -21,10 +21,10 @@ BEGIN
END END
POPUP "Zobraziť" POPUP "Zobraziť"
BEGIN BEGIN
MENUITEM "Zariadenia podľa typu", IDC_DEVBYTYPE, CHECKED MENUITEM "Zariadenia podľa typu", IDC_DEVBYTYPE
MENUITEM "Zariadenia podľa pripojenia", IDC_STATIC, GRAYED MENUITEM "Zariadenia podľa pripojenia", IDC_DEVBYCONN
MENUITEM "Prostriedky podľa typu", IDC_STATIC, GRAYED MENUITEM "Prostriedky podľa typu", IDC_RESBYTYPE, GRAYED
MENUITEM "Prostriedky podľa pripojenia", IDC_STATIC, GRAYED MENUITEM "Prostriedky podľa pripojenia", IDC_RESBYCONN, GRAYED
END END
POPUP "Pomocník" POPUP "Pomocník"
BEGIN BEGIN

View file

@ -1,4 +1,4 @@
/* /*
* PROJECT: ReactOS MSCUTILS * PROJECT: ReactOS MSCUTILS
* FILE: base\applications\mscutils\devmgmt\lang\sv-SE.rc * FILE: base\applications\mscutils\devmgmt\lang\sv-SE.rc
* PURPOSE: Swedish resource file * PURPOSE: Swedish resource file
@ -23,10 +23,10 @@ BEGIN
END END
POPUP "Visa" POPUP "Visa"
BEGIN BEGIN
MENUITEM "Enheter efter typ", IDC_DEVBYTYPE, CHECKED MENUITEM "Enheter efter typ", IDC_DEVBYTYPE
MENUITEM "Enheter efter koppling", IDC_STATIC, GRAYED MENUITEM "Enheter efter koppling", IDC_DEVBYCONN
MENUITEM "Resurcer efter typ", IDC_STATIC, GRAYED MENUITEM "Resurcer efter typ", IDC_RESBYTYPE, GRAYED
MENUITEM "Resurcer efter koppling", IDC_STATIC, GRAYED MENUITEM "Resurcer efter koppling", IDC_RESBYCONN, GRAYED
END END
POPUP "Hjälp" POPUP "Hjälp"
BEGIN BEGIN

View file

@ -1,4 +1,4 @@
/* /*
* PROJECT: ReactOS Device Management * PROJECT: ReactOS Device Management
* LICENSE: GPL - See COPYING in the top level directory * LICENSE: GPL - See COPYING in the top level directory
* FILE: base/applications/devmgmt/lang/th-TH.rc * FILE: base/applications/devmgmt/lang/th-TH.rc
@ -24,10 +24,10 @@ BEGIN
END END
POPUP "มุมมอง" POPUP "มุมมอง"
BEGIN BEGIN
MENUITEM "อุปกรณ์แบ่งตามประเภท", IDC_DEVBYTYPE, CHECKED MENUITEM "อุปกรณ์แบ่งตามประเภท", IDC_DEVBYTYPE
MENUITEM "อุปกรณ์แบ่งตามการเชื่อมต่อ", IDC_STATIC, GRAYED MENUITEM "อุปกรณ์แบ่งตามการเชื่อมต่อ", IDC_DEVBYCONN
MENUITEM "แหล่งข้อมูลตามประเภท", IDC_STATIC, GRAYED MENUITEM "แหล่งข้อมูลตามประเภท", IDC_RESBYTYPE, GRAYED
MENUITEM "แหล่งข้อมูลตามการเชื่อมต่อ", IDC_STATIC, GRAYED MENUITEM "แหล่งข้อมูลตามการเชื่อมต่อ", IDC_RESBYCONN, GRAYED
END END
POPUP "ช่วยเหลือ" POPUP "ช่วยเหลือ"
BEGIN BEGIN

View file

@ -1,4 +1,4 @@
/* /*
* PROJECT: ReactOS Device Management * PROJECT: ReactOS Device Management
* LICENSE: GPL - See COPYING in the top level directory * LICENSE: GPL - See COPYING in the top level directory
* FILE: base/applications/devmgmt/lang/uk-UA.rc * FILE: base/applications/devmgmt/lang/uk-UA.rc
@ -24,10 +24,10 @@ BEGIN
END END
POPUP "Вигляд" POPUP "Вигляд"
BEGIN BEGIN
MENUITEM "Пристрої за типом", IDC_DEVBYTYPE, CHECKED MENUITEM "Пристрої за типом", IDC_DEVBYTYPE
MENUITEM "Пристрої за підключенням", IDC_STATIC, GRAYED MENUITEM "Пристрої за підключенням", IDC_DEVBYCONN
MENUITEM "Ресурси за типом", IDC_STATIC, GRAYED MENUITEM "Ресурси за типом", IDC_RESBYTYPE, GRAYED
MENUITEM "Ресурси за підключенням", IDC_STATIC, GRAYED MENUITEM "Ресурси за підключенням", IDC_RESBYCONN, GRAYED
END END
POPUP "Довідка" POPUP "Довідка"
BEGIN BEGIN

View file

@ -1,4 +1,4 @@
/* /*
* Translated by Song Fuchang (0xfc) <sfc_0@yahoo.com.cn> * Translated by Song Fuchang (0xfc) <sfc_0@yahoo.com.cn>
*/ */
@ -20,10 +20,10 @@ BEGIN
END END
POPUP "查看" POPUP "查看"
BEGIN BEGIN
MENUITEM "设备,按类型", IDC_DEVBYTYPE, CHECKED MENUITEM "设备,按类型", IDC_DEVBYTYPE
MENUITEM "设备,按连接", IDC_STATIC, GRAYED MENUITEM "设备,按连接", IDC_DEVBYCONN
MENUITEM "资源,按类型", IDC_STATIC, GRAYED MENUITEM "资源,按类型", IDC_RESBYTYPE, GRAYED
MENUITEM "资源,按连接", IDC_STATIC, GRAYED MENUITEM "资源,按连接", IDC_RESBYCONN, GRAYED
END END
POPUP "帮助" POPUP "帮助"
BEGIN BEGIN

View file

@ -203,18 +203,30 @@ CreateStatusBar(PMAIN_WND_INFO Info)
static DWORD WINAPI static DWORD WINAPI
DeviceEnumThread(LPVOID lpParameter) DeviceEnumThread(LPVOID lpParameter)
{ {
PMAIN_WND_INFO Info;
HTREEITEM hRoot; HTREEITEM hRoot;
HWND *hTreeView;
hTreeView = (HWND *)lpParameter; Info = (PMAIN_WND_INFO)lpParameter;
if (*hTreeView) if (Info->hTreeView)
FreeDeviceStrings(*hTreeView); FreeDeviceStrings(Info->hTreeView);
hRoot = InitTreeView(*hTreeView); hRoot = InitTreeView(Info->hTreeView);
if (hRoot) if (hRoot)
{ {
ListDevicesByType(*hTreeView, hRoot); switch (Info->Display)
{
case DevicesByType:
ListDevicesByType(Info->hTreeView, hRoot);
break;
case DevicesByConnection:
ListDevicesByConnection(Info->hTreeView, hRoot);
break;
default:
break;
}
return 0; return 0;
} }
@ -222,6 +234,35 @@ DeviceEnumThread(LPVOID lpParameter)
} }
static VOID
UpdateViewMenu(PMAIN_WND_INFO Info)
{
UINT id = IDC_DEVBYTYPE;
switch (Info->Display)
{
case DevicesByType:
id = IDC_DEVBYTYPE;
break;
case DevicesByConnection:
id = IDC_DEVBYCONN;
break;
case RessourcesByType:
id = IDC_RESBYTYPE;
break;
case RessourcesByConnection:
id = IDC_RESBYCONN;
break;
}
CheckMenuRadioItem(GetMenu(Info->hMainWnd),
IDC_DEVBYTYPE,
IDC_RESBYCONN,
id,
MF_BYCOMMAND);
}
static BOOL static BOOL
InitMainWnd(PMAIN_WND_INFO Info) InitMainWnd(PMAIN_WND_INFO Info)
{ {
@ -240,6 +281,8 @@ InitMainWnd(PMAIN_WND_INFO Info)
if (!CreateStatusBar(Info)) if (!CreateStatusBar(Info))
DisplayString(_T("error creating status bar")); DisplayString(_T("error creating status bar"));
UpdateViewMenu(Info);
/* make 'properties' bold */ /* make 'properties' bold */
hMenu = GetMenu(Info->hMainWnd); hMenu = GetMenu(Info->hMainWnd);
hMenu = GetSubMenu(hMenu, 1); hMenu = GetSubMenu(hMenu, 1);
@ -256,7 +299,7 @@ InitMainWnd(PMAIN_WND_INFO Info)
DevEnumThread = CreateThread(NULL, DevEnumThread = CreateThread(NULL,
0, 0,
DeviceEnumThread, DeviceEnumThread,
&Info->hTreeView, Info,
0, 0,
NULL); NULL);
if (!DevEnumThread) if (!DevEnumThread)
@ -303,11 +346,12 @@ OnContext(PMAIN_WND_INFO Info,
} }
static VOID static LRESULT
OnNotify(PMAIN_WND_INFO Info, OnNotify(PMAIN_WND_INFO Info,
LPARAM lParam) LPARAM lParam)
{ {
LPNMHDR pnmhdr = (LPNMHDR)lParam; LPNMHDR pnmhdr = (LPNMHDR)lParam;
LRESULT ret = 0;
switch (pnmhdr->code) switch (pnmhdr->code)
{ {
@ -315,26 +359,52 @@ OnNotify(PMAIN_WND_INFO Info,
{ {
LPNM_TREEVIEW pnmtv = (LPNM_TREEVIEW)lParam; LPNM_TREEVIEW pnmtv = (LPNM_TREEVIEW)lParam;
if (!TreeView_GetChild(Info->hTreeView, if (Info->Display == DevicesByType)
pnmtv->itemNew.hItem))
{ {
SendMessage(Info->hTool, if (!TreeView_GetChild(Info->hTreeView,
TB_SETSTATE, pnmtv->itemNew.hItem))
IDC_PROP, {
(LPARAM)MAKELONG(TBSTATE_ENABLED, 0)); SendMessage(Info->hTool,
TB_SETSTATE,
IDC_PROP,
(LPARAM)MAKELONG(TBSTATE_ENABLED, 0));
EnableMenuItem(GetMenu(Info->hMainWnd), IDC_PROP, MF_ENABLED); EnableMenuItem(GetMenu(Info->hMainWnd), IDC_PROP, MF_ENABLED);
EnableMenuItem(Info->hShortcutMenu, IDC_PROP, MF_ENABLED); EnableMenuItem(Info->hShortcutMenu, IDC_PROP, MF_ENABLED);
}
else
{
SendMessage(Info->hTool,
TB_SETSTATE,
IDC_PROP,
(LPARAM)MAKELONG(TBSTATE_INDETERMINATE, 0));
EnableMenuItem(GetMenu(Info->hMainWnd), IDC_PROP, MF_GRAYED);
EnableMenuItem(Info->hShortcutMenu, IDC_PROP, MF_GRAYED);
}
} }
else else if (Info->Display == DevicesByConnection)
{ {
SendMessage(Info->hTool, if (pnmtv->itemNew.hItem == TreeView_GetRoot(Info->hTreeView))
TB_SETSTATE, {
IDC_PROP, SendMessage(Info->hTool,
(LPARAM)MAKELONG(TBSTATE_INDETERMINATE, 0)); TB_SETSTATE,
IDC_PROP,
(LPARAM)MAKELONG(TBSTATE_INDETERMINATE, 0));
EnableMenuItem(GetMenu(Info->hMainWnd), IDC_PROP, MF_GRAYED); EnableMenuItem(GetMenu(Info->hMainWnd), IDC_PROP, MF_GRAYED);
EnableMenuItem(Info->hShortcutMenu, IDC_PROP, MF_GRAYED); EnableMenuItem(Info->hShortcutMenu, IDC_PROP, MF_GRAYED);
}
else
{
SendMessage(Info->hTool,
TB_SETSTATE,
IDC_PROP,
(LPARAM)MAKELONG(TBSTATE_ENABLED, 0));
EnableMenuItem(GetMenu(Info->hMainWnd), IDC_PROP, MF_ENABLED);
EnableMenuItem(Info->hShortcutMenu, IDC_PROP, MF_ENABLED);
}
} }
} }
break; break;
@ -344,17 +414,42 @@ OnNotify(PMAIN_WND_INFO Info,
HTREEITEM hSelected = TreeView_GetSelection(Info->hTreeView); HTREEITEM hSelected = TreeView_GetSelection(Info->hTreeView);
TV_HITTESTINFO HitTest; TV_HITTESTINFO HitTest;
if (!TreeView_GetChild(Info->hTreeView, if (Info->Display == DevicesByType)
hSelected))
{ {
if (GetCursorPos(&HitTest.pt) && if (!TreeView_GetChild(Info->hTreeView,
ScreenToClient(Info->hTreeView, &HitTest.pt)) hSelected))
{ {
if (TreeView_HitTest(Info->hTreeView, &HitTest)) if (GetCursorPos(&HitTest.pt) &&
ScreenToClient(Info->hTreeView, &HitTest.pt))
{ {
if (HitTest.hItem == hSelected) if (TreeView_HitTest(Info->hTreeView, &HitTest))
OpenPropSheet(Info->hTreeView, {
hSelected); if (HitTest.hItem == hSelected)
{
OpenPropSheet(Info->hTreeView,
hSelected);
ret = TRUE;
}
}
}
}
}
else if (Info->Display == DevicesByConnection)
{
if (hSelected != TreeView_GetRoot(Info->hTreeView))
{
if (GetCursorPos(&HitTest.pt) &&
ScreenToClient(Info->hTreeView, &HitTest.pt))
{
if (TreeView_HitTest(Info->hTreeView, &HitTest))
{
if (HitTest.hItem == hSelected)
{
OpenPropSheet(Info->hTreeView,
hSelected);
ret = TRUE;
}
}
} }
} }
} }
@ -403,6 +498,38 @@ OnNotify(PMAIN_WND_INFO Info,
} }
break; break;
} }
return ret;
}
static VOID
OnRefresh(PMAIN_WND_INFO Info)
{
HANDLE DevEnumThread;
SendMessage(Info->hTool,
TB_SETSTATE,
IDC_PROP,
(LPARAM)MAKELONG(TBSTATE_INDETERMINATE, 0));
EnableMenuItem(GetMenu(Info->hMainWnd), IDC_PROP, MF_GRAYED);
EnableMenuItem(Info->hShortcutMenu, IDC_PROP, MF_GRAYED);
/* create seperate thread to emum devices */
DevEnumThread = CreateThread(NULL,
0,
DeviceEnumThread,
Info,
0,
NULL);
if (!DevEnumThread)
{
DisplayString(_T("Failed to enumerate devices"));
return;
}
CloseHandle(DevEnumThread);
} }
@ -425,30 +552,7 @@ MainWndCommand(PMAIN_WND_INFO Info,
case IDC_REFRESH: case IDC_REFRESH:
{ {
HANDLE DevEnumThread; OnRefresh(Info);
SendMessage(Info->hTool,
TB_SETSTATE,
IDC_PROP,
(LPARAM)MAKELONG(TBSTATE_INDETERMINATE, 0));
EnableMenuItem(GetMenu(Info->hMainWnd), IDC_PROP, MF_GRAYED);
EnableMenuItem(Info->hShortcutMenu, IDC_PROP, MF_GRAYED);
/* create seperate thread to emum devices */
DevEnumThread = CreateThread(NULL,
0,
DeviceEnumThread,
&Info->hTreeView,
0,
NULL);
if (!DevEnumThread)
{
DisplayString(_T("Failed to enumerate devices"));
break;
}
CloseHandle(DevEnumThread);
} }
break; break;
@ -479,6 +583,21 @@ MainWndCommand(PMAIN_WND_INFO Info,
} }
break; break;
case IDC_DEVBYTYPE:
{
Info->Display = DevicesByType;
UpdateViewMenu(Info);
OnRefresh(Info);
}
break;
case IDC_DEVBYCONN:
{
Info->Display = DevicesByConnection;
UpdateViewMenu(Info);
OnRefresh(Info);
}
break;
} }
} }
@ -570,7 +689,7 @@ MainWndProc(HWND hwnd,
case WM_NOTIFY: case WM_NOTIFY:
{ {
OnNotify(Info, lParam); Ret = OnNotify(Info, lParam);
} }
break; break;
@ -674,6 +793,7 @@ CreateMainWindow(LPCTSTR lpCaption,
if (Info != NULL) if (Info != NULL)
{ {
Info->nCmdShow = nCmdShow; Info->nCmdShow = nCmdShow;
Info->Display = DevicesByType;
hMainWnd = CreateWindowEx(WS_EX_WINDOWEDGE, hMainWnd = CreateWindowEx(WS_EX_WINDOWEDGE,
szMainWndClass, szMainWndClass,

View file

@ -18,6 +18,14 @@
#define MAX_DEV_LEN 256 #define MAX_DEV_LEN 256
typedef enum
{
DevicesByType,
DevicesByConnection,
RessourcesByType,
RessourcesByConnection
} DISPLAY_TYPE;
typedef struct _MAIN_WND_INFO typedef struct _MAIN_WND_INFO
{ {
HWND hMainWnd; HWND hMainWnd;
@ -28,6 +36,8 @@ typedef struct _MAIN_WND_INFO
HMENU hShortcutMenu; HMENU hShortcutMenu;
int nCmdShow; int nCmdShow;
DISPLAY_TYPE Display;
/* status flags */ /* status flags */
UINT InMenuLoop : 1; UINT InMenuLoop : 1;
@ -59,6 +69,7 @@ VOID FreeDeviceStrings(HWND hTreeView);
VOID OpenPropSheet(HWND hTreeView, HTREEITEM hItem); VOID OpenPropSheet(HWND hTreeView, HTREEITEM hItem);
HTREEITEM InitTreeView(HWND hTreeView); HTREEITEM InitTreeView(HWND hTreeView);
VOID ListDevicesByType(HWND hTreeView, HTREEITEM hRoot); VOID ListDevicesByType(HWND hTreeView, HTREEITEM hRoot);
VOID ListDevicesByConnection(HWND hTreeView, HTREEITEM hRoot);
/* misc.c */ /* misc.c */

View file

@ -20,6 +20,9 @@
#define IDR_MAINMENU 102 #define IDR_MAINMENU 102
#define IDR_POPUP 103 #define IDR_POPUP 103
#define IDC_DEVBYTYPE 104 #define IDC_DEVBYTYPE 104
#define IDC_DEVBYCONN 105
#define IDC_RESBYTYPE 106
#define IDC_RESBYCONN 107
/* tooltips */ /* tooltips */
#define IDS_TOOLTIP_PROP 6000 #define IDS_TOOLTIP_PROP 6000