package ch.uzh.ifi.attempto.acewiki.gui;
import java.util.List;
import nextapp.echo.app.Border;
import nextapp.echo.app.Button;
import nextapp.echo.app.Color;
import nextapp.echo.app.Extent;
import nextapp.echo.app.Insets;
import nextapp.echo.app.Row;
import nextapp.echo.app.event.ActionEvent;
import nextapp.echo.app.event.ActionListener;
import ch.uzh.ifi.attempto.acewiki.Wiki;
import ch.uzh.ifi.attempto.acewiki.core.Concept;
import ch.uzh.ifi.attempto.acewiki.core.Individual;
import ch.uzh.ifi.attempto.acewiki.core.OntologyElement;
import ch.uzh.ifi.attempto.acewiki.core.Sentence;
import ch.uzh.ifi.attempto.acewiki.core.TopicElement;
import ch.uzh.ifi.attempto.echocomp.HSpace;
import ch.uzh.ifi.attempto.echocomp.SmallButton;
import com.google.common.collect.ImmutableList;
public class TabRow extends Row implements ActionListener {
private static final long serialVersionUID = -8239909541142956202L;
public static final String TAB_MAIN = "acewiki_page_main";
public static final String TAB_INDEX = "acewiki_page_index";
public static final String TAB_SEARCH = "acewiki_page_search";
public static final String TAB_ABOUT = "acewiki_page_about";
public static final String TAB_GRAMMAR = "acewiki_page_grammar";
public static final String TAB_LEXICON = "acewiki_page_lexicon";
public static final String TAB_ARTICLE = "acewiki_page_article";
public static final String TAB_REFERENCES = "acewiki_page_references";
public static final String TAB_INDIVIDUALS = "acewiki_page_individuals";
public static final String TAB_HIERARCHY = "acewiki_page_hierarchy";
public static final String TAB_ASSIGNMENTS = "acewiki_page_assignments";
public static final String TAB_SENTENCE = "acewiki_page_sentence";
public static final String TAB_TRANSLATIONS = "acewiki_page_translations";
private static final ImmutableList<String> TABS_MAIN_SIMPLE = ImmutableList.of(
TAB_MAIN, TAB_INDEX, TAB_SEARCH, TAB_ABOUT);
private static final ImmutableList<String> TABS_MAIN_ADVANCED = ImmutableList.of(
TAB_MAIN, TAB_INDEX, TAB_SEARCH, TAB_ABOUT, TAB_GRAMMAR, TAB_LEXICON);
private static final ImmutableList<String> TABS_ARTICLE_PLAIN = ImmutableList.of(
TAB_ARTICLE);
private static final ImmutableList<String> TABS_ARTICLE_REFS = ImmutableList.of(
TAB_ARTICLE, TAB_REFERENCES);
private static final ImmutableList<String> TABS_ARTICLE_CONCEPT = ImmutableList.of(
TAB_ARTICLE, TAB_REFERENCES, TAB_INDIVIDUALS, TAB_HIERARCHY);
private static final ImmutableList<String> TABS_ARTICLE_INDIVIDUAL = ImmutableList.of(
TAB_ARTICLE, TAB_REFERENCES, TAB_ASSIGNMENTS);
private static final ImmutableList<String> TABS_SENTENCE_PLAIN = ImmutableList.of(
TAB_SENTENCE);
private static final ImmutableList<String> TABS_SENTENCE_TRANSLATIONS = ImmutableList.of(
TAB_SENTENCE, TAB_TRANSLATIONS);
public static TabRow getMainTabRow(String selectedTab, Wiki wiki) {
if (wiki.getConfig().isGrammarIntegrationEnabled()) {
return new TabRow(TABS_MAIN_ADVANCED, selectedTab, wiki);
} else {
return new TabRow(TABS_MAIN_SIMPLE, selectedTab, wiki);
}
}
public static TabRow getArticleTabRow(OntologyElement oe, String selectedTab, Wiki wiki) {
if (oe instanceof Concept) {
return new TabRow(TABS_ARTICLE_CONCEPT, selectedTab, oe, wiki);
} else if (oe instanceof Individual) {
return new TabRow(TABS_ARTICLE_INDIVIDUAL, selectedTab, oe, wiki);
} else if (oe instanceof TopicElement) {
return new TabRow(TABS_ARTICLE_PLAIN, selectedTab, oe, wiki);
} else {
return new TabRow(TABS_ARTICLE_REFS, selectedTab, oe, wiki);
}
}
public static TabRow getSentenceTabRow(Sentence sentence, String selectedTab, Wiki wiki) {
if (wiki.isMultilingual() && wiki.isTranslationsPageActivated()) {
return new TabRow(TABS_SENTENCE_TRANSLATIONS, selectedTab, sentence, wiki);
} else {
return new TabRow(TABS_SENTENCE_PLAIN, selectedTab, sentence, wiki);
}
}
public static TabRow getEmptyTabRow() {
return new TabRow(ImmutableList.<String>of(), (String) null, (Wiki) null);
}
private Object object;
private Wiki wiki;
private TabRow(List<String> tabs, String selectedTab, Object object, Wiki wiki) {
this.object = object;
this.wiki = wiki;
setInsets(new Insets(10, 0, 0, 0));
if (tabs != null) {
for (String tab : tabs) {
if (tab.equals(selectedTab)) {
addSelectedTab(tab);
} else {
addTab(tab);
}
}
}
}
public TabRow(List<String> tabs, String selectedTab, Wiki wiki) {
this(tabs, selectedTab, null, wiki);
}
/**
* Adds a new tab to the tab row.
*
* @param text Either a text key or the text itself.
*/
protected void addTab(String text) {
add(new SmallButton(text, this));
add(new HSpace(8));
add(createTabSeparator());
add(new HSpace(8));
}
/**
* Adds a new tab to the tab row that is currently selected.
*
* @param text Either a text key or the text itself.
*/
protected void addSelectedTab(String text) {
SmallButton b = new SmallButton(text, null);
b.setEnabled(false);
add(b);
add(new HSpace(8));
add(createTabSeparator());
add(new HSpace(8));
}
private Button createTabSeparator() {
Button tabSeparator = new Button();
tabSeparator.setBorder(new Border(1, Color.DARKGRAY, Border.STYLE_SOLID));
tabSeparator.setHeight(new Extent(12));
return tabSeparator;
}
public void actionPerformed(ActionEvent e) {
String c = e.getActionCommand();
if (TAB_MAIN.equals(c)) {
wiki.showStartPage();
} else if (TAB_INDEX.equals(c)) {
wiki.showIndexPage();
} else if (TAB_SEARCH.equals(c)) {
wiki.showSearchPage();
} else if (TAB_ABOUT.equals(c)) {
wiki.showAboutPage();
} else if (TAB_GRAMMAR.equals(c)) {
wiki.showGrammarPage();
} else if (TAB_LEXICON.equals(c)) {
wiki.showLexiconEditorPage();
} else if (TAB_ARTICLE.equals(c)) {
wiki.showPage((OntologyElement) object);
} else if (TAB_REFERENCES.equals(c)) {
wiki.showPage(new ReferencesPage((OntologyElement) object, wiki));
} else if (TAB_INDIVIDUALS.equals(c)) {
wiki.showPage(new IndividualsPage((Concept) object, wiki));
} else if (TAB_HIERARCHY.equals(c)) {
wiki.showPage(new HierarchyPage((Concept) object, wiki));
} else if (TAB_ASSIGNMENTS.equals(c)) {
wiki.showPage(new AssignmentsPage((Individual) object, wiki));
} else if (TAB_SENTENCE.equals(c)) {
wiki.showPage(new DetailsPage(wiki, (Sentence) object));
} else if (TAB_TRANSLATIONS.equals(c)) {
wiki.showPage(new TranslationsPage(wiki, (Sentence) object));
}
}
}