content: package com.alibaba.luaview.debugger.ui;
  
  import java.util.Hashtable;
  
  import javax.swing.JTabbedPane;
  
  import com.alibaba.luaview.debugger.Center;
  
  public class SrcCodeCenter {
  	public final Center center;
  
  	public SrcCodeCenter(Center center) {
  		this.center = center;
  	}
  
  	final Hashtable<String, SrcCodeViewer> table = new Hashtable<String, SrcCodeViewer>();
  
  	public void showHelpTab() {
  		String s = "h             help info" + "\n" + //
  				"c             continue run" + "\n" + //
  				"s             trace" + "\n" + //
  				"n             next" + "\n" + //
  				"p var         print variable" + "\n" + //
  				"b src:line    add breakpoint" + "\n" + //
  				"rb src:line   remove breakpoint" + "\n" + //
  				"bl            list breakpoint" + "\n" + //
  				"bt            print traceback" + "\n";
  		loadfile("帮助信息", s).canBreakPoint = false;
  	}
  
  	public SrcCodeViewer loadfile(String fileName, String content) {
  		content = content.replace("\t", "    ");
  		JTabbedPane tabbedPane = center.frame.getTabbedPane();
  		if (fileName != null) {
  			SrcCodeViewer temp = table.get(fileName);
  			tabbedPane.remove(temp);
  			table.remove(fileName);
  		}
  		SrcCodeViewer viewer = new SrcCodeViewer(fileName, content, this.center);
  		this.addToTabbedPane(tabbedPane, fileName, viewer);
  		table.put(fileName, viewer);
  		return viewer;
  	}
  
  	private void addToTabbedPane(JTabbedPane tabbedPane, String fileName, SrcCodeViewer viewer) {
  		int num = tabbedPane.getTabCount();
  		String newTitle = this.shortName(fileName);
  		for (int i = 0; i < num; i++) {
  			String title = tabbedPane.getTitleAt(i);
  			if (newTitle.compareTo(title) > 0) {
  				tabbedPane.insertTab(newTitle, null, viewer, null, i);
  				return;
  			}
  		}
  		tabbedPane.addTab(newTitle, viewer);
  	}
  
  	private String shortName(String s) {
  		int index = s.lastIndexOf('/');
  		if (index >= 0) {
  			s = s.substring(index + 1);
  		}
  		s = s.trim();
  		if (s.endsWith(".lua")) {
  			s = s.substring(0, s.length() - 4);
  		}
  		if (s.endsWith(".lv")) {
  			s = s.substring(0, s.length() - 3);
  		}
  		return s.trim();
  	}
  
  	public void running(String fileName, String lineNumber) {
  		try {
  			if (fileName != null) {
  				SrcCodeViewer viewer = table.get(fileName);
  				if (viewer != null) {
  					viewer.gotoLine(Integer.parseInt(lineNumber.trim()));
  
  					JTabbedPane tabbedPane = center.frame.getTabbedPane();
  					tabbedPane.setSelectedComponent(viewer);
  					if (center.frame.isAlwaysOnTop()) {
  						center.frame.setAlwaysOnTop(true);
  					}
  					if (center.frame.isVisible()) {
  						center.frame.setVisible(true);
  					}
  					center.frame.setIsDebugging(true);
  				}
  			}
  		} catch (Exception e) {
  			e.printStackTrace();
  		}
  		// System.out.println(fileName + lineNumber);
  	}
  
  	public void clearGotoLine() {
  		try {
  			JTabbedPane tabbedPane = center.frame.getTabbedPane();
  			SrcCodeViewer viewer = (SrcCodeViewer) tabbedPane.getSelectedComponent();
  			if (viewer != null) {
  				viewer.clearGotoLine();
  			}
  		} catch (Exception e) {
  			e.printStackTrace();
  		}
  	}
  
  }
  