Skip to content
This repository has been archived by the owner on Mar 31, 2022. It is now read-only.

Commit

Permalink
Add main screen with side menu template based on Drawer #14
Browse files Browse the repository at this point in the history
  • Loading branch information
Timur Musin committed Jul 21, 2021
1 parent a40cfc4 commit c8cc861
Show file tree
Hide file tree
Showing 4 changed files with 151 additions and 72 deletions.
54 changes: 48 additions & 6 deletions content/screen/main-screen-side-menu/controller.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,54 @@
package ${packageName};

import com.haulmont.cuba.gui.screen.UiController;
import com.haulmont.cuba.gui.screen.UiDescriptor;
import com.haulmont.cuba.web.app.main.MainScreen;
<%if (classComment) {%>
${classComment}<%}%>
import io.jmix.ui.ScreenTools;
import io.jmix.ui.component.AppWorkArea;
import io.jmix.ui.component.Button;
import io.jmix.ui.component.Window;
import io.jmix.ui.component.mainwindow.Drawer;
import io.jmix.ui.icon.JmixIcon;
import io.jmix.ui.navigation.Route;
import io.jmix.ui.screen.Screen;
import io.jmix.ui.screen.Subscribe;
import io.jmix.ui.screen.UiController;
import io.jmix.ui.screen.UiControllerUtils;
import io.jmix.ui.screen.UiDescriptor;
import org.springframework.beans.factory.annotation.Autowired;

@UiController("${id}")
@UiDescriptor("${descriptorName}.xml")
public class ${controllerName} extends MainScreen {
@Route(path = "main", root = true)
public class ${controllerName} extends Screen implements Window.HasWorkArea {

@Autowired
private ScreenTools screenTools;

@Autowired
private AppWorkArea workArea;
@Autowired
private Drawer drawer;
@Autowired
private Button collapseDrawerButton;

@Override
public AppWorkArea getWorkArea() {
return workArea;
}

@Subscribe("collapseDrawerButton")
private void onCollapseDrawerButtonClick(Button.ClickEvent event) {
drawer.toggle();
if (drawer.isCollapsed()) {
collapseDrawerButton.setIconFromSet(JmixIcon.CHEVRON_RIGHT);
} else {
collapseDrawerButton.setIconFromSet(JmixIcon.CHEVRON_LEFT);
}
}

@Subscribe
public void onAfterShow(AfterShowEvent event) {
screenTools.openDefaultScreen(
UiControllerUtils.getScreenContext(this).getScreens());

screenTools.handleRedirect();
}
}
56 changes: 49 additions & 7 deletions content/screen/main-screen-side-menu/controller.kt
Original file line number Diff line number Diff line change
@@ -1,11 +1,53 @@
package ${packageName}

import com.haulmont.cuba.gui.screen.UiController
import com.haulmont.cuba.gui.screen.UiDescriptor
import com.haulmont.cuba.web.app.main.MainScreen
<%if (classComment) {%>
${classComment}<%}%>
import io.jmix.ui.ScreenTools
import io.jmix.ui.component.AppWorkArea
import io.jmix.ui.component.Button
import io.jmix.ui.component.Window.HasWorkArea
import io.jmix.ui.component.mainwindow.Drawer
import io.jmix.ui.icon.JmixIcon
import io.jmix.ui.navigation.Route
import io.jmix.ui.screen.*
import org.springframework.beans.factory.annotation.Autowired

@UiController("${api.escapeKotlinDollar(id)}")
@UiController("${id}")
@UiDescriptor("${descriptorName}.xml")
class ${controllerName} : MainScreen()
@Route(path = "main", root = true)
open class ${controllerName} : Screen(), HasWorkArea {

@Autowired
private lateinit var screenTools: ScreenTools

@Autowired
private lateinit var workArea: AppWorkArea

@Autowired
private lateinit var drawer: Drawer

@Autowired
private lateinit var collapseDrawerButton: Button

override fun getWorkArea(): AppWorkArea = workArea

@Subscribe("collapseDrawerButton")
private fun onCollapseDrawerButtonClick(event: Button.ClickEvent) {
drawer.run {
toggle()
if (isCollapsed) {
collapseDrawerButton.setIconFromSet(JmixIcon.CHEVRON_RIGHT)
} else {
collapseDrawerButton.setIconFromSet(JmixIcon.CHEVRON_LEFT)
}
}
}

@Subscribe
fun onAfterShow(event: AfterShowEvent?) {
screenTools.run {
openDefaultScreen(
UiControllerUtils.getScreenContext(this@${controllerName}).screens
)
handleRedirect()
}
}
}
92 changes: 37 additions & 55 deletions content/screen/main-screen-side-menu/descriptor.xml
Original file line number Diff line number Diff line change
@@ -1,65 +1,47 @@
<%
def horizontalBox = platform_7_2_plus ? "cssLayout" : "hbox"
def verticalBox = platform_7_2_plus ? "cssLayout" : "vbox"
%>
<window xmlns="http://jmix.io/schema/ui/window"
caption="mainMsg://application.caption">
caption="msg://application.caption">

<layout>
<${horizontalBox} id="horizontalWrap"
stylename="jmix-sidemenu-layout"
height="100%"
width="100%">
<${verticalBox} id="sideMenuContainer"
height="100%"
stylename="jmix-sidemenu-container">
<${horizontalBox} id="sideMenuPanel"
stylename="jmix-sidemenu-panel">
<${horizontalBox} id="appTitleBox"
stylename="jmix-sidemenu-title"
width="100%">
<image id="logoImage"
stylename="jmix-app-icon"
scaleMode="SCALE_DOWN"/>
<label id="appTitleLabel"
stylename="jmix-app-title"
value="mainMsg://application.logoLabel"/>
</${horizontalBox}>
<sideMenu id="sideMenu"
width="100%"/>
<ftsField id="ftsField"
width="100%"/>
<timeZoneIndicator id="timeZoneIndicator"
align="MIDDLE_CENTER"/>
<${horizontalBox} id="controlBox"
stylename="jmix-sidemenu-controls"
width="100%">
<button id="collapseMenuButton"
caption="mainMsg://menuCollapseGlyph"
description="mainMsg://sideMenuCollapse"
stylename="jmix-sidemenu-collapse-button"/>
<userIndicator id="userIndicator"
align="MIDDLE_CENTER"/>
<button id="settingsButton"
icon="GEAR"
description="mainMsg://settings"
stylename="jmix-settings-button"/>
<logoutButton id="logoutButton"
icon="SIGN_OUT"
description="mainMsg://logoutBtnDescription"/>
<button id="loginButton"
icon="SIGN_IN"
description="mainMsg://loginBtnDescription"
stylename="jmix-login-button"/>
</${horizontalBox}>
</${verticalBox}>
</${horizontalBox}>
<cssLayout id="horizontalWrap"
stylename="jmix-drawer-layout">
<drawer id="drawer" expandOnHover="true">
<cssLayout id="appTitleBox"
stylename="jmix-drawer-header"
width="100%">
<image id="logoImage"
stylename="app-icon"
scaleMode="SCALE_DOWN">
<resource>
<theme path="branding/app-icon-menu.svg"/>
</resource>
</image>
<label id="appTitleLabel"
stylename="app-title"
value="msg://application.logoLabel"/>
</cssLayout>
<sideMenu id="sideMenu"
width="100%"
stylename="jmix-drawer-content"/>
<timeZoneIndicator id="timeZoneIndicator"
align="MIDDLE_CENTER"/>
<cssLayout id="controlBox"
stylename="jmix-drawer-footer"
width="100%">
<button id="collapseDrawerButton"
icon="CHEVRON_LEFT"
stylename="jmix-drawer-collapse-button"
description="msg://sideMenuCollapse"/>
<userIndicator id="userIndicator"
align="MIDDLE_CENTER"/>
<logoutButton id="logoutButton"
icon="SIGN_OUT"
description="msg://logoutBtnDescription"/>
</cssLayout>
</drawer>
<workArea id="workArea"
stylename="jmix-workarea"
height="100%">
<initialLayout spacing="true" margin="true">
<label value="This is the work area - central part of the screen.
Put your components here."/>
</initialLayout>
</workArea>
</cssLayout>
Expand Down
21 changes: 17 additions & 4 deletions content/screen/main-screen-side-menu/settings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -19,29 +19,42 @@
icon="resource://template/template_side_menu.svg"
name="Main screen with side menu"
order="60"
enabled="false">
enabled="true">
<description>
<![CDATA[<html>A main screen with a side menu on left side.</html>]]>
</description>

<locMessages key="application.caption">
<message lang="default"><![CDATA[${project.getName()} application]]></message>
</locMessages>
<locMessages key="application.logoLabel">
<message lang="default"><![CDATA[${project.getName()} application]]></message>
</locMessages>
<locMessages key="logoutBtnDescription">
<message lang="default">Logout</message>
</locMessages>
<locMessages key="sideMenuCollapse">
<message lang="default">Collapse menu</message>
</locMessages>

<property caption="Descriptor name"
code="descriptorName"
defaultValue="ext-main-screen"
defaultValue="main-screen-side-menu"
propertyType="DESCRIPTOR_NAME"
required="true"
sourceName="descriptor"/>

<property caption="Controller name"
code="controllerName"
propertyType="CLASS_NAME"
defaultValue="ExtMainScreen"
defaultValue="MainScreenSideMenu"
required="true"
sourceName="controller"/>

<property caption="Screen id"
code="screenId"
propertyType="SCREEN_ID"
defaultValue="extMainScreen"
defaultValue="MainSide"
required="true"/>

<source fileExt="xml"
Expand Down

0 comments on commit c8cc861

Please sign in to comment.