mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-08 20:47:44 +00:00
267 lines
7.6 KiB
C++
267 lines
7.6 KiB
C++
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
*
|
|
* The contents of this file are subject to the Netscape Public License
|
|
* Version 1.0 (the "License"); you may not use this file except in
|
|
* compliance with the License. You may obtain a copy of the License at
|
|
* http://www.mozilla.org/NPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS IS"
|
|
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
|
|
* the License for the specific language governing rights and limitations
|
|
* under the License.
|
|
*
|
|
* The Original Code is Mozilla Communicator client code.
|
|
*
|
|
* The Initial Developer of the Original Code is Netscape Communications
|
|
* Corporation. Portions created by Netscape are Copyright (C) 1998
|
|
* Netscape Communications Corporation. All Rights Reserved.
|
|
*/
|
|
|
|
|
|
/*
|
|
PrefsPageSmartUpdate.cpp -- LI File preferences.
|
|
Created: Daniel Malmer <malmer@netscape.com>, 21-Apr-98.
|
|
*/
|
|
|
|
|
|
#include "felocale.h"
|
|
#include "xpgetstr.h"
|
|
#include "prefapi.h"
|
|
#include "softupdt.h"
|
|
#include "PrefsPageSmartUpdate.h"
|
|
#include "Xfe/Geometry.h"
|
|
#include "NSReg.h"
|
|
|
|
extern int MK_OUT_OF_MEMORY;
|
|
extern int SU_CONTINUE_UNINSTALL;
|
|
extern int SU_ERROR_UNINSTALL;
|
|
|
|
// XFE_PrefsPageSmartUpdate
|
|
|
|
XFE_PrefsPageSmartUpdate::XFE_PrefsPageSmartUpdate(XFE_PrefsDialog* dialog) : XFE_PrefsPage(dialog)
|
|
{
|
|
}
|
|
|
|
|
|
XFE_PrefsPageSmartUpdate::~XFE_PrefsPageSmartUpdate()
|
|
{
|
|
}
|
|
|
|
|
|
void
|
|
XFE_PrefsPageSmartUpdate::create()
|
|
{
|
|
int ac;
|
|
Arg av[16];
|
|
Widget top_frame;
|
|
Widget bottom_frame;
|
|
Widget column;
|
|
Widget form;
|
|
Widget uninstall_label;
|
|
Widget uninstall_button;
|
|
|
|
ac = 0;
|
|
XtSetArg(av[ac], XmNtopAttachment, XmATTACH_FORM); ac++;
|
|
XtSetArg(av[ac], XmNbottomAttachment, XmATTACH_FORM); ac++;
|
|
XtSetArg(av[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
|
|
XtSetArg(av[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
|
|
m_wPage = XmCreateForm(m_wPageForm, "smartUpdate", av, ac);
|
|
XtManageChild(m_wPage);
|
|
|
|
ac = 0;
|
|
XtSetArg(av[ac], XmNtopAttachment, XmATTACH_FORM); ac++;
|
|
XtSetArg(av[ac], XmNbottomAttachment, XmATTACH_NONE); ac++;
|
|
XtSetArg(av[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
|
|
XtSetArg(av[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
|
|
XtSetArg(av[ac], XmNtopOffset, 4); ac++;
|
|
top_frame = XmCreateFrame(m_wPage, "topFrame", av, ac);
|
|
XtManageChild(top_frame);
|
|
|
|
ac = 0;
|
|
column = XmCreateRowColumn(top_frame, "column", av, ac);
|
|
XtManageChild(column);
|
|
|
|
ac = 0;
|
|
m_enable_toggle = XmCreateToggleButtonGadget(column, "enableToggle", av, ac);
|
|
XtManageChild(m_enable_toggle);
|
|
|
|
ac = 0;
|
|
m_confirm_toggle = XmCreateToggleButtonGadget(column, "confirmToggle", av, ac);
|
|
XtManageChild(m_confirm_toggle);
|
|
|
|
ac = 0;
|
|
XtSetArg(av[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
|
|
XtSetArg(av[ac], XmNtopWidget, top_frame); ac++;
|
|
XtSetArg(av[ac], XmNbottomAttachment, XmATTACH_FORM); ac++;
|
|
XtSetArg(av[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
|
|
XtSetArg(av[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
|
|
XtSetArg(av[ac], XmNtopOffset, 4); ac++;
|
|
bottom_frame = XmCreateFrame(m_wPage, "bottomFrame", av, ac);
|
|
XtManageChild(bottom_frame);
|
|
|
|
ac = 0;
|
|
form = XmCreateForm(bottom_frame, "form", av, ac);
|
|
XtManageChild(form);
|
|
|
|
ac = 0;
|
|
XtSetArg(av[ac], XmNtopAttachment, XmATTACH_FORM); ac++;
|
|
XtSetArg(av[ac], XmNbottomAttachment, XmATTACH_NONE); ac++;
|
|
XtSetArg(av[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
|
|
XtSetArg(av[ac], XmNrightAttachment, XmATTACH_NONE); ac++;
|
|
uninstall_label = XmCreateLabelGadget(form, "uninstallLabel", av, ac);
|
|
XtManageChild(uninstall_label);
|
|
|
|
ac = 0;
|
|
XtSetArg(av[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
|
|
XtSetArg(av[ac], XmNtopWidget, uninstall_label); ac++;
|
|
XtSetArg(av[ac], XmNbottomAttachment, XmATTACH_NONE); ac++;
|
|
XtSetArg(av[ac], XmNleftAttachment, XmATTACH_NONE); ac++;
|
|
XtSetArg(av[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
|
|
uninstall_button = XmCreatePushButton(form, "uninstallButton", av, ac);
|
|
XtManageChild(uninstall_button);
|
|
|
|
XtAddCallback(uninstall_button, XmNactivateCallback, uninstall_cb, this);
|
|
|
|
ac = 0;
|
|
XtSetArg(av[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
|
|
XtSetArg(av[ac], XmNtopWidget, uninstall_label); ac++;
|
|
XtSetArg(av[ac], XmNbottomAttachment, XmATTACH_FORM); ac++;
|
|
XtSetArg(av[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
|
|
XtSetArg(av[ac], XmNrightAttachment, XmATTACH_WIDGET); ac++;
|
|
XtSetArg(av[ac], XmNrightWidget, uninstall_button); ac++;
|
|
m_uninstall_list = XmCreateList(form, "uninstallList", av, ac);
|
|
XtManageChild(m_uninstall_list);
|
|
|
|
/* Leave this unmanaged */
|
|
ac = 0;
|
|
m_fake_list = XmCreateList(form, "fakeList", av, ac);
|
|
|
|
setCreated(TRUE);
|
|
}
|
|
|
|
|
|
void
|
|
XFE_PrefsPageSmartUpdate::init()
|
|
{
|
|
void* context = NULL;
|
|
char packageName[1024];
|
|
char regPackageName[1024];
|
|
XP_Bool enabled;
|
|
|
|
PREF_GetBoolPref("autoupdate.enabled", &enabled);
|
|
XtVaSetValues(m_enable_toggle, XmNset, enabled,
|
|
XmNsensitive, !PREF_PrefIsLocked("autoupdate.enabled"), NULL);
|
|
|
|
PREF_GetBoolPref("autoupdate.confirm_install", &enabled);
|
|
XtVaSetValues(m_confirm_toggle, XmNset, enabled,
|
|
XmNsensitive, !PREF_PrefIsLocked("autoupdate.confirm"), NULL);
|
|
|
|
XmListDeleteAllItems(m_uninstall_list);
|
|
XmListDeleteAllItems(m_fake_list);
|
|
|
|
while ( SU_EnumUninstall(&context,
|
|
packageName, sizeof(packageName),
|
|
regPackageName, sizeof(regPackageName)) ==
|
|
REGERR_OK ) {
|
|
XmString xm_str;
|
|
|
|
/* Don't let them uninstall Communicator! */
|
|
if ( !XP_STRCMP(packageName, UNINSTALL_NAV_STR) ) continue;
|
|
|
|
/* If no package name exists, use the registry name */
|
|
xm_str = XmStringCreate(packageName[0] ? packageName :
|
|
regPackageName, XmFONTLIST_DEFAULT_TAG);
|
|
XmListAddItem(m_uninstall_list, xm_str, 0);
|
|
XmStringFree(xm_str);
|
|
|
|
xm_str = XmStringCreate(regPackageName, XmFONTLIST_DEFAULT_TAG);
|
|
XmListAddItem(m_fake_list, xm_str, 0);
|
|
XmStringFree(xm_str);
|
|
}
|
|
}
|
|
|
|
|
|
void
|
|
XFE_PrefsPageSmartUpdate::install()
|
|
{
|
|
}
|
|
|
|
|
|
void
|
|
XFE_PrefsPageSmartUpdate::save()
|
|
{
|
|
PREF_SetBoolPref("autoupdate.enabled",
|
|
XmToggleButtonGetState(m_enable_toggle));
|
|
PREF_SetBoolPref("autoupdate.confirm_install",
|
|
XmToggleButtonGetState(m_confirm_toggle));
|
|
}
|
|
|
|
|
|
Boolean
|
|
XFE_PrefsPageSmartUpdate::verify()
|
|
{
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
void
|
|
XFE_PrefsPageSmartUpdate::uninstallCB(Widget /* w */, XtPointer /* calldata */)
|
|
{
|
|
int* list = NULL;
|
|
int count = 0;
|
|
XmString* xm_pkg_names = NULL;
|
|
XmString* xm_registry_names = NULL;
|
|
char* pkg_name = NULL;
|
|
char* registry_name = NULL;
|
|
char* confirm_msg = NULL;
|
|
|
|
XmListGetSelectedPos(m_uninstall_list, &list, &count);
|
|
|
|
/* count should always be either '0' or '1' */
|
|
if ( count == 1 ) {
|
|
|
|
XtVaGetValues(m_uninstall_list, XmNitems, &xm_pkg_names, NULL);
|
|
XtVaGetValues(m_fake_list, XmNitems, &xm_registry_names, NULL);
|
|
|
|
XmStringGetLtoR(xm_pkg_names[(*list)-1],
|
|
XmFONTLIST_DEFAULT_TAG, &pkg_name);
|
|
XmStringGetLtoR(xm_registry_names[(*list)-1],
|
|
XmFONTLIST_DEFAULT_TAG, ®istry_name);
|
|
|
|
if ( !pkg_name || !*pkg_name || !registry_name || !*registry_name ) {
|
|
FE_Alert(getContext(), XP_GetString(MK_OUT_OF_MEMORY));
|
|
return;
|
|
}
|
|
|
|
confirm_msg = PR_smprintf(XP_GetString(SU_CONTINUE_UNINSTALL),
|
|
pkg_name);
|
|
|
|
if ( confirm_msg == NULL ) {
|
|
FE_Alert(getContext(), XP_GetString(MK_OUT_OF_MEMORY));
|
|
return;
|
|
}
|
|
|
|
if ( FE_Confirm(getContext(), confirm_msg) ) {
|
|
if ( SU_Uninstall(registry_name) < 0 ) {
|
|
FE_Alert(getContext(), XP_GetString(SU_ERROR_UNINSTALL));
|
|
} else {
|
|
XmListDeletePositions(m_uninstall_list, list, count);
|
|
XmListDeletePositions(m_fake_list, list, count);
|
|
}
|
|
}
|
|
|
|
if ( pkg_name ) XtFree(pkg_name);
|
|
if ( registry_name ) XtFree(registry_name);
|
|
XP_FREEIF(confirm_msg);
|
|
}
|
|
}
|
|
|
|
|
|
void
|
|
XFE_PrefsPageSmartUpdate::uninstall_cb(Widget w, XtPointer closure, XtPointer calldata)
|
|
{
|
|
((XFE_PrefsPageSmartUpdate*) closure)->uninstallCB(w, calldata);
|
|
}
|
|
|
|
|