local Q do Q={}local x=1 local n=x local function Z(Z,N,g,T,y)local V=false local W=Create(Icon("\073\109\097\103\101\066\117\116\116\111\110",Z),{Name=g.."\066\117\116\116\111\110",Visible=Option.Modifiable and Option.Selectable,Position=UDim2_new(1,(-4+-(GUI_SIZE+2)*n)+2,.25,-GUI_SIZE/2),Size=UDim2_new(0,GUI_SIZE,0,GUI_SIZE),Parent=headerFrame})local r=Create("\084\101\120\116\076\097\098\101\108",{Name=g.."\084\101\120\116",Text=g,Visible=false;BackgroundTransparency=1;TextXAlignment="\082\105\103\104\116";Font=FONT;FontSize=FONT_SIZE;Position=UDim2_new(0,0,0,0),Size=UDim2_new(1,-(GUI_SIZE+2)*x,1,0),Parent=headerFrame})W.MouseEnter:connect(function()if V then W.BackgroundTransparency=.9 end end)W.MouseLeave:connect(function()W.BackgroundTransparency=1 end)n=n+1 Q[#Q+1]={Obj=W,Cond=y}QuickButtons[#Q+1]={Obj=W,Cond=y,Toggle=function(Q)if Q then V=true Icon(W,N)else V=false Icon(W,Z)end end}return W end local function N(Q)Q.Parent=nil RemoteEvent:InvokeServer("\068\101\108\101\116\101",Q)end;(Z(ACTION_DELETE,ACTION_DELETE_OVER,"\068\101\108\101\116\101",true,function()return#Selection:Get()>0 end)).MouseButton1Click:connect(function()if not Option.Modifiable then return end local Q=Selection:Get()for x=1,#Q,1 do pcall(N,Q[x])end Selection:Set({})end);(Z(ACTION_PASTE,ACTION_PASTE_OVER,"\080\097\115\116\101",true,function()return#Selection:Get()>0 and#clipboard>0 end)).MouseButton1Click:connect(function()if not Option.Modifiable then return end local Q=Selection.List[1]or workspace for x=1,#clipboard,1 do(clipboard[x]:Clone()).Parent=Q end RemoteEvent:InvokeServer("\080\097\115\116\101",Q)end);(Z(ACTION_COPY,ACTION_COPY_OVER,"\067\111\112\121",true,function()return#Selection:Get()>0 end)).MouseButton1Click:connect(function()if not Option.Modifiable then return end clipboard={}local Q=Selection.List RemoteEvent:InvokeServer("\067\108\101\097\114\067\108\105\112\098\111\097\114\100")for x=1,#Q,1 do table.insert(clipboard,Q[x]:Clone())RemoteEvent:InvokeServer("\067\111\112\121",Q[x])end updateActions()end);(Z(ACTION_CUT,ACTION_CUT_OVER,"\067\117\116",true,function()return#Selection:Get()>0 end)).MouseButton1Click:connect(function()if not Option.Modifiable then return end clipboard={}local Q=Selection.List local x={}for n=1,#Q,1 do local Z=Q[n]:Clone()if Z then table.insert(clipboard,Z)table.insert(x,Q[n])RemoteEvent:InvokeServer("\067\111\112\121",Q[n])end end for Q=1,#x,1 do pcall(N,x[Q])end updateActions()end)end


local actionButtons do
	actionButtons = {}

	local totalActions = 1
	local currentActions = totalActions
	local function makeButton(icon,over,name,vis,cond)
		local buttonEnabled = false

		local button = Create(Icon('ImageButton',icon),{
			Name = name .. "Button";
			Visible = Option.Modifiable and Option.Selectable;
			Position = UDim2_new(1, -4 + -(GUI_SIZE+2)*currentActions+2,0.25,-GUI_SIZE/2);
			Size = UDim2_new(0,GUI_SIZE,0,GUI_SIZE);
			Parent = headerFrame;
		})

		local tipText = Create('TextLabel',{
			Name = name .. "Text";
			Text = name;
			Visible = false;
			BackgroundTransparency = 1;
			TextXAlignment = 'Right';
			Font = FONT;
			FontSize = FONT_SIZE;
			Position = UDim2_new(0,0,0,0);
			Size = UDim2_new(1,-(GUI_SIZE+2)*totalActions,1,0);
			Parent = headerFrame;
		})

		button.MouseEnter:connect(function()
			if buttonEnabled then
				button.BackgroundTransparency = 0.9
			end
			--Icon(button,over)
			--tipText.Visible = true
		end)
		button.MouseLeave:connect(function()
			button.BackgroundTransparency = 1
			--Icon(button,icon)
			--tipText.Visible = false
		end)

		currentActions = currentActions + 1
		actionButtons[#actionButtons+1] = {Obj = button,Cond = cond}
		QuickButtons[#actionButtons+1] = {Obj = button,Cond = cond, Toggle = function(on)
			if on then
				buttonEnabled = true
				Icon(button,over)
			else
				buttonEnabled = false
				Icon(button,icon)
			end
		end}
		return button
	end

	--local clipboard = {}
	local function delete(o)
		o.Parent = nil
		RemoteEvent:InvokeServer("Delete", o)
	end


	-- DELETE
	makeButton(ACTION_DELETE,ACTION_DELETE_OVER,"Delete",true,function() return #Selection:Get() > 0 end).MouseButton1Click:connect(function()
		if not Option.Modifiable then return end
		local list = Selection:Get()
		for i = 1,#list do
			pcall(delete,list[i])
		end
		Selection:Set({})
	end)

	-- PASTE
	makeButton(ACTION_PASTE,ACTION_PASTE_OVER,"Paste",true,function() return #Selection:Get() > 0 and #clipboard > 0 end).MouseButton1Click:connect(function()
		if not Option.Modifiable then return end
		local parent = Selection.List[1] or workspace
		for i = 1,#clipboard do
			clipboard[i]:Clone().Parent = parent
		end


		RemoteEvent:InvokeServer("Paste", parent)
	end)

	-- COPY
	makeButton(ACTION_COPY,ACTION_COPY_OVER,"Copy",true,function() return #Selection:Get() > 0 end).MouseButton1Click:connect(function()
		if not Option.Modifiable then return end
		clipboard = {}
		local list = Selection.List

		RemoteEvent:InvokeServer("ClearClipboard")
		for i = 1,#list do
			table.insert(clipboard,list[i]:Clone())
			RemoteEvent:InvokeServer("Copy", list[i])
		end
		updateActions()
	end)

	-- CUT
	makeButton(ACTION_CUT,ACTION_CUT_OVER,"Cut",true,function() return #Selection:Get() > 0 end).MouseButton1Click:connect(function()
		if not Option.Modifiable then return end
		clipboard = {}
		local list = Selection.List
		local cut = {}
		for i = 1,#list do
			local obj = list[i]:Clone()
			if obj then
				table.insert(clipboard,obj)
				table.insert(cut,list[i])

				RemoteEvent:InvokeServer("Copy", list[i])
			end
		end
		for i = 1,#cut do
			pcall(delete,cut[i])
		end
		updateActions()
	end)

	-- FREEZE


	-- SORT
	-- local actionSort = makeButton(ACTION_SORT,ACTION_SORT_OVER,"Sort")
end
