📄 menuhelper.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.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 + -