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

📄 menuhelper.java

📁 lumaQQ的源文件
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
/*
* 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.helper;

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

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

import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.IInputValidator;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.ColorDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;

import edu.tsinghua.lumaqq.LumaQQ;
import edu.tsinghua.lumaqq.disk.DiskContentProvider;
import edu.tsinghua.lumaqq.ecore.global.Robot;
import edu.tsinghua.lumaqq.models.Cluster;
import edu.tsinghua.lumaqq.models.Dummy;
import edu.tsinghua.lumaqq.models.Group;
import edu.tsinghua.lumaqq.models.GroupType;
import edu.tsinghua.lumaqq.models.Model;
import edu.tsinghua.lumaqq.models.Organization;
import edu.tsinghua.lumaqq.models.User;
import edu.tsinghua.lumaqq.qq.QQ;
import edu.tsinghua.lumaqq.qq.QQClient;
import edu.tsinghua.lumaqq.qq.Util;
import edu.tsinghua.lumaqq.qq.beans.Directory;
import edu.tsinghua.lumaqq.qq.beans.File;
import edu.tsinghua.lumaqq.qq.beans.Member;
import edu.tsinghua.lumaqq.qq.beans.QQOrganization;
import edu.tsinghua.lumaqq.resource.Resources;
import edu.tsinghua.lumaqq.ui.MainShell;
import edu.tsinghua.lumaqq.ui.MemberEditShell;
import edu.tsinghua.lumaqq.ui.SMSWindow;
import edu.tsinghua.lumaqq.ui.config.sys.SystemOptionWindow;
import edu.tsinghua.lumaqq.ui.config.user.UserInfoWindow;
import edu.tsinghua.lumaqq.ui.debug.Debugger;
import edu.tsinghua.lumaqq.ui.dialogs.AboutDialog;
import edu.tsinghua.lumaqq.ui.dialogs.DiskShareDialog;
import edu.tsinghua.lumaqq.ui.jobs.CreateDirectoryJob;
import edu.tsinghua.lumaqq.ui.jobs.DeleteJob;
import edu.tsinghua.lumaqq.ui.jobs.DialogJobExecutor;
import edu.tsinghua.lumaqq.ui.jobs.DownloadFriendRemarkJob;
import edu.tsinghua.lumaqq.ui.jobs.DownloadGroupJob;
import edu.tsinghua.lumaqq.ui.jobs.IExecutor;
import edu.tsinghua.lumaqq.ui.jobs.RenameJob;
import edu.tsinghua.lumaqq.ui.jobs.UploadGroupJob;
import edu.tsinghua.lumaqq.ui.wizard.WizardWindow;
import edu.tsinghua.lumaqq.ui.wizard.search.SearchWizardModel;
import edu.tsinghua.lumaqq.widgets.menu.CMenu;
import edu.tsinghua.lumaqq.widgets.menu.CMenuItem;
import edu.tsinghua.lumaqq.widgets.menu.IMenuListener;
import edu.tsinghua.lumaqq.widgets.menu.ISelectionListener;
import edu.tsinghua.lumaqq.widgets.menu.MenuEvent;
import edu.tsinghua.lumaqq.widgets.menu.SelectionEvent;
import edu.tsinghua.lumaqq.widgets.qstyle.QTreeViewer;

/**
 * 包含一些菜单初始化的方法和工具方法
 * 
 * @author luma
 */
public class MenuHelper {
    private MainShell main;
    private ShellLauncher shellLauncher;
    private Resources res;
    private ExportHelper exportHelper;
    private Shell shell;
    private QQClient client;
    private Display display;
    private OptionHelper options;
    private BlindHelper blindHelper;
    
    private CMenu statusMenu, sysMenu, groupMenu, friendMenu, awayMenu, displayMenu, clusterMenu;
    private CMenu organizationMenu, organizationContainerMenu, subjectMenu, memberMenu, dialogContainerMenu;
    private CMenu plusMenu;
    private CMenu diskMenu;
    
	private CMenu robotMenu;	
	private boolean robotInitialized;
    
    public MenuHelper(MainShell main) {
        this.main = main;
        shellLauncher = main.getShellLauncher();
        res = Resources.getInstance();
        exportHelper = main.getExportHelper();
        shell = main.getShell();
        client = main.getClient();
        display = main.getDisplay();
        options = main.getOptionHelper();
        blindHelper = main.getBlindHelper();
        robotInitialized = false;
    }    

	/**
	 * 创建所有菜单
	 */
	public void initMenu() {
		initStatusMenu();
		initSysMenu();
		initGroupMenu();
		initFriendMenu();
		initClusterMenu();
		initOrganizationContainerMenu();
		initSubjectMenu();
		initMemberMenu();
		initDialogContainerMenu();
		initOrganizationMenu();
		initPlusMenu();
		initDiskMenu();
	}

	/**
	 * 初始化网络硬盘菜单
	 */
	private void initDiskMenu() {
		diskMenu = new CMenu();
		// 刷新
		final CMenuItem miRefresh = new CMenuItem(diskMenu, SWT.PUSH);
		miRefresh.setImage(res.getImage(Resources.icoRefresh));
		miRefresh.setText(disk_tooltip_refresh);
		miRefresh.addSelectionListener(new ISelectionListener() {
			public void widgetSelected(SelectionEvent e) {
				Object obj = diskMenu.getData();
				main.getDiskManager().refresh(obj);
				main.getDiskViewer().refresh();
			}
		});
		// 设置共享
		final CMenuItem miShare = new CMenuItem(diskMenu, SWT.PUSH);
		miShare.setText(disk_tooltip_set_share);
		miShare.addSelectionListener(new ISelectionListener() {
			public void widgetSelected(SelectionEvent e) {
				Directory dir = (Directory)diskMenu.getData();
				DiskShareDialog dialog = new DiskShareDialog(main, dir);
				dialog.open();
			}
		});
		// separator
		new CMenuItem(diskMenu, SWT.SEPARATOR);
		// 上传
		final CMenuItem miUpload = new CMenuItem(diskMenu, SWT.PUSH);
		miUpload.setImage(res.getImage(Resources.icoDiskUpload));
		miUpload.setText(disk_tooltip_upload);
		miUpload.addSelectionListener(new ISelectionListener() {
			public void widgetSelected(SelectionEvent e) {
			}
		});
		// 下载
		final CMenuItem miDownload = new CMenuItem(diskMenu, SWT.PUSH);
		miDownload.setImage(res.getImage(Resources.icoDiskDownload));
		miDownload.setText(disk_tooltip_download);
		miDownload.addSelectionListener(new ISelectionListener() {
			public void widgetSelected(SelectionEvent e) {
				main.onDiskDownload(new StructuredSelection(diskMenu.getData()));
			}
		});
		// separator
		new CMenuItem(diskMenu, SWT.SEPARATOR);
		// 删除
		final CMenuItem miDelete = new CMenuItem(diskMenu, SWT.PUSH);
		miDelete.setText(disk_tooltip_delete);
		miDelete.addSelectionListener(new ISelectionListener() {
			public void widgetSelected(SelectionEvent e) {
				Object obj = diskMenu.getData();
				if(obj instanceof Directory) {
					Directory dir = (Directory)obj;
					if(dir.isSystemDir()) {
						MessageDialog.openWarning(main.getShell(), message_box_common_warning_title, disk_hint_cannot_delete_system_dir);
						return;						
					}
				}
				String msg = null;
				if(obj instanceof Integer)
					msg = NLS.bind(disk_hint_confirm_delete, String.valueOf(obj));
				else if(obj instanceof File)
					msg = NLS.bind(disk_hint_confirm_delete, ((File)obj).name);
				else if(obj instanceof Directory)
					msg = NLS.bind(disk_hint_confirm_delete, ((Directory)obj).name);
				else
					return;
				
				if(MessageDialog.openQuestion(main.getShell(), 
						message_box_common_question_title, 
						msg)) {
					if(obj instanceof Integer)
						main.getDiskJobQueue().addJob(new DeleteJob((Integer)obj));
					else if(obj instanceof File)
						main.getDiskJobQueue().addJob(new DeleteJob((File)obj));
					else
						main.getDiskJobQueue().addJob(new DeleteJob((Directory)obj));
				}
			}
		});
		// separator
		new CMenuItem(diskMenu, SWT.SEPARATOR);
		// 重命名
		final CMenuItem miRename = new CMenuItem(diskMenu, SWT.PUSH);
		miRename.setText(disk_tooltip_rename);
		miRename.addSelectionListener(new ISelectionListener() {
			public void widgetSelected(SelectionEvent e) {
				Object obj = diskMenu.getData();
				boolean renameFile = obj instanceof File;
				InputDialog dialog = new InputDialog(main.getShell(),
						"Rename",
						disk_hint_input_new_name,
						renameFile ? ((File)obj).name : ((Directory)obj).name,
						new IInputValidator() {
					public String isValid(String newText) {
						if(!newText.equals(""))
							return null;
						else
							return disk_hint_name_cannot_null;
					}
				});
				if(dialog.open() == IDialogConstants.OK_ID) {
					if(renameFile)
						main.getDiskJobQueue().addJob(new RenameJob((File)obj, dialog.getValue()));
					else
						main.getDiskJobQueue().addJob(new RenameJob((Directory)obj, dialog.getValue()));
				}
			}
		});
		// 新建文件夹
		final CMenuItem miNewFolder = new CMenuItem(diskMenu, SWT.PUSH);
		miNewFolder.setText(disk_tooltip_new_directory);
		miNewFolder.addSelectionListener(new ISelectionListener() {
			public void widgetSelected(SelectionEvent e) {
				Object obj = diskMenu.getData();
				int parentId = (obj instanceof Integer) ? 0 : ((Directory)obj).id;
				InputDialog dialog = new InputDialog(main.getShell(),
						"New",
						disk_hint_input_new_name,
						null,
						new IInputValidator() {
					public String isValid(String newText) {
						if(!newText.equals(""))
							return null;
						else
							return disk_hint_name_cannot_null;
					}
				});
				if(dialog.open() == IDialogConstants.OK_ID) {
					main.getDiskJobQueue().addJob(new CreateDirectoryJob(dialog.getValue(), parentId));
				}
			}
		});
		
		// 菜单事件
		diskMenu.addMenuListener(new IMenuListener() {
			public void menuShown(MenuEvent e) {
				Object obj = diskMenu.getData();
				if(obj == null) {
					miRefresh.setEnabled(false);
					miDownload.setEnabled(false);
					miUpload.setEnabled(false);
					miRename.setEnabled(false);
					miDelete.setEnabled(false);
					miShare.setEnabled(false);
				} else {
					if(obj instanceof Integer)
						miRefresh.setEnabled(true);
					else if(obj instanceof Directory) {
						Directory dir = (Directory)obj;
						switch(dir.id) {
							case QQ.QQ_DISK_DIR_MY_FAVORITE:
							case QQ.QQ_DISK_DIR_MY_ALBUM:
								miRefresh.setEnabled(true);
								break;
							default:
								miRefresh.setEnabled(false);
								break;
						}
					} else
						miRefresh.setEnabled(false);

					miDownload.setEnabled(obj instanceof File);
					miShare.setEnabled(obj instanceof Directory && ((Directory)obj).owner == main.getMyModel().qq);
					miUpload.setEnabled(obj instanceof Directory && main.getDiskManager().isChildCreatable((Directory)obj) || obj instanceof Integer && (Integer)obj == DiskContentProvider.MY_DISK);
					miRename.setEnabled(obj instanceof File && ((File)obj).owner == main.getMyModel().qq || obj instanceof Directory && ((Directory)obj).owner == main.getMyModel().qq && !((Directory)obj).isSystemDir());
					miDelete.setEnabled(obj instanceof File && ((File)obj).owner == main.getMyModel().qq || 
							obj instanceof Directory && ((Directory)obj).owner == main.getMyModel().qq ||
							obj instanceof Integer && (Integer)obj > 10000);
					if(obj instanceof Directory) {
						miNewFolder.setEnabled(main.getDiskManager().isChildCreatable((Directory)obj));
					} else if(obj instanceof Integer) {
						miNewFolder.setEnabled((Integer)obj == DiskContentProvider.MY_DISK);
					} else
						miNewFolder.setEnabled(false);
				}
			}
		});
	}

	/**
	 * 初始化主界面的plus按钮菜单
	 */
	private void initPlusMenu() {
		plusMenu = new CMenu();
		plusMenu.setImageSize(20);
		// 好友视图
		CMenuItem mi = new CMenuItem(plusMenu, SWT.PUSH);
		mi.setImage(res.getImage(Resources.icoFriendView));
		mi.setText(menu_plus_friend_view);
		mi.addSelectionListener(new ISelectionListener() {
			public void widgetSelected(SelectionEvent e) {
				main.switchView(MainShell.VIEW_FRIEND);
			}
		});
		// 网络硬盘
		mi = new CMenuItem(plusMenu, SWT.PUSH);
		mi.setImage(res.getImage(Resources.icoDiskView));
		mi.setText(menu_plus_disk);
		mi.addSelectionListener(new ISelectionListener() {
			public void widgetSelected(SelectionEvent e) {
				if(main.getClient().getUser().isLoggedIn()) {
					main.switchView(MainShell.VIEW_DISK);					
				}
			}
		});
	}

	/**
	 * 初始化组织菜单
	 */
	private void initOrganizationMenu() {
		organizationMenu = new CMenu();
		// 更新组织结构
		CMenuItem mi = new CMenuItem(organizationMenu, SWT.PUSH);
		mi.setImage(res.getImage(Resources.icoRefresh));
		mi.setText(menu_organization_refresh);
		mi.addSelectionListener(new ISelectionListener() {
			
			public void widgetSelected(SelectionEvent e) {
				Organization org = (Organization)organizationMenu.getData();
				client.updateOrganization(org.cluster.clusterId);
			}
		});
		// 发起讨论

⌨️ 快捷键说明

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