def __init__(self, *args, **kwargs): self._disks = kwargs.pop("disks") free = kwargs.pop("free") self.selected = kwargs.pop("selected")[:] GUIObject.__init__(self, *args, **kwargs) self._store = self.builder.get_object("disk_store") # populate the store for disk in self._disks: self._store.append([ "%s (%s)" % (disk.description, disk.serial), str(disk.size), str(free[disk.name][0]), disk.name, disk.id ]) treeview = self.builder.get_object("disk_view") model = treeview.get_model() itr = model.get_iter_first() selected_ids = [d.id for d in self.selected] selection = treeview.get_selection() while itr: disk_id = model.get_value(itr, 4) if disk_id in selected_ids: selection.select_iter(itr) itr = model.iter_next(itr)
def __init__(self, data): GUIObject.__init__(self, data) GUIInputCheckHandler.__init__(self) self._confirm_entry = self.builder.get_object("confirm_pw_entry") self._passphrase_entry = self.builder.get_object("passphrase_entry") self._save_button = self.builder.get_object("passphrase_save_button") self._strength_bar = self.builder.get_object("strength_bar") self._strength_label = self.builder.get_object("strength_label") self._passphrase_warning_image = self.builder.get_object("passphrase_warning_image") self._passphrase_warning_label = self.builder.get_object("passphrase_warning_label") # Set the offset values for the strength bar colors self._strength_bar.add_offset_value("low", 2) self._strength_bar.add_offset_value("medium", 3) self._strength_bar.add_offset_value("high", 4) # Configure the password policy, if available. Otherwise use defaults. self.policy = self.data.anaconda.pwpolicy.get_policy("luks") if not self.policy: self.policy = self.data.anaconda.PwPolicyData() # These will be set up later. self._pwq = None self._pwq_error = None self.passphrase = "" self._passphrase_match_check = self.add_check(self._passphrase_entry, self._checkMatch) self._confirm_match_check = self.add_check(self._confirm_entry, self._checkMatch) self._strength_check = self.add_check(self._passphrase_entry, self._checkStrength) self._ascii_check = self.add_check(self._passphrase_entry, self._checkASCII)
def __init__(self, data, storage, payload): GUIObject.__init__(self, data) self.storage = storage self.payload = payload self._initialFreeSpace = Size(0) self._selectedReclaimableSpace = Size(0) self._actionStore = self.builder.get_object("actionStore") self._diskStore = self.builder.get_object("diskStore") self._selection = self.builder.get_object("diskView-selection") self._view = self.builder.get_object("diskView") self._diskStore = self.builder.get_object("diskStore") self._reclaimable_label = self.builder.get_object("reclaimableSpaceLabel") self._selected_label = self.builder.get_object("selectedSpaceLabel") self._required_label = self.builder.get_object("requiredSpaceLabel") markup = self._required_label.get_label() self._required_label.set_markup(markup % escape_markup(str(self.payload.spaceRequired))) self._reclaimDescLabel = self.builder.get_object("reclaimDescLabel") self._resizeButton = self.builder.get_object("resizeButton") self._preserveButton = self.builder.get_object("preserveButton") self._shrinkButton = self.builder.get_object("shrinkButton") self._deleteButton = self.builder.get_object("deleteButton") self._resizeSlider = self.builder.get_object("resizeSlider")
def refresh(self): GUIObject.refresh(self) if not self.proxyUrl: self._proxyCheck.set_active(False) self.on_proxy_enable_toggled(self._proxyCheck) self._authCheck.set_active(False) self.on_proxy_auth_toggled(self._authCheck) return try: proxy = ProxyString(self.proxyUrl) if proxy.username: self._proxyUsernameEntry.set_text(proxy.username) if proxy.password: self._proxyPasswordEntry.set_text(proxy.password) self._proxyURLEntry.set_text(proxy.noauth_url) except ProxyStringError as e: log.error("Failed to parse proxy for ProxyDialog.refresh %s: %s", self.proxyUrl, e) return self._proxyCheck.set_active(True) self._authCheck.set_active(bool(proxy.username or proxy.password)) self.on_proxy_enable_toggled(self._proxyCheck) self.on_proxy_auth_toggled(self._authCheck)
def __init__(self, data, storage, payload): GUIObject.__init__(self, data) self.storage = storage self.payload = payload self._initialFreeSpace = Size(0) self._selectedReclaimableSpace = Size(0) self._actionStore = self.builder.get_object("actionStore") self._diskStore = self.builder.get_object("diskStore") self._selection = self.builder.get_object("diskView-selection") self._view = self.builder.get_object("diskView") self._diskStore = self.builder.get_object("diskStore") self._reclaimable_label = self.builder.get_object("reclaimableSpaceLabel") self._selected_label = self.builder.get_object("selectedSpaceLabel") self._required_label = self.builder.get_object("requiredSpaceLabel") markup = _("Installation requires a total of <b>%s</b> for system data.") required_dev_size = self.payload.requiredDeviceSize(FS.biggest_overhead_FS()) self._required_label.set_markup(markup % escape_markup(str(required_dev_size))) self._reclaimDescLabel = self.builder.get_object("reclaimDescLabel") self._resizeButton = self.builder.get_object("resizeButton") self._preserveButton = self.builder.get_object("preserveButton") self._shrinkButton = self.builder.get_object("shrinkButton") self._deleteButton = self.builder.get_object("deleteButton") self._resizeSlider = self.builder.get_object("resizeSlider")
def __init__(self, data, storage, to_format): GUIObject.__init__(self, data) self.storage = storage self.to_format = to_format self._notebook = self.builder.get_object("formatNotebook") self._cancel_button = self.builder.get_object("udCancelButton") self._ok_button = self.builder.get_object("udOKButton") self._unformatted_label = self.builder.get_object("udLabel") self._formatting_label = self.builder.get_object("formatLabel") self._warn_box = self.builder.get_object("warningBox") self._hub_label = self.builder.get_object("returnToHubLabel1") if len(self.to_format) > 0: self._unformatted_label.set_text("\n".join("/dev/" + d.name for d in to_format)) self._unformatted_label.set_text("\n".join( "/dev/" + d.name + " (" + d.busid + ")" for d in to_format)) else: self._unformatted_label.set_text("") # epoch is only increased when user interrupts action to return to hub self._epoch = 0 self._epoch_lock = threading.Lock()
def initialize(self): GUIObject.initialize(self) self._grabObjects() # Validate the group input box self.add_check(self._tGroups, self._validateGroups)
def __init__(self, data, storage, payload): GUIObject.__init__(self, data) self.storage = storage self.payload = payload self._initialFreeSpace = Size(0) self._selectedReclaimableSpace = 0 self._actionStore = self.builder.get_object("actionStore") self._diskStore = self.builder.get_object("diskStore") self._selection = self.builder.get_object("diskView-selection") self._view = self.builder.get_object("diskView") self._diskStore = self.builder.get_object("diskStore") self._reclaimable_label = self.builder.get_object( "reclaimableSpaceLabel") self._selected_label = self.builder.get_object("selectedSpaceLabel") self._required_label = self.builder.get_object("requiredSpaceLabel") markup = self._required_label.get_label() self._required_label.set_markup(markup % size_str(self.payload.spaceRequired)) self._reclaimDescLabel = self.builder.get_object("reclaimDescLabel") self._resizeButton = self.builder.get_object("resizeButton") self._preserveButton = self.builder.get_object("preserveButton") self._shrinkButton = self.builder.get_object("shrinkButton") self._deleteButton = self.builder.get_object("deleteButton") self._resizeSlider = self.builder.get_object("resizeSlider")
def __init__(self, data, storage): GUIObject.__init__(self, data) self.storage = storage self.iscsi = self.storage.iscsi() self._discoveryError = None self._loginError = False self._discoveredNodes = [] self._update_devicetree = False self._authTypeCombo = self.builder.get_object("authTypeCombo") self._authNotebook = self.builder.get_object("authNotebook") self._iscsiNotebook = self.builder.get_object("iscsiNotebook") self._loginButton = self.builder.get_object("loginButton") self._loginAuthTypeCombo = self.builder.get_object("loginAuthTypeCombo") self._loginAuthNotebook = self.builder.get_object("loginAuthNotebook") self._loginGrid = self.builder.get_object("loginGrid") self._loginConditionNotebook = self.builder.get_object("loginConditionNotebook") self._configureGrid = self.builder.get_object("configureGrid") self._conditionNotebook = self.builder.get_object("conditionNotebook") self._bindCheckbox = self.builder.get_object("bindCheckbutton") self._startButton = self.builder.get_object("startButton") self._okButton = self.builder.get_object("okButton") self._cancelButton = self.builder.get_object("cancelButton") self._initiatorEntry = self.builder.get_object("initiatorEntry") self._store = self.builder.get_object("nodeStore")
def __init__(self, data, storage, payload): GUIObject.__init__(self, data) self.storage = storage self.payload = payload self._initialFreeSpace = Size(0) self._selectedReclaimableSpace = Size(0) self._actionStore = self.builder.get_object("actionStore") self._diskStore = self.builder.get_object("diskStore") self._selection = self.builder.get_object("diskView-selection") self._view = self.builder.get_object("diskView") self._diskStore = self.builder.get_object("diskStore") self._reclaimable_label = self.builder.get_object( "reclaimableSpaceLabel") self._selected_label = self.builder.get_object("selectedSpaceLabel") self._required_label = self.builder.get_object("requiredSpaceLabel") markup = self._required_label.get_label() required_dev_size = self.payload.requiredDeviceSize( FS.biggestOverheadFS()) self._required_label.set_markup(markup % escape_markup(str(required_dev_size))) self._reclaimDescLabel = self.builder.get_object("reclaimDescLabel") self._resizeButton = self.builder.get_object("resizeButton") self._preserveButton = self.builder.get_object("preserveButton") self._shrinkButton = self.builder.get_object("shrinkButton") self._deleteButton = self.builder.get_object("deleteButton") self._resizeSlider = self.builder.get_object("resizeSlider")
def __init__(self, *args, **kwargs): buttons = kwargs.pop("buttons", []) label = kwargs.pop("label", None) GUIObject.__init__(self, *args, **kwargs) if not buttons: widget = self.window.add_button( C_("GUI|Detailed Error Dialog", "_Cancel"), 0) else: buttonbox = self.builder.get_object("detailedButtonBox") i = 0 for button in buttons: widget = self.window.add_button(button, i) # Quit buttons should always appear left-most, unless it's the # only button. Then it should appear on the right. if button == C_("GUI|Detailed Error Dialog", "_Quit") and len(buttons) > 1: buttonbox.set_child_secondary(widget, True) i += 1 widget.set_can_default(True) widget.grab_default() if label: self.builder.get_object("detailedLabel").set_text(label)
def __init__(self, data, desired_entropy): GUIObject.__init__(self, data) self._desired_entropy = desired_entropy self._progress_bar = self.builder.get_object("progressBar") self._terminate = False self.force_cont = False self._num_loops = 0
def refresh(self): GUIObject.refresh(self) self._proxyCheck = self.builder.get_object("enableProxyCheck") self._proxyInfoBox = self.builder.get_object("proxyInfoBox") self._authCheck = self.builder.get_object("enableAuthCheck") self._proxyAuthBox = self.builder.get_object("proxyAuthBox") self._proxyURLEntry = self.builder.get_object("proxyURLEntry") self._proxyUsernameEntry = self.builder.get_object("proxyUsernameEntry") self._proxyPasswordEntry = self.builder.get_object("proxyPasswordEntry") if not self.data.method.proxy: self._proxyCheck.set_active(False) self.on_proxy_enable_toggled(self._proxyCheck) self._authCheck.set_active(False) self.on_proxy_auth_toggled(self._authCheck) return try: proxy = ProxyString(self.data.method.proxy) if proxy.username: self._proxyUsernameEntry.set_text(proxy.username) if proxy.password: self._proxyPasswordEntry.set_text(proxy.password) self._proxyURLEntry.set_text(proxy.noauth_url) except ProxyStringError as e: log.error("Failed to parse proxy for ProxyDialog.refresh %s: %s" % (self.data.method.proxy, e)) return self._proxyCheck.set_active(True) self._authCheck.set_active(bool(proxy.username or proxy.password)) self.on_proxy_enable_toggled(self._proxyCheck) self.on_proxy_auth_toggled(self._authCheck)
def __init__(self, *args): GUIObject.__init__(self, *args) GUIDialogInputCheckHandler.__init__(self) #epoch is increased when serversStore is repopulated self._epoch = 0 self._epoch_lock = threading.Lock()
def refresh(self, mountpoint, device, rootName, snapshots=False): GUIObject.refresh(self) label = self.builder.get_object("confirmLabel") if rootName and "_" in rootName: rootName = rootName.replace("_", "__") delete_all_text = (C_( "GUI|Custom Partitioning|Confirm Delete Dialog", "Delete _all other file systems in the %s root as well." ) + "\n" + C_( "GUI|Custom Partitioning|Confirm Delete Dialog", "(This includes those shared with other installed operating systems.)" )) self._removeAll.set_label(delete_all_text % rootName) self._removeAll.set_sensitive(rootName is not None) if mountpoint: txt = "%s (%s)" % (mountpoint, device) else: txt = device if not snapshots: label_text = _( "Are you sure you want to delete all of the data on %s?") % txt else: label_text = _( "Are you sure you want to delete all of the data on %s, including snapshots and/or subvolumes?" ) % txt label.set_text(label_text)
def __init__(self, data, storage, payload): GUIObject.__init__(self, data) self.storage = storage self.payload = payload self._initialFreeSpace = Size(0) self._selectedReclaimableSpace = Size(0) self._actionStore = self.builder.get_object("actionStore") self._diskStore = self.builder.get_object("diskStore") self._selection = self.builder.get_object("diskView-selection") self._view = self.builder.get_object("diskView") self._diskStore = self.builder.get_object("diskStore") self._reclaimable_label = self.builder.get_object("reclaimableSpaceLabel") self._selected_label = self.builder.get_object("selectedSpaceLabel") self._required_label = self.builder.get_object("requiredSpaceLabel") markup = _("Installation requires a total of <b>%s</b> for system data.") self._required_label.set_markup(markup % escape_markup(str(self.payload.spaceRequired))) self._reclaimDescLabel = self.builder.get_object("reclaimDescLabel") self._resizeButton = self.builder.get_object("resizeButton") self._preserveButton = self.builder.get_object("preserveButton") self._shrinkButton = self.builder.get_object("shrinkButton") self._deleteButton = self.builder.get_object("deleteButton") self._resizeSlider = self.builder.get_object("resizeSlider")
def __init__(self, data, servers, states): GUIObject.__init__(self, data) self._servers = servers self._active_server = None self._states = states # Use GUIDIalogInputCheckHandler to manipulate the sensitivity of the # add button, and check for valid input in on_entry_activated add_button = self.builder.get_object("addButton") GUIDialogInputCheckHandler.__init__(self, add_button) self.window.set_size_request(500, 400) working_column = self.builder.get_object("workingColumn") working_renderer = self.builder.get_object("workingRenderer") override_cell_property(working_column, working_renderer, "icon-name", self._render_working) self._serverEntry = self.builder.get_object("serverEntry") self._serversStore = self.builder.get_object("serversStore") self._addButton = self.builder.get_object("addButton") self._poolCheckButton = self.builder.get_object("poolCheckButton") self._ntsCheckButton = self.builder.get_object("ntsCheckButton") self._serverCheck = self.add_check(self._serverEntry, self._validate_server) self._serverCheck.update_check_status() self._update_timer = Timer()
def refresh(self, mountpoint, device, rootName, snapshots=False): GUIObject.refresh(self) label = self.builder.get_object("confirmLabel") if rootName and "_" in rootName: rootName = rootName.replace("_", "__") delete_all_text = (C_("GUI|Custom Partitioning|Confirm Delete Dialog", "Delete _all other file systems in the %s root as well.") + "\n" + C_("GUI|Custom Partitioning|Confirm Delete Dialog", "(This includes those shared with other installed operating systems.)")) self._removeAll.set_label( delete_all_text % rootName) self._removeAll.set_sensitive(rootName is not None) if mountpoint: txt = "%s (%s)" % (mountpoint, device) else: txt = device if not snapshots: label_text = _("Are you sure you want to delete all of the data on %s?") % txt else: label_text = _("Are you sure you want to delete all of the data on %s, including snapshots and/or subvolumes?") % txt label.set_text(label_text)
def refresh(self, actions): GUIObject.refresh(self) self._store = self.builder.get_object("actionStore") self._store.clear() self.initialize(actions)
def refresh(self, mountpoint, device, checkbox_text = "", snapshots=False, bootpart = False): """ Show confirmation dialog with the optional checkbox. If the `checkbox_text` for the checkbox is not set then the checkbox will not be showed. :param str mountpoint: Mountpoint for device. :param str device: Name of the device. :param str checkbox_text: Text for checkbox. If nothing set do not display the checkbox. :param bool snapshot: If true warn user he's going to delete snapshots too. """ GUIObject.refresh(self) label = self.builder.get_object("confirmLabel") if checkbox_text: self._optional_checkbox.set_label(checkbox_text) else: self._optional_checkbox.hide() if mountpoint: txt = "%s (%s)" % (mountpoint, device) else: txt = device if bootpart: label_text = _("%s may be a system boot partition! Deleting it may break other operating systems. Are you sure you want to delete it?") % txt elif not snapshots: label_text = _("Are you sure you want to delete all of the data on %s?") % txt else: label_text = _("Are you sure you want to delete all of the data on %s, including snapshots and/or subvolumes?") % txt label.set_text(label_text)
def __init__(self, *args, **kwargs): buttons = kwargs.pop("buttons", []) label = kwargs.pop("label", None) GUIObject.__init__(self, *args, **kwargs) if not buttons: widget = self.window.add_button(C_("GUI|Detailed Error Dialog", "_Cancel"), 0) else: buttonbox = self.builder.get_object("detailedButtonBox") i = 0 for button in buttons: widget = self.window.add_button(button, i) # Quit buttons should always appear left-most, unless it's the # only button. Then it should appear on the right. if button == C_("GUI|Detailed Error Dialog", "_Quit") and len(buttons) > 1: buttonbox.set_child_secondary(widget, True) i += 1 widget.set_can_default(True) widget.grab_default() if label: self.builder.get_object("detailedLabel").set_text(label)
def __init__(self, *args, **kwargs): self._disks = kwargs.pop("disks") free = kwargs.pop("free") self.selected = kwargs.pop("selected")[:] GUIObject.__init__(self, *args, **kwargs) self._store = self.builder.get_object("disk_store") # populate the store for disk in self._disks: self._store.append(["%s (%s)" % (disk.description, disk.serial), str(disk.size), str(free[disk.name][0]), disk.name, disk.id]) treeview = self.builder.get_object("disk_view") model = treeview.get_model() itr = model.get_iter_first() selected_ids = [d.id for d in self.selected] selection = treeview.get_selection() while itr: disk_id = model.get_value(itr, 4) if disk_id in selected_ids: selection.select_iter(itr) itr = model.iter_next(itr)
def __init__(self, data, storage): GUIObject.__init__(self, data) self.storage = storage self._notebook = self.builder.get_object("refreshNotebook") self._cancel_button = self.builder.get_object("refreshCancelButton") self._ok_button = self.builder.get_object("refreshOKButton")
def __init__(self, data, storage): GUIObject.__init__(self, data) self._addError = None self.storage = storage self.fcoe = self.storage.fcoe() self._update_devicetree = False
def __init__(self, data, desired_entropy): GUIObject.__init__(self, data) self._desired_entropy = desired_entropy self._progress_bar = self.builder.get_object("progressBar") self._terminate = False self._started = 0 self.force_cont = False self._num_loops = 0
def __init__(self, data, l12_module): GUIObject.__init__(self, data) self._xkl_wrapper = XklWrapper.get_instance() self._switchingOptsStore = self.builder.get_object( "switchingOptsStore") self._l12_module = l12_module
def initialize(self): GUIObject.initialize(self) self._grabObjects() # Validate the group input box self.add_check_with_error_label(editable=self._tGroups, error_label=self._groupsError, run_check=_validateGroups)
def __init__(self, *args): GUIObject.__init__(self, *args) #used to ensure uniqueness of the threads' names self._threads_counter = 0 #epoch is increased when serversStore is repopulated self._epoch = 0 self._epoch_lock = threading.Lock()
def __init__(self, data, storage): GUIObject.__init__(self, data) self.storage = storage self.iscsi = self.storage.iscsi() self._discoveryError = None self._loginError = False self._discoveredNodes = []
def __init__(self, data, storage, payload, instclass): GUIObject.__init__(self, data) common.NormalSpoke.__init__(self, storage, payload, instclass) # Add a help handler self.window.connect_after("help-button-clicked", self._on_help_clicked) # warning message self._current_warning_message = ""
def initialize(self): GUIObject.initialize(self) self._grabObjects() # Validate the group input box self.add_check(self._tGroups, self._validateGroups) # Send ready signal to main event loop hubQ.send_ready(self.__class__.__name__, False)
def __init__(self, *args, **kwargs): self.payload = kwargs.pop("payload", None) self.showReclaim = kwargs.pop("showReclaim", None) GUIObject.__init__(self, *args, **kwargs) self.autoPartType = None self.encrypted = False self._grabObjects()
def __init__(self, data, storage): GUIObject.__init__(self, data) self.storage = storage self.iscsi = self.storage.iscsi() self._discoveryError = None self._loginError = False self._discoveredNodes = [] self._update_devicetree = False
def __init__(self, data): GUIObject.__init__(self, data) self._view = self.builder.get_object("disk_tree_view") self._store = self.builder.get_object("disk_store") self._selection = self.builder.get_object("disk_selection") self._summary_label = self.builder.get_object("summary_label") self._set_button = self.builder.get_object("set_as_boot_button") self._remove_button = self.builder.get_object("remove_button")
def __init__(self, user, groupDict, data): GUIObject.__init__(self, data) GUIDialogInputCheckHandler.__init__(self) self._user = user self._groupDict = groupDict # Track whether the user has requested a home directory other # than the default. self._origHome = None self._homeSet = False
def __init__(self, *args): GUIObject.__init__(self, *args) # Use GUIDIalogInputCheckHandler to manipulate the sensitivity of the # add button, and check for valid input in on_entry_activated add_button = self.builder.get_object("addButton") GUIDialogInputCheckHandler.__init__(self, add_button) #epoch is increased when serversStore is repopulated self._epoch = 0 self._epoch_lock = threading.Lock()
def __init__(self, data): GUIObject.__init__(self, data) self._proxyCheck = self.builder.get_object("enableProxyCheck") self._proxyInfoBox = self.builder.get_object("proxyInfoBox") self._authCheck = self.builder.get_object("enableAuthCheck") self._proxyAuthBox = self.builder.get_object("proxyAuthBox") self._proxyURLEntry = self.builder.get_object("proxyURLEntry") self._proxyUsernameEntry = self.builder.get_object("proxyUsernameEntry") self._proxyPasswordEntry = self.builder.get_object("proxyPasswordEntry")
def __init__(self, user, data): GUIObject.__init__(self, data) self._saveButton = self.builder.get_object("save_button") GUIDialogInputCheckHandler.__init__(self, self._saveButton) self._user = user # Track whether the user has requested a home directory other # than the default. self._origHome = None self._homeSet = False
def refresh(self): GUIObject.refresh(self) self._createBox() for hub in Hub._hubs_collection: if hub.timeout_id is not None: log.debug("Disabling event loop for hub %s", hub.__class__.__name__) GLib.source_remove(hub.timeout_id) hub.timeout_id = None log.debug("Starting event loop for hub %s", self.__class__.__name__) self.timeout_id = GLib.timeout_add(100, self._update_spokes)
def __init__(self, user, data): GUIObject.__init__(self, data) saveButton = self.builder.get_object("save_button") GUIDialogInputCheckHandler.__init__(self, saveButton) self._user = user # Track whether the user has requested a home directory other # than the default. This way, if the home directory is left as # the default, the default will change if the username changes. # Otherwise, once the directory is set it stays that way. self._origHome = None
def refresh(self): GUIObject.refresh(self) self._createBox() for hub in Hub._hubs_collection: if hub.timeout is not None: log.debug("Disabling event loop for hub %s", hub.__class__.__name__) hub.timeout.cancel() hub.timeout = None log.debug("Starting event loop for hub %s", self.__class__.__name__) self.timeout = Timer() self.timeout.timeout_msec(100, self._update_spokes)
def __init__(self, data, storage, payload, instclass): """Create a new Hub instance. The arguments this base class accepts defines the API that Hubs have to work with. A Hub does not get free reign over everything in the anaconda class, as that would be a big mess. Instead, a Hub may count on the following: ksdata -- An instance of a pykickstart Handler object. The Hub uses this to populate its UI with defaults and to pass results back after it has run. storage -- An instance of storage.Storage. This is useful for determining what storage devices are present and how they are configured. payload -- An instance of a payload.Payload subclass. This is useful for displaying and selecting packages to install, and in carrying out the actual installation. instclass -- An instance of a BaseInstallClass subclass. This is useful for determining distribution-specific installation information like default package selections and default partitioning. """ GUIObject.__init__(self, data) common.Hub.__init__(self, storage, payload, instclass) # enable the autoContinue feature if we are in kickstart # mode, but if the user interacts with the hub, it will be # disabled again self._autoContinue = flags.automatedInstall self._hubs_collection.append(self) self.timeout = None self._incompleteSpokes = [] self._inSpoke = False self._notReadySpokes = [] self._spokes = {} # Used to store the last result of _updateContinue self._warningMsg = None self._checker = None # Flag to indicate the user can continue even if the checker indicates an error. # The checker itself is left alone so the error message doesn't accidentally get # cleaered. self._checker_ignore = False self._spokesToStepIn = [] self._spokeAutostepIndex = 0 self._gridColumns = 3