Search in sources :

Example 1 with UIList

use of org.terasology.rendering.nui.widgets.UIList in project Terasology by MovingBlocks.

the class JoinGameScreen method initialise.

@Override
public void initialise() {
    setAnimationSystem(MenuAnimationSystems.createDefaultSwipeAnimation());
    downloader = new ServerListDownloader(config.getNetwork().getMasterServer());
    CardLayout cards = find("cards", CardLayout.class);
    UIList<ServerInfo> customServerList = find("customServerList", UIList.class);
    if (customServerList != null) {
        customServerList.setList(config.getNetwork().getServerInfos());
        configureServerList(customServerList);
    }
    UIList<ServerInfo> onlineServerList = find("onlineServerList", UIList.class);
    if (onlineServerList != null) {
        onlineServerList.setList(listedServers);
        configureServerList(onlineServerList);
    }
    ActivateEventListener activateCustom = e -> {
        cards.setDisplayedCard("customServerListScrollArea");
        find("customButton", UIButton.class).setFamily("highlight");
        find("onlineButton", UIButton.class).setFamily("default");
        visibleList = customServerList;
    };
    WidgetUtil.trySubscribe(this, "customButton", activateCustom);
    ActivateEventListener activateOnline = e -> {
        cards.setDisplayedCard("onlineServerListScrollArea");
        find("customButton", UIButton.class).setFamily("default");
        find("onlineButton", UIButton.class).setFamily("highlight");
        visibleList = onlineServerList;
    };
    WidgetUtil.trySubscribe(this, "onlineButton", activateOnline);
    bindCustomButtons();
    bindInfoLabels();
    WidgetUtil.trySubscribe(this, "close", button -> {
        config.save();
        triggerBackAnimation();
    });
    activateOnline.onActivated(null);
}
Also used : CoreScreenLayer(org.terasology.rendering.nui.CoreScreenLayer) BindHelper(org.terasology.rendering.nui.databinding.BindHelper) CardLayout(org.terasology.rendering.nui.layouts.CardLayout) LoggerFactory(org.slf4j.LoggerFactory) ServerInfoMessage(org.terasology.network.ServerInfoMessage) IntToStringBinding(org.terasology.rendering.nui.databinding.IntToStringBinding) StringTextRenderer(org.terasology.rendering.nui.itemRendering.StringTextRenderer) Collections2(com.google.common.collect.Collections2) Config(org.terasology.config.Config) WorldTime(org.terasology.world.time.WorldTime) StateLoading(org.terasology.engine.modes.StateLoading) Future(java.util.concurrent.Future) PingService(org.terasology.network.PingService) Map(java.util.Map) WidgetUtil(org.terasology.rendering.nui.WidgetUtil) ServerInfo(org.terasology.config.ServerInfo) FontColor(org.terasology.rendering.FontColor) List(java.util.List) Predicate(com.google.common.base.Predicate) ResourceUrn(org.terasology.assets.ResourceUrn) In(org.terasology.registry.In) Joiner(com.google.common.base.Joiner) ReadOnlyBinding(org.terasology.rendering.nui.databinding.ReadOnlyBinding) MenuAnimationSystems(org.terasology.rendering.nui.animation.MenuAnimationSystems) GameEngine(org.terasology.engine.GameEngine) GameThread(org.terasology.engine.GameThread) HashMap(java.util.HashMap) Callable(java.util.concurrent.Callable) ArrayList(java.util.ArrayList) ServerInfoService(org.terasology.network.ServerInfoService) ModuleRegistry(org.terasology.module.ModuleRegistry) TranslationSystem(org.terasology.i18n.TranslationSystem) NameVersion(org.terasology.naming.NameVersion) UIList(org.terasology.rendering.nui.widgets.UIList) ModuleManager(org.terasology.engine.module.ModuleManager) Logger(org.slf4j.Logger) JoinStatus(org.terasology.network.JoinStatus) Keyboard(org.terasology.input.Keyboard) IOException(java.io.IOException) UILabel(org.terasology.rendering.nui.widgets.UILabel) ExecutionException(java.util.concurrent.ExecutionException) ActivateEventListener(org.terasology.rendering.nui.widgets.ActivateEventListener) NUIKeyEvent(org.terasology.rendering.nui.events.NUIKeyEvent) StorageServiceWorker(org.terasology.identity.storageServiceClient.StorageServiceWorker) Color(org.terasology.rendering.nui.Color) UIButton(org.terasology.rendering.nui.widgets.UIButton) WorldInfo(org.terasology.world.internal.WorldInfo) NetworkSystem(org.terasology.network.NetworkSystem) Collections(java.util.Collections) CardLayout(org.terasology.rendering.nui.layouts.CardLayout) ActivateEventListener(org.terasology.rendering.nui.widgets.ActivateEventListener) ServerInfo(org.terasology.config.ServerInfo)

Example 2 with UIList

use of org.terasology.rendering.nui.widgets.UIList in project Terasology by MovingBlocks.

the class SelectModulesScreen method initialise.

@Override
public void initialise() {
    setAnimationSystem(MenuAnimationSystems.createDefaultSwipeAnimation());
    remoteModuleRegistryUpdater = Executors.newSingleThreadExecutor().submit(moduleManager.getInstallManager().updateRemoteRegistry());
    selectModulesConfig = config.getSelectModulesConfig();
    resolver = new DependencyResolver(moduleManager.getRegistry());
    modulesLookup = Maps.newHashMap();
    sortedModules = Lists.newArrayList();
    for (Name moduleId : moduleManager.getRegistry().getModuleIds()) {
        Module latestVersion = moduleManager.getRegistry().getLatestModuleVersion(moduleId);
        if (!latestVersion.isOnClasspath()) {
            ModuleSelectionInfo info = ModuleSelectionInfo.local(latestVersion);
            modulesLookup.put(info.getMetadata().getId(), info);
            sortedModules.add(info);
        }
    }
    Collections.sort(sortedModules, moduleInfoComparator);
    allSortedModules = new ArrayList<>(sortedModules);
    final UIList<ModuleSelectionInfo> moduleList = find("moduleList", UIList.class);
    if (moduleList != null) {
        moduleList.setList(sortedModules);
        moduleList.setItemRenderer(new AbstractItemRenderer<ModuleSelectionInfo>() {

            public String getString(ModuleSelectionInfo value) {
                return value.getMetadata().getDisplayName().toString();
            }

            @Override
            public void draw(ModuleSelectionInfo value, Canvas canvas) {
                if (isSelectedGameplayModule(value) && value.isValidToSelect()) {
                    canvas.setMode("gameplay");
                } else if (value.isSelected() && value.isExplicitSelection()) {
                    canvas.setMode("enabled");
                } else if (value.isSelected()) {
                    canvas.setMode("dependency");
                } else if (!value.isPresent()) {
                    canvas.setMode("disabled");
                } else if (!value.isValidToSelect()) {
                    canvas.setMode("invalid");
                } else {
                    canvas.setMode("available");
                }
                canvas.drawText(getString(value), canvas.getRegion());
            }

            @Override
            public Vector2i getPreferredSize(ModuleSelectionInfo value, Canvas canvas) {
                String text = getString(value);
                return new Vector2i(canvas.getCurrentStyle().getFont().getWidth(text), canvas.getCurrentStyle().getFont().getLineHeight());
            }
        });
        // ItemActivateEventListener is triggered by double clicking
        moduleList.subscribe((widget, item) -> {
            if (item.isSelected() && moduleList.getSelection().isExplicitSelection()) {
                deselect(item);
            } else if (item.isValidToSelect()) {
                select(item);
            }
        });
        ResettableUIText moduleSearch = find("moduleSearch", ResettableUIText.class);
        if (moduleSearch != null) {
            moduleSearch.subscribe(new TextChangeEventListener() {

                @Override
                public void onTextChange(String oldText, String newText) {
                    filterText(newText);
                }
            });
        }
        final Binding<ModuleMetadata> moduleInfoBinding = new ReadOnlyBinding<ModuleMetadata>() {

            @Override
            public ModuleMetadata get() {
                if (moduleList.getSelection() != null) {
                    return moduleList.getSelection().getMetadata();
                }
                return null;
            }
        };
        UILabel name = find("name", UILabel.class);
        if (name != null) {
            name.bindText(new ReadOnlyBinding<String>() {

                @Override
                public String get() {
                    if (moduleInfoBinding.get() != null) {
                        return moduleInfoBinding.get().getDisplayName().toString();
                    }
                    return "";
                }
            });
        }
        UILabel installedVersion = find("installedVersion", UILabel.class);
        if (installedVersion != null) {
            installedVersion.bindText(new ReadOnlyBinding<String>() {

                @Override
                public String get() {
                    ModuleSelectionInfo sel = moduleList.getSelection();
                    if (sel == null) {
                        return "";
                    }
                    return sel.isPresent() ? sel.getMetadata().getVersion().toString() : translationSystem.translate("${engine:menu#module-version-installed-none}");
                }
            });
        }
        UILabel onlineVersion = find("onlineVersion", UILabel.class);
        if (onlineVersion != null) {
            onlineVersion.bindText(new ReadOnlyBinding<String>() {

                @Override
                public String get() {
                    ModuleSelectionInfo sel = moduleList.getSelection();
                    if (sel == null) {
                        return "";
                    }
                    return (sel.getOnlineVersion() != null) ? sel.getOnlineVersion().getVersion().toString() : "none";
                }
            });
        }
        UILabel description = find("description", UILabel.class);
        if (description != null) {
            description.bindText(new ReadOnlyBinding<String>() {

                @Override
                public String get() {
                    ModuleMetadata moduleMetadata = moduleInfoBinding.get();
                    if (moduleMetadata != null) {
                        String dependenciesNames;
                        List<DependencyInfo> dependencies = moduleMetadata.getDependencies();
                        if (dependencies != null && dependencies.size() > 0) {
                            dependenciesNames = translationSystem.translate("${engine:menu#module-dependencies-exist}") + ":" + '\n';
                            for (DependencyInfo dependency : dependencies) {
                                dependenciesNames += "   " + dependency.getId().toString() + '\n';
                            }
                        } else {
                            dependenciesNames = translationSystem.translate("${engine:menu#module-dependencies-empty}") + ".";
                        }
                        return moduleMetadata.getDescription().toString() + '\n' + '\n' + dependenciesNames;
                    }
                    return "";
                }
            });
        }
        UILabel status = find("status", UILabel.class);
        if (status != null) {
            status.bindText(new ReadOnlyBinding<String>() {

                @Override
                public String get() {
                    ModuleSelectionInfo info = moduleList.getSelection();
                    if (info != null) {
                        if (isSelectedGameplayModule(info)) {
                            return translationSystem.translate("${engine:menu#module-status-activegameplay}");
                        } else if (info.isSelected() && info.isExplicitSelection()) {
                            return translationSystem.translate("${engine:menu#module-status-activated}");
                        } else if (info.isSelected()) {
                            return translationSystem.translate("${engine:menu#module-status-dependency}");
                        } else if (!info.isPresent()) {
                            return translationSystem.translate("${engine:menu#module-status-notpresent}");
                        } else if (info.isValidToSelect()) {
                            return translationSystem.translate("${engine:menu#module-status-available}");
                        } else {
                            return translationSystem.translate("${engine:menu#module-status-error}");
                        }
                    }
                    return "";
                }
            });
        }
        UIButton toggleActivate = find("toggleActivation", UIButton.class);
        if (toggleActivate != null) {
            toggleActivate.subscribe(button -> {
                ModuleSelectionInfo info = moduleList.getSelection();
                if (info != null) {
                    // Toggle
                    if (info.isSelected() && info.isExplicitSelection()) {
                        deselect(info);
                    } else if (info.isValidToSelect()) {
                        select(info);
                    }
                }
            });
            toggleActivate.bindEnabled(new ReadOnlyBinding<Boolean>() {

                @Override
                public Boolean get() {
                    ModuleSelectionInfo info = moduleList.getSelection();
                    return info != null && info.isPresent() && !isSelectedGameplayModule(info) && (info.isSelected() || info.isValidToSelect());
                }
            });
            toggleActivate.bindText(new ReadOnlyBinding<String>() {

                @Override
                public String get() {
                    if (moduleList.getSelection() != null) {
                        if (moduleList.getSelection().isExplicitSelection()) {
                            return translationSystem.translate("${engine:menu#deactivate-module}");
                        } else {
                            return translationSystem.translate("${engine:menu#activate-module}");
                        }
                    }
                    // button should be disabled
                    return translationSystem.translate("${engine:menu#activate-module}");
                }
            });
        }
        UIButton downloadButton = find("download", UIButton.class);
        if (downloadButton != null) {
            downloadButton.subscribe(button -> {
                if (moduleList.getSelection() != null) {
                    ModuleSelectionInfo info = moduleList.getSelection();
                    startDownloadingNewestModulesRequiredFor(info);
                }
            });
            downloadButton.bindEnabled(new ReadOnlyBinding<Boolean>() {

                @Override
                public Boolean get() {
                    try {
                        return moduleList.getSelection().getOnlineVersion() != null;
                    } catch (NullPointerException e) {
                        return false;
                    }
                }
            });
            downloadButton.bindText(new ReadOnlyBinding<String>() {

                @Override
                public String get() {
                    ModuleSelectionInfo info = moduleList.getSelection();
                    if (info != null && !info.isPresent()) {
                        return translationSystem.translate("${engine:menu#download-module}");
                    } else {
                        return translationSystem.translate("${engine:menu#update-module}");
                    }
                }
            });
        }
        UIButton disableAll = find("disableAll", UIButton.class);
        if (disableAll != null) {
            disableAll.subscribe(button -> sortedModules.stream().filter(info -> info.isSelected() && info.isExplicitSelection()).forEach(this::deselect));
        }
        localOnlyCheckbox = find("localOnly", UICheckbox.class);
        localOnlyCheckbox.bindChecked(new Binding<Boolean>() {

            @Override
            public Boolean get() {
                filterText(moduleSearch.getText());
                prepareModuleList(selectModulesConfig.isChecked());
                return selectModulesConfig.isChecked();
            }

            @Override
            public void set(Boolean value) {
                selectModulesConfig.setIsChecked(value);
                filterText(moduleSearch.getText());
                prepareModuleList(value);
            }
        });
    }
    WidgetUtil.trySubscribe(this, "close", button -> triggerBackAnimation());
}
Also used : TextChangeEventListener(org.terasology.rendering.nui.widgets.TextChangeEventListener) Name(org.terasology.naming.Name) UIButton(org.terasology.rendering.nui.widgets.UIButton) List(java.util.List) ArrayList(java.util.ArrayList) UIList(org.terasology.rendering.nui.widgets.UIList) Vector2i(org.terasology.math.geom.Vector2i) UILabel(org.terasology.rendering.nui.widgets.UILabel) ReadOnlyBinding(org.terasology.rendering.nui.databinding.ReadOnlyBinding) Canvas(org.terasology.rendering.nui.Canvas) ModuleMetadata(org.terasology.module.ModuleMetadata) UICheckbox(org.terasology.rendering.nui.widgets.UICheckbox) DependencyInfo(org.terasology.module.DependencyInfo) DependencyResolver(org.terasology.module.DependencyResolver) ResettableUIText(org.terasology.rendering.nui.widgets.ResettableUIText) Module(org.terasology.module.Module)

Aggregations

ArrayList (java.util.ArrayList)2 List (java.util.List)2 ReadOnlyBinding (org.terasology.rendering.nui.databinding.ReadOnlyBinding)2 UIButton (org.terasology.rendering.nui.widgets.UIButton)2 UILabel (org.terasology.rendering.nui.widgets.UILabel)2 UIList (org.terasology.rendering.nui.widgets.UIList)2 Joiner (com.google.common.base.Joiner)1 Predicate (com.google.common.base.Predicate)1 Collections2 (com.google.common.collect.Collections2)1 IOException (java.io.IOException)1 Collections (java.util.Collections)1 HashMap (java.util.HashMap)1 Map (java.util.Map)1 Callable (java.util.concurrent.Callable)1 ExecutionException (java.util.concurrent.ExecutionException)1 Future (java.util.concurrent.Future)1 Logger (org.slf4j.Logger)1 LoggerFactory (org.slf4j.LoggerFactory)1 ResourceUrn (org.terasology.assets.ResourceUrn)1 Config (org.terasology.config.Config)1