private void initialize(Composite composite) { panel = new Composite(composite, SWT.NULL); panel.setLayout(new GridLayout(2, false)); legend_panel_sc = new ScrolledComposite(panel, SWT.V_SCROLL); legend_panel_sc.setExpandHorizontal(true); legend_panel_sc.setExpandVertical(true); GridLayout layout = new GridLayout(); layout.horizontalSpacing = 0; layout.verticalSpacing = 0; layout.marginHeight = 0; layout.marginWidth = 0; legend_panel_sc.setLayout(layout); GridData gridData = new GridData(GridData.FILL_VERTICAL); legend_panel_sc.setLayoutData(gridData); legend_panel = new Group(legend_panel_sc, SWT.NULL); legend_panel.setText(MessageText.getString("label.tags")); legend_panel.setLayout(new GridLayout()); legend_panel_sc.setContent(legend_panel); legend_panel_sc.addControlListener( new ControlAdapter() { public void controlResized(ControlEvent e) { legend_panel_sc.setMinSize(legend_panel.computeSize(SWT.DEFAULT, SWT.DEFAULT)); } }); speed_panel = new Composite(panel, SWT.NULL); speed_panel.setLayout(new GridLayout()); gridData = new GridData(GridData.FILL_BOTH); speed_panel.setLayoutData(gridData); build(); TagManager tm = TagManagerFactory.getTagManager(); tm.addTagManagerListener(this, false); for (TagType tt : tm.getTagTypes()) { tt.addTagTypeListener(this, false); } panel.addListener( SWT.Activate, new Listener() { public void handleEvent(Event event) { refresh(true); } }); }
private void delete() { Utils.disposeComposite(panel); TagManager tm = TagManagerFactory.getTagManager(); tm.removeTagManagerListener(this); for (TagType tt : tm.getTagTypes()) { tt.removeTagTypeListener(this); } if (mpg != null) { mpg.dispose(); } }
private void build() { if (legend_panel == null || legend_panel.isDisposed()) { return; } for (Control c : legend_panel.getChildren()) { c.dispose(); } List<String> configs = new ArrayList<String>(); List<String> texts = new ArrayList<String>(); List<Color> colors = new ArrayList<Color>(); TagManager tm = TagManagerFactory.getTagManager(); List<TagType> tag_types = tm.getTagTypes(); tag_types = TagUIUtils.sortTagTypes(tag_types); List<TagFeatureRateLimit> visible_tags = new ArrayList<TagFeatureRateLimit>(); for (TagType tag_type : tag_types) { if (tag_type.hasTagTypeFeature(TagFeature.TF_RATE_LIMIT)) { List<Tag> tags = tag_type.getTags(); tags = TagUIUtils.sortTags(tags); for (Tag tag : tags) { if (!tag.isVisible()) { continue; } TagFeatureRateLimit rl = (TagFeatureRateLimit) tag; if (!rl.supportsTagRates()) { continue; } String config_key = "TagStatsView.cc." + tag_type.getTagType() + "." + tag.getTagID(); configs.add(config_key); texts.add(tag.getTagName(true)); Color tt_colour; int[] rgb = tag.getColor(); if (rgb == null) { tt_colour = Colors.blues[Colors.BLUES_DARKEST]; } else { tt_colour = ColorCache.getColor(legend_panel.getDisplay(), rgb); } colors.add(tt_colour); visible_tags.add(rl); } } } final Color[] color_array = colors.toArray(new Color[colors.size()]); final String[] text_array = texts.toArray(new String[texts.size()]); final List<ValueSourceImpl> sources = new ArrayList<ValueSourceImpl>(); List<int[]> history_records = new ArrayList<int[]>(); int history_record_max = 0; for (int i = 0; i < visible_tags.size(); i++) { final TagFeatureRateLimit tag = visible_tags.get(i); tag.setRecentHistoryRetention(true); int[][] history = tag.getRecentHistory(); history_record_max = Math.max(history[0].length, history_record_max); history_records.add(history[0]); history_records.add(history[1]); sources.add(new ValueSourceImpl(tag, text_array[i], i, color_array, true)); sources.add(new ValueSourceImpl(tag, text_array[i], i, color_array, false)); } ; ValueFormater formatter = new ValueFormater() { public String format(int value) { return DisplayFormatters.formatByteCountToKiBEtcPerSec(value); } }; if (mpg != null) { mpg.dispose(); } final MultiPlotGraphic f_mpg = mpg = MultiPlotGraphic.getInstance( sources.toArray(new ValueSource[sources.size()]), formatter); int[][] history = new int[history_records.size()][]; for (int i = 0; i < history.length; i++) { int[] hist = history_records.get(i); int hist_len = hist.length; if (hist_len == history_record_max) { history[i] = hist; } else { int[] temp = new int[history_record_max]; System.arraycopy(hist, 0, temp, history_record_max - hist_len, hist_len); history[i] = temp; } } mpg.reset(history); GridData gridData; if (color_array.length > 0) { gridData = new GridData(GridData.FILL_VERTICAL); gridData.verticalAlignment = SWT.CENTER; Legend.createLegendComposite( legend_panel, color_array, configs.toArray(new String[configs.size()]), text_array, gridData, false, new Legend.LegendListener() { private int hover_index = -1; public void hoverChange(boolean entry, int index) { if (hover_index != -1) { for (int i = hover_index * 2; i < hover_index * 2 + 2; i++) { sources.get(i).setHover(false); } } if (entry) { hover_index = index; for (int i = hover_index * 2; i < hover_index * 2 + 2; i++) { sources.get(i).setHover(true); } } f_mpg.refresh(true); } public void visibilityChange(boolean visible, int index) { for (int i = index * 2; i < index * 2 + 2; i++) { sources.get(i).setVisible(visible); } f_mpg.refresh(true); } }); } else { gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.verticalAlignment = SWT.TOP; Label lab = new Label(legend_panel, SWT.NULL); lab.setText(MessageText.getString("tag.stats.none.defined")); lab.setLayoutData(gridData); } legend_panel_sc.setMinSize(legend_panel.computeSize(SWT.DEFAULT, SWT.DEFAULT)); // speed for (Control c : speed_panel.getChildren()) { c.dispose(); } Canvas speed_canvas = new Canvas(speed_panel, SWT.NO_BACKGROUND); gridData = new GridData(GridData.FILL_BOTH); speed_canvas.setLayoutData(gridData); mpg.initialize(speed_canvas, true); panel.layout(true, true); }