--@include element.txt --@include label.txt --@include button.txt --@include /koptilnya/libs/utils.txt require("element.txt") require("label.txt") require("button.txt") require("/koptilnya/libs/utils.txt") EPanel = class("EPanel", Element) accessorFunc(EPanel, "_parentLock", "ParentLock", false) function EPanel:initialize() Element.initialize(self) self._minimized = false self.title = ELabel:new() 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("_") self.minimizeButton:setSize(32, 32) self.minimizeButton:setRadius(0) self.minimizeButton:setColorScheme(colorScheme) self.minimizeButton:setEnabled(false) self:addChild(self.minimizeButton) self.closeButton = EButton:new() self.closeButton:setFont(GUI.fonts["icons"]) self.closeButton:setText("X") 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:setMinimized(state) self._minimized = state end function EPanel:isMinimized() return self._minimized end function EPanel:close() self:setVisible(false) self:setEnabled(false) end function EPanel:open() self:setVisible(false) self:setEnabled(false) 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.closeButton:setPos(w - 33, 1) self.minimizeButton:setPos(w - 65, 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