222 lines
5.2 KiB
Plaintext
222 lines
5.2 KiB
Plaintext
--@include element.txt
|
|
--@include label.txt
|
|
--@include button.txt
|
|
--@include /koptilnya/libs/utils.txt
|
|
--@include /koptilnya/gui/segoe_mdl2_assets_icons.txt
|
|
|
|
require("element.txt")
|
|
require("label.txt")
|
|
require("button.txt")
|
|
require("/koptilnya/libs/utils.txt")
|
|
|
|
local segoeIcons = require("/koptilnya/gui/segoe_mdl2_assets_icons.txt")
|
|
|
|
EPanel = class("EPanel", Element)
|
|
|
|
accessorFunc(EPanel, "_parentLock", "ParentLock", false)
|
|
|
|
function EPanel:initialize()
|
|
Element.initialize(self)
|
|
|
|
self._minimizable = true
|
|
self._closeable = true
|
|
self._minimized = false
|
|
self._lastHeight = 0
|
|
|
|
self.title = ELabel:new()
|
|
self.title:setFont(GUI.fonts.mainBold)
|
|
self.title:setPos(12, 8)
|
|
self:addChild(self.title)
|
|
|
|
local colorScheme = {
|
|
bg = {
|
|
Color(0, 0, 0),
|
|
hover = Color(25, 25, 25),
|
|
disabled = Color(0, 0, 0)
|
|
}
|
|
}
|
|
|
|
self.minimizeButton = EButton:new()
|
|
self.minimizeButton:setFont(GUI.fonts["icons"])
|
|
self.minimizeButton:setText(segoeIcons.ChromeMinimize)
|
|
self.minimizeButton:setSize(32, 32)
|
|
self.minimizeButton:setRadius(0)
|
|
self.minimizeButton:setColorScheme(colorScheme)
|
|
self.minimizeButton.onClick = function()
|
|
self:minimizeMaximize()
|
|
end
|
|
self:addChild(self.minimizeButton)
|
|
|
|
self.closeButton = EButton:new()
|
|
self.closeButton:setFont(GUI.fonts["icons"])
|
|
self.closeButton:setText(string.utf8char(0xE8BB))
|
|
self.closeButton:setSize(32, 32)
|
|
self.closeButton:setRadius(0)
|
|
self.closeButton:setColorScheme(colorScheme)
|
|
self.closeButton.onClick = function()
|
|
self:close()
|
|
end
|
|
self:addChild(self.closeButton)
|
|
|
|
self:setTitle("Panel")
|
|
self:setColorScheme({
|
|
border = {
|
|
Color(255, 255, 255, 10)
|
|
},
|
|
header = {
|
|
Color(0, 0, 0)
|
|
},
|
|
bg = {
|
|
Color(23, 23, 23)
|
|
}
|
|
})
|
|
end
|
|
|
|
function EPanel:setTitle(title)
|
|
self.title:setText(title)
|
|
end
|
|
|
|
function EPanel:getTitle()
|
|
return self.title:getText()
|
|
end
|
|
|
|
function EPanel:setMinimizable(state)
|
|
self._minimizable = state
|
|
|
|
self.minimizeButton:setEnabled(state)
|
|
self.minimizeButton:setVisible(state)
|
|
end
|
|
|
|
function EPanel:isMinimizable()
|
|
return self._minimizable
|
|
end
|
|
|
|
function EPanel:setCloseable(state)
|
|
self._closeable = state
|
|
|
|
self.closeButton:setEnabled(state)
|
|
self.closeButton:setVisible(state)
|
|
end
|
|
|
|
function EPanel:isMinimized()
|
|
return self._minimized
|
|
end
|
|
|
|
function EPanel:setMinimized(state)
|
|
self._minimized = state
|
|
end
|
|
|
|
function EPanel:isCloseable()
|
|
return self._minimizable
|
|
end
|
|
|
|
function EPanel:close()
|
|
self:setVisible(false)
|
|
self:setEnabled(false)
|
|
self:onClose()
|
|
end
|
|
|
|
function EPanel:open()
|
|
self:setVisible(true)
|
|
self:setEnabled(true)
|
|
self:onOpen()
|
|
end
|
|
|
|
function EPanel:minimize()
|
|
self._lastHeight = self:getHeight()
|
|
|
|
self.minimizeButton:setText(segoeIcons.ChromeMaximize)
|
|
self:setMinimized(true)
|
|
self:setHeight(34)
|
|
|
|
local child = self._firstChild
|
|
while child do
|
|
if child ~= self.title and child ~= self.minimizeButton and child ~= self.closeButton then
|
|
child:setVisible(false)
|
|
end
|
|
|
|
child = child._nextSibling
|
|
end
|
|
end
|
|
|
|
function EPanel:maximize()
|
|
self.minimizeButton:setText(segoeIcons.ChromeMinimize)
|
|
self:setMinimized(false)
|
|
self:setHeight(self._lastHeight)
|
|
|
|
local child = self._firstChild
|
|
while child do
|
|
if child ~= self.title and child ~= self.minimizeButton and child ~= self.closeButton then
|
|
child:setVisible(true)
|
|
end
|
|
|
|
child = child._nextSibling
|
|
end
|
|
end
|
|
|
|
function EPanel:minimizeMaximize()
|
|
if self:isMinimized() then
|
|
self:maximize()
|
|
else
|
|
self:minimize()
|
|
end
|
|
end
|
|
|
|
function EPanel:onMousePressed(x, y, key, keyName)
|
|
if keyName == "MOUSE1" then
|
|
local aX, aY = self:getAbsolutePos()
|
|
|
|
if self:isDraggable() and y < aY + 33 then
|
|
self._dragStartPos = {x - self:getX(), y - self:getY()}
|
|
end
|
|
end
|
|
end
|
|
|
|
function EPanel:onMouseReleased(x, y, key, keyName)
|
|
if keyName == "MOUSE1" then
|
|
if self:isDraggable() then
|
|
self._dragStartPos = nil
|
|
end
|
|
end
|
|
end
|
|
|
|
function EPanel:onMouseMoved(x, y)
|
|
if self._dragStartPos then
|
|
local targetX, targetY = x - self._dragStartPos[1], y - self._dragStartPos[2]
|
|
|
|
if self:hasParent() and self:getParentLock() then
|
|
targetX = math.clamp(targetX, 0, 1920 - self:getWidth())
|
|
targetY = math.clamp(targetY, 0, 1080 - self:getHeight())
|
|
end
|
|
|
|
self:setPos(targetX, targetY)
|
|
end
|
|
end
|
|
|
|
function EPanel:onMouseLeave()
|
|
self._dragStartPos = nil
|
|
end
|
|
|
|
function EPanel:performLayout(w, h)
|
|
self.minimizeButton:setPos(w - 65, 1)
|
|
self.closeButton:setPos(w - 33, 1)
|
|
end
|
|
|
|
function EPanel:paint(x, y, w, h)
|
|
render.setColor(self:getColorFromScheme("border"))
|
|
render.drawRectFast(x, y, w, h)
|
|
|
|
render.setColor(self:getColorFromScheme("header"))
|
|
render.drawRectFast(x + 1, y + 1, w - 2, 32)
|
|
|
|
render.setColor(self:getColorFromScheme("bg"))
|
|
render.drawRectFast(x + 1, y + 33, w - 2, h - 34)
|
|
end
|
|
|
|
-- STUB
|
|
|
|
function EPanel:onClose()
|
|
end
|
|
|
|
function EPanel:onOpen()
|
|
end |