/** * Copyright 2011 multibit.org * * Licensed under the MIT license (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://opensource.org/licenses/mit-license.php * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.multibit.viewsystem.swing.view.dialogs; import org.multibit.controller.Controller; import org.multibit.controller.bitcoin.BitcoinController; import org.multibit.model.bitcoin.BitcoinModel; import org.multibit.utils.ImageLoader; import org.multibit.viewsystem.DisplayHint; import org.multibit.viewsystem.View; import org.multibit.viewsystem.Viewable; import org.multibit.viewsystem.dataproviders.ShowUriDialogDataProvider; import org.multibit.viewsystem.swing.MultiBitFrame; import org.multibit.viewsystem.swing.action.ShowOpenUriCancelAction; import org.multibit.viewsystem.swing.action.ShowOpenUriSubmitAction; import org.multibit.viewsystem.swing.view.components.FontSizer; import org.multibit.viewsystem.swing.view.components.MultiBitDialog; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.swing.*; import java.awt.*; /** * The show open uri view. */ public class ShowOpenUriDialog extends MultiBitDialog implements Viewable, ShowUriDialogDataProvider { private Logger log = LoggerFactory.getLogger(ShowOpenUriDialog.class); private static final long serialVersionUID = 191411112345057705L; private MultiBitFrame mainFrame; private final Controller controller; private final BitcoinController bitcoinController; private JButton submitButton; private JButton cancelButton; private JCheckBox rememberCheckBox; private Font adjustedFont; private int DEFAULT_WIDTH = 640; private int DEFAULT_HEIGHT = 200; private int WIDTH_DELTA = 100; private int HEIGHT_DELTA = 50; private int NUMBER_OF_ROWS = 4; /** * Creates a new {@link ShowOpenUriDialog}. */ public ShowOpenUriDialog(BitcoinController bitcoinController, MultiBitFrame mainFrame) { super(mainFrame, bitcoinController.getLocaliser().getString("showOpenUriView.title")); this.bitcoinController = bitcoinController; this.controller = this.bitcoinController; this.mainFrame = mainFrame; setAlwaysOnTop(true); ImageIcon imageIcon = ImageLoader.createImageIcon(ImageLoader.MULTIBIT_ICON_FILE); if (imageIcon != null) { setIconImage(imageIcon.getImage()); } initUI(); cancelButton.requestFocusInWindow(); applyComponentOrientation(ComponentOrientation.getOrientation(controller.getLocaliser().getLocale())); log.debug("Constructor called for ShowOpenUriDialog " + this.toString()); } /** * show open uri view */ private void initUI() { adjustedFont = FontSizer.INSTANCE.getAdjustedDefaultFont(); int width = DEFAULT_WIDTH; int height = DEFAULT_HEIGHT; if (adjustedFont != null) { FontMetrics fontMetrics = this.getFontMetrics(FontSizer.INSTANCE.getAdjustedDefaultFont()); int message1Width = fontMetrics.stringWidth(controller.getLocaliser().getString("showOpenUriView.message1")); int message2Width = fontMetrics.stringWidth(controller.getLocaliser().getString("showOpenUriView.message2")); width = Math.max(Math.max(message1Width, message2Width) + WIDTH_DELTA, width); height = Math.max(height, NUMBER_OF_ROWS * fontMetrics.getHeight() + HEIGHT_DELTA); } setMinimumSize(new Dimension(width, height)); positionDialogRelativeToParent(this, 0.5D, 0.47D); setLayout(new GridBagLayout()); GridBagConstraints constraints = new GridBagConstraints(); JLabel filler00 = new JLabel(); constraints.fill = GridBagConstraints.BOTH; constraints.gridx = 0; constraints.gridy = 0; constraints.weightx = 0.3; constraints.weighty = 0.2; constraints.gridwidth = 1; constraints.gridheight = 1; constraints.anchor = GridBagConstraints.LINE_START; add(filler00, constraints); JLabel filler01 = new JLabel(); constraints.fill = GridBagConstraints.BOTH; constraints.gridx = 2; constraints.gridy = 1; constraints.weightx = 0.3; constraints.weighty = 0.2; constraints.gridwidth = 1; constraints.gridheight = 1; constraints.anchor = GridBagConstraints.LINE_START; add(filler01, constraints); ImageIcon bigIcon = ImageLoader.createImageIcon(ImageLoader.QUESTION_MARK_ICON_FILE); constraints.fill = GridBagConstraints.BOTH; constraints.gridx = 0; constraints.gridy = 1; constraints.weightx = 0.5; constraints.weighty = 0.2; constraints.gridwidth = 1; constraints.gridheight = 3; constraints.anchor = GridBagConstraints.CENTER; JLabel bigIconLabel = new JLabel(bigIcon); add(bigIconLabel, constraints); JLabel messageLabel1 = new JLabel(); messageLabel1.setText(controller.getLocaliser().getString("showOpenUriView.message1")); constraints.fill = GridBagConstraints.NONE; constraints.gridx = 1; constraints.gridy = 1; constraints.weightx = 0.8; constraints.weighty = 0.3; constraints.gridwidth = 1; constraints.gridheight = 1; constraints.anchor = GridBagConstraints.LINE_START; add(messageLabel1, constraints); JLabel messageLabel2 = new JLabel(); messageLabel2.setText(controller.getLocaliser().getString("showOpenUriView.message2")); constraints.fill = GridBagConstraints.NONE; constraints.gridx = 1; constraints.gridy = 2; constraints.weightx = 0.8; constraints.weighty = 0.3; constraints.gridwidth = 1; constraints.gridheight = 1; constraints.anchor = GridBagConstraints.ABOVE_BASELINE_LEADING; add(messageLabel2, constraints); rememberCheckBox = new JCheckBox(); rememberCheckBox.setText(controller.getLocaliser().getString("showOpenUriView.rememberMyDecision")); constraints.fill = GridBagConstraints.NONE; constraints.gridx = 1; constraints.gridy = 3; constraints.weightx = 0.8; constraints.weighty = 0.3; constraints.gridwidth = 1; constraints.gridheight = 1; constraints.anchor = GridBagConstraints.ABOVE_BASELINE_LEADING; add(rememberCheckBox, constraints); JPanel buttonPanel = new JPanel(); constraints.fill = GridBagConstraints.NONE; constraints.gridx = 1; constraints.gridy = 4; constraints.weightx = 0.8; constraints.weighty = 0.1; constraints.gridwidth = 4; constraints.gridheight = 1; constraints.anchor = GridBagConstraints.LINE_END; add(buttonPanel, constraints); ShowOpenUriCancelAction cancelAction = new ShowOpenUriCancelAction(controller, this, this); cancelButton = new JButton(cancelAction); cancelButton.setText(controller.getLocaliser().getString("showOpenUriView.noText")); buttonPanel.add(cancelButton); ShowOpenUriSubmitAction showOpenUriSubmitAction = new ShowOpenUriSubmitAction(mainFrame, this.bitcoinController, this, this); submitButton = new JButton(showOpenUriSubmitAction); submitButton.setText(controller.getLocaliser().getString("showOpenUriView.yesText")); buttonPanel.add(submitButton); JLabel filler3 = new JLabel(); constraints.fill = GridBagConstraints.HORIZONTAL; constraints.gridx = 2; constraints.gridy = 4; constraints.weightx = 0.05; constraints.weighty = 0.1; constraints.gridwidth = 1; constraints.anchor = GridBagConstraints.LINE_START; add(filler3, constraints); } @Override public void navigateAwayFromView() { setVisible(false); log.debug("Navigate away from view called for ShowOpenUriDialog " + this.toString()); } @Override public void displayView(DisplayHint displayHint) { log.debug("display called for ShowOpenUriDialog " + this.toString()); adjustedFont = FontSizer.INSTANCE.getAdjustedDefaultFont(); if (adjustedFont != null) { setFileChooserFont(new Container[] {this}); } String showDialogString = controller.getModel().getUserPreference(BitcoinModel.OPEN_URI_SHOW_DIALOG); if (!(Boolean.FALSE.toString().equalsIgnoreCase(showDialogString))) { // missing showDialog or it is set to true rememberCheckBox.setSelected(false); } else { rememberCheckBox.setSelected(true); } setVisible(true); invalidate(); validate(); repaint(); // bring this dialog to the front bringToFront(); } private void bringToFront() { java.awt.EventQueue.invokeLater(new Runnable() { @Override public void run() { toFront(); repaint(); } }); } @Override public Icon getViewIcon() { return ImageLoader.createImageIcon(ImageLoader.MULTIBIT_SMALL_ICON_FILE); } @Override public String getViewTitle() { return controller.getLocaliser().getString("showOpenUriView.title"); } @Override public String getViewTooltip() { return controller.getLocaliser().getString("showOpenUriView.title"); } @Override public View getViewId() { return View.SHOW_OPEN_URI_DIALOG_VIEW; } // BitcoinFormDataProvider methods @Override public String getAddress() { return controller.getModel().getUserPreference(BitcoinModel.OPEN_URI_ADDRESS); } @Override public String getLabel() { return controller.getModel().getUserPreference(BitcoinModel.OPEN_URI_LABEL); } @Override public String getAmount() { return controller.getModel().getUserPreference(BitcoinModel.OPEN_URI_AMOUNT); } // ShowUriDialogDataProvider method @Override public boolean isShowUriDialog() { return !rememberCheckBox.isSelected(); } private void setFileChooserFont(Component[] comp) { for (int x = 0; x < comp.length; x++) { if (comp[x] instanceof Container) setFileChooserFont(((Container) comp[x]).getComponents()); try { comp[x].setFont(adjustedFont); } catch (Exception e) { }// do nothing } } @Override public String getAmountFiat() { // TODO Auto-generated method stub return null; } }