diff options
Diffstat (limited to 'target_explorer/plugins/org.eclipse.tcf.te.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/properties/AdvancedAttributesDialog.java')
-rw-r--r-- | target_explorer/plugins/org.eclipse.tcf.te.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/properties/AdvancedAttributesDialog.java | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/properties/AdvancedAttributesDialog.java b/target_explorer/plugins/org.eclipse.tcf.te.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/properties/AdvancedAttributesDialog.java new file mode 100644 index 000000000..4731034d0 --- /dev/null +++ b/target_explorer/plugins/org.eclipse.tcf.te.filesystem.ui/src/org/eclipse/tcf/te/tcf/filesystem/ui/internal/properties/AdvancedAttributesDialog.java @@ -0,0 +1,214 @@ +/********************************************************************************************* + * Copyright (c) 2011, 2012 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.model.FSTreeNode; +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. + FSTreeNode 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, FSTreeNode 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.isWin32AttrOn(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.isWin32AttrOn(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.isWin32AttrOn(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.isWin32AttrOn(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 FSTreeNode getResult() { + return node; + } +} |