⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 disksharedialog.java

📁 lumaQQ的源文件
💻 JAVA
字号:
/*
* LumaQQ - Java QQ Client
*
* Copyright (C) 2004 luma <stubma@163.com>
*
* This program 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; either version 2 of the License, or
* (at your option) any later version.
*
* This program 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 this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package edu.tsinghua.lumaqq.ui.dialogs;

import static edu.tsinghua.lumaqq.resource.Messages.*;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ControlAdapter;
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;

import edu.tsinghua.lumaqq.events.FriendSelectionEvent;
import edu.tsinghua.lumaqq.events.IFriendSelectionListener;
import edu.tsinghua.lumaqq.models.Model;
import edu.tsinghua.lumaqq.models.ModelRegistry;
import edu.tsinghua.lumaqq.models.User;
import edu.tsinghua.lumaqq.qq.QQ;
import edu.tsinghua.lumaqq.qq.beans.Directory;
import edu.tsinghua.lumaqq.resource.Resources;
import edu.tsinghua.lumaqq.ui.FriendSelectionShell;
import edu.tsinghua.lumaqq.ui.MainShell;
import edu.tsinghua.lumaqq.ui.helper.UITool;
import edu.tsinghua.lumaqq.ui.jobs.GetShareListJob;
import edu.tsinghua.lumaqq.ui.jobs.IJob;
import edu.tsinghua.lumaqq.ui.jobs.IJobListener;
import edu.tsinghua.lumaqq.ui.jobs.JobEvent;
import edu.tsinghua.lumaqq.ui.jobs.SetShareListJob;
import edu.tsinghua.lumaqq.ui.provider.ListContentProvider;

/**
 * 设置网络硬盘目录共享对话框
 *
 * @author luma
 */
public class DiskShareDialog extends Dialog implements IFriendSelectionListener, IJobListener {
	private class TableLabelProvider extends LabelProvider implements ITableLabelProvider {
		public Image getColumnImage(Object element, int columnIndex) {
			switch(columnIndex) {
				case 0:
					User u = ModelRegistry.getUser((Integer)element);
					if(u == null)
						return Resources.getInstance().getSmallHead(0);
					else
						return Resources.getInstance().getSmallHead(u.headId);
				default:
					return null;
			}
		}

		public String getColumnText(Object element, int columnIndex) {
			switch(columnIndex) {
				case 0:
					User u = ModelRegistry.getUser((Integer)element);
					if(u == null)
						return String.valueOf((Integer)element);
					else
						return u.displayName + " (" + u.qq + ')';
				default:
					return "";
			}
		}		
	}
	
	private MainShell main;
	private FriendSelectionShell fss;
	private List<Integer> oldList;
	private List<Integer> newList;
	private Directory dir;
	
	private boolean share;
	private TableViewer viewer;
	private Button chkShare;
	
	private static final int REMOVE_ID = 9999;
	
	public DiskShareDialog(MainShell main, Directory dir) {
		super(main.getShell());
		this.main = main;
		this.dir = dir;
		setBlockOnOpen(false);
	}
	
	@Override
	protected void configureShell(Shell newShell) {
		super.configureShell(newShell);
		newShell.setText(disk_share_title);
	}
	
	@Override
	protected void handleShellCloseEvent() {
		if(fss != null && !fss.isDisposed())
			fss.setVisible(false);
		super.handleShellCloseEvent();
	}
	
	private void createFriendSelectionShell(Shell newShell) {
		fss = new FriendSelectionShell(newShell, false);
		fss.setModel(main.getBlindHelper().getFriendGroupList());
		fss.addFriendSelectionListener(this);
	}

	@Override
	protected Control createDialogArea(Composite parent) {
		Composite control = (Composite)super.createDialogArea(parent);
		
		UITool.setDefaultBackground(control.getBackground());
		
		UITool.createLabel(control, disk_wulala);
		
		chkShare = UITool.createCheckbox(control, disk_share_set_share);
		chkShare.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				share = chkShare.getSelection();
				if(share) {
					if(fss == null || fss.isDisposed())
						createFriendSelectionShell(getShell());
					fss.setVisible(true);
					viewer.getTable().setEnabled(true);
				} else {
					if(fss != null && !fss.isDisposed())
						fss.setVisible(false);					
					viewer.getTable().setEnabled(false);
				}				
			}
		});
		viewer = new TableViewer(control, SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION | SWT.V_SCROLL);
		viewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH));
		newList = new ArrayList<Integer>();
		viewer.setContentProvider(new ListContentProvider<Integer>(newList));
		viewer.setLabelProvider(new TableLabelProvider());
		new TableColumn(viewer.getTable(), SWT.LEFT);
		viewer.getTable().addControlListener(new ControlAdapter() {
			@Override
			public void controlResized(ControlEvent e) {
				Table t = (Table)e.getSource();
				t.getColumn(0).setWidth(t.getClientArea().width);
			}
		});
		viewer.getTable().setHeaderVisible(false);
		viewer.getTable().setLinesVisible(false);
		viewer.addSelectionChangedListener(new ISelectionChangedListener() {
			public void selectionChanged(SelectionChangedEvent event) {
				getButton(REMOVE_ID).setEnabled(!event.getSelection().isEmpty());
			}
		});
		viewer.setInput(this);
		
		viewer.getTable().setEnabled(false);
		chkShare.setEnabled(false);
		
		return control;
	}
	
	@Override
	protected Control createButtonBar(Composite parent) {
		Control c = super.createButtonBar(parent);
		getButton(IDialogConstants.OK_ID).setEnabled(false);
		getButton(REMOVE_ID).setEnabled(false);
		return c;
	}
	
	@Override
	protected void createButtonsForButtonBar(Composite parent) {
		super.createButtonsForButtonBar(parent);
		createButton(parent, REMOVE_ID, button_delete, false).addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				IStructuredSelection s = (IStructuredSelection)viewer.getSelection();
				for(Iterator i = s.iterator(); i.hasNext(); ) {
					Integer qq = (Integer)i.next();
					User u = ModelRegistry.getUser(qq);
					if(u != null)
						fss.deselect(u);
					newList.remove(qq);
				}
				viewer.refresh();
			}
		});
	}

	@Override
	protected Point getInitialSize() {
		return new Point(500, 400);
	}
	
	@Override
	public int open() {
		IJob job = new GetShareListJob(dir);
		job.addJobListener(this);
		main.getDiskJobQueue().addJob(job);
		return super.open();
	}

	/**
	 * @return the share
	 */
	public boolean isShare() {
		return share;
	}

	/**
	 * @param share the share to set
	 */
	public void setShare(boolean share) {
		this.share = share;
	}

	public void friendSelected(FriendSelectionEvent e) {
		for(Model u : e.getModels())
			newList.add(((User)u).qq);
		viewer.refresh();
	}

	public void friendDeselected(FriendSelectionEvent e) {
		for(Model u : e.getModels())
			newList.remove(new Integer(((User)u).qq));
		viewer.refresh();
	}
	
	@Override
	protected void okPressed() {
		// 检查列表是否为空
		if(share && newList.isEmpty()) {
			MessageDialog.openWarning(getShell(), message_box_common_warning_title, disk_hint_cannot_empty);
			return;
		}
		
		if(!share)
			newList.clear();
		
		getButton(IDialogConstants.OK_ID).setEnabled(false);
		viewer.getTable().setEnabled(false);
		fss.setVisible(false);
		
		for(Integer qq : newList)
			oldList.remove(qq);
		IJob job = null;
		if(share) {
			job = new SetShareListJob(dir, false, oldList, newList);
			job.addJobListener(this);
			main.getDiskJobQueue().addJob(job);
		} else {
			job = new SetShareListJob(dir, true, oldList, newList);
			job.addJobListener(this);
			main.getDiskJobQueue().addJob(job);
		}
	}
	
	@Override
	protected void cancelPressed() {
		getShell().close();
	}

	public void jobSuccess(final JobEvent e) {
		if(getShell() == null || getShell().isDisposed())
			return;
		
		main.getDisplay().syncExec(new Runnable() {
			public void run() {
				if(e.job instanceof GetShareListJob) {
					GetShareListJob job = (GetShareListJob)e.job;
					oldList = job.getFriends();
					newList.addAll(oldList);
					viewer.refresh();
					viewer.getTable().setEnabled(true);
					getButton(IDialogConstants.OK_ID).setEnabled(true);
					chkShare.setEnabled(true);
					share = false;
					if(!oldList.isEmpty()) {
						chkShare.setSelection(true);
						share = true;
						if(fss == null || fss.isDisposed())
							createFriendSelectionShell(getShell());
						for(Integer qq : oldList) {
							User u = ModelRegistry.getUser(qq);
							if(u != null)
								fss.select(u);
						}
						fss.setVisible(true);
					}
				} else {
					MessageDialog.openInformation(getShell(), message_box_common_info_title, disk_hint_set_share_success);
					close();		
					if(share)
						dir.property |= QQ.QQ_DISK_FLAG_SHARED;
					else
						dir.property &= ~QQ.QQ_DISK_FLAG_SHARED;
					main.getDiskViewer().refresh();
				}
			}
		});
	}

	public void jobFailed(final JobEvent e) {
		if(getShell() == null || getShell().isDisposed())
			return;
		
		main.getDisplay().syncExec(new Runnable() {
			public void run() {
				if(e.job instanceof GetShareListJob) {
					MessageDialog.openError(getShell(), message_box_common_fail_title, disk_hint_cannot_get_share_list);
					close();				
				} else {
					MessageDialog.openError(getShell(), message_box_common_fail_title, disk_hint_cannot_set_share_list);
					close();	
				}
			}
		});
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -