private JPanel createFeaturesPanel() {
    JPanel container = new JPanel();
    SwingHelper.removeOpaqueness(container);
    container.setLayout(new MigLayout("fill, insets dialog"));

    JButton newButton = new JButton("New...");
    JButton editButton = new JButton("Edit...");
    JButton deleteButton = new JButton("Delete...");

    container.add(newButton, "span, split 3, sizegroup bttn");
    container.add(editButton, "sizegroup bttn");
    container.add(deleteButton, "sizegroup bttn");

    container.add(SwingHelper.wrapScrollPane(featuresTable), "grow, w 10:100:null, gaptop 10");

    newButton.addActionListener(
        e -> {
          FeaturePattern pattern = new FeaturePattern();
          if (FeaturePatternDialog.showEditor(BuilderConfigDialog.this, pattern)) {
            featuresModel.addFeature(pattern);
          }
        });

    editButton.addActionListener(
        e -> {
          int index = featuresTable.getSelectedRow();
          if (index > -1) {
            FeaturePattern pattern = featuresModel.getFeature(index);
            FeaturePatternDialog.showEditor(BuilderConfigDialog.this, pattern);
            featuresModel.fireTableDataChanged();
          } else {
            SwingHelper.showErrorDialog(
                BuilderConfigDialog.this, "Select a feature first.", "No Selection");
          }
        });

    deleteButton.addActionListener(
        e -> {
          int index = featuresTable.getSelectedRow();
          if (index > -1) {
            FeaturePattern pattern = featuresModel.getFeature(index);
            if (SwingHelper.confirmDialog(
                BuilderConfigDialog.this,
                "Are you sure that you want to delete '" + pattern.getFeature().getName() + "'?",
                "Delete")) {
              featuresModel.removeFeature(index);
            }
          } else {
            SwingHelper.showErrorDialog(
                BuilderConfigDialog.this, "Select a feature first.", "No Selection");
          }
        });

    return container;
  }
    private void launch() {
        try {
            final Instance instance = launcher.getInstances().get(instancesTable.getSelectedRow());
            boolean update = updateCheck.isSelected() && instance.isUpdatePending();

            // Store last access date
            Date now = new Date();
            instance.setLastAccessed(now);
            Persistence.commitAndForget(instance);

            // Perform login
            final Session session = LoginDialog.showLoginRequest(this, launcher);
            if (session == null) {
                return;
            }

            // If we have to update, we have to update
            if (!instance.isInstalled()) {
                update = true;
            }

            if (update) {
                // Execute the updater
                Updater updater = new Updater(launcher, instance);
                updater.setOnline(session.isOnline());
                ObservableFuture<Instance> future = new ObservableFuture<Instance>(
                        launcher.getExecutor().submit(updater), updater);

                // Show progress
                ProgressDialog.showProgress(
                        this, future, _("launcher.updatingTitle"), _("launcher.updatingStatus", instance.getTitle()));
                SwingHelper.addErrorDialogCallback(this, future);

                // Update the list of instances after updating
                future.addListener(new Runnable() {
                    @Override
                    public void run() {
                        instancesModel.update();
                    }
                }, SwingExecutor.INSTANCE);

                // On success, launch also
                Futures.addCallback(future, new FutureCallback<Instance>() {
                    @Override
                    public void onSuccess(Instance result) {
                        launch(instance, session);
                    }

                    @Override
                    public void onFailure(Throwable t) {
                    }
                }, SwingExecutor.INSTANCE);
            } else {
                launch(instance, session);
            }
        } catch (ArrayIndexOutOfBoundsException e) {
            SwingHelper.showErrorDialog(this, _("launcher.noInstanceError"), _("launcher.noInstanceTitle"));
        }
    }
Example #3
0
    private void launch() {
        boolean offlineOnly = false;

        if(LauncherFrame.this.updateUrl != null) {
            SwingHelper.showMessageDialog(
                    LauncherFrame.this,
                    _("launcher.selfUpdateComplete"),
                    _("errors.launchImpossible"),
                   null,
                    JOptionPane.ERROR_MESSAGE);
            return;
        }

        if(LauncherFrame.this.updateRequired) {
            offlineOnly = true;
            if(!SwingHelper.confirmDialog(
                    LauncherFrame.this,
                    _("errors.offlineOnly"),
                    _("errors.genericError"))) return;
        }
        try {
            final Instance instance = launcher.getInstances().get(instancesTable.getSelectedRow());

            // Store last access date
            Date now = new Date();
            instance.setLastAccessed(now);
            Persistence.commitAndForget(instance);

            // Perform login
            final Session session = offlineOnly
                ? (new OfflineSession(launcher.getProperties().getProperty("offlinePlayerName")))
                : LoginDialog.showLoginRequest(this, launcher);
            if (session == null) {
                return;
            }

            // Execute the updater
            Updater updater = new Updater(launcher, instance);
            updater.setSelectFeatures(configureFeaturesCheck.isSelected());
            updater.setOnline(session.isOnline());
            ObservableFuture<Instance> future = new ObservableFuture<Instance>(
                    launcher.getExecutor().submit(updater), updater);

            // Show progress
            ProgressDialog.showProgress(
                    this, future, _("launcher.updatingTitle"), _("launcher.updatingStatus", instance.getTitle()));
            SwingHelper.addErrorDialogCallback(this, future);

            // Update the list of instances after updating
            future.addListener(new Runnable() {
                @Override
                public void run() {
                    instancesModel.update();
                }
            }, SwingExecutor.INSTANCE);

            // On success, launch also
            Futures.addCallback(future, new FutureCallback<Instance>() {
                @Override
                public void onSuccess(Instance result) {
                    launch(instance, session);
                }

                @Override
                public void onFailure(Throwable t) {
                }
            }, SwingExecutor.INSTANCE);
        } catch (ArrayIndexOutOfBoundsException e) {
            SwingHelper.showErrorDialog(this, _("launcher.noInstanceError"), _("launcher.noInstanceTitle"));
        }
    }
  private void initComponents() {
    nameText.setComponentPopupMenu(TextFieldPopupMenu.INSTANCE);
    titleText.setComponentPopupMenu(TextFieldPopupMenu.INSTANCE);
    gameVersionText.setComponentPopupMenu(TextFieldPopupMenu.INSTANCE);
    launchFlagsArea.setComponentPopupMenu(TextFieldPopupMenu.INSTANCE);
    userFilesIncludeArea.setComponentPopupMenu(TextFieldPopupMenu.INSTANCE);

    launchFlagsArea.setFont(nameText.getFont());
    userFilesIncludeArea.setFont(nameText.getFont());
    userFilesExcludeArea.setFont(nameText.getFont());

    JTabbedPane tabbedPane = new JTabbedPane();

    JPanel container = new JPanel();
    container.setLayout(new MigLayout("fill, insets dialog"));

    tabbedPane.addTab("Modpack", null, createMainPanel());
    tabbedPane.addTab("Launch", null, createLaunchPanel());
    tabbedPane.addTab("User Files", null, createUserFilesPanel());
    tabbedPane.addTab("Optional Features", null, createFeaturesPanel());

    container.add(tabbedPane, "span, grow, gapbottom unrel");

    JButton saveButton = new JButton("Save");
    JButton cancelButton = new JButton("Cancel");

    container.add(saveButton, "tag ok, span, split 2, sizegroup bttn");
    container.add(cancelButton, "tag cancel, sizegroup bttn");

    getRootPane().setDefaultButton(saveButton);
    getRootPane()
        .registerKeyboardAction(
            event -> cancelButton.doClick(),
            KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0),
            JComponent.WHEN_IN_FOCUSED_WINDOW);

    add(container, BorderLayout.CENTER);

    saveButton.addActionListener(
        e -> {
          if (nameText.getText().trim().isEmpty()) {
            SwingHelper.showErrorDialog(
                BuilderConfigDialog.this, "The 'Name' field cannot be empty.", "Input Error");
            return;
          }

          if (gameVersionText.getText().trim().isEmpty()) {
            SwingHelper.showErrorDialog(
                BuilderConfigDialog.this,
                "The 'Game Version' field must be a Minecraft version.",
                "Input Error");
            return;
          }

          copyTo();
          saved = true;
          dispose();
        });

    cancelButton.addActionListener(e -> dispose());

    TableSearchable tableSearchable = SearchableUtils.installSearchable(featuresTable);
    tableSearchable.setMainIndex(-1);
  }