[0.4.15][RAPPS] Backport current RAPPS into 0.4.15

This is a squashed backport of RAPPS from current master into the 0.4.15 release tree. All of these changes were deemed stable and complete.

This backport includes the following commits:
5bc6d59142 [RAPPS] Refresh item info after installer completes (#7697)
d5ce3d28ab [RAPPS] Don't display Freeware license string if the type is also Freeware (#7689)
b35becef2e [RAPPS] Set working directory for zip generated shortcuts (#7674)
a23db39c8a [RAPPS] Allow database to override download filename (#7668)
c8b2c4c94d [RAPPS] Check Let's Encrypt issuer prefix (#7650)
72951421e6 [RAPPS] Reuse active pending downloads window (#7648)
91b8923601 [RAPPS] Allow .zip generated installers to skip writing the DisplayIcon value (#7609)
2834e5b3c8 [RAPPS] Initialize SHBrowseForFolder to current download folder (#7505)
9164e9f85f [RAPPS] Update Slovak (sk-SK) translation (#7450)
8734889272 [RAPPS] Update Turkish (tr-TR) translation (#7372)
16f1abe1c8 [RAPPS] Improve Romanian (ro-RO) translation (#7360)
2f83e6a65d [RAPPS] Use different mutex and title for AppWiz mode (#7350)
301675c112 [RAPPS] Respect partial settings configuration (#7247)
053939e27c [RAPPS] Hide the main window during active download/install if the user closes it (#7014)
3ff8adc553 [RAPPS] Protect database update with a mutex (#7006)
4e59858941 [RAPPS] Change the "Welcome" text with a suitable explanatory one in APPWIZ-mode (#6655)
2af6fd4def [PSDK] Add GetMenuPosFromID() declaration in shlwapi.h
This commit is contained in:
Carl J. Bialorucki 2025-02-17 20:01:35 -07:00
parent 7791a36fc2
commit b5c1fdc1cc
45 changed files with 1605 additions and 1402 deletions

View file

@ -18,7 +18,7 @@ Also, each [Section] is language-independent and individual, you can override th
program or any other field by adding a language-specific [Section.], followed by the language code. program or any other field by adding a language-specific [Section.], followed by the language code.
NOTE: You can find a complete listing of LCIDs and language names here, includes neutral codes: NOTE: You can find a complete listing of LCIDs and language names here, includes neutral codes:
<https://msdn.microsoft.com/en-us/library/windows/desktop/dd318693%28v=vs.85%29.aspx> <https://learn.microsoft.com/en-us/windows/win32/intl/language-identifier-constants-and-strings>
Now RAPPS also accepts neutral language codes, meaning that you can do things like this: Now RAPPS also accepts neutral language codes, meaning that you can do things like this:

View file

@ -158,7 +158,7 @@ CAppDB::EnumInstalledRootKey(UINT Index, REGSAM &RegSam)
{ {
// Loop for through all combinations. // Loop for through all combinations.
// Note that HKEY_CURRENT_USER\Software does not have a redirect // Note that HKEY_CURRENT_USER\Software does not have a redirect
// https://docs.microsoft.com/en-us/windows/win32/winprog64/shared-registry-keys#redirected-shared-and-reflected-keys-under-wow64 // https://learn.microsoft.com/en-us/windows/win32/winprog64/shared-registry-keys#redirected-shared-and-reflected-keys-under-wow64
if (Index < (IsSystem64Bit() ? 3 : 2)) if (Index < (IsSystem64Bit() ? 3 : 2))
return GetRootKeyInfo(Index, RegSam); return GetRootKeyInfo(Index, RegSam);
else else

View file

@ -10,6 +10,14 @@
#include "rapps.h" #include "rapps.h"
#include "appview.h" #include "appview.h"
static inline AppsCategories
ClampAvailableCategory(AppsCategories Category)
{
if (Category <= ENUM_LASTCATEGORY)
return Category;
return ENUM_CAT_OTHER; // Treat future categories we don't know as Other
}
CAppInfo::CAppInfo(const CStringW &Identifier, AppsCategories Category) CAppInfo::CAppInfo(const CStringW &Identifier, AppsCategories Category)
: szIdentifier(Identifier), iCategory(Category) : szIdentifier(Identifier), iCategory(Category)
{ {
@ -24,7 +32,7 @@ CAvailableApplicationInfo::CAvailableApplicationInfo(
const CStringW &PkgName, const CStringW &PkgName,
AppsCategories Category, AppsCategories Category,
const CPathW &BasePath) const CPathW &BasePath)
: CAppInfo(PkgName, Category), m_Parser(Parser), m_ScrnshotRetrieved(false), m_LanguagesLoaded(false) : CAppInfo(PkgName, ClampAvailableCategory(Category)), m_Parser(Parser), m_ScrnshotRetrieved(false), m_LanguagesLoaded(false)
{ {
m_Parser->GetString(L"Name", szDisplayName); m_Parser->GetString(L"Name", szDisplayName);
m_Parser->GetString(L"Version", szDisplayVersion); m_Parser->GetString(L"Version", szDisplayVersion);
@ -163,16 +171,16 @@ CAvailableApplicationInfo::LicenseString()
LicenseType licenseType; LicenseType licenseType;
if (IsKnownLicenseType(IntBuffer)) if (IsKnownLicenseType(IntBuffer))
{
licenseType = static_cast<LicenseType>(IntBuffer); licenseType = static_cast<LicenseType>(IntBuffer);
}
else else
{
licenseType = LICENSE_NONE; licenseType = LICENSE_NONE;
if (licenseType == LICENSE_NONE || licenseType == LICENSE_FREEWARE)
{
if (szLicenseString.CompareNoCase(L"Freeware") == 0) if (szLicenseString.CompareNoCase(L"Freeware") == 0)
{ {
licenseType = LICENSE_FREEWARE; licenseType = LICENSE_FREEWARE;
szLicenseString = L""; szLicenseString = L""; // Don't display as "Freeware (Freeware)"
} }
} }
@ -588,7 +596,7 @@ CInstalledApplicationInfo::GetInstallerType() const
BOOL BOOL
CInstalledApplicationInfo::UninstallApplication(UninstallCommandFlags Flags) CInstalledApplicationInfo::UninstallApplication(UninstallCommandFlags Flags)
{ {
if (GetInstallerType() == INSTALLER_GENERATE) if (GetInstallerType() == INSTALLER_GENERATE && (Flags & UCF_SAMEPROCESS))
{ {
return UninstallGenerated(*this, Flags); return UninstallGenerated(*this, Flags);
} }

View file

@ -16,6 +16,50 @@ using namespace Gdiplus;
HICON g_hDefaultPackageIcon = NULL; HICON g_hDefaultPackageIcon = NULL;
static int g_DefaultPackageIconILIdx = I_IMAGENONE; static int g_DefaultPackageIconILIdx = I_IMAGENONE;
// **** Menu helpers ****
BOOL
DeleteMenuEx(
_In_ HMENU hMenu,
_In_ UINT uPosition,
_In_ UINT uFlags)
{
INT pos;
MENUITEMINFOW mii = { sizeof(mii), MIIM_FTYPE, 0 };
bool bIsValidItem1, bIsValidItem2;
bool bIsSep1, bIsSep2;
if (uFlags & MF_BYPOSITION)
pos = (INT)uPosition;
else
pos = ::GetMenuPosFromID(hMenu, uPosition);
if (pos < 0)
return FALSE;
bIsValidItem1 = ((pos > 0) && ::GetMenuItemInfoW(hMenu, pos - 1, TRUE, &mii));
bIsSep1 = bIsValidItem1 && !!(mii.fType & MFT_SEPARATOR);
bIsValidItem2 = ::GetMenuItemInfoW(hMenu, pos + 1, TRUE, &mii);
bIsSep2 = bIsValidItem2 && !!(mii.fType & MFT_SEPARATOR);
if (bIsSep1 && !bIsSep2 && !bIsValidItem2)
pos = pos - 1; // Delete separator only if pos+1 has no item
else if (!bIsSep1 && bIsSep2 && !bIsValidItem1)
pos = pos + 1; // Delete separator only if pos-1 has no item
else if (bIsSep1 && bIsSep2)
pos = pos + 1;
else
pos = -1;
// Delete one of the separators if necessary
if (pos != -1)
::DeleteMenu(hMenu, pos, MF_BYPOSITION);
// Finally, delete the menu item itself.
return ::DeleteMenu(hMenu, uPosition, uFlags);
}
// **** Menu helpers ****
// **** CMainToolbar **** // **** CMainToolbar ****
VOID VOID
@ -149,26 +193,28 @@ CMainToolbar::Create(HWND hwndParent)
AddButtons(_countof(Buttons), Buttons); AddButtons(_countof(Buttons), Buttons);
/* Remember ideal width to use as a max width of buttons */ /* Remember the ideal width to use as a max width of buttons */
SIZE size; UpdateMaxButtonsWidth();
GetIdealSize(FALSE, &size);
m_dButtonsWidthMax = size.cx;
return m_hWnd; return m_hWnd;
} }
VOID void
CMainToolbar::HideButtonCaption() CMainToolbar::ShowButtonCaption(bool bShow)
{ {
DWORD dCurrentExStyle = (DWORD)SendMessageW(TB_GETEXTENDEDSTYLE, 0, 0); DWORD dCurrentExStyle = (DWORD)SendMessageW(TB_GETEXTENDEDSTYLE, 0, 0);
if (bShow)
SendMessageW(TB_SETEXTENDEDSTYLE, 0, dCurrentExStyle & ~TBSTYLE_EX_MIXEDBUTTONS);
else
SendMessageW(TB_SETEXTENDEDSTYLE, 0, dCurrentExStyle | TBSTYLE_EX_MIXEDBUTTONS); SendMessageW(TB_SETEXTENDEDSTYLE, 0, dCurrentExStyle | TBSTYLE_EX_MIXEDBUTTONS);
} }
VOID void
CMainToolbar::ShowButtonCaption() CMainToolbar::UpdateMaxButtonsWidth()
{ {
DWORD dCurrentExStyle = (DWORD)SendMessageW(TB_GETEXTENDEDSTYLE, 0, 0); SIZE size;
SendMessageW(TB_SETEXTENDEDSTYLE, 0, dCurrentExStyle & ~TBSTYLE_EX_MIXEDBUTTONS); GetIdealSize(FALSE, &size);
m_dButtonsWidthMax = size.cx;
} }
DWORD DWORD
@ -267,21 +313,6 @@ CAppRichEdit::InsertTextWithString(UINT StringID, const CStringW &Text, DWORD Te
LoadAndInsertText(StringID, Text, TextFlags); LoadAndInsertText(StringID, Text, TextFlags);
} }
} }
VOID
CAppRichEdit::SetWelcomeText()
{
CStringW szText;
szText.LoadStringW(IDS_WELCOME_TITLE);
SetText(szText, CFE_BOLD);
szText.LoadStringW(IDS_WELCOME_TEXT);
InsertText(szText, 0);
szText.LoadStringW(IDS_WELCOME_URL);
InsertText(szText, CFM_LINK);
}
// **** CAppRichEdit **** // **** CAppRichEdit ****
int int
@ -924,10 +955,12 @@ CAppInfoDisplay::Create(HWND hwndParent)
} }
VOID VOID
CAppInfoDisplay::ShowAppInfo(CAppInfo *Info) CAppInfoDisplay::ShowAppInfo(CAppInfo &Info, bool OnlyUpdateText)
{
if (!OnlyUpdateText)
{ {
CStringW ScrnshotLocation; CStringW ScrnshotLocation;
if (Info->RetrieveScreenshot(ScrnshotLocation)) if (Info.RetrieveScreenshot(ScrnshotLocation))
{ {
ScrnshotPrev->DisplayImage(ScrnshotLocation); ScrnshotPrev->DisplayImage(ScrnshotLocation);
} }
@ -935,16 +968,46 @@ CAppInfoDisplay::ShowAppInfo(CAppInfo *Info)
{ {
ScrnshotPrev->DisplayEmpty(); ScrnshotPrev->DisplayEmpty();
} }
}
ResizeChildren(); ResizeChildren();
Info->ShowAppInfo(RichEdit); Info.ShowAppInfo(RichEdit);
} }
VOID void
CAppInfoDisplay::SetWelcomeText() CAppInfoDisplay::SetWelcomeText(bool bAppwiz)
{ {
CStringW szText;
ScrnshotPrev->DisplayEmpty(); ScrnshotPrev->DisplayEmpty();
ResizeChildren(); ResizeChildren();
RichEdit->SetWelcomeText();
// Display the standard banner in normal mode, or
// the specific "Add/Remove Programs" in APPWIZ-mode.
if (!bAppwiz)
{
szText.LoadStringW(IDS_WELCOME_TITLE);
RichEdit->SetText(szText, CFE_BOLD);
RichEdit->InsertText(L"\n\n", 0);
szText.LoadStringW(IDS_WELCOME_TEXT);
RichEdit->InsertText(szText, 0);
szText.LoadStringW(IDS_WELCOME_URL);
RichEdit->InsertText(szText, CFM_LINK);
}
else
{
szText.LoadStringW(IDS_APPWIZ_TITLE);
RichEdit->SetText(szText, CFE_BOLD);
RichEdit->InsertText(L"\n\n", 0);
szText.LoadStringW(IDS_APPWIZ_TEXT1);
RichEdit->InsertText(szText, 0);
RichEdit->InsertText(L"\n", 0);
szText.LoadStringW(IDS_APPWIZ_TEXT2);
RichEdit->InsertText(szText, 0);
}
} }
VOID VOID
@ -1113,19 +1176,11 @@ CAppsListView::SetWatermark(const CStringW &Text)
m_Watermark = Text; m_Watermark = Text;
} }
VOID void
CAppsListView::SetCheckboxesVisible(BOOL bIsVisible) CAppsListView::ShowCheckboxes(bool bShow)
{ {
if (bIsVisible) SetExtendedListViewStyle((bShow ? LVS_EX_CHECKBOXES : 0) | LVS_EX_FULLROWSELECT);
{ bHasCheckboxes = bShow;
SetExtendedListViewStyle(LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT);
}
else
{
SetExtendedListViewStyle(LVS_EX_FULLROWSELECT);
}
bHasCheckboxes = bIsVisible;
} }
VOID VOID
@ -1258,7 +1313,7 @@ CAppsListView::Create(HWND hwndParent)
if (hwnd) if (hwnd)
{ {
SetCheckboxesVisible(FALSE); ShowCheckboxes(false);
} }
#pragma push_macro("SubclassWindow") #pragma push_macro("SubclassWindow")
@ -1359,16 +1414,18 @@ CAppsListView::SetDisplayAppType(APPLICATION_VIEW_TYPE AppType)
/* Add columns to ListView */ /* Add columns to ListView */
szText.LoadStringW(IDS_APP_NAME); szText.LoadStringW(IDS_APP_NAME);
AddColumn(ColumnCount++, szText, 250, LVCFMT_LEFT); AddColumn(ColumnCount++, szText, 368, LVCFMT_LEFT);
szText.LoadStringW(IDS_APP_INST_VERSION); szText.LoadStringW(IDS_APP_INST_VERSION);
AddColumn(ColumnCount++, szText, 90, LVCFMT_RIGHT); AddColumn(ColumnCount++, szText, 90, LVCFMT_RIGHT);
#if 0 // This column is not currently useful for installed apps.
szText.LoadStringW(IDS_APP_DESCRIPTION); szText.LoadStringW(IDS_APP_DESCRIPTION);
AddColumn(ColumnCount++, szText, 300, LVCFMT_LEFT); AddColumn(ColumnCount++, szText, 300, LVCFMT_LEFT);
#endif
// disable checkboxes // Disable checkboxes
SetCheckboxesVisible(FALSE); ShowCheckboxes(false);
break; break;
case AppViewTypeAvailableApps: case AppViewTypeAvailableApps:
@ -1383,8 +1440,8 @@ CAppsListView::SetDisplayAppType(APPLICATION_VIEW_TYPE AppType)
szText.LoadStringW(IDS_APP_DESCRIPTION); szText.LoadStringW(IDS_APP_DESCRIPTION);
AddColumn(ColumnCount++, szText, 300, LVCFMT_LEFT); AddColumn(ColumnCount++, szText, 300, LVCFMT_LEFT);
// enable checkboxes // Enable checkboxes
SetCheckboxesVisible(TRUE); ShowCheckboxes(true);
break; break;
default: default:
@ -1490,6 +1547,41 @@ CApplicationView::ProcessWindowMessage(
bSuccess &= CreateListView(); bSuccess &= CreateListView();
bSuccess &= CreateAppInfoDisplay(); bSuccess &= CreateAppInfoDisplay();
/* APPWIZ-mode: Remove the unneeded menu items and toolbar buttons */
if (m_MainWindow->m_bAppwizMode)
{
HMENU hMenu;
/* Delete the "Settings" item in the "File" sub-menu */
hMenu = ::GetSubMenu(m_MainWindow->GetMenu(), 0);
DeleteMenuEx(hMenu, ID_SETTINGS, MF_BYCOMMAND);
/* Remove the menu items: ID_INSTALL, ID_RESETDB */
hMenu = GetMenu();
DeleteMenuEx(hMenu, ID_INSTALL, MF_BYCOMMAND);
DeleteMenuEx(hMenu, ID_RESETDB, MF_BYCOMMAND);
/* Remove the toolbar buttons:
* ID_INSTALL, ID_CHECK_ALL, ID_RESETDB
* We only keep:
* ID_UNINSTALL, ID_MODIFY, ID_REFRESH */
TBBUTTONINFO info = { sizeof(info), 0 };
int index;
index = m_Toolbar->GetButtonInfo(ID_INSTALL, &info);
if (index >= 0) m_Toolbar->DeleteButton(index);
index = m_Toolbar->GetButtonInfo(ID_CHECK_ALL, &info);
if (index >= 0) m_Toolbar->DeleteButton(index);
index = m_Toolbar->GetButtonInfo(ID_RESETDB, &info);
if (index >= 0) m_Toolbar->DeleteButton(index);
/* Update the ideal width to use as a max width of buttons */
m_Toolbar->UpdateMaxButtonsWidth();
}
/* Resize the toolbar */
m_Toolbar->AutoSize(); m_Toolbar->AutoSize();
RECT rTop; RECT rTop;
@ -1716,6 +1808,22 @@ CApplicationView::SetRedraw(BOOL bRedraw)
m_ListView->SetRedraw(bRedraw); m_ListView->SetRedraw(bRedraw);
} }
void
CApplicationView::RefreshAvailableItem(PCWSTR PackageName)
{
if (ApplicationViewType != AppViewTypeAvailableApps || !PackageName)
return;
CAppInfo *pApp;
for (UINT i = 0; (pApp = (CAppInfo*)m_ListView->GetItemData(i)) != NULL; ++i)
{
if (pApp->szIdentifier.CompareNoCase(PackageName) == 0)
{
RefreshDetailsPane(*pApp, true);
break;
}
}
}
void void
CApplicationView::SetFocusOnSearchBar() CApplicationView::SetFocusOnSearchBar()
{ {
@ -1728,7 +1836,7 @@ CApplicationView::OnSize(HWND hwnd, WPARAM wParam, LPARAM lParam)
if (wParam == SIZE_MINIMIZED) if (wParam == SIZE_MINIMIZED)
return; return;
/* Size tool bar */ /* Resize the toolbar */
m_Toolbar->AutoSize(); m_Toolbar->AutoSize();
/* Automatically hide captions */ /* Automatically hide captions */
@ -1737,11 +1845,11 @@ CApplicationView::OnSize(HWND hwnd, WPARAM wParam, LPARAM lParam)
if (dSearchbarMargin > dToolbarTreshold) if (dSearchbarMargin > dToolbarTreshold)
{ {
m_Toolbar->ShowButtonCaption(); m_Toolbar->ShowButtonCaption(true);
} }
else if (dSearchbarMargin < dToolbarTreshold) else if (dSearchbarMargin < dToolbarTreshold)
{ {
m_Toolbar->HideButtonCaption(); m_Toolbar->ShowButtonCaption(false);
} }
RECT r = {0, 0, LOWORD(lParam), HIWORD(lParam)}; RECT r = {0, 0, LOWORD(lParam), HIWORD(lParam)};
@ -1917,9 +2025,10 @@ CApplicationView::Create(HWND hwndParent)
{ {
RECT r = {0, 0, 0, 0}; RECT r = {0, 0, 0, 0};
HMENU menu = GetSubMenu(LoadMenuW(hInst, MAKEINTRESOURCEW(IDR_APPLICATIONMENU)), 0); // Pick the "Programs" sub-menu for building the context menu.
HMENU hMenu = ::GetSubMenu(m_MainWindow->GetMenu(), 1);
return CWindowImpl::Create(hwndParent, r, L"", WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, 0, menu); return CWindowImpl::Create(hwndParent, r, L"", WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, 0, hMenu);
} }
BOOL BOOL
@ -1930,33 +2039,42 @@ CApplicationView::SetDisplayAppType(APPLICATION_VIEW_TYPE AppType)
return FALSE; return FALSE;
} }
ApplicationViewType = AppType; ApplicationViewType = AppType;
m_AppsInfo->SetWelcomeText(); m_AppsInfo->SetWelcomeText(m_MainWindow->m_bAppwizMode);
HMENU hMenu = ::GetMenu(m_hWnd); HMENU hMenu = ::GetMenu(m_hWnd);
switch (AppType) switch (AppType)
{ {
case AppViewTypeInstalledApps: case AppViewTypeInstalledApps:
EnableMenuItem(hMenu, ID_REGREMOVE, MF_ENABLED); {
EnableMenuItem(hMenu, ID_INSTALL, MF_GRAYED); EnableMenuItem(hMenu, ID_INSTALL, MF_GRAYED);
EnableMenuItem(hMenu, ID_UNINSTALL, MF_ENABLED); EnableMenuItem(hMenu, ID_UNINSTALL, MF_ENABLED);
EnableMenuItem(hMenu, ID_MODIFY, MF_ENABLED); EnableMenuItem(hMenu, ID_MODIFY, MF_ENABLED);
EnableMenuItem(hMenu, ID_REGREMOVE, MF_ENABLED);
m_Toolbar->SendMessageW(TB_ENABLEBUTTON, ID_INSTALL, FALSE); m_Toolbar->SendMessageW(TB_ENABLEBUTTON, ID_INSTALL, FALSE);
m_Toolbar->SendMessageW(TB_ENABLEBUTTON, ID_UNINSTALL, TRUE); m_Toolbar->SendMessageW(TB_ENABLEBUTTON, ID_UNINSTALL, TRUE);
m_Toolbar->SendMessageW(TB_ENABLEBUTTON, ID_MODIFY, TRUE); m_Toolbar->SendMessageW(TB_ENABLEBUTTON, ID_MODIFY, TRUE);
m_Toolbar->SendMessageW(TB_ENABLEBUTTON, ID_CHECK_ALL, FALSE);
break; break;
}
case AppViewTypeAvailableApps: case AppViewTypeAvailableApps:
EnableMenuItem(hMenu, ID_REGREMOVE, MF_GRAYED); {
// We shouldn't get there in APPWIZ-mode.
ATLASSERT(!m_MainWindow->m_bAppwizMode);
EnableMenuItem(hMenu, ID_INSTALL, MF_ENABLED); EnableMenuItem(hMenu, ID_INSTALL, MF_ENABLED);
EnableMenuItem(hMenu, ID_UNINSTALL, MF_GRAYED); EnableMenuItem(hMenu, ID_UNINSTALL, MF_GRAYED);
EnableMenuItem(hMenu, ID_MODIFY, MF_GRAYED); EnableMenuItem(hMenu, ID_MODIFY, MF_GRAYED);
EnableMenuItem(hMenu, ID_REGREMOVE, MF_GRAYED);
m_Toolbar->SendMessageW(TB_ENABLEBUTTON, ID_INSTALL, TRUE); m_Toolbar->SendMessageW(TB_ENABLEBUTTON, ID_INSTALL, TRUE);
m_Toolbar->SendMessageW(TB_ENABLEBUTTON, ID_UNINSTALL, FALSE); m_Toolbar->SendMessageW(TB_ENABLEBUTTON, ID_UNINSTALL, FALSE);
m_Toolbar->SendMessageW(TB_ENABLEBUTTON, ID_MODIFY, FALSE); m_Toolbar->SendMessageW(TB_ENABLEBUTTON, ID_MODIFY, FALSE);
m_Toolbar->SendMessageW(TB_ENABLEBUTTON, ID_CHECK_ALL, TRUE);
break; break;
} }
}
return TRUE; return TRUE;
} }
@ -2035,6 +2153,12 @@ CApplicationView::RestoreListSelection(const RESTORELISTSELECTION &Restore)
} }
} }
VOID
CApplicationView::RefreshDetailsPane(CAppInfo &Info, bool OnlyUpdateText)
{
m_AppsInfo->ShowAppInfo(Info, OnlyUpdateText);
}
// this function is called when a item of listview get focus. // this function is called when a item of listview get focus.
// CallbackParam is the param passed to listview when adding the item (the one getting focus now). // CallbackParam is the param passed to listview when adding the item (the one getting focus now).
VOID VOID
@ -2043,7 +2167,7 @@ CApplicationView::ItemGetFocus(LPVOID CallbackParam)
if (CallbackParam) if (CallbackParam)
{ {
CAppInfo *Info = static_cast<CAppInfo *>(CallbackParam); CAppInfo *Info = static_cast<CAppInfo *>(CallbackParam);
m_AppsInfo->ShowAppInfo(Info); RefreshDetailsPane(*Info);
if (ApplicationViewType == AppViewTypeInstalledApps) if (ApplicationViewType == AppViewTypeInstalledApps)
{ {

View file

@ -28,6 +28,7 @@ extern "C" {
#define REGPATH_UNINSTALL L"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall" #define REGPATH_UNINSTALL L"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall"
#define DB_NONE L"!" // Skip/Ignore
#define DB_GENINST_FILES L"Files" #define DB_GENINST_FILES L"Files"
#define DB_GENINST_DIR L"Dir" #define DB_GENINST_DIR L"Dir"
#define DB_GENINST_ICON L"Icon" #define DB_GENINST_ICON L"Icon"
@ -230,6 +231,8 @@ GetCustomIconPath(InstallInfo &Info, CStringW &Path)
{ {
if (*GetGenerateString(DB_GENINST_ICON, Path)) if (*GetGenerateString(DB_GENINST_ICON, Path))
{ {
if (Path.Compare(DB_NONE) == 0)
return HRESULT_FROM_WIN32(ERROR_CAN_NOT_COMPLETE);
Path = BuildPath(Info.InstallDir, Path); Path = BuildPath(Info.InstallDir, Path);
int idx = PathParseIconLocation(Path.GetBuffer()); int idx = PathParseIconLocation(Path.GetBuffer());
Path.ReleaseBuffer(); Path.ReleaseBuffer();
@ -306,6 +309,9 @@ CreateShortcut(const CStringW &Target)
{ {
if (SUCCEEDED(hr = link->SetPath(Target))) if (SUCCEEDED(hr = link->SetPath(Target)))
{ {
SplitFileAndDirectory(Target, &tmp);
link->SetWorkingDirectory(tmp);
if (SUCCEEDED(GetCustomIconPath(Info, tmp))) if (SUCCEEDED(GetCustomIconPath(Info, tmp)))
{ {
LPWSTR p = tmp.GetBuffer(); LPWSTR p = tmp.GetBuffer();
@ -432,7 +438,7 @@ ExtractAndInstallThread(LPVOID Parameter)
{ {
const BOOL PerUserModeDefault = TRUE; const BOOL PerUserModeDefault = TRUE;
InstallInfo &Info = *static_cast<InstallInfo *>(g_pInfo); InstallInfo &Info = *static_cast<InstallInfo *>(g_pInfo);
LPCWSTR AppName = Info.AppName, Archive = Info.ArchivePath, None = L"!"; LPCWSTR AppName = Info.AppName, Archive = Info.ArchivePath, None = DB_NONE;
CStringW installdir, tempdir, files, shortcut, tmp; CStringW installdir, tempdir, files, shortcut, tmp;
HRESULT hr; HRESULT hr;
CRegKey arpkey; CRegKey arpkey;
@ -534,9 +540,9 @@ ExtractAndInstallThread(LPVOID Parameter)
(tmp = tmp.Mid(0, cch)).AppendFormat(unparamsfmt, L" /S", modechar, bitness, arpkeyname); (tmp = tmp.Mid(0, cch)).AppendFormat(unparamsfmt, L" /S", modechar, bitness, arpkeyname);
WriteArpEntry(L"QuietUninstallString", tmp); WriteArpEntry(L"QuietUninstallString", tmp);
if (GetCustomIconPath(Info, tmp) != S_OK) hr = GetCustomIconPath(Info, tmp);
tmp = Info.MainApp; if (hr != HRESULT_FROM_WIN32(ERROR_CAN_NOT_COMPLETE))
WriteArpEntry(L"DisplayIcon", tmp); WriteArpEntry(L"DisplayIcon", hr == S_OK ? tmp : Info.MainApp);
if (*GetCommonString(DB_VERSION, tmp)) if (*GetCommonString(DB_VERSION, tmp))
WriteArpEntry(L"DisplayVersion", tmp); WriteArpEntry(L"DisplayVersion", tmp);

View file

@ -81,8 +81,10 @@ CSideTreeView::~CSideTreeView()
// **** CSideTreeView **** // **** CSideTreeView ****
// **** CMainWindow **** // **** CMainWindow ****
HWND CMainWindow::m_hLastFocus = NULL;
bool CMainWindow::m_PendingInstalledViewRefresh = false;
CMainWindow::CMainWindow(CAppDB *db, BOOL bAppwiz) : m_ClientPanel(NULL), m_Db(db), bAppwizMode(bAppwiz), SelectedEnumType(ENUM_ALL_INSTALLED) CMainWindow::CMainWindow(CAppDB *db, BOOL bAppwiz) : m_ClientPanel(NULL), m_Db(db), m_bAppwizMode(bAppwiz), SelectedEnumType(ENUM_ALL_INSTALLED)
{ {
} }
@ -100,6 +102,10 @@ CMainWindow::InitCategoriesList()
m_TreeView->AddCategory(hRootItemInstalled, IDS_APPLICATIONS, IDI_APPS); m_TreeView->AddCategory(hRootItemInstalled, IDS_APPLICATIONS, IDI_APPS);
m_TreeView->AddCategory(hRootItemInstalled, IDS_UPDATES, IDI_APPUPD); m_TreeView->AddCategory(hRootItemInstalled, IDS_UPDATES, IDI_APPUPD);
// Do not show any other categories in APPWIZ-mode.
if (m_bAppwizMode)
goto Finish;
m_TreeView->AddCategory(TVI_ROOT, IDS_SELECTEDFORINST, IDI_SELECTEDFORINST); m_TreeView->AddCategory(TVI_ROOT, IDS_SELECTEDFORINST, IDI_SELECTEDFORINST);
hRootItemAvailable = m_TreeView->AddCategory(TVI_ROOT, IDS_AVAILABLEFORINST, IDI_CATEGORY); hRootItemAvailable = m_TreeView->AddCategory(TVI_ROOT, IDS_AVAILABLEFORINST, IDI_CATEGORY);
@ -120,10 +126,12 @@ CMainWindow::InitCategoriesList()
m_TreeView->AddCategory(hRootItemAvailable, IDS_CAT_THEMES, IDI_CAT_THEMES); m_TreeView->AddCategory(hRootItemAvailable, IDS_CAT_THEMES, IDI_CAT_THEMES);
m_TreeView->AddCategory(hRootItemAvailable, IDS_CAT_OTHER, IDI_CAT_OTHER); m_TreeView->AddCategory(hRootItemAvailable, IDS_CAT_OTHER, IDI_CAT_OTHER);
Finish:
m_TreeView->SetImageList(); m_TreeView->SetImageList();
m_TreeView->Expand(hRootItemInstalled, TVE_EXPAND); m_TreeView->Expand(hRootItemInstalled, TVE_EXPAND);
if (!m_bAppwizMode)
m_TreeView->Expand(hRootItemAvailable, TVE_EXPAND); m_TreeView->Expand(hRootItemAvailable, TVE_EXPAND);
m_TreeView->SelectItem(bAppwizMode ? hRootItemInstalled : hRootItemAvailable); m_TreeView->SelectItem(m_bAppwizMode ? hRootItemInstalled : hRootItemAvailable);
} }
BOOL BOOL
@ -298,6 +306,7 @@ CMainWindow::CheckAvailable()
{ {
if (m_Db->GetAvailableCount() == 0) if (m_Db->GetAvailableCount() == 0)
{ {
CUpdateDatabaseMutex lock;
m_Db->RemoveCached(); m_Db->RemoveCached();
m_Db->UpdateAvailable(); m_Db->UpdateAvailable();
} }
@ -312,13 +321,13 @@ CMainWindow::ProcessWindowMessage(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lPa
case WM_CREATE: case WM_CREATE:
if (!InitControls()) if (!InitControls())
::PostMessageW(hwnd, WM_CLOSE, 0, 0); ::PostMessageW(hwnd, WM_CLOSE, 0, 0);
::PostMessageW(hwnd, DM_REPOSITION, 0, 0);
break; break;
case WM_DESTROY: case WM_DESTROY:
{ {
ShowWindow(SW_HIDE); hMainWnd = NULL;
SaveSettings(hwnd, &SettingsInfo); SaveSettings(hwnd, &SettingsInfo);
FreeLogs(); FreeLogs();
delete m_ClientPanel; delete m_ClientPanel;
@ -327,6 +336,41 @@ CMainWindow::ProcessWindowMessage(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lPa
return 0; return 0;
} }
case WM_CLOSE:
ShowWindow(SW_HIDE);
return g_Busy;
case WM_NOTIFY_OPERATIONCOMPLETED:
if (!g_Busy && !IsWindowVisible())
SendMessage(WM_CLOSE, 0, 0);
break;
case WM_NOTIFY_INSTALLERFINISHED:
m_PendingInstalledViewRefresh = true; // Something just installed, our uninstall list is probably outdated
m_ApplicationView->RefreshAvailableItem((PCWSTR)lParam);
break;
case DM_REPOSITION:
EmulateDialogReposition(hwnd); // We are not a real dialog, we need help from a real one
break;
case WM_ACTIVATE:
if (LOWORD(wParam) == WA_INACTIVE)
m_hLastFocus = ::GetFocus();
break;
case WM_SETFOCUS:
if (m_hLastFocus)
::SetFocus(m_hLastFocus);
break;
case WM_NEXTDLGCTL:
if (!LOWORD(lParam))
HandleTabOrder(wParam ? -1 : 1);
else if (wParam)
::SetFocus((HWND)wParam);
break;
case WM_COMMAND: case WM_COMMAND:
OnCommand(wParam, lParam); OnCommand(wParam, lParam);
break; break;
@ -337,6 +381,22 @@ CMainWindow::ProcessWindowMessage(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lPa
switch (data->code) switch (data->code)
{ {
case TVN_ITEMEXPANDING:
{
if (data->hwndFrom == m_TreeView->m_hWnd)
{
// APPWIZ-mode: forbid item collapse.
// FIXME: Prevent collapse (COMCTL32 is buggy)
// https://bugs.winehq.org/show_bug.cgi?id=53727
if (m_bAppwizMode && (((LPNMTREEVIEW)lParam)->action & TVE_TOGGLE) == TVE_COLLAPSE)
{
theResult = TRUE;
return TRUE; // Handled
}
}
break;
}
case TVN_SELCHANGED: case TVN_SELCHANGED:
{ {
if (data->hwndFrom == m_TreeView->m_hWnd) if (data->hwndFrom == m_TreeView->m_hWnd)
@ -556,9 +616,12 @@ CMainWindow::OnCommand(WPARAM wParam, LPARAM lParam)
break; break;
case ID_RESETDB: case ID_RESETDB:
{
CUpdateDatabaseMutex lock;
m_Db->RemoveCached(); m_Db->RemoveCached();
UpdateApplicationsList(SelectedEnumType, bReload); UpdateApplicationsList(SelectedEnumType, bReload);
break; break;
}
case ID_HELP: case ID_HELP:
MessageBoxW(L"Help not implemented yet", NULL, MB_OK); MessageBoxW(L"Help not implemented yet", NULL, MB_OK);
@ -586,8 +649,16 @@ CMainWindow::UpdateStatusBarText()
if (m_StatusBar) if (m_StatusBar)
{ {
CStringW szBuffer; CStringW szBuffer;
szBuffer.Format(IDS_APPS_COUNT, m_ApplicationView->GetItemCount());
// Append the number of selected apps if not in APPWIZ-mode.
if (!m_bAppwizMode)
{
CStringW szBuffer2;
szBuffer2.Format(IDS_APPS_SELECT_COUNT, m_Selected.GetCount());
szBuffer += szBuffer2;
}
szBuffer.Format(IDS_APPS_COUNT, m_ApplicationView->GetItemCount(), m_Selected.GetCount());
m_StatusBar->SetText(szBuffer); m_StatusBar->SetText(szBuffer);
} }
} }
@ -612,6 +683,13 @@ CMainWindow::AddApplicationsToView(CAtlList<CAppInfo *> &List)
VOID VOID
CMainWindow::UpdateApplicationsList(AppsCategories EnumType, BOOL bReload, BOOL bCheckAvailable) CMainWindow::UpdateApplicationsList(AppsCategories EnumType, BOOL bReload, BOOL bCheckAvailable)
{ {
// Only installed applications should be enumerated in APPWIZ-mode.
if (m_bAppwizMode && !IsInstalledEnum(EnumType))
{
ATLASSERT(FALSE && "Should not be called in APPWIZ-mode");
return;
}
bUpdating = TRUE; bUpdating = TRUE;
if (HCURSOR hCursor = LoadCursor(NULL, IDC_APPSTARTING)) if (HCURSOR hCursor = LoadCursor(NULL, IDC_APPSTARTING))
@ -624,6 +702,12 @@ CMainWindow::UpdateApplicationsList(AppsCategories EnumType, BOOL bReload, BOOL
if (bCheckAvailable) if (bCheckAvailable)
CheckAvailable(); CheckAvailable();
if (m_PendingInstalledViewRefresh && IsInstalledEnum(EnumType) && !IsInstalledEnum(SelectedEnumType))
{
m_PendingInstalledViewRefresh = FALSE;
bReload = TRUE; // Reload because we are switching from Available to Installed after something installed
}
BOOL TryRestoreSelection = SelectedEnumType == EnumType; BOOL TryRestoreSelection = SelectedEnumType == EnumType;
if (SelectedEnumType != EnumType) if (SelectedEnumType != EnumType)
SelectedEnumType = EnumType; SelectedEnumType = EnumType;
@ -650,6 +734,9 @@ CMainWindow::UpdateApplicationsList(AppsCategories EnumType, BOOL bReload, BOOL
} }
else if (IsAvailableEnum(EnumType)) else if (IsAvailableEnum(EnumType))
{ {
// We shouldn't get there in APPWIZ-mode.
ATLASSERT(!m_bAppwizMode);
if (bReload) if (bReload)
m_Db->UpdateAvailable(); m_Db->UpdateAvailable();
@ -709,8 +796,7 @@ CMainWindow::GetWndClassInfo()
HWND HWND
CMainWindow::Create() CMainWindow::Create()
{ {
CStringW szWindowName; const CStringW szWindowName(MAKEINTRESOURCEW(m_bAppwizMode ? IDS_APPWIZ_TITLE : IDS_APPTITLE));
szWindowName.LoadStringW(IDS_APPTITLE);
RECT r = { RECT r = {
(SettingsInfo.bSaveWndPos ? SettingsInfo.Left : CW_USEDEFAULT), (SettingsInfo.bSaveWndPos ? SettingsInfo.Left : CW_USEDEFAULT),
@ -756,16 +842,7 @@ CMainWindow::ItemCheckStateChanged(BOOL bChecked, LPVOID CallbackParam)
BOOL BOOL
CMainWindow::InstallApplication(CAppInfo *Info) CMainWindow::InstallApplication(CAppInfo *Info)
{ {
if (Info) return Info && DownloadApplication(Info);
{
if (DownloadApplication(Info))
{
UpdateApplicationsList(SelectedEnumType);
return TRUE;
}
}
return FALSE;
} }
BOOL BOOL

View file

@ -41,6 +41,7 @@ enum AppsCategories
ENUM_CAT_THEMES, ENUM_CAT_THEMES,
ENUM_CAT_OTHER, ENUM_CAT_OTHER,
ENUM_CAT_SELECTED, ENUM_CAT_SELECTED,
ENUM_LASTCATEGORY = ENUM_CAT_SELECTED - 1,
ENUM_ALL_INSTALLED = 30, ENUM_ALL_INSTALLED = 30,
ENUM_INSTALLED_APPLICATIONS, ENUM_INSTALLED_APPLICATIONS,
ENUM_UPDATES, ENUM_UPDATES,
@ -54,6 +55,12 @@ enum AppsCategories
inline BOOL inline BOOL
IsAvailableEnum(INT x) IsAvailableEnum(INT x)
{ {
C_ASSERT(ENUM_CAT_AUDIO == 1 && ENUM_CAT_THEMES == 15 && ENUM_CAT_OTHER == 16);
C_ASSERT(ENUM_LASTCATEGORY >= ENUM_CAT_OTHER);
C_ASSERT(ENUM_LASTCATEGORY < ENUM_CAT_SELECTED);
C_ASSERT(ENUM_LASTCATEGORY < ENUM_INSTALLED_MIN);
C_ASSERT(ENUM_CAT_SELECTED < ENUM_INSTALLED_MIN);
return (x >= ENUM_AVAILABLE_MIN && x <= ENUM_AVAILABLE_MAX); return (x >= ENUM_AVAILABLE_MIN && x <= ENUM_AVAILABLE_MAX);
} }
@ -68,7 +75,9 @@ enum UninstallCommandFlags
UCF_NONE = 0x00, UCF_NONE = 0x00,
UCF_MODIFY = 0x01, UCF_MODIFY = 0x01,
UCF_SILENT = 0x02, UCF_SILENT = 0x02,
UCF_SAMEPROCESS = 0x04,
}; };
DEFINE_ENUM_FLAG_OPERATORS(UninstallCommandFlags);
enum InstallerType enum InstallerType
{ {
@ -82,6 +91,7 @@ enum InstallerType
#define DB_REGNAME L"RegName" #define DB_REGNAME L"RegName"
#define DB_INSTALLER L"Installer" #define DB_INSTALLER L"Installer"
#define DB_SCOPE L"Scope" // User or Machine #define DB_SCOPE L"Scope" // User or Machine
#define DB_SAVEAS L"SaveAs"
#define DB_GENINSTSECTION L"Generate" #define DB_GENINSTSECTION L"Generate"
#define GENERATE_ARPSUBKEY L"RApps" // Our uninstall data is stored here #define GENERATE_ARPSUBKEY L"RApps" // Our uninstall data is stored here

View file

@ -89,8 +89,6 @@ class CAppRichEdit : public CUiWindow<CRichEdit>
LoadAndInsertText(UINT uStringID, DWORD StringFlags); LoadAndInsertText(UINT uStringID, DWORD StringFlags);
VOID VOID
InsertTextWithString(UINT StringID, const CStringW &Text, DWORD TextFlags); InsertTextWithString(UINT StringID, const CStringW &Text, DWORD TextFlags);
VOID
SetWelcomeText();
}; };
int int
@ -177,9 +175,9 @@ class CAppInfoDisplay : public CUiWindow<CWindowImpl<CAppInfoDisplay>>
Create(HWND hwndParent); Create(HWND hwndParent);
VOID VOID
ShowAppInfo(CAppInfo *Info); ShowAppInfo(CAppInfo &Info, bool OnlyUpdateText = false);
VOID void
SetWelcomeText(); SetWelcomeText(bool bAppwiz);
VOID VOID
OnCommand(WPARAM wParam, LPARAM lParam); OnCommand(WPARAM wParam, LPARAM lParam);
@ -195,7 +193,7 @@ class CAppsListView : public CUiWindow<CWindowImpl<CAppsListView, CListView>>
}; };
BOOL bIsAscending = TRUE; BOOL bIsAscending = TRUE;
BOOL bHasCheckboxes = FALSE; bool bHasCheckboxes = false;
INT ItemCount = 0; INT ItemCount = 0;
INT CheckedItemCount = 0; INT CheckedItemCount = 0;
@ -224,8 +222,9 @@ class CAppsListView : public CUiWindow<CWindowImpl<CAppsListView, CListView>>
VOID VOID
SetWatermark(const CStringW &Text); SetWatermark(const CStringW &Text);
VOID
SetCheckboxesVisible(BOOL bIsVisible); void
ShowCheckboxes(bool bShow);
VOID VOID
ColumnClick(LPNMLISTVIEW pnmv); ColumnClick(LPNMLISTVIEW pnmv);
@ -293,10 +292,11 @@ class CMainToolbar : public CUiWindow<CToolbar<>>
HWND HWND
Create(HWND hwndParent); Create(HWND hwndParent);
VOID void
HideButtonCaption(); ShowButtonCaption(bool bShow);
VOID
ShowButtonCaption(); void
UpdateMaxButtonsWidth();
DWORD DWORD
GetMaxButtonsWidth() const; GetMaxButtonsWidth() const;
@ -388,6 +388,8 @@ class CApplicationView : public CUiWindow<CWindowImpl<CApplicationView>>
void void
SetRedraw(BOOL bRedraw); SetRedraw(BOOL bRedraw);
void void
RefreshAvailableItem(PCWSTR PackageName);
void
SetFocusOnSearchBar(); SetFocusOnSearchBar();
BOOL BOOL
SetDisplayAppType(APPLICATION_VIEW_TYPE AppType); SetDisplayAppType(APPLICATION_VIEW_TYPE AppType);
@ -415,6 +417,9 @@ class CApplicationView : public CUiWindow<CWindowImpl<CApplicationView>>
VOID VOID
RestoreListSelection(const RESTORELISTSELECTION &Restore); RestoreListSelection(const RESTORELISTSELECTION &Restore);
VOID
RefreshDetailsPane(CAppInfo &Info, bool OnlyUpdateText = false);
// this function is called when a item of listview get focus. // this function is called when a item of listview get focus.
// CallbackParam is the param passed to listview when adding the item (the one getting focus now). // CallbackParam is the param passed to listview when adding the item (the one getting focus now).
VOID VOID

View file

@ -52,18 +52,22 @@ class CMainWindow : public CWindowImpl<CMainWindow, CWindow, CFrameWinTraits>
CUiWindow<CStatusBar> *m_StatusBar = NULL; CUiWindow<CStatusBar> *m_StatusBar = NULL;
CApplicationView *m_ApplicationView = NULL; CApplicationView *m_ApplicationView = NULL;
friend class CApplicationView;
CAppDB *m_Db; CAppDB *m_Db;
CAtlList<CAppInfo *> m_Selected; CAtlList<CAppInfo *> m_Selected;
BOOL bUpdating = FALSE; BOOL bUpdating = FALSE;
BOOL bAppwizMode; BOOL m_bAppwizMode;
HTREEITEM hRootItemInstalled; HTREEITEM hRootItemInstalled;
CStringW szSearchPattern; CStringW szSearchPattern;
AppsCategories SelectedEnumType; AppsCategories SelectedEnumType;
public: public:
static HWND m_hLastFocus;
static bool m_PendingInstalledViewRefresh;
explicit CMainWindow(CAppDB *db, BOOL bAppwiz = FALSE); explicit CMainWindow(CAppDB *db, BOOL bAppwiz = FALSE);
~CMainWindow(); ~CMainWindow();

View file

@ -30,6 +30,8 @@ VOID
CopyTextToClipboard(LPCWSTR lpszText); CopyTextToClipboard(LPCWSTR lpszText);
VOID VOID
ShowPopupMenuEx(HWND hwnd, HWND hwndOwner, UINT MenuID, UINT DefaultItem, POINT *Point = NULL); ShowPopupMenuEx(HWND hwnd, HWND hwndOwner, UINT MenuID, UINT DefaultItem, POINT *Point = NULL);
VOID
EmulateDialogReposition(HWND hwnd);
BOOL BOOL
StartProcess(const CStringW &Path, BOOL Wait); StartProcess(const CStringW &Path, BOOL Wait);
BOOL BOOL
@ -115,3 +117,32 @@ GetProgramFilesPath(CStringW &Path, BOOL PerUser, HWND hwnd = NULL);
template <class T> class CLocalPtr : public CHeapPtr<T, CLocalAllocator> template <class T> class CLocalPtr : public CHeapPtr<T, CLocalAllocator>
{ {
}; };
struct CScopedMutex
{
HANDLE m_hMutex;
CScopedMutex(LPCWSTR Name, UINT Timeout = INFINITE, BOOL InitialOwner = FALSE)
{
m_hMutex = CreateMutexW(NULL, InitialOwner, Name);
if (m_hMutex && !InitialOwner)
{
DWORD wait = WaitForSingleObject(m_hMutex, Timeout);
if (wait != WAIT_OBJECT_0 && wait != WAIT_ABANDONED)
{
CloseHandle(m_hMutex);
m_hMutex = NULL;
}
}
}
~CScopedMutex()
{
if (m_hMutex)
{
ReleaseMutex(m_hMutex);
CloseHandle(m_hMutex);
}
}
bool Acquired() const { return m_hMutex != NULL; }
};

View file

@ -13,4 +13,19 @@
#include "misc.h" #include "misc.h"
#include "configparser.h" #include "configparser.h"
extern LONG g_Busy;
extern bool g_PendingInstalledViewRefresh;
#define WM_NOTIFY_OPERATIONCOMPLETED (WM_APP + 0)
#define WM_NOTIFY_INSTALLERFINISHED (WM_APP + 1)
#define MAINWINDOWCLASSNAME L"ROSAPPMGR2"
#define MAINWINDOWMUTEX szWindowClass
#define UPDATEDBMUTEX ( MAINWINDOWCLASSNAME L":UpDB" )
struct CUpdateDatabaseMutex : public CScopedMutex
{
CUpdateDatabaseMutex() : CScopedMutex(UPDATEDBMUTEX, 1000 * 60 * 10, FALSE) { };
};
#endif /* _RAPPS_H */ #endif /* _RAPPS_H */

View file

@ -67,7 +67,6 @@
/* Menus */ /* Menus */
#define IDR_MAINMENU 500 #define IDR_MAINMENU 500
#define IDR_LINKMENU 501 #define IDR_LINKMENU 501
#define IDR_APPLICATIONMENU 502
/* Menu items */ /* Menu items */
#define ID_EXIT 550 #define ID_EXIT 550
@ -88,40 +87,46 @@
/* Messages */ /* Messages */
#define ID_ACTIVATE_APPWIZ 600 #define ID_ACTIVATE_APPWIZ 600
/* Strings */ /* Banners */
#define IDS_APPTITLE 100 #define IDS_APPTITLE 100
#define IDS_SEARCH_TEXT 101 #define IDS_APP_AUTHORS 101
#define IDS_APPS_COUNT 102 #define IDS_WELCOME_TITLE 102
#define IDS_WELCOME_TITLE 103 #define IDS_WELCOME_TEXT 103
#define IDS_WELCOME_TEXT 104 #define IDS_WELCOME_URL 104
#define IDS_WELCOME_URL 105 #define IDS_APPWIZ_TITLE 105
#define IDS_INSTALLED 106 #define IDS_APPWIZ_TEXT1 106
#define IDS_AVAILABLEFORINST 107 #define IDS_APPWIZ_TEXT2 107
#define IDS_UPDATES 108
#define IDS_APPLICATIONS 109 /* Strings */
#define IDS_CHOOSE_FOLDER_TEXT 110 #define IDS_SEARCH_TEXT 110
#define IDS_CHOOSE_FOLDER_ERROR 111 #define IDS_APPS_COUNT 111
#define IDS_URL_INVALID 112 #define IDS_APPS_SELECT_COUNT 112
#define IDS_APP_REG_REMOVE 113 #define IDS_INSTALLED 113
#define IDS_INFORMATION 114 #define IDS_AVAILABLEFORINST 114
#define IDS_UNABLE_TO_REMOVE 115 #define IDS_UPDATES 115
#define IDS_UNABLE_TO_DOWNLOAD 116 #define IDS_APPLICATIONS 116
#define IDS_UNABLE_TO_DOWNLOAD2 117 #define IDS_CHOOSE_FOLDER_TEXT 117
#define IDS_UNABLE_TO_QUERY_CERT 118 #define IDS_CHOOSE_FOLDER_ERROR 118
#define IDS_INTEG_CHECK_TITLE 119 #define IDS_URL_INVALID 119
#define IDS_INTEG_CHECK_FAIL 120 #define IDS_APP_REG_REMOVE 120
#define IDS_INTERRUPTED_DOWNLOAD 121 #define IDS_INFORMATION 121
#define IDS_UNABLE_TO_WRITE 122 #define IDS_UNABLE_TO_REMOVE 122
#define IDS_INSTALL_SELECTED 123 #define IDS_UNABLE_TO_DOWNLOAD 123
#define IDS_UNABLE_TO_INSTALL 124 #define IDS_UNABLE_TO_DOWNLOAD2 124
#define IDS_SELECTEDFORINST 125 #define IDS_UNABLE_TO_QUERY_CERT 125
#define IDS_MISMATCH_CERT_INFO 126 #define IDS_INTEG_CHECK_TITLE 126
#define IDS_UNABLE_PATH 127 #define IDS_INTEG_CHECK_FAIL 127
#define IDS_APP_AUTHORS 128 #define IDS_INTERRUPTED_DOWNLOAD 128
#define IDS_APP_DISPLAY_DETAILS 129 #define IDS_UNABLE_TO_WRITE 129
#define IDS_APP_DISPLAY_LIST 130 #define IDS_INSTALL_SELECTED 130
#define IDS_APP_DISPLAY_TILE 131 #define IDS_UNABLE_TO_INSTALL 131
#define IDS_NO_SEARCH_RESULTS 132 #define IDS_SELECTEDFORINST 132
#define IDS_MISMATCH_CERT_INFO 133
#define IDS_UNABLE_PATH 134
#define IDS_APP_DISPLAY_DETAILS 135
#define IDS_APP_DISPLAY_LIST 136
#define IDS_APP_DISPLAY_TILE 137
#define IDS_NO_SEARCH_RESULTS 138
/* Tooltips */ /* Tooltips */
#define IDS_TOOLTIP_INSTALL 200 #define IDS_TOOLTIP_INSTALL 200

View file

@ -43,22 +43,6 @@ BEGIN
END END
END END
IDR_APPLICATIONMENU MENU
BEGIN
POPUP ""
BEGIN
MENUITEM "&Слагане\tCtrl+Enter", ID_INSTALL
MENUITEM "&Махане\tCtrl+Del", ID_UNINSTALL
MENUITEM "&Промяна", ID_MODIFY
MENUITEM SEPARATOR
MENUITEM "Пр&емахване от регистъра", ID_REGREMOVE
MENUITEM SEPARATOR
MENUITEM "О&пресняване\tF5", ID_REFRESH
MENUITEM SEPARATOR
MENUITEM "Update Data&base\tCtrl+F5", ID_RESETDB
END
END
IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 254, 265 IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 254, 265
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Настройки" CAPTION "Настройки"
@ -188,11 +172,20 @@ STRINGTABLE
BEGIN BEGIN
IDS_APPTITLE "Управителят за приложения на РеактОС" IDS_APPTITLE "Управителят за приложения на РеактОС"
IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev" IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev"
IDS_SEARCH_TEXT "Търсене"
IDS_APPS_COUNT "Брой приложения: %d; Selected: %d"
IDS_WELCOME_TITLE "Управителят на приложенията на РеактОС ви приветства" IDS_WELCOME_TITLE "Управителят на приложенията на РеактОС ви приветства"
IDS_WELCOME_TEXT "Изберете раздел от лявата страна, след което изберете приложение за слагане или премахване.\nСтраницата на РеактОС: " IDS_WELCOME_TEXT "Изберете раздел от лявата страна, след което изберете приложение за слагане или премахване.\nСтраницата на РеактОС: "
IDS_WELCOME_URL "https://reactos.org" IDS_WELCOME_URL "https://reactos.org"
IDS_APPWIZ_TITLE "Add/Remove Programs"
IDS_APPWIZ_TEXT1 "Choose ""Applications"" or ""Updates"" to view the list of applications or updates installed on your system."
IDS_APPWIZ_TEXT2 "To remove a program or to modify its installed components, select it from the list and click on ""Uninstall"" or ""Modify""."
END
STRINGTABLE
BEGIN
IDS_SEARCH_TEXT "Търсене…"
IDS_APPS_COUNT "Брой приложения: %d"
IDS_APPS_SELECT_COUNT "; Selected: %d"
IDS_INSTALLED "Сложено" IDS_INSTALLED "Сложено"
IDS_AVAILABLEFORINST "Налично за слагане" IDS_AVAILABLEFORINST "Налично за слагане"
IDS_UPDATES "Обновления" IDS_UPDATES "Обновления"

View file

@ -44,22 +44,6 @@ BEGIN
END END
END END
IDR_APPLICATIONMENU MENU
BEGIN
POPUP ""
BEGIN
MENUITEM "&Instalovat\tCtrl+Enter", ID_INSTALL
MENUITEM "&Odinstalovat\tCtrl+Del", ID_UNINSTALL
MENUITEM "&Změnit", ID_MODIFY
MENUITEM SEPARATOR
MENUITEM "Odstranit z r&egistru", ID_REGREMOVE
MENUITEM SEPARATOR
MENUITEM "Ob&novit\tF5", ID_REFRESH
MENUITEM SEPARATOR
MENUITEM "Aktualizovat data&bázi\tCtrl+F5", ID_RESETDB
END
END
IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265 IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Nastavení" CAPTION "Nastavení"
@ -189,11 +173,20 @@ STRINGTABLE
BEGIN BEGIN
IDS_APPTITLE "ReactOS Správce aplikací" IDS_APPTITLE "ReactOS Správce aplikací"
IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev" IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev"
IDS_SEARCH_TEXT "Hledat…" IDS_WELCOME_TITLE "Vítejte v ReactOS Správci aplikací!"
IDS_APPS_COUNT "Počet aplikací: %d; Vybráno: %d"
IDS_WELCOME_TITLE "Vítejte v ReactOS Správci aplikací!\n\n"
IDS_WELCOME_TEXT "Na levé straně zvolte kategorii, pak vpravo zvolte aplikaci, která bude nainstalována nebo odinstalována.\nWebová stránka ReactOS: " IDS_WELCOME_TEXT "Na levé straně zvolte kategorii, pak vpravo zvolte aplikaci, která bude nainstalována nebo odinstalována.\nWebová stránka ReactOS: "
IDS_WELCOME_URL "https://reactos.org" IDS_WELCOME_URL "https://reactos.org"
IDS_APPWIZ_TITLE "Add/Remove Programs"
IDS_APPWIZ_TEXT1 "Choose ""Applications"" or ""Updates"" to view the list of applications or updates installed on your system."
IDS_APPWIZ_TEXT2 "To remove a program or to modify its installed components, select it from the list and click on ""Uninstall"" or ""Modify""."
END
STRINGTABLE
BEGIN
IDS_SEARCH_TEXT "Hledat…"
IDS_APPS_COUNT "Počet aplikací: %d"
IDS_APPS_SELECT_COUNT "; Vybráno: %d"
IDS_INSTALLED "Nainstalováno" IDS_INSTALLED "Nainstalováno"
IDS_AVAILABLEFORINST "Lze instalovat" IDS_AVAILABLEFORINST "Lze instalovat"
IDS_UPDATES "Aktualizace" IDS_UPDATES "Aktualizace"

View file

@ -46,22 +46,6 @@ BEGIN
END END
END END
IDR_APPLICATIONMENU MENU
BEGIN
POPUP ""
BEGIN
MENUITEM "&Installieren\tCtrl+Enter", ID_INSTALL
MENUITEM "&Deinstallieren\tCtrl+Del", ID_UNINSTALL
MENUITEM "Ä&ndern", ID_MODIFY
MENUITEM SEPARATOR
MENUITEM "Aus R&egistry entfernen", ID_REGREMOVE
MENUITEM SEPARATOR
MENUITEM "Aktualisie&ren\tF5", ID_REFRESH
MENUITEM SEPARATOR
MENUITEM "Daten&bank aktualisieren\tCtrl+F5", ID_RESETDB
END
END
IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265 IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Einstellungen" CAPTION "Einstellungen"
@ -191,11 +175,20 @@ STRINGTABLE
BEGIN BEGIN
IDS_APPTITLE "ReactOS-Anwendungsmanager" IDS_APPTITLE "ReactOS-Anwendungsmanager"
IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev" IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev"
IDS_SEARCH_TEXT "Suche…" IDS_WELCOME_TITLE "Willkommen im ReactOS-Anwendungsmanager!"
IDS_APPS_COUNT "Anzahl der Anwendungen: %d, ausgewählt: %d"
IDS_WELCOME_TITLE "Willkommen im ReactOS-Anwendungsmanager!\n\n"
IDS_WELCOME_TEXT "Wählen Sie links eine Kategorie und dann eine Anwendung um sie zu installieren oder zu deinstallieren.\nReactOS-Webseite: " IDS_WELCOME_TEXT "Wählen Sie links eine Kategorie und dann eine Anwendung um sie zu installieren oder zu deinstallieren.\nReactOS-Webseite: "
IDS_WELCOME_URL "https://reactos.org" IDS_WELCOME_URL "https://reactos.org"
IDS_APPWIZ_TITLE "Add/Remove Programs"
IDS_APPWIZ_TEXT1 "Choose ""Applications"" or ""Updates"" to view the list of applications or updates installed on your system."
IDS_APPWIZ_TEXT2 "To remove a program or to modify its installed components, select it from the list and click on ""Uninstall"" or ""Modify""."
END
STRINGTABLE
BEGIN
IDS_SEARCH_TEXT "Suche…"
IDS_APPS_COUNT "Anzahl der Anwendungen: %d"
IDS_APPS_SELECT_COUNT "; ausgewählt: %d"
IDS_INSTALLED "Installiert" IDS_INSTALLED "Installiert"
IDS_AVAILABLEFORINST "Zur Installation verfügbar" IDS_AVAILABLEFORINST "Zur Installation verfügbar"
IDS_UPDATES "Aktualisierungen" IDS_UPDATES "Aktualisierungen"

View file

@ -46,22 +46,6 @@ BEGIN
END END
END END
IDR_APPLICATIONMENU MENU
BEGIN
POPUP ""
BEGIN
MENUITEM "&Install\tCtrl+Enter", ID_INSTALL
MENUITEM "&Uninstall\tCtrl+Del", ID_UNINSTALL
MENUITEM "&Modify", ID_MODIFY
MENUITEM SEPARATOR
MENUITEM "R&emove from Registry", ID_REGREMOVE
MENUITEM SEPARATOR
MENUITEM "&Refresh\tF5", ID_REFRESH
MENUITEM SEPARATOR
MENUITEM "Update Data&base\tCtrl+F5", ID_RESETDB
END
END
IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265 IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Settings" CAPTION "Settings"
@ -191,11 +175,20 @@ STRINGTABLE
BEGIN BEGIN
IDS_APPTITLE "ReactOS Applications Manager" IDS_APPTITLE "ReactOS Applications Manager"
IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev" IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev"
IDS_SEARCH_TEXT "Search…" IDS_WELCOME_TITLE "Welcome to ReactOS Applications Manager!"
IDS_APPS_COUNT "Applications count: %d; Selected: %d"
IDS_WELCOME_TITLE "Welcome to ReactOS Applications Manager!\n\n"
IDS_WELCOME_TEXT "Choose a category on the left, then choose an application to install or uninstall.\nReactOS Web Site: " IDS_WELCOME_TEXT "Choose a category on the left, then choose an application to install or uninstall.\nReactOS Web Site: "
IDS_WELCOME_URL "https://reactos.org" IDS_WELCOME_URL "https://reactos.org"
IDS_APPWIZ_TITLE "Add/Remove Programs"
IDS_APPWIZ_TEXT1 "Choose ""Applications"" or ""Updates"" to view the list of applications or updates installed on your system."
IDS_APPWIZ_TEXT2 "To remove a program or to modify its installed components, select it from the list and click on ""Uninstall"" or ""Modify""."
END
STRINGTABLE
BEGIN
IDS_SEARCH_TEXT "Search…"
IDS_APPS_COUNT "Applications count: %d"
IDS_APPS_SELECT_COUNT "; Selected: %d"
IDS_INSTALLED "Installed" IDS_INSTALLED "Installed"
IDS_AVAILABLEFORINST "Available for installation" IDS_AVAILABLEFORINST "Available for installation"
IDS_UPDATES "Updates" IDS_UPDATES "Updates"

View file

@ -45,22 +45,6 @@ BEGIN
END END
END END
IDR_APPLICATIONMENU MENU
BEGIN
POPUP ""
BEGIN
MENUITEM "&Instalar\tCtrl+Intro", ID_INSTALL
MENUITEM "&Desinstalar\tCtrl+Supr", ID_UNINSTALL
MENUITEM "&Modificar", ID_MODIFY
MENUITEM SEPARATOR
MENUITEM "&Eliminar del Registro", ID_REGREMOVE
MENUITEM SEPARATOR
MENUITEM "&Recargar\tF5", ID_REFRESH
MENUITEM SEPARATOR
MENUITEM "&Actualizar listado desde Internet\tCtrl+F5", ID_RESETDB
END
END
IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265 IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Ajustes" CAPTION "Ajustes"
@ -190,11 +174,20 @@ STRINGTABLE
BEGIN BEGIN
IDS_APPTITLE "Administrador de aplicaciones de ReactOS" IDS_APPTITLE "Administrador de aplicaciones de ReactOS"
IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev" IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev"
IDS_SEARCH_TEXT "Buscar…" IDS_WELCOME_TITLE "Bienvenido al Administrador de aplicaciones de ReactOS."
IDS_APPS_COUNT "Nº de aplicaciones: %d; Selecionadas: %d"
IDS_WELCOME_TITLE "Bienvenido al Administrador de aplicaciones de ReactOS.\n\n"
IDS_WELCOME_TEXT "Seleccione una categoría a la izquierda, para más tarde seleccionar la aplicación a instalar o desinstalar.\nWeb de ReactOS: " IDS_WELCOME_TEXT "Seleccione una categoría a la izquierda, para más tarde seleccionar la aplicación a instalar o desinstalar.\nWeb de ReactOS: "
IDS_WELCOME_URL "https://reactos.org" IDS_WELCOME_URL "https://reactos.org"
IDS_APPWIZ_TITLE "Add/Remove Programs"
IDS_APPWIZ_TEXT1 "Choose ""Applications"" or ""Updates"" to view the list of applications or updates installed on your system."
IDS_APPWIZ_TEXT2 "To remove a program or to modify its installed components, select it from the list and click on ""Uninstall"" or ""Modify""."
END
STRINGTABLE
BEGIN
IDS_SEARCH_TEXT "Buscar…"
IDS_APPS_COUNT "Nº de aplicaciones: %d"
IDS_APPS_SELECT_COUNT "; Selecionadas: %d"
IDS_INSTALLED "Instaladas" IDS_INSTALLED "Instaladas"
IDS_AVAILABLEFORINST "Disponible para su instalación" IDS_AVAILABLEFORINST "Disponible para su instalación"
IDS_UPDATES "Actualizaciones" IDS_UPDATES "Actualizaciones"

View file

@ -43,22 +43,6 @@ BEGIN
END END
END END
IDR_APPLICATIONMENU MENU
BEGIN
POPUP ""
BEGIN
MENUITEM "&Installi\tCtrl+Enter", ID_INSTALL
MENUITEM "&Desinstalli\tCtrl+Del", ID_UNINSTALL
MENUITEM "&Muuda", ID_MODIFY
MENUITEM SEPARATOR
MENUITEM "&Eemalda registrist", ID_REGREMOVE
MENUITEM SEPARATOR
MENUITEM "&Värskenda\tF5", ID_REFRESH
MENUITEM SEPARATOR
MENUITEM "Uuenda andme&baasi\tCtrl+F5", ID_RESETDB
END
END
IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265 IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Sätted" CAPTION "Sätted"
@ -188,11 +172,20 @@ STRINGTABLE
BEGIN BEGIN
IDS_APPTITLE "ReactOS'i Rakenduste Haldur" IDS_APPTITLE "ReactOS'i Rakenduste Haldur"
IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev" IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev"
IDS_SEARCH_TEXT "Otsi…" IDS_WELCOME_TITLE "Tere tulemast ReactOS'i Rakenduste Haldurisse!"
IDS_APPS_COUNT "Rakenduste arv: %d; Valitud: %d"
IDS_WELCOME_TITLE "Tere tulemast ReactOS'i Rakenduste Haldurisse!\n\n"
IDS_WELCOME_TEXT "Vali vasakult teema, siis vali paremalt rakendusi mida soovid installida või desinstallida.\nReactOS'i veebileht: " IDS_WELCOME_TEXT "Vali vasakult teema, siis vali paremalt rakendusi mida soovid installida või desinstallida.\nReactOS'i veebileht: "
IDS_WELCOME_URL "https://reactos.org" IDS_WELCOME_URL "https://reactos.org"
IDS_APPWIZ_TITLE "Add/Remove Programs"
IDS_APPWIZ_TEXT1 "Choose ""Applications"" or ""Updates"" to view the list of applications or updates installed on your system."
IDS_APPWIZ_TEXT2 "To remove a program or to modify its installed components, select it from the list and click on ""Uninstall"" or ""Modify""."
END
STRINGTABLE
BEGIN
IDS_SEARCH_TEXT "Otsi…"
IDS_APPS_COUNT "Rakenduste arv: %d"
IDS_APPS_SELECT_COUNT "; Valitud: %d"
IDS_INSTALLED "Installitud" IDS_INSTALLED "Installitud"
IDS_AVAILABLEFORINST "Installimiseks saadaval" IDS_AVAILABLEFORINST "Installimiseks saadaval"
IDS_UPDATES "Uuendused" IDS_UPDATES "Uuendused"

View file

@ -46,22 +46,6 @@ BEGIN
END END
END END
IDR_APPLICATIONMENU MENU
BEGIN
POPUP ""
BEGIN
MENUITEM "&Installer\tCtrl+Entrée", ID_INSTALL
MENUITEM "&Désinstaller\tCtrl+Suppr", ID_UNINSTALL
MENUITEM "&Modifier", ID_MODIFY
MENUITEM SEPARATOR
MENUITEM "&Supprimer du registre", ID_REGREMOVE
MENUITEM SEPARATOR
MENUITEM "&Rafraîchir\tF5", ID_REFRESH
MENUITEM SEPARATOR
MENUITEM "Mettre à jour la &base\tCtrl+F5", ID_RESETDB
END
END
IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265 IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Configuration" CAPTION "Configuration"
@ -191,11 +175,20 @@ STRINGTABLE
BEGIN BEGIN
IDS_APPTITLE "Gestionnaire d'applications ReactOS" IDS_APPTITLE "Gestionnaire d'applications ReactOS"
IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev" IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev"
IDS_SEARCH_TEXT "Chercher…" IDS_WELCOME_TITLE "Bienvenue dans ReactOS Applications Manager !"
IDS_APPS_COUNT "Nombre d'applications : %d ; Sélectionnées : %d"
IDS_WELCOME_TITLE "Bienvenue dans ReactOS Applications Manager !\n\n"
IDS_WELCOME_TEXT "Choisissez une catégorie à gauche, ensuite choisissez une application à installer ou désinstaller.\nSite internet de ReactOS : " IDS_WELCOME_TEXT "Choisissez une catégorie à gauche, ensuite choisissez une application à installer ou désinstaller.\nSite internet de ReactOS : "
IDS_WELCOME_URL "https://reactos.org" IDS_WELCOME_URL "https://reactos.org"
IDS_APPWIZ_TITLE "Ajout/Suppression de programmes" // "Ajouter/Supprimer des Programmes"
IDS_APPWIZ_TEXT1 "Choisissez ""Applications"" ou ""Mises à jour"" pour voir la liste des programmes ou des mises à jour installés sur votre système."
IDS_APPWIZ_TEXT2 "Pour supprimer un programme, ou modifier ses composants installés, sélectionnez-le dans la liste et cliquez sur ""Désinstaller"" ou ""Modifier""."
END
STRINGTABLE
BEGIN
IDS_SEARCH_TEXT "Chercher…"
IDS_APPS_COUNT "Nombre d'applications : %d"
IDS_APPS_SELECT_COUNT " ; Sélectionnées : %d"
IDS_INSTALLED "Installé" IDS_INSTALLED "Installé"
IDS_AVAILABLEFORINST "Disponible pour installation" IDS_AVAILABLEFORINST "Disponible pour installation"
IDS_UPDATES "Mises à jour" IDS_UPDATES "Mises à jour"
@ -274,5 +267,5 @@ END
STRINGTABLE STRINGTABLE
BEGIN BEGIN
IDS_INSTGEN_CONFIRMUNINST "Are you sure you want to uninstall %s?" IDS_INSTGEN_CONFIRMUNINST "Êtes-vous sûr de vouloir désinstaller %s ?"
END END

View file

@ -45,22 +45,6 @@ BEGIN
END END
END END
IDR_APPLICATIONMENU MENU
BEGIN
POPUP ""
BEGIN
MENUITEM "התקנה\tCtrl+Enter", ID_INSTALL
MENUITEM "הסרה\tCtrl+Del", ID_UNINSTALL
MENUITEM "שינוי", ID_MODIFY
MENUITEM SEPARATOR
MENUITEM "הסרה מהרשום", ID_REGREMOVE
MENUITEM SEPARATOR
MENUITEM "רענן\tF5", ID_REFRESH
MENUITEM SEPARATOR
MENUITEM "עדכון מסד נתונים\tCtrl+F5", ID_RESETDB
END
END
IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265 IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_LAYOUTRTL EXSTYLE WS_EX_LAYOUTRTL
@ -193,11 +177,20 @@ STRINGTABLE
BEGIN BEGIN
IDS_APPTITLE "מנהל היישומים של ReactOS" IDS_APPTITLE "מנהל היישומים של ReactOS"
IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev" IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev"
IDS_SEARCH_TEXT "חיפוש…" IDS_WELCOME_TITLE "ברוכים הבאים למנהל היישומים של ReactOS!"
IDS_APPS_COUNT "ספירת יישומים: %d; Selected: %d"
IDS_WELCOME_TITLE "ברוכים הבאים למנהל היישומים של ReactOS!\n\n"
IDS_WELCOME_TEXT "בחר קטגוריה בצד שמאל, לאחר מכן בחר יישום להתקנה או להסרה.\nהאתר של ReactOS: " IDS_WELCOME_TEXT "בחר קטגוריה בצד שמאל, לאחר מכן בחר יישום להתקנה או להסרה.\nהאתר של ReactOS: "
IDS_WELCOME_URL "https://reactos.org" IDS_WELCOME_URL "https://reactos.org"
IDS_APPWIZ_TITLE "Add/Remove Programs"
IDS_APPWIZ_TEXT1 "Choose ""Applications"" or ""Updates"" to view the list of applications or updates installed on your system."
IDS_APPWIZ_TEXT2 "To remove a program or to modify its installed components, select it from the list and click on ""Uninstall"" or ""Modify""."
END
STRINGTABLE
BEGIN
IDS_SEARCH_TEXT "חיפוש…"
IDS_APPS_COUNT "ספירת יישומים: %d"
IDS_APPS_SELECT_COUNT "; Selected: %d"
IDS_INSTALLED "מותקן" IDS_INSTALLED "מותקן"
IDS_AVAILABLEFORINST "זמין להתקנה" IDS_AVAILABLEFORINST "זמין להתקנה"
IDS_UPDATES "עדכונים" IDS_UPDATES "עדכונים"

View file

@ -43,22 +43,6 @@ BEGIN
END END
END END
IDR_APPLICATIONMENU MENU
BEGIN
POPUP ""
BEGIN
MENUITEM "Telep&ítés\tCtrl+Enter", ID_INSTALL
MENUITEM "Eltá&volítás\tCtrl+Del", ID_UNINSTALL
MENUITEM "&Módosítás", ID_MODIFY
MENUITEM SEPARATOR
MENUITEM "&Eltávolítás a registryből", ID_REGREMOVE
MENUITEM SEPARATOR
MENUITEM "F&rissítés\tF5", ID_REFRESH
MENUITEM SEPARATOR
MENUITEM "Adat&bázis frissítése\tCtrl+F5", ID_RESETDB
END
END
IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265 IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Beállítások" CAPTION "Beállítások"
@ -188,11 +172,20 @@ STRINGTABLE
BEGIN BEGIN
IDS_APPTITLE "ReactOS Alkalmazáskezelő" IDS_APPTITLE "ReactOS Alkalmazáskezelő"
IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev" IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev"
IDS_SEARCH_TEXT "Keresés…" IDS_WELCOME_TITLE "Üdvözöljük a ReactOS Alkalmazáskezelőben!"
IDS_APPS_COUNT "Alkalmazások száma: %d; Kijelölve: %d"
IDS_WELCOME_TITLE "Üdvözöljük a ReactOS Alkalmazáskezelőben!\n\n"
IDS_WELCOME_TEXT "Bal oldalon válasszon kategóriát, majd válasszon egy telepíteni vagy eltávolítani kívánt alkalmazást.\nReactOS weboldal: " IDS_WELCOME_TEXT "Bal oldalon válasszon kategóriát, majd válasszon egy telepíteni vagy eltávolítani kívánt alkalmazást.\nReactOS weboldal: "
IDS_WELCOME_URL "https://reactos.org" IDS_WELCOME_URL "https://reactos.org"
IDS_APPWIZ_TITLE "Add/Remove Programs"
IDS_APPWIZ_TEXT1 "Choose ""Applications"" or ""Updates"" to view the list of applications or updates installed on your system."
IDS_APPWIZ_TEXT2 "To remove a program or to modify its installed components, select it from the list and click on ""Uninstall"" or ""Modify""."
END
STRINGTABLE
BEGIN
IDS_SEARCH_TEXT "Keresés…"
IDS_APPS_COUNT "Alkalmazások száma: %d"
IDS_APPS_SELECT_COUNT "; Kijelölve: %d"
IDS_INSTALLED "Telepített" IDS_INSTALLED "Telepített"
IDS_AVAILABLEFORINST "Telepíthető alkalmazások" IDS_AVAILABLEFORINST "Telepíthető alkalmazások"
IDS_UPDATES "Frissítések" IDS_UPDATES "Frissítések"

View file

@ -43,22 +43,6 @@ BEGIN
END END
END END
IDR_APPLICATIONMENU MENU
BEGIN
POPUP ""
BEGIN
MENUITEM "&Pasang\tCtrl+Enter", ID_INSTALL
MENUITEM "&Bongkar\tCtrl+Del", ID_UNINSTALL
MENUITEM "&Ubah", ID_MODIFY
MENUITEM SEPARATOR
MENUITEM "Hapus dari R&egistri", ID_REGREMOVE
MENUITEM SEPARATOR
MENUITEM "Sega&rkan\tF5", ID_REFRESH
MENUITEM SEPARATOR
MENUITEM "Perbarui Data&base\tCtrl+F5", ID_RESETDB
END
END
IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265 IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Pengaturan" CAPTION "Pengaturan"
@ -188,11 +172,20 @@ STRINGTABLE
BEGIN BEGIN
IDS_APPTITLE "Manajer Aplikasi ReactOS" IDS_APPTITLE "Manajer Aplikasi ReactOS"
IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev" IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev"
IDS_SEARCH_TEXT "Cari…" IDS_WELCOME_TITLE "Selamat datang di Manajer Aplikasi ReactOS!"
IDS_APPS_COUNT "Jumlah aplikasi: %d; Terpilih: %d"
IDS_WELCOME_TITLE "Selamat datang di Manajer Aplikasi ReactOS!\n\n"
IDS_WELCOME_TEXT "pilih kategori di sisi kiri, kemudian pilih aplikasi untuk dipasang atau dibongkar.\nSitus Web ReactOS: " IDS_WELCOME_TEXT "pilih kategori di sisi kiri, kemudian pilih aplikasi untuk dipasang atau dibongkar.\nSitus Web ReactOS: "
IDS_WELCOME_URL "https://reactos.org" IDS_WELCOME_URL "https://reactos.org"
IDS_APPWIZ_TITLE "Add/Remove Programs"
IDS_APPWIZ_TEXT1 "Choose ""Applications"" or ""Updates"" to view the list of applications or updates installed on your system."
IDS_APPWIZ_TEXT2 "To remove a program or to modify its installed components, select it from the list and click on ""Uninstall"" or ""Modify""."
END
STRINGTABLE
BEGIN
IDS_SEARCH_TEXT "Cari…"
IDS_APPS_COUNT "Jumlah aplikasi: %d"
IDS_APPS_SELECT_COUNT "; Terpilih: %d"
IDS_INSTALLED "Terpasang" IDS_INSTALLED "Terpasang"
IDS_AVAILABLEFORINST "Tersedia untuk pemasangan" IDS_AVAILABLEFORINST "Tersedia untuk pemasangan"
IDS_UPDATES "Pembaruan" IDS_UPDATES "Pembaruan"

View file

@ -27,7 +27,7 @@ BEGIN
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "&Aggiorna\tF5", ID_REFRESH MENUITEM "&Aggiorna\tF5", ID_REFRESH
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "Aggiorna Data&base", ID_RESETDB MENUITEM "Aggiorna Data&base\tCtrl+F5", ID_RESETDB
END END
POPUP "?" POPUP "?"
BEGIN BEGIN
@ -45,22 +45,6 @@ BEGIN
END END
END END
IDR_APPLICATIONMENU MENU
BEGIN
POPUP ""
BEGIN
MENUITEM "&Installa\tCtrl+Enter", ID_INSTALL
MENUITEM "Rim&uovi\tCtrl+Del", ID_UNINSTALL
MENUITEM "&Modifica", ID_MODIFY
MENUITEM SEPARATOR
MENUITEM "Canc&ella dal registro", ID_REGREMOVE
MENUITEM SEPARATOR
MENUITEM "&Aggiorna\tF5", ID_REFRESH
MENUITEM SEPARATOR
MENUITEM "Aggiorna Data&base\tCtrl+F5", ID_RESETDB
END
END
IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265 IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Impostazioni" CAPTION "Impostazioni"
@ -190,11 +174,20 @@ STRINGTABLE
BEGIN BEGIN
IDS_APPTITLE "ReactOS Gestione applicazioni" IDS_APPTITLE "ReactOS Gestione applicazioni"
IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev" IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev"
IDS_SEARCH_TEXT "Cerca…" IDS_WELCOME_TITLE "Benvenuto!"
IDS_APPS_COUNT "Numero applicazioni: %d; Selezionate: %d"
IDS_WELCOME_TITLE "Benvenuto!\n\n"
IDS_WELCOME_TEXT "Scegliere una categoria a sinistra, poi scegliere una applicazione da installare o disinstallare.\nReactOS Web Site: " IDS_WELCOME_TEXT "Scegliere una categoria a sinistra, poi scegliere una applicazione da installare o disinstallare.\nReactOS Web Site: "
IDS_WELCOME_URL "https://reactos.org" IDS_WELCOME_URL "https://reactos.org"
IDS_APPWIZ_TITLE "Add/Remove Programs"
IDS_APPWIZ_TEXT1 "Choose ""Applications"" or ""Updates"" to view the list of applications or updates installed on your system."
IDS_APPWIZ_TEXT2 "To remove a program or to modify its installed components, select it from the list and click on ""Uninstall"" or ""Modify""."
END
STRINGTABLE
BEGIN
IDS_SEARCH_TEXT "Cerca…"
IDS_APPS_COUNT "Numero applicazioni: %d"
IDS_APPS_SELECT_COUNT "; Selezionate: %d"
IDS_INSTALLED "Installato" IDS_INSTALLED "Installato"
IDS_AVAILABLEFORINST "Disponibile per l'installazione" IDS_AVAILABLEFORINST "Disponibile per l'installazione"
IDS_UPDATES "Aggiornamenti" IDS_UPDATES "Aggiornamenti"

View file

@ -23,9 +23,9 @@ BEGIN
MENUITEM "アンインストール(&U)\tCtrl+Del", ID_UNINSTALL MENUITEM "アンインストール(&U)\tCtrl+Del", ID_UNINSTALL
MENUITEM "変更(&M)", ID_MODIFY MENUITEM "変更(&M)", ID_MODIFY
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "レジストリから削除(&E)\tF5", ID_REGREMOVE MENUITEM "レジストリから削除(&E)", ID_REGREMOVE
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "更新(&R)", ID_REFRESH MENUITEM "更新(&R)\tF5", ID_REFRESH
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "データベースの更新(&B)\tCtrl+F5", ID_RESETDB MENUITEM "データベースの更新(&B)\tCtrl+F5", ID_RESETDB
END END
@ -45,22 +45,6 @@ BEGIN
END END
END END
IDR_APPLICATIONMENU MENU
BEGIN
POPUP ""
BEGIN
MENUITEM "インストール(&I)\tCtrl+Enter", ID_INSTALL
MENUITEM "アンインストール(&U)\tCtrl+Del", ID_UNINSTALL
MENUITEM "変更(&M)", ID_MODIFY
MENUITEM SEPARATOR
MENUITEM "レジストリから削除(&E)\tF5", ID_REGREMOVE
MENUITEM SEPARATOR
MENUITEM "更新(&R)", ID_REFRESH
MENUITEM SEPARATOR
MENUITEM "データベースの更新(&B)\tCtrl+F5", ID_RESETDB
END
END
IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265 IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "設定" CAPTION "設定"
@ -190,11 +174,20 @@ STRINGTABLE
BEGIN BEGIN
IDS_APPTITLE "ReactOS アプリ マネージャ" IDS_APPTITLE "ReactOS アプリ マネージャ"
IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev" IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev"
IDS_SEARCH_TEXT "検索..." IDS_WELCOME_TITLE "ReactOS アプリ マネージャへようこそ!"
IDS_APPS_COUNT "アプリ数: %d; Selected: %d"
IDS_WELCOME_TITLE "ReactOS アプリ マネージャへようこそ!\n\n"
IDS_WELCOME_TEXT "左側からカテゴリを選択し、インストールまたはアンインストールするアプリを選んでください。\nReactOS ウェブ サイト: " IDS_WELCOME_TEXT "左側からカテゴリを選択し、インストールまたはアンインストールするアプリを選んでください。\nReactOS ウェブ サイト: "
IDS_WELCOME_URL "https://reactos.org" IDS_WELCOME_URL "https://reactos.org"
IDS_APPWIZ_TITLE "Add/Remove Programs"
IDS_APPWIZ_TEXT1 "Choose ""Applications"" or ""Updates"" to view the list of applications or updates installed on your system."
IDS_APPWIZ_TEXT2 "To remove a program or to modify its installed components, select it from the list and click on ""Uninstall"" or ""Modify""."
END
STRINGTABLE
BEGIN
IDS_SEARCH_TEXT "検索..."
IDS_APPS_COUNT "アプリ数: %d"
IDS_APPS_SELECT_COUNT "; Selected: %d"
IDS_INSTALLED "インストール済み" IDS_INSTALLED "インストール済み"
IDS_AVAILABLEFORINST "インストール可能" IDS_AVAILABLEFORINST "インストール可能"
IDS_UPDATES "更新" IDS_UPDATES "更新"

View file

@ -43,22 +43,6 @@ BEGIN
END END
END END
IDR_APPLICATIONMENU MENU
BEGIN
POPUP ""
BEGIN
MENUITEM "&Installere\tCtrl+Enter", ID_INSTALL
MENUITEM "&Avinstallere\tCtrl+Del", ID_UNINSTALL
MENUITEM "E&ndre", ID_MODIFY
MENUITEM SEPARATOR
MENUITEM "R&emove from Registry", ID_REGREMOVE
MENUITEM SEPARATOR
MENUITEM "Oppdate&r\tF5", ID_REFRESH
MENUITEM SEPARATOR
MENUITEM "Update Data&base\tCtrl+F5", ID_RESETDB
END
END
IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265 IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Settings" CAPTION "Settings"
@ -188,11 +172,20 @@ STRINGTABLE
BEGIN BEGIN
IDS_APPTITLE "ReactOS programbehandler" IDS_APPTITLE "ReactOS programbehandler"
IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev" IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev"
IDS_SEARCH_TEXT "Søk…" IDS_WELCOME_TITLE "Velkommen til ReactOS programbehandler!"
IDS_APPS_COUNT "Program oppsummering: %d; Selected: %d"
IDS_WELCOME_TITLE "Velkommen til ReactOS programbehandler!\n\n"
IDS_WELCOME_TEXT "Velg en kategori til venstre, og velg et program for installere eller avinstallere programvaren.\nReactOS internettside: " IDS_WELCOME_TEXT "Velg en kategori til venstre, og velg et program for installere eller avinstallere programvaren.\nReactOS internettside: "
IDS_WELCOME_URL "https://reactos.org" IDS_WELCOME_URL "https://reactos.org"
IDS_APPWIZ_TITLE "Add/Remove Programs"
IDS_APPWIZ_TEXT1 "Choose ""Applications"" or ""Updates"" to view the list of applications or updates installed on your system."
IDS_APPWIZ_TEXT2 "To remove a program or to modify its installed components, select it from the list and click on ""Uninstall"" or ""Modify""."
END
STRINGTABLE
BEGIN
IDS_SEARCH_TEXT "Søk…"
IDS_APPS_COUNT "Program oppsummering: %d"
IDS_APPS_SELECT_COUNT "; Selected: %d"
IDS_INSTALLED "Installert" IDS_INSTALLED "Installert"
IDS_AVAILABLEFORINST "Tilgjengelig for installasjon" IDS_AVAILABLEFORINST "Tilgjengelig for installasjon"
IDS_UPDATES "Oppdateringer" IDS_UPDATES "Oppdateringer"

View file

@ -45,22 +45,6 @@ BEGIN
END END
END END
IDR_APPLICATIONMENU MENU
BEGIN
POPUP ""
BEGIN
MENUITEM "&Instaluj\tCtrl+Enter", ID_INSTALL
MENUITEM "Odinstal&uj\tCtrl+Del", ID_UNINSTALL
MENUITEM "&Modyfikuj", ID_MODIFY
MENUITEM SEPARATOR
MENUITEM "Usuń z r&ejestru", ID_REGREMOVE
MENUITEM SEPARATOR
MENUITEM "&Odśwież\tF5", ID_REFRESH
MENUITEM SEPARATOR
MENUITEM "Aktualizuj &bazę programów\tCtrl+F5", ID_RESETDB
END
END
IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265 IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Ustawienia" CAPTION "Ustawienia"
@ -190,11 +174,20 @@ STRINGTABLE
BEGIN BEGIN
IDS_APPTITLE "Menedżer aplikacji ReactOS" IDS_APPTITLE "Menedżer aplikacji ReactOS"
IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev" IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev"
IDS_SEARCH_TEXT "Szukaj…" IDS_WELCOME_TITLE "Witamy w Menedżerze aplikacji ReactOS!"
IDS_APPS_COUNT "Liczba aplikacji: %d; Wybranych: %d"
IDS_WELCOME_TITLE "Witamy w Menedżerze aplikacji ReactOS!\n\n"
IDS_WELCOME_TEXT "Z listy po lewej wybierz kategorię, a następnie aplikację, by ją zainstalować lub odinstalować.\nStrona projektu ReactOS: " IDS_WELCOME_TEXT "Z listy po lewej wybierz kategorię, a następnie aplikację, by ją zainstalować lub odinstalować.\nStrona projektu ReactOS: "
IDS_WELCOME_URL "https://reactos.org" IDS_WELCOME_URL "https://reactos.org"
IDS_APPWIZ_TITLE "Add/Remove Programs"
IDS_APPWIZ_TEXT1 "Choose ""Applications"" or ""Updates"" to view the list of applications or updates installed on your system."
IDS_APPWIZ_TEXT2 "To remove a program or to modify its installed components, select it from the list and click on ""Uninstall"" or ""Modify""."
END
STRINGTABLE
BEGIN
IDS_SEARCH_TEXT "Szukaj…"
IDS_APPS_COUNT "Liczba aplikacji: %d"
IDS_APPS_SELECT_COUNT "; Wybranych: %d"
IDS_INSTALLED "Zainstalowane" IDS_INSTALLED "Zainstalowane"
IDS_AVAILABLEFORINST "Dostępne" IDS_AVAILABLEFORINST "Dostępne"
IDS_UPDATES "Uaktualnienia" IDS_UPDATES "Uaktualnienia"

View file

@ -17,7 +17,7 @@ BEGIN
END END
POPUP "&Programas" POPUP "&Programas"
BEGIN BEGIN
MENUITEM "I&nstalar\tCtrl+Enter", ID_INSTALL MENUITEM "&Instalar\tCtrl+Enter", ID_INSTALL
MENUITEM "&Desinstalar\tCtrl+Del", ID_UNINSTALL MENUITEM "&Desinstalar\tCtrl+Del", ID_UNINSTALL
MENUITEM "&Modificar", ID_MODIFY MENUITEM "&Modificar", ID_MODIFY
MENUITEM SEPARATOR MENUITEM SEPARATOR
@ -43,22 +43,6 @@ BEGIN
END END
END END
IDR_APPLICATIONMENU MENU
BEGIN
POPUP ""
BEGIN
MENUITEM "&Instalar\tCtrl+Enter", ID_INSTALL
MENUITEM "&Desinstalar\tCtrl+Del", ID_UNINSTALL
MENUITEM "&Modificar", ID_MODIFY
MENUITEM SEPARATOR
MENUITEM "R&emover do Registro", ID_REGREMOVE
MENUITEM SEPARATOR
MENUITEM "Atualiza&r\tF5", ID_REFRESH
MENUITEM SEPARATOR
MENUITEM "Update Data&base\tCtrl+F5", ID_RESETDB
END
END
IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265 IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Configurações" CAPTION "Configurações"
@ -188,11 +172,20 @@ STRINGTABLE
BEGIN BEGIN
IDS_APPTITLE "Central de Aplicativos ReactOS" IDS_APPTITLE "Central de Aplicativos ReactOS"
IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev" IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev"
IDS_SEARCH_TEXT "Procurar…" IDS_WELCOME_TITLE "Bem-vindo(a) a Central de Aplicativos ReactOS!"
IDS_APPS_COUNT "Número de aplicativos: %d; Selected: %d"
IDS_WELCOME_TITLE "Bem-vindo(a) a Central de Aplicativos ReactOS!\n\n"
IDS_WELCOME_TEXT "Escolha uma categoria à esquerda, então escolha um aplicativo para instalar ou desinstalar.\nWeb Site ReactOS: " IDS_WELCOME_TEXT "Escolha uma categoria à esquerda, então escolha um aplicativo para instalar ou desinstalar.\nWeb Site ReactOS: "
IDS_WELCOME_URL "https://reactos.org" IDS_WELCOME_URL "https://reactos.org"
IDS_APPWIZ_TITLE "Add/Remove Programs"
IDS_APPWIZ_TEXT1 "Choose ""Applications"" or ""Updates"" to view the list of applications or updates installed on your system."
IDS_APPWIZ_TEXT2 "To remove a program or to modify its installed components, select it from the list and click on ""Uninstall"" or ""Modify""."
END
STRINGTABLE
BEGIN
IDS_SEARCH_TEXT "Procurar…"
IDS_APPS_COUNT "Número de aplicativos: %d"
IDS_APPS_SELECT_COUNT "; Selected: %d"
IDS_INSTALLED "Instalado" IDS_INSTALLED "Instalado"
IDS_AVAILABLEFORINST "Disponível para instalação" IDS_AVAILABLEFORINST "Disponível para instalação"
IDS_UPDATES "Atualizações" IDS_UPDATES "Atualizações"

View file

@ -43,22 +43,6 @@ BEGIN
END END
END END
IDR_APPLICATIONMENU MENU
BEGIN
POPUP ""
BEGIN
MENUITEM "&Instalar\tCtrl+Enter", ID_INSTALL
MENUITEM "&Desinstalar\tCtrl+Del", ID_UNINSTALL
MENUITEM "&Modificar", ID_MODIFY
MENUITEM SEPARATOR
MENUITEM "R&emover do Registo", ID_REGREMOVE
MENUITEM SEPARATOR
MENUITEM "Actualiza&r\tF5", ID_REFRESH
MENUITEM SEPARATOR
MENUITEM "Actualizar &Base de dados\tCtrl+F5", ID_RESETDB
END
END
IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265 IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Configurações" CAPTION "Configurações"
@ -188,11 +172,20 @@ STRINGTABLE
BEGIN BEGIN
IDS_APPTITLE "Central de aplicações ReactOS" IDS_APPTITLE "Central de aplicações ReactOS"
IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev" IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev"
IDS_SEARCH_TEXT "Procurar…" IDS_WELCOME_TITLE "Bem-vindo(a) à Central de aplicações ReactOS!"
IDS_APPS_COUNT "Número de aplicações: %d; Seleccionadas: %d"
IDS_WELCOME_TITLE "Bem-vindo(a) à Central de aplicações ReactOS!\n\n"
IDS_WELCOME_TEXT "Escolha uma categoria à esquerda, de seguida escolha uma aplicação para instalar ou desinstalar.\nWeb Site ReactOS: " IDS_WELCOME_TEXT "Escolha uma categoria à esquerda, de seguida escolha uma aplicação para instalar ou desinstalar.\nWeb Site ReactOS: "
IDS_WELCOME_URL "https://reactos.org" IDS_WELCOME_URL "https://reactos.org"
IDS_APPWIZ_TITLE "Add/Remove Programs"
IDS_APPWIZ_TEXT1 "Choose ""Applications"" or ""Updates"" to view the list of applications or updates installed on your system."
IDS_APPWIZ_TEXT2 "To remove a program or to modify its installed components, select it from the list and click on ""Uninstall"" or ""Modify""."
END
STRINGTABLE
BEGIN
IDS_SEARCH_TEXT "Procurar…"
IDS_APPS_COUNT "Número de aplicações: %d"
IDS_APPS_SELECT_COUNT "; Seleccionadas: %d"
IDS_INSTALLED "Instalado" IDS_INSTALLED "Instalado"
IDS_AVAILABLEFORINST "Disponível para instalação" IDS_AVAILABLEFORINST "Disponível para instalação"
IDS_UPDATES "Actualizações" IDS_UPDATES "Actualizações"

View file

@ -27,7 +27,7 @@ BEGIN
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "Împ&rospătare\tF5", ID_REFRESH MENUITEM "Împ&rospătare\tF5", ID_REFRESH
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "&Actualizare baza de date\tCtrl+F5", ID_RESETDB MENUITEM "&Actualizare a bazei de date\tCtrl+F5", ID_RESETDB
END END
POPUP "Aj&utor" POPUP "Aj&utor"
BEGIN BEGIN
@ -45,22 +45,6 @@ BEGIN
END END
END END
IDR_APPLICATIONMENU MENU
BEGIN
POPUP ""
BEGIN
MENUITEM "&Instalare\tCtrl+Enter", ID_INSTALL
MENUITEM "&Dezinstalare\tCtrl+Del", ID_UNINSTALL
MENUITEM "&Modificare", ID_MODIFY
MENUITEM SEPARATOR
MENUITEM "&Eliminare din registru", ID_REGREMOVE
MENUITEM SEPARATOR
MENUITEM "Împ&rospătare\tF5", ID_REFRESH
MENUITEM SEPARATOR
MENUITEM "&Actualizare a bazei de date\tCtrl+F5", ID_RESETDB
END
END
IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265 IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Setări" CAPTION "Setări"
@ -190,11 +174,20 @@ STRINGTABLE
BEGIN BEGIN
IDS_APPTITLE "Managerul de aplicații ReactOS" IDS_APPTITLE "Managerul de aplicații ReactOS"
IDS_APP_AUTHORS "Marcă înregistrată 2009 Dmitry Chapyshev" IDS_APP_AUTHORS "Marcă înregistrată 2009 Dmitry Chapyshev"
IDS_SEARCH_TEXT "Căutare…" IDS_WELCOME_TITLE "Bun venit la Managerul de aplicații ReactOS!"
IDS_APPS_COUNT "Numărul de programe: %d; Selectate: %d"
IDS_WELCOME_TITLE "Bun venit la Managerul de aplicații ReactOS!\n\n"
IDS_WELCOME_TEXT "Alegeți o categorie din stânga, apoi alegeți o aplicație pentru a o instala sau dezinstala.\nArdesa web ReactOS: " IDS_WELCOME_TEXT "Alegeți o categorie din stânga, apoi alegeți o aplicație pentru a o instala sau dezinstala.\nArdesa web ReactOS: "
IDS_WELCOME_URL "https://reactos.org" IDS_WELCOME_URL "https://reactos.org"
IDS_APPWIZ_TITLE "Adăugare/Eliminare de programe"
IDS_APPWIZ_TEXT1 "Alegeți ""Aplicații"" sau ""Actualizări"" pentru a vedea lista aplicațiilor sau a actualizărilor instalate pe sistem."
IDS_APPWIZ_TEXT2 "Pentru a elimina un program sau pentru a-i modifica componentele instalate, selectați-l din listă și faceți clic pe ""Dezinstalare"" sau pe ""Modificare""."
END
STRINGTABLE
BEGIN
IDS_SEARCH_TEXT "Căutare…"
IDS_APPS_COUNT "Numărul de programe: %d"
IDS_APPS_SELECT_COUNT "; Selectate: %d"
IDS_INSTALLED "Instalate" IDS_INSTALLED "Instalate"
IDS_AVAILABLEFORINST "Disponibile pentru instalare" IDS_AVAILABLEFORINST "Disponibile pentru instalare"
IDS_UPDATES "Actualizări" IDS_UPDATES "Actualizări"
@ -254,9 +247,9 @@ END
STRINGTABLE STRINGTABLE
BEGIN BEGIN
IDS_DL_DIALOG_DB_DISP "Aplicații baza de date" IDS_DL_DIALOG_DB_DISP "Aplicații pentru baza de date"
IDS_DL_DIALOG_DB_DOWNLOAD_DISP "Actualizare bază de date…" IDS_DL_DIALOG_DB_DOWNLOAD_DISP "Actualizare a bazei de date…"
IDS_DL_DIALOG_DB_UNOFFICIAL_DOWNLOAD_DISP "Actualizare bază de date… (Sursă neoficială)" IDS_DL_DIALOG_DB_UNOFFICIAL_DOWNLOAD_DISP "Actualizare a bazei de date… (Sursă neoficială)"
END END
STRINGTABLE STRINGTABLE
@ -268,7 +261,7 @@ BEGIN
IDS_CMD_INVALID_OPTION "Eroare: opțiunea de linie de comandă specificată este necunoscută sau nevalidă.\n" IDS_CMD_INVALID_OPTION "Eroare: opțiunea de linie de comandă specificată este necunoscută sau nevalidă.\n"
IDS_CMD_FIND_RESULT_FOR "Rezultatele căutării pentru %1:\n" IDS_CMD_FIND_RESULT_FOR "Rezultatele căutării pentru %1:\n"
IDS_CMD_PACKAGE_NOT_FOUND "Nu se poate găsi pachetul %1.\n" IDS_CMD_PACKAGE_NOT_FOUND "Nu se poate găsi pachetul %1.\n"
IDS_CMD_PACKAGE_INFO "Informații despre pachet %1:\n" IDS_CMD_PACKAGE_INFO "Informații despre pachetul %1:\n"
END END
STRINGTABLE STRINGTABLE

View file

@ -48,22 +48,6 @@ BEGIN
END END
END END
IDR_APPLICATIONMENU MENU
BEGIN
POPUP ""
BEGIN
MENUITEM "У&становить\tCtrl+Enter", ID_INSTALL
MENUITEM "&Удалить\tCtrl+Del", ID_UNINSTALL
MENUITEM "&Изменить", ID_MODIFY
MENUITEM SEPARATOR
MENUITEM "У&далить из реестра", ID_REGREMOVE
MENUITEM SEPARATOR
MENUITEM "&Обновить\tF5", ID_REFRESH
MENUITEM SEPARATOR
MENUITEM "Обновить &базу данных\tCtrl+F5", ID_RESETDB
END
END
IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265 IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Параметры" CAPTION "Параметры"
@ -193,11 +177,20 @@ STRINGTABLE
BEGIN BEGIN
IDS_APPTITLE "Менеджер приложений ReactOS" IDS_APPTITLE "Менеджер приложений ReactOS"
IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev" IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev"
IDS_SEARCH_TEXT "Поиск…" IDS_WELCOME_TITLE "Добро пожаловать в ""Менеджер приложений ReactOS""!"
IDS_APPS_COUNT "Количество приложений: %d; Выбрано: %d"
IDS_WELCOME_TITLE "Добро пожаловать в ""Менеджер приложений ReactOS""!\n\n"
IDS_WELCOME_TEXT "Выберите категорию слева и приложение для установки или удаления.\nСайт ReactOS: " IDS_WELCOME_TEXT "Выберите категорию слева и приложение для установки или удаления.\nСайт ReactOS: "
IDS_WELCOME_URL "https://reactos.org" IDS_WELCOME_URL "https://reactos.org"
IDS_APPWIZ_TITLE "Add/Remove Programs"
IDS_APPWIZ_TEXT1 "Choose ""Applications"" or ""Updates"" to view the list of applications or updates installed on your system."
IDS_APPWIZ_TEXT2 "To remove a program or to modify its installed components, select it from the list and click on ""Uninstall"" or ""Modify""."
END
STRINGTABLE
BEGIN
IDS_SEARCH_TEXT "Поиск…"
IDS_APPS_COUNT "Количество приложений: %d"
IDS_APPS_SELECT_COUNT "; Выбрано: %d"
IDS_INSTALLED "Установленные" IDS_INSTALLED "Установленные"
IDS_AVAILABLEFORINST "Доступно для установки" IDS_AVAILABLEFORINST "Доступно для установки"
IDS_UPDATES "Обновления" IDS_UPDATES "Обновления"

View file

@ -2,7 +2,8 @@
* PROJECT: ReactOS Applications Manager * PROJECT: ReactOS Applications Manager
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
* PURPOSE: Slovak resource file * PURPOSE: Slovak resource file
* TRANSLATOR: Copyright 2009-2010 Mário Kačmár <kario@szm.sk> * TRANSLATORS: Copyright 2009-2010 Mário Kačmár <kario@szm.sk>
* Copyright 2024 Václav Zouzalík (Venca24) <vaclav.zouzalik@seznam.cz>
*/ */
LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT
@ -25,12 +26,12 @@ BEGIN
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "&Obnoviť\tF5", ID_REFRESH MENUITEM "&Obnoviť\tF5", ID_REFRESH
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "Update Data&base\tCtrl+F5", ID_RESETDB MENUITEM "Aktualizovať data&bázu\tCtrl+F5", ID_RESETDB
END END
POPUP "Pomocník" POPUP "Pomocník"
BEGIN BEGIN
MENUITEM "Pomocník\tF1", ID_HELP, GRAYED MENUITEM "Pomocník\tF1", ID_HELP, GRAYED
MENUITEM "Čo je", ID_ABOUT MENUITEM "O programe", ID_ABOUT
END END
END END
@ -38,24 +39,8 @@ IDR_LINKMENU MENU
BEGIN BEGIN
POPUP "" POPUP ""
BEGIN BEGIN
MENUITEM "&Otvoriť linku v prehliadači", ID_OPEN_LINK MENUITEM "&Otvoriť odkaz v prehliadači", ID_OPEN_LINK
MENUITEM "&Kopírovať linku do schránky", ID_COPY_LINK MENUITEM "&Kopírovať odkaz do schránky", ID_COPY_LINK
END
END
IDR_APPLICATIONMENU MENU
BEGIN
POPUP ""
BEGIN
MENUITEM "&Inštalovať\tCtrl+Enter", ID_INSTALL
MENUITEM "O&dinštalovať\tCtrl+Del", ID_UNINSTALL
MENUITEM "Z&meniť", ID_MODIFY
MENUITEM SEPARATOR
MENUITEM "Odstrániť z R&egistrov", ID_REGREMOVE
MENUITEM SEPARATOR
MENUITEM "&Obnoviť\tF5", ID_REFRESH
MENUITEM SEPARATOR
MENUITEM "Update Data&base\tCtrl+F5", ID_RESETDB
END END
END END
@ -73,16 +58,16 @@ BEGIN
EDITTEXT IDC_DOWNLOAD_DIR_EDIT, 15, 86, 166, 12, WS_CHILD | WS_VISIBLE | WS_GROUP | ES_AUTOHSCROLL EDITTEXT IDC_DOWNLOAD_DIR_EDIT, 15, 86, 166, 12, WS_CHILD | WS_VISIBLE | WS_GROUP | ES_AUTOHSCROLL
PUSHBUTTON "&Vybrať", IDC_CHOOSE, 187, 85, 50, 14 PUSHBUTTON "&Vybrať", IDC_CHOOSE, 187, 85, 50, 14
AUTOCHECKBOX "&Zmazať inštalačné programy po nainštalovaní", IDC_DEL_AFTER_INSTALL, 16, 100, 218, 12 AUTOCHECKBOX "&Zmazať inštalačné programy po nainštalovaní", IDC_DEL_AFTER_INSTALL, 16, 100, 218, 12
GROUPBOX "Software source", -1, 4, 118, 240, 46 GROUPBOX "Zdroj softvéru", -1, 4, 118, 240, 46
AUTORADIOBUTTON "Use default", IDC_SOURCE_DEFAULT, 15, 132, 74, 10, WS_GROUP | WS_TABSTOP AUTORADIOBUTTON "Použiť predvolené", IDC_SOURCE_DEFAULT, 15, 132, 74, 10, WS_GROUP | WS_TABSTOP
AUTORADIOBUTTON "Specified source", IDC_USE_SOURCE, 15, 147, 74, 10 AUTORADIOBUTTON "Vlastný zdroj", IDC_USE_SOURCE, 15, 147, 74, 10
EDITTEXT IDC_SOURCE_URL, 97, 147, 140, 12, ES_AUTOHSCROLL | WS_DISABLED EDITTEXT IDC_SOURCE_URL, 97, 147, 140, 12, ES_AUTOHSCROLL | WS_DISABLED
GROUPBOX "Proxy", -1, 4, 166, 240, 76 GROUPBOX "Proxy", -1, 4, 166, 240, 76
AUTORADIOBUTTON "System proxy settings", IDC_PROXY_DEFAULT, 15, 180, 210, 10, WS_GROUP | WS_TABSTOP AUTORADIOBUTTON "Systémové nastavenia proxy", IDC_PROXY_DEFAULT, 15, 180, 210, 10, WS_GROUP | WS_TABSTOP
AUTORADIOBUTTON "Direct (No proxy)", IDC_NO_PROXY, 15, 195, 210, 10 AUTORADIOBUTTON "Bez proxy servera", IDC_NO_PROXY, 15, 195, 210, 10
AUTORADIOBUTTON "Proxy", IDC_USE_PROXY, 15, 210, 74, 10 AUTORADIOBUTTON "Proxy", IDC_USE_PROXY, 15, 210, 74, 10
EDITTEXT IDC_PROXY_SERVER, 90, 210, 147, 12, ES_AUTOHSCROLL | WS_DISABLED EDITTEXT IDC_PROXY_SERVER, 90, 210, 147, 12, ES_AUTOHSCROLL | WS_DISABLED
LTEXT "No proxy for", -1, 26, 226, 64, 10 LTEXT "Žiadna proxy pre", -1, 26, 226, 64, 10
EDITTEXT IDC_NO_PROXY_FOR, 90, 225, 147, 12, ES_AUTOHSCROLL | WS_DISABLED EDITTEXT IDC_NO_PROXY_FOR, 90, 225, 147, 12, ES_AUTOHSCROLL | WS_DISABLED
PUSHBUTTON "Predvolené", IDC_DEFAULT_SETTINGS, 8, 245, 60, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "Predvolené", IDC_DEFAULT_SETTINGS, 8, 245, 60, 14, WS_GROUP | WS_TABSTOP
DEFPUSHBUTTON "OK", IDOK, 116, 245, 60, 14 DEFPUSHBUTTON "OK", IDOK, 116, 245, 60, 14
@ -116,10 +101,10 @@ BEGIN
IDS_TOOLTIP_INSTALL "Inštalovať" IDS_TOOLTIP_INSTALL "Inštalovať"
IDS_TOOLTIP_UNINSTALL "Odinštalovať" IDS_TOOLTIP_UNINSTALL "Odinštalovať"
IDS_TOOLTIP_MODIFY "Zmeniť" IDS_TOOLTIP_MODIFY "Zmeniť"
IDS_TOOLTIP_SELECT_ALL "Select/Deselect All" IDS_TOOLTIP_SELECT_ALL "Vybrať všetky/Zrušiť výber"
IDS_TOOLTIP_SETTINGS "Nastavenia" IDS_TOOLTIP_SETTINGS "Nastavenia"
IDS_TOOLTIP_REFRESH "Obnoviť" IDS_TOOLTIP_REFRESH "Obnoviť"
IDS_TOOLTIP_UPDATE_DB "Update Database" IDS_TOOLTIP_UPDATE_DB "Aktualizovať databázu"
IDS_TOOLTIP_EXIT "Skončiť" IDS_TOOLTIP_EXIT "Skončiť"
END END
@ -135,102 +120,111 @@ BEGIN
IDS_INFO_VERSION "\nVerzia: " IDS_INFO_VERSION "\nVerzia: "
IDS_INFO_DESCRIPTION "\nPopis: " IDS_INFO_DESCRIPTION "\nPopis: "
IDS_INFO_PUBLISHER "\nVydavateľ: " IDS_INFO_PUBLISHER "\nVydavateľ: "
IDS_INFO_HELPLINK "\nHelp Link: " IDS_INFO_HELPLINK "\nInternetová pomoc: "
IDS_INFO_HELPPHONE "\nHelp Telephone: " IDS_INFO_HELPPHONE "\nTelefonická pomoc: "
IDS_INFO_README "\nČítajMa: " IDS_INFO_README "\nReadme: "
IDS_INFO_REGOWNER "\nRegistrovaný vlastník: " IDS_INFO_REGOWNER "\nRegistrovaný vlastník: "
IDS_INFO_PRODUCTID "\nID Produktu: " IDS_INFO_PRODUCTID "\nID Produktu: "
IDS_INFO_CONTACT "\nKontakt: " IDS_INFO_CONTACT "\nKontakt: "
IDS_INFO_UPDATEINFO "\nUpdate Information: " IDS_INFO_UPDATEINFO "\nInformácie o aktualizáciach: "
IDS_INFO_INFOABOUT "\nInformation About: " IDS_INFO_INFOABOUT "\nInformácie o programe: "
IDS_INFO_COMMENTS "\nComments: " IDS_INFO_COMMENTS "\nKomentáre: "
IDS_INFO_INSTLOCATION "\nInstall Location: " IDS_INFO_INSTLOCATION "\nUmiestnenie inštalácie: "
IDS_INFO_INSTALLSRC "\nInstall Source: " IDS_INFO_INSTALLSRC "\nZdroj inštalácie: "
IDS_INFO_UNINSTALLSTR "\nUninstall String: " IDS_INFO_UNINSTALLSTR "\nOdinstalačný reťazec: "
IDS_INFO_MODIFYPATH "\nModify Path: " IDS_INFO_MODIFYPATH "\nModify Path: "
IDS_INFO_INSTALLDATE "\nDátum inštalácie: " IDS_INFO_INSTALLDATE "\nDátum inštalácie: "
IDS_AINFO_PACKAGE_NAME "\nPackage Name: " IDS_AINFO_PACKAGE_NAME "\nNázov balíčka: "
END END
STRINGTABLE STRINGTABLE
BEGIN BEGIN
IDS_AINFO_VERSION "\nVerzia: " IDS_AINFO_VERSION "\nVerzia: "
IDS_AINFO_AVAILABLEVERSION "\nAvailable Version: " IDS_AINFO_AVAILABLEVERSION "\nDostupná verzia: "
IDS_AINFO_DESCRIPTION "\nPopis: " IDS_AINFO_DESCRIPTION "\nPopis: "
IDS_AINFO_SIZE "\nVeľkosť: " IDS_AINFO_SIZE "\nVeľkosť: "
IDS_AINFO_URLSITE "\nDomovská stránka: " IDS_AINFO_URLSITE "\nDomovská stránka: "
IDS_AINFO_LICENSE "\nLicencia: " IDS_AINFO_LICENSE "\nLicencia: "
IDS_AINFO_URLDOWNLOAD "\nStiahnuť: " IDS_AINFO_URLDOWNLOAD "\nStiahnuť: "
IDS_AINFO_LANGUAGES "\nLanguages: " IDS_AINFO_LANGUAGES "\nJazyky: "
END END
STRINGTABLE STRINGTABLE
BEGIN BEGIN
IDS_CAT_AUDIO "Audio" IDS_CAT_AUDIO "Audio"
IDS_CAT_DEVEL "Vývojárske" IDS_CAT_DEVEL "Vývoj"
IDS_CAT_DRIVERS "Ovládače" IDS_CAT_DRIVERS "Ovládače"
IDS_CAT_EDU "Vzdelávacie" IDS_CAT_EDU "Vzdelávanie"
IDS_CAT_ENGINEER "Inžinierske" IDS_CAT_ENGINEER "Strojírenstvo"
IDS_CAT_FINANCE "Finančné" IDS_CAT_FINANCE "Financie"
IDS_CAT_GAMES "Hry & zábava" IDS_CAT_GAMES "Hry & zábava"
IDS_CAT_GRAPHICS "Grafické" IDS_CAT_GRAPHICS "Grafika"
IDS_CAT_INTERNET "Internet & sieť" IDS_CAT_INTERNET "Internet a siete"
IDS_CAT_LIBS "Knižnice" IDS_CAT_LIBS "Knižnice"
IDS_CAT_OFFICE "Kancelárske" IDS_CAT_OFFICE "Kancelária"
IDS_CAT_OTHER "Iné" IDS_CAT_OTHER "Ostatné"
IDS_CAT_SCIENCE "Vedecké" IDS_CAT_SCIENCE "Veda"
IDS_CAT_TOOLS "Nástroje" IDS_CAT_TOOLS "Nástroje"
IDS_CAT_VIDEO "Video" IDS_CAT_VIDEO "Video"
IDS_CAT_THEMES "Themes" IDS_CAT_THEMES "Vzhľad"
END END
STRINGTABLE STRINGTABLE
BEGIN BEGIN
IDS_APPTITLE "Manažér aplikácií systému ReactOS" IDS_APPTITLE "Manažér aplikácií systému ReactOS"
IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev" IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev"
IDS_SEARCH_TEXT "Hľadať…" IDS_WELCOME_TITLE "Víta Vás Manažér aplikácií systému ReactOS!"
IDS_APPS_COUNT "Počet programov: %d; Selected: %d"
IDS_WELCOME_TITLE "Víta Vás Manažér aplikácií systému ReactOS!\n\n"
IDS_WELCOME_TEXT "Vyberte si kategóriu na ľavej strane, potom vyberte aplikáciu, ktorú chcete nainštalovať alebo odinštalovať.\nWebstránka projektu ReactOS: " IDS_WELCOME_TEXT "Vyberte si kategóriu na ľavej strane, potom vyberte aplikáciu, ktorú chcete nainštalovať alebo odinštalovať.\nWebstránka projektu ReactOS: "
IDS_WELCOME_URL "https://reactos.org" IDS_WELCOME_URL "https://reactos.org"
IDS_APPWIZ_TITLE "Pridať/Odobrať programy"
IDS_APPWIZ_TEXT1 "Vyberte ""Aplikácie"" alebo ""Aktualizácie"" pre zobrazenie zoznamu aplikácií alebo aktualizácií nainštalovaných vo vašom systéme."
IDS_APPWIZ_TEXT2 "Pre odobranie programu alebo pre zmenu jeho inštalovaných komponentov, ho vyberte zo zoznamu a kliknite na ""Odinštalovať"" alebo ""Upraviť""."
END
STRINGTABLE
BEGIN
IDS_SEARCH_TEXT "Hľadať…"
IDS_APPS_COUNT "Počet programov: %d"
IDS_APPS_SELECT_COUNT "; Vybrané: %d"
IDS_INSTALLED "Nainštalované" IDS_INSTALLED "Nainštalované"
IDS_AVAILABLEFORINST "Dostupné pre nainštalovanie" IDS_AVAILABLEFORINST "Dostupné pre nainštalovanie"
IDS_UPDATES "Aktualizácie" IDS_UPDATES "Aktualizácie"
IDS_APPLICATIONS "Aplikácie" IDS_APPLICATIONS "Aplikácie"
IDS_CHOOSE_FOLDER_TEXT "Vyberte priečinok, ktorý sa použije pre sťahovanie programov:" IDS_CHOOSE_FOLDER_TEXT "Vyberte priečinok, ktorý sa použije pre sťahovanie programov:"
IDS_CHOOSE_FOLDER_ERROR "Zvolili ste si neexistujúci priečinok!" IDS_CHOOSE_FOLDER_ERROR "Zvolili ste si neexistujúci priečinok!"
IDS_URL_INVALID "The URL you have specified is invalid or not supported. Please correct it!" IDS_URL_INVALID "Vami zadaná URL adresa nie je platná alebo nie je podporovaná. Prosím, opravte ju!"
IDS_APP_REG_REMOVE "Naozaj chcete vymazať údaje o nainštalovanom programe z registrov?" IDS_APP_REG_REMOVE "Naozaj chcete vymazať údaje o nainštalovanom programe z registrov?"
IDS_INFORMATION "Informácie" IDS_INFORMATION "Informácie"
IDS_UNABLE_TO_DOWNLOAD "Unable to download the package! Address not found!" IDS_UNABLE_TO_DOWNLOAD "Súbor sa nepodarilo stiahnuť! Adresa nebola nájdená!"
IDS_UNABLE_TO_DOWNLOAD2 "Unable to download the package! Check Internet Connection!" IDS_UNABLE_TO_DOWNLOAD2 "Balíček sa nepodarilo stiahnuť! Skontrolujte pripojenie k Internetu"
IDS_UNABLE_TO_REMOVE "Nie je možné odstrániť z registrov údaje o programe!" IDS_UNABLE_TO_REMOVE "Nie je možné odstrániť z registrov údaje o programe!"
IDS_UNABLE_TO_INSTALL "Unable to open installer!" IDS_UNABLE_TO_INSTALL "Nepodarilo sa otvoriť inštalátor!"
IDS_UNABLE_TO_QUERY_CERT "Unable to retrieve certificate info.\n\nDo you want to continue anyway?" IDS_UNABLE_TO_QUERY_CERT "Nepodarilo sa získať informácie o certifikáte.\n\nChcete napriek tomu pokračovať?"
IDS_INTEG_CHECK_TITLE "Verifying package integrity…" IDS_INTEG_CHECK_TITLE "Overujem integritu balíčka…"
IDS_INTEG_CHECK_FAIL "The package did not pass the integrity check, it may have been corrupted or tampered with during downloading. Running the software is not recommended." IDS_INTEG_CHECK_FAIL "Balíček neprešiel kontrolou integrity, mohol byť poškodený alebo zmenený počas sťahovania. Spustenie tohto programu sa neodporúča."
IDS_INTERRUPTED_DOWNLOAD "The download was interrupted. Check connection to Internet." IDS_INTERRUPTED_DOWNLOAD "Sťahovanie bolo prerušené. Skontrolujte pripojenie k Internetu."
IDS_UNABLE_TO_WRITE "Unable to write to disk. Disk may be at capacity." IDS_UNABLE_TO_WRITE "Ukladanie na disk sa nepodarilo. Disk môže byť plný."
IDS_INSTALL_SELECTED "Install Selected" IDS_INSTALL_SELECTED "Nainštalovať vybrané"
IDS_SELECTEDFORINST "Selected for installation" IDS_SELECTEDFORINST "Vybrané pre inštaláciu"
IDS_MISMATCH_CERT_INFO "The certificate used is unknown:\nSubject: %s\nIssuer: %s\nDo you want to continue anyway?" IDS_MISMATCH_CERT_INFO "Neznámy certifikát:\nSubjekt: %s\nVydávateľ: %s\nChcete napriek tomu pokračovať?"
IDS_UNABLE_PATH "Incorrect path format." IDS_UNABLE_PATH "Incorrect path format."
IDS_APP_DISPLAY_DETAILS "Details" IDS_APP_DISPLAY_DETAILS "Podrobnosti"
IDS_APP_DISPLAY_LIST "List" IDS_APP_DISPLAY_LIST "Zoznam"
IDS_APP_DISPLAY_TILE "Tile" IDS_APP_DISPLAY_TILE "Dlaždice"
IDS_NO_SEARCH_RESULTS "No search results" IDS_NO_SEARCH_RESULTS "Žiadne výsledky"
END END
STRINGTABLE STRINGTABLE
BEGIN BEGIN
IDS_STATUS_INSTALLED "Installed" IDS_STATUS_INSTALLED "Nainstalované"
IDS_STATUS_NOTINSTALLED "Not installed" IDS_STATUS_NOTINSTALLED "Nenainstalované"
IDS_STATUS_DOWNLOADED "Downloaded" IDS_STATUS_DOWNLOADED "Stiahnuté"
IDS_STATUS_UPDATE_AVAILABLE "Update available" IDS_STATUS_UPDATE_AVAILABLE "Aktualizovateľné"
IDS_STATUS_DOWNLOADING "Downloading…" IDS_STATUS_DOWNLOADING "Sťahujem…"
IDS_STATUS_INSTALLING "Installing…" IDS_STATUS_INSTALLING "Inštalujem…"
IDS_STATUS_WAITING "Waiting to install…" IDS_STATUS_WAITING "Čakám na inštaláciu…"
IDS_STATUS_FINISHED "Finished" IDS_STATUS_FINISHED "Dokončené"
END END
STRINGTABLE STRINGTABLE
@ -242,34 +236,34 @@ END
STRINGTABLE STRINGTABLE
BEGIN BEGIN
IDS_LANGUAGE_AVAILABLE_TRANSLATION "Supports your language" IDS_LANGUAGE_AVAILABLE_TRANSLATION "Podporuje váš jazyk"
IDS_LANGUAGE_NO_TRANSLATION "Supports other languages" IDS_LANGUAGE_NO_TRANSLATION "Podporuje iné jazyky"
IDS_LANGUAGE_ENGLISH_TRANSLATION "Supports English" IDS_LANGUAGE_ENGLISH_TRANSLATION "Podporuje angličtinu"
IDS_LANGUAGE_SINGLE "Single language" IDS_LANGUAGE_SINGLE "Jediný jazyk"
IDS_LANGUAGE_MORE_PLACEHOLDER " (+%d more)" IDS_LANGUAGE_MORE_PLACEHOLDER " (+%d ďalších)"
IDS_LANGUAGE_AVAILABLE_PLACEHOLDER " (+%d available)" IDS_LANGUAGE_AVAILABLE_PLACEHOLDER " (+%d dostupných)"
END END
STRINGTABLE STRINGTABLE
BEGIN BEGIN
IDS_DL_DIALOG_DB_DISP "Applications Database" IDS_DL_DIALOG_DB_DISP "Databáza aplikácií"
IDS_DL_DIALOG_DB_DOWNLOAD_DISP "Updating Database…" IDS_DL_DIALOG_DB_DOWNLOAD_DISP "Aktualizujem databázu…"
IDS_DL_DIALOG_DB_UNOFFICIAL_DOWNLOAD_DISP "Updating Database… (Unofficial source)" IDS_DL_DIALOG_DB_UNOFFICIAL_DOWNLOAD_DISP "Aktualizujem databázu… (Neoficiálny zdroj)"
END END
STRINGTABLE STRINGTABLE
BEGIN BEGIN
IDS_CMD_USAGE "Usage: " IDS_CMD_USAGE "Použitie: "
IDS_CMD_NEED_PACKAGE_NAME "Error: option %1 expects one or more package name.\n" IDS_CMD_NEED_PACKAGE_NAME "Chyba: prepínač %1 očakáva jeden alebo viac názvov balíčkov.\n"
IDS_CMD_NEED_FILE_NAME "Error: option %1 expects a file name.\n" IDS_CMD_NEED_FILE_NAME "Chyba: prepínač %1 očakáva názov súboru.\n"
IDS_CMD_NEED_PARAMS "Error: option %1 expects one or more parameters.\n" IDS_CMD_NEED_PARAMS "Chyba: prepínač %1 očakáva jeden alebo viac parametrov.\n"
IDS_CMD_INVALID_OPTION "Error: Unknown or invalid command line option specified.\n" IDS_CMD_INVALID_OPTION "Chyba: Neznámy alebo neplatný prepínač príkazového riadka.\n"
IDS_CMD_FIND_RESULT_FOR "Find result for %1:\n" IDS_CMD_FIND_RESULT_FOR "Nájdi výsledok pre %1:\n"
IDS_CMD_PACKAGE_NOT_FOUND "Failed to find package %1.\n" IDS_CMD_PACKAGE_NOT_FOUND "Nepodarilo sa nájsť balíček %1.\n"
IDS_CMD_PACKAGE_INFO "Information about package %1:\n" IDS_CMD_PACKAGE_INFO "Informácie o balíčku %1:\n"
END END
STRINGTABLE STRINGTABLE
BEGIN BEGIN
IDS_INSTGEN_CONFIRMUNINST "Are you sure you want to uninstall %s?" IDS_INSTGEN_CONFIRMUNINST "Ste si istí, že chcete odinštalovať %s?"
END END

View file

@ -43,22 +43,6 @@ BEGIN
END END
END END
IDR_APPLICATIONMENU MENU
BEGIN
POPUP ""
BEGIN
MENUITEM "&Instalo\tCtrl+Enter", ID_INSTALL
MENUITEM "&Uninstall\tCtrl+Del", ID_UNINSTALL
MENUITEM "&Modifiko", ID_MODIFY
MENUITEM SEPARATOR
MENUITEM "Hiq nga R&egjistri", ID_REGREMOVE
MENUITEM SEPARATOR
MENUITEM "&Rifresko\tF5", ID_REFRESH
MENUITEM SEPARATOR
MENUITEM "Update Data&base\tCtrl+F5", ID_RESETDB
END
END
IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265 IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Konfigurime" CAPTION "Konfigurime"
@ -188,11 +172,20 @@ STRINGTABLE
BEGIN BEGIN
IDS_APPTITLE "ReactOS Applications Manager" IDS_APPTITLE "ReactOS Applications Manager"
IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev" IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev"
IDS_SEARCH_TEXT "Kerko…" IDS_WELCOME_TITLE "Mire Se Erdhe ne ReactOS Applications Manager!"
IDS_APPS_COUNT "Numrimi Aplicacioneve: %d; Selected: %d"
IDS_WELCOME_TITLE "Mire Se Erdhe ne ReactOS Applications Manager!\n\n"
IDS_WELCOME_TEXT "Zgjidh nje kategori ne te majte, pastaj zgjidh nje aplicacion per ta instaluar ose uninstall.\nReactOS Web Site: " IDS_WELCOME_TEXT "Zgjidh nje kategori ne te majte, pastaj zgjidh nje aplicacion per ta instaluar ose uninstall.\nReactOS Web Site: "
IDS_WELCOME_URL "https://reactos.org" IDS_WELCOME_URL "https://reactos.org"
IDS_APPWIZ_TITLE "Add/Remove Programs"
IDS_APPWIZ_TEXT1 "Choose ""Applications"" or ""Updates"" to view the list of applications or updates installed on your system."
IDS_APPWIZ_TEXT2 "To remove a program or to modify its installed components, select it from the list and click on ""Uninstall"" or ""Modify""."
END
STRINGTABLE
BEGIN
IDS_SEARCH_TEXT "Kerko…"
IDS_APPS_COUNT "Numrimi Aplicacioneve: %d"
IDS_APPS_SELECT_COUNT "; Selected: %d"
IDS_INSTALLED "Instaluar" IDS_INSTALLED "Instaluar"
IDS_AVAILABLEFORINST "Te vlefshem per instalim" IDS_AVAILABLEFORINST "Te vlefshem per instalim"
IDS_UPDATES "Updates" IDS_UPDATES "Updates"

View file

@ -43,22 +43,6 @@ BEGIN
END END
END END
IDR_APPLICATIONMENU MENU
BEGIN
POPUP ""
BEGIN
MENUITEM "&Installera\tCtrl+Enter", ID_INSTALL
MENUITEM "&Avinstallera\tCtrl+Del", ID_UNINSTALL
MENUITEM "&Ändra", ID_MODIFY
MENUITEM SEPARATOR
MENUITEM "Ta bort från R&egistret", ID_REGREMOVE
MENUITEM SEPARATOR
MENUITEM "Uppdate&ra\tF5", ID_REFRESH
MENUITEM SEPARATOR
MENUITEM "Update Data&base\tCtrl+F5", ID_RESETDB
END
END
IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265 IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Inställningar" CAPTION "Inställningar"
@ -188,11 +172,20 @@ STRINGTABLE
BEGIN BEGIN
IDS_APPTITLE "ReactOS programhanterare" IDS_APPTITLE "ReactOS programhanterare"
IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev" IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev"
IDS_SEARCH_TEXT "Sök…" IDS_WELCOME_TITLE "Välkommen till ReactOS programhanterare!"
IDS_APPS_COUNT "Programantal: %d; Selected: %d"
IDS_WELCOME_TITLE "Välkommen till ReactOS programhanterare!\n\n"
IDS_WELCOME_TEXT "Välj en kategori till vänster, och sedan ett program för att installera eller avinstallera.\nReactOS Web sida: " IDS_WELCOME_TEXT "Välj en kategori till vänster, och sedan ett program för att installera eller avinstallera.\nReactOS Web sida: "
IDS_WELCOME_URL "https://reactos.org" IDS_WELCOME_URL "https://reactos.org"
IDS_APPWIZ_TITLE "Add/Remove Programs"
IDS_APPWIZ_TEXT1 "Choose ""Applications"" or ""Updates"" to view the list of applications or updates installed on your system."
IDS_APPWIZ_TEXT2 "To remove a program or to modify its installed components, select it from the list and click on ""Uninstall"" or ""Modify""."
END
STRINGTABLE
BEGIN
IDS_SEARCH_TEXT "Sök…"
IDS_APPS_COUNT "Programantal: %d"
IDS_APPS_SELECT_COUNT "; Selected: %d"
IDS_INSTALLED "Installerat" IDS_INSTALLED "Installerat"
IDS_AVAILABLEFORINST "Tillgängliga for installation" IDS_AVAILABLEFORINST "Tillgängliga for installation"
IDS_UPDATES "Uppdateringar" IDS_UPDATES "Uppdateringar"

View file

@ -45,22 +45,6 @@ BEGIN
END END
END END
IDR_APPLICATIONMENU MENU
BEGIN
POPUP ""
BEGIN
MENUITEM "&Kur\tCtrl+Enter", ID_INSTALL
MENUITEM "K&aldır\tCtrl+Del", ID_UNINSTALL
MENUITEM "&Değiştir", ID_MODIFY
MENUITEM SEPARATOR
MENUITEM "&Girdiyi Kayıt Defteri'nden Kaldır", ID_REGREMOVE
MENUITEM SEPARATOR
MENUITEM "&Yenile\tF5", ID_REFRESH
MENUITEM SEPARATOR
MENUITEM "Uygulama Veri Ta&banını Yenile\tCtrl+F5", ID_RESETDB
END
END
IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265 IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Ayarlar" CAPTION "Ayarlar"
@ -190,11 +174,20 @@ STRINGTABLE
BEGIN BEGIN
IDS_APPTITLE "ReactOS Uygulama Yöneticisi" IDS_APPTITLE "ReactOS Uygulama Yöneticisi"
IDS_APP_AUTHORS "Telif Hakkı: 2009 Dmitry Chapyshev" IDS_APP_AUTHORS "Telif Hakkı: 2009 Dmitry Chapyshev"
IDS_SEARCH_TEXT "Ara" IDS_WELCOME_TITLE "ReactOS Uygulama Yöneticisi'ne hoş geldiniz."
IDS_APPS_COUNT "Uygulama Sayısı: %d; Seçili: %d"
IDS_WELCOME_TITLE "ReactOS Uygulama Yöneticisi'ne hoş geldiniz.\n\n"
IDS_WELCOME_TEXT "Solda bir kategori seçiniz, ardından kurmak ya da kaldırmak için bir uygulama seçiniz.\nReactOS'un İnternet sitesi: " IDS_WELCOME_TEXT "Solda bir kategori seçiniz, ardından kurmak ya da kaldırmak için bir uygulama seçiniz.\nReactOS'un İnternet sitesi: "
IDS_WELCOME_URL "https://reactos.org" IDS_WELCOME_URL "https://reactos.org"
IDS_APPWIZ_TITLE "Program Ekle/Kaldır"
IDS_APPWIZ_TEXT1 "Sisteminizde yüklü olan uygulamaların veya güncellemelerin listesini görüntülemek için ""Uygulamalar"" veya ""Güncellemeler"" öğesini seçin."
IDS_APPWIZ_TEXT2 "Bir programı kaldırmak veya yüklü bileşenlerini değiştirmek için listeden seçin ve ""Kaldır"" veya ""Değiştir"" üzerine tıklayın."
END
STRINGTABLE
BEGIN
IDS_SEARCH_TEXT "Ara…"
IDS_APPS_COUNT "Uygulama Sayısı: %d"
IDS_APPS_SELECT_COUNT "; Seçili: %d"
IDS_INSTALLED "Kurulanlar" IDS_INSTALLED "Kurulanlar"
IDS_AVAILABLEFORINST "Kurulabilir Uygulamalar" IDS_AVAILABLEFORINST "Kurulabilir Uygulamalar"
IDS_UPDATES "Güncelleştirmeler" IDS_UPDATES "Güncelleştirmeler"
@ -220,7 +213,7 @@ BEGIN
IDS_APP_DISPLAY_DETAILS "Detaylar" IDS_APP_DISPLAY_DETAILS "Detaylar"
IDS_APP_DISPLAY_LIST "Liste" IDS_APP_DISPLAY_LIST "Liste"
IDS_APP_DISPLAY_TILE "Karo" IDS_APP_DISPLAY_TILE "Karo"
IDS_NO_SEARCH_RESULTS "No search results" IDS_NO_SEARCH_RESULTS "Arama sonucu yok"
END END
STRINGTABLE STRINGTABLE
@ -273,5 +266,5 @@ END
STRINGTABLE STRINGTABLE
BEGIN BEGIN
IDS_INSTGEN_CONFIRMUNINST "Are you sure you want to uninstall %s?" IDS_INSTGEN_CONFIRMUNINST "Kaldırmak istediğinizden emin misiniz %s?"
END END

View file

@ -46,22 +46,6 @@ BEGIN
END END
END END
IDR_APPLICATIONMENU MENU
BEGIN
POPUP ""
BEGIN
MENUITEM "&Встановити\tCtrl+Enter", ID_INSTALL
MENUITEM "В&идалити\tCtrl+Del", ID_UNINSTALL
MENUITEM "&Змінити", ID_MODIFY
MENUITEM SEPARATOR
MENUITEM "Вида&лити з реєстру", ID_REGREMOVE
MENUITEM SEPARATOR
MENUITEM "&Оновити\tF5", ID_REFRESH
MENUITEM SEPARATOR
MENUITEM "Оновити список &програм\tCtrl+F5", ID_RESETDB
END
END
IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265 IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Налаштування" CAPTION "Налаштування"
@ -191,11 +175,20 @@ STRINGTABLE
BEGIN BEGIN
IDS_APPTITLE "Менеджер додатків ReactOS" IDS_APPTITLE "Менеджер додатків ReactOS"
IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev" IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev"
IDS_SEARCH_TEXT "Пошук…" IDS_WELCOME_TITLE "Ласкаво просимо в Менеджер додатків ReactOS!"
IDS_APPS_COUNT "Kількість додатків: %d; Обрано: %d"
IDS_WELCOME_TITLE "Ласкаво просимо в Менеджер додатків ReactOS!\n\n"
IDS_WELCOME_TEXT "Виберіть категорію зліва, а потім виберіть програми для встановлення чи видалення.\nСторінка ReactOS: " IDS_WELCOME_TEXT "Виберіть категорію зліва, а потім виберіть програми для встановлення чи видалення.\nСторінка ReactOS: "
IDS_WELCOME_URL "https://reactos.org" IDS_WELCOME_URL "https://reactos.org"
IDS_APPWIZ_TITLE "Add/Remove Programs"
IDS_APPWIZ_TEXT1 "Choose ""Applications"" or ""Updates"" to view the list of applications or updates installed on your system."
IDS_APPWIZ_TEXT2 "To remove a program or to modify its installed components, select it from the list and click on ""Uninstall"" or ""Modify""."
END
STRINGTABLE
BEGIN
IDS_SEARCH_TEXT "Пошук…"
IDS_APPS_COUNT "Kількість додатків: %d"
IDS_APPS_SELECT_COUNT "; Обрано: %d"
IDS_INSTALLED "Встановлені" IDS_INSTALLED "Встановлені"
IDS_AVAILABLEFORINST "Доступні для встановлення" IDS_AVAILABLEFORINST "Доступні для встановлення"
IDS_UPDATES "Оновлення" IDS_UPDATES "Оновлення"

View file

@ -47,22 +47,6 @@ BEGIN
END END
END END
IDR_APPLICATIONMENU MENU
BEGIN
POPUP ""
BEGIN
MENUITEM "安装(&I)\tCtrl+Enter", ID_INSTALL
MENUITEM "卸载(&U)\tCtrl+Del", ID_UNINSTALL
MENUITEM "修改(&M)", ID_MODIFY
MENUITEM SEPARATOR
MENUITEM "从注册表删除(&E)", ID_REGREMOVE
MENUITEM SEPARATOR
MENUITEM "刷新(&R)\tF5", ID_REFRESH
MENUITEM SEPARATOR
MENUITEM "更新数据库(&B)\tCtrl+F5", ID_RESETDB
END
END
IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265 IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "设置" CAPTION "设置"
@ -192,11 +176,20 @@ STRINGTABLE
BEGIN BEGIN
IDS_APPTITLE "ReactOS 程序管理器" IDS_APPTITLE "ReactOS 程序管理器"
IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev" IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev"
IDS_SEARCH_TEXT "搜索…" IDS_WELCOME_TITLE "欢迎使用 ReactOS 程序管理器!"
IDS_APPS_COUNT "程序数量:%d已选%d"
IDS_WELCOME_TITLE "欢迎使用 ReactOS 程序管理器!\n\n"
IDS_WELCOME_TEXT "从左栏选择一个类别,然后选择要安装或卸载的程序。\nReactOS 网站:" IDS_WELCOME_TEXT "从左栏选择一个类别,然后选择要安装或卸载的程序。\nReactOS 网站:"
IDS_WELCOME_URL "https://reactos.org" IDS_WELCOME_URL "https://reactos.org"
IDS_APPWIZ_TITLE "Add/Remove Programs"
IDS_APPWIZ_TEXT1 "Choose ""Applications"" or ""Updates"" to view the list of applications or updates installed on your system."
IDS_APPWIZ_TEXT2 "To remove a program or to modify its installed components, select it from the list and click on ""Uninstall"" or ""Modify""."
END
STRINGTABLE
BEGIN
IDS_SEARCH_TEXT "搜索…"
IDS_APPS_COUNT "程序数量:%d"
IDS_APPS_SELECT_COUNT ";已选:%d"
IDS_INSTALLED "已安装" IDS_INSTALLED "已安装"
IDS_AVAILABLEFORINST "可安装" IDS_AVAILABLEFORINST "可安装"
IDS_UPDATES "更新" IDS_UPDATES "更新"

View file

@ -44,22 +44,6 @@ BEGIN
END END
END END
IDR_APPLICATIONMENU MENU
BEGIN
POPUP ""
BEGIN
MENUITEM "安裝(&I)\tCtrl+Enter", ID_INSTALL
MENUITEM "解除安裝(&U)\tCtrl+Del", ID_UNINSTALL
MENUITEM "修改(&M)", ID_MODIFY
MENUITEM SEPARATOR
MENUITEM "從登錄檔刪除(&E)", ID_REGREMOVE
MENUITEM SEPARATOR
MENUITEM "重新整理(&R)\tF5", ID_REFRESH
MENUITEM SEPARATOR
MENUITEM "更新資料庫(&B)\tCtrl+F5", ID_RESETDB
END
END
IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265 IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "設定" CAPTION "設定"
@ -189,11 +173,20 @@ STRINGTABLE
BEGIN BEGIN
IDS_APPTITLE "ReactOS 程式管理員" IDS_APPTITLE "ReactOS 程式管理員"
IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev" IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev"
IDS_SEARCH_TEXT "搜尋..." IDS_WELCOME_TITLE "歡迎來到 ReactOS 程式管理員!"
IDS_APPS_COUNT "程式數量:%d 已選:%d"
IDS_WELCOME_TITLE "歡迎來到 ReactOS 程式管理員!\n\n"
IDS_WELCOME_TEXT "從左側欄目選擇一個類別,然後選擇要安裝或解除安裝的程式。\nReactOS 網站︰" IDS_WELCOME_TEXT "從左側欄目選擇一個類別,然後選擇要安裝或解除安裝的程式。\nReactOS 網站︰"
IDS_WELCOME_URL "https://reactos.org" IDS_WELCOME_URL "https://reactos.org"
IDS_APPWIZ_TITLE "Add/Remove Programs"
IDS_APPWIZ_TEXT1 "Choose ""Applications"" or ""Updates"" to view the list of applications or updates installed on your system."
IDS_APPWIZ_TEXT2 "To remove a program or to modify its installed components, select it from the list and click on ""Uninstall"" or ""Modify""."
END
STRINGTABLE
BEGIN
IDS_SEARCH_TEXT "搜尋..."
IDS_APPS_COUNT "程式數量:%d"
IDS_APPS_SELECT_COUNT " 已選:%d"
IDS_INSTALLED "已安裝" IDS_INSTALLED "已安裝"
IDS_AVAILABLEFORINST "可安裝" IDS_AVAILABLEFORINST "可安裝"
IDS_UPDATES "更新" IDS_UPDATES "更新"

View file

@ -44,22 +44,6 @@ BEGIN
END END
END END
IDR_APPLICATIONMENU MENU
BEGIN
POPUP ""
BEGIN
MENUITEM "安裝(&I)\tCtrl+Enter", ID_INSTALL
MENUITEM "解除安裝(&U)\tCtrl+Del", ID_UNINSTALL
MENUITEM "修改(&M)", ID_MODIFY
MENUITEM SEPARATOR
MENUITEM "從登錄檔刪除(&E)", ID_REGREMOVE
MENUITEM SEPARATOR
MENUITEM "重新整理(&R)\tF5", ID_REFRESH
MENUITEM SEPARATOR
MENUITEM "更新資料庫(&B)\tCtrl+F5", ID_RESETDB
END
END
IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265 IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 265
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "設定" CAPTION "設定"
@ -189,11 +173,20 @@ STRINGTABLE
BEGIN BEGIN
IDS_APPTITLE "ReactOS 程式管理員" IDS_APPTITLE "ReactOS 程式管理員"
IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev" IDS_APP_AUTHORS "Copyright 2009 Dmitry Chapyshev"
IDS_SEARCH_TEXT "搜尋..." IDS_WELCOME_TITLE "歡迎來到 ReactOS 程式管理員!"
IDS_APPS_COUNT "程式數量:%d 已選:%d"
IDS_WELCOME_TITLE "歡迎來到 ReactOS 程式管理員!\n\n"
IDS_WELCOME_TEXT "從左側欄目選擇一個類別,然後選擇要安裝或解除安裝的程式。\nReactOS 網站︰" IDS_WELCOME_TEXT "從左側欄目選擇一個類別,然後選擇要安裝或解除安裝的程式。\nReactOS 網站︰"
IDS_WELCOME_URL "https://reactos.org" IDS_WELCOME_URL "https://reactos.org"
IDS_APPWIZ_TITLE "Add/Remove Programs"
IDS_APPWIZ_TEXT1 "Choose ""Applications"" or ""Updates"" to view the list of applications or updates installed on your system."
IDS_APPWIZ_TEXT2 "To remove a program or to modify its installed components, select it from the list and click on ""Uninstall"" or ""Modify""."
END
STRINGTABLE
BEGIN
IDS_SEARCH_TEXT "搜尋..."
IDS_APPS_COUNT "程式數量:%d"
IDS_APPS_SELECT_COUNT " 已選:%d"
IDS_INSTALLED "已安裝" IDS_INSTALLED "已安裝"
IDS_AVAILABLEFORINST "可安裝" IDS_AVAILABLEFORINST "可安裝"
IDS_UPDATES "更新" IDS_UPDATES "更新"

File diff suppressed because it is too large Load diff

View file

@ -39,6 +39,31 @@ CopyTextToClipboard(LPCWSTR lpszText)
CloseClipboard(); CloseClipboard();
} }
static INT_PTR CALLBACK
NothingDlgProc(HWND hDlg, UINT uMsg, WPARAM, LPARAM)
{
return uMsg == WM_CLOSE ? DestroyWindow(hDlg) : FALSE;
}
VOID
EmulateDialogReposition(HWND hwnd)
{
static const DWORD DlgTmpl[] = { WS_POPUP | WS_CAPTION | WS_SYSMENU, 0, 0, 0, 0, 0 };
HWND hDlg = CreateDialogIndirectW(NULL, (LPDLGTEMPLATE)DlgTmpl, NULL, NothingDlgProc);
if (hDlg)
{
RECT r;
GetWindowRect(hwnd, &r);
if (SetWindowPos(hDlg, hDlg, r.left, r.top, r.right - r.left, r.bottom - r.top, SWP_NOZORDER | SWP_NOACTIVATE))
{
SendMessage(hDlg, DM_REPOSITION, 0, 0);
if (GetWindowRect(hDlg, &r))
SetWindowPos(hwnd, hwnd, r.left, r.top, r.right - r.left, r.bottom - r.top, SWP_NOZORDER | SWP_NOACTIVATE);
}
SendMessage(hDlg, WM_CLOSE, 0, 0);
}
}
VOID VOID
ShowPopupMenuEx(HWND hwnd, HWND hwndOwner, UINT MenuID, UINT DefaultItem, POINT *Point) ShowPopupMenuEx(HWND hwnd, HWND hwndOwner, UINT MenuID, UINT DefaultItem, POINT *Point)
{ {
@ -135,6 +160,8 @@ StartProcess(const CStringW &Path, BOOL Wait)
{ {
EnableWindow(hMainWnd, TRUE); EnableWindow(hMainWnd, TRUE);
SetForegroundWindow(hMainWnd); SetForegroundWindow(hMainWnd);
// We got the real activation message during MsgWaitForMultipleObjects while
// we were disabled, we need to set the focus again now.
SetFocus(hMainWnd); SetFocus(hMainWnd);
} }

View file

@ -8,6 +8,7 @@
#include "rapps.h" #include "rapps.h"
#include "settings.h" #include "settings.h"
#define SETTINGSSUBKEY L"Software\\ReactOS\\" RAPPS_NAME
class SettingsField class SettingsField
{ {
@ -109,7 +110,7 @@ class SettingsFieldString : public SettingsField
LPCWSTR m_RegName; // key name in registery LPCWSTR m_RegName; // key name in registery
}; };
void static void
AddInfoFields(ATL::CAtlList<SettingsField *> &infoFields, SETTINGS_INFO &settings) AddInfoFields(ATL::CAtlList<SettingsField *> &infoFields, SETTINGS_INFO &settings)
{ {
infoFields.AddTail(new SettingsFieldBool(&(settings.bSaveWndPos), L"bSaveWndPos")); infoFields.AddTail(new SettingsFieldBool(&(settings.bSaveWndPos), L"bSaveWndPos"));
@ -127,11 +128,9 @@ AddInfoFields(ATL::CAtlList<SettingsField *> &infoFields, SETTINGS_INFO &setting
infoFields.AddTail(new SettingsFieldString((settings.szNoProxyFor), MAX_PATH, L"NoProxyFor")); infoFields.AddTail(new SettingsFieldString((settings.szNoProxyFor), MAX_PATH, L"NoProxyFor"));
infoFields.AddTail(new SettingsFieldBool(&(settings.bUseSource), L"bUseSource")); infoFields.AddTail(new SettingsFieldBool(&(settings.bUseSource), L"bUseSource"));
infoFields.AddTail(new SettingsFieldString((settings.szSourceURL), INTERNET_MAX_URL_LENGTH, L"SourceURL")); infoFields.AddTail(new SettingsFieldString((settings.szSourceURL), INTERNET_MAX_URL_LENGTH, L"SourceURL"));
return;
} }
BOOL static BOOL
SaveAllSettings(CRegKey &key, SETTINGS_INFO &settings) SaveAllSettings(CRegKey &key, SETTINGS_INFO &settings)
{ {
BOOL bAllSuccess = TRUE; BOOL bAllSuccess = TRUE;
@ -153,10 +152,10 @@ SaveAllSettings(CRegKey &key, SETTINGS_INFO &settings)
return bAllSuccess; return bAllSuccess;
} }
BOOL static BOOL
LoadAllSettings(CRegKey &key, SETTINGS_INFO &settings) LoadAllSettings(CRegKey &key, SETTINGS_INFO &settings)
{ {
BOOL bAllSuccess = TRUE; BOOL bLoadedAny = FALSE;
ATL::CAtlList<SettingsField *> infoFields; ATL::CAtlList<SettingsField *> infoFields;
AddInfoFields(infoFields, settings); AddInfoFields(infoFields, settings);
@ -165,27 +164,18 @@ LoadAllSettings(CRegKey &key, SETTINGS_INFO &settings)
while (InfoListPosition) while (InfoListPosition)
{ {
SettingsField *Info = infoFields.GetNext(InfoListPosition); SettingsField *Info = infoFields.GetNext(InfoListPosition);
if (!Info->Load(key)) if (Info->Load(key))
{ bLoadedAny = TRUE;
bAllSuccess = FALSE; //else
// TODO: error log // TODO: error log
}
delete Info; delete Info;
} }
return bAllSuccess; return bLoadedAny;
} }
VOID static void
FillDefaultSettings(PSETTINGS_INFO pSettingsInfo) GetDefaultDownloadDirectory(CStringW &szDownloadDir)
{ {
CStringW szDownloadDir;
ZeroMemory(pSettingsInfo, sizeof(SETTINGS_INFO));
pSettingsInfo->bSaveWndPos = TRUE;
pSettingsInfo->bUpdateAtStart = FALSE;
pSettingsInfo->bLogEnabled = TRUE;
pSettingsInfo->bUseSource = FALSE;
if (FAILED(SHGetFolderPathW(NULL, CSIDL_PERSONAL, NULL, SHGFP_TYPE_CURRENT, szDownloadDir.GetBuffer(MAX_PATH)))) if (FAILED(SHGetFolderPathW(NULL, CSIDL_PERSONAL, NULL, SHGFP_TYPE_CURRENT, szDownloadDir.GetBuffer(MAX_PATH))))
{ {
szDownloadDir.ReleaseBuffer(); szDownloadDir.ReleaseBuffer();
@ -201,29 +191,68 @@ FillDefaultSettings(PSETTINGS_INFO pSettingsInfo)
PathAppendW(szDownloadDir.GetBuffer(MAX_PATH), L"\\RAPPS Downloads"); PathAppendW(szDownloadDir.GetBuffer(MAX_PATH), L"\\RAPPS Downloads");
szDownloadDir.ReleaseBuffer(); szDownloadDir.ReleaseBuffer();
}
CStringW::CopyChars( static VOID
pSettingsInfo->szDownloadDir, _countof(pSettingsInfo->szDownloadDir), szDownloadDir.GetString(), ValidateStringSettings(PSETTINGS_INFO pSettingsInfo)
szDownloadDir.GetLength() + 1); {
if (!pSettingsInfo->szDownloadDir[0])
{
CStringW szDownloadDir;
GetDefaultDownloadDirectory(szDownloadDir);
CStringW::CopyChars(pSettingsInfo->szDownloadDir, _countof(pSettingsInfo->szDownloadDir),
szDownloadDir.GetString(), szDownloadDir.GetLength() + 1);
}
}
VOID
FillDefaultSettings(PSETTINGS_INFO pSettingsInfo)
{
ZeroMemory(pSettingsInfo, sizeof(*pSettingsInfo));
pSettingsInfo->bSaveWndPos = TRUE;
pSettingsInfo->bUpdateAtStart = FALSE;
pSettingsInfo->bLogEnabled = TRUE;
pSettingsInfo->bUseSource = FALSE;
pSettingsInfo->bDelInstaller = FALSE; pSettingsInfo->bDelInstaller = FALSE;
pSettingsInfo->Maximized = FALSE; pSettingsInfo->Maximized = FALSE;
pSettingsInfo->Left = CW_USEDEFAULT; pSettingsInfo->Left = CW_USEDEFAULT;
pSettingsInfo->Top = CW_USEDEFAULT; pSettingsInfo->Top = CW_USEDEFAULT;
pSettingsInfo->Width = 680; pSettingsInfo->Width = 680;
pSettingsInfo->Height = 450; pSettingsInfo->Height = 450;
ValidateStringSettings(pSettingsInfo);
} }
BOOL BOOL
LoadSettings(PSETTINGS_INFO pSettingsInfo) LoadSettings(PSETTINGS_INFO pSettingsInfo)
{ {
BOOL bLoadedAny = FALSE;
FillDefaultSettings(pSettingsInfo);
ATL::CRegKey RegKey; ATL::CRegKey RegKey;
if (RegKey.Open(HKEY_CURRENT_USER, L"Software\\ReactOS\\" RAPPS_NAME, KEY_READ) != ERROR_SUCCESS) if (RegKey.Open(HKEY_CURRENT_USER, SETTINGSSUBKEY, KEY_READ) == ERROR_SUCCESS)
{ {
return FALSE; bLoadedAny = LoadAllSettings(RegKey, *pSettingsInfo);
} }
return LoadAllSettings(RegKey, *pSettingsInfo); ValidateStringSettings(pSettingsInfo); // Handles the case where a REG_SZ is present but empty
if (!bLoadedAny)
{
// This the first launch, write at least one item so ParseCmdAndExecute() does not
// trigger another DB update in another process instance between now and SaveSettings().
ATL::CRegKey RegKey;
if (RegKey.Create(HKEY_CURRENT_USER, SETTINGSSUBKEY, NULL, REG_OPTION_NON_VOLATILE,
KEY_WRITE, NULL, NULL) == ERROR_SUCCESS)
{
SettingsFieldBool field(&(pSettingsInfo->bUpdateAtStart), L"bUpdateAtStart");
field.Save(RegKey);
}
}
return bLoadedAny;
} }
BOOL BOOL
@ -245,8 +274,8 @@ SaveSettings(HWND hwnd, PSETTINGS_INFO pSettingsInfo)
(wp.showCmd == SW_MAXIMIZE || (wp.showCmd == SW_SHOWMINIMIZED && (wp.flags & WPF_RESTORETOMAXIMIZED))); (wp.showCmd == SW_MAXIMIZE || (wp.showCmd == SW_SHOWMINIMIZED && (wp.flags & WPF_RESTORETOMAXIMIZED)));
} }
if (RegKey.Create(HKEY_CURRENT_USER, L"Software\\ReactOS\\" RAPPS_NAME, NULL, if (RegKey.Create(HKEY_CURRENT_USER, SETTINGSSUBKEY, NULL, REG_OPTION_NON_VOLATILE,
REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, NULL) != ERROR_SUCCESS) KEY_WRITE, NULL, NULL) != ERROR_SUCCESS)
{ {
return FALSE; return FALSE;
} }

View file

@ -9,6 +9,20 @@
SETTINGS_INFO NewSettingsInfo; SETTINGS_INFO NewSettingsInfo;
static int CALLBACK
BrowseFolderCallback(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
switch (uMsg)
{
case BFFM_INITIALIZED:
SendMessageW(hwnd, BFFM_SETSELECTIONW, TRUE, lpData);
break;
case BFFM_VALIDATEFAILED:
return TRUE;
}
return 0;
}
BOOL BOOL
ChooseFolder(HWND hwnd) ChooseFolder(HWND hwnd)
{ {
@ -25,24 +39,24 @@ ChooseFolder(HWND hwnd)
bi.ulFlags = bi.ulFlags =
BIF_USENEWUI | BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS | /* BIF_BROWSEFILEJUNCTIONS | */ BIF_VALIDATE; BIF_USENEWUI | BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS | /* BIF_BROWSEFILEJUNCTIONS | */ BIF_VALIDATE;
if (SUCCEEDED(CoInitializeEx(NULL, COINIT_APARTMENTTHREADED))) if (SUCCEEDED(CoInitialize(NULL)))
{ {
CStringW szBuf; WCHAR szDir[MAX_PATH];
if (GetWindowTextW(GetDlgItem(hwnd, IDC_DOWNLOAD_DIR_EDIT), szDir, _countof(szDir)))
{
bi.lpfn = BrowseFolderCallback;
bi.lParam = (LPARAM)szDir;
}
LPITEMIDLIST lpItemList = SHBrowseForFolderW(&bi); LPITEMIDLIST lpItemList = SHBrowseForFolderW(&bi);
if (lpItemList && SHGetPathFromIDListW(lpItemList, szBuf.GetBuffer(MAX_PATH))) if (lpItemList && SHGetPathFromIDListW(lpItemList, szDir))
{ {
szBuf.ReleaseBuffer(); if (*szDir)
if (!szBuf.IsEmpty())
{ {
SetDlgItemTextW(hwnd, IDC_DOWNLOAD_DIR_EDIT, szBuf); SetDlgItemTextW(hwnd, IDC_DOWNLOAD_DIR_EDIT, szDir);
bRet = TRUE; bRet = TRUE;
} }
} }
else
{
szBuf.ReleaseBuffer();
}
CoTaskMemFree(lpItemList); CoTaskMemFree(lpItemList);
CoUninitialize(); CoUninitialize();
@ -94,7 +108,9 @@ InitSettingsControls(HWND hDlg, PSETTINGS_INFO Info)
SendDlgItemMessageW(hDlg, IDC_LOG_ENABLED, BM_SETCHECK, Info->bLogEnabled, 0); SendDlgItemMessageW(hDlg, IDC_LOG_ENABLED, BM_SETCHECK, Info->bLogEnabled, 0);
SendDlgItemMessageW(hDlg, IDC_DEL_AFTER_INSTALL, BM_SETCHECK, Info->bDelInstaller, 0); SendDlgItemMessageW(hDlg, IDC_DEL_AFTER_INSTALL, BM_SETCHECK, Info->bDelInstaller, 0);
SetWindowTextW(GetDlgItem(hDlg, IDC_DOWNLOAD_DIR_EDIT), Info->szDownloadDir); HWND hCtl = GetDlgItem(hDlg, IDC_DOWNLOAD_DIR_EDIT);
SetWindowTextW(hCtl, Info->szDownloadDir);
SendMessageW(hCtl, EM_LIMITTEXT, MAX_PATH - 1, 0);
CheckRadioButton(hDlg, IDC_PROXY_DEFAULT, IDC_USE_PROXY, IDC_PROXY_DEFAULT + Info->Proxy); CheckRadioButton(hDlg, IDC_PROXY_DEFAULT, IDC_USE_PROXY, IDC_PROXY_DEFAULT + Info->Proxy);

View file

@ -191,7 +191,7 @@ HandleUninstallCommand(CAppDB &db, UINT argcLeft, LPWSTR *argvLeft)
if (pInfo) if (pInfo)
{ {
retval = pInfo->UninstallApplication(silent ? UCF_SILENT : UCF_NONE); retval = pInfo->UninstallApplication((silent ? UCF_SILENT : UCF_NONE) | UCF_SAMEPROCESS);
} }
delete pDelete; delete pDelete;
return retval; return retval;
@ -338,6 +338,7 @@ ParseCmdAndExecute(LPWSTR lpCmdLine, BOOL bIsFirstLaunch, int nCmdShow)
BOOL bAppwizMode = (argc > 1 && MatchCmdOption(argv[1], CMD_KEY_APPWIZ)); BOOL bAppwizMode = (argc > 1 && MatchCmdOption(argv[1], CMD_KEY_APPWIZ));
if (!bAppwizMode) if (!bAppwizMode)
{ {
CUpdateDatabaseMutex lock;
if (SettingsInfo.bUpdateAtStart || bIsFirstLaunch) if (SettingsInfo.bUpdateAtStart || bIsFirstLaunch)
db.RemoveCached(); db.RemoveCached();
@ -349,16 +350,17 @@ ParseCmdAndExecute(LPWSTR lpCmdLine, BOOL bIsFirstLaunch, int nCmdShow)
if (argc == 1 || bAppwizMode) // RAPPS is launched without options or APPWIZ mode is requested if (argc == 1 || bAppwizMode) // RAPPS is launched without options or APPWIZ mode is requested
{ {
// Check whether the RAPPS MainWindow is already launched in another process // Check whether the RAPPS MainWindow is already launched in another process
HANDLE hMutex; CStringW szWindowText(MAKEINTRESOURCEW(bAppwizMode ? IDS_APPWIZ_TITLE : IDS_APPTITLE));
LPCWSTR pszMutex = bAppwizMode ? L"RAPPWIZ" : MAINWINDOWMUTEX;
hMutex = CreateMutexW(NULL, FALSE, szWindowClass); HANDLE hMutex = CreateMutexW(NULL, FALSE, pszMutex);
if ((!hMutex) || (GetLastError() == ERROR_ALREADY_EXISTS)) if ((!hMutex) || (GetLastError() == ERROR_ALREADY_EXISTS))
{ {
/* If already started, find its window */ /* If already started, find its window */
HWND hWindow; HWND hWindow;
for (int wait = 2500, inter = 250; wait > 0; wait -= inter) for (int wait = 2500, inter = 250; wait > 0; wait -= inter)
{ {
if ((hWindow = FindWindowW(szWindowClass, NULL)) != NULL) if ((hWindow = FindWindowW(szWindowClass, szWindowText)) != NULL)
break; break;
Sleep(inter); Sleep(inter);
} }
@ -366,6 +368,7 @@ ParseCmdAndExecute(LPWSTR lpCmdLine, BOOL bIsFirstLaunch, int nCmdShow)
if (hWindow) if (hWindow)
{ {
/* Activate the window in the other instance */ /* Activate the window in the other instance */
ShowWindow(hWindow, SW_SHOWNA);
SwitchToThisWindow(hWindow, TRUE); SwitchToThisWindow(hWindow, TRUE);
if (bAppwizMode) if (bAppwizMode)
PostMessage(hWindow, WM_COMMAND, ID_ACTIVATE_APPWIZ, 0); PostMessage(hWindow, WM_COMMAND, ID_ACTIVATE_APPWIZ, 0);
@ -376,6 +379,7 @@ ParseCmdAndExecute(LPWSTR lpCmdLine, BOOL bIsFirstLaunch, int nCmdShow)
return FALSE; return FALSE;
} }
} }
szWindowText.Empty();
CMainWindow wnd(&db, bAppwizMode); CMainWindow wnd(&db, bAppwizMode);
MainWindowLoop(&wnd, nCmdShow); MainWindowLoop(&wnd, nCmdShow);

View file

@ -13,7 +13,8 @@
#include <gdiplus.h> #include <gdiplus.h>
#include <conutils.h> #include <conutils.h>
LPCWSTR szWindowClass = L"ROSAPPMGR2"; LPCWSTR szWindowClass = MAINWINDOWCLASSNAME;
LONG g_Busy = 0;
HWND hMainWnd; HWND hMainWnd;
HINSTANCE hInst; HINSTANCE hInst;
@ -40,12 +41,7 @@ wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, INT nSh
} }
hInst = hInstance; hInst = hInstance;
BOOL bIsFirstLaunch = !LoadSettings(&SettingsInfo); BOOL bIsFirstLaunch = !LoadSettings(&SettingsInfo);
if (bIsFirstLaunch)
{
FillDefaultSettings(&SettingsInfo);
}
InitLogs(); InitLogs();
InitCommonControls(); InitCommonControls();

View file

@ -1907,6 +1907,8 @@ SHFreeShared(
#endif /* NO_SHLWAPI_SHARED */ #endif /* NO_SHLWAPI_SHARED */
INT WINAPI GetMenuPosFromID(_In_ HMENU hMenu, _In_ UINT uID);
/* SHAutoComplete flags */ /* SHAutoComplete flags */
#define SHACF_DEFAULT 0x00000000 #define SHACF_DEFAULT 0x00000000
#define SHACF_FILESYSTEM 0x00000001 #define SHACF_FILESYSTEM 0x00000001