/*
* Copyright 2015 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package org.kie.workbench.common.screens.explorer.client;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Widget;
import org.gwtbootstrap3.client.ui.AnchorListItem;
import org.gwtbootstrap3.client.ui.Button;
import org.gwtbootstrap3.client.ui.ButtonGroup;
import org.gwtbootstrap3.client.ui.Divider;
import org.gwtbootstrap3.client.ui.DropDownMenu;
import org.gwtbootstrap3.client.ui.constants.ButtonSize;
import org.gwtbootstrap3.client.ui.constants.IconType;
import org.gwtbootstrap3.client.ui.constants.Toggle;
import org.kie.workbench.common.screens.explorer.client.resources.i18n.ProjectExplorerConstants;
import org.kie.workbench.common.screens.explorer.client.utils.URLHelper;
import org.uberfire.backend.vfs.Path;
import org.uberfire.workbench.model.menu.MenuFactory;
import org.uberfire.workbench.model.menu.MenuItem;
import org.uberfire.workbench.model.menu.Menus;
import org.uberfire.workbench.model.menu.impl.BaseMenuCustom;
public class ExplorerMenuViewImpl
implements ExplorerMenuView {
@Inject
private ProjectScreenMenuItem projectScreenMenuItem;
private final AnchorListItem businessView = new AnchorListItem(ProjectExplorerConstants.INSTANCE.projectView());
private final AnchorListItem techView = new AnchorListItem(ProjectExplorerConstants.INSTANCE.repositoryView());
private final AnchorListItem treeExplorer = new AnchorListItem(ProjectExplorerConstants.INSTANCE.showAsFolders());
private final AnchorListItem breadcrumbExplorer = new AnchorListItem(ProjectExplorerConstants.INSTANCE.showAsLinks());
private final AnchorListItem showTagFilter = new AnchorListItem(ProjectExplorerConstants.INSTANCE.enableTagFiltering());
private final AnchorListItem archiveRepository = new AnchorListItem(ProjectExplorerConstants.INSTANCE.downloadRepository());
private final AnchorListItem archiveProject = new AnchorListItem(ProjectExplorerConstants.INSTANCE.downloadProject());
private ExplorerMenu presenter;
@Override
public void setPresenter(ExplorerMenu presenter) {
this.presenter = presenter;
}
@PostConstruct
protected void postConstruct() {
businessView.setIconFixedWidth(true);
businessView.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent clickEvent) {
presenter.onBusinessViewSelected();
}
});
techView.setIconFixedWidth(true);
techView.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent clickEvent) {
presenter.onTechViewSelected();
}
});
treeExplorer.setIconFixedWidth(true);
treeExplorer.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent clickEvent) {
presenter.onTreeExplorerSelected();
}
});
breadcrumbExplorer.setIconFixedWidth(true);
breadcrumbExplorer.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent clickEvent) {
presenter.onBreadCrumbExplorerSelected();
}
});
showTagFilter.setIconFixedWidth(true);
showTagFilter.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent clickEvent) {
presenter.onShowTagFilterSelected();
}
});
archiveProject.setIcon(IconType.DOWNLOAD);
archiveProject.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
presenter.onArchiveActiveProject();
}
});
archiveRepository.setIcon(IconType.DOWNLOAD);
archiveRepository.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
presenter.onArchiveActiveRepository();
}
});
}
@Override
public void archive(Path path) {
Window.open(URLHelper.getDownloadUrl(path),
"downloading",
"resizable=no,scrollbars=yes,status=no");
}
@Override
public void showTreeNav() {
treeExplorer.setIcon(IconType.CHECK);
breadcrumbExplorer.setIcon(null);
}
@Override
public void showBreadcrumbNav() {
breadcrumbExplorer.setIcon(IconType.CHECK);
treeExplorer.setIcon(null);
}
@Override
public void showTechViewIcon() {
techView.setIcon(IconType.CHECK);
}
@Override
public void hideBusinessViewIcon() {
businessView.setIcon(null);
}
@Override
public void showBusinessViewIcon() {
businessView.setIcon(IconType.CHECK);
}
@Override
public void hideTechViewIcon() {
techView.setIcon(null);
}
@Override
public void showTagFilterIcon() {
showTagFilter.setIcon(IconType.CHECK);
}
@Override
public void hideTagFilterIcon() {
showTagFilter.setIcon(null);
}
@Override
public Menus asMenu() {
return MenuFactory
.newTopLevelCustomMenu(new MenuFactory.CustomMenuBuilder() {
@Override
public void push(MenuFactory.CustomMenuBuilder element) {
}
@Override
public MenuItem build() {
return new BaseMenuCustom() {
@Override
public Widget build() {
return new ButtonGroup() {{
add(new Button() {{
setToggleCaret(false);
setDataToggle(Toggle.DROPDOWN);
setIcon(IconType.COG);
setSize(ButtonSize.SMALL);
setTitle(ProjectExplorerConstants.INSTANCE.customizeView());
}});
add(new DropDownMenu() {{
addStyleName("pull-right");
add(businessView);
add(techView);
add(new Divider());
add(breadcrumbExplorer);
add(treeExplorer);
add(new Divider());
add(showTagFilter);
add(new Divider());
add(archiveProject);
add(archiveRepository);
}});
}};
}
};
}
})
.endMenu()
.newTopLevelCustomMenu(new MenuFactory.CustomMenuBuilder() {
@Override
public void push(MenuFactory.CustomMenuBuilder element) {
}
@Override
public MenuItem build() {
return new BaseMenuCustom() {
@Override
public Widget build() {
return new Button() {{
setIcon(IconType.REFRESH);
setSize(ButtonSize.SMALL);
setTitle(ProjectExplorerConstants.INSTANCE.refresh());
addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
presenter.onRefresh();
}
});
}};
}
};
}
})
.endMenu()
.build();
}
}