Java tutorial
/* * Copyright 2004 - 2008 Christian Sprajc. All rights reserved. * * This file is part of PowerFolder. * * PowerFolder is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation. * * PowerFolder is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with PowerFolder. If not, see <http://www.gnu.org/licenses/>. * * $Id: WelcomeTab.java 5495 2008-10-24 04:59:13Z harry $ */ package de.dal33t.powerfolder.ui.start; import com.jgoodies.forms.builder.PanelBuilder; import com.jgoodies.forms.factories.Borders; import com.jgoodies.forms.layout.CellConstraints; import com.jgoodies.forms.layout.FormLayout; import de.dal33t.powerfolder.Controller; import de.dal33t.powerfolder.ui.PFUIComponent; import de.dal33t.powerfolder.PreferencesEntry; import de.dal33t.powerfolder.clientserver.ServerClient; import de.dal33t.powerfolder.clientserver.ServerClientEvent; import de.dal33t.powerfolder.clientserver.ServerClientListener; import de.dal33t.powerfolder.security.OnlineStorageSubscription; import de.dal33t.powerfolder.ui.FileDropTransferHandler; import de.dal33t.powerfolder.ui.util.UIUtil; import de.dal33t.powerfolder.ui.util.Help; import de.dal33t.powerfolder.ui.widget.ActionLabel; import de.dal33t.powerfolder.ui.widget.GradientPanel; import de.dal33t.powerfolder.ui.widget.LinkLabel; import de.dal33t.powerfolder.ui.wizard.PFWizard; import de.dal33t.powerfolder.ui.wizard.PFWizardPanel; import de.dal33t.powerfolder.ui.wizard.WhatToDoPanel; import de.dal33t.powerfolder.util.Format; import de.dal33t.powerfolder.util.Translation; import de.dal33t.powerfolder.ui.util.SimpleComponentFactory; import jwf.WizardContext; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.util.Date; /** * Class for the Status tab in the main tab area of the UI. */ public class StartTab extends PFUIComponent { private JPanel uiComponent; private ActionLabel synchronizedLink; private ActionLabel backupLink; private ActionLabel hostLink; private LinkLabel documentationLink; private ActionLabel tellFriendLabel; private ServerClient client; private ActionLabel onlineStorageAccountLabel; /** * Constructor * * @param controller */ public StartTab(Controller controller) { super(controller); } /** * @return the UI component after optionally building it. */ public JPanel getUIComponent() { if (uiComponent == null) { buildUI(); } return uiComponent; } /** * One-off build of UI component. */ private void buildUI() { initComponents(); FormLayout layout = new FormLayout("3dlu, pref:grow, 3dlu", "3dlu, pref, 3dlu, pref, 3dlu, fill:0:grow"); PanelBuilder builder = new PanelBuilder(layout); CellConstraints cc = new CellConstraints(); // Toolbar JPanel toolbar = createToolBar(); toolbar.setOpaque(false); builder.add(toolbar, cc.xy(2, 2)); builder.addSeparator(null, cc.xyw(1, 4, 2)); // Main panel in scroll pane JPanel mainPanel = buildMainPanel(); mainPanel.setOpaque(false); JScrollPane scrollPane = new JScrollPane(mainPanel); scrollPane.setOpaque(false); scrollPane.getVerticalScrollBar().setUnitIncrement(10); UIUtil.removeBorder(scrollPane); builder.add(scrollPane, cc.xyw(1, 6, 2)); uiComponent = GradientPanel.create(builder.getPanel()); } /** * Initialise class components. */ private void initComponents() { client = getApplicationModel().getServerClientModel().getClient(); client.addListener(new MyServerClientListener()); synchronizedLink = new ActionLabel(getController(), new DoSynchronizedAction(Translation.getTranslation("wizard.what_to_do.synchronized_folder"))); synchronizedLink.setToolTipText(Translation.getTranslation("wizard.what_to_do.synchronized_folder.tip")); synchronizedLink.convertToBigLabel(); backupLink = new ActionLabel(getController(), new DoBackupAction(Translation.getTranslation("wizard.what_to_do.backup_folder"))); backupLink.setToolTipText(Translation.getTranslation("wizard.what_to_do.backup_folder.tip")); backupLink.convertToBigLabel(); hostLink = new ActionLabel(getController(), new DoHostAction(Translation.getTranslation("wizard.what_to_do.host_work"))); hostLink.setToolTipText(Translation.getTranslation("wizard.what_to_do.host_work.tip")); hostLink.convertToBigLabel(); documentationLink = Help.createQuickstartGuideLabel(getController(), Translation.getTranslation("wizard.what_to_do.open_online_documentation")); documentationLink .setToolTipText(Translation.getTranslation("wizard.what_to_do.open_online_documentation.tip")); documentationLink.convertToBigLabel(); onlineStorageAccountLabel = new ActionLabel(getController(), new AbstractAction() { public void actionPerformed(ActionEvent e) { PFWizard.openLoginWizard(getController(), getController().getOSClient()); } }); tellFriendLabel = SimpleComponentFactory.createTellAFriendLabel(getController()); updateOnlineStorageDetails(); } /** * Build the main panel with all the detail lines. * * @return */ private JPanel buildMainPanel() { FormLayout layout = new FormLayout("pref:grow", "pref, 10dlu, pref, 3dlu, pref, 3dlu, pref, 3dlu, pref, 3dlu, pref, 3dlu, pref:grow, 3dlu, pref"); PanelBuilder builder = new PanelBuilder(layout); // Bottom border builder.setBorder(Borders.createEmptyBorder("1dlu, 3dlu, 2dlu, 3dlu")); CellConstraints cc = new CellConstraints(); JLabel label = new JLabel(Translation.getTranslation("start_tab.welcome_text")); UIUtil.setFontSize(label, UIUtil.MED_FONT_SIZE); UIUtil.setFontStyle(label, Font.BOLD); int row = 1; builder.add(label, cc.xy(1, row)); row += 2; builder.add(synchronizedLink.getUIComponent(), cc.xy(1, row)); row += 2; builder.add(backupLink.getUIComponent(), cc.xy(1, row)); row += 2; builder.add(hostLink.getUIComponent(), cc.xy(1, row)); row += 2; builder.add(documentationLink.getUIComponent(), cc.xy(1, row)); row += 2; builder.add(onlineStorageAccountLabel.getUIComponent(), cc.xy(1, row)); row += 2; builder.addLabel(Translation.getTranslation("start_tab.drag_hint"), cc.xy(1, row, CellConstraints.CENTER, CellConstraints.CENTER)); if (PreferencesEntry.SHOW_TELL_A_FRIEND.getValueBoolean(getController())) { row += 2; builder.add(tellFriendLabel.getUIComponent(), cc.xy(1, row)); } JPanel panel = builder.getPanel(); panel.setTransferHandler(new FileDropTransferHandler(getController())); return panel; } /** * Cretes the toolbar. * * @return the toolbar */ private JPanel createToolBar() { FormLayout layout = new FormLayout("pref, 3dlu, pref, 3dlu:grow", "pref"); PanelBuilder builder = new PanelBuilder(layout); CellConstraints cc = new CellConstraints(); ActionLabel newFolderLink = new ActionLabel(getController(), getApplicationModel().getActionModel().getFolderWizardAction()); builder.add(newFolderLink.getUIComponent(), cc.xy(1, 1)); if (!getController().isBackupOnly()) { ActionLabel searchComputerLink = new ActionLabel(getController(), getApplicationModel().getActionModel().getFindComputersAction()); builder.add(searchComputerLink.getUIComponent(), cc.xy(3, 1)); } return builder.getPanel(); } private void updateOnlineStorageDetails() { boolean show = false; String username = client.getUsername(); if (username != null && username.trim().length() != 0) { if (client.isConnected() && !client.isPasswordEmpty()) { if (client.isLoggedIn()) { OnlineStorageSubscription storageSubscription = client.getAccount().getOSSubscription(); if (storageSubscription.isDisabled()) { Date expirationDate = storageSubscription.getDisabledExpirationDate(); if (storageSubscription.isDisabledExpiration() && expirationDate != null) { onlineStorageAccountLabel.setText(Translation.getTranslation( "status_tab.online_storage.account_disabled_expiration", username, Format.formatDateCanonical(expirationDate))); } else if (storageSubscription.isDisabledUsage()) { onlineStorageAccountLabel.setText(Translation .getTranslation("status_tab.online_storage.account_disabled_usage", username)); } else { onlineStorageAccountLabel.setText(Translation .getTranslation("status_tab.online_storage.account_disabled", username)); } onlineStorageAccountLabel.setToolTipText( Translation.getTranslation("status_tab.online_storage.account_disabled.tips")); show = true; } } } } onlineStorageAccountLabel.getUIComponent().setVisible(show); } private class DoSynchronizedAction extends AbstractAction { private DoSynchronizedAction(String name) { putValue(NAME, name); } public void actionPerformed(ActionEvent e) { PFWizard wizard = new PFWizard(getController(), Translation.getTranslation("wizard.pfwizard.folder_title")); WizardContext context = wizard.getWizardContext(); PFWizardPanel panel = WhatToDoPanel.doSyncOption(getController(), context); wizard.open(panel); } } private class DoBackupAction extends AbstractAction { private DoBackupAction(String name) { putValue(NAME, name); } public void actionPerformed(ActionEvent e) { PFWizard wizard = new PFWizard(getController(), Translation.getTranslation("wizard.pfwizard.folder_title")); WizardContext context = wizard.getWizardContext(); PFWizardPanel panel = WhatToDoPanel.doBackupOption(getController(), context); wizard.open(panel); } } private class DoHostAction extends AbstractAction { private DoHostAction(String name) { putValue(NAME, name); } public void actionPerformed(ActionEvent e) { PFWizard wizard = new PFWizard(getController(), Translation.getTranslation("wizard.pfwizard.folder_title")); WizardContext context = wizard.getWizardContext(); PFWizardPanel panel = WhatToDoPanel.doHostOption(getController(), context); wizard.open(panel); } } private class MyServerClientListener implements ServerClientListener { public boolean fireInEventDispatchThread() { return true; } public void accountUpdated(ServerClientEvent event) { updateOnlineStorageDetails(); } public void login(ServerClientEvent event) { updateOnlineStorageDetails(); } public void serverConnected(ServerClientEvent event) { updateOnlineStorageDetails(); } public void serverDisconnected(ServerClientEvent event) { updateOnlineStorageDetails(); } public void nodeServerStatusChanged(ServerClientEvent event) { updateOnlineStorageDetails(); } } }