/*
* Add/Remove Programs resources
*
* Copyright 2001-2002, 2008 Owen Rudge
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*
*/

#include "res.h"

#pragma makedep po

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT

STRINGTABLE
{
   IDS_CPL_TITLE, "Add/Remove Programs"
   IDS_CPL_DESC, "Allows you to install new software, or remove existing software from your computer."
   IDS_TAB1_TITLE, "Applications"

   IDS_UNINSTALL_FAILED, "Unable to execute the uninstaller, '%s'. Do you want to remove the uninstall entry for this program from the registry?"
   IDS_NOT_SPECIFIED, "Not specified"

   IDS_COLUMN_NAME, "Name"
   IDS_COLUMN_PUBLISHER, "Publisher"
   IDS_COLUMN_VERSION, "Version"
   IDS_FILTER_INSTALLS, "Installation programs"
   IDS_FILTER_PROGRAMS, "Programs (*.exe)"
   IDS_FILTER_ALL,      "All files (*.*)"

   IDS_REMOVE, "&Remove"
   IDS_MODIFY_REMOVE, "&Modify/Remove"
}

STRINGTABLE
{
    IDS_DOWNLOADING     "Downloading..."
    IDS_INSTALLING      "Installing..."
    IDS_INVALID_SHA     "Unexpected checksum of downloaded file. Aborting installation of corrupted file."
}

IDD_MAIN DIALOG 0, 0, 320, 220
STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Install/Uninstall"
FONT 8, "MS Shell Dlg"
{
 CONTROL "To install a new program from a floppy disk, CD-ROM drive, or your hard drive, click Install.", 1000, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 40, 7, 270, 20
 CONTROL "&Install...", IDC_INSTALL, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 246, 26, 64, 14
 CONTROL "", -1, "STATIC", SS_LEFT | SS_SUNKEN | WS_CHILD | WS_VISIBLE, 7, 46, 303, 1
 CONTROL 2, 1001, "STATIC", SS_ICON | WS_CHILD | WS_VISIBLE, 7, 7, 21, 20
 CONTROL "The following software can be automatically removed. To remove a program or to modify its installed components, select it from the list and click Modify/Remove.", 1002, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 40, 54, 275, 34
 CONTROL "", IDL_PROGRAMS, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 7, 90, 303, 100
 CONTROL "&Support Information", IDC_SUPPORT_INFO, "button", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 34, 198, 90, 14
 CONTROL "&Modify...", IDC_MODIFY, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 128, 198, 90, 14
 CONTROL "&Remove", IDC_ADDREMOVE, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 222, 198, 90, 14
 CONTROL 3, 1003, "STATIC", SS_ICON | WS_CHILD | WS_VISIBLE, 7, 57, 21, 20
}

IDD_INFO DIALOG 0, 0, 256, 138
STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Support Information"
FONT 8, "MS Shell Dlg"
{
 CONTROL "OK", IDOK, "BUTTON", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 6, 120, 50, 14
 CONTROL "The following information can be used to get technical support for %s:", IDC_INFO_LABEL, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 6, 8, 220, 24
 CONTROL "Publisher:", -1, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 6, 35, 90, 8
 CONTROL "Version:", -1, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 6, 45, 90, 8
 CONTROL "Contact:", -1, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 6, 55, 90, 8
 CONTROL "Support Information:", -1, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 6, 65, 90, 8
 CONTROL "Support Telephone:", -1, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 6, 75, 90, 8
 CONTROL "Readme:", -1, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 6, 85, 90, 8
 CONTROL "Product Updates:", -1, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 6, 95, 90, 8
 CONTROL "Comments:", -1, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 6, 105, 90, 8
 CONTROL "", IDC_INFO_PUBLISHER, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 100, 35, 150, 8
 CONTROL "", IDC_INFO_VERSION, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 100, 45, 150, 8
 CONTROL "", IDC_INFO_CONTACT, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 100, 55, 150, 8
 CONTROL "", IDC_INFO_SUPPORT, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 100, 65, 150, 8
 CONTROL "", IDC_INFO_PHONE, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 100, 75, 150, 8
 CONTROL "", IDC_INFO_README, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 100, 85, 150, 8
 CONTROL "", IDC_INFO_UPDATES, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 100, 95, 150, 8
 CONTROL "", IDC_INFO_COMMENTS, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 100, 105, 150, 8
}

ID_DWL_GECKO_DIALOG DIALOG  0, 0, 260, 95
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Wine Gecko Installer"
FONT 8, "MS Shell Dlg"
{
    CONTROL "Wine could not find a Gecko package which is needed for applications embedding HTML " \
          "to work correctly. Wine can automatically download and install it for you.\n\n" \
          "Note: it is recommended to use your distribution's packages instead. " \
          "See <a href=\"http://wiki.winehq.org/Gecko\">http://wiki.winehq.org/Gecko</a> for details.",
          ID_DWL_STATUS, "SysLink", 0, 10, 10, 240, 65
    CONTROL "", ID_DWL_PROGRESS, PROGRESS_CLASSA, WS_BORDER|PBS_SMOOTH, 10, 40, 240, 12
    DEFPUSHBUTTON "&Install", ID_DWL_INSTALL, 200, 76, 50, 14, WS_GROUP | WS_TABSTOP
    PUSHBUTTON "Cancel", IDCANCEL, 144, 76, 50, 14, WS_GROUP | WS_TABSTOP
}

ID_DWL_MONO_DIALOG DIALOG  0, 0, 260, 95
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Wine Mono Installer"
FONT 8, "MS Shell Dlg"
{
    CONTROL "Wine could not find a Mono package which is needed for .NET applications " \
          "to work correctly. Wine can automatically download and install it for you.\n\n" \
          "Note: it is recommended to use your distribution's packages instead. " \
          "See <a href=\"http://wiki.winehq.org/Mono\">http://wiki.winehq.org/Mono</a> for details.",
          ID_DWL_STATUS, "SysLink", 0, 10, 10, 240, 65
    CONTROL "", ID_DWL_PROGRESS, PROGRESS_CLASSA, WS_BORDER|PBS_SMOOTH, 10, 40, 240, 12
    DEFPUSHBUTTON "&Install", ID_DWL_INSTALL, 200, 76, 50, 14, WS_GROUP | WS_TABSTOP
    PUSHBUTTON "Cancel", IDCANCEL, 144, 76, 50, 14, WS_GROUP | WS_TABSTOP
}

LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL

/* @makedep: appwiz.ico */
ICO_MAIN ICON "appwiz.ico"
