Files
Se302/src/main/resources/org/example/se302/view/main-view.fxml
2025-12-20 12:52:14 +03:00

111 lines
5.2 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<BorderPane xmlns="http://javafx.com/javafx"
xmlns:fx="http://javafx.com/fxml"
fx:controller="org.example.se302.controller.MainController"
prefHeight="800.0" prefWidth="1200.0">
<!-- Top: Title Bar with Theme Toggle -->
<top>
<VBox styleClass="header">
<HBox alignment="CENTER_LEFT" spacing="20">
<padding>
<Insets top="10" right="20" bottom="10" left="20"/>
</padding>
<Label text="📅 Exam Scheduling System" styleClass="title-label"/>
<Region HBox.hgrow="ALWAYS"/>
<Button fx:id="helpButton" text="❓" onAction="#onShowHelp"
styleClass="header-icon-button"/>
<Button fx:id="themeToggleButton" text="🌙" onAction="#onToggleTheme"
styleClass="header-icon-button"/>
</HBox>
<Separator/>
</VBox>
</top>
<!-- Left: Sidebar Navigation -->
<left>
<VBox fx:id="sidebar" spacing="5" minWidth="180" prefWidth="200"
style="-fx-background-color: linear-gradient(to bottom, #2c3e50, #1a252f); -fx-padding: 15;">
<padding>
<Insets top="10" right="10" bottom="10" left="10"/>
</padding>
<Button fx:id="importBtn" text="• Import Data" onAction="#onShowImport"
maxWidth="Infinity" styleClass="sidebar-button"/>
<Button fx:id="studentsBtn" text="• Students" onAction="#onToggleStudentsMenu"
maxWidth="Infinity" styleClass="sidebar-button" disable="true"/>
<!-- Students Sub-menu (initially hidden) -->
<VBox fx:id="studentsSubMenu" spacing="2" managed="false" visible="false">
<padding>
<Insets left="15"/>
</padding>
<Button fx:id="studentListBtn" text="→ Student List" onAction="#onShowStudents"
maxWidth="Infinity" styleClass="sidebar-button-sub"/>
<Button fx:id="studentScheduleBtn" text="→ Student Schedule" onAction="#onShowStudentSchedule"
maxWidth="Infinity" styleClass="sidebar-button-sub"/>
</VBox>
<Button fx:id="coursesBtn" text="• Courses" onAction="#onToggleCoursesMenu"
maxWidth="Infinity" styleClass="sidebar-button" disable="true"/>
<!-- Courses Sub-menu (initially hidden) -->
<VBox fx:id="coursesSubMenu" spacing="2" managed="false" visible="false">
<padding>
<Insets left="15"/>
</padding>
<Button fx:id="courseListBtn" text="→ Course List" onAction="#onShowCourses"
maxWidth="Infinity" styleClass="sidebar-button-sub"/>
<Button fx:id="courseScheduleBtn" text="→ Course Schedule" onAction="#onShowCourseSchedule"
maxWidth="Infinity" styleClass="sidebar-button-sub"/>
</VBox>
<Button fx:id="classroomsBtn" text="• Classrooms" onAction="#onToggleClassroomsMenu"
maxWidth="Infinity" styleClass="sidebar-button" disable="true"/>
<!-- Classrooms Sub-menu (initially hidden) -->
<VBox fx:id="classroomsSubMenu" spacing="2" managed="false" visible="false">
<padding>
<Insets left="15"/>
</padding>
<Button fx:id="classroomListBtn" text="→ Classroom List" onAction="#onShowClassrooms"
maxWidth="Infinity" styleClass="sidebar-button-sub"/>
<Button fx:id="classroomScheduleBtn" text="→ Classroom Schedule" onAction="#onShowClassroomSchedule"
maxWidth="Infinity" styleClass="sidebar-button-sub"/>
</VBox>
<Button fx:id="scheduleBtn" text="• Schedule" onAction="#onShowCalendar"
maxWidth="Infinity" styleClass="sidebar-button" disable="true"/>
<Region VBox.vgrow="ALWAYS"/>
<Label text="Navigation" style="-fx-text-fill: rgba(255,255,255,0.5); -fx-font-size: 10px;"/>
</VBox>
</left>
<!-- Center: Content Area -->
<center>
<StackPane fx:id="contentArea">
<!-- Views are loaded dynamically by controller -->
</StackPane>
</center>
<!-- Bottom: Status Bar -->
<bottom>
<HBox styleClass="status-bar" spacing="10">
<padding>
<Insets top="8" right="20" bottom="8" left="20"/>
</padding>
<Label text="🟢" style="-fx-font-size: 10px;"/>
<Label fx:id="statusLabel" text="Ready - No data loaded" HBox.hgrow="ALWAYS"/>
<Label text="ExamFlow v2.0" style="-fx-font-size: 11px; -fx-text-fill: -fx-slate-400; -fx-font-weight: 700;"/>
</HBox>
</bottom>
</BorderPane>