home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2007 January, February, March & April
/
Chip-Cover-CD-2007-02.iso
/
boot
/
i386
/
root
/
usr
/
share
/
YaST2
/
clients
/
inst_update.ycp
< prev
next >
Wrap
Text File
|
2006-11-29
|
8KB
|
255 lines
/**
* Module: inst_update.ycp
*
* Authors: Stefan Schubert <schubi@suse.de>
* Arvin Schnell <arvin@suse.de>
*
* Purpose:
* Displays software selection screen of previous installed software-groups.
* Show checkboxes for software categories. Let the user select his software.
* if he want to UPGRADE his system.
*
* $Id: inst_update.ycp 33392 2006-10-13 11:39:53Z locilka $
*/
{
textdomain "update";
import "Wizard";
import "Popup";
import "RootPart";
import "Update";
import "Packages";
// screen title for update options
string title = _("Update Options");
// create box with base selections, check if current selection really is available
term baseconfsbox = `VBox ();
// loop through available base selections, create radio button entry for every base selection
// preselect current selection
list<string> base_configurations = [];
if (Packages::using_patterns)
{
baseconfsbox = `PushButton (`id (`details), _("Select Patterns"));
}
else
{
// get available base selection sorted by reverse order (highest ordered base selection first)
list<string> available_base_selections = Update::GetBaseSelections ();
y2milestone ("available_base_selections %1, current_selection %2", available_base_selections, Update::selected_selection);
foreach (string selection, available_base_selections, {
map selection_data = Pkg::SelectionData (selection);
string selection_summary = selection_data["summary"]:"";
boolean preselect = (selection == Update::selected_selection);
baseconfsbox = add (baseconfsbox, `Left(`RadioButton(`id(selection),
`opt(`notify, `autoShortcut),
selection_summary,
preselect)));
});
baseconfsbox = `RadioButtonGroup(`id(`baseconf), baseconfsbox);
base_configurations = available_base_selections;
}
// Checking: already selected addons or single selection?
string wrn_msg = "";
if (Pkg::RestoreState (true)) // check if state changed
{
// Display warning message
wrn_msg = _("\
You have already chosen software from \"Detailed selection\".\n\
You will lose that selection if you change the basic selection.");
}
// Build and show dialog
string from_version = RootPart::GetInfoOfSelected (`name);
string to_version = Update::updateVersion["nameandversion"]:_("Unknown");
term contents = `HVSquash(
`VBox(
// label showing from what version to what version we are updating
`Left (`Label (sformat (_("Update from %1 to %2"), from_version, to_version))),
`VSpacing (1),
// frame title for update selection
`Frame( _("Update Mode"),
`VBox(
`VSpacing(1),
`RadioButtonGroup( `id(`bgoup), `opt(`notify),
`VBox(
`Left(`RadioButton(`id(`upgrade),`opt(`notify),
// radio button label for update including new packages
_("&Update with Installation of New Software and Features
Based on the Selection:
"), false)),
`VSpacing(0.5),
`HBox(
`HSpacing(4),
baseconfsbox
),
`VSpacing(1.5),
`Left(`RadioButton(`id(`notupgrade),`opt(`notify),
// radio button label for update of already installed packages only
_("Only U&pdate Installed Packages"), true)),
`VSpacing(1.0)
)
)
)
),
`VSpacing (1),
`Left(`CheckBox(`id(`delete),
// check box label
// translator: add a & shortcut
_("&Delete Unmaintained Packages"), true)),
`VSpacing(1),
`Label( `id(`wrn_label), wrn_msg )
)
);
// help text for dialog "update options" 1/4
string helptext = _("<p>The update option differs between two modes. In
either case, it is recommended to make a backup of your personal data.</p>
");
// help text for dialog "update options" 2/4
helptext = helptext + _("<p><b>With New Software:</b> This default setting
updates the existing software and installs all new features and benefits of
the new &product; version. The selection is based on the former predefined
software selection.</p>
");
// help text for dialog "update options" 3/4
helptext = helptext + _("<p><b>Only Installed Packages:</b> This selection
only updates the packages already installed on your system. <i>Note:</i>
New software in the predefined software selection, such as new YaST modules, is
not available after the update. You might miss advertised features.</p>
");
// help text for dialog "update options" 4/4
helptext = helptext + _("<p>After the update, some software might not
function anymore. Activate <b>Delete Unmaintained Packages</b> to delete those
packages during the update.</p>
");
Wizard::OpenAcceptDialog ();
Wizard::SetContents (title, contents, helptext, (boolean) WFM::Args(0), (boolean) WFM::Args(1));
// preset update/upgrade radio buttons properly
UI::ChangeWidget(`id(`upgrade), `Value, !Update::onlyUpdateInstalled);
UI::ChangeWidget(`id(`notupgrade), `Value, Update::onlyUpdateInstalled);
// grey out radio buttons if only already installed packages should be updated
foreach (string sel, base_configurations, {
UI::ChangeWidget(`id(sel), `Enabled, !Update::onlyUpdateInstalled);
});
UI::ChangeWidget(`id(`delete), `Value, Update::deleteOldPackages);
any ret = nil;
boolean details_pressed = false;
while (true)
{
ret = Wizard::UserInput ();
if (ret == `abort && Popup::ConfirmAbort (`painless))
break;
if (ret == `upgrade || ret == `notupgrade)
{
boolean tmp = (boolean) UI::QueryWidget (`id(`upgrade), `Value);
foreach (string sel, base_configurations, {
UI::ChangeWidget(`id(sel), `Enabled, tmp);
});
continue;
}
if (ret == `details)
{
symbol result = `again;
while ( result == `again )
{
result = (symbol) WFM::CallFunction ("inst_sw_select", [true, true]);
}
if (ret == `next)
details_pressed = true;
continue;
}
if (ret == `next && Pkg::RestoreState (true))
{
boolean something_changed = false;
if (UI::QueryWidget (`id(`notupgrade), `Value) != Update::onlyUpdateInstalled)
something_changed = true;
if (Packages::using_patterns)
{
}
else
{
if ((boolean) UI::QueryWidget (`id(`upgrade), `Value) &&
Update::selected_selection != UI::QueryWidget(`id(`baseconf), `CurrentButton))
something_changed = true;
}
if (UI::QueryWidget (`id(`delete), `Value ) != Update::deleteOldPackages)
something_changed = true;
if (something_changed && Packages::base_selection_modified)
{
// yes/no question
if (!Popup::YesNo (_("Do you really want\nto reset your detailed selection?")))
continue;
}
}
if (ret == `back || ret == `next)
break;
}
if (ret == `next)
{
Update::did_init1 = false;
boolean b1 = Update::onlyUpdateInstalled;
Update::onlyUpdateInstalled = (boolean) UI::QueryWidget (`id(`notupgrade), `Value);
Update::deleteOldPackages = (boolean) UI::QueryWidget (`id(`delete), `Value);
if (Packages::using_patterns)
{
if (b1 != Update::onlyUpdateInstalled || details_pressed)
{
Update::manual_interaction = true;
}
}
else
{
string s1 = Update::selected_selection;
Update::selected_selection = (string) UI::QueryWidget(`id(`baseconf), `CurrentButton);
if (b1 != Update::onlyUpdateInstalled || s1 != Update::selected_selection)
{
Update::manual_interaction = true;
}
}
}
Wizard::CloseDialog ();
return ret;
}