_textforms.lua
上传用户:cccombo
上传日期:2021-01-31
资源大小:16445k
文件大小:6k
源码类别:

MySQL数据库

开发平台:

SQL

  1. SimpleForm = {}
  2. SimpleForm_mt = { __index = SimpleForm }
  3. SF_LEFT="left"
  4. SF_RIGHT="right"
  5. SF_CENTER="center"
  6. SFT_TEXT=0
  7. SFT_PASSWORD=1
  8. SFT_LIST=2
  9. SFT_NUMBER=3
  10. function SimpleForm:new()
  11.   local inst = {}
  12.   setmetatable(inst, SimpleForm_mt)
  13.   return inst
  14. end
  15. function SimpleForm:init(title, width)
  16.   self.title= title
  17.   self.width= width
  18.   self.form= nil
  19.   self.height= 1
  20.   self.objects= {}
  21.   self.buttons= {}
  22.   self.everything= {}
  23. end
  24. function SimpleForm:addSpace()
  25.   self.height= self.height+1
  26. end
  27. function SimpleForm:addLabel(text, align)
  28.   local label
  29.   local x
  30.   local y
  31.   local txtlen
  32.   y= self.height
  33.   self.height= self.height + 1
  34.   txtlen= string.len(text)
  35.   if align == SF_LEFT then
  36.     x= 1
  37.   elseif align == SF_RIGHT then
  38.     x= self.width-txtlen
  39.   else
  40.     x= (self.width-txtlen)/2
  41.   end
  42.   label= dlg.Label(x, y, text)
  43.   table.insert(self.everything, label)
  44. end
  45. function SimpleForm:addCheck(name, text)
  46.   local check
  47.   check= dlg.Checkbox(2, self.height, text, 0)
  48.   self.height= self.height+1
  49.   table.insert(self.everything, check)
  50.   self.objects[name]= {"check", check}
  51. end
  52. function SimpleForm:addEntries(forms)
  53.   local name, caption, defval, etype
  54.   local label, entry
  55.   local x, y
  56.   local leftWidth= 0
  57.   local txtlen
  58.   local row, _
  59.   for _, row in forms do
  60.     caption= row[2]
  61.     if string.len(caption) > leftWidth then
  62.       leftWidth= string.len(caption)
  63.     end
  64.   end
  65.   for _, row in forms do
  66.     name= row[1]
  67.     caption= row[2]
  68.     defval= row[3]
  69.     etype= row[4]
  70.     y= self.height
  71.     self.height= self.height+1
  72.     label= dlg.Label(1+leftWidth-string.len(caption), y, caption)
  73.     if etype == SFT_TEXT then
  74.       entry= dlg.Entry(leftWidth+1, y, self.width-leftWidth-2*1, defval, 0, 0)
  75.       self.objects[name]= {"entry", entry}
  76.     elseif etype == SFT_NUMBER then
  77.       entry= dlg.Entry(leftWidth+1, y, 5, defval, 0, 0)
  78.       self.objects[name]= {"entry", entry}
  79.     elseif etype == SFT_PASSWORD then
  80.       entry= dlg.Entry(leftWidth+1, y, self.width-leftWidth-2*1, defval, 0, 1)
  81.       self.objects[name]= {"entry", entry}
  82.     elseif etype == SFT_LIST then
  83.       local item
  84.       entry= dlg.Listbox(leftWidth+1, y, 1, 1, 1)
  85.       for _, item in defval do
  86.         entry:addItem(item)
  87.       end
  88.       self.objects[name]= {"listbox", entry}
  89.     end
  90.     table.insert(self.everything, label)
  91.     table.insert(self.everything, entry)
  92.   end
  93. end
  94. function SimpleForm:addListbox(name, options, visibleRows)
  95.   local lbox
  96.   local i
  97.   local option
  98.   lbox= dlg.Listbox(2, self.height, visibleRows, 1, 1)
  99.   lbox:setWidth(self.width - 4)
  100.   self.height= self.height + visibleRows
  101.   for i, option in options do
  102.     lbox:addItem(option)
  103.   end
  104.   self.objects[name]= {"listbox", lbox}
  105.   table.insert(self.everything, lbox)
  106. end
  107. function SimpleForm:addCheckList(name, options, visibleRows)
  108.   local lbox
  109.   local i
  110.   local option
  111.   local oplist
  112.   lbox= dlg.CheckboxTree(2, self.height, visibleRows, 1)
  113.   lbox:setWidth(self.width - 4)
  114.   self.height= self.height + visibleRows
  115.   oplist= {}
  116.   for i, option in options do
  117.     local id= lbox:addItem(option[1], {}, option[2])
  118.     table.insert(oplist, {option[3], id})
  119.   end
  120.   self.objects[name]= {"checklist", lbox, oplist}
  121.   table.insert(self.everything, lbox)
  122. end
  123. function SimpleForm:addTreeView(options, visibleRows)
  124.   local lbox
  125.   local i, j, opti, optj
  126.   lbox= dlg.CheckboxTree(2, self.height, visibleRows, 1, 1, 1)
  127.   lbox:setWidth(self.width-4)
  128.   for i, opti in options do
  129.     lbox:addItem(opti[1], {dlg.ARG_APPEND}, 0)
  130.     for j, optj in opti[2] do
  131.       lbox:addItem(optj, {i-1, dlg.ARG_APPEND}, 0)
  132.     end
  133.   end
  134.   table.insert(self.everything, lbox)
  135.   self.height= self.height + visibleRows
  136. end
  137. function SimpleForm:addCheckTree(name, options, visibleRows)
  138.   local lbox
  139.   local i, j, opti, optj
  140.   local itemlist= {}
  141.   lbox= dlg.CheckboxTree(2, self.height, visibleRows, 1, 0, 0)
  142.   lbox:setWidth(self.width-4)
  143.   for i, opti in options do
  144.     lbox:addItem(opti[1], {dlg.ARG_APPEND}, 0)
  145.     for j, optj in opti[2] do
  146.       local id= lbox:addItem(optj[1], {i-1, dlg.ARG_APPEND}, 0)
  147.       table.insert(itemlist, {optj[2], id})
  148.     end
  149.   end
  150.   table.insert(self.everything, lbox)
  151.   self.height= self.height + visibleRows
  152.   self.objects[name]= {"checktree", lbox, itemlist}
  153. end
  154. function SimpleForm:addWidget(w)
  155.   table.insert(self.everything, w)
  156. end
  157. function SimpleForm:setButtons(lbuttons, rbuttons)
  158.   local name, caption
  159.   local width, b
  160.   local button
  161.   local x, y, _
  162.   y= self.height
  163.   self.height= self.height + 4
  164.   x= 1
  165.   for _, b in lbuttons do
  166.     name= b[1]
  167.     caption= b[2]
  168.     button= dlg.Button(x, y, caption)
  169.     self.buttons[name]= button
  170.     table.insert(self.everything, button)
  171.     x= x+string.len(caption)+5
  172.   end
  173.   x= self.width
  174.   for _, b in rbuttons do
  175.     x=x - (string.len(b[2])+5)
  176.   end
  177.   for _, b in rbuttons do
  178.     name= b[1]
  179.     caption= b[2]
  180.     button= dlg.Button(x, y, caption)
  181.     x= x+(string.len(caption)+5)
  182.     self.buttons[name]= button
  183.     table.insert(self.everything, button)
  184.   end
  185. end
  186. function SimpleForm:getValue(name)
  187.   local w= self.objects[name]
  188.   if w[1] == "listbox" then
  189.     return w[2]:getCurrent()
  190.   elseif w[1] == "entry" then
  191.     return w[2].entryValue
  192.   elseif w[1] == "check" then
  193.     return w[2].checkboxValue      
  194.   elseif (w[1] == "checklist") or (w[1]=="checktree") then
  195.     local oplist= w[3]
  196.     local tree=w[2]
  197.     local i
  198.     local sel= {}
  199.     for i=1,table.getn(oplist) do
  200.       if tree:getEntryValue(oplist[i][2])[2] == 1 then
  201.         table.insert(sel, oplist[i][1])
  202.       end
  203.     end
  204.     return sel
  205.   else
  206.     return nil
  207.   end
  208. end
  209. function SimpleForm:setHelpLine(help)
  210.   self.helpline= help
  211. end
  212. function SimpleForm:run(dontPopDown)
  213.   local w, _
  214.   dlg.centeredWindow(self.width, self.height, self.title)
  215.   self.form= dlg.Form()
  216.   for _, w in self.everything do
  217.     self.form:add(w)
  218.   end
  219.   result= self.form:run()
  220.   if not(dontPopDown) then
  221.     dlg.popWindow()
  222.   end
  223.   for name, button in self.buttons do
  224.     if button:matchId(result[2])==1 then
  225.       return name
  226.     end
  227.   end
  228.   return nil
  229. end
  230. function SimpleForm:pop()
  231.   dlg.popWindow()
  232. end