Compare commits
7 Commits
ebe1de3f9c
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| c6db34516a | |||
| 287a3423ba | |||
| 6e9aad2912 | |||
| 2589e7d6e6 | |||
| 0ca3b4561c | |||
| 1ccc9b86b4 | |||
| 97a9a8d842 |
+1
-1
@@ -11,7 +11,7 @@ crate-type = ["lib", "cdylib", "staticlib"]
|
||||
path = "src/lib.rs"
|
||||
|
||||
[dependencies]
|
||||
slint = "1.7"
|
||||
slint = "1.15"
|
||||
tokio = { version = "1.42", features = ["full"] }
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
serde_json = "1.0"
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 827 B |
Binary file not shown.
|
After Width: | Height: | Size: 2.9 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.4 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.9 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 2.6 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.4 KiB |
+1
-2
@@ -1,7 +1,6 @@
|
||||
//! RAIDGuard X GUI Client - Main entry point
|
||||
|
||||
use slint::ComponentHandle;
|
||||
use slint::SharedString;
|
||||
use slint::{ComponentHandle, SharedString};
|
||||
|
||||
slint::include_modules!();
|
||||
|
||||
|
||||
+382
-238
@@ -3,10 +3,40 @@
|
||||
|
||||
export component AppWindow inherits Window {
|
||||
title: "RAIDGuard X - DTR RAID Admin";
|
||||
width: 1280px;
|
||||
height: 800px;
|
||||
background: #f0f0f0;
|
||||
width: 765px;
|
||||
height: 700px;
|
||||
background: #ece9d8;
|
||||
|
||||
// Native menu bar (macOS compatible - appears at top of screen)
|
||||
MenuBar {
|
||||
Menu {
|
||||
title: "File";
|
||||
MenuItem { title: "Load Controller List"; }
|
||||
MenuSeparator { }
|
||||
MenuItem { title: "Exit"; }
|
||||
}
|
||||
Menu {
|
||||
title: "Controller";
|
||||
MenuItem { title: "Add Controller"; }
|
||||
}
|
||||
Menu {
|
||||
title: "Tools";
|
||||
MenuItem { title: "Update Firmware"; }
|
||||
MenuItem { title: "Dump Controller Log"; }
|
||||
MenuSeparator { }
|
||||
MenuItem { title: "Email Settings"; }
|
||||
MenuItem { title: "Preferences"; }
|
||||
}
|
||||
Menu {
|
||||
title: "Help";
|
||||
MenuItem { title: "Local Help Center"; }
|
||||
MenuItem { title: "Play Tutorial"; }
|
||||
MenuSeparator { }
|
||||
MenuItem { title: "About"; }
|
||||
}
|
||||
}
|
||||
|
||||
// Callbacks
|
||||
callback connect_server();
|
||||
callback refresh_data();
|
||||
callback menu_about();
|
||||
@@ -94,160 +124,254 @@ export component AppWindow inherits Window {
|
||||
in-out property<string> evmsg5: "Power supply online";
|
||||
in-out property<string> evsource5: "Power";
|
||||
|
||||
// Main layout
|
||||
VerticalLayout {
|
||||
spacing: 0;
|
||||
|
||||
// Menu Bar
|
||||
// Toolbar - matches Java JToolBar (750x65)
|
||||
Rectangle {
|
||||
height: 24px;
|
||||
background: #f0f0f0;
|
||||
height: 65px;
|
||||
background: #d4d0c8;
|
||||
HorizontalLayout {
|
||||
spacing: 2px;
|
||||
|
||||
spacing: 16px;
|
||||
Text { text: "File"; font-weight: 500; color: #000000; font_size: 13px; }
|
||||
Text { text: "Controller"; font-weight: 500; color: #000000; font_size: 13px; }
|
||||
Text { text: "Tools"; font-weight: 500; color: #000000; font_size: 13px; }
|
||||
Text { text: "Help"; font-weight: 500; color: #000000; font_size: 13px; }
|
||||
// Add button - matches jbtAddSystem
|
||||
Rectangle {
|
||||
width: 70px;
|
||||
height: 50px;
|
||||
VerticalLayout {
|
||||
spacing: 0;
|
||||
Image {
|
||||
source: @image-url("../icons/func-additem.png");
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
}
|
||||
Text { text: "Add"; font_size: 11px; font_weight: 700; color: #000000; }
|
||||
}
|
||||
}
|
||||
|
||||
// Remove button
|
||||
Rectangle {
|
||||
width: 70px;
|
||||
height: 50px;
|
||||
VerticalLayout {
|
||||
spacing: 0;
|
||||
Image {
|
||||
source: @image-url("../icons/func-deleteitem.png");
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
}
|
||||
Text { text: "Remove"; font_size: 11px; font_weight: 700; color: #000000; }
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle { width: 8px; }
|
||||
|
||||
// Create button - matches jbtCreateArray
|
||||
Rectangle {
|
||||
width: 70px;
|
||||
height: 50px;
|
||||
VerticalLayout {
|
||||
spacing: 0;
|
||||
Image {
|
||||
source: @image-url("../icons/func-createarray.png");
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
}
|
||||
Text { text: "Create"; font_size: 11px; font_weight: 700; color: #000000; }
|
||||
}
|
||||
}
|
||||
|
||||
// Delete button - matches jbtDeleteArray
|
||||
Rectangle {
|
||||
width: 70px;
|
||||
height: 50px;
|
||||
VerticalLayout {
|
||||
spacing: 0;
|
||||
Image {
|
||||
source: @image-url("../icons/func-deletearray.png");
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
}
|
||||
Text { text: "Delete"; font_size: 11px; font_weight: 700; color: #000000; }
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle { width: 8px; }
|
||||
|
||||
// Email button - matches jbtEmail
|
||||
Rectangle {
|
||||
width: 70px;
|
||||
height: 50px;
|
||||
VerticalLayout {
|
||||
spacing: 0;
|
||||
Image {
|
||||
source: @image-url("../icons/func-email.png");
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
}
|
||||
Text { text: "Email"; font_size: 11px; font_weight: 700; color: #000000; }
|
||||
}
|
||||
}
|
||||
|
||||
// Settings button - matches jbtSettings
|
||||
Rectangle {
|
||||
width: 70px;
|
||||
height: 50px;
|
||||
VerticalLayout {
|
||||
spacing: 0;
|
||||
Image {
|
||||
source: @image-url("../icons/func-settings.png");
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
}
|
||||
Text { text: "Settings"; font_size: 11px; font_weight: 700; color: #000000; }
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle { width: 1px; }
|
||||
}
|
||||
}
|
||||
|
||||
// Toolbar
|
||||
// Separator line
|
||||
Rectangle {
|
||||
height: 40px;
|
||||
background: #e8e8e8;
|
||||
HorizontalLayout {
|
||||
|
||||
spacing: 8px;
|
||||
Rectangle {
|
||||
width: 80px;
|
||||
height: 32px;
|
||||
background: #ffffff;
|
||||
border-radius: 3px;
|
||||
Text { text: "Add"; font_size: 12px; color: #000000; horizontal-alignment: center; vertical-alignment: center; }
|
||||
}
|
||||
Rectangle {
|
||||
width: 80px;
|
||||
height: 32px;
|
||||
background: #ffffff;
|
||||
border-radius: 3px;
|
||||
Text { text: "Remove"; font_size: 12px; color: #000000; horizontal-alignment: center; vertical-alignment: center; }
|
||||
}
|
||||
Rectangle { width: 10px; }
|
||||
Rectangle {
|
||||
width: 90px;
|
||||
height: 32px;
|
||||
background: #4a90d9;
|
||||
border-radius: 3px;
|
||||
Text { text: "Create"; font_size: 12px; color: white; horizontal-alignment: center; vertical-alignment: center; }
|
||||
}
|
||||
Rectangle {
|
||||
width: 80px;
|
||||
height: 32px;
|
||||
background: #d94a4a;
|
||||
border-radius: 3px;
|
||||
Text { text: "Delete"; font_size: 12px; color: white; horizontal-alignment: center; vertical-alignment: center; }
|
||||
}
|
||||
Rectangle { width: 10px; }
|
||||
Rectangle {
|
||||
width: 80px;
|
||||
height: 32px;
|
||||
background: #ffffff;
|
||||
border-radius: 3px;
|
||||
Text { text: "Email"; font_size: 12px; color: #000000; horizontal-alignment: center; vertical-alignment: center; }
|
||||
}
|
||||
Rectangle {
|
||||
width: 80px;
|
||||
height: 32px;
|
||||
background: #ffffff;
|
||||
border-radius: 3px;
|
||||
Text { text: "Settings"; font_size: 12px; color: #000000; horizontal-alignment: center; vertical-alignment: center; }
|
||||
}
|
||||
}
|
||||
height: 1px;
|
||||
background: #a0a0a0;
|
||||
}
|
||||
|
||||
// Main Content
|
||||
// Main Content Area
|
||||
HorizontalLayout {
|
||||
spacing: 0;
|
||||
height: 1px;
|
||||
|
||||
// Left Panel - Host List
|
||||
// Left Panel - Host List (matches jpHostList ~220px)
|
||||
Rectangle {
|
||||
width: 280px;
|
||||
width: 220px;
|
||||
background: #ffffff;
|
||||
VerticalLayout {
|
||||
padding: 0;
|
||||
spacing: 0;
|
||||
|
||||
// Header - matches jlHostList
|
||||
Rectangle {
|
||||
height: 30px;
|
||||
background: #d0d0d0;
|
||||
Text { text: "Host List"; font-weight: 600; font_size: 13px; color: #000000; vertical-alignment: center; }
|
||||
}
|
||||
Rectangle {
|
||||
height: 24px;
|
||||
background: #e0e0e0;
|
||||
HorizontalLayout {
|
||||
|
||||
spacing: 4px;
|
||||
Text { text: "Host"; font_size: 11px; font-weight: 600; width: 70px; }
|
||||
Text { text: "IP"; font_size: 11px; font-weight: 600; width: 90px; }
|
||||
Text { text: "Status"; font_size: 11px; font-weight: 600; width: 60px; }
|
||||
height: 22px;
|
||||
background: #d4d0c8;
|
||||
Text {
|
||||
text: "Host List";
|
||||
font_size: 12px;
|
||||
font_weight: 700;
|
||||
color: #000000;
|
||||
vertical-alignment: center;
|
||||
}
|
||||
}
|
||||
|
||||
// Table Header - matches jtHostList header
|
||||
Rectangle {
|
||||
height: 28px;
|
||||
background: #c0c0c0;
|
||||
height: 20px;
|
||||
background: #d4d0c8;
|
||||
HorizontalLayout {
|
||||
|
||||
spacing: 4px;
|
||||
Text { text: ctrl1_name; font_size: 11px; width: 70px; }
|
||||
Text { text: ctrl1_ip; font_size: 11px; width: 90px; }
|
||||
Text { text: ctrl1_status; font_size: 11px; color: #008000; width: 60px; }
|
||||
spacing: 2px;
|
||||
Text { text: "Host"; font_size: 12px; font_weight: 700; width: 65px; }
|
||||
Text { text: "IP"; font_size: 12px; font_weight: 700; width: 75px; }
|
||||
Text { text: "Status"; font_size: 12px; font_weight: 700; width: 50px; }
|
||||
}
|
||||
}
|
||||
|
||||
// Controller Row 1 - matches jtHostList row
|
||||
Rectangle {
|
||||
height: 28px;
|
||||
height: 20px;
|
||||
background: #d4d0c8;
|
||||
HorizontalLayout {
|
||||
spacing: 2px;
|
||||
Text { text: ctrl1_name; font_size: 12px; width: 65px; }
|
||||
Text { text: ctrl1_ip; font_size: 12px; width: 75px; }
|
||||
Text { text: ctrl1_status; font_size: 12px; color: #008000; width: 50px; }
|
||||
}
|
||||
}
|
||||
|
||||
// Controller Row 2
|
||||
Rectangle {
|
||||
height: 20px;
|
||||
background: #ffffff;
|
||||
HorizontalLayout {
|
||||
|
||||
spacing: 4px;
|
||||
Text { text: ctrl2_name; font_size: 11px; width: 70px; }
|
||||
Text { text: ctrl2_ip; font_size: 11px; width: 90px; }
|
||||
Text { text: ctrl2_status; font_size: 11px; width: 60px; }
|
||||
spacing: 2px;
|
||||
Text { text: ctrl2_name; font_size: 12px; width: 65px; }
|
||||
Text { text: ctrl2_ip; font_size: 12px; width: 75px; }
|
||||
Text { text: ctrl2_status; font_size: 12px; width: 50px; }
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle { }
|
||||
}
|
||||
}
|
||||
|
||||
// Vertical separator
|
||||
Rectangle {
|
||||
width: 1px;
|
||||
background: #a0a0a0;
|
||||
}
|
||||
|
||||
// Right Panel - Tabs
|
||||
VerticalLayout {
|
||||
spacing: 0;
|
||||
|
||||
// Tab Header
|
||||
// Tab Header - matches JTabbedPane
|
||||
Rectangle {
|
||||
height: 36px;
|
||||
background: #d0d0d0;
|
||||
height: 24px;
|
||||
background: #d4d0c8;
|
||||
HorizontalLayout {
|
||||
spacing: 0;
|
||||
Rectangle {
|
||||
width: 120px;
|
||||
background: current_tab == 0 ? #ffffff : #d0d0d0;
|
||||
Text { text: "Controller"; font_size: 13px; font-weight: current_tab == 0 ? 600 : 400; horizontal-alignment: center; vertical-alignment: center; }
|
||||
}
|
||||
|
||||
// Controller Tab
|
||||
Rectangle {
|
||||
width: 100px;
|
||||
background: current_tab == 1 ? #ffffff : #d0d0d0;
|
||||
Text { text: "RAID"; font_size: 13px; font-weight: current_tab == 1 ? 600 : 400; horizontal-alignment: center; vertical-alignment: center; }
|
||||
background: current_tab == 0 ? #ffffff : #d4d0c8;
|
||||
Text {
|
||||
text: "Controller";
|
||||
font_size: 12px;
|
||||
font_weight: current_tab == 0 ? 700 : 400;
|
||||
horizontal-alignment: center;
|
||||
vertical-alignment: center;
|
||||
}
|
||||
}
|
||||
|
||||
// RAID Tab
|
||||
Rectangle {
|
||||
width: 100px;
|
||||
background: current_tab == 2 ? #ffffff : #d0d0d0;
|
||||
Text { text: "Drives"; font_size: 13px; font-weight: current_tab == 2 ? 600 : 400; horizontal-alignment: center; vertical-alignment: center; }
|
||||
width: 80px;
|
||||
background: current_tab == 1 ? #ffffff : #d4d0c8;
|
||||
Text {
|
||||
text: "RAID";
|
||||
font_size: 12px;
|
||||
font_weight: current_tab == 1 ? 700 : 400;
|
||||
horizontal-alignment: center;
|
||||
vertical-alignment: center;
|
||||
}
|
||||
}
|
||||
|
||||
// Drives Tab
|
||||
Rectangle {
|
||||
width: 100px;
|
||||
background: current_tab == 3 ? #ffffff : #d0d0d0;
|
||||
Text { text: "Event"; font_size: 13px; font-weight: current_tab == 3 ? 600 : 400; horizontal-alignment: center; vertical-alignment: center; }
|
||||
width: 80px;
|
||||
background: current_tab == 2 ? #ffffff : #d4d0c8;
|
||||
Text {
|
||||
text: "Drives";
|
||||
font_size: 12px;
|
||||
font_weight: current_tab == 2 ? 700 : 400;
|
||||
horizontal-alignment: center;
|
||||
vertical-alignment: center;
|
||||
}
|
||||
}
|
||||
|
||||
// Event Tab
|
||||
Rectangle {
|
||||
width: 80px;
|
||||
background: current_tab == 3 ? #ffffff : #d4d0c8;
|
||||
Text {
|
||||
text: "Event";
|
||||
font_size: 12px;
|
||||
font_weight: current_tab == 3 ? 700 : 400;
|
||||
horizontal-alignment: center;
|
||||
vertical-alignment: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -257,27 +381,28 @@ export component AppWindow inherits Window {
|
||||
background: #ffffff;
|
||||
height: 1px;
|
||||
|
||||
// Controller Tab
|
||||
// Controller Tab - matches jpController layout
|
||||
if current_tab == 0: VerticalLayout {
|
||||
padding: 10px;
|
||||
spacing: 8px;
|
||||
|
||||
spacing: 12px;
|
||||
Rectangle {
|
||||
background: #f0f0f0;
|
||||
|
||||
background: #ffffff;
|
||||
VerticalLayout {
|
||||
spacing: 8px;
|
||||
Text { text: "Controller Information"; font-weight: 600; font_size: 14px; }
|
||||
spacing: 4px;
|
||||
Text { text: "Controller Information"; font_size: 12px; font_weight: 700; }
|
||||
Rectangle { height: 8px; }
|
||||
HorizontalLayout {
|
||||
spacing: 12px;
|
||||
VerticalLayout { spacing: 6px;
|
||||
Text { text: "Controller Name:"; font_size: 12px; font-weight: 600; horizontal-alignment: right; }
|
||||
Text { text: "Model Name:"; font_size: 12px; font-weight: 600; horizontal-alignment: right; }
|
||||
Text { text: "Serial Number:"; font_size: 12px; font-weight: 600; horizontal-alignment: right; }
|
||||
Text { text: "Firmware Version:"; font_size: 12px; font-weight: 600; horizontal-alignment: right; }
|
||||
Text { text: "BIOS Version:"; font_size: 12px; font-weight: 600; horizontal-alignment: right; }
|
||||
Text { text: "Status:"; font_size: 12px; font-weight: 600; horizontal-alignment: right; }
|
||||
spacing: 20px;
|
||||
VerticalLayout { spacing: 3px;
|
||||
Text { text: "Controller Name:"; font_size: 12px; font_weight: 700; horizontal-alignment: right; }
|
||||
Text { text: "Model Name:"; font_size: 12px; font_weight: 700; horizontal-alignment: right; }
|
||||
Text { text: "Serial Number:"; font_size: 12px; font_weight: 700; horizontal-alignment: right; }
|
||||
Text { text: "Firmware Version:"; font_size: 12px; font_weight: 700; horizontal-alignment: right; }
|
||||
Text { text: "BIOS Version:"; font_size: 12px; font_weight: 700; horizontal-alignment: right; }
|
||||
Text { text: "Status:"; font_size: 12px; font_weight: 700; horizontal-alignment: right; }
|
||||
}
|
||||
VerticalLayout { spacing: 6px;
|
||||
VerticalLayout { spacing: 3px;
|
||||
Text { text: ctrl1_name; font_size: 12px; }
|
||||
Text { text: ctrl1_model; font_size: 12px; }
|
||||
Text { text: ctrl1_sn; font_size: 12px; }
|
||||
@@ -292,25 +417,25 @@ export component AppWindow inherits Window {
|
||||
|
||||
// RAID Tab
|
||||
if current_tab == 1: VerticalLayout {
|
||||
padding: 10px;
|
||||
spacing: 8px;
|
||||
|
||||
spacing: 12px;
|
||||
Rectangle {
|
||||
background: #f0f0f0;
|
||||
|
||||
background: #ffffff;
|
||||
VerticalLayout {
|
||||
spacing: 8px;
|
||||
spacing: 4px;
|
||||
HorizontalLayout {
|
||||
Text { text: raid1_name; font-weight: 600; font_size: 14px; }
|
||||
Text { text: raid1_name; font_size: 12px; font_weight: 700; }
|
||||
Text { text: raid1_status; font_size: 12px; color: #008000; }
|
||||
}
|
||||
HorizontalLayout {
|
||||
spacing: 12px;
|
||||
VerticalLayout { spacing: 6px;
|
||||
Text { text: "RAID Level:"; font_size: 12px; font-weight: 600; horizontal-alignment: right; }
|
||||
Text { text: "Capacity:"; font_size: 12px; font-weight: 600; horizontal-alignment: right; }
|
||||
Text { text: "Usage:"; font_size: 12px; font-weight: 600; horizontal-alignment: right; }
|
||||
spacing: 20px;
|
||||
VerticalLayout { spacing: 3px;
|
||||
Text { text: "RAID Level:"; font_size: 12px; font_weight: 700; horizontal-alignment: right; }
|
||||
Text { text: "Capacity:"; font_size: 12px; font_weight: 700; horizontal-alignment: right; }
|
||||
Text { text: "Usage:"; font_size: 12px; font_weight: 700; horizontal-alignment: right; }
|
||||
}
|
||||
VerticalLayout { spacing: 6px;
|
||||
VerticalLayout { spacing: 3px;
|
||||
Text { text: raid1_level; font_size: 12px; }
|
||||
Text { text: raid1_capacity; font_size: 12px; }
|
||||
Text { text: raid1_usage; font_size: 12px; }
|
||||
@@ -318,23 +443,23 @@ export component AppWindow inherits Window {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
background: #f0f0f0;
|
||||
|
||||
background: #ffffff;
|
||||
VerticalLayout {
|
||||
spacing: 8px;
|
||||
spacing: 4px;
|
||||
HorizontalLayout {
|
||||
Text { text: raid2_name; font_weight: 600; font_size: 14px; }
|
||||
Text { text: raid2_name; font_size: 12px; font_weight: 700; }
|
||||
Text { text: raid2_status; font_size: 12px; color: #008000; }
|
||||
}
|
||||
HorizontalLayout {
|
||||
spacing: 12px;
|
||||
VerticalLayout { spacing: 6px;
|
||||
Text { text: "RAID Level:"; font_size: 12px; font-weight: 600; horizontal-alignment: right; }
|
||||
Text { text: "Capacity:"; font_size: 12px; font-weight: 600; horizontal-alignment: right; }
|
||||
Text { text: "Usage:"; font_size: 12px; font-weight: 600; horizontal-alignment: right; }
|
||||
spacing: 20px;
|
||||
VerticalLayout { spacing: 3px;
|
||||
Text { text: "RAID Level:"; font_size: 12px; font_weight: 700; horizontal-alignment: right; }
|
||||
Text { text: "Capacity:"; font_size: 12px; font_weight: 700; horizontal-alignment: right; }
|
||||
Text { text: "Usage:"; font_size: 12px; font_weight: 700; horizontal-alignment: right; }
|
||||
}
|
||||
VerticalLayout { spacing: 6px;
|
||||
VerticalLayout { spacing: 3px;
|
||||
Text { text: raid2_level; font_size: 12px; }
|
||||
Text { text: raid2_capacity; font_size: 12px; }
|
||||
Text { text: raid2_usage; font_size: 12px; }
|
||||
@@ -346,149 +471,149 @@ export component AppWindow inherits Window {
|
||||
|
||||
// Drives Tab
|
||||
if current_tab == 2: VerticalLayout {
|
||||
padding: 4px;
|
||||
spacing: 2px;
|
||||
|
||||
spacing: 4px;
|
||||
Rectangle {
|
||||
height: 28px;
|
||||
background: #e0e0e0;
|
||||
height: 20px;
|
||||
background: #d4d0c8;
|
||||
HorizontalLayout {
|
||||
|
||||
spacing: 16px;
|
||||
Text { text: "Location"; font_size: 11px; font-weight: 600; width: 140px; }
|
||||
Text { text: "Vendor"; font_size: 11px; font-weight: 600; width: 100px; }
|
||||
Text { text: "Model"; font_size: 11px; font-weight: 600; width: 160px; }
|
||||
Text { text: "Capacity"; font_size: 11px; font-weight: 600; width: 80px; }
|
||||
Text { text: "Status"; font_size: 11px; font-weight: 600; width: 80px; }
|
||||
spacing: 8px;
|
||||
Text { text: "Location"; font_size: 12px; font_weight: 700; width: 120px; }
|
||||
Text { text: "Vendor"; font_size: 12px; font_weight: 700; width: 80px; }
|
||||
Text { text: "Model"; font_size: 12px; font_weight: 700; width: 140px; }
|
||||
Text { text: "Capacity"; font_size: 12px; font_weight: 700; width: 70px; }
|
||||
Text { text: "Status"; font_size: 12px; font_weight: 700; width: 60px; }
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
height: 26px;
|
||||
background: #f0f0f0;
|
||||
height: 20px;
|
||||
background: #d4d0c8;
|
||||
HorizontalLayout {
|
||||
|
||||
spacing: 16px;
|
||||
Text { text: disk1_loc; font_size: 11px; width: 140px; }
|
||||
Text { text: disk1_vendor; font_size: 11px; width: 100px; }
|
||||
Text { text: disk1_model; font_size: 11px; width: 160px; }
|
||||
Text { text: disk1_capacity; font_size: 11px; width: 80px; }
|
||||
Text { text: disk1_status; font_size: 11px; color: #008000; width: 80px; }
|
||||
spacing: 8px;
|
||||
Text { text: disk1_loc; font_size: 12px; width: 120px; }
|
||||
Text { text: disk1_vendor; font_size: 12px; width: 80px; }
|
||||
Text { text: disk1_model; font_size: 12px; width: 140px; }
|
||||
Text { text: disk1_capacity; font_size: 12px; width: 70px; }
|
||||
Text { text: disk1_status; font_size: 12px; color: #008000; width: 60px; }
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
height: 26px;
|
||||
height: 20px;
|
||||
background: #ffffff;
|
||||
HorizontalLayout {
|
||||
|
||||
spacing: 16px;
|
||||
Text { text: disk2_loc; font_size: 11px; width: 140px; }
|
||||
Text { text: disk2_vendor; font_size: 11px; width: 100px; }
|
||||
Text { text: disk2_model; font_size: 11px; width: 160px; }
|
||||
Text { text: disk2_capacity; font_size: 11px; width: 80px; }
|
||||
Text { text: disk2_status; font_size: 11px; color: #008000; width: 80px; }
|
||||
spacing: 8px;
|
||||
Text { text: disk2_loc; font_size: 12px; width: 120px; }
|
||||
Text { text: disk2_vendor; font_size: 12px; width: 80px; }
|
||||
Text { text: disk2_model; font_size: 12px; width: 140px; }
|
||||
Text { text: disk2_capacity; font_size: 12px; width: 70px; }
|
||||
Text { text: disk2_status; font_size: 12px; color: #008000; width: 60px; }
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
height: 26px;
|
||||
background: #f0f0f0;
|
||||
height: 20px;
|
||||
background: #d4d0c8;
|
||||
HorizontalLayout {
|
||||
|
||||
spacing: 16px;
|
||||
Text { text: disk3_loc; font_size: 11px; width: 140px; }
|
||||
Text { text: disk3_vendor; font_size: 11px; width: 100px; }
|
||||
Text { text: disk3_model; font_size: 11px; width: 160px; }
|
||||
Text { text: disk3_capacity; font_size: 11px; width: 80px; }
|
||||
Text { text: disk3_status; font_size: 11px; color: #008000; width: 80px; }
|
||||
spacing: 8px;
|
||||
Text { text: disk3_loc; font_size: 12px; width: 120px; }
|
||||
Text { text: disk3_vendor; font_size: 12px; width: 80px; }
|
||||
Text { text: disk3_model; font_size: 12px; width: 140px; }
|
||||
Text { text: disk3_capacity; font_size: 12px; width: 70px; }
|
||||
Text { text: disk3_status; font_size: 12px; color: #008000; width: 60px; }
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
height: 26px;
|
||||
height: 20px;
|
||||
background: #ffffff;
|
||||
HorizontalLayout {
|
||||
|
||||
spacing: 16px;
|
||||
Text { text: disk4_loc; font_size: 11px; width: 140px; }
|
||||
Text { text: disk4_vendor; font_size: 11px; width: 100px; }
|
||||
Text { text: disk4_model; font_size: 11px; width: 160px; }
|
||||
Text { text: disk4_capacity; font_size: 11px; width: 80px; }
|
||||
Text { text: disk4_status; font_size: 11px; color: #008000; width: 80px; }
|
||||
spacing: 8px;
|
||||
Text { text: disk4_loc; font_size: 12px; width: 120px; }
|
||||
Text { text: disk4_vendor; font_size: 12px; width: 80px; }
|
||||
Text { text: disk4_model; font_size: 12px; width: 140px; }
|
||||
Text { text: disk4_capacity; font_size: 12px; width: 70px; }
|
||||
Text { text: disk4_status; font_size: 12px; color: #008000; width: 60px; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Event Tab
|
||||
if current_tab == 3: VerticalLayout {
|
||||
padding: 4px;
|
||||
spacing: 2px;
|
||||
|
||||
spacing: 4px;
|
||||
Rectangle {
|
||||
height: 28px;
|
||||
background: #e0e0e0;
|
||||
height: 20px;
|
||||
background: #d4d0c8;
|
||||
HorizontalLayout {
|
||||
|
||||
spacing: 8px;
|
||||
Text { text: "Date/Time"; font_size: 11px; font-weight: 600; width: 140px; }
|
||||
Text { text: "Level"; font_size: 11px; font-weight: 600; width: 60px; }
|
||||
Text { text: "Source"; font_size: 11px; font-weight: 600; width: 80px; }
|
||||
Text { text: "Message"; font_size: 11px; font-weight: 600; width: 400px; }
|
||||
Text { text: "Date/Time"; font_size: 12px; font_weight: 700; width: 130px; }
|
||||
Text { text: "Level"; font_size: 12px; font_weight: 700; width: 50px; }
|
||||
Text { text: "Source"; font_size: 12px; font_weight: 700; width: 60px; }
|
||||
Text { text: "Message"; font_size: 12px; font_weight: 700; width: 300px; }
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
height: 24px;
|
||||
background: #f0f0f0;
|
||||
height: 18px;
|
||||
background: #d4d0c8;
|
||||
HorizontalLayout {
|
||||
|
||||
spacing: 8px;
|
||||
Text { text: evtime1; font_size: 11px; width: 140px; }
|
||||
Text { text: evlevel1; font_size: 11px; color: #008000; width: 60px; }
|
||||
Text { text: evsource1; font_size: 11px; width: 80px; }
|
||||
Text { text: evmsg1; font_size: 11px; width: 400px; }
|
||||
Text { text: evtime1; font_size: 12px; width: 130px; }
|
||||
Text { text: evlevel1; font_size: 12px; color: #008000; width: 50px; }
|
||||
Text { text: evsource1; font_size: 12px; width: 60px; }
|
||||
Text { text: evmsg1; font_size: 12px; width: 300px; }
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
height: 24px;
|
||||
height: 18px;
|
||||
background: #ffffff;
|
||||
HorizontalLayout {
|
||||
|
||||
spacing: 8px;
|
||||
Text { text: evtime2; font_size: 11px; width: 140px; }
|
||||
Text { text: evlevel2; font_size: 11px; color: #008000; width: 60px; }
|
||||
Text { text: evsource2; font_size: 11px; width: 80px; }
|
||||
Text { text: evmsg2; font_size: 11px; width: 400px; }
|
||||
Text { text: evtime2; font_size: 12px; width: 130px; }
|
||||
Text { text: evlevel2; font_size: 12px; color: #008000; width: 50px; }
|
||||
Text { text: evsource2; font_size: 12px; width: 60px; }
|
||||
Text { text: evmsg2; font_size: 12px; width: 300px; }
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
height: 24px;
|
||||
background: #f0f0f0;
|
||||
height: 18px;
|
||||
background: #d4d0c8;
|
||||
HorizontalLayout {
|
||||
|
||||
spacing: 8px;
|
||||
Text { text: evtime3; font_size: 11px; width: 140px; }
|
||||
Text { text: evlevel3; font_size: 11px; color: #ffa500; width: 60px; }
|
||||
Text { text: evsource3; font_size: 11px; width: 80px; }
|
||||
Text { text: evmsg3; font_size: 11px; width: 400px; }
|
||||
Text { text: evtime3; font_size: 12px; width: 130px; }
|
||||
Text { text: evlevel3; font_size: 12px; color: #ffa500; width: 50px; }
|
||||
Text { text: evsource3; font_size: 12px; width: 60px; }
|
||||
Text { text: evmsg3; font_size: 12px; width: 300px; }
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
height: 24px;
|
||||
height: 18px;
|
||||
background: #ffffff;
|
||||
HorizontalLayout {
|
||||
|
||||
spacing: 8px;
|
||||
Text { text: evtime4; font_size: 11px; width: 140px; }
|
||||
Text { text: evlevel4; font_size: 11px; color: #008000; width: 60px; }
|
||||
Text { text: evsource4; font_size: 11px; width: 80px; }
|
||||
Text { text: evmsg4; font_size: 11px; width: 400px; }
|
||||
Text { text: evtime4; font_size: 12px; width: 130px; }
|
||||
Text { text: evlevel4; font_size: 12px; color: #008000; width: 50px; }
|
||||
Text { text: evsource4; font_size: 12px; width: 60px; }
|
||||
Text { text: evmsg4; font_size: 12px; width: 300px; }
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
height: 24px;
|
||||
background: #f0f0f0;
|
||||
height: 18px;
|
||||
background: #d4d0c8;
|
||||
HorizontalLayout {
|
||||
|
||||
spacing: 8px;
|
||||
Text { text: evtime5; font_size: 11px; width: 140px; }
|
||||
Text { text: evlevel5; font_size: 11px; color: #008000; width: 60px; }
|
||||
Text { text: evsource5; font_size: 11px; width: 80px; }
|
||||
Text { text: evmsg5; font_size: 11px; width: 400px; }
|
||||
Text { text: evtime5; font_size: 12px; width: 130px; }
|
||||
Text { text: evlevel5; font_size: 12px; color: #008000; width: 50px; }
|
||||
Text { text: evsource5; font_size: 12px; width: 60px; }
|
||||
Text { text: evmsg5; font_size: 12px; width: 300px; }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -496,19 +621,38 @@ export component AppWindow inherits Window {
|
||||
}
|
||||
}
|
||||
|
||||
// Status Bar
|
||||
// Status Bar - matches Java status bar
|
||||
Rectangle {
|
||||
height: 26px;
|
||||
background: #d0d0d0;
|
||||
height: 22px;
|
||||
background: #d4d0c8;
|
||||
HorizontalLayout {
|
||||
|
||||
spacing: 16px;
|
||||
Text { text: "Controllers: " + controller_count; font_size: 11px; color: #000000; }
|
||||
Text { text: "RAID Arrays: " + raid_count; font_size: 11px; color: #000000; }
|
||||
Text { text: "Drives: " + disk_count; font_size: 11px; color: #000000; }
|
||||
Rectangle { width: 300px; }
|
||||
Text { text: "Auto Refresh: " + (auto_refresh ? "On" : "Off"); font_size: 11px; color: #000000; }
|
||||
Text { text: status_text; font_size: 11px; color: connected ? #008000 : #ff0000; }
|
||||
Text {
|
||||
text: "Controllers: " + controller_count;
|
||||
font_size: 12px;
|
||||
color: #000000;
|
||||
}
|
||||
Text {
|
||||
text: "RAID Arrays: " + raid_count;
|
||||
font_size: 12px;
|
||||
color: #000000;
|
||||
}
|
||||
Text {
|
||||
text: "Drives: " + disk_count;
|
||||
font_size: 12px;
|
||||
color: #000000;
|
||||
}
|
||||
Rectangle { width: 100px; }
|
||||
Text {
|
||||
text: "Auto Refresh: " + (auto_refresh ? "On" : "Off");
|
||||
font_size: 12px;
|
||||
color: #000000;
|
||||
}
|
||||
Text {
|
||||
text: status_text;
|
||||
font_size: 12px;
|
||||
color: connected ? #008000 : #ff0000;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user