/********************************************************************************************* * Copyright (c) 2011, 2015 Wind River Systems, Inc. and others. All rights reserved. * This program and the accompanying materials are made available under the terms * of the Eclipse Public License v1.0 which accompanies this distribution, and is * available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: * William Chen (Wind River) - [345384]Provide property pages for remote file system nodes *********************************************************************************************/ package org.eclipse.tcf.te.tcf.filesystem.ui.internal.properties; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.tcf.te.tcf.filesystem.core.interfaces.IWindowsFileAttributes; import org.eclipse.tcf.te.tcf.filesystem.core.interfaces.runtime.IFSTreeNodeWorkingCopy; import org.eclipse.tcf.te.tcf.filesystem.ui.activator.UIPlugin; import org.eclipse.tcf.te.tcf.filesystem.ui.internal.ImageConsts; import org.eclipse.tcf.te.tcf.filesystem.ui.nls.Messages; /** * The dialog used to display the advanced attributes of a Windows file or * folder. */ public class AdvancedAttributesDialog extends Dialog { // The file or folder node whose advanced attributes are to be displayed. IFSTreeNodeWorkingCopy node; /** * Create the advanced attributes dialog with the specified node and a * parent shell. * * @param parentShell * The parent shell. * @param node * The file or folder node to be displayed. */ public AdvancedAttributesDialog(Shell parentShell, IFSTreeNodeWorkingCopy node) { super(parentShell); this.node = node; } /* (non-Javadoc) * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite) */ @Override protected Control createDialogArea(Composite parent) { Composite composite = (Composite) super.createDialogArea(parent); Composite banner = new Composite(composite, SWT.NONE); GridLayout layout = new GridLayout(2, false); banner.setLayout(layout); Label label = new Label(banner, SWT.NONE); Image bImg = getBannerImage(); label.setImage(bImg); label.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false)); label = new Label(banner, SWT.NONE); if (node.isFile()) { label.setText(Messages.AdvancedAttributesDialog_FileBanner); } else if (node.isDirectory()) { label.setText(Messages.AdvancedAttributesDialog_FolderBanner); } createArchiveAndIndexGroup(composite); createCompressAndEncryptGroup(composite); return composite; } /** * Get the image in the banner area. * * @return The image in the banner area. */ private Image getBannerImage() { return UIPlugin.getImage(ImageConsts.BANNER_IMAGE); } /** * Create the compress and encrypt options group. * * @param parent * The parent composite where they are created. */ private void createCompressAndEncryptGroup(Composite parent) { Group group = new Group(parent, SWT.SHADOW_ETCHED_IN); group.setText(Messages.AdvancedAttributesDialog_CompressEncrypt); group.setLayout(new GridLayout()); group.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); createCompress(group); createEncrypt(group); } /** * Create the archive and indexing options group. * * @param parent * The parent composite where they are created. */ private void createArchiveAndIndexGroup(Composite parent) { Group group = new Group(parent, SWT.SHADOW_ETCHED_IN); group.setText(Messages.AdvancedAttributesDialog_ArchiveIndex); group.setLayout(new GridLayout()); group.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); createArchive(group); createIndexField(group); } /** * Create the indexing option field. * * @param group * The group widget where the field is created. */ private void createIndexField(Group group) { String label = node.isFile() ? Messages.AdvancedAttributesDialog_IndexFile : (node.isDirectory() ? Messages.AdvancedAttributesDialog_IndexFolder : null); boolean on = !node.getWin32Attr(IWindowsFileAttributes.FILE_ATTRIBUTE_NOT_CONTENT_INDEXED); createOptionField(group, label, IWindowsFileAttributes.FILE_ATTRIBUTE_NOT_CONTENT_INDEXED, on); } /** * Create the archive option field. * * @param group * The group widget where the field is created. */ private void createArchive(Group group) { String label = node.isFile() ? Messages.AdvancedAttributesDialog_FileArchive : (node.isDirectory() ? Messages.AdvancedAttributesDialog_FolderArchive : null); boolean on = node.getWin32Attr(IWindowsFileAttributes.FILE_ATTRIBUTE_ARCHIVE); createOptionField(group, label, IWindowsFileAttributes.FILE_ATTRIBUTE_ARCHIVE, on); } /** * Create the encrypt option field. * * @param group * The group widget where the field is created. */ private void createEncrypt(Group group) { String label = Messages.AdvancedAttributesDialog_Encrypt; boolean on = node.getWin32Attr(IWindowsFileAttributes.FILE_ATTRIBUTE_ENCRYPTED); createOptionField(group, label, IWindowsFileAttributes.FILE_ATTRIBUTE_ENCRYPTED, on); } /** * Create the compress option field. * * @param group * The group widget where the field is created. */ private void createCompress(Group group) { String label = Messages.AdvancedAttributesDialog_Compress; boolean on = node.getWin32Attr(IWindowsFileAttributes.FILE_ATTRIBUTE_COMPRESSED); createOptionField(group, label, IWindowsFileAttributes.FILE_ATTRIBUTE_COMPRESSED, on); } /** * Create an option field in the specified group, using the specified label, * and with the specified boolean value. * * @param group * The group widget where the field is created. * @param label * The label used by the field. * @param bit * The bit mask to be changed once the value is changed. * @param on * The boolean value to be set. */ private void createOptionField(Group group, String label, final int bit, final boolean on) { final Button button = new Button(group, SWT.CHECK); button.setText(label); button.setSelection(on); // Only the owner can edit the properties button.setEnabled(node.isAgentOwner()); button.addSelectionListener(new SelectionAdapter(){ @Override public void widgetSelected(SelectionEvent e) { if (button.getSelection() != on) { node.setWin32Attr(bit, on); } } }); } /* (non-Javadoc) * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell) */ @Override protected void configureShell(Shell newShell) { super.configureShell(newShell); newShell.setText(Messages.AdvancedAttributesDialog_ShellTitle); } /** * Get the result. * @return The result. */ public IFSTreeNodeWorkingCopy getResult() { return node; } }