Java tutorial
/* * 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.resource; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageRegistry; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.ImageData; import org.eclipse.swt.graphics.ImageLoader; import org.eclipse.swt.program.Program; import org.eclipse.swt.widgets.Display; import edu.tsinghua.lumaqq.LumaQQ; import edu.tsinghua.lumaqq.ui.helper.FaceRegistry; /** * ???????20042004??? */ public class Resources { // Log private static Log log = LogFactory.getLog(Resources.class); // ? public static String LUMAQQ_DEFAULT_FONT = "SongTi9"; // ? private static final String HEAD_PATH_PREFIX = "/edu/tsinghua/lumaqq/resource/head/"; private static final String SMALL_HEAD_PATH_PREFIX = "/edu/tsinghua/lumaqq/resource/smallhead/"; private static final String CLUSTER_HEAD_PATH_PREFIX = "/edu/tsinghua/lumaqq/resource/clusterhead/"; private static final String FACE_PATH_PREFIX = "/edu/tsinghua/lumaqq/resource/face/"; private static final String ICON_PATH_PREFIX = "/edu/tsinghua/lumaqq/resource/icon"; private static final String IMAGE_PATH_PREFIX = "/edu/tsinghua/lumaqq/resource/image"; // resource id public static final int icoOnline = 0, icoAway = 1, icoHidden = 2, icoOffline = 3, icoLumaQQ = 4, icoAbout = 5, icoExit = 6, icoSysMsg = 7, icoSysOpt = 8, icoChangeUser = 9, icoDiskDownload = 10, icoPersonInfo = 11, bmpLogin = 12, icoReply = 13, icoNoReply = 14, icoCustomReply = 15, icoMessage = 16, icoSearch = 17, icoLargeHead = 18, icoSmallHead = 19, icoDiskUpload = 20, icoDelGroup = 21, icoAddFriend = 22, icoDiskPassword = 23, icoShowBlackList = 24, icoRename = 25, icoSortFriend = 26, icoSharedDisk = 27, icoHideBlackList = 28, icoChecked = 29, icoFriendInfoManage = 30, icoDelFriend = 31, icoSendReceiveMessage = 32, icoFont = 33, icoSmiley = 34, icoQuickReply = 35, icoBlank = 36, icoDelete = 37, bmpSearch = 38, icoSendFile = 39, icoGroup = 40, icoUploadGroup = 41, icoDownloadGroup = 42, bmpTipBackground = 44, bmpDefaultQQShow = 45, bmpDownloading = 46, icoMessageManage = 47, icoTxtFile = 48, icoCopy = 49, icoCluster = 50, icoSearchCluster = 51, icoAddCluster = 52, icoFolder = 53, icoRightArrow = 54, icoLeftArrow = 55, bmpOnlineTipBackground = 56, icoNotFound = 57, icoEnableFriendTip = 58, icoDisableFriendTip = 59, icoFriend = 60, icoApply = 61, icoDownloadRemark = 62, icoBack = 63, icoForward = 64, icoRefresh = 65, icoStop = 66, icoUpdate = 67, icoFirefox = 68, bmpCheckUpdate = 69, icoSearchIp = 70, icoAwayDecoration = 71, icoColor = 72, icoIn = 73, icoOut = 74, icoFragment = 75, icoDebug = 76, icoMobileQQ = 77, icoMobile = 78, icoPalm = 79, icoCam = 80, icoMachine = 81, icoChatroom = 82, icoFirst = 83, icoAddAlbum = 84, icoMobileFriend = 85, icoFriendView = 86, icoSysOpt24 = 87, icoModifyPersonInfo24 = 88, icoChangeQQShow = 89, icoQQHome = 90, icoQQShowMall = 91, icoExport = 92, icoViewPersonInfo24 = 93, icoAboutTitleImage = 94, icoSearchWizard = 95, icoNext = 96, icoPrevious = 97, icoWarning = 98, icoDebugBytes = 99, icoDebugInput = 100, icoDebugPacket = 101, icoDebugFormat = 102, icoDebugSend = 103, icoHiddenDecoration = 104, icoClusterWizard = 105, bmpSmth = 106, icoCam24 = 107, icoSendFile32 = 108, icoMobile24 = 109, icoExport24 = 110, icoImport24 = 111, icoAddFaceGroup24 = 112, icoModifyFaceGroup24 = 113, icoDeleteFaceGroup24 = 114, bmpLogin2 = 115, icoBindQQ = 116, icoExpanded = 117, icoCollapsed = 118, icoTreeMode = 119, icoTraditionalMode = 120, icoOrganization = 121, icoDialog = 122, icoNewSubject = 123, bmpMenuDown = 124, bmpMenuHover = 125, bmpMenuNormal = 126, bmpToolbarBackground = 127, icoPin = 128, icoFlatExpand = 129, icoFlatCollapse = 130, icoClusterInfo = 131, icoClusterCard = 132, icoDiskView = 133, icoSysMenu = 134, icoClusterCreator = 135, icoClusterAdmin = 136, icoSun = 137, icoMoon = 138, icoStar = 139, icoCollapsed9 = 140, icoExpanded9 = 141, icoTool = 142, icoTempSessionIM = 143, icoClusterStockholder = 144, bmpProgress = 145, bmpCloseDown = 146, bmpCloseHover = 147, bmpCloseNormal = 148, bmpMinDown = 149, bmpMinHover = 150, bmpMinNormal = 151, bmpMaxDown = 152, bmpMaxHover = 153, bmpMaxNormal = 154, bmpRestoreDown = 155, bmpRestoreHover = 156, bmpRestoreNormal = 157, icoDazzleRing = 158, icoMobileDazzleRing = 159, icoBindDazzleRing = 160, icoLast = 161, icoTMMale = 162, icoTMFemale = 163, icoTMMale16 = 164, icoTMFemale16 = 165, bmpLumaQQ = 166, bmpCancelLoginNormal = 167, bmpCancelLoginHover = 168, bmpCancelLoginDown = 169, bmpPlusNormal = 170, bmpPlusHover = 171, bmpPlusDown = 172, icoSharedResource = 173, icoMyDisk = 174, icoMyAssistant = 175, icoMyDoc = 176, icoMyPicture = 177, icoMyMultimedia = 178, icoFile = 179, icoMyCustomHead = 180, icoMyAlbum = 181, icoMyNotebook = 182, icoAbort = 183, icoAbortAll = 184; // resource location public static final String[] resourceLocations = { ICON_PATH_PREFIX + "/online.gif", ICON_PATH_PREFIX + "/away.gif", ICON_PATH_PREFIX + "/hidden.gif", ICON_PATH_PREFIX + "/offline.gif", ICON_PATH_PREFIX + "/lumaqq.gif", ICON_PATH_PREFIX + "/about.gif", ICON_PATH_PREFIX + "/exit.gif", ICON_PATH_PREFIX + "/sysmsg.gif", ICON_PATH_PREFIX + "/sysoption.gif", ICON_PATH_PREFIX + "/changeuser.gif", ICON_PATH_PREFIX + "/diskdownload.gif", ICON_PATH_PREFIX + "/personinfo.gif", IMAGE_PATH_PREFIX + "/login.gif", ICON_PATH_PREFIX + "/reply.gif", ICON_PATH_PREFIX + "/noreply.gif", ICON_PATH_PREFIX + "/customreply.gif", ICON_PATH_PREFIX + "/message.gif", ICON_PATH_PREFIX + "/search.gif", ICON_PATH_PREFIX + "/largeface.gif", ICON_PATH_PREFIX + "/smallface.gif", ICON_PATH_PREFIX + "/diskupload.gif", ICON_PATH_PREFIX + "/delgroup.gif", ICON_PATH_PREFIX + "/addfriend.gif", ICON_PATH_PREFIX + "/diskpassword.gif", ICON_PATH_PREFIX + "/showblacklist.gif", ICON_PATH_PREFIX + "/rename.gif", ICON_PATH_PREFIX + "/sortfriend.gif", ICON_PATH_PREFIX + "/shareddisk.gif", ICON_PATH_PREFIX + "/hideblacklist.gif", ICON_PATH_PREFIX + "/checked.gif", ICON_PATH_PREFIX + "/friendinfomanage.gif", ICON_PATH_PREFIX + "/delfriend.gif", ICON_PATH_PREFIX + "/sendreceivemessage.gif", ICON_PATH_PREFIX + "/font.gif", ICON_PATH_PREFIX + "/smiley.gif", ICON_PATH_PREFIX + "/quickreply.gif", ICON_PATH_PREFIX + "/blank.gif", ICON_PATH_PREFIX + "/delete.gif", IMAGE_PATH_PREFIX + "/search.gif", ICON_PATH_PREFIX + "/sendfile.gif", ICON_PATH_PREFIX + "/group.gif", ICON_PATH_PREFIX + "/uploadgroup.gif", ICON_PATH_PREFIX + "/downloadgroup.gif", ICON_PATH_PREFIX + "/me.gif", IMAGE_PATH_PREFIX + "/tipbackground.gif", IMAGE_PATH_PREFIX + "/defaultqqshow.gif", IMAGE_PATH_PREFIX + "/downloading.gif", ICON_PATH_PREFIX + "/messagemanage.gif", ICON_PATH_PREFIX + "/txtfile.gif", ICON_PATH_PREFIX + "/copy.gif", ICON_PATH_PREFIX + "/cluster.gif", ICON_PATH_PREFIX + "/searchcluster.gif", ICON_PATH_PREFIX + "/addcluster.gif", ICON_PATH_PREFIX + "/folder.gif", ICON_PATH_PREFIX + "/rightarrow.gif", ICON_PATH_PREFIX + "/leftarrow.gif", IMAGE_PATH_PREFIX + "/onlinetipbackground.gif", ICON_PATH_PREFIX + "/notfound.gif", ICON_PATH_PREFIX + "/enablefriendtip.gif", ICON_PATH_PREFIX + "/disablefriendtip.gif", ICON_PATH_PREFIX + "/friend.gif", ICON_PATH_PREFIX + "/apply.gif", ICON_PATH_PREFIX + "/downloadremark.gif", ICON_PATH_PREFIX + "/back.gif", ICON_PATH_PREFIX + "/forward.gif", ICON_PATH_PREFIX + "/refresh.gif", ICON_PATH_PREFIX + "/stop.gif", ICON_PATH_PREFIX + "/update.gif", ICON_PATH_PREFIX + "/firefox.gif", IMAGE_PATH_PREFIX + "/checkupdate.gif", ICON_PATH_PREFIX + "/searchip.gif", ICON_PATH_PREFIX + "/awaydecoration.gif", ICON_PATH_PREFIX + "/colorsetting.gif", ICON_PATH_PREFIX + "/in.gif", ICON_PATH_PREFIX + "/out.gif", ICON_PATH_PREFIX + "/frag.gif", ICON_PATH_PREFIX + "/debug.gif", ICON_PATH_PREFIX + "/mobileqq.gif", ICON_PATH_PREFIX + "/mobile.gif", ICON_PATH_PREFIX + "/palm.gif", ICON_PATH_PREFIX + "/cam.gif", ICON_PATH_PREFIX + "/machine.gif", ICON_PATH_PREFIX + "/chatroom.gif", ICON_PATH_PREFIX + "/first.gif", ICON_PATH_PREFIX + "/addalbum.gif", ICON_PATH_PREFIX + "/mobilefriend.gif", ICON_PATH_PREFIX + "/friendview.gif", ICON_PATH_PREFIX + "/sysoption_24.gif", ICON_PATH_PREFIX + "/modifypersoninfo_24.gif", ICON_PATH_PREFIX + "/changeqqshow.gif", ICON_PATH_PREFIX + "/qqhome.gif", ICON_PATH_PREFIX + "/qqshowmall.gif", ICON_PATH_PREFIX + "/export.gif", ICON_PATH_PREFIX + "/viewpersoninfo_24.gif", ICON_PATH_PREFIX + "/abouttitleimage.gif", ICON_PATH_PREFIX + "/searchwizard.gif", ICON_PATH_PREFIX + "/next.gif", ICON_PATH_PREFIX + "/previous.gif", ICON_PATH_PREFIX + "/warning.gif", ICON_PATH_PREFIX + "/debug_bytes.gif", ICON_PATH_PREFIX + "/debug_input.gif", ICON_PATH_PREFIX + "/debug_packet.gif", ICON_PATH_PREFIX + "/debug_format.gif", ICON_PATH_PREFIX + "/debug_send.gif", ICON_PATH_PREFIX + "/hiddendecoration.gif", ICON_PATH_PREFIX + "/clusterwizard.gif", IMAGE_PATH_PREFIX + "/smth.gif", ICON_PATH_PREFIX + "/cam_24.gif", ICON_PATH_PREFIX + "/sendfile_32.gif", ICON_PATH_PREFIX + "/mobile_24.gif", ICON_PATH_PREFIX + "/export_24.gif", ICON_PATH_PREFIX + "/import_24.gif", ICON_PATH_PREFIX + "/addfacegroup_24.gif", ICON_PATH_PREFIX + "/modifyfacegroup_24.gif", ICON_PATH_PREFIX + "/deletefacegroup_24.gif", IMAGE_PATH_PREFIX + "/login2.gif", ICON_PATH_PREFIX + "/bindqq.gif", ICON_PATH_PREFIX + "/expanded.gif", ICON_PATH_PREFIX + "/collapsed.gif", ICON_PATH_PREFIX + "/treemode.gif", ICON_PATH_PREFIX + "/traditionalmode.gif", ICON_PATH_PREFIX + "/organization.gif", ICON_PATH_PREFIX + "/dialog.gif", ICON_PATH_PREFIX + "/newsubject.gif", IMAGE_PATH_PREFIX + "/menudown.gif", IMAGE_PATH_PREFIX + "/menuhover.gif", IMAGE_PATH_PREFIX + "/menunormal.gif", IMAGE_PATH_PREFIX + "/toolbarbackground.gif", ICON_PATH_PREFIX + "/pin.gif", ICON_PATH_PREFIX + "/flatexpand.gif", ICON_PATH_PREFIX + "/flatcollapse.gif", ICON_PATH_PREFIX + "/clusterinfo.gif", ICON_PATH_PREFIX + "/clustercard.gif", ICON_PATH_PREFIX + "/diskview.gif", ICON_PATH_PREFIX + "/sysmenu.gif", ICON_PATH_PREFIX + "/cluster_creator.gif", ICON_PATH_PREFIX + "/cluster_admin.gif", ICON_PATH_PREFIX + "/sun.gif", ICON_PATH_PREFIX + "/moon.gif", ICON_PATH_PREFIX + "/star.gif", ICON_PATH_PREFIX + "/collapsed_9.gif", ICON_PATH_PREFIX + "/expanded_9.gif", ICON_PATH_PREFIX + "/tool.gif", ICON_PATH_PREFIX + "/tempsessionim.gif", ICON_PATH_PREFIX + "/cluster_stockholder.gif", IMAGE_PATH_PREFIX + "/progress.gif", IMAGE_PATH_PREFIX + "/closedown.gif", IMAGE_PATH_PREFIX + "/closehover.gif", IMAGE_PATH_PREFIX + "/closenormal.gif", IMAGE_PATH_PREFIX + "/mindown.gif", IMAGE_PATH_PREFIX + "/minhover.gif", IMAGE_PATH_PREFIX + "/minnormal.gif", IMAGE_PATH_PREFIX + "/maxdown.gif", IMAGE_PATH_PREFIX + "/maxhover.gif", IMAGE_PATH_PREFIX + "/maxnormal.gif", IMAGE_PATH_PREFIX + "/restoredown.gif", IMAGE_PATH_PREFIX + "/restorehover.gif", IMAGE_PATH_PREFIX + "/restorenormal.gif", ICON_PATH_PREFIX + "/dazzlering.gif", ICON_PATH_PREFIX + "/mobile_dazzlering.gif", ICON_PATH_PREFIX + "/bind_dazzlering.gif", ICON_PATH_PREFIX + "/last.gif", ICON_PATH_PREFIX + "/tm_male.gif", ICON_PATH_PREFIX + "/tm_female.gif", ICON_PATH_PREFIX + "/tm_male_16.gif", ICON_PATH_PREFIX + "/tm_female_16.gif", IMAGE_PATH_PREFIX + "/lumaqq.gif", IMAGE_PATH_PREFIX + "/cancelloginnormal.gif", IMAGE_PATH_PREFIX + "/cancelloginhover.gif", IMAGE_PATH_PREFIX + "/cancellogindown.gif", IMAGE_PATH_PREFIX + "/plusnormal.gif", IMAGE_PATH_PREFIX + "/plushover.gif", IMAGE_PATH_PREFIX + "/plusdown.gif", ICON_PATH_PREFIX + "/sharedresource.gif", ICON_PATH_PREFIX + "/mydisk.gif", ICON_PATH_PREFIX + "/myassistant.gif", ICON_PATH_PREFIX + "/mydoc.gif", ICON_PATH_PREFIX + "/mypicture.gif", ICON_PATH_PREFIX + "/mymultimedia.gif", ICON_PATH_PREFIX + "/file.gif", ICON_PATH_PREFIX + "/mycustomhead.gif", ICON_PATH_PREFIX + "/myalbum.gif", ICON_PATH_PREFIX + "/mynotebook.gif", ICON_PATH_PREFIX + "/abort.gif", ICON_PATH_PREFIX + "/abortall.gif" }; // ? private static Resources holder = new Resources(); // 2004? public static final int QQ_2005_FACE_MAX_INDEX = 303; // private ImageRegistry registry; /** * ?singleton? */ private Resources() { // ? registry = new ImageRegistry(Display.getCurrent()); // ? FontData fd = new FontData("", 9, SWT.NORMAL); JFaceResources.getFontRegistry().put(LUMAQQ_DEFAULT_FONT, new FontData[] { fd }); } /** * @return */ public static Resources getInstance() { return holder; } /** * Imageloader * * @param resId * @return */ public ImageLoader getImageLoader(int resId) { ImageLoader loader = new ImageLoader(); InputStream is = Resources.class.getResourceAsStream(resourceLocations[resId]); loader.load(is); try { is.close(); } catch (IOException e) { } return loader; } /** * @param imageId id * @return */ public Image getImage(int resId) { if (resId < 0 || resId >= resourceLocations.length) return null; return getImage(resourceLocations[resId]); } /** * ??? * * @param resId * @return */ public Image getGrayImage(int resId) { // ?registry String path = resourceLocations[resId] + ".offline"; Image img = registry.get(path); // ???? if (img == null) { img = getImage(resourceLocations[resId]); if (img == null) return null; // ??? img = new Image(Display.getCurrent(), img, SWT.IMAGE_GRAY); registry.put(path, img); } return img; } /** * ? * @param s ? * @return Image */ private Image getImage(String s) { Image ret = registry.get(s); if (ret == null) { ret = createImageFromJar(s); if (ret != null) registry.put(s, ret); return ret; } else return ret; } /** * ??? * * @param resId * ?ID * @return * ImageDescriptor */ public ImageDescriptor getImageDescriptor(int resId) { ImageDescriptor ret = registry.getDescriptor(resourceLocations[resId]); if (ret == null) { ret = ImageDescriptor.createFromFile(LumaQQ.class, resourceLocations[resId]); if (ret != null) registry.put(resourceLocations[resId], ret); return ret; } else return ret; } /** * <pre> * ? * </pre> * * @param headId * ?ID * @return * ?Image */ public Image getHead(int headId) { // ? if (headId < 0) headId = 0; if (headId >= QQ_2005_FACE_MAX_INDEX) headId = QQ_2005_FACE_MAX_INDEX - 3; // ?????2004???? int major = headId / 3 + 1; int minor = headId % 3 + 1; // ? String face = HEAD_PATH_PREFIX + major + ".gif"; if (minor == 1) return getImage(face); else { // cache??? String faceOffline = face + ".offline"; Image image = registry.get(faceOffline); if (image == null) { // ?????? image = getImage(face); image = new Image(Display.getCurrent(), image, SWT.IMAGE_GRAY); registry.put(faceOffline, image); } return image; } } /** * ??table?linux????? * ? * * @param headId * ?Id * @return ? */ public Image getSmallHead(int headId) { // ? if (headId < 0) headId = 0; if (headId >= QQ_2005_FACE_MAX_INDEX) headId = QQ_2005_FACE_MAX_INDEX - 3; int major = headId / 3 + 1; int minor = headId % 3 + 1; String face = SMALL_HEAD_PATH_PREFIX + major + "-" + minor + ".gif"; return getImage(face); } /** * ??null * @param headId ????18 * @return ??null */ public Image getClusterHead(int headId) { if (headId < 1 || headId > 6) return null; String face = CLUSTER_HEAD_PATH_PREFIX + headId + ".gif"; return getImage(face); } /** * ???nulllinux??? * @param faceId * @return */ public Image getSmallClusterHead(int faceId) { if (faceId < 1 || faceId > 6) return null; String face = CLUSTER_HEAD_PATH_PREFIX + faceId + "-1.gif"; return getImage(face); } /** * ?????0code??code?? * * @param seq * ?? * @return * Image */ public Image getFaceBySequence(int seq) { String smiley = FACE_PATH_PREFIX + seq + ".gif"; return getImage(smiley); } /** * ?? * * @param code * ? * @return * */ public String getFacePathByCode(int code) { int seq = getFaceSequence(code); if (seq == -1) return null; else return FACE_PATH_PREFIX + seq + ".gif"; } /** * ?? * * @param code * ? * @return * Image */ public Image getFaceByCode(int code) { return getFaceBySequence(getFaceSequence(code)); } /** * ??ImageLoader * * @param code * @return */ public ImageLoader getFaceLoaderByCode(int code) { return getFaceLoaderBySequence(getFaceSequence(code)); } /** * ???ImageLoader * * @param seq * @return */ public ImageLoader getFaceLoaderBySequence(int seq) { String smiley = FACE_PATH_PREFIX + seq + ".gif"; try { ImageLoader loader = new ImageLoader(); loader.load(Resources.class.getResourceAsStream(smiley)); return loader; } catch (RuntimeException e) { return null; } } /** * Image * * @param path * the relative path to the icon */ private Image createImageFromJar(String path) { return createImageFromStream(Resources.class.getResourceAsStream(path)); } /** * * * @param path * @return */ private Image createImageFromFile(String path) { try { return createImageFromStream(new FileInputStream(path)); } catch (FileNotFoundException e) { return null; } } /** * ? * * @param is * @return */ private Image createImageFromStream(InputStream is) { try { if (is != null) { ImageData imageData = new ImageData(is); if (imageData != null) { ImageData mask = imageData.getTransparencyMask(); return new Image(Display.getCurrent(), imageData, mask); } } } catch (Exception e) { log.error(e.getMessage()); } finally { try { if (is != null) is.close(); } catch (IOException e1) { } } return null; } /** * ???? * * @param seq * ?? * @return * ?-1 */ public int getFaceCode(int seq) { return DefaultFace.getFaceCode(seq); } /** * ???? * * @param code * ? * @return * ??1 */ public int getFaceSequence(int code) { return DefaultFace.getFaceSequence(code); } /** * @return * */ public int getFaceCount() { return DefaultFace.SEQ_CODE.length; } /** * * * @param md5 * md5 * @return * Image */ public Image getSmallCustomFace(String md5) { if (md5 == null) return null; String path = FaceRegistry.getInstance().getSmallFacePath(md5); Image ret = registry.get(path); if (ret == null) { ret = createImageFromFile(path); if (ret != null) registry.put(path, ret); return ret; } else return ret; } /** * ?md5Image * * @param filename * ?? * @return * Imagenull */ public Image getReceivedCustomFace(String filename) { if (filename == null) return null; String path = FaceRegistry.getInstance().getReceivedFacePath(filename); Image ret = registry.get(path); if (ret == null) { ret = createImageFromFile(path); if (ret != null) registry.put(path, ret); return ret; } else return ret; } /** * ?id?Image * * @param id * ?id * @param gray * true?? * @return * Imagenull */ public Image getCustomHead(int id, boolean gray) { String path = FaceRegistry.getInstance().getCustomHeadPath(id); if (path == null) return null; if (!gray) { Image ret = registry.get(path); if (ret == null) { ret = createImageFromFile(path); if (ret != null) registry.put(path, ret); } return ret; } else { String grayKey = path + ".offline"; Image ret = registry.get(grayKey); if (ret == null) { ret = registry.get(path); if (ret == null) { ret = createImageFromFile(path); if (ret != null) registry.put(path, ret); } if (ret != null) { ret = new Image(Display.getCurrent(), ret, SWT.IMAGE_GRAY); registry.put(grayKey, ret); } } return ret; } } /** * ?id??Image * * @param id * ?id * @param gray * true?? * @return * Imagenull */ public Image getSmallCustomHead(int id, boolean gray) { String path = FaceRegistry.getInstance().getSmallCustomHeadPath(id); if (path == null) return null; if (!gray) { Image ret = registry.get(path); if (ret == null) { ret = createImageFromFile(path); if (ret != null) registry.put(path, ret); } return ret; } else { String grayKey = path + ".offline"; Image ret = registry.get(grayKey); if (ret == null) { ret = registry.get(path); if (ret == null) { ret = createImageFromFile(path); if (ret != null) registry.put(path, ret); } if (ret != null) { ret = new Image(Display.getCurrent(), ret, SWT.IMAGE_GRAY); registry.put(grayKey, ret); } } return ret; } } /** * @return * ? */ public Font getDefaultFont() { return JFaceResources.getFont(LUMAQQ_DEFAULT_FONT); } /** * @return * ? */ public Font getItalicDefaultFont() { return JFaceResources.getFontRegistry().getItalic(LUMAQQ_DEFAULT_FONT); } /** * ??? * * @param ext * @return */ public Image getExtensionImage(String ext) { Image img = registry.get(ext); if (img != null) return img; else { try { Program p = Program.findProgram(ext); if (p.getImageData() == null) return getImage(icoFile); else { img = new Image(Display.getCurrent(), p.getImageData()); registry.put(ext, img); return img; } } catch (RuntimeException e) { return null; } } } /** * ?imageloader * * @param path * @return */ public ImageLoader getImageLoader(String path) { try { ImageLoader loader = new ImageLoader(); loader.load(path); return loader; } catch (RuntimeException e) { return null; } } }