コード例 #1
1
 public int getTitleHeight(Component c) {
   int th = 21;
   int fh = getBorderInsets(c).top + getBorderInsets(c).bottom;
   if (c instanceof JDialog) {
     JDialog dialog = (JDialog) c;
     th = dialog.getSize().height - dialog.getContentPane().getSize().height - fh - 1;
     if (dialog.getJMenuBar() != null) {
       th -= dialog.getJMenuBar().getSize().height;
     }
   } else if (c instanceof JInternalFrame) {
     JInternalFrame frame = (JInternalFrame) c;
     th = frame.getSize().height - frame.getRootPane().getSize().height - fh - 1;
     if (frame.getJMenuBar() != null) {
       th -= frame.getJMenuBar().getSize().height;
     }
   } else if (c instanceof JRootPane) {
     JRootPane jp = (JRootPane) c;
     if (jp.getParent() instanceof JFrame) {
       JFrame frame = (JFrame) c.getParent();
       th = frame.getSize().height - frame.getContentPane().getSize().height - fh - 1;
       if (frame.getJMenuBar() != null) {
         th -= frame.getJMenuBar().getSize().height;
       }
     } else if (jp.getParent() instanceof JDialog) {
       JDialog dialog = (JDialog) c.getParent();
       th = dialog.getSize().height - dialog.getContentPane().getSize().height - fh - 1;
       if (dialog.getJMenuBar() != null) {
         th -= dialog.getJMenuBar().getSize().height;
       }
     }
   }
   return th;
 }
コード例 #2
0
 public void testContextIsJDialogWhenJDialogIsShown() {
   JDialog dialog = new JDialog();
   JButton comp = new JButton();
   dialog.getContentPane().add(comp);
   windowContext.setActiveWindow(comp);
   assertSame(dialog, windowContext.activeWindow());
 }
コード例 #3
0
 @Override
 public void actionPerformed(ActionEvent actionEvent) {
   Dimension all = parent.getSize();
   Dimension d = dialog.getSize();
   dialog.setLocation((all.width - d.width) / 2, (all.height - d.height) / 2);
   dialog.setVisible(true);
 }
コード例 #4
0
ファイル: Ssys3.java プロジェクト: scyptnex/computing
 public char[] askPassword() {
   char[] password = null;
   final JDialog dlg = new JDialog(frm, "Password", true);
   final JPasswordField jpf = new JPasswordField(15);
   final JButton[] btns = {new JButton("Enter"), new JButton("Cancel")};
   for (int i = 0; i < btns.length; i++) {
     btns[i].addActionListener(
         new ActionListener() {
           public void actionPerformed(ActionEvent e) {
             dlg.setVisible(false);
           }
         });
   }
   Object[] prts = new Object[] {"Please input a password:"******"Invalid password, passwords must be " + PASSWORD_MIN + " characters long");
     System.exit(1);
   }
   return password;
 }
コード例 #5
0
  /*
   * The following method creates the color chooser dialog box
   */
  public void createColorDialog() {
    colorDialog = new JDialog(this, new String("Choose a color"), true);
    colorDialog.getContentPane().add(createColorPicker(), BorderLayout.CENTER);

    JButton okButton = new JButton("OK");

    // This class is used to create a special ActionListener for
    //    the ok button
    class ButtonListener implements ActionListener {
      /*
       * This method is called whenever the ok button is clicked
       */
      public void actionPerformed(ActionEvent event) {
        currentChoice.changeColor(color_panel.getColor());
        currentChoice.repaint();
        fontColor = color_panel.getColor();
        colorDialog.hide();
      } // end actionPerformed method
    }
    ActionListener listener = new ButtonListener();
    okButton.addActionListener(listener);

    // Add the four font control panels to one big panel using
    //  a grid layout
    JPanel buttonPanel = new JPanel();

    buttonPanel.add(okButton);

    // Add the button panel to the content pane of the ColorDialogue
    colorDialog.getContentPane().add(buttonPanel, BorderLayout.SOUTH);

    colorDialog.pack();
  }
コード例 #6
0
  private JDialog createDialog(String title) {
    JDialog dlg = null;
    Presenter currentPst = AWWindowsManager.instance().getCurrentPst();
    //        boolean thrower = (currentPst!=null &&
    // currentPst.getClass().getSimpleName().equals("AbrirDocumentoPst"));
    //        if (thrower){
    //            dlg = new JDialog(null, title, Dialog.ModalityType.MODELESS);
    //        }else
    if (AWWindowsManager.instance().isInMainWindow() || (currentPst == null)) {
      dlg =
          new JDialog(
              AWWindowsManager.instance().getFrame(), title, Dialog.ModalityType.DOCUMENT_MODAL);
    } else {
      JDialog parent = (JDialog) ((View) currentPst.getView()).getParentContainer();
      dlg = new JDialog(parent, title, Dialog.ModalityType.DOCUMENT_MODAL);
    }
    setupIcons(dlg);
    dlg.setUndecorated(true);
    dlg.getContentPane().setLayout(new BorderLayout());

    installFestFixture(dlg);

    //        installMouseAdapter(dlg);

    return dlg;
  }
コード例 #7
0
  /**
   * @param editor
   * @param idDialog
   * @param dialog
   * @param title
   */
  public static void setDialogVisible(
      @Nullable Editor editor, String idDialog, JDialog dialog, String title) {
    Point location = null;

    if (editor != null) {
      Point caretLocation = editor.visualPositionToXY(editor.getCaretModel().getVisualPosition());
      SwingUtilities.convertPointToScreen(caretLocation, editor.getComponent());

      String[] position = UtilsPreferences.getDialogPosition(idDialog).split("x");
      if (!(position[0].equals("0") && position[1].equals("0"))) {
        location = new Point(Integer.parseInt(position[0]), Integer.parseInt(position[1]));
      }
    }

    if (location == null) {
      // Center to screen
      dialog.setLocationRelativeTo(null);
    } else {
      dialog.setLocation(location.x, location.y);
    }

    dialog.setTitle(title);
    dialog.pack();
    dialog.setVisible(true);
  }
コード例 #8
0
 /** Show the filter dialog */
 public void showDialog() {
   empty_border = new EmptyBorder(5, 5, 0, 5);
   indent_border = new EmptyBorder(5, 25, 5, 5);
   include_panel =
       new ServiceFilterPanel("Include messages based on target service:", filter_include_list);
   exclude_panel =
       new ServiceFilterPanel("Exclude messages based on target service:", filter_exclude_list);
   status_box = new JCheckBox("Filter messages based on status:");
   status_box.addActionListener(this);
   status_active = new JRadioButton("Active messages only");
   status_active.setSelected(true);
   status_active.setEnabled(false);
   status_complete = new JRadioButton("Complete messages only");
   status_complete.setEnabled(false);
   status_group = new ButtonGroup();
   status_group.add(status_active);
   status_group.add(status_complete);
   if (filter_active || filter_complete) {
     status_box.setSelected(true);
     status_active.setEnabled(true);
     status_complete.setEnabled(true);
     if (filter_complete) {
       status_complete.setSelected(true);
     }
   }
   status_options = new JPanel();
   status_options.setLayout(new BoxLayout(status_options, BoxLayout.Y_AXIS));
   status_options.add(status_active);
   status_options.add(status_complete);
   status_options.setBorder(indent_border);
   status_panel = new JPanel();
   status_panel.setLayout(new BorderLayout());
   status_panel.add(status_box, BorderLayout.NORTH);
   status_panel.add(status_options, BorderLayout.CENTER);
   status_panel.setBorder(empty_border);
   ok_button = new JButton("Ok");
   ok_button.addActionListener(this);
   cancel_button = new JButton("Cancel");
   cancel_button.addActionListener(this);
   buttons = new JPanel();
   buttons.setLayout(new FlowLayout());
   buttons.add(ok_button);
   buttons.add(cancel_button);
   panel = new JPanel();
   panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
   panel.add(include_panel);
   panel.add(exclude_panel);
   panel.add(status_panel);
   panel.add(buttons);
   dialog = new JDialog();
   dialog.setTitle("SOAP Monitor Filter");
   dialog.setContentPane(panel);
   dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
   dialog.setModal(true);
   dialog.pack();
   Dimension d = dialog.getToolkit().getScreenSize();
   dialog.setLocation((d.width - dialog.getWidth()) / 2, (d.height - dialog.getHeight()) / 2);
   ok_pressed = false;
   dialog.show();
 }
コード例 #9
0
 /** Listener to handle button actions */
 public void actionPerformed(ActionEvent e) {
   // Check if the user pressed the ok button
   if (e.getSource() == ok_button) {
     filter_include_list = include_panel.getServiceList();
     filter_exclude_list = exclude_panel.getServiceList();
     if (status_box.isSelected()) {
       filter_active = status_active.isSelected();
       filter_complete = status_complete.isSelected();
     } else {
       filter_active = false;
       filter_complete = false;
     }
     ok_pressed = true;
     dialog.dispose();
   }
   // Check if the user pressed the cancel button
   if (e.getSource() == cancel_button) {
     dialog.dispose();
   }
   // Check if the user changed the status filter option
   if (e.getSource() == status_box) {
     status_active.setEnabled(status_box.isSelected());
     status_complete.setEnabled(status_box.isSelected());
   }
 }
コード例 #10
0
  static void tell(String question, String btnText) {
    final JDialog d = new JDialog();
    d.setLocationRelativeTo(null);
    JPanel bpane = new JPanel(new FlowLayout());
    JLabel l = new JLabel(question);

    JPanel cp = (JPanel) d.getContentPane();

    cp.setLayout(new FlowLayout());
    cp.add(l, BorderLayout.CENTER);
    cp.add(bpane, BorderLayout.SOUTH);

    JButton b1 = new JButton("OK");
    bpane.add(b1);

    d.pack();

    d.setVisible(true);

    b1.addActionListener(
        new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent e) {
            ans = ((JButton) e.getSource()).getText();
            d.dispose();
          }
        });
  }
コード例 #11
0
  /** Initialise. */
  public synchronized void initialise() {

    // wait until application is properly initialised
    while (applicationService == null) {
      // idle in this thread
      try {
        this.wait(6000);
      } catch (InterruptedException e) {
        logger.warn("e.getMessage() = " + e.getMessage());
      }

      if (applicationService != null && applicationService.getErrorLoggerService() != null) {
        this.applicationService.getErrorLoggerService().registerListener(this);
      }
    }

    // set LNF first to avoid component UI errors
    LookAndFeelUtils.setDefaultLNF();

    errorPane = new JXErrorPane();
    errorPane.setPreferredSize(new Dimension(400, 300));
    errorPane.setIcon(ImageUtils.getIcon(ImageUtils.IconName.WARNING_ICON_48));
    errorPane.setErrorReporter(this);
    errorDialog = JXErrorPane.createDialog(null, errorPane);
    errorDialog.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
    errorDialog.pack();
  }
コード例 #12
0
  private JDialog assembleDialog() {
    String title = getTitle();
    JDialog dlg = createDialog(title);

    boolean showAudit = showAuditFields();

    int headerHeight = 0;
    //        int headerHeight = (int) viewLayout.headerPanel.getPreferredSize().getHeight();
    int auditInfoHeight = 0; // (int) viewLayout.auditInfo.getPreferredSize().getHeight();
    int toolbarHeight = 0;
    int errorHeight = 0;
    int contentHeight = (int) viewLayout.contentPanel.getPreferredSize().getHeight();
    int contentWidth = (int) viewLayout.contentPanel.getPreferredSize().getWidth();
    int footerHeight = 0;
    int delta = 40;
    /*        if(contentHeight<=450){
        delta=-160;
    }else if (contentHeight<=700){
        delta=40;
    }*/

    dlg.setSize(
        contentWidth,
        (showAudit ? -14 : -14)
            + headerHeight
            + toolbarHeight
            + auditInfoHeight
            + errorHeight
            + contentHeight
            + footerHeight
            + delta);

    return dlg;
  }
コード例 #13
0
  public void showTaskDialog(final Task selectedValue) {

    final JDialog taskForm =
        new JDialog(this, "Create new task", Dialog.ModalityType.APPLICATION_MODAL);
    JPanel content = new JPanel(new GridLayout(3, 1));
    final JPanel namePanel = new JPanel(new FlowLayout());
    namePanel.add(new JLabel("Name:"));
    final JTextField taskName =
        new JTextField(selectedValue == null ? "" : selectedValue.getName(), 30);
    namePanel.add(taskName);
    content.add(namePanel);

    final JPanel descPanel = new JPanel(new FlowLayout());
    descPanel.add(new JLabel("Description:"));
    final JTextArea taskDesc =
        new JTextArea(selectedValue == null ? "" : selectedValue.getDescription(), 5, 30);
    descPanel.add(taskDesc);
    content.add(descPanel);

    JPanel btnPanel = new JPanel(new FlowLayout());

    JButton cancel = new JButton("Cancel");
    cancel.addActionListener(
        new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent e) {
            taskForm.dispose();
          }
        });
    btnPanel.add(cancel);

    JButton save = new JButton("Save");
    save.addActionListener(
        new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent e) {
            if (selectedValue == null) {
              Task task = new Task(taskName.getText());
              task.setDescription(taskDesc.getText());
              logger.info("Create task: " + task);
              controller.addTask(task);
            } else {
              selectedValue.setName(taskName.getText());
              selectedValue.setDescription(taskDesc.getText());
              logger.info("Update task: " + selectedValue);
              controller.editTask(selectedValue);
            }
            taskForm.dispose();
          }
        });
    btnPanel.add(save);

    content.add(btnPanel);

    taskForm.getContentPane().add(content);
    taskForm.setLocationRelativeTo(null);
    taskForm.pack();
    taskForm.setVisible(true);
  }
コード例 #14
0
 public JDialog createFileChooserDialog(JFileChooser jfilechooser, String s, Container container) {
   JDialog jdialog = new JDialog(frame, s, true);
   jdialog.setDefaultCloseOperation(2);
   jdialog.add(jfilechooser);
   jdialog.pack();
   jdialog.setLocationRelativeTo(container);
   return jdialog;
 }
コード例 #15
0
 public void testMethodCallInSuper() throws Exception {
   // todo[yole] make this test work in headless
   if (!GraphicsEnvironment.isHeadless()) {
     Class cls = loadAndPatchClass("TestMethodCallInSuper.form", "MethodCallInSuperTest");
     JDialog instance = (JDialog) cls.newInstance();
     assertEquals(1, instance.getContentPane().getComponentCount());
   }
 }
コード例 #16
0
 private void proceedDialogDisposalQueue(Project project) {
   Set<JDialog> dialogs = myDialogsToDispose.get(project);
   if (dialogs == null) return;
   for (JDialog dialog : dialogs) {
     dialog.dispose();
   }
   myDialogsToDispose.put(project, null);
 }
コード例 #17
0
  public void edit(Evaluator evaluator, JFrame parent) {
    if (!(evaluator instanceof Evaluator)) {
      return; // error?
    }

    // create an editor dialog box
    JDialog editor = new Editor(parent, (Evaluator) evaluator);
    editor.setVisible(true);
  }
コード例 #18
0
ファイル: ColorChooser.java プロジェクト: okohll/svg_editor
  /**
   * shows a color chooser dialog
   *
   * @param initialColor the initial Color set when the color-chooser is shown
   * @return the selected color or <code>null</code> if the user opted out
   */
  public Color showColorChooserDialog(Color initialColor) {

    setColor(initialColor);
    SVGColorTracker ok = new SVGColorTracker(this);
    JDialog dialog = createDialog(Editor.getParent(), "", true, this, ok, null);
    dialog.setVisible(true);

    return ok.getColor();
  }
コード例 #19
0
 public void testWaitForDialogWithActiveWindowAsTargetDialog() throws InterruptedException {
   JFrame frame = new JFrame();
   JDialog testDialog = new JDialog(frame, "testDialog");
   setFocusManager(testDialog);
   windowContext.propertyChange(new PropertyChangeEvent(this, "focusOwner", null, testDialog));
   windowContext.waitForDialogOpening("testDialog", 10);
   assertSame(testDialog, windowContext.activeWindow());
   testDialog.dispose();
   frame.dispose();
 }
コード例 #20
0
  private void initializeDlg() {
    if (pst.isEmbeddedView()) {
      return;
    }
    JDialog dlg = (JDialog) parentContainer;

    dlg.add(viewLayout.mainPanel, BorderLayout.CENTER);

    //        SwingUtils.locateOnScreenCenter(dlg);
    SwingUtils.locateRelativeToMenu(dlg);
    dlg.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
    dlg.addWindowListener(
        new java.awt.event.WindowAdapter() {
          // todo ver cómo se va a hacer esto en la versión Filthy
          public void windowOpened(WindowEvent e) {
            if (pst != null) {
              pst.onWindowsOpened(e);
              pst.onWindowsOpenedInternalOnlyForAWFW(e);
              if (!pst.isReadOnly()) {
                //                        pst.setFocusToCmpOnWindowOpen();
                //
                // ActionManager.instance().getVisualMgrForActions().repaintMainDisabledActions(pst.getActionRsr());
              } else {
                pst.configureAsReanOnly();
                JButton btnCancel = (JButton) pst.getIpView().getComponent("btnCancel");
                if (btnCancel != null) {
                  btnCancel.requestFocusInWindow();
                }
              }
            }
          }

          public void windowClosing(WindowEvent e) {
            MsgDisplayer.showMessage("sw.common.closeWindowDisabled");
          }

          public void windowActivated(WindowEvent e) {
            Object oppositeWindow = e.getOppositeWindow();

            if (oppositeWindow instanceof DlgMensaje) {
              logger.debug("Ignoring Windows activated for DlgMensaje");
              return;
            }
            if (oppositeWindow instanceof JDialog) {
              JDialog dlg = (JDialog) oppositeWindow;
              if (MessageDisplayer.GENERIC_MESSAGE_TITLE.equals(dlg.getTitle())) {
                logger.debug("Ignoring Windows activated for System Msg");
                return;
              }
            }
            logger.debug("Windows Activated:" + pst);
            AWWindowsManager.instance().setPresenterActivated(pst);
          }
        });
  }
コード例 #21
0
 @Override
 public void actionPerformed(ActionEvent e) {
   if (e.getSource() == okButton) {
     if (original != null) {
       original.restoreState(config);
     }
     dialog.setVisible(false);
   } else if (e.getSource() == cancelButton) {
     dialog.setVisible(false);
   }
 }
コード例 #22
0
 /**
  * Method used by the SystemIO class to get interactive user input requested by a running MIPS
  * program (e.g. syscall #5 to read an integer). SystemIO knows whether simulator is being run at
  * command line by the user, or by the GUI. If run at command line, it gets input from System.in
  * rather than here.
  *
  * <p>This is an overloaded method. This version, with the String parameter, is used to get input
  * from a popup dialog.
  *
  * @param prompt Prompt to display to the user.
  * @return User input.
  */
 public String getInputString(String prompt) {
   String input;
   JOptionPane pane =
       new JOptionPane(prompt, JOptionPane.QUESTION_MESSAGE, JOptionPane.DEFAULT_OPTION);
   pane.setWantsInput(true);
   JDialog dialog = pane.createDialog(Globals.getGui(), "MIPS Keyboard Input");
   dialog.setVisible(true);
   input = (String) pane.getInputValue();
   this.postRunMessage(Globals.userInputAlert + input + "\n");
   return input;
 }
コード例 #23
0
ファイル: WindowHolder.java プロジェクト: ethanrd/IDV
  /** Close me */
  public void close() {
    if (dialog != null) {
      dialog.setVisible(false);
      if (dialog.isModal()) {
        dialog.setModal(false);
      }
    }

    if (frame != null) {
      frame.setVisible(false);
    }
  }
コード例 #24
0
 public void show() {
   if (!myRequestFocus) {
     myDialog.setFocusableWindowState(false);
   }
   myDialog.setVisible(true);
   SwingUtilities.invokeLater(
       new Runnable() {
         public void run() {
           myDialog.setFocusableWindowState(true);
         }
       });
 }
コード例 #25
0
 public void hideDialog(JDialog dialog, Project project) {
   if (project == null) {
     dialog.dispose();
   } else {
     IdeFrameImpl frame = getFrame(project);
     if (frame.isActive()) {
       dialog.dispose();
     } else {
       queueForDisposal(dialog, project);
       dialog.setVisible(false);
     }
   }
 }
コード例 #26
0
ファイル: WidthScaleDialog.java プロジェクト: justsz/Mastodon
  public int showDialog() {

    options = new OptionsPanel(6, 6);

    options.addComponent(autoScaleCheck);

    JPanel panel = new JPanel();
    panel.setLayout(new FlowLayout());
    panel.add(fromLabel);
    panel.add(fromNumberField);
    panel.add(toLabel);
    panel.add(toNumberField);
    options.addComponent(panel);

    JPanel panel1 = new JPanel();
    panel1.setLayout(new FlowLayout());
    panel1.add(new JLabel("Width from:"));
    panel1.add(fromWidthField);
    panel1.add(new JLabel("to:"));
    panel1.add(toWidthField);
    options.addComponent(panel1);

    JOptionPane optionPane =
        new JOptionPane(
            options, JOptionPane.QUESTION_MESSAGE, JOptionPane.OK_CANCEL_OPTION, null, null, null);
    optionPane.setBorder(new EmptyBorder(12, 12, 12, 12));

    final JDialog dialog = optionPane.createDialog(frame, "Setup colour range");
    dialog.pack();

    autoScaleCheck.addItemListener(
        new ItemListener() {
          public void itemStateChanged(ItemEvent e) {
            boolean enabled = !autoScaleCheck.isSelected();
            fromLabel.setEnabled(enabled);
            fromNumberField.setEnabled(enabled);
            toLabel.setEnabled(enabled);
            toNumberField.setEnabled(enabled);
          }
        });

    dialog.setVisible(true);

    int result = JOptionPane.CANCEL_OPTION;
    Integer value = (Integer) optionPane.getValue();
    if (value != null && value.intValue() != -1) {
      result = value.intValue();
    }

    return result;
  }
コード例 #27
0
ファイル: ClientGui.java プロジェクト: timburrow/ovj3
  private void warning(String msg) {
    final JDialog warn;
    JButton ok;
    JLabel message;

    warn = new JDialog();
    warn.setTitle(msg);

    message = new JLabel("CryoBay: " + msg);
    ok = new JButton("Ok");

    ok.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent ae) {
            warn.dispose();
          }
        });

    warn.getContentPane().setLayout(new BorderLayout());
    warn.getContentPane().add(message, "North");
    warn.getContentPane().add(ok, "South");

    warn.setSize(200, 80);
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    warn.setLocation(screenSize.width / 2 - 100, screenSize.height / 2 - 40);
    warn.setResizable(false);
    warn.show();
  }
コード例 #28
0
 private void createJDlg() {
   JDialog dlg;
   if (vsr instanceof JDialog) {
     dlg = (JDialog) vsr;
   } else {
     // jcv2.0.1
     if (pst.isEmbeddedView()) {
       parentContainer = vsr;
     } else {
       dlg = assembleDialog();
       dlg.setName(getDlgName(vsr.getClass().getName()));
       parentContainer = dlg;
     }
   }
 }
コード例 #29
0
 public void testWaitForActiveDialogWhenDialogIsNotReady() throws InterruptedException {
   final JDialog testDialog = new JDialog(new JFrame(), "testDialog");
   setFocusManager(testDialog);
   new Thread(
           new Runnable() {
             public void run() {
               windowContext.propertyChange(
                   new PropertyChangeEvent(this, "focusOwner", null, testDialog));
             }
           })
       .start();
   windowContext.waitForDialogOpening("testDialog", 10);
   assertEquals(testDialog, windowContext.activeWindow());
   testDialog.dispose();
 }
コード例 #30
0
 public void actionPerformed(ActionEvent evt) {
   JDialog parent = GUIUtilities.getParentDialog(ColorWellButton.this);
   JDialog dialog;
   if (parent != null) {
     dialog = new ColorPickerDialog(parent, jEdit.getProperty("colorChooser.title"), true);
   } else {
     dialog =
         new ColorPickerDialog(
             JOptionPane.getFrameForComponent(ColorWellButton.this),
             jEdit.getProperty("colorChooser.title"),
             true);
   }
   dialog.pack();
   dialog.setVisible(true);
 }