text:
local version="0.7.3b"
local author="kevinkk525"
local scrollLines=1
----
local unicode=require("unicode")
local colors=require("colors")
local s={} --all shapes
local g --reference to GUI-API

-- Never use floats as coordinates!
--7.2b: fcol/bcol for each line in listing, bugfix in textbox, added textbox (if works)
--7.3b: code changes to minimize lines and redundancy
-- don't try textboxes input in lua-interactive, not working there

------ local functions
function s.init(GUI) --gets removed on import
    g=GUI --GUI reference
end

local function randID() --id could be done by #objects+1?
    local id=tostring(math.random(1,1000))
    if g.ID_Status(id)==false then
        id=randID()
    end
    return id
end

local function scrollText(o,direction)
    if direction==1 then
        if o.getTextLine()~=1 then
            if o.getTextLine()-scrollLines<1 then
                o.cleanTextArea()
                o.setTextLine(1)
            else
                o.cleanTextArea()
                o.setTextLine(o.getTextLine()-scrollLines)
            end
        end
    else
        if not o.getTextLine(true) then
            o.cleanTextArea()
            o.setTextLine(o.getTextLine()+scrollLines)
        end
    end
    g.update(o.getID())
end

local function create_self(x,y,rx,ry,fcol,bcol,scrollEvent,textflag,id,layer,coords,clickEvent,text,textLine)
    return {["x"]=x,["y"]=y,["rx"]=rx,["ry"]=ry,["fcol"]=fcol,["bcol"]=bcol,["scrollEvent"]=nil,["textflag"]=nil,
    ["id"]=randID(),["layer"]=layer,["coords"]=nil,["clickEvent"]=clickEvent,["text"]=nil,["textLine"]=1} --coords added in expansion, textflag==true --> last line printed
end

local function connect_functions(self,references,ref,update,updateCoords,show,cleanText)
    local r={["getX"]=function() return self.x end,["getY"]=function() return self.y end,["getRX"]=function() return self.rx end,
    ["getRY"]=function() return self.ry end,["remove"]=function(up) ref("remove",up) g.removeObject(self.id,up) self=nil end,["getID"]=function() return self.id end,
    ["update"]=update,["changeLayer"]=function(layer) ref("move",0,0,layer-self.layer,true) g.changeLayer(self.id,layer,false) end,["getLayer"]=function() return self.layer end,
    ["setLayer"]=function(layer) self.layer=layer end,["getCoords"]=function() return self.coords end,["move"]=function(rx,ry,layer,up) rx=rx or 0 ry=ry or 0
    layer=layer or 0 g.removeFromScreen(self.id,up) self.layer=self.layer+layer self.x=self.x+rx self.y=self.y+ry ref("move",rx,ry,layer,false) show(up) end,["resize"]=function(rx,ry,up) rx=rx or 0
    ry=ry or 0 g.removeFromScreen(self.id,false) self.rx=self.rx+rx self.ry=self.ry+ry ref("resize",rx,ry,true) show(up) end,["show"]=show,
    ["toPosition"]=function(x,y,layer,up) x=x or self.x y=y or self.y layer=layer or self.layer g.removeFromScreen(self.id,up) local rx=x-self.x local ry=y-self.y layer=layer-self.layer self.layer=self.layer+layer self.x=self.x+rx self.y=self.y+ry ref("move",rx,ry,layer,false) show(up) end,
    ["clickEvent"]=function(x,y,button,user,test) if test then if self.clickEvent~=nil then return true end return false end self.clickEvent(x,y,button,user) end,
    ["setClickEvent"]=function(f) self.clickEvent=f end,["removeClickEvent"]=function() self.clickEvent=nil end,["cleanTextArea"]=cleanText,
    ["setSize"]=function(rx,ry,up) rx=rx or self.rx ry=ry or self.ry ref("resize",rx-self.rx,ry-self.ry,true) self.rx=rx self.ry=ry show(up) end,
    ["getFCol"]=function() return self.fcol end,["getBCol"]=function() return self.bcol end,["setFCol"]=function(col,up) self.fcol=col ref("setFCol",col,true) if not up then g.update(self.id,self.layer) end end,
    ["setBCol"]=function(col,up) self.bcol=col ref("setBCol",col,true) if not up then g.update(self.id,self.layer) end end,["updateCoords"]=updateCoords,["getText"]=function() return self.text end,
    ["setText"]=function(text,...) cleanText() self.text=text:format(...) g.update(self.id) end,["addReference"]=function(shape,...) references[#references+1]=g[shape](...) end,["getReferences"]=function() return references end,
    ["scrollEvent"]=function(x,y,direction,user,test) if test then if self.scrollEvent~=nil then return true end return false end self.scrollEvent(x,y,direction,user) end,
    ["setScrollEvent"]=function(f) self.scrollEvent=f end,["removeScrollEvent"]=function() self.scrollEvent=nil end,
    ["getTextLine"]=function(flag) if flag then return self.textflag else return self.textLine end end,["setTextLine"]=function(line) self.textLine=line end}
    for a,b in pairs(g.objectFunctions()) do
        r[a]=b
    end
    return r
end
-------

------
-- Definition of all shape types
------

function s.rect_full(x,y,rx,ry,layer,fcol,bcol,clickEvent,add)
    ------
    -- this part can be copied to any shape and expanded like below
    ------
    layer=layer or g.getHighestLayer()+1
    local self=create_self(x,y,rx,ry,fcol,bcol,scrollEvent,textflag,id,layer,coords,clickEvent,text,textLine)

    local r
    local references={}
    local function ref(fc,...) for i=1,#references do if references[i][fc]~=nil then references[i][fc](...) end end end
    local set=function(x,y,rx,ry,text,bcol,fcol) g.set(x,y,rx,ry,self.layer,text,self.id,bcol,fcol) end
    local fill=function(x,y,rx,ry,text,bcol,fcol) g.fill(x,y,rx,ry,self.layer,text,self.id,bcol,fcol) end
    local update --dynamic range update - only add function in function are if you use it --> highly suggested to be implemented
    local updateCoords --only add function in function area if you use it
    local show --always define this
    local cleanText
    ------

    ------
    --object functions
    ------
    show=function(up) --must be implement in similar way in every function
    ------ modify between
        fill(self.x,self.y,self.rx,self.ry," ",self.bcol,self.fcol)
    ------
        if not up then
            g.update(self.id,self.layer+1)
        end
    end

    update=function(x,y,rx,ry)
        x=x or self.x y=y or self.y rx=rx or self.rx ry=ry or self.ry
        fill(x,y,rx,ry," ",self.bcol,nil) --no g.update here
    end
    --function table, copy to your new shape and modify/expand if needed
    r=connect_functions(self,references,ref,update,updateCoords,show,cleanText)
    r.getTextLine=nil r.setTextLine=nil r.setText=nil r.getText=nil r.cleanTextArea=nil--custom modification
    --
    g.addObject(r,add) --adds pointer to object functions for interaction with GUI
    return r
end

function s.label(x,y,rx,ry,layer,fcol,bcol,clickEvent,add,text,...) --maybe add style: center,left,right...,add dynamic w,h based on text?,line break word based?,bug: \n after line break because of rx
    --------------------------
    -- this part can be copied to any shape and expanded like below
    --------------------------
    layer=layer or g.getHighestLayer()+1
    if text then
        text=text:format(...)
    end
    local self=create_self(x,y,rx,ry,fcol,bcol,scrollEvent,textflag,id,layer,coords,clickEvent,text,textLine)
    self.text=text self.autoScroll=true self.textflag=nil

    local r
    local references={}
    local function ref(fc,...) for i=1,#references do if references[i][fc]~=nil then references[i][fc](...) end end end
    local set=function(x,y,rx,ry,text,bcol,fcol) g.set(x,y,rx,ry,self.layer,text,self.id,bcol,fcol) end
    local fill=function(x,y,rx,ry,text,bcol,fcol) g.fill(x,y,rx,ry,self.layer,text,self.id,bcol,fcol) end
    local update --dynamic range update - only add function in function are if you use it --> highly suggested to be implemented
    local updateCoords --only add function in function area if you use it
    local show --always define this
    local cleanText --custom function
    ------

    ------
    --object functions
    ------
    show=function(up) --must be implement in similar way in every function (keep frame)
    ------ modify between
        update()
    ------
        if not up then
            g.update(self.id,self.layer+1)
        end
    end
    ---

    update=function(x,y,rx,ry)
        if self.text then
            local j=1
            x=x or self.x y=y or self.y rx=rx or self.rx ry=ry or self.ry
            for i=1,self.ry+self.textLine do
                if j<=unicode.len(self.text) then
                    if unicode.sub(self.text,j,j)==" " then
                        j=j+1
                    end
                    local t=unicode.sub(self.text,j,j+self.rx)
                    local k=t:find("\n")
                    if k then
                        if self.y+i-self.textLine>=y and self.y+i-self.textLine<=y+ry and i>=self.textLine then
                            local output=unicode.sub(self.text,j,j+k-2)
                            set(self.x+x-self.x,self.y+i-self.textLine,0,0,unicode.sub(output,1+x-self.x,1+x-self.x+rx),self.bcol,self.fcol)
                        end
                        j=j+k
                    else
                        if self.y+i-self.textLine>=y and self.y+i-self.textLine<=y+ry and i>=self.textLine then
                            set(self.x+x-self.x,self.y+i-self.textLine,0,0,unicode.sub(t,1+x-self.x,1+x-self.x+rx),self.bcol,self.fcol)
                        end
                        j=j+self.rx+1
                    end
                else
                    break
                end
            end
            if j-1>=unicode.len(self.text) then
                self.textflag=true
            else
                self.textflag=false
            end
            if j-1>=unicode.len(self.text) and self.textLine==1 then
                if self.autoScroll then
                    self.scrollEvent=nil
                end
            else
                if self.autoScroll then
                    self.scrollEvent=function(x,y,direction,user) scrollText(r,direction) end
                end
            end
        end
    end

    cleanText=function(x,y,rx,ry)
        if self.text then
            local j=1
            x=x or self.x y=y or self.y rx=rx or self.rx ry=ry or self.ry
            for i=1,self.ry+self.textLine do
                if j<=unicode.len(self.text) then
                    if unicode.sub(self.text,j,j)==" " then
                        j=j+1
                    end
                    local t=unicode.sub(self.text,j,j+self.rx)
                    local k=t:find("\n")
                    if k then
                        if self.y+i-self.textLine>=y and self.y+i-self.textLine<=y+ry and i>=self.textLine then
                            local output=unicode.sub(self.text,j,j+k-2)
                            output=unicode.sub(output,1+x-self.x,2+x-self.x+rx)
                            fill(self.x+x-self.x,self.y+i-self.textLine,unicode.len(output)-1,0," ")--,self.bcol,self.fcol)
                        end
                        j=j+k
                    else
                        if self.y+i-self.textLine>=y and self.y+i-self.textLine<=y+ry and i>=self.textLine then
                            local output=unicode.sub(t,1+x-self.x,2+x-self.x+rx)
                            fill(self.x+x-self.x,self.y+i-self.textLine,unicode.len(output)-1,0," ")--,self.bcol,self.fcol)
                        end
                        j=j+self.rx+1
                    end
                else
                    break
                end
            end
        end
    end
    -------
    --function table, copy to your new shape and modify/expand if needed
    r=connect_functions(self,references,ref,update,updateCoords,show,cleanText)
    --
    g.addObject(r,add) --adds pointer to object functions for interaction with GUI
    return r
end

function s.labelbox(x,y,rx,ry,layer,fcol,bcol,clickEvent,add,text,...) --purely referenced object, having referenced objects and main object in the same layer is bad for clickEvents
    ------
    -- this part can be copied to any shape and expanded like below
    ------
    layer=layer or g.getHighestLayer()+1
    local r=s.rect_full(x,y,rx,ry,layer,fcol,bcol,clickEvent,add)
    r.addReference("label",x,y,rx,ry,layer+1,fcol,bcol,clickEvent,add,text,...)
    r.setText=function(text,...) r.getReferences()[1].setText(text,...) end
    r.getText=function() return r.getReferences()[1].getText() end
    r.setTextLine=function(line) return r.getReferences()[1].setTextLine(line) end
    r.getTextLine=function(i) return r.getReferences()[1].getTextLine(i) end
    r.setScrollEvent=function(f) return r.getReferences()[1].setScrollEvent(f) end
    r.setAutoScrollEvent=function(i) return r.getReferences()[1].setAutoScroll(i) end
    r.scrollEvent=function(x,y,direction,user) return r.getReferences()[1].scrollEvent(x,y,direction,user) end
    r.removeScrollEvent=function() return r.getReferences()[1].removeScrollEvent() end
    r.removeText=function() return r.getReferences()[1].removeText() end
    r.moveText=function(rx,ry)
        rx=rx or 0 ry=ry or 0
        if r.getReferences()[1].getX()+rx<r.getX() or r.getReferences()[1].getY()+ry<r.getY() or r.getReferences()[1].getX()+rx>r.getX()+r.getRX() or r.getReferences()[1].getY()+ry>r.getY()+r.getRY() then
            return false,"can't move outside border"
        elseif r.getReferences()[1].getRX()+r.getReferences()[1].getX()+rx>r.getX()+r.getRX() then
            r.getReferences()[1].resize(r.getX()+r.getRX()-rx-r.getReferences()[1].getX()-r.getReferences()[1].getRX(),0,true)
        end
        if r.getReferences()[1].getRY()+r.getReferences()[1].getY()+ry>r.getY()+r.getRY() then
            r.getReferences()[1].resize(0,r.getY()+r.getRY()-ry-r.getReferences()[1].getY()-r.getReferences()[1].getRY(),true)
        end
        r.getReferences()[1].move(rx,ry)
    end
    r.resizeText=function(rx,ry)
        rx=rx or 0 ry=ry or 0
        if r.getReferences()[1].getX()+r.getReferences()[1].getRX()+rx>r.getX()+r.getRX() then
            rx=r.getX()+r.getRX()-r.getReferences()[1].getX()-r.getReferences()[1].getRX()
        elseif r.getReferences()[1].getX()<=r.getReferences()[1].getRX()+rx then
            rx=r.getReferences()[1].getX()-r.getReferences()[1].geRX()+1
        end
        if r.getReferences()[1].getY()+r.getReferences()[1].getRY()+ry>r.getY()+r.getRY() then
            ry=r.getY()+r.getRY()-r.getReferences()[1].getY()-r.getReferences()[1].getRY()
        elseif r.getReferences()[1].getY()<=r.getReferences()[1].getRY()+ry then
            ry=r.getReferences()[1].getY()-r.getReferences()[1].getRY()+1
        end
        r.getReferences()[1].resize(rx,ry)
    end
    r.setTextFCol=function(fcol) r.getReferences()[1].setFCol(fcol) end
    r.setTextBCol=function(bcol) r.getReferences()[1].setBCol(bcol) end
    r.getTextFCol=function() return r.getReferences()[1].getFCol() end
    r.getTextBCol=function() return r.getReferences()[1].getBCol() end
    r.getTextPosition=function() return r.getReferences()[1].getX(),r.getReferences()[1].getY() end

    g.addObject(r,add) --adds pointer to object functions for interaction with GUI
    return r
    --referenced object (text) does not need clickEvent because it gets skipped during check and clickEvent of main object is called.
end

function s.listing(x,y,rx,ry,layer,fcol,bcol,clickEvent,add,text) --maybe add style: center,left,right...,add dynamic w,h based on text?,line break word based?,bug: \n after line break because of rx
    --------------------------
    -- this part can be copied to any shape and expanded like below
    --------------------------
    layer=layer or g.getHighestLayer()+1
    if text then
        if type(text)~="table" then
            return false,"wrong textarray format, must be table"
        end
    end
    local self=create_self(x,y,rx,ry,fcol,bcol,scrollEvent,textflag,id,layer,coords,clickEvent,text,textLine)
    self["tltab"]={} self.fcol={[0]=fcol} self.bcol={[0]=bcol}
    self.text=text self.textlines=0 self.autoScroll=true
    if text then for i=1,1000 do if text[i] then self.textlines=self.textlines+1 end end end

    local r --object
    local references={}
    local function ref(fc,...) for i=1,#references do if references[i][fc]~=nil then references[i][fc](...) end end end
    local set=function(x,y,rx,ry,text,bcol,fcol) g.set(x,y,rx,ry,self.layer,text,self.id,bcol,fcol) end
    local fill=function(x,y,rx,ry,text,bcol,fcol) g.fill(x,y,rx,ry,self.layer,text,self.id,bcol,fcol) end
    local update --dynamic range update - only add function in function area if you use it --> highly suggested to be implemented
    local updateCoords --only add function in function area if you use it
    local show --always define this
    local cleanText --custom function
    local start_elem=unicode.char(0x0387)
    ------

    ------
    --object functions
    ------
    show=function(up) --must be implement in similar way in every function (keep frame)
    ------ modify between
        update()
    ------
        if not up then
            g.update(self.id,self.layer+1)
        end
    end
    ---
    local function fcol(line)
        if self.fcol[line] then
            return self.fcol[line]
        else
            return self.fcol[0]
        end
    end
    local function bcol(line)
        if self.bcol[line] then
            return self.bcol[line]
        else
            return self.bcol[0]
        end
    end

    update=function(x,y,rx,ry,clean)
        if self.text then
            self.tltab={}
            x=x or self.x y=y or self.y rx=rx or self.rx ry=ry or self.ry
            local i=1
            for line=1,self.textlines do
                local j=1
                if i<=self.ry+self.textLine then
                    if self.text[line] then
                        while true do
                            if j<=unicode.len(self.text[line]) then
                                if unicode.sub(self.text[line],j,j)==" " then
                                    j=j+1
                                end
                                local t=unicode.sub(self.text[line],j,j+self.rx)
                                local k=t:find("\n")
                                if k then
                                    if self.y+i-self.textLine<=y+ry then
                                        if j==1 or j==2 then
                                            local output=start_elem.." "
                                            output=output..unicode.sub(self.text[line],j,j+k-2)
                                            if i>=self.textLine then
                                                if not clean then
                                                    set(self.x+x-self.x,self.y+i-self.textLine,0,0,unicode.sub(output,1+x-self.x,1+x-self.x+rx),bcol(line),fcol(line))
                                                else
                                                    fill(self.x+x-self.x,self.y+i-self.textLine,unicode.len(unicode.sub(output,1+x-self.x,1+x-self.x+rx))-1,0," ")--,self.bcol,self.fcol)
                                                end
                                                self.tltab[i-self.textLine+1]=line
                                                if line==self.textlines and j+k-1>=unicode.len(self.text[line]) then
                                                    self.tltab[0]=1
                                                end
                                            end
                                            output=nil
                                        else
                                            if i>=self.textLine then
                                                if not clean then
                                                    set(self.x+x-self.x,self.y+i-self.textLine,0,0,unicode.sub(unicode.sub(self.text[line],j,j+k-2),1+x-self.x,1+x-self.x+rx),bcol(line),fcol(line))
                                                else
                                                    fill(self.x+x-self.x,self.y+i-self.textLine,unicode.len(unicode.sub(unicode.sub(self.text[line],j,j+k-2),1+x-self.x,1+x-self.x+rx))-1,0," ")--,self.bcol,self.fcol)
                                                end
                                                self.tltab[i-self.textLine+1]=line
                                                if line==self.textlines and j+k-1>=unicode.len(self.text[line]) then
                                                    self.tltab[0]=1
                                                end
                                            end
                                        end
                                    end
                                    j=j+k
                                    i=i+1
                                else
                                    local offs=0
                                    if self.y+i-self.textLine<=y+ry then
                                        if j==1 or j==2 then
                                            if i>=self.textLine then
                                                local output=start_elem.." "
                                                output=output..t
                                                if not clean then
                                                    set(self.x+x-self.x,self.y+i-self.textLine,0,0,unicode.sub(output,1+x-self.x,1+x-self.x+rx),bcol(line),fcol(line))
                                                else
                                                    fill(self.x+x-self.x,self.y+i-self.textLine,unicode.len(unicode.sub(output,1+x-self.x,1+x-self.x+rx))-1,0," ")--,self.bcol,self.fcol)
                                                end
                                                output=nil
                                                self.tltab[i-self.textLine+1]=line
                                                if line==self.textlines and j+self.rx-offs>=unicode.len(self.text[line]) then
                                                    self.tltab[0]=1
                                                end
                                            end
                                            offs=2
                                        else
                                            if i>=self.textLine then
                                                if not clean then
                                                    set(self.x+x-self.x,self.y+i-self.textLine,0,0,unicode.sub(t,1+x-self.x,1+x-self.x+rx),bcol(line),fcol(line))
                                                else
                                                    fill(self.x+x-self.x,self.y+i-self.textLine,unicode.len(unicode.sub(t,1+x-self.x,1+x-self.x+rx))-1,0," ")
                                                end
                                                self.tltab[i-self.textLine+1]=line
                                                if line==self.textlines and j+self.rx-offs>=unicode.len(self.text[line]) then
                                                    self.tltab[0]=1
                                                end
                                            end
                                        end
                                    end
                                    j=j+self.rx+1-offs
                                    i=i+1
                                end
                            else
                                break
                            end
                        end
                    end
                else
                    break
                end
            end
            if self.tltab[0] then
                self.textflag=true
            else
                self.textflag=nil
            end
            if self.autoScroll then
                if self.tltab[0] and self.textLine==1 then
                    self.scrollEvent=nil
                else
                    self.scrollEvent=function(x,y,direction,user) scrollText(r,direction) end
                end
            end
        end
    end

    cleanText=function(x,y,rx,ry,line) --line currently unused
        update(x,y,rx,ry,true)
    end
    -------
    --function table, copy to your new shape and modify/expand if needed
    r=connect_functions(self,references,ref,update,updateCoords,show,cleanText)

    r["clickEvent"]=function(x,y,button,user,test) if test then if self.clickEvent~=nil then return true end return false end if self.tltab[y-self.y+1] and type(self.clickEvent)=="table" and self.clickEvent[self.tltab[y-self.y+1]] then self.clickEvent[self.tltab[y-self.y+1]](x,y,button,user,self.text[self.tltab[y-self.y+1]]) elseif type(self.clickEvent)=="function" then self.clickEvent(x,y,button,user,self.text) end end
    r["setClickEvent"]=function(f,line) if type(f)=="number" then return false,"function,line" end if not self.clickEvent then self.clickEvent={} end if line and type(self.clickEvent)=="table" then self.clickEvent[line]=f elseif line and type(self.clickEvent)=="function" then self.clickEvent={} self.clickEvent[line]=f elseif line then return false,"clickEvent={}" else self.clickEvent=f end end
    r["removeClickEvent"]=function(line) if line and type(self.clickEvent)=="table" then self.clickEvent[line]=nil else self.clickEvent=nil end end
    r["getText"]=function(i) if not i then return self.text end return self.text[i] end
    r["removeText"]=function(i) if i then self.text[i]=nil self.textlines=self.textlines-1 else self.text=nil self.textlines=0 end end
    r["setText"]=function(i,text,...) if not i or type(i)=="string" then return false,"no line specified" elseif type(text)=="table" then cleanText() self.text=text self.textlines=0 for i=1,1000 do if self.text[i] then self.textlines=self.textlines+1 end end else cleanText(nil,nil,nil,nil,i) if not self.text then self.text={} end if not self.text[i] then self.textlines=self.textlines+1 end self.text[i]=text:format(...) end g.update(self.id) end
    r["removeText"]=function(i) if type(i)=="number" then self.text[i]=nil else return false,"must be number" end end
    r["setAutoScroll"]=function(i) if type(i)~="boolean" then return false,"parameter has to be boolean" end self.autoScroll=i end
    r["getFCol"]=function(i) i=i or 0 return self.fcol[i] end r["getBCol"]=function(i) i=i or 0 return self.bcol[i] end
    r["setFCol"]=function(col,i,up) i=i or 0 self.fcol[i]=col if i==0 then ref("setFCol",col,true) end if not up then g.update(self.id,self.layer) end end
    r["setBCol"]=function(col,i,up) i=i or 0 self.bcol[i]=col if i==0 then ref("setBCol",col,true) end if not up then g.update(self.id,self.layer) end end
    --
    g.addObject(r,up,add) --adds pointer to object functions for interaction with GUI
    return r
end

function s.textbox(x,y,rx,ry,layer,fcol,bcol,clickEvent,add,text) --maybe add style: center,left,right...,add dynamic w,h based on text?,line break word based?,bug: \n after line break because of rx
    --------------------------
    -- this part can be copied to any shape and expanded like below
    --------------------------
    layer=layer or g.getHighestLayer()+1
    local self={["password"]=nil,["text"]=text,["clickEvent"]=clickEvent} --custom self

    local r=g.rect_full(x,y,rx,ry,layer,fcol,bcol,clickEvent,true)
    local show_rect=r.show
    local update_r=r.update
    local up
    local references={}
    local function ref(fc,...) for i=1,#references do if references[i][fc]~=nil then references[i][fc](...) end end end
    local set=function(x,y,rx,ry,text,bcol,fcol) g.set(x,y,rx,ry,self.layer,text,self.id,bcol,fcol) end
    local fill=function(x,y,rx,ry,text,bcol,fcol) g.fill(x,y,rx,ry,self.layer,text,self.id,bcol,fcol) end
    local update --dynamic range update - only add function in function area if you use it --> highly suggested to be implemented
    local updateCoords --only add function in function area if you use it
    local show --always define this
    local cleanText --custom function
    local color_offset=0x040404
    ------

    ------
    --object functions
    ------
    show=function(up) --must be implement in similar way in every function (keep frame)
    ------ modify between
        update()
    ------
        if not up then
            g.update(self.id,self.layer+1)
        end
    end
    ---
    fill=function(x,y,rx,ry,text,bcol,fcol) g.fill(x,y,rx,ry,r.getLayer(),text,r.getID(),bcol,fcol) end
    set=function(x,y,rx,ry,text,bcol,fcol) g.set(x,y,rx,ry,r.getLayer(),text,r.getID(),bcol,fcol) end

    update=function(x,y,rx,ry)
        update_r(x,y,rx,ry)
        x=x or r.getX() y=y or r.getY() rx=rx or r.getRX() ry=ry or r.getRY()
        ry=0
        if y==r.getY() and r.getRY()>0 then y=y+1 end
        if x+rx==r.getX()+r.getRX() and r.getRX()>1 then rx=rx-1 end
        if x==r.getX() and r.getRX()>1 then x=x+1 end
        local color=r.getBCol()
        if color then color=color-color_offset end
        fill(x,y,rx,ry," ",color,nil) --did not work because of gui.fill not working without layer and id
        if self.text then
            set(x,y,0,0,unicode.sub(self.text,1,rx),color,r.getFCol()) --check rx or rx+1?
        end
    end

    cleanText=function(x,y,rx,ry) --clean text by updating rect_full in that area
        update_r(x,y,rx,ry)
    end
    -------
    --function table, copy to your new shape and modify/expand if needed
    r.setClickEvent=function(f) self.clickEvent=f end
    r.clickEvent=function(x,y,button,user,test) if test then if self.clickEvent~=nil then return true end return false end local yt=r.getY() if r.getRY()>1 then yt=yt+1 end local xt=r.getX() if r.getRX()>1 then xt=xt+1 end g.setCursor(r.getX()+1,yt) g.setCursorBlink(true) self.text=g.read(nil,false,nil,self.password,r.getFCol(),r.getBCol()-color_offset)
    self.text=unicode.sub(self.text,1,unicode.len(self.text)-1) g.setCursorBlink(false) self.clickEvent(x,y,button,user,self.text) end
    r.removeClickEvent=function() self.clickEvent=nil end
    r.setText=function(text,...) cleanText() self.text=text:format(...) g.update(self.id) end
    r.getText=function() return self.text end
    r.password=function(b) if type(b)~="boolean" then return false,"parameter must be boolean" end if b then self.password='*' else self.password=nil end end
    r["cleanTextArea"]=cleanText
    r.update=update
    r.show=show
    --
    g.addObject(r,up,add) --adds pointer to object functions for interaction with GUI
    up=nil
    return r
end

return s


text:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Gracias por su registro</title>

Hola, <?php echo $usuario->nombre; ?>

        Estamos enviando este correo ya que segun nuestro registro se hizo una solicitud para realizar un cambio de contraseña.

Dirijace al siguiente link para realizar el cambio.

              <a href="<?php echo Yii::app()->getBaseUrl(true) .'/usuarios/CambioPassword?id='.$usuario->id_usuario.'&hash='.  sha1('PoliAuLinkServer');?>">Click aqui

    ¡PoliAuLink!

redpajama_set_name: RedPajamaGithub


text:
package Bio::Phylo::TreeBASE::Result::Software;

# Created by DBIx::Class::Schema::Loader
# DO NOT MODIFY THE FIRST PART OF THIS FILE

use strict;
use warnings;

use base 'DBIx::Class::Core';

=head1 NAME

Bio::Phylo::TreeBASE::Result::Software

=cut

__PACKAGE__->table("software");

=head1 ACCESSORS

=head2 software_id

  data_type: 'bigint'
  is_auto_increment: 1
  is_nullable: 0
  sequence: 'software_id_sequence'

=head2 version

  data_type: 'integer'
  is_nullable: 1

=head2 description

  data_type: 'varchar'
  is_nullable: 1
  size: 2000

=head2 name

  data_type: 'varchar'
  is_nullable: 1
  size: 255

=head2 softwareurl

  data_type: 'varchar'
  is_nullable: 1
  size: 500

=head2 softwareversion

  data_type: 'varchar'
  is_nullable: 1
  size: 255

=cut

__PACKAGE__->add_columns(
  "software_id",
  {
    data_type         => "bigint",
    is_auto_increment => 1,
    is_nullable       => 0,
    sequence          => "software_id_sequence",
  },
  "version",
  { data_type => "integer", is_nullable => 1 },
  "description",
  { data_type => "varchar", is_nullable => 1, size => 2000 },
  "name",
  { data_type => "varchar", is_nullable => 1, size => 255 },
  "softwareurl",
  { data_type => "varchar", is_nullable => 1, size => 500 },
  "softwareversion",
  { data_type => "varchar", is_nullable => 1, size => 255 },
);
__PACKAGE__->set_primary_key("software_id");

=head1 RELATIONS

=head2 analysissteps

Type: has_many

Related object: L<Bio::Phylo::TreeBASE::Result::Analysisstep>

=cut

__PACKAGE__->has_many(
  "analysissteps",
  "Bio::Phylo::TreeBASE::Result::Analysisstep",
  { "foreign.software_id" => "self.software_id" },
  { cascade_copy => 0, cascade_delete => 0 },
);

# Created by DBIx::Class::Schema::Loader v0.07002 @ 2010-11-13 19:19:22
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:SDQAfMInU8j59GqqBvOiNg

# You can replace this text with custom content, and it will be preserved on regeneration
1;


text:
$(function() {

  var FADE_TIME = 150; // ms
  var TYPING_TIMER_LENGTH = 800; // ms
  var COLORS = [
    '#006060', '#20603C', '#345A5E', '#003636',
    '#205D86', '#34385E', '#00202A', '#3D2F5B',
    '#4F5A65', '#634806', '#802200', '#550000'
  ];

  // Initialize variables
  var $window = $(window);
  var $usernameInput = $('.username-input'); // Input for username
  var $messages = $('.messages'); // Messages area
  var $inputMessage = $('.input-message'); // Input message input box

  var $loginPage = $('.login.page'); // The login page
  var $chatPage = $('.chat.page'); // The chatroom page

  // Prompt for setting a username
  var username;
  var connected = false;
  var typing = false;
  var lastTypingTime;
  var $currentInput = $usernameInput.focus();

  var socket = io();

  // Sets the client's username
  function setUsername () {
    username = cleanInput($usernameInput.val().trim());

    // If the username is valid
    if (username) {
      $loginPage.fadeOut();
      $chatPage.show();
      $loginPage.off('click');
      // Tell the server your username
      socket.emit('add user', username);
    } else {
      $('#screen-reader-events').text('Invalid user name, joining failed.');
      resetScreenReaderEvent();
    }
  }

  function resetScreenReaderEvent() {
    // Reset text after screenreaders noticed assertive new text (They will read the text until end)
    setTimeout(function resetEvent(){
      $('#screen-reader-events').text('');
    }, 250);
  }

  // Sends a chat message
  function sendMessage () {
    var message = $inputMessage.val();
    // Prevent markup from being injected into the message
    message = cleanInput(message);
    // if there is a non-empty message and a socket connection
    if (message && connected) {
      $inputMessage.val('');
      addChatMessage({
        username: username,
        message: message
      });
      // tell server to execute 'new message' and send along one parameter
      socket.emit('new message', message);
    }
  }

  // Log a message
  function log (message, options) {
    var $el = $('
').addClass('log').text(message);
    addMessageElement($el, options);
  }

  // Adds the visual chat message to the message list
  function addChatMessage (data, options) {

    // Don't fade the message in if there is an 'X was typing'
    var $typingMessages = getTypingMessages(data);
    options = options || {};

    if ($typingMessages.length !== 0) {
      options.fade = false;
      $typingMessages.remove();
    }

    var time = new Date();
    var displayedTime = time.getHours() + ":" + time.getMinutes();

    var $usernameDiv = $('').attr({
      'aria-hidden': 'true',
      class: 'username'
    }).html(data.username + ':')
      .css('color', getUsernameColor(data.username));

    var $messageBodyDiv = $('')
      .text(data.message);

    var $screenReader = $(''+data.username+': ' + data.message + '')

    var typingClass = data.typing ? 'typing' : '';

    var ariaLive = 'polite';
    if( data.username === username ) {

      ariaLive = 'off';
      $('#screen-reader-events').text('Message sent!');
      resetScreenReaderEvent();

    }
    var $messageDiv = $('
')
      .data('username', data.username)
      .addClass(typingClass)
      .append($usernameDiv, $messageBodyDiv);

    addMessageElement($messageDiv, options);

    setTimeout(function() {
      $messageDiv.append($screenReader);
    }, 250);

  }

  // Adds a message element to the messages and scrolls to the bottom
  // el - The element to add as a message
  // options.fade - If the element should fade-in (default = true)
  // options.prepend - If the element should prepend
  //   all other messages (default = false)
  function addMessageElement (el, options) {
    var $el = $(el);

    // Setup default options
    if (!options) {
      options = {};
    }
    if (typeof options.fade === 'undefined') {
      options.fade = true;
    }
    if (typeof options.prepend === 'undefined') {
      options.prepend = false;
    }

    // Apply options
    if (options.fade) {
      $el.hide().fadeIn(FADE_TIME);
    }
    if (options.prepend) {
      $messages.prepend($el);
    } else {
      $messages.append($el);
    }

    var chatHistory = document.getElementById("chat-history");
        chatHistory.scrollTop = chatHistory.scrollHeight;
  }

  // Prevents input from having injected markup
  function cleanInput (input) {
    return $('
').text(input).text();
  }

  // Updates the typing event
  function updateTyping () {
    if (connected) {
      if (!typing) {
        typing = true;
        socket.emit('typing');
      }
      lastTypingTime = (new Date()).getTime();

      setTimeout(function () {
        var typingTimer = (new Date()).getTime();
        var timeDiff = typingTimer - lastTypingTime;
        if (timeDiff >= TYPING_TIMER_LENGTH && typing) {
          socket.emit('stop typing');
          typing = false;
        }
      }, TYPING_TIMER_LENGTH);
    }
  }

  // Gets the 'X is typing' messages of a user
  function getTypingMessages (data) {
    return $('.typing.message').filter(function (i) {
      return $(this).data('username') === data.username;
    });
  }

  // Gets the color of a username through our hash function
  function getUsernameColor (username) {
    // Compute hash code
    var hash = 7;
    for (var i = 0; i < username.length; i++) {
       hash = username.charCodeAt(i) + (hash << 5) - hash;
    }
    // Calculate color
    var index = Math.abs(hash % COLORS.length);
    return COLORS[index];
  }

  // Keyboard events
  $window.keydown(function (event) {
    // Auto-focus the current input when a key is typed
    if (!(event.ctrlKey || event.metaKey || event.altKey)) {
      $currentInput.focus();
    }
    // When the client hits ENTER on their keyboard
    if (event.which === 13) {
      if (username) {
        sendMessage();
        socket.emit('stop typing');
        typing = false;
      } else {
        setUsername();
      }
    }
  });

  $inputMessage.on('input', function() {
    updateTyping();
  });

  $('#message-input-form').on('submit', function(event) {
    event.preventDefault();
    var e = jQuery.Event('keydown');
        e.which = 13;
        e.keyCode = 13;
    $window.trigger(e);
  });

  // Focus input when clicking anywhere on login page
  $loginPage.click(function () {
    $currentInput.focus();
  });

  // Focus input when clicking on the message input's border
  $inputMessage.click(function () {
    $inputMessage.focus();
  });

  // Socket events

  // Whenever the server emits 'login', log the login message
  socket.on('login', function (data) {
    connected = true;

    var message = '';

    if (data.numUsers === 1) {
      message += "You're the only participant. You will be receiving messages from a bot for demoing purposes.";
    } else {
      message += "There are " + data.numUsers + " participants. Occasionally a bot will send messages to chat, for demoing purposes.";
    }

    $('#participant-amount').text(message);
    setTimeout(function() {
      $('#welcome-message').focus();
    }, 250);

  });

  // Whenever the server emits 'new message', update the chat body
  socket.on('new message', function (data) {
    addChatMessage(data);
  });

  // Whenever the server emits 'user joined', log it in the chat body
  socket.on('user joined', function (data) {
    log(data.username + ' joined');
  });

  // Whenever the server emits 'user left', log it in the chat body
  socket.on('user left', function (data) {
    log(data.username + ' left');
  });

});


text:
<?php

namespace AppBundle\Controller;

use AppBundle\Entity\StressPage;
use AppBundle\Entity\StressPageSeriesOfTests;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\UrlType;

class StressController extends Controller
{
    /**
     *
     * @Route("/stresslista/", name="StressList" )
     */
    public function stress_lista()
    {
        $pages = $this->getDoctrine()->getRepository('AppBundle:StressPage')->findAll();
        return $this->render( 'lista_stress.html.twig', array(
            'pages' => $pages,
       ) );
    }

    /**
     *
     * @Route("/stresslista/dodaj/" , name="stressAdd")
     */
    public function add_page_stress(Request $request)
    {
        $form = $this->createFormBuilder()
            ->add('name', TextType::class, array('label' => 'Nazwa'))
            ->add('url', UrlType::class, array('label' => 'URL'))
            ->add('save', SubmitType::class, array('label' => 'Dodaj stronę'))
            ->getForm();

        $form->handleRequest($request);
        if ( $form->isSubmitted() ) {

            $stresspage = new StressPage(substr($form->getData()['url'],0,255),substr($form->getData()['name'],0,255));
            $em = $this->getDoctrine()->getManager();

            $em->persist($stresspage);
            $em->flush();
            $form = $this->createFormBuilder()
                ->add('name', TextType::class, array('label' => 'Nazwa'))
                ->add('url', UrlType::class, array('label' => 'URL'))
                ->add('save', SubmitType::class, array('label' => 'Dodaj stronę'))
                ->getForm();
            return $this->render( 'add_stress_page.html.twig', array(
                'form' => $form->createView(),
                'success'=> true,
            ) );
        }

        return $this->render( 'add_stress_page.html.twig', array(
            'form' => $form->createView(),
        ) );
    }

    /**
     *
     * @Route("/stresslista/{id}", name="stressView")
     */
    public function sstress_single($id)
    {
        $tests = $this->getDoctrine() ->getRepository('AppBundle:StressPageSeriesOfTests')->findBy(array('stresspage' => $id ));
        $view_tests = array();
        foreach($tests as $single_view_test)
        {
            $item['id'] = $single_view_test->getId();
            $item['date'] = date_format($single_view_test->getDate(), 'Y-m-d H:i');
            $view_tests[]= $item;
        }

        return $this->render( 'single_stress_page.html.twig', array(
            'id' => $id,
            'tests' => $view_tests,
        ) );
    }

    /**
     *
     * @Route("/stresslista/usun/{id}", name="stressDel")
     */
    public function del_stress_page($id)
    {

        $em = $this->getDoctrine()->getManager();
        $stresspage = $this->getDoctrine()
            ->getRepository('AppBundle:StressPage')
            ->find($id);
        if (!$stresspage) {
            return $this->render( 'lista_stress.html.twig', array(
                'pages' => $this->getDoctrine()->getRepository('AppBundle:StressPage')->findAll(),
                'show_modal_cant_delete' => true,
            ) );
        }

        $em->remove($stresspage);
        $em->flush();
        $pages = $this->getDoctrine()->getRepository('AppBundle:StressPage')->findAll();
        return $this->render( 'lista_stress.html.twig', array(
                 'pages' => $pages,
                'show_modal_deleted' => true,
                'this_page_id' => $id
        ) );
    }

    /**
     *
     * @Route("/stresslista/edytuj/{id}", name="stressEdit")
     */
    public function edit_stress_page(Request $request,$id)
    {

        $stresspage = $this->getDoctrine()
            ->getRepository('AppBundle:StressPage')
            ->find($id);

        $form = $this->createFormBuilder()
            ->add('name', TextType::class, array('label' => 'Nazwa','data'=> $stresspage->getName() ))
            ->add('url', UrlType::class, array('label' => 'URL','data'=> $stresspage->getUrl()))
            ->add('save', SubmitType::class, array('label' => 'Dodaj stronę'))
            ->getForm();

        $form->handleRequest($request);
        if ( $form->isSubmitted() ) {

            $stresspage->setName(substr($form->getData()['name'],0,255));
            $stresspage->setUrl(substr($form->getData()['url'],0,255));
            $em = $this->getDoctrine()->getManager();

            $em->persist($stresspage);
            $em->flush();

            $form = $this->createFormBuilder()
                ->add('name', TextType::class, array('label' => 'Nazwa','data'=> $stresspage->getName() ))
                ->add('url', UrlType::class, array('label' => 'URL','data'=> $stresspage->getUrl()))
                ->add('save', SubmitType::class, array('label' => 'Dodaj stronę'))
                ->getForm();

            return $this->render( 'edit_stress_page.html.twig', array(
                'form' => $form->createView(),
                'success'=> true,
            ) );
        }

        return $this->render( 'edit_stress_page.html.twig', array(
            'form' => $form->createView(),
        ) );

    }

}


text:
namespace ImageCaptureSample
{
   partial class DateTimeFormatOptions
   {
      /// <summary>
      /// Required designer variable.
      /// </summary>
      private System.ComponentModel.IContainer components = null;

      /// <summary>
      /// Clean up any resources being used.
      /// </summary>
      /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
      protected override void Dispose( bool disposing )
      {
         if ( disposing && ( components != null ) )
         {
            components.Dispose();
         }
         base.Dispose( disposing );
      }

      #region Windows Form Designer generated code

      /// <summary>
      /// Required method for Designer support - do not modify
      /// the contents of this method with the code editor.
      /// </summary>
      private void InitializeComponent()
      {
         this.OkBttn = new System.Windows.Forms.Button();
         this.CancelBttn = new System.Windows.Forms.Button();
         this.DateTimeOrderSelector = new System.Windows.Forms.ComboBox();
         this.WindowsTimeFormatChkBx = new System.Windows.Forms.CheckBox();
         this.WindowsDateFormatChkBx = new System.Windows.Forms.CheckBox();
         this.CustomDateTimeFormatChkBx = new System.Windows.Forms.CheckBox();
         this.CustomDateFormatTxtBx = new System.Windows.Forms.TextBox();
         this.CustomTimeFormatTxtBx = new System.Windows.Forms.TextBox();
         this.groupBox1 = new System.Windows.Forms.GroupBox();
         this.label5 = new System.Windows.Forms.Label();
         this.label6 = new System.Windows.Forms.Label();
         this.label4 = new System.Windows.Forms.Label();
         this.label3 = new System.Windows.Forms.Label();
         this.label2 = new System.Windows.Forms.Label();
         this.label1 = new System.Windows.Forms.Label();
         this.groupBox1.SuspendLayout();
         this.SuspendLayout();
         //
         // OkBttn
         //
         this.OkBttn.Location = new System.Drawing.Point(23, 282);
         this.OkBttn.Name = "OkBttn";
         this.OkBttn.Size = new System.Drawing.Size(75, 23);
         this.OkBttn.TabIndex = 56;
         this.OkBttn.Text = "Ok";
         this.OkBttn.UseVisualStyleBackColor = true;
         this.OkBttn.Click += new System.EventHandler(this.OkBttn_Click);
         //
         // CancelBttn
         //
         this.CancelBttn.Location = new System.Drawing.Point(183, 282);
         this.CancelBttn.Name = "CancelBttn";
         this.CancelBttn.Size = new System.Drawing.Size(75, 23);
         this.CancelBttn.TabIndex = 57;
         this.CancelBttn.Text = "Cancel";
         this.CancelBttn.UseVisualStyleBackColor = true;
         this.CancelBttn.Click += new System.EventHandler(this.CancelBttn_Click);
         //
         // DateTimeOrderSelector
         //
         this.DateTimeOrderSelector.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
         this.DateTimeOrderSelector.FormattingEnabled = true;
         this.DateTimeOrderSelector.Items.AddRange(new object[] {
            "Date only",
            "Time only",
            "Time then date",
            "Date then time"});
         this.DateTimeOrderSelector.Location = new System.Drawing.Point(12, 12);
         this.DateTimeOrderSelector.Name = "DateTimeOrderSelector";
         this.DateTimeOrderSelector.Size = new System.Drawing.Size(96, 21);
         this.DateTimeOrderSelector.TabIndex = 60;
         this.DateTimeOrderSelector.SelectedIndexChanged += new System.EventHandler(this.DateTimeOrderSelector_SelectedIndexChanged);
         //
         // WindowsTimeFormatChkBx
         //
         this.WindowsTimeFormatChkBx.AutoSize = true;
         this.WindowsTimeFormatChkBx.Enabled = false;
         this.WindowsTimeFormatChkBx.Location = new System.Drawing.Point(126, 12);
         this.WindowsTimeFormatChkBx.Name = "WindowsTimeFormatChkBx";
         this.WindowsTimeFormatChkBx.Size = new System.Drawing.Size(143, 17);
         this.WindowsTimeFormatChkBx.TabIndex = 61;
         this.WindowsTimeFormatChkBx.Text = "Use windows time format";
         this.WindowsTimeFormatChkBx.UseVisualStyleBackColor = true;
         //
         // WindowsDateFormatChkBx
         //
         this.WindowsDateFormatChkBx.AutoSize = true;
         this.WindowsDateFormatChkBx.Enabled = false;
         this.WindowsDateFormatChkBx.Location = new System.Drawing.Point(126, 35);
         this.WindowsDateFormatChkBx.Name = "WindowsDateFormatChkBx";
         this.WindowsDateFormatChkBx.Size = new System.Drawing.Size(145, 17);
         this.WindowsDateFormatChkBx.TabIndex = 62;
         this.WindowsDateFormatChkBx.Text = "Use windows date format";
         this.WindowsDateFormatChkBx.UseVisualStyleBackColor = true;
         //
         // CustomDateTimeFormatChkBx
         //
         this.CustomDateTimeFormatChkBx.AutoSize = true;
         this.CustomDateTimeFormatChkBx.Location = new System.Drawing.Point(9, 26);
         this.CustomDateTimeFormatChkBx.Name = "CustomDateTimeFormatChkBx";
         this.CustomDateTimeFormatChkBx.Size = new System.Drawing.Size(114, 17);
         this.CustomDateTimeFormatChkBx.TabIndex = 63;
         this.CustomDateTimeFormatChkBx.Text = "Use custom format";
         this.CustomDateTimeFormatChkBx.UseVisualStyleBackColor = true;
         this.CustomDateTimeFormatChkBx.CheckedChanged += new System.EventHandler(this.CustomDateTimeFormatChkBx_CheckedChanged);
         //
         // CustomDateFormatTxtBx
         //
         this.CustomDateFormatTxtBx.Location = new System.Drawing.Point(58, 55);
         this.CustomDateFormatTxtBx.MaxLength = 128;
         this.CustomDateFormatTxtBx.Name = "CustomDateFormatTxtBx";
         this.CustomDateFormatTxtBx.Size = new System.Drawing.Size(164, 20);
         this.CustomDateFormatTxtBx.TabIndex = 64;
         this.CustomDateFormatTxtBx.TabStop = false;
         this.CustomDateFormatTxtBx.WordWrap = false;
         //
         // CustomTimeFormatTxtBx
         //
         this.CustomTimeFormatTxtBx.Location = new System.Drawing.Point(58, 135);
         this.CustomTimeFormatTxtBx.MaxLength = 128;
         this.CustomTimeFormatTxtBx.Name = "CustomTimeFormatTxtBx";
         this.CustomTimeFormatTxtBx.Size = new System.Drawing.Size(164, 20);
         this.CustomTimeFormatTxtBx.TabIndex = 65;
         this.CustomTimeFormatTxtBx.TabStop = false;
         this.CustomTimeFormatTxtBx.WordWrap = false;
         //
         // groupBox1
         //
         this.groupBox1.Controls.Add(this.label5);
         this.groupBox1.Controls.Add(this.label6);
         this.groupBox1.Controls.Add(this.label4);
         this.groupBox1.Controls.Add(this.label3);
         this.groupBox1.Controls.Add(this.label2);
         this.groupBox1.Controls.Add(this.label1);
         this.groupBox1.Controls.Add(this.CustomTimeFormatTxtBx);
         this.groupBox1.Controls.Add(this.CustomDateFormatTxtBx);
         this.groupBox1.Controls.Add(this.CustomDateTimeFormatChkBx);
         this.groupBox1.Location = new System.Drawing.Point(14, 76);
         this.groupBox1.Name = "groupBox1";
         this.groupBox1.Size = new System.Drawing.Size(255, 187);
         this.groupBox1.TabIndex = 66;
         this.groupBox1.TabStop = false;
         this.groupBox1.Text = "Custom Date/Time";
         //
         // label5
         //
         this.label5.AutoSize = true;
         this.label5.Location = new System.Drawing.Point(94, 171);
         this.label5.Name = "label5";
         this.label5.Size = new System.Drawing.Size(79, 13);
         this.label5.TabIndex = 71;
         this.label5.Text = "Use: h:mm:ss tt";
         //
         // label6
         //
         this.label6.AutoSize = true;
         this.label6.Location = new System.Drawing.Point(57, 158);
         this.label6.Name = "label6";
         this.label6.Size = new System.Drawing.Size(129, 13);
         this.label6.TabIndex = 70;
         this.label6.Text = "Example for: 11:43:53 AM";
         //
         // label4
         //
         this.label4.AutoSize = true;
         this.label4.Location = new System.Drawing.Point(94, 91);
         this.label4.Name = "label4";
         this.label4.Size = new System.Drawing.Size(77, 13);
         this.label4.TabIndex = 69;
         this.label4.Text = "Use: M/d/yyyy";
         //
         // label3
         //
         this.label3.AutoSize = true;
         this.label3.Location = new System.Drawing.Point(57, 78);
         this.label3.Name = "label3";
         this.label3.Size = new System.Drawing.Size(126, 13);
         this.label3.TabIndex = 68;
         this.label3.Text = "Example for: 11/12/2014";
         //
         // label2
         //
         this.label2.AutoSize = true;
         this.label2.Location = new System.Drawing.Point(22, 138);
         this.label2.Name = "label2";
         this.label2.Size = new System.Drawing.Size(30, 13);
         this.label2.TabIndex = 67;
         this.label2.Text = "Time";
         //
         // label1
         //
         this.label1.AutoSize = true;
         this.label1.Location = new System.Drawing.Point(22, 58);
         this.label1.Name = "label1";
         this.label1.Size = new System.Drawing.Size(30, 13);
         this.label1.TabIndex = 66;
         this.label1.Text = "Date";
         //
         // DateTimeFormatOptions
         //
         this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
         this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
         this.ClientSize = new System.Drawing.Size(281, 327);
         this.Controls.Add(this.groupBox1);
         this.Controls.Add(this.WindowsDateFormatChkBx);
         this.Controls.Add(this.WindowsTimeFormatChkBx);
         this.Controls.Add(this.DateTimeOrderSelector);
         this.Controls.Add(this.CancelBttn);
         this.Controls.Add(this.OkBttn);
         this.Name = "DateTimeFormatOptions";
         this.Text = "DateTimeFormatOptions";
         this.groupBox1.ResumeLayout(false);
         this.groupBox1.PerformLayout();
         this.ResumeLayout(false);
         this.PerformLayout();

      }

      #endregion

      private System.Windows.Forms.Button OkBttn;
      private System.Windows.Forms.Button CancelBttn;
      private System.Windows.Forms.ComboBox DateTimeOrderSelector;
      private System.Windows.Forms.CheckBox WindowsTimeFormatChkBx;
      private System.Windows.Forms.CheckBox WindowsDateFormatChkBx;
      private System.Windows.Forms.CheckBox CustomDateTimeFormatChkBx;
      private System.Windows.Forms.TextBox CustomDateFormatTxtBx;
      private System.Windows.Forms.TextBox CustomTimeFormatTxtBx;
      private System.Windows.Forms.GroupBox groupBox1;
      private System.Windows.Forms.Label label5;
      private System.Windows.Forms.Label label6;
      private System.Windows.Forms.Label label4;
      private System.Windows.Forms.Label label3;
      private System.Windows.Forms.Label label2;
      private System.Windows.Forms.Label label1;
   }
}