السلام عليكم ورحمة الله وبركاتة .. 
أنا واجهتني مشكلة بـ الفري روم ولا لقيت حل لها 
 
بملف gui.lua 
سطر 442 
 
g_gridListContents = {}   -- info about binded gridlists  g_openedWindows = {}      -- {window1table = true, window2table = true, ...}     GRIDLIST_UPDATE_CHUNK_SIZE = 10     classInfo = {      wnd = {className = 'Window', padding = {25, 10, 10, 10}, isContainer = true},      tbp = {className = 'TabPanel'},      tab = {className = 'Tab', padding = 10, isContainer = true},      lbl = {className = 'Label', height = 20},      btn = {className = 'Button', height = 20, padding = {0, 4}},      chk = {className = 'CheckBox', height = 20, padding = {0, 6}},      rad = {className = 'RadioButton', height = 20, padding = {0, 10}},      txt = {className = 'Edit', width=100, height = 24},      lst = {className = 'GridList', width = 250, height = 400},      img = {className = 'StaticImage'}  }     function getTextWidth(text)      return 8*text:len()  end     function createWindow(wnd, rebuild)      if wnd.element then          if rebuild then              destroyElement(wnd.element)          else              guiSetVisible(wnd.element, true)              guiBringToFront(wnd.element)              g_openedWindows[wnd] = true              if wnd.oncreate then                  wnd.oncreate()              end              return          end      end            _planWindow(wnd)      _buildWindow(wnd)  end     function _planWindow(wnd, baseWnd, parentWnd, x, y, maxHeightInLine)      -- simulate building a window to get the proper height      local wndClass = wnd[1]            if not maxHeightInLine then          maxHeightInLine = LINE_HEIGHT      end            local text, padding, parentPadding      if wndClass ~= 'br' then          padding = classInfo[wndClass].padding          if type(padding) == 'number' then              padding = table.rep(padding, 4)              classInfo[wndClass].padding = padding          elseif type(padding) == 'table' then              if #padding == 1 then                  padding = table.rep(padding[1], 4)                  classInfo[wndClass].padding = padding              elseif #padding == 2 then                  padding = table.flatten(table.rep(padding, 2))                  classInfo[wndClass].padding = padding              elseif #padding == 3 then                  table.insert(padding, padding[2])                  classInfo[wndClass].padding = padding              end          elseif not padding then              padding = table.rep(0, 4)              classInfo[wndClass].padding = padding          end                    text = wnd.text or wnd.id or ''          if not wnd.width then              wnd.width = (classInfo[wndClass].width or getTextWidth(text)) +                  (not classInfo[wndClass].isContainer and (padding[2] + padding[4]) or 0)          end          if not wnd.height and not classInfo[wndClass].isContainer then              wnd.height = (classInfo[wndClass].height or LINE_HEIGHT) + padding[1] + padding[3]          end      end      parentPadding = parentWnd and classInfo[parentWnd[1]].padding            if wndClass == 'br' or (not classInfo[wndClass].isContainer and x + wnd.width > parentWnd.width - parentPadding[2]) then          -- line wrap          x = parentPadding[4]          y = y + maxHeightInLine + LINE_MARGIN             maxHeightInLine = LINE_HEIGHT          if wndClass == 'br' then              return nil, x, y, maxHeightInLine          end      end      if not wnd.x then          wnd.x = x      end      if not wnd.y then          wnd.y = y      end      wnd.parent = parentWnd            if wnd.controls then          local childX, childY = padding[4], padding[1]          local childMaxHeightInLine = LINE_HEIGHT          local control          for id, controlwnd in pairs(wnd.controls) do              control, childX, childY, childMaxHeightInLine = _planWindow(controlwnd, baseWnd or wnd, wnd, childX, childY, childMaxHeightInLine)          end          if classInfo[wndClass].isContainer then              wnd.height = childY + childMaxHeightInLine + padding[3]          end      end            if wnd.tabs then          local maxTabHeight = 0          for id, tab in pairs(wnd.tabs) do              tab[1] = 'tab'              tab.width = wnd.width              _planWindow(tab, baseWnd, wnd)              if tab.height > maxTabHeight then                  maxTabHeight = tab.height              end          end          wnd.height = maxTabHeight      end            if classInfo[wndClass].isContainer then          return elem      else          if wnd.height > maxHeightInLine then              maxHeightInLine = wnd.height          end          return elem, x + wnd.width + CONTROL_MARGIN_RIGHT, y, maxHeightInLine      end  end     function _buildWindow(wnd, baseWnd, parentWnd)      local wndClass = wnd[1]      if wndClass == 'br' then          return      end            local relX, relY, relWidth, relHeight      if parentWnd then          if wnd.x and wnd.y then              relX = wnd.x/parentWnd.width              relY = wnd.y/parentWnd.height          end          relWidth = wnd.width / parentWnd.width          relHeight = wnd.height / parentWnd.height      end            local elem      if wndClass == 'wnd' then          local screenWidth, screenHeight = guiGetScreenSize()          if not wnd.x then              wnd.x = screenWidth/2 - wnd.width/2          else              local i, f = math.modf(wnd.x)              if f ~= 0 then                  wnd.x = screenWidth * wnd.x              end              if wnd.x < 0 then                  wnd.x = screenWidth - math.abs(wnd.x) - wnd.width              end          end          if not wnd.y then              wnd.y = screenHeight/2 - wnd.height/2          else              local i, f = math.modf(wnd.y)              if f ~= 0 then                  wnd.y = screenHeight * wnd.y              end              if wnd.y < 0 then                  wnd.y = screenHeight - math.abs(wnd.y) - wnd.height              end          end          elem = guiCreateWindow(wnd.x, wnd.y, wnd.width, wnd.height, wnd.text, false)          guiWindowSetSizable(elem, false)          guiBringToFront(elem)          g_openedWindows[wnd] = true      elseif wndClass == 'chk' then          elem = guiCreateCheckBox(relX, relY, relWidth, relHeight, wnd.text or wnd.id or '', false, true, parentWnd.element)      elseif wndClass == 'tbp' then          elem = guiCreateTabPanel(relX, relY, relWidth, relHeight, true, parentWnd.element)      elseif wndClass == 'tab' then          elem = guiCreateTab(text, parentWnd.element)      elseif wndClass == 'lst' then          elem = guiCreateGridList(relX, relY, relWidth, relHeight, true, parentWnd.element)          if wnd.columns then              guiGridListSetSortingEnabled(elem, false)              for i, column in ipairs(wnd.columns) do                  guiGridListAddColumn(elem, column.text or column.attr or '', column.width or 0.9)              end          end      elseif wndClass == 'img' then          elem = guiCreateStaticImage(relX, relY, relWidth, relHeight, wnd.src or '', true, parentWnd.element)      else          elem = _G['guiCreate' .. classInfo[wndClass].className](relX, relY, relWidth, relHeight, wnd.text or wnd.id or '', true, parentWnd.element)          if wnd.align and wndClass == 'lbl' then              guiLabelSetHorizontalAlign(elem, wnd.align, true)          end      end      wnd.element = elem            if wnd.controls then          for id, controlwnd in pairs(wnd.controls) do              _buildWindow(controlwnd, baseWnd or wnd, wnd)          end      end         if wnd.tabs then          for id, tab in pairs(wnd.tabs) do              _buildWindow(tab, baseWnd, wnd)          end      end            if wnd.rows then          if wnd.rows.xml then              -- get rows from xml              bindGridListToTable(wnd, not gridListHasCache(wnd) and xmlToTable(wnd.rows.xml, wnd.rows.attrs) or false,                  wnd.expandlastlevel or wnd.expandlastlevel == nil)          else              -- rows hardcoded in window definition              bindGridListToTable(wnd, not gridListHasCache(wnd) and wnd.rows or false, false)          end      end            local clickhandler = nil      if wnd.onclick then          if wndClass == 'img' then              clickhandler = function(btn, state, x, y)                  local imgX, imgY = getControlScreenPos(wnd)                  wnd.onclick((x - imgX)/wnd.width, (y - imgY)/wnd.height, btn)              end          else              clickhandler = function() wnd.onclick() end          end      elseif wnd.window then          clickhandler = function() toggleWindow(wnd.window) end      elseif wnd.inputbox then          clickhandler = function()              wndInput = {                  'wnd',                  width = 170,                  height = 60,                  controls = {                      {'txt', id='input', text='', width=60},                      {'btn', id='ok', onclick=function() wnd.inputbox.callback(getControlText(wndInput, 'input')) closeWindow(wndInput) end},                      {'btn', id='cancel', closeswindow=true}                  }              }