From 120e1d32f28801489b8759e7189bb1ec7713b013 Mon Sep 17 00:00:00 2001 From: Dmitry Avtonomov Date: Wed, 7 Dec 2022 14:19:18 -0800 Subject: [PATCH] Separate tab creation and tab addition to UI --- .../src/com/dmtavt/fragpipe/Fragpipe.java | 116 +++++++++++++----- .../src/com/dmtavt/fragpipe/api/UiTab.java | 13 +- .../com/dmtavt/fragpipe/tabs/TabConfig.java | 2 + 3 files changed, 98 insertions(+), 33 deletions(-) diff --git a/MSFragger-GUI/src/com/dmtavt/fragpipe/Fragpipe.java b/MSFragger-GUI/src/com/dmtavt/fragpipe/Fragpipe.java index e7d8ba5a9..e762e43e5 100644 --- a/MSFragger-GUI/src/com/dmtavt/fragpipe/Fragpipe.java +++ b/MSFragger-GUI/src/com/dmtavt/fragpipe/Fragpipe.java @@ -49,7 +49,20 @@ import com.dmtavt.fragpipe.messages.NoteFragpipeUpdate; import com.dmtavt.fragpipe.params.ThisAppProps; import com.dmtavt.fragpipe.process.ProcessManager; -import com.dmtavt.fragpipe.tabs.*; +import com.dmtavt.fragpipe.tabs.TabConfig; +import com.dmtavt.fragpipe.tabs.TabDatabase; +import com.dmtavt.fragpipe.tabs.TabDiann; +import com.dmtavt.fragpipe.tabs.TabDownstream; +import com.dmtavt.fragpipe.tabs.TabGlyco; +import com.dmtavt.fragpipe.tabs.TabMsfragger; +import com.dmtavt.fragpipe.tabs.TabPtms; +import com.dmtavt.fragpipe.tabs.TabQuantificationLabeling; +import com.dmtavt.fragpipe.tabs.TabQuantificationLfq; +import com.dmtavt.fragpipe.tabs.TabRun; +import com.dmtavt.fragpipe.tabs.TabSpecLib; +import com.dmtavt.fragpipe.tabs.TabUmpire; +import com.dmtavt.fragpipe.tabs.TabValidation; +import com.dmtavt.fragpipe.tabs.TabWorkflow; import com.dmtavt.fragpipe.tools.dbsplit.DbSplit2; import com.dmtavt.fragpipe.tools.speclibgen.SpecLibGen2; import com.github.chhh.utils.OsUtils; @@ -92,7 +105,6 @@ import java.util.NoSuchElementException; import java.util.Objects; import java.util.Properties; -import java.util.function.Consumer; import java.util.function.Function; import java.util.stream.Collectors; import javax.swing.BorderFactory; @@ -183,6 +195,21 @@ public class Fragpipe extends JFrameHeadless { Bus.registerQuietly(updater); } + private UiTab uiTabConfig; + private UiTab uiTabWorkflow; + private UiTab uiTabUmpire; + private UiTab uiTabDb; + private UiTab uiTabFragger; + private UiTab uiTabValidation; + private UiTab uiTabPtms; + private UiTab uiTabGlyco; + private UiTab uiTabQuantLfq; + private UiTab uiTabQuantLabeled; + private UiTab uiTabSpecLib; + private UiTab uiTabDiann; + private UiTab uiTabRun; + private UiTab uiTabDownstream; + public Fragpipe() throws HeadlessException { super(headless); init(); @@ -210,6 +237,21 @@ public void windowClosing(WindowEvent e) { log.debug("Done init()"); } + private static void addTab(JTabbedPane tabPane, UiTab tab, int insertionIndex) { + final Component comp = tab.isWrapTabInScroll() + ? SwingUtils.wrapInScroll(tab.getComponent()) + : tab.getComponent(); + if (insertionIndex < 0) { + tabPane.addTab(tab.getTitle(), tab.getIcon(), comp, tab.getTooltip()); + } else { + tabPane.insertTab(tab.getTitle(), tab.getIcon(), comp, tab.getTooltip(), insertionIndex); + } + } + + private static void addTab(JTabbedPane tabPane, UiTab tab) { + addTab(tabPane, tab, -1); + } + public static void uncaughtExceptionHandler(Thread t, Throwable e) { final String stacktrace = ExceptionUtils.getStackTrace(e); log.error("Something unexpected happened!", e); @@ -570,10 +612,7 @@ public static Component renameNoCache(Component comp, String name, String prefix private JTabbedPane createTabs(TextConsole console) { log.debug("Start createTabs()"); - final JTabbedPane t = new JTabbedPane(JTabbedPane.TOP, JTabbedPane.WRAP_TAB_LAYOUT); - - Consumer addTab = tab -> t.addTab(tab.getTitle(), tab.getIcon(), SwingUtils.wrapInScroll(tab.getComponent()), tab.getTooltip()); - Consumer addTabNoScroll = tab -> t.addTab(tab.getTitle(), tab.getIcon(), tab.getComponent(), tab.getTooltip()); + final JTabbedPane tp = new JTabbedPane(JTabbedPane.TOP, JTabbedPane.WRAP_TAB_LAYOUT); TabConfig tabConfig = new TabConfig(console); TabWorkflow tabWorkflow = new TabWorkflow(); @@ -590,32 +629,47 @@ private JTabbedPane createTabs(TextConsole console) { TabDownstream tabDownstream = new TabDownstream(); TabRun tabRun = new TabRun(console, tabDownstream); - addTab.accept(new UiTab("Config", tabConfig, "/com/dmtavt/fragpipe/icons/150-cogs.png", null)); - addTabNoScroll.accept(new UiTab(TAB_NAME_LCMS, tabWorkflow, - "/com/dmtavt/fragpipe/icons/icon-workflow-16.png", null)); - addTab.accept(new UiTab("Umpire", tabUmpire, - "/com/dmtavt/fragpipe/icons/dia-umpire-16x16.png", null)); - addTab.accept(new UiTab("Database", tabDatabase, - "/com/dmtavt/fragpipe/icons/icon-dna-helix-16.png", null)); - addTab.accept(new UiTab(TAB_NAME_MSFRAGGER, tabMsfragger, - "/com/dmtavt/fragpipe/icons/bolt-outlined-16.png", null)); - addTab.accept(new UiTab("Validation", tabValidation, - "/com/dmtavt/fragpipe/icons/icon-filtration-16.png", null)); - addTab.accept(new UiTab("PTMs", tabPtms, "/com/dmtavt/fragpipe/icons/icon-edit-16.png", null)); - addTab.accept(new UiTab("Glyco", tabGlyco, "/com/dmtavt/fragpipe/icons/glyco-16.png", null)); - addTab.accept(new UiTab("Quant (MS1)", tabQuantificationLfq, - "/com/dmtavt/fragpipe/icons/icon-scales-balance-16.png", null)); - addTab.accept(new UiTab("Quant (Isobaric)", tabQuantificationLabeling, - "/com/dmtavt/fragpipe/icons/icon-scales-balance-color-2-16.png", null)); - addTab.accept(new UiTab("Spec Lib", tabSpecLib, - "/com/dmtavt/fragpipe/icons/icon-library-16.png", null)); - addTab.accept(new UiTab("Quant (DIA)", tabDiann, - "/com/dmtavt/fragpipe/icons/icon-diann-16.png", null)); - addTabNoScroll.accept(new UiTab("Run", tabRun, "/com/dmtavt/fragpipe/icons/video-play-16.png", null)); - addTabNoScroll.accept(new UiTab("Downstream", tabDownstream, "/com/dmtavt/fragpipe/icons/icon-saint-20.png", null)); + uiTabConfig = new UiTab(TabConfig.TAB_NAME, tabConfig, "/com/dmtavt/fragpipe/icons/150-cogs.png", null, true); + uiTabWorkflow = new UiTab(TAB_NAME_LCMS, tabWorkflow, + "/com/dmtavt/fragpipe/icons/icon-workflow-16.png", null, false); + uiTabUmpire = new UiTab("Umpire", tabUmpire, + "/com/dmtavt/fragpipe/icons/dia-umpire-16x16.png", null, true); + uiTabDb = new UiTab("Database", tabDatabase, + "/com/dmtavt/fragpipe/icons/icon-dna-helix-16.png", null, true); + uiTabFragger = new UiTab(TAB_NAME_MSFRAGGER, tabMsfragger, + "/com/dmtavt/fragpipe/icons/bolt-outlined-16.png", null, true); + uiTabValidation = new UiTab("Validation", tabValidation, + "/com/dmtavt/fragpipe/icons/icon-filtration-16.png", null, false); + uiTabPtms = new UiTab("PTMs", tabPtms, "/com/dmtavt/fragpipe/icons/icon-edit-16.png", null, true); + uiTabGlyco = new UiTab("Glyco", tabGlyco, "/com/dmtavt/fragpipe/icons/glyco-16.png", null, true); + uiTabQuantLfq = new UiTab("Quant (MS1)", tabQuantificationLfq, + "/com/dmtavt/fragpipe/icons/icon-scales-balance-16.png", null, true); + uiTabQuantLabeled = new UiTab("Quant (Isobaric)", tabQuantificationLabeling, + "/com/dmtavt/fragpipe/icons/icon-scales-balance-color-2-16.png", null, true); + uiTabSpecLib = new UiTab("Spec Lib", tabSpecLib, + "/com/dmtavt/fragpipe/icons/icon-library-16.png", null, true); + uiTabDiann = new UiTab("Quant (DIA)", tabDiann, + "/com/dmtavt/fragpipe/icons/icon-diann-16.png", null, true); + uiTabRun = new UiTab("Run", tabRun, "/com/dmtavt/fragpipe/icons/video-play-16.png", null, false); + uiTabDownstream = new UiTab("Downstream", tabDownstream, "/com/dmtavt/fragpipe/icons/icon-saint-20.png", null, false); + + addTab(tp, uiTabConfig); + addTab(tp, uiTabWorkflow); + addTab(tp, uiTabUmpire); + addTab(tp, uiTabDb); + addTab(tp, uiTabFragger); + addTab(tp, uiTabValidation); + addTab(tp, uiTabPtms); + addTab(tp, uiTabGlyco); + addTab(tp, uiTabQuantLfq); + addTab(tp, uiTabQuantLabeled); + addTab(tp, uiTabSpecLib); + addTab(tp, uiTabDiann); + addTab(tp, uiTabRun); + addTab(tp, uiTabDownstream); log.debug("Done createTabs()"); - return t; + return tp; } public static void decorateFrame(Window frame) { @@ -719,7 +773,7 @@ public void on(MessageClearCache m) { @Subscribe(sticky = true, threadMode = ThreadMode.MAIN_ORDERED) public void on(NoteFragpipeCache m) { - log.debug("Got NotePreviousUiState, updating UI"); + log.debug("Got NoteFragpipeCache, updating UI"); loadUi(m.propsUiState, true, !headless); } diff --git a/MSFragger-GUI/src/com/dmtavt/fragpipe/api/UiTab.java b/MSFragger-GUI/src/com/dmtavt/fragpipe/api/UiTab.java index 123fe119f..7f3b4a05f 100644 --- a/MSFragger-GUI/src/com/dmtavt/fragpipe/api/UiTab.java +++ b/MSFragger-GUI/src/com/dmtavt/fragpipe/api/UiTab.java @@ -17,7 +17,6 @@ package com.dmtavt.fragpipe.api; -import java.awt.Component; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JComponent; @@ -32,12 +31,14 @@ public class UiTab { private final String title; private final JComponent comp; private final String tip; + private final boolean wrapTabInScroll; - public UiTab(String title, JComponent comp, String iconResourcePath, String tip) { + public UiTab(String title, JComponent comp, String iconResourcePath, String tip, boolean wrapTabInScroll) { this.iconResourcePath = iconResourcePath; this.title = title; this.comp = comp; this.tip = tip; + this.wrapTabInScroll = wrapTabInScroll; if (iconResourcePath != null) { try { @@ -48,6 +49,10 @@ public UiTab(String title, JComponent comp, String iconResourcePath, String tip) } } + public UiTab(String title, JComponent comp, String iconResourcePath, String tip) { + this(title, comp, iconResourcePath, tip, true); + } + public String getTitle() { return title; } @@ -63,4 +68,8 @@ public JComponent getComponent() { public String getTooltip() { return tip; } + + public boolean isWrapTabInScroll() { + return wrapTabInScroll; + } } diff --git a/MSFragger-GUI/src/com/dmtavt/fragpipe/tabs/TabConfig.java b/MSFragger-GUI/src/com/dmtavt/fragpipe/tabs/TabConfig.java index b025008d7..6010ecfa5 100644 --- a/MSFragger-GUI/src/com/dmtavt/fragpipe/tabs/TabConfig.java +++ b/MSFragger-GUI/src/com/dmtavt/fragpipe/tabs/TabConfig.java @@ -135,6 +135,8 @@ public class TabConfig extends JPanelWithEnablement { private static final MigUtils mu = MigUtils.get(); private static final Pattern emailPattern = Pattern.compile("(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])"); + public static final String TAB_NAME = "Config"; + private UiText uiTextBinFragger; private UiText uiTextBinIonQuant; private HtmlStyledJEditorPane epFraggerVer;