Advertisement
Jousway

wxlua Time Clock.wx.lua

Jan 28th, 2016
222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 8.32 KB | None | 0 0
  1. --Created by Jousway
  2. --Version 1.4-r
  3.  
  4. xpmdata = {
  5. "32 32 15 1 ",
  6. "  c black",
  7. ". c #121315",
  8. "X c #25262B",
  9. "o c #545861",
  10. "O c #575B65",
  11. "+ c red",
  12. "@ c #00FF18",
  13. "# c #FFC468",
  14. "$ c #717683",
  15. "% c #767B89",
  16. "& c #787D8B",
  17. "* c #8E94A5",
  18. "= c #A3AABD",
  19. "- c #A5ACBF",
  20. "; c None",
  21. ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
  22. ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
  23. ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
  24. ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
  25. ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
  26. ";;;;;;;;;;;;#######;;;;;;;;;;;;;",
  27. ";;;;;;;;;;;;#     #;;;;;;;;;;;;;",
  28. ";;;;;;;;;;;;#######;;;;;;;;;;;;;",
  29. ";;;;;;;;;;;;#     #;;;;;;;;;;;;;",
  30. ";;;;;;;;;;;;#######;;;;;;;;;;;;;",
  31. ";;;;;;;;;;;;#     #;;;;;;;;;;;;;",
  32. ";;;;;;;;;;;;#######;;;;;;;;;;;;;",
  33. ";;;;;;;;;--@-------+--;;;;;;;;;;",
  34. ";;;;;;;;;-------------;;;;;;;;;;",
  35. ";;;;;;;;;--         --;;;;;;;;;;",
  36. ";;;;;;;;;-------------;;;;;;;;;;",
  37. ";;;;;;;;;---*X%=%X*---;;;;;;;;;;",
  38. ";;;;;;;;;--&$-- --$&--;;;;;;;;;;",
  39. ";;;;;;;;;--O--- ---O--;;;;;;;;;;",
  40. ";;;;;;;;;-o---- ----o-;;;;;;;;;;",
  41. ";;;;;;;;;-.---- ----.-;;;;;;;;;;",
  42. ";;;;;;;;;-.----   --.-;;;;;;;;;;",
  43. ";;;;;;;;;-o---------o-;;;;;;;;;;",
  44. ";;;;;;;;;--O-------O--;;;;;;;;;;",
  45. ";;;;;;;;;--&$-----$&--;;;;;;;;;;",
  46. ";;;;;;;;;---*X%=%X*---;;;;;;;;;;",
  47. ";;;;;;;;;-------------;;;;;;;;;;",
  48. ";;;;;;;;;-------------;;;;;;;;;;",
  49. ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
  50. ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
  51. ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
  52. ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
  53. };
  54.  
  55.  
  56.  
  57.  
  58. -- Load the wxLua module, does nothing if running from wxLua, wxLuaFreeze, or wxLuaEdit
  59. package.cpath = package.cpath..";./?.dll;./?.so;../lib/?.so;../lib/vc_dll/?.dll;../lib/bcc_dll/?.dll;../lib/mingw_dll/?.dll;"
  60. require("wx")
  61.  
  62.  
  63. --users
  64. username = {}
  65. userfile = io.open("Name.txt", "r");
  66. userread = userfile:read("*a")
  67. userread:gsub("%w+", function(c) table.insert(username,c) end);
  68. userfile:close();
  69.  
  70. --language file
  71. language = {}
  72. langfile = io.open("Lang.ini", "r")
  73. langread = langfile:read("*a")
  74. langread:gsub("=(.-)\n", function(c) table.insert(language,c) end);
  75. langfile:close();
  76.  
  77.  
  78.  
  79. frame = wx.wxFrame( wx.NULL,              -- no parent needed for toplevel windows
  80. wx.wxID_ANY,        -- don't need a wxWindow ID
  81. "wxLua Time Clock",  -- caption on the frame
  82. wx.wxDefaultPosition, -- let system place the frame
  83. wx.wxSize(0, 0),  -- set the size of the frame
  84. wx.wxDEFAULT_FRAME_STYLE-wx.wxMINIMIZE_BOX-wx.wxMAXIMIZE_BOX ) -- use default frame styles
  85.  
  86. bitmap = wx.wxBitmap(xpmdata)
  87. icon = wx.wxIcon()
  88. icon:CopyFromBitmap(bitmap)
  89. frame:SetIcon(icon)
  90. bitmap:delete()
  91. icon:delete()
  92.  
  93. frame:SetVirtualSize(9999,9999)
  94. --create tables
  95. ID = {}
  96. ID2 = {}
  97. previousTime = {}
  98. timeDifference = {}
  99. button = {}
  100. button2 = {}
  101. atime = {}
  102. attime = {}
  103. ttime = {}
  104. btime = {}
  105. bttime = {}
  106.  
  107. --seconds to clock function
  108. function SecondsToClock(seconds)
  109.   local seconds = tonumber(seconds)
  110.  
  111.   if seconds <= 0 then
  112.     return "00:00:00";
  113.   else
  114.     hours = string.format("%02.f", math.floor(seconds/3600));
  115.     mins = string.format("%02.f", math.floor(seconds/60 - (hours*60)));
  116.     secs = string.format("%02.f", math.floor(seconds - hours*3600 - mins *60));
  117.     return hours..":"..mins..":"..secs
  118.   end
  119. end
  120.  
  121. if #username > 10 then
  122.     scrollsize = 2 + (#username * 0.70);
  123. else
  124.     scrollsize = #username;
  125. end
  126.  
  127. --main body
  128. sizerTop = wx.wxBoxSizer(wx.wxHORIZONTAL)
  129. scrollwin = wx.wxScrolledWindow(frame, 1337, wx.wxDefaultPosition, wx.wxSize(700, 460))
  130. scrollwin:SetScrollbars(0, 50, 0, scrollsize, 0, 0, false)
  131. flexGridSizer  = wx.wxFlexGridSizer( 0, 6, 0, 0 )
  132. flexGridSizer:AddGrowableCol(1, 0)
  133.  
  134. fieldname = wx.wxTextCtrl(scrollwin, wx.wxID_ANY, language[1])
  135. checkin = wx.wxTextCtrl(scrollwin, wx.wxID_ANY, language[2])
  136. checkout = wx.wxTextCtrl(scrollwin, wx.wxID_ANY, language[3])
  137. timecheckedin = wx.wxTextCtrl(scrollwin, wx.wxID_ANY, language[4])
  138. timeactive = wx.wxTextCtrl(scrollwin, wx.wxID_ANY, language[5])
  139. timecheckedout = wx.wxTextCtrl(scrollwin, wx.wxID_ANY, language[6])
  140. fieldname:SetEditable(false)
  141. checkin:SetEditable(false)
  142. checkout:SetEditable(false)
  143. timecheckedin:SetEditable(false)
  144. timeactive:SetEditable(false)
  145. timecheckedout:SetEditable(false)
  146.  
  147.  
  148. flexGridSizer:Add(fieldname, 1, wx.wxGROW + wx.wxALL, 6)
  149. flexGridSizer:Add(checkin, 1, wx.wxGROW + wx.wxALL, 6)
  150. flexGridSizer:Add(checkout, 1, wx.wxGROW + wx.wxALL, 6)
  151. flexGridSizer:Add(timecheckedin, 1, wx.wxGROW + wx.wxALL, 6)
  152. flexGridSizer:Add(timeactive, 1, wx.wxGROW + wx.wxALL, 6)
  153. flexGridSizer:Add(timecheckedout, 1, wx.wxGROW + wx.wxALL, 6)
  154.  
  155.  
  156. for i = 1,#username do
  157.     ID[i] = 100+i
  158.     ID2[i] = 200+i
  159.     timeDifference[i] = language[7]
  160.     bttime[i] = ""
  161.     attime[i] = ""
  162.     name = wx.wxTextCtrl(scrollwin, wx.wxID_ANY, username[i]);
  163.     button[i] = wx.wxButton(scrollwin, ID[i], language[2])
  164.     button2[i] = wx.wxButton(scrollwin, ID2[i], language[3])
  165.     atime[i] = wx.wxTextCtrl(scrollwin, wx.wxID_ANY, language[8]);
  166.     ttime[i] = wx.wxTextCtrl(scrollwin, wx.wxID_ANY, language[8]);
  167.     btime[i] = wx.wxTextCtrl(scrollwin, wx.wxID_ANY, language[9]);
  168.     name:SetEditable(false)
  169.     atime[i]:SetEditable(false)
  170.     ttime[i]:SetEditable(false)
  171.     btime[i]:SetEditable(false)
  172.    
  173.     flexGridSizer:Add(name, 1, wx.wxGROW + wx.wxALL, 6)
  174.     flexGridSizer:Add(button[i], 1, wx.wxGROW + wx.wxALL, 6)
  175.     flexGridSizer:Add(button2[i], 1, wx.wxGROW + wx.wxALL, 6)
  176.     flexGridSizer:Add(atime[i], 1, wx.wxGROW + wx.wxALL, 6)
  177.     flexGridSizer:Add(ttime[i], 1, wx.wxGROW + wx.wxALL, 6)
  178.     flexGridSizer:Add(btime[i], 1, wx.wxGROW + wx.wxALL, 6)
  179. end
  180.  
  181. export = wx.wxButton(scrollwin, 10001, language[10])
  182. flexGridSizer:Add(export, 1, wx.wxGROW + wx.wxALL, 6)
  183.  
  184. --any button press
  185. frame:Connect(wx.wxID_ANY, wx.wxEVT_COMMAND_BUTTON_CLICKED,
  186.     function(event)
  187.         for i = 1,#username do
  188.             if event:GetId() == ID[i] then
  189.                 previousTime[i] = os.time()
  190.                 attime[i] = os.date()
  191.                 atime[i]:SetValue(tostring(attime[i]))
  192.                 ttime[i]:SetValue(tostring(language[5]))
  193.             elseif event:GetId() == ID2[i] then
  194.                 if previousTime[i] ~= nil then
  195.                     timeDifference[i] = SecondsToClock(os.time() - previousTime[i])
  196.                     ttime[i]:SetValue(timeDifference[i])
  197.                     bttime[i] = os.date()
  198.                     btime[i]:SetValue(tostring(bttime[i]))
  199.                 else
  200.                     ttime[i]:SetValue(language[2])
  201.                 end
  202.             elseif event:GetId() == 10001 then
  203.             Export(timeDifference,attime,bttime)
  204.             end
  205.         end
  206.     end)
  207.    
  208. --export
  209. function Export(timeDifference,attime,bttime)
  210.     ex = [[<?xml version="1.0"?>
  211. <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
  212.  xmlns:o="urn:schemas-microsoft-com:office:office"
  213.  xmlns:x="urn:schemas-microsoft-com:office:excel"
  214.  xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
  215.  xmlns:html="http://www.w3.org/TR/REC-html40">
  216.  <Worksheet ss:Name="Checker">
  217.   <Table>  
  218.    <Column ss:Width="60"/>
  219.    <Column ss:Width="92"/>
  220.    <Column ss:Width="74"/>
  221.    <Column ss:Width="92"/>
  222.    <Column ss:Width="60"/>
  223.    <Row>
  224.     <Cell><Data ss:Type="String">Naam</Data></Cell>
  225.     <Cell><Data ss:Type="String">Tijd In Gechecked</Data></Cell>
  226.     <Cell><Data ss:Type="String">Tijd Actief</Data></Cell>
  227.     <Cell><Data ss:Type="String">Tijd Uit Gechecked</Data></Cell>
  228.    </Row>]]
  229.     for i = 1,#username do
  230.         ex = ex .."\n"..[[   <Row>]].."\n"..
  231.             [[    <Cell><Data ss:Type="String">]]..username[i]..[[</Data></Cell>]].."\n"..
  232.             [[    <Cell><Data ss:Type="String">]]..attime[i]..[[</Data></Cell>]].."\n"..
  233.             [[    <Cell><Data ss:Type="String">]]..timeDifference[i]..[[</Data></Cell>]].."\n"..
  234.             [[    <Cell><Data ss:Type="String">]]..bttime[i]..[[</Data></Cell>]].."\n"..
  235.             [[   </Row>]].."\n"
  236.     end
  237.    
  238.     ex = ex .."\n"..[[  </Table>
  239.  </Worksheet>
  240. </Workbook>]]
  241.     filestring = os.date("%Y-%m-%d %H-%M-%S")
  242.     file = io.open("Priklok "..filestring..".xls", "w")
  243.     file:write(ex)
  244.     file:close()
  245.  
  246. end
  247.  
  248. sizerTop:Add( flexGridSizer,  0, wx.wxGROW+wx.wxALIGN_CENTER+wx.wxALL, 5 )
  249. --frame:SetAutoLayout(true)
  250. frame:SetSizer(sizerTop)
  251. frame:SetMinSize(wx.wxSize(716, 500));
  252. frame:SetMaxSize(wx.wxSize(716, 500));
  253. frame:SetSize(wx.wxSize(716, 500))
  254.  
  255. --sizerTop:SetSizeHints(scrollwin)
  256.  
  257. -- Start the application
  258. wx.wxGetApp():SetTopWindow(frame)
  259. frame:Show(true)
  260.  
  261. -- Call wx.wxGetApp():MainLoop() last to start the wxWidgets event loop,
  262. -- otherwise the wxLua program will exit immediately.
  263. -- Does nothing if running from wxLua, wxLuaFreeze, or wxLuaEdit since the
  264. -- MainLoop is already running or will be started by the C++ program.
  265. wx.wxGetApp():MainLoop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement