From 6ca1f0de19db00f26e0b8b82ff64ba29969b489a Mon Sep 17 00:00:00 2001 From: Dmitry Chapyshev Date: Sat, 19 Sep 2009 16:04:38 +0000 Subject: [PATCH] - Implement "Settings" dialog. - Implement save of position of a window - Implement installation/deinstallation logs - Implement auto updating programs list at start - Remove unused code from loaddlg.c - Some small changes bug fixes svn path=/trunk/; revision=43081 --- reactos/base/applications/rapps/available.c | 76 ++++++++++++- reactos/base/applications/rapps/installed.c | 4 + reactos/base/applications/rapps/lang/bg-BG.rc | 39 +++++-- reactos/base/applications/rapps/lang/de-DE.rc | 39 +++++-- reactos/base/applications/rapps/lang/en-US.rc | 39 +++++-- reactos/base/applications/rapps/lang/es-ES.rc | 41 +++++-- reactos/base/applications/rapps/lang/ja-JP.rc | 43 +++++-- reactos/base/applications/rapps/lang/no-NO.rc | 39 +++++-- reactos/base/applications/rapps/lang/pl-PL.rc | 39 +++++-- reactos/base/applications/rapps/lang/ru-RU.rc | 39 +++++-- reactos/base/applications/rapps/lang/sk-SK.rc | 39 +++++-- reactos/base/applications/rapps/lang/uk-UA.rc | 39 +++++-- reactos/base/applications/rapps/loaddlg.c | 85 +++++--------- reactos/base/applications/rapps/misc.c | 105 +++++++++++++++++ reactos/base/applications/rapps/rapps.h | 30 ++++- reactos/base/applications/rapps/rapps.rbuild | 9 ++ reactos/base/applications/rapps/rapps.rc | 2 + reactos/base/applications/rapps/rappsmsg.mc | 28 +++++ reactos/base/applications/rapps/resource.h | 14 ++- reactos/base/applications/rapps/settingsdlg.c | 104 ++++++++++++++++- reactos/base/applications/rapps/toolbar.c | 2 +- reactos/base/applications/rapps/winmain.c | 106 +++++++++++++++++- 22 files changed, 787 insertions(+), 174 deletions(-) create mode 100644 reactos/base/applications/rapps/rappsmsg.mc diff --git a/reactos/base/applications/rapps/available.c b/reactos/base/applications/rapps/available.c index b48e58d291e..016e5800291 100644 --- a/reactos/base/applications/rapps/available.c +++ b/reactos/base/applications/rapps/available.c @@ -38,6 +38,76 @@ ShowAvailableAppInfo(INT Index) return TRUE; } +static BOOL +DeleteCurrentAppsDB(VOID) +{ + HANDLE hFind = INVALID_HANDLE_VALUE; + WIN32_FIND_DATAW FindFileData; + WCHAR szCabPath[MAX_PATH]; + WCHAR szSearchPath[MAX_PATH]; + WCHAR szPath[MAX_PATH]; + WCHAR szTmp[MAX_PATH]; + + if (!GetCurrentDirectoryW(MAX_PATH, szPath)) + return FALSE; + + swprintf(szCabPath, L"%s\\rappmgr.cab", szPath); + + if (GetFileAttributesW(szCabPath) != INVALID_FILE_ATTRIBUTES) + { + if (!DeleteFileW(szCabPath)) + return FALSE; + } + + wcscat(szPath, L"\\rapps\\"); + swprintf(szSearchPath, L"%s*.txt", szPath); + + hFind = FindFirstFileW(szSearchPath, &FindFileData); + if (hFind == INVALID_HANDLE_VALUE) + return TRUE; + + do + { + swprintf(szTmp, L"%s%s", szPath, FindFileData.cFileName); + if (!DeleteFileW(szTmp)) + { + FindClose(hFind); + return FALSE; + } + } + while (FindNextFileW(hFind, &FindFileData) != 0); + + FindClose(hFind); + + return TRUE; +} + + +BOOL +UpdateAppsDB(VOID) +{ + WCHAR szPath[MAX_PATH]; + WCHAR szAppsPath[MAX_PATH]; + WCHAR szCabPath[MAX_PATH]; + + if (!DeleteCurrentAppsDB()) + return FALSE; + + DownloadApplicationsDB(APPLICATION_DATEBASE_URL); + + if (!GetCurrentDirectoryW(MAX_PATH, szPath)) + return FALSE; + + swprintf(szCabPath, L"%s\\rappmgr.cab", szPath); + + wcscat(szPath, L"\\rapps\\"); + wcscpy(szAppsPath, szPath); + + ExtractFilesFromCab(szCabPath, szAppsPath); + + return TRUE; +} + BOOL EnumAvailableApplications(INT EnumType, AVAILENUMPROC lpEnumProc) @@ -75,10 +145,10 @@ EnumAvailableApplications(INT EnumType, AVAILENUMPROC lpEnumProc) hFind = FindFirstFileW(szPath, &FindFileData); if (hFind == INVALID_HANDLE_VALUE) { - if (GetFileAttributesW(szCabPath) == 0xFFFFFFFF) - DownloadApplicationsDB(APPLICATION_DATEBASE_URL); + if (GetFileAttributesW(szCabPath) == INVALID_FILE_ATTRIBUTES) + DownloadApplicationsDB(APPLICATION_DATEBASE_URL); - ExtractFilesFromCab(szCabPath, szAppsPath); + ExtractFilesFromCab(szCabPath, szAppsPath); hFind = FindFirstFileW(szPath, &FindFileData); if (hFind == INVALID_HANDLE_VALUE) return FALSE; diff --git a/reactos/base/applications/rapps/installed.c b/reactos/base/applications/rapps/installed.c index 5659e2db908..a9b9aa1acac 100644 --- a/reactos/base/applications/rapps/installed.c +++ b/reactos/base/applications/rapps/installed.c @@ -84,6 +84,7 @@ UninstallApplication(INT Index, BOOL bModify) WCHAR szModify[] = L"ModifyPath"; WCHAR szUninstall[] = L"UninstallString"; WCHAR szPath[MAX_PATH]; + WCHAR szAppName[MAX_STR_LEN]; DWORD dwType, dwSize; INT ItemIndex; LVITEM Item; @@ -103,6 +104,9 @@ UninstallApplication(INT Index, BOOL bModify) ItemIndex = Index; } + ListView_GetItemText(hListView, ItemIndex, 0, szAppName, sizeof(szAppName) / sizeof(WCHAR)); + WriteLogMessage(EVENTLOG_SUCCESS, MSG_SUCCESS_REMOVE, szAppName); + ZeroMemory(&Item, sizeof(LVITEM)); Item.mask = LVIF_PARAM; diff --git a/reactos/base/applications/rapps/lang/bg-BG.rc b/reactos/base/applications/rapps/lang/bg-BG.rc index 57525eb1829..a104bc791d9 100644 --- a/reactos/base/applications/rapps/lang/bg-BG.rc +++ b/reactos/base/applications/rapps/lang/bg-BG.rc @@ -4,7 +4,7 @@ IDR_MAINMENU MENU BEGIN POPUP "&Файл" BEGIN - MENUITEM "На&стройки", ID_SETTINGS, GRAYED + MENUITEM "На&стройки", ID_SETTINGS MENUITEM SEPARATOR MENUITEM "Из&ход", ID_EXIT END @@ -44,22 +44,39 @@ BEGIN END END -IDD_SETTINGS_DIALOG DIALOGEX DISCARDABLE 0, 0, 386, 231 +IDD_SETTINGS_DIALOG DIALOGEX DISCARDABLE 0, 0, 250, 144 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Настройки" +CAPTION "Settings" FONT 8, "MS Shell Dlg" BEGIN - PUSHBUTTON "Добре", IDOK, 255, 212, 60, 14 - PUSHBUTTON "Отказ", IDCANCEL, 320, 212, 60, 14 + GROUPBOX "General", -1, 4, 2, 240, 61 + AUTOCHECKBOX "&Save window position", IDC_SAVE_WINDOW_POS, 15, 12, 219, 12 + AUTOCHECKBOX "&Update the list of accessible programs at start", IDC_UPDATE_AVLIST, 15, 29, 219, 12 + AUTOCHECKBOX "&Log of installation and removal of programs", IDC_LOG_ENABLED, 15, 46, 219, 12 + + GROUPBOX "Downloading", -1, 4, 65, 240, 51 + LTEXT "Folder for downloadings:", -1, 16, 75, 100, 9 + EDITTEXT IDC_DOWNLOAD_DIR_EDIT, 15, 86, 166, 12, WS_CHILD | WS_VISIBLE | WS_GROUP + PUSHBUTTON "&Choose", IDC_CHOOSE, 187, 85, 50, 14 + AUTOCHECKBOX "&Delete installers of programs after installation", IDC_DEL_AFTER_INSTALL, 16, 100, 218, 12 + + PUSHBUTTON "Default", IDC_DEFAULT_SETTINGS, 8, 124, 60, 14 + PUSHBUTTON "OK", IDOK, 116, 124, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 181, 124, 60, 14 END -IDD_INSTALL_DIALOG DIALOGEX DISCARDABLE 0, 0, 386, 231 +IDD_INSTALL_DIALOG DIALOGEX DISCARDABLE 0, 0, 216, 97 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Сваляне и слагане" +CAPTION "Program installation" FONT 8, "MS Shell Dlg" BEGIN - PUSHBUTTON "Добре", IDOK, 255, 212, 60, 14 - PUSHBUTTON "Отказ", IDCANCEL, 320, 212, 60, 14 + LTEXT "...", IDC_INSTALL_TEXT, 4, 5, 209, 35 + + AUTORADIOBUTTON "&Install from a disk (CD or DVD)", IDC_CD_INSTALL, 10, 46, 197, 11, WS_GROUP + AUTORADIOBUTTON "&Download and install", IDC_DOWNLOAD_INSTALL, 10, 59, 197, 11, NOT WS_TABSTOP + + PUSHBUTTON "OK", IDOK, 86, 78, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 150, 78, 60, 14 END IDD_DOWNLOAD_DIALOG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 220, 76 @@ -163,5 +180,7 @@ BEGIN IDS_AVAILABLEFORINST "Налично за слагане" IDS_UPDATES "Обновления" IDS_APPLICATIONS "Приложения" - IDS_DOWNLOAD_FOLDER "Сваляния" + IDS_CHOOSE_FOLDER_TEXT "Choose a folder which will be used for downloading of programs:" + IDS_CHOOSE_FOLDER_ERROR "You have specified a nonexistent folder!" + IDS_USER_NOT_ADMIN "You should be administrator for start ""ReactOS Applications Manager""!" END diff --git a/reactos/base/applications/rapps/lang/de-DE.rc b/reactos/base/applications/rapps/lang/de-DE.rc index a962ae36adb..21c4df7e345 100644 --- a/reactos/base/applications/rapps/lang/de-DE.rc +++ b/reactos/base/applications/rapps/lang/de-DE.rc @@ -4,7 +4,7 @@ IDR_MAINMENU MENU BEGIN POPUP "&Datei" BEGIN - MENUITEM "&Einstellungen", ID_SETTINGS, GRAYED + MENUITEM "&Einstellungen", ID_SETTINGS MENUITEM SEPARATOR MENUITEM "&Beenden", ID_EXIT END @@ -44,22 +44,39 @@ BEGIN END END -IDD_SETTINGS_DIALOG DIALOGEX DISCARDABLE 0, 0, 386, 231 +IDD_SETTINGS_DIALOG DIALOGEX DISCARDABLE 0, 0, 250, 144 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Einstellungen" +CAPTION "Settings" FONT 8, "MS Shell Dlg" BEGIN - PUSHBUTTON "OK", IDOK, 255, 212, 60, 14 - PUSHBUTTON "Abbrechen", IDCANCEL, 320, 212, 60, 14 + GROUPBOX "General", -1, 4, 2, 240, 61 + AUTOCHECKBOX "&Save window position", IDC_SAVE_WINDOW_POS, 15, 12, 219, 12 + AUTOCHECKBOX "&Update the list of accessible programs at start", IDC_UPDATE_AVLIST, 15, 29, 219, 12 + AUTOCHECKBOX "&Log of installation and removal of programs", IDC_LOG_ENABLED, 15, 46, 219, 12 + + GROUPBOX "Downloading", -1, 4, 65, 240, 51 + LTEXT "Folder for downloadings:", -1, 16, 75, 100, 9 + EDITTEXT IDC_DOWNLOAD_DIR_EDIT, 15, 86, 166, 12, WS_CHILD | WS_VISIBLE | WS_GROUP + PUSHBUTTON "&Choose", IDC_CHOOSE, 187, 85, 50, 14 + AUTOCHECKBOX "&Delete installers of programs after installation", IDC_DEL_AFTER_INSTALL, 16, 100, 218, 12 + + PUSHBUTTON "Default", IDC_DEFAULT_SETTINGS, 8, 124, 60, 14 + PUSHBUTTON "OK", IDOK, 116, 124, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 181, 124, 60, 14 END -IDD_INSTALL_DIALOG DIALOGEX DISCARDABLE 0, 0, 386, 231 +IDD_INSTALL_DIALOG DIALOGEX DISCARDABLE 0, 0, 216, 97 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Herunterladen und installieren" +CAPTION "Program installation" FONT 8, "MS Shell Dlg" BEGIN - PUSHBUTTON "OK", IDOK, 255, 212, 60, 14 - PUSHBUTTON "Abbrechen", IDCANCEL, 320, 212, 60, 14 + LTEXT "...", IDC_INSTALL_TEXT, 4, 5, 209, 35 + + AUTORADIOBUTTON "&Install from a disk (CD or DVD)", IDC_CD_INSTALL, 10, 46, 197, 11, WS_GROUP + AUTORADIOBUTTON "&Download and install", IDC_DOWNLOAD_INSTALL, 10, 59, 197, 11, NOT WS_TABSTOP + + PUSHBUTTON "OK", IDOK, 86, 78, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 150, 78, 60, 14 END IDD_DOWNLOAD_DIALOG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 220, 76 @@ -163,5 +180,7 @@ BEGIN IDS_AVAILABLEFORINST "Zur Installation verfьgbar" IDS_UPDATES "Updates" IDS_APPLICATIONS "Anwendungen" - IDS_DOWNLOAD_FOLDER "Downloads" + IDS_CHOOSE_FOLDER_TEXT "Choose a folder which will be used for downloading of programs:" + IDS_CHOOSE_FOLDER_ERROR "You have specified a nonexistent folder!" + IDS_USER_NOT_ADMIN "You should be administrator for start ""ReactOS Applications Manager""!" END diff --git a/reactos/base/applications/rapps/lang/en-US.rc b/reactos/base/applications/rapps/lang/en-US.rc index 6a51e1992de..dde66e048c7 100644 --- a/reactos/base/applications/rapps/lang/en-US.rc +++ b/reactos/base/applications/rapps/lang/en-US.rc @@ -4,7 +4,7 @@ IDR_MAINMENU MENU BEGIN POPUP "&File" BEGIN - MENUITEM "&Settings", ID_SETTINGS, GRAYED + MENUITEM "&Settings", ID_SETTINGS MENUITEM SEPARATOR MENUITEM "E&xit", ID_EXIT END @@ -44,22 +44,39 @@ BEGIN END END -IDD_SETTINGS_DIALOG DIALOGEX DISCARDABLE 0, 0, 386, 231 +IDD_SETTINGS_DIALOG DIALOGEX DISCARDABLE 0, 0, 250, 144 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Settings" FONT 8, "MS Shell Dlg" BEGIN - PUSHBUTTON "OK", IDOK, 255, 212, 60, 14 - PUSHBUTTON "Cancel", IDCANCEL, 320, 212, 60, 14 + GROUPBOX "General", -1, 4, 2, 240, 61 + AUTOCHECKBOX "&Save window position", IDC_SAVE_WINDOW_POS, 15, 12, 219, 12 + AUTOCHECKBOX "&Update the list of accessible programs at start", IDC_UPDATE_AVLIST, 15, 29, 219, 12 + AUTOCHECKBOX "&Log of installation and removal of programs", IDC_LOG_ENABLED, 15, 46, 219, 12 + + GROUPBOX "Downloading", -1, 4, 65, 240, 51 + LTEXT "Folder for downloadings:", -1, 16, 75, 100, 9 + EDITTEXT IDC_DOWNLOAD_DIR_EDIT, 15, 86, 166, 12, WS_CHILD | WS_VISIBLE | WS_GROUP + PUSHBUTTON "&Choose", IDC_CHOOSE, 187, 85, 50, 14 + AUTOCHECKBOX "&Delete installers of programs after installation", IDC_DEL_AFTER_INSTALL, 16, 100, 218, 12 + + PUSHBUTTON "Default", IDC_DEFAULT_SETTINGS, 8, 124, 60, 14 + PUSHBUTTON "OK", IDOK, 116, 124, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 181, 124, 60, 14 END -IDD_INSTALL_DIALOG DIALOGEX DISCARDABLE 0, 0, 386, 231 +IDD_INSTALL_DIALOG DIALOGEX DISCARDABLE 0, 0, 216, 97 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Download and Install" +CAPTION "Program installation" FONT 8, "MS Shell Dlg" BEGIN - PUSHBUTTON "OK", IDOK, 255, 212, 60, 14 - PUSHBUTTON "Cancel", IDCANCEL, 320, 212, 60, 14 + LTEXT "...", IDC_INSTALL_TEXT, 4, 5, 209, 35 + + AUTORADIOBUTTON "&Install from a disk (CD or DVD)", IDC_CD_INSTALL, 10, 46, 197, 11, WS_GROUP + AUTORADIOBUTTON "&Download and install", IDC_DOWNLOAD_INSTALL, 10, 59, 197, 11, NOT WS_TABSTOP + + PUSHBUTTON "OK", IDOK, 86, 78, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 150, 78, 60, 14 END IDD_DOWNLOAD_DIALOG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 220, 76 @@ -156,12 +173,14 @@ BEGIN IDS_UNINSTALL "Uninstall" IDS_MODIFY "Modify" IDS_APPS_COUNT "Applications count: %d" - IDS_WELCOME_TITLE "Welcome to ReactOS Application Manager!\n\n" + IDS_WELCOME_TITLE "Welcome to ReactOS Applications Manager!\n\n" IDS_WELCOME_TEXT "Choose a category on the left, then choose a application for install or uninstall.\nReactOS Web Site: " IDS_WELCOME_URL "http://www.reactos.org" IDS_INSTALLED "Installed" IDS_AVAILABLEFORINST "Available for installation" IDS_UPDATES "Updates" IDS_APPLICATIONS "Applications" - IDS_DOWNLOAD_FOLDER "Downloads" + IDS_CHOOSE_FOLDER_TEXT "Choose a folder which will be used for downloading of programs:" + IDS_CHOOSE_FOLDER_ERROR "You have specified a nonexistent folder!" + IDS_USER_NOT_ADMIN "You should be administrator for start ""ReactOS Applications Manager""!" END diff --git a/reactos/base/applications/rapps/lang/es-ES.rc b/reactos/base/applications/rapps/lang/es-ES.rc index 3dd6721a989..72ab621a570 100644 --- a/reactos/base/applications/rapps/lang/es-ES.rc +++ b/reactos/base/applications/rapps/lang/es-ES.rc @@ -4,7 +4,7 @@ IDR_MAINMENU MENU BEGIN POPUP "&Archivo" BEGIN - MENUITEM "&Ajustes", ID_SETTINGS, GRAYED + MENUITEM "&Ajustes", ID_SETTINGS MENUITEM SEPARATOR MENUITEM "Sa&lir", ID_EXIT END @@ -44,22 +44,39 @@ BEGIN END END -IDD_SETTINGS_DIALOG DIALOGEX DISCARDABLE 0, 0, 386, 231 +IDD_SETTINGS_DIALOG DIALOGEX DISCARDABLE 0, 0, 250, 144 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Ajustes" +CAPTION "Settings" FONT 8, "MS Shell Dlg" BEGIN - PUSHBUTTON "Aceptar", IDOK, 255, 212, 60, 14 - PUSHBUTTON "Cancelar", IDCANCEL, 320, 212, 60, 14 + GROUPBOX "General", -1, 4, 2, 240, 61 + AUTOCHECKBOX "&Save window position", IDC_SAVE_WINDOW_POS, 15, 12, 219, 12 + AUTOCHECKBOX "&Update the list of accessible programs at start", IDC_UPDATE_AVLIST, 15, 29, 219, 12 + AUTOCHECKBOX "&Log of installation and removal of programs", IDC_LOG_ENABLED, 15, 46, 219, 12 + + GROUPBOX "Downloading", -1, 4, 65, 240, 51 + LTEXT "Folder for downloadings:", -1, 16, 75, 100, 9 + EDITTEXT IDC_DOWNLOAD_DIR_EDIT, 15, 86, 166, 12, WS_CHILD | WS_VISIBLE | WS_GROUP + PUSHBUTTON "&Choose", IDC_CHOOSE, 187, 85, 50, 14 + AUTOCHECKBOX "&Delete installers of programs after installation", IDC_DEL_AFTER_INSTALL, 16, 100, 218, 12 + + PUSHBUTTON "Default", IDC_DEFAULT_SETTINGS, 8, 124, 60, 14 + PUSHBUTTON "OK", IDOK, 116, 124, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 181, 124, 60, 14 END -IDD_INSTALL_DIALOG DIALOGEX DISCARDABLE 0, 0, 386, 231 +IDD_INSTALL_DIALOG DIALOGEX DISCARDABLE 0, 0, 216, 97 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Descargar e Instalar" +CAPTION "Program installation" FONT 8, "MS Shell Dlg" BEGIN - PUSHBUTTON "Aceptar", IDOK, 255, 212, 60, 14 - PUSHBUTTON "Cancelar", IDCANCEL, 320, 212, 60, 14 + LTEXT "...", IDC_INSTALL_TEXT, 4, 5, 209, 35 + + AUTORADIOBUTTON "&Install from a disk (CD or DVD)", IDC_CD_INSTALL, 10, 46, 197, 11, WS_GROUP + AUTORADIOBUTTON "&Download and install", IDC_DOWNLOAD_INSTALL, 10, 59, 197, 11, NOT WS_TABSTOP + + PUSHBUTTON "OK", IDOK, 86, 78, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 150, 78, 60, 14 END IDD_DOWNLOAD_DIALOG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 220, 76 @@ -156,12 +173,14 @@ BEGIN IDS_UNINSTALL "Desinstalar" IDS_MODIFY "Modificar" IDS_APPS_COUNT "Cantidad de aplicaciones: %d" - IDS_WELCOME_TITLE "Bienvenido a ReactOS Application Manager!\n\n" + IDS_WELCOME_TITLE "Bienvenido a ReactOS Applications Manager!\n\n" IDS_WELCOME_TEXT "Seleccione una categorнa a la izquierda, posteriormente seleccione la aplicaciуn a instalar o desinstalar.\nReactOS Web: " IDS_WELCOME_URL "http://www.reactos.org" IDS_INSTALLED "Instaladas" IDS_AVAILABLEFORINST "Disponible para instalaciуn" IDS_UPDATES "Actualizaciones" IDS_APPLICATIONS "Aplicaciones" - IDS_DOWNLOAD_FOLDER "Descargas" + IDS_CHOOSE_FOLDER_TEXT "Choose a folder which will be used for downloading of programs:" + IDS_CHOOSE_FOLDER_ERROR "You have specified a nonexistent folder!" + IDS_USER_NOT_ADMIN "You should be administrator for start ""ReactOS Applications Manager""!" END diff --git a/reactos/base/applications/rapps/lang/ja-JP.rc b/reactos/base/applications/rapps/lang/ja-JP.rc index e80c1e5b94f..77d9be43dd2 100644 --- a/reactos/base/applications/rapps/lang/ja-JP.rc +++ b/reactos/base/applications/rapps/lang/ja-JP.rc @@ -4,7 +4,7 @@ IDR_MAINMENU MENU BEGIN POPUP "ѓtѓ@ѓCѓ‹(&F)" BEGIN - MENUITEM "ђЭ’и(&S)", ID_SETTINGS, GRAYED + MENUITEM "ђЭ’и(&S)", ID_SETTINGS MENUITEM SEPARATOR MENUITEM "ЏI—№(&X)", ID_EXIT END @@ -44,22 +44,39 @@ BEGIN END END -IDD_SETTINGS_DIALOG DIALOGEX DISCARDABLE 0, 0, 386, 231 +IDD_SETTINGS_DIALOG DIALOGEX DISCARDABLE 0, 0, 250, 144 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "ђЭ’и" -FONT 9, "MS UI Gothic" +CAPTION "Settings" +FONT 8, "MS Shell Dlg" BEGIN - PUSHBUTTON "OK", IDOK, 255, 212, 60, 14 - PUSHBUTTON "ѓLѓѓѓ“ѓZѓ‹", IDCANCEL, 320, 212, 60, 14 + GROUPBOX "General", -1, 4, 2, 240, 61 + AUTOCHECKBOX "&Save window position", IDC_SAVE_WINDOW_POS, 15, 12, 219, 12 + AUTOCHECKBOX "&Update the list of accessible programs at start", IDC_UPDATE_AVLIST, 15, 29, 219, 12 + AUTOCHECKBOX "&Log of installation and removal of programs", IDC_LOG_ENABLED, 15, 46, 219, 12 + + GROUPBOX "Downloading", -1, 4, 65, 240, 51 + LTEXT "Folder for downloadings:", -1, 16, 75, 100, 9 + EDITTEXT IDC_DOWNLOAD_DIR_EDIT, 15, 86, 166, 12, WS_CHILD | WS_VISIBLE | WS_GROUP + PUSHBUTTON "&Choose", IDC_CHOOSE, 187, 85, 50, 14 + AUTOCHECKBOX "&Delete installers of programs after installation", IDC_DEL_AFTER_INSTALL, 16, 100, 218, 12 + + PUSHBUTTON "Default", IDC_DEFAULT_SETTINGS, 8, 124, 60, 14 + PUSHBUTTON "OK", IDOK, 116, 124, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 181, 124, 60, 14 END -IDD_INSTALL_DIALOG DIALOGEX DISCARDABLE 0, 0, 386, 231 +IDD_INSTALL_DIALOG DIALOGEX DISCARDABLE 0, 0, 216, 97 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "ѓ_ѓEѓ“ѓЌЃ[ѓh‚ЖѓCѓ“ѓXѓgЃ[ѓ‹" -FONT 9, "MS UI Gothic" +CAPTION "Program installation" +FONT 8, "MS Shell Dlg" BEGIN - PUSHBUTTON "OK", IDOK, 255, 212, 60, 14 - PUSHBUTTON "ѓLѓѓѓ“ѓZѓ‹", IDCANCEL, 320, 212, 60, 14 + LTEXT "...", IDC_INSTALL_TEXT, 4, 5, 209, 35 + + AUTORADIOBUTTON "&Install from a disk (CD or DVD)", IDC_CD_INSTALL, 10, 46, 197, 11, WS_GROUP + AUTORADIOBUTTON "&Download and install", IDC_DOWNLOAD_INSTALL, 10, 59, 197, 11, NOT WS_TABSTOP + + PUSHBUTTON "OK", IDOK, 86, 78, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 150, 78, 60, 14 END IDD_DOWNLOAD_DIALOG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 220, 76 @@ -163,5 +180,7 @@ BEGIN IDS_AVAILABLEFORINST "ѓCѓ“ѓXѓgЃ[ѓ‹‰В”\\" IDS_UPDATES "ѓAѓbѓvѓfЃ[ѓg" IDS_APPLICATIONS "ѓAѓvѓЉѓPЃ[ѓVѓ‡ѓ“" - IDS_DOWNLOAD_FOLDER "ѓ_ѓEѓ“ѓЌЃ[ѓh" + IDS_CHOOSE_FOLDER_TEXT "Choose a folder which will be used for downloading of programs:" + IDS_CHOOSE_FOLDER_ERROR "You have specified a nonexistent folder!" + IDS_USER_NOT_ADMIN "You should be administrator for start ""ReactOS Applications Manager""!" END diff --git a/reactos/base/applications/rapps/lang/no-NO.rc b/reactos/base/applications/rapps/lang/no-NO.rc index 8b15e14a6b7..fd2cb9a5568 100644 --- a/reactos/base/applications/rapps/lang/no-NO.rc +++ b/reactos/base/applications/rapps/lang/no-NO.rc @@ -4,7 +4,7 @@ IDR_MAINMENU MENU BEGIN POPUP "&Fil" BEGIN - MENUITEM "&Innstillinger", ID_SETTINGS, GRAYED + MENUITEM "&Innstillinger", ID_SETTINGS MENUITEM SEPARATOR MENUITEM "A&vslutt", ID_EXIT END @@ -44,22 +44,39 @@ BEGIN END END -IDD_SETTINGS_DIALOG DIALOGEX DISCARDABLE 0, 0, 386, 231 +IDD_SETTINGS_DIALOG DIALOGEX DISCARDABLE 0, 0, 250, 144 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Innstillinger" +CAPTION "Settings" FONT 8, "MS Shell Dlg" BEGIN - PUSHBUTTON "OK", IDOK, 255, 212, 60, 14 - PUSHBUTTON "Avbryt", IDCANCEL, 320, 212, 60, 14 + GROUPBOX "General", -1, 4, 2, 240, 61 + AUTOCHECKBOX "&Save window position", IDC_SAVE_WINDOW_POS, 15, 12, 219, 12 + AUTOCHECKBOX "&Update the list of accessible programs at start", IDC_UPDATE_AVLIST, 15, 29, 219, 12 + AUTOCHECKBOX "&Log of installation and removal of programs", IDC_LOG_ENABLED, 15, 46, 219, 12 + + GROUPBOX "Downloading", -1, 4, 65, 240, 51 + LTEXT "Folder for downloadings:", -1, 16, 75, 100, 9 + EDITTEXT IDC_DOWNLOAD_DIR_EDIT, 15, 86, 166, 12, WS_CHILD | WS_VISIBLE | WS_GROUP + PUSHBUTTON "&Choose", IDC_CHOOSE, 187, 85, 50, 14 + AUTOCHECKBOX "&Delete installers of programs after installation", IDC_DEL_AFTER_INSTALL, 16, 100, 218, 12 + + PUSHBUTTON "Default", IDC_DEFAULT_SETTINGS, 8, 124, 60, 14 + PUSHBUTTON "OK", IDOK, 116, 124, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 181, 124, 60, 14 END -IDD_INSTALL_DIALOG DIALOGEX DISCARDABLE 0, 0, 386, 231 +IDD_INSTALL_DIALOG DIALOGEX DISCARDABLE 0, 0, 216, 97 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Last ned og installere" +CAPTION "Program installation" FONT 8, "MS Shell Dlg" BEGIN - PUSHBUTTON "OK", IDOK, 255, 212, 60, 14 - PUSHBUTTON "Avbryt", IDCANCEL, 320, 212, 60, 14 + LTEXT "...", IDC_INSTALL_TEXT, 4, 5, 209, 35 + + AUTORADIOBUTTON "&Install from a disk (CD or DVD)", IDC_CD_INSTALL, 10, 46, 197, 11, WS_GROUP + AUTORADIOBUTTON "&Download and install", IDC_DOWNLOAD_INSTALL, 10, 59, 197, 11, NOT WS_TABSTOP + + PUSHBUTTON "OK", IDOK, 86, 78, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 150, 78, 60, 14 END IDD_DOWNLOAD_DIALOG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 220, 76 @@ -163,5 +180,7 @@ BEGIN IDS_AVAILABLEFORINST "Tilgjengelig for installasjon" IDS_UPDATES "Oppdateringer" IDS_APPLICATIONS "Programmer" - IDS_DOWNLOAD_FOLDER "Nedlastinger" + IDS_CHOOSE_FOLDER_TEXT "Choose a folder which will be used for downloading of programs:" + IDS_CHOOSE_FOLDER_ERROR "You have specified a nonexistent folder!" + IDS_USER_NOT_ADMIN "You should be administrator for start ""ReactOS Applications Manager""!" END diff --git a/reactos/base/applications/rapps/lang/pl-PL.rc b/reactos/base/applications/rapps/lang/pl-PL.rc index 686ba41086d..c7a62619e1f 100644 --- a/reactos/base/applications/rapps/lang/pl-PL.rc +++ b/reactos/base/applications/rapps/lang/pl-PL.rc @@ -6,7 +6,7 @@ IDR_MAINMENU MENU BEGIN POPUP "&Plik" BEGIN - MENUITEM "&Ustawienia", ID_SETTINGS, GRAYED + MENUITEM "&Ustawienia", ID_SETTINGS MENUITEM SEPARATOR MENUITEM "&Wyjњcie", ID_EXIT END @@ -46,22 +46,39 @@ BEGIN END END -IDD_SETTINGS_DIALOG DIALOGEX DISCARDABLE 0, 0, 386, 231 +IDD_SETTINGS_DIALOG DIALOGEX DISCARDABLE 0, 0, 250, 144 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Ustawienia" +CAPTION "Settings" FONT 8, "MS Shell Dlg" BEGIN - PUSHBUTTON "OK", IDOK, 255, 212, 60, 14 - PUSHBUTTON "Anuluj", IDCANCEL, 320, 212, 60, 14 + GROUPBOX "General", -1, 4, 2, 240, 61 + AUTOCHECKBOX "&Save window position", IDC_SAVE_WINDOW_POS, 15, 12, 219, 12 + AUTOCHECKBOX "&Update the list of accessible programs at start", IDC_UPDATE_AVLIST, 15, 29, 219, 12 + AUTOCHECKBOX "&Log of installation and removal of programs", IDC_LOG_ENABLED, 15, 46, 219, 12 + + GROUPBOX "Downloading", -1, 4, 65, 240, 51 + LTEXT "Folder for downloadings:", -1, 16, 75, 100, 9 + EDITTEXT IDC_DOWNLOAD_DIR_EDIT, 15, 86, 166, 12, WS_CHILD | WS_VISIBLE | WS_GROUP + PUSHBUTTON "&Choose", IDC_CHOOSE, 187, 85, 50, 14 + AUTOCHECKBOX "&Delete installers of programs after installation", IDC_DEL_AFTER_INSTALL, 16, 100, 218, 12 + + PUSHBUTTON "Default", IDC_DEFAULT_SETTINGS, 8, 124, 60, 14 + PUSHBUTTON "OK", IDOK, 116, 124, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 181, 124, 60, 14 END -IDD_INSTALL_DIALOG DIALOGEX DISCARDABLE 0, 0, 386, 231 +IDD_INSTALL_DIALOG DIALOGEX DISCARDABLE 0, 0, 216, 97 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Њci№gnij i zainstaluj" +CAPTION "Program installation" FONT 8, "MS Shell Dlg" BEGIN - PUSHBUTTON "OK", IDOK, 255, 212, 60, 14 - PUSHBUTTON "Anuluj", IDCANCEL, 320, 212, 60, 14 + LTEXT "...", IDC_INSTALL_TEXT, 4, 5, 209, 35 + + AUTORADIOBUTTON "&Install from a disk (CD or DVD)", IDC_CD_INSTALL, 10, 46, 197, 11, WS_GROUP + AUTORADIOBUTTON "&Download and install", IDC_DOWNLOAD_INSTALL, 10, 59, 197, 11, NOT WS_TABSTOP + + PUSHBUTTON "OK", IDOK, 86, 78, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 150, 78, 60, 14 END IDD_DOWNLOAD_DIALOG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 220, 76 @@ -165,5 +182,7 @@ BEGIN IDS_AVAILABLEFORINST "Dostкpne" IDS_UPDATES "Uaktualnienia" IDS_APPLICATIONS "Aplikacje" - IDS_DOWNLOAD_FOLDER "Њci№gniкte" + IDS_CHOOSE_FOLDER_TEXT "Choose a folder which will be used for downloading of programs:" + IDS_CHOOSE_FOLDER_ERROR "You have specified a nonexistent folder!" + IDS_USER_NOT_ADMIN "You should be administrator for start ""ReactOS Applications Manager""!" END diff --git a/reactos/base/applications/rapps/lang/ru-RU.rc b/reactos/base/applications/rapps/lang/ru-RU.rc index 0ae8c936fa8..e55dee4c2ea 100644 --- a/reactos/base/applications/rapps/lang/ru-RU.rc +++ b/reactos/base/applications/rapps/lang/ru-RU.rc @@ -4,7 +4,7 @@ IDR_MAINMENU MENU BEGIN POPUP "&Файл" BEGIN - MENUITEM "&Параметры", ID_SETTINGS, GRAYED + MENUITEM "&Параметры", ID_SETTINGS MENUITEM SEPARATOR MENUITEM "&Выход", ID_EXIT END @@ -44,22 +44,39 @@ BEGIN END END -IDD_SETTINGS_DIALOG DIALOGEX DISCARDABLE 0, 0, 386, 231 +IDD_SETTINGS_DIALOG DIALOGEX DISCARDABLE 0, 0, 250, 144 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Параметры" FONT 8, "MS Shell Dlg" BEGIN - PUSHBUTTON "OK", IDOK, 255, 212, 60, 14 - PUSHBUTTON "Отмена", IDCANCEL, 320, 212, 60, 14 + GROUPBOX "Общие", -1, 4, 2, 240, 61 + AUTOCHECKBOX "&Сохранять положение окна", IDC_SAVE_WINDOW_POS, 15, 12, 219, 12 + AUTOCHECKBOX "&Обновлять список доступных программ при запуске", IDC_UPDATE_AVLIST, 15, 29, 219, 12 + AUTOCHECKBOX "&Вести лог установки/удаления программ", IDC_LOG_ENABLED, 15, 46, 219, 12 + + GROUPBOX "Загрузка", -1, 4, 65, 240, 51 + LTEXT "Папка для загрузок:", -1, 16, 75, 77, 9 + EDITTEXT IDC_DOWNLOAD_DIR_EDIT, 15, 86, 166, 12, WS_CHILD | WS_VISIBLE | WS_GROUP + PUSHBUTTON "В&ыбрать", IDC_CHOOSE, 187, 85, 50, 14 + AUTOCHECKBOX "&Удалять инсталляторы программ после установки", IDC_DEL_AFTER_INSTALL, 16, 100, 218, 12 + + PUSHBUTTON "По умолчанию", IDC_DEFAULT_SETTINGS, 8, 124, 60, 14 + PUSHBUTTON "OK", IDOK, 116, 124, 60, 14 + PUSHBUTTON "Отмена", IDCANCEL, 181, 124, 60, 14 END -IDD_INSTALL_DIALOG DIALOGEX DISCARDABLE 0, 0, 386, 231 +IDD_INSTALL_DIALOG DIALOGEX DISCARDABLE 0, 0, 216, 97 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Скачать и установить" +CAPTION "Установка программы" FONT 8, "MS Shell Dlg" BEGIN - PUSHBUTTON "OK", IDOK, 255, 212, 60, 14 - PUSHBUTTON "Отмена", IDCANCEL, 320, 212, 60, 14 + LTEXT "...", IDC_INSTALL_TEXT, 4, 5, 209, 35 + + AUTORADIOBUTTON "&Установить с диска", IDC_CD_INSTALL, 10, 46, 197, 11, WS_GROUP + AUTORADIOBUTTON "&Скачать и установить", IDC_DOWNLOAD_INSTALL, 10, 59, 197, 11, NOT WS_TABSTOP + + PUSHBUTTON "OK", IDOK, 86, 78, 60, 14 + PUSHBUTTON "Отмена", IDCANCEL, 150, 78, 60, 14 END IDD_DOWNLOAD_DIALOG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 220, 76 @@ -113,7 +130,7 @@ BEGIN IDS_INFO_UPDATEINFO "\nИнформация об обновлениях: " IDS_INFO_INFOABOUT "\nИнформация о программе: " IDS_INFO_COMMENTS "\nКомментарии: " - IDS_INFO_INSTLOCATION "\nУстановлено из: " + IDS_INFO_INSTLOCATION "\nУстановлено в: " IDS_INFO_INSTALLSRC "\nИсточник установки: " IDS_INFO_UNINSTALLSTR "\nСтрока для удаления: " IDS_INFO_MODIFYPATH "\nСтрока для изменения: " @@ -163,5 +180,7 @@ BEGIN IDS_AVAILABLEFORINST "Доступно для установки" IDS_UPDATES "Обновления" IDS_APPLICATIONS "Приложения" - IDS_DOWNLOAD_FOLDER "Downloads" + IDS_CHOOSE_FOLDER_TEXT "Выберите папку, которая будет использоваться для загрузки программ:" + IDS_CHOOSE_FOLDER_ERROR "Вы указали несуществующую папку!" + IDS_USER_NOT_ADMIN "Вы должны быть администратором для запуска ""Менеджера приложений ReactOS""!" END diff --git a/reactos/base/applications/rapps/lang/sk-SK.rc b/reactos/base/applications/rapps/lang/sk-SK.rc index 57633af2d52..11fa8bfbcf5 100644 --- a/reactos/base/applications/rapps/lang/sk-SK.rc +++ b/reactos/base/applications/rapps/lang/sk-SK.rc @@ -9,7 +9,7 @@ IDR_MAINMENU MENU BEGIN POPUP "&Sъbor" BEGIN - MENUITEM "&Nastavenia", ID_SETTINGS, GRAYED + MENUITEM "&Nastavenia", ID_SETTINGS MENUITEM SEPARATOR MENUITEM "S&konиiќ", ID_EXIT END @@ -49,22 +49,39 @@ BEGIN END END -IDD_SETTINGS_DIALOG DIALOGEX DISCARDABLE 0, 0, 386, 231 +IDD_SETTINGS_DIALOG DIALOGEX DISCARDABLE 0, 0, 250, 144 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Nastavenia" +CAPTION "Settings" FONT 8, "MS Shell Dlg" BEGIN - PUSHBUTTON "OK", IDOK, 255, 212, 60, 14 - PUSHBUTTON "Zruљiќ", IDCANCEL, 320, 212, 60, 14 + GROUPBOX "General", -1, 4, 2, 240, 61 + AUTOCHECKBOX "&Save window position", IDC_SAVE_WINDOW_POS, 15, 12, 219, 12 + AUTOCHECKBOX "&Update the list of accessible programs at start", IDC_UPDATE_AVLIST, 15, 29, 219, 12 + AUTOCHECKBOX "&Log of installation and removal of programs", IDC_LOG_ENABLED, 15, 46, 219, 12 + + GROUPBOX "Downloading", -1, 4, 65, 240, 51 + LTEXT "Folder for downloadings:", -1, 16, 75, 100, 9 + EDITTEXT IDC_DOWNLOAD_DIR_EDIT, 15, 86, 166, 12, WS_CHILD | WS_VISIBLE | WS_GROUP + PUSHBUTTON "&Choose", IDC_CHOOSE, 187, 85, 50, 14 + AUTOCHECKBOX "&Delete installers of programs after installation", IDC_DEL_AFTER_INSTALL, 16, 100, 218, 12 + + PUSHBUTTON "Default", IDC_DEFAULT_SETTINGS, 8, 124, 60, 14 + PUSHBUTTON "OK", IDOK, 116, 124, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 181, 124, 60, 14 END -IDD_INSTALL_DIALOG DIALOGEX DISCARDABLE 0, 0, 386, 231 +IDD_INSTALL_DIALOG DIALOGEX DISCARDABLE 0, 0, 216, 97 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Stiahnuќ a nainљtalovaќ" +CAPTION "Program installation" FONT 8, "MS Shell Dlg" BEGIN - PUSHBUTTON "OK", IDOK, 255, 212, 60, 14 - PUSHBUTTON "Zruљiќ", IDCANCEL, 320, 212, 60, 14 + LTEXT "...", IDC_INSTALL_TEXT, 4, 5, 209, 35 + + AUTORADIOBUTTON "&Install from a disk (CD or DVD)", IDC_CD_INSTALL, 10, 46, 197, 11, WS_GROUP + AUTORADIOBUTTON "&Download and install", IDC_DOWNLOAD_INSTALL, 10, 59, 197, 11, NOT WS_TABSTOP + + PUSHBUTTON "OK", IDOK, 86, 78, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 150, 78, 60, 14 END IDD_DOWNLOAD_DIALOG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 220, 76 @@ -168,5 +185,7 @@ BEGIN IDS_AVAILABLEFORINST "Dostupnй pre nainљtalovanie" IDS_UPDATES "Aktualizбcie" IDS_APPLICATIONS "Aplikбcie" - IDS_DOWNLOAD_FOLDER "Sќahovania" // Downloads + IDS_CHOOSE_FOLDER_TEXT "Choose a folder which will be used for downloading of programs:" + IDS_CHOOSE_FOLDER_ERROR "You have specified a nonexistent folder!" + IDS_USER_NOT_ADMIN "You should be administrator for start ""ReactOS Applications Manager""!" END diff --git a/reactos/base/applications/rapps/lang/uk-UA.rc b/reactos/base/applications/rapps/lang/uk-UA.rc index 3dfee07702f..b6a44c33a05 100644 --- a/reactos/base/applications/rapps/lang/uk-UA.rc +++ b/reactos/base/applications/rapps/lang/uk-UA.rc @@ -12,7 +12,7 @@ IDR_MAINMENU MENU BEGIN POPUP "&Файл" BEGIN - MENUITEM "&Налаштування", ID_SETTINGS, GRAYED + MENUITEM "&Налаштування", ID_SETTINGS MENUITEM SEPARATOR MENUITEM "В&ихід", ID_EXIT END @@ -52,22 +52,39 @@ BEGIN END END -IDD_SETTINGS_DIALOG DIALOGEX DISCARDABLE 0, 0, 386, 231 +IDD_SETTINGS_DIALOG DIALOGEX DISCARDABLE 0, 0, 250, 144 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Налаштування" +CAPTION "Settings" FONT 8, "MS Shell Dlg" BEGIN - PUSHBUTTON "Так", IDOK, 255, 212, 60, 14 - PUSHBUTTON "Ні", IDCANCEL, 320, 212, 60, 14 + GROUPBOX "General", -1, 4, 2, 240, 61 + AUTOCHECKBOX "&Save window position", IDC_SAVE_WINDOW_POS, 15, 12, 219, 12 + AUTOCHECKBOX "&Update the list of accessible programs at start", IDC_UPDATE_AVLIST, 15, 29, 219, 12 + AUTOCHECKBOX "&Log of installation and removal of programs", IDC_LOG_ENABLED, 15, 46, 219, 12 + + GROUPBOX "Downloading", -1, 4, 65, 240, 51 + LTEXT "Folder for downloadings:", -1, 16, 75, 100, 9 + EDITTEXT IDC_DOWNLOAD_DIR_EDIT, 15, 86, 166, 12, WS_CHILD | WS_VISIBLE | WS_GROUP + PUSHBUTTON "&Choose", IDC_CHOOSE, 187, 85, 50, 14 + AUTOCHECKBOX "&Delete installers of programs after installation", IDC_DEL_AFTER_INSTALL, 16, 100, 218, 12 + + PUSHBUTTON "Default", IDC_DEFAULT_SETTINGS, 8, 124, 60, 14 + PUSHBUTTON "OK", IDOK, 116, 124, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 181, 124, 60, 14 END -IDD_INSTALL_DIALOG DIALOGEX DISCARDABLE 0, 0, 386, 231 +IDD_INSTALL_DIALOG DIALOGEX DISCARDABLE 0, 0, 216, 97 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Завантажити і встановити" +CAPTION "Program installation" FONT 8, "MS Shell Dlg" BEGIN - PUSHBUTTON "Так", IDOK, 255, 212, 60, 14 - PUSHBUTTON "Ні", IDCANCEL, 320, 212, 60, 14 + LTEXT "...", IDC_INSTALL_TEXT, 4, 5, 209, 35 + + AUTORADIOBUTTON "&Install from a disk (CD or DVD)", IDC_CD_INSTALL, 10, 46, 197, 11, WS_GROUP + AUTORADIOBUTTON "&Download and install", IDC_DOWNLOAD_INSTALL, 10, 59, 197, 11, NOT WS_TABSTOP + + PUSHBUTTON "OK", IDOK, 86, 78, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 150, 78, 60, 14 END IDD_DOWNLOAD_DIALOG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 220, 76 @@ -171,5 +188,7 @@ BEGIN IDS_AVAILABLEFORINST "Доступні для встановлення" IDS_UPDATES "Оновлення" IDS_APPLICATIONS "Додатки" - IDS_DOWNLOAD_FOLDER "Завантаження" + IDS_CHOOSE_FOLDER_TEXT "Choose a folder which will be used for downloading of programs:" + IDS_CHOOSE_FOLDER_ERROR "You have specified a nonexistent folder!" + IDS_USER_NOT_ADMIN "You should be administrator for start ""ReactOS Applications Manager""!" END diff --git a/reactos/base/applications/rapps/loaddlg.c b/reactos/base/applications/rapps/loaddlg.c index e4170ac43c0..eed4154a111 100644 --- a/reactos/base/applications/rapps/loaddlg.c +++ b/reactos/base/applications/rapps/loaddlg.c @@ -37,6 +37,7 @@ #include static PAPPLICATION_INFO AppInfo; +static HICON hIcon = NULL; typedef struct _IBindStatusCallbackImpl { @@ -220,32 +221,12 @@ ThreadFunc(LPVOID Context) DWORD r; BOOL bCancelled = FALSE; BOOL bTempfile = FALSE; - HKEY hKey = NULL; - DWORD dwSize = MAX_PATH; + BOOL bCab = FALSE; /* built the path for the download */ p = wcsrchr(AppInfo->szUrlDownload, L'/'); if (!p) goto end; - /* Create default download path */ - if (GetWindowsDirectoryW(path, sizeof(path) / sizeof(WCHAR))) - { - WCHAR DPath[MAX_PATH]; - int i; - for (i = 0; i < 4; i++) - { - if (i == 3) - { - DPath[i] = '\0'; - break; - } - DPath[i] = path[i]; - } - LoadStringW(hInst, IDS_DOWNLOAD_FOLDER, path, sizeof(path) / sizeof(WCHAR)); - wcscat(DPath, path); - wcscpy(path, DPath); - } - if (wcslen(AppInfo->szUrlDownload) > 4) { if (AppInfo->szUrlDownload[wcslen(AppInfo->szUrlDownload) - 4] == '.' && @@ -253,32 +234,18 @@ ThreadFunc(LPVOID Context) AppInfo->szUrlDownload[wcslen(AppInfo->szUrlDownload) - 2] == 'a' && AppInfo->szUrlDownload[wcslen(AppInfo->szUrlDownload) - 1] == 'b') { + bCab = TRUE; if (!GetCurrentDirectoryW(MAX_PATH, path)) goto end; } else { - if (RegOpenKeyW(HKEY_LOCAL_MACHINE, - L"Software\\ReactOS\\rappmgr", - &hKey) == ERROR_SUCCESS) - { - if ((RegQueryValueExW(hKey, - L"DownloadFolder", - NULL, - NULL, - (LPBYTE)&path, - &dwSize) != ERROR_SUCCESS) && (path[0] == 0)) - { - RegCloseKey(hKey); - goto end; - } - RegCloseKey(hKey); - } + wcscpy(path, SettingsInfo.szDownloadDir); } } else goto end; - if (GetFileAttributesW(path) == 0xFFFFFFFF) + if (GetFileAttributesW(path) == INVALID_FILE_ATTRIBUTES) { if (!CreateDirectoryW(path, NULL)) goto end; @@ -292,36 +259,30 @@ ThreadFunc(LPVOID Context) dl = CreateDl(Context, &bCancelled); r = URLDownloadToFileW(NULL, AppInfo->szUrlDownload, path, 0, dl); if (dl) IBindStatusCallback_Release(dl); - if (S_OK != r) - { - MessageBoxW(0, L"Download error!", NULL, 0); - goto end; - } - else if (bCancelled) - { - goto end; - } + if (S_OK != r) goto end; + else if (bCancelled) goto end; + ShowWindow(Dlg, SW_HIDE); /* run it */ memset(&si, 0, sizeof(si)); si.cb = sizeof(si); r = CreateProcessW(path, NULL, NULL, NULL, 0, 0, NULL, NULL, &si, &pi); - if (0 == r) - { - goto end; - } + if (0 == r) goto end; + CloseHandle(pi.hThread); WaitForSingleObject(pi.hProcess, INFINITE); CloseHandle(pi.hProcess); - end: - if (bTempfile) - { - if (bCancelled) - DeleteFileW(path); - } +end: + if (bTempfile) + { + if (bCancelled || (SettingsInfo.bDelInstaller && !bCab)) + DeleteFileW(path); + } + EndDialog(Dlg, 0); + return 0; } @@ -337,6 +298,13 @@ DownloadDlgProc(HWND Dlg, UINT Msg, WPARAM wParam, LPARAM lParam) { case WM_INITDIALOG: + hIcon = LoadIconW(hInst, MAKEINTRESOURCEW(IDI_MAIN)); + if (hIcon) + { + SendMessageW(Dlg, WM_SETICON, ICON_BIG, (LPARAM) hIcon); + SendMessageW(Dlg, WM_SETICON, ICON_SMALL, (LPARAM) hIcon); + } + SetWindowLongPtrW(Dlg, GWLP_USERDATA, 0); Item = GetDlgItem(Dlg, IDC_DOWNLOAD_PROGRESS); if (Item) @@ -359,6 +327,7 @@ DownloadDlgProc(HWND Dlg, UINT Msg, WPARAM wParam, LPARAM lParam) return FALSE; case WM_CLOSE: + if (hIcon) DestroyIcon(hIcon); EndDialog(Dlg, 0); return TRUE; @@ -376,6 +345,8 @@ DownloadApplication(INT Index) AppInfo = (PAPPLICATION_INFO) ListViewGetlParam(Index); if (!AppInfo) return FALSE; + WriteLogMessage(EVENTLOG_SUCCESS, MSG_SUCCESS_INSTALL, AppInfo->szName); + DialogBoxW(hInst, MAKEINTRESOURCEW(IDD_DOWNLOAD_DIALOG), hMainWnd, diff --git a/reactos/base/applications/rapps/misc.c b/reactos/base/applications/rapps/misc.c index 342c4adf7e5..b0c01e9bb03 100644 --- a/reactos/base/applications/rapps/misc.c +++ b/reactos/base/applications/rapps/misc.c @@ -13,6 +13,8 @@ #define EXTRACT_FILLFILELIST 0x00000001 #define EXTRACT_EXTRACTFILES 0x00000002 +static HANDLE hLog = NULL; + typedef struct { int erfOper; @@ -244,3 +246,106 @@ ExtractFilesFromCab(LPWSTR lpCabName, LPWSTR lpOutputPath) return FALSE; } + +VOID +InitLogs(VOID) +{ + WCHAR szBuf[MAX_PATH] = L"SYSTEM\\CurrentControlSet\\Services\\EventLog\\ReactOS Application Manager\\ReactOS Application Manager"; + WCHAR szPath[MAX_PATH]; + DWORD dwCategoryNum = 1; + DWORD dwDisp, dwData; + HKEY hKey; + + if (!SettingsInfo.bLogEnabled) return; + + if (RegCreateKeyExW(HKEY_LOCAL_MACHINE, + szBuf, 0, NULL, + REG_OPTION_NON_VOLATILE, + KEY_WRITE, NULL, &hKey, &dwDisp) != ERROR_SUCCESS) + { + return; + } + + if (!GetCurrentDirectoryW(MAX_PATH, szPath)) return; + wcscat(szPath, L"\\rapps.exe"); + + if (RegSetValueExW(hKey, + L"EventMessageFile", + 0, + REG_EXPAND_SZ, + (LPBYTE)szPath, + (DWORD)(wcslen(szPath) + 1) * sizeof(WCHAR)) != ERROR_SUCCESS) + { + RegCloseKey(hKey); + return; + } + + dwData = EVENTLOG_ERROR_TYPE | EVENTLOG_WARNING_TYPE | + EVENTLOG_INFORMATION_TYPE; + + if (RegSetValueExW(hKey, + L"TypesSupported", + 0, + REG_DWORD, + (LPBYTE)&dwData, + sizeof(DWORD)) != ERROR_SUCCESS) + { + RegCloseKey(hKey); + return; + } + + if (RegSetValueExW(hKey, + L"CategoryMessageFile", + 0, + REG_EXPAND_SZ, + (LPBYTE)szPath, + (DWORD)(wcslen(szPath) + 1) * sizeof(WCHAR)) != ERROR_SUCCESS) + { + RegCloseKey(hKey); + return; + } + + if (RegSetValueExW(hKey, + L"CategoryCount", + 0, + REG_DWORD, + (LPBYTE)&dwCategoryNum, + sizeof(DWORD)) != ERROR_SUCCESS) + { + RegCloseKey(hKey); + return; + } + + RegCloseKey(hKey); + + hLog = RegisterEventSourceW(NULL, L"ReactOS Application Manager"); +} + + +VOID +FreeLogs(VOID) +{ + if (hLog) DeregisterEventSource(hLog); +} + + +BOOL +WriteLogMessage(WORD wType, DWORD dwEventID, LPWSTR lpMsg) +{ + if (!SettingsInfo.bLogEnabled) return TRUE; + + if (!ReportEventW(hLog, + wType, + 0, + dwEventID, + NULL, + 1, + 0, + (LPCWSTR*)&lpMsg, + NULL)) + { + return FALSE; + } + + return TRUE; +} diff --git a/reactos/base/applications/rapps/rapps.h b/reactos/base/applications/rapps/rapps.h index bd98229aaeb..c6e5d17c98e 100644 --- a/reactos/base/applications/rapps/rapps.h +++ b/reactos/base/applications/rapps/rapps.h @@ -5,8 +5,11 @@ #include #include #include +#include #include +#include + #include "resource.h" #define APPLICATION_DATEBASE_URL L"http://opendn.org/rappmgr.cab" @@ -55,9 +58,9 @@ typedef struct { INT Category; WCHAR szName[MAX_PATH]; - WCHAR szRegName[MAX_PATH]; + WCHAR szRegName[MAX_PATH]; WCHAR szVersion[MAX_PATH]; - WCHAR szLicence[MAX_PATH]; + WCHAR szLicence[MAX_PATH]; WCHAR szDesc[MAX_PATH]; WCHAR szSize[MAX_PATH]; WCHAR szUrlSite[MAX_PATH]; @@ -66,10 +69,27 @@ typedef struct } APPLICATION_INFO, *PAPPLICATION_INFO; +typedef struct +{ + BOOL bSaveWndPos; + BOOL bUpdateAtStart; + BOOL bLogEnabled; + WCHAR szDownloadDir[MAX_PATH]; + BOOL bDelInstaller; + /* Window Pos */ + BOOL Maximized; + INT Left; + INT Top; + INT Right; + INT Bottom; + +} SETTINGS_INFO, *PSETTINGS_INFO; + /* available.c */ typedef BOOL (CALLBACK *AVAILENUMPROC)(APPLICATION_INFO Info); BOOL EnumAvailableApplications(INT EnumType, AVAILENUMPROC lpEnumProc); BOOL ShowAvailableAppInfo(INT Index); +BOOL UpdateAppsDB(VOID); /* installdlg.c */ BOOL InstallApplication(INT Index); @@ -86,6 +106,9 @@ BOOL IsInstalledApplication(LPWSTR lpRegName, BOOL IsUserKey); extern HWND hMainWnd; extern HINSTANCE hInst; extern INT SelectedEnumType; +extern SETTINGS_INFO SettingsInfo; +VOID SaveSettings(HWND hwnd); +VOID FillDafaultSettings(PSETTINGS_INFO pSettingsInfo); /* listview.c */ extern HWND hListView; @@ -111,6 +134,9 @@ VOID SetWelcomeText(VOID); VOID ShowPopupMenu(HWND hwnd, UINT MenuID); BOOL StartProcess(LPWSTR lpPath, BOOL Wait); BOOL ExtractFilesFromCab(LPWSTR lpCabName, LPWSTR lpOutputPath); +VOID InitLogs(VOID); +VOID FreeLogs(VOID); +BOOL WriteLogMessage(WORD wType, DWORD dwEventID, LPWSTR lpMsg); /* parser.c */ INT ParserGetString(LPCWSTR section, LPCWSTR entry, LPWSTR buffer, UINT len, LPCWSTR filename); diff --git a/reactos/base/applications/rapps/rapps.rbuild b/reactos/base/applications/rapps/rapps.rbuild index 57dcb2df8c2..e74c31ff248 100644 --- a/reactos/base/applications/rapps/rapps.rbuild +++ b/reactos/base/applications/rapps/rapps.rbuild @@ -1,4 +1,7 @@ + + include/reactos + . . advapi32 @@ -12,6 +15,8 @@ shlwapi ntdll + rappsmsg + aboutdlg.c available.c installdlg.c @@ -29,3 +34,7 @@ winmain.c rapps.rc + + rappsmsg.mc + + diff --git a/reactos/base/applications/rapps/rapps.rc b/reactos/base/applications/rapps/rapps.rc index e4fc8cd792c..7c0aeb5ca3b 100644 --- a/reactos/base/applications/rapps/rapps.rc +++ b/reactos/base/applications/rapps/rapps.rc @@ -37,4 +37,6 @@ IDI_CAT_VIDEO ICON DISCARDABLE "res/cats/video.ico" 1 24 DISCARDABLE "manifest.xml" +#include + #include "rsrc.rc" diff --git a/reactos/base/applications/rapps/rappsmsg.mc b/reactos/base/applications/rapps/rappsmsg.mc new file mode 100644 index 00000000000..2fdf0419d66 --- /dev/null +++ b/reactos/base/applications/rapps/rappsmsg.mc @@ -0,0 +1,28 @@ +MessageIdTypedef=ULONG + +SeverityNames=(Success=0x0:STATUS_SEVERITY_SUCCESS +Informational=0x1:STATUS_SEVERITY_INFORMATIONAL +Warning=0x2:STATUS_SEVERITY_WARNING +Error=0x3:STATUS_SEVERITY_ERROR) + +FacilityNames=(System=0x0:FACILITY_SYSTEM Application=0xFFF) + +LanguageNames=(English=0x409:MSG00409) + +MessageId=1 +Severity=Success +Facility=Application +SymbolicName=MSG_SUCCESS_INSTALL +Language=English +Installation of the program "%1" is called. +. + +MessageId=2 +Severity=Success +Facility=Application +SymbolicName=MSG_SUCCESS_REMOVE +Language=English +Removal of the program "%1" is called. +. + +; EOF diff --git a/reactos/base/applications/rapps/resource.h b/reactos/base/applications/rapps/resource.h index d5329904dbd..8e9bf5bbd77 100644 --- a/reactos/base/applications/rapps/resource.h +++ b/reactos/base/applications/rapps/resource.h @@ -36,6 +36,16 @@ #define IDC_STATUSBAR 1000 #define IDC_DOWNLOAD_PROGRESS 1001 #define IDC_DOWNLOAD_STATUS 1002 +#define IDC_SAVE_WINDOW_POS 1003 +#define IDC_UPDATE_AVLIST 1004 +#define IDC_DOWNLOAD_DIR_EDIT 1005 +#define IDC_DEL_AFTER_INSTALL 1006 +#define IDC_LOG_ENABLED 1007 +#define IDC_CHOOSE 1008 +#define IDC_DEFAULT_SETTINGS 1009 +#define IDC_INSTALL_TEXT 1010 +#define IDC_CD_INSTALL 1011 +#define IDC_DOWNLOAD_INSTALL 1012 /* Dialogs */ #define IDD_SETTINGS_DIALOG 300 @@ -74,7 +84,9 @@ #define IDS_AVAILABLEFORINST 110 #define IDS_UPDATES 111 #define IDS_APPLICATIONS 112 -#define IDS_DOWNLOAD_FOLDER 113 +#define IDS_CHOOSE_FOLDER_TEXT 113 +#define IDS_CHOOSE_FOLDER_ERROR 114 +#define IDS_USER_NOT_ADMIN 115 /* Tooltips */ #define IDS_TOOLTIP_INSTALL 200 diff --git a/reactos/base/applications/rapps/settingsdlg.c b/reactos/base/applications/rapps/settingsdlg.c index 8c7908f6ab8..3764f0140bb 100644 --- a/reactos/base/applications/rapps/settingsdlg.c +++ b/reactos/base/applications/rapps/settingsdlg.c @@ -8,6 +8,48 @@ #include "rapps.h" +SETTINGS_INFO NewSettingsInfo; + +#define IS_CHECKED(a, b) \ + a = (SendDlgItemMessage(hDlg, b, BM_GETCHECK, 0, 0) == BST_CHECKED) ? TRUE : FALSE + +BOOL +ChooseFolder(HWND hwnd) +{ + BROWSEINFO fi; + LPCITEMIDLIST lpItemList; + WCHAR szPath[MAX_PATH], szBuf[MAX_STR_LEN]; + + LoadStringW(hInst, IDS_CHOOSE_FOLDER_TEXT, szBuf, sizeof(szBuf) / sizeof(TCHAR)); + + ZeroMemory(&fi, sizeof(BROWSEINFO)); + fi.hwndOwner = hwnd; + fi.lpszTitle = szBuf; + fi.ulFlags = BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS | BIF_BROWSEFORCOMPUTER | BIF_NEWDIALOGSTYLE; + fi.lpfn = NULL; + fi.lParam = -1; + fi.iImage = 0; + + if (!(lpItemList = SHBrowseForFolder(&fi))) return FALSE; + SHGetPathFromIDList(lpItemList, szPath); + + if (wcslen(szPath) == 0) return FALSE; + SetDlgItemTextW(hwnd, IDC_DOWNLOAD_DIR_EDIT, szPath); + + return TRUE; +} + +static VOID +InitSettingsControls(HWND hDlg, SETTINGS_INFO Info) +{ + SendDlgItemMessage(hDlg, IDC_SAVE_WINDOW_POS, BM_SETCHECK, Info.bSaveWndPos, 0); + SendDlgItemMessage(hDlg, IDC_UPDATE_AVLIST, BM_SETCHECK, Info.bUpdateAtStart, 0); + SendDlgItemMessage(hDlg, IDC_LOG_ENABLED, BM_SETCHECK, Info.bLogEnabled, 0); + SendDlgItemMessage(hDlg, IDC_DEL_AFTER_INSTALL, BM_SETCHECK, Info.bDelInstaller, 0); + + SetWindowTextW(GetDlgItem(hDlg, IDC_DOWNLOAD_DIR_EDIT), + Info.szDownloadDir); +} static INT_PTR CALLBACK @@ -17,7 +59,8 @@ SettingsDlgProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam) { case WM_INITDIALOG: { - + NewSettingsInfo = SettingsInfo; + InitSettingsControls(hDlg, SettingsInfo); } break; @@ -25,10 +68,67 @@ SettingsDlgProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam) { switch (LOWORD(wParam)) { + case IDC_CHOOSE: + ChooseFolder(hDlg); + break; + + case IDC_SAVE_WINDOW_POS: + IS_CHECKED(NewSettingsInfo.bSaveWndPos, IDC_SAVE_WINDOW_POS); + break; + + case IDC_UPDATE_AVLIST: + IS_CHECKED(NewSettingsInfo.bUpdateAtStart, IDC_UPDATE_AVLIST); + break; + + case IDC_LOG_ENABLED: + IS_CHECKED(NewSettingsInfo.bLogEnabled, IDC_LOG_ENABLED); + break; + + case IDC_DEL_AFTER_INSTALL: + IS_CHECKED(NewSettingsInfo.bDelInstaller, IDC_DEL_AFTER_INSTALL); + break; + + case IDC_DEFAULT_SETTINGS: + FillDafaultSettings(&NewSettingsInfo); + InitSettingsControls(hDlg, NewSettingsInfo); + break; + case IDOK: + { + WCHAR szDir[MAX_PATH]; + DWORD dwAttr; + + GetWindowTextW(GetDlgItem(hDlg, IDC_DOWNLOAD_DIR_EDIT), + szDir, MAX_PATH); + + dwAttr = GetFileAttributesW(szDir); + if (dwAttr != INVALID_FILE_ATTRIBUTES && + (dwAttr & FILE_ATTRIBUTE_DIRECTORY)) + { + wcscpy(NewSettingsInfo.szDownloadDir, szDir); + } + else + { + WCHAR szMsgText[MAX_STR_LEN]; + + LoadStringW(hInst, + IDS_CHOOSE_FOLDER_ERROR, + szMsgText, sizeof(szMsgText) / sizeof(WCHAR)); + + MessageBoxW(hDlg, szMsgText, NULL, MB_OK | MB_ICONERROR); + SetFocus(GetDlgItem(hDlg, IDC_DOWNLOAD_DIR_EDIT)); + break; + } + + SettingsInfo = NewSettingsInfo; + SaveSettings(GetParent(hDlg)); + EndDialog(hDlg, LOWORD(wParam)); + } + break; + case IDCANCEL: EndDialog(hDlg, LOWORD(wParam)); - break; + break; } } break; diff --git a/reactos/base/applications/rapps/toolbar.c b/reactos/base/applications/rapps/toolbar.c index c6776c1fcc3..d7e88a7a3f8 100644 --- a/reactos/base/applications/rapps/toolbar.c +++ b/reactos/base/applications/rapps/toolbar.c @@ -26,7 +26,7 @@ static const TBBUTTON Buttons[] = { 5, 0, TBSTATE_ENABLED, BTNS_SEP, {0}, 0, 0}, { 3, ID_REFRESH, TBSTATE_ENABLED, BTNS_BUTTON | BTNS_AUTOSIZE, {0}, 0, 0}, { 5, 0, TBSTATE_ENABLED, BTNS_SEP, {0}, 0, 0}, - { 4, ID_SETTINGS, TBSTATE_INDETERMINATE, BTNS_BUTTON | BTNS_AUTOSIZE, {0}, 0, 0}, + { 4, ID_SETTINGS, TBSTATE_ENABLED, BTNS_BUTTON | BTNS_AUTOSIZE, {0}, 0, 0}, { 5, ID_EXIT, TBSTATE_ENABLED, BTNS_BUTTON | BTNS_AUTOSIZE, {0}, 0, 0} }; diff --git a/reactos/base/applications/rapps/winmain.c b/reactos/base/applications/rapps/winmain.c index f90411b81ed..5940ab4a3b7 100644 --- a/reactos/base/applications/rapps/winmain.c +++ b/reactos/base/applications/rapps/winmain.c @@ -13,7 +13,70 @@ HINSTANCE hInst; HIMAGELIST hImageListView = NULL; HIMAGELIST hImageTreeView = NULL; INT SelectedEnumType = ENUM_ALL_COMPONENTS; +SETTINGS_INFO SettingsInfo; +VOID +FillDafaultSettings(PSETTINGS_INFO pSettingsInfo) +{ + pSettingsInfo->bSaveWndPos = TRUE; + pSettingsInfo->bUpdateAtStart = FALSE; + pSettingsInfo->bLogEnabled = TRUE; + wcscpy(pSettingsInfo->szDownloadDir, L"C:\\Downloads"); + pSettingsInfo->bDelInstaller = FALSE; + + pSettingsInfo->Maximized = FALSE; + pSettingsInfo->Left = 0; + pSettingsInfo->Top = 0; + pSettingsInfo->Right = 680; + pSettingsInfo->Bottom = 450; +} + +static BOOL +LoadSettings(VOID) +{ + HKEY hKey; + DWORD dwSize; + + if (RegOpenKeyExW(HKEY_CURRENT_USER, L"Software\\ReactOS\\rapps", 0, KEY_READ, &hKey) == ERROR_SUCCESS) + { + dwSize = sizeof(SETTINGS_INFO); + if (RegQueryValueExW(hKey, L"Settings", NULL, NULL, (LPBYTE)&SettingsInfo, &dwSize) == ERROR_SUCCESS) + { + RegCloseKey(hKey); + return TRUE; + } + + RegCloseKey(hKey); + } + + return FALSE; +} + +VOID +SaveSettings(HWND hwnd) +{ + WINDOWPLACEMENT wp; + HKEY hKey; + + if (SettingsInfo.bSaveWndPos) + { + wp.length = sizeof(WINDOWPLACEMENT); + GetWindowPlacement(hwnd, &wp); + + SettingsInfo.Left = wp.rcNormalPosition.left; + SettingsInfo.Top = wp.rcNormalPosition.top; + SettingsInfo.Right = wp.rcNormalPosition.right; + SettingsInfo.Bottom = wp.rcNormalPosition.bottom; + SettingsInfo.Maximized = (IsZoomed(hwnd) || (wp.flags & WPF_RESTORETOMAXIMIZED)); + } + + if (RegCreateKeyExW(HKEY_CURRENT_USER, L"Software\\ReactOS\\rapps", 0, NULL, + REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL) == ERROR_SUCCESS) + { + RegSetValueEx(hKey, L"Settings", 0, REG_BINARY, (LPBYTE)&SettingsInfo, sizeof(SETTINGS_INFO)); + RegCloseKey(hKey); + } +} VOID FreeInstalledAppList(VOID) @@ -226,6 +289,15 @@ InitCategoriesList(VOID) BOOL InitControls(HWND hwnd) { + if (SettingsInfo.bSaveWndPos) + { + MoveWindow(hwnd, SettingsInfo.Left, SettingsInfo.Top, + SettingsInfo.Right - SettingsInfo.Left, + SettingsInfo.Bottom - SettingsInfo.Top, TRUE); + + if (SettingsInfo.Maximized) ShowWindow(hwnd, SW_MAXIMIZE); + } + if (CreateStatusBar(hwnd) && CreateToolBar(hwnd) && CreateListView(hwnd) && @@ -347,7 +419,7 @@ MainWndOnSize(HWND hwnd, WPARAM wParam, LPARAM lParam) HDWP hdwp = BeginDeferWindowPos(5); INT SearchBarWidth = GetWindowWidth(hSearchBar); INT RichPos = GetWindowHeight(hRichEdit); - INT NewPos = GetClientWindowHeight(hMainWnd) - (RichPos + SPLIT_WIDTH + GetWindowHeight(hStatusBar)); + INT NewPos = HIWORD(lParam) - (RichPos + SPLIT_WIDTH + GetWindowHeight(hStatusBar)); INT VSplitterPos; /* Size status bar */ @@ -387,7 +459,7 @@ MainWndOnSize(HWND hwnd, WPARAM wParam, LPARAM lParam) while (NewPos < SPLIT_WIDTH + GetWindowHeight(hToolBar)) { RichPos--; - NewPos = GetClientWindowHeight(hMainWnd) - (RichPos + + NewPos = HIWORD(lParam) - (RichPos + SPLIT_WIDTH + GetWindowHeight(hStatusBar)); } SetHSplitterPos(NewPos); @@ -408,7 +480,7 @@ MainWndOnSize(HWND hwnd, WPARAM wParam, LPARAM lParam) 0, VSplitterPos + SPLIT_WIDTH, GetHSplitterPos() + SPLIT_WIDTH, - GetClientWindowWidth(hMainWnd) - (VSplitterPos + SPLIT_WIDTH), + LOWORD(lParam) - (VSplitterPos + SPLIT_WIDTH), RichPos, SWP_NOZORDER|SWP_NOACTIVATE); @@ -418,7 +490,7 @@ MainWndOnSize(HWND hwnd, WPARAM wParam, LPARAM lParam) 0, VSplitterPos + SPLIT_WIDTH, GetHSplitterPos(), - GetClientWindowWidth(hMainWnd) - (VSplitterPos + SPLIT_WIDTH), + LOWORD(lParam) - (VSplitterPos + SPLIT_WIDTH), SPLIT_WIDTH, SWP_NOZORDER|SWP_NOACTIVATE); @@ -433,6 +505,9 @@ MainWindowProc(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam) case WM_CREATE: if (!InitControls(hwnd)) PostMessage(hwnd, WM_CLOSE, 0, 0); + + if (SettingsInfo.bUpdateAtStart) + UpdateAppsDB(); break; case WM_COMMAND: @@ -624,12 +699,18 @@ MainWindowProc(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam) case WM_DESTROY: { + ShowWindow(hwnd, SW_HIDE); + SaveSettings(hwnd); + + FreeLogs(); + if (IS_AVAILABLE_ENUM(SelectedEnumType)) FreeAvailableAppList(); if (IS_INSTALLED_ENUM(SelectedEnumType)) FreeInstalledAppList(); if (hImageListView) ImageList_Destroy(hImageListView); if (hImageTreeView) ImageList_Destroy(hImageTreeView); + PostQuitMessage(0); return 0; } @@ -645,9 +726,19 @@ wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nSh WNDCLASSEXW WndClass = {0}; WCHAR szWindowClass[] = L"ROSAPPMGR"; WCHAR szWindowName[MAX_STR_LEN]; + WCHAR szErrorText[MAX_STR_LEN]; HANDLE hMutex = NULL; MSG Msg; + hInst = hInstance; + + if (!IsUserAnAdmin()) + { + LoadStringW(hInst, IDS_USER_NOT_ADMIN, szErrorText, sizeof(szErrorText) / sizeof(WCHAR)); + MessageBox(0, szErrorText, NULL, MB_OK | MB_ICONWARNING); + return 1; + } + hMutex = CreateMutexW(NULL, FALSE, szWindowClass); if ((!hMutex) || (GetLastError() == ERROR_ALREADY_EXISTS)) { @@ -660,7 +751,12 @@ wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nSh return 1; } - hInst = hInstance; + if (!LoadSettings()) + { + FillDafaultSettings(&SettingsInfo); + } + + InitLogs(); InitCommonControls();