mirror of
				https://github.com/kepler155c/opus
				synced 2025-10-31 07:33:00 +00:00 
			
		
		
		
	resizing now works properly
This commit is contained in:
		
							
								
								
									
										413
									
								
								sys/apis/ui.lua
									
									
									
									
									
								
							
							
						
						
									
										413
									
								
								sys/apis/ui.lua
									
									
									
									
									
								
							| @@ -86,6 +86,7 @@ function Manager:init(args) | ||||
|       -- kinda makes sense | ||||
|       if self.currentPage.parent.device.side == side then | ||||
|         self.currentPage.parent:resize() | ||||
|  | ||||
|         self.currentPage:resize() | ||||
|         self.currentPage:draw() | ||||
|         self.currentPage:sync() | ||||
| @@ -556,32 +557,35 @@ function UI.Window:initChildren() | ||||
|   end | ||||
| end | ||||
|  | ||||
| -- bad name... should be called something like postInit | ||||
| -- normally used to determine sizes since the parent is | ||||
| -- only known at this point | ||||
| function UI.Window:setParent() | ||||
|   self.oh, self.ow = self.height, self.width | ||||
|  | ||||
|   if self.rx then | ||||
|     if self.rx > 0 then | ||||
|       self.x = self.rx | ||||
|     else | ||||
|       self.x = self.parent.width + self.rx | ||||
|     end | ||||
|   end | ||||
|   if self.ry then | ||||
|     if self.ry > 0 then | ||||
|       self.y = self.ry | ||||
|     else | ||||
|       self.y = self.parent.height + self.ry | ||||
| local function setSize(self) | ||||
|   if self.x < 0 then | ||||
|     self.x = self.parent.width + self.x + 1 | ||||
|   end | ||||
|   if self.y < 0 then | ||||
|     self.y = self.parent.height + self.y + 1 | ||||
|   end | ||||
|  | ||||
|   if self.rex then | ||||
|     self.width = self.parent.width - self.x + self.rex + 2 | ||||
|   if self.ex then | ||||
|     local ex = self.ex | ||||
|     if self.ex <= 1 then | ||||
|       ex = self.parent.width + self.ex + 1 | ||||
|     end | ||||
|     if self.width then | ||||
|       self.x = ex - self.width + 1 | ||||
|     else | ||||
|       self.width = ex - self.x + 1 | ||||
|     end | ||||
|   end | ||||
|   if self.ey then | ||||
|     local ey = self.ey | ||||
|     if self.ey <= 1 then | ||||
|       ey = self.parent.height + self.ey + 1 | ||||
|     end | ||||
|     if self.height then | ||||
|       self.y = ey - self.height + 1 | ||||
|     else | ||||
|       self.height = ey - self.y + 1 | ||||
|     end | ||||
|   if self.rey then | ||||
|     self.height = self.parent.height - self.y + self.rey + 2 | ||||
|   end | ||||
|  | ||||
|   if not self.width then | ||||
| @@ -590,6 +594,16 @@ function UI.Window:setParent() | ||||
|   if not self.height then | ||||
|     self.height = self.parent.height - self.y + 1 | ||||
|   end | ||||
| end | ||||
|  | ||||
| -- bad name... should be called something like postInit | ||||
| -- normally used to determine sizes since the parent is | ||||
| -- only known at this point | ||||
| function UI.Window:setParent() | ||||
|   self.oh, self.ow = self.height, self.width | ||||
|   self.ox, self.oy = self.x, self.y | ||||
|  | ||||
|   setSize(self) | ||||
|  | ||||
|   self:initChildren() | ||||
| end | ||||
| @@ -632,32 +646,12 @@ end | ||||
|  | ||||
| function UI.Window:resize() | ||||
|  | ||||
|   if self.rx then | ||||
|     if self.rx > 0 then | ||||
|       self.x = self.rx | ||||
|     else | ||||
|       self.x = self.parent.width + self.rx | ||||
|     end | ||||
|   end | ||||
|   if self.ry then | ||||
|     if self.ry > 0 then | ||||
|       self.y = self.ry | ||||
|     else | ||||
|       self.y = self.parent.height + self.ry | ||||
|     end | ||||
|   end | ||||
|   self.height = self.oh | ||||
|   self.width = self.ow | ||||
|   self.x = self.ox | ||||
|   self.y = self.oy | ||||
|  | ||||
|   if self.rex then | ||||
|     self.width = self.parent.width - self.x + self.rex + 2 | ||||
|   elseif not self.ow and self.parent then | ||||
|     self.width = self.parent.width - self.x + 1 | ||||
|   end | ||||
|  | ||||
|   if self.rey then | ||||
|     self.height = self.parent.height - self.y + self.rey + 2 | ||||
|   elseif not self.oh and self.parent then | ||||
|     self.height = self.parent.height - self.y + 1 | ||||
|   end | ||||
|   setSize(self) | ||||
|  | ||||
|   if self.children then | ||||
|     for _,child in ipairs(self.children) do | ||||
| @@ -906,6 +900,28 @@ function Canvas:init(args) | ||||
|   end | ||||
| end | ||||
|  | ||||
| function Canvas:resize(w, h) | ||||
|   for i = self.height, h do | ||||
|     self.lines[i] = { } | ||||
|   end | ||||
|  | ||||
|   while #self.lines > h do | ||||
|     table.remove(self.lines, #self.lines) | ||||
|   end | ||||
|  | ||||
|   if w ~= self.width then | ||||
|     for i = 1, self.height do | ||||
|       self.lines[i] = { } | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   self.ex = self.x + w - 1 | ||||
|   self.ey = self.y + h - 1 | ||||
|  | ||||
|   self.width = w | ||||
|   self.height = h | ||||
| end | ||||
|  | ||||
| function Canvas:colorToPaintColor(c) | ||||
|   if self.isColor then | ||||
|     return mapColorToPaint[c] | ||||
| @@ -1226,8 +1242,10 @@ end | ||||
|  | ||||
| function UI.Device:resize() | ||||
|   self.width, self.height = self.device.getSize() | ||||
|   self.lines = { } -- TODO -- resize canvas | ||||
|   UI.Window.resize(self) | ||||
|   self.lines = { } | ||||
|   self.canvas:resize(self.width, self.height) | ||||
|   self.canvas:clear(self.backgroundColor, self.textColor) | ||||
|   --UI.Window.resize(self) | ||||
| end | ||||
|  | ||||
| function UI.Device:setCursorPos(x, y) | ||||
| @@ -1348,7 +1366,7 @@ function UI.StringBuffer:init(bufSize) | ||||
| end | ||||
|  | ||||
| function UI.StringBuffer:insert(s, width) | ||||
|   local len = #tostring(s) | ||||
|   local len = #tostring(s or '') | ||||
|   if len > width then | ||||
|     s = s:sub(1, width) | ||||
|   end | ||||
| @@ -1557,9 +1575,10 @@ function UI.Grid:init(args) | ||||
|   local defaults = UI:getDefaults(UI.Grid, args) | ||||
|   UI.Window.init(self, defaults) | ||||
|  | ||||
|   for _,h in pairs(self.columns) do | ||||
|     if not h.heading then | ||||
|       h.heading = '' | ||||
|   for _,c in pairs(self.columns) do | ||||
|     c.cw = c.width | ||||
|     if not c.heading then | ||||
|       c.heading = '' | ||||
|     end | ||||
|   end | ||||
| end | ||||
| @@ -1585,41 +1604,77 @@ function UI.Grid:resize() | ||||
|   else | ||||
|     self.pageSize = self.height - 1 | ||||
|   end | ||||
|   self:adjustWidth() | ||||
| end | ||||
|  | ||||
| function UI.Grid:adjustWidth() | ||||
|   if self.autospace then | ||||
|     for _,col in pairs(self.columns) do | ||||
|       col.width = #col.heading | ||||
|  | ||||
|   local t = { }        -- cols without width | ||||
|   local w = self.width - #self.columns - 1 -- width remaing | ||||
|  | ||||
|   for _,c in pairs(self.columns) do | ||||
|     if c.width then | ||||
|       c.cw = c.width | ||||
|       w = w - c.cw | ||||
|     else | ||||
|       table.insert(t, c) | ||||
|     end | ||||
|   end | ||||
|  | ||||
|     for _,col in pairs(self.columns) do | ||||
|   if #t == 0 then | ||||
|     return | ||||
|   end | ||||
|  | ||||
|   if #t == 1 then | ||||
|     t[1].cw = #(t[1].heading or '') | ||||
|     t[1].cw = math.max(t[1].cw, w) | ||||
|     return | ||||
|   end | ||||
|  | ||||
|   if not self.autospace then | ||||
|     for k,c in ipairs(t) do | ||||
|       c.cw = math.floor(w / (#t - k + 1)) | ||||
|       w = w - c.cw | ||||
|     end | ||||
|  | ||||
|   else | ||||
|     for k,c in ipairs(t) do | ||||
|       c.cw = #(t[1].heading or '') | ||||
|       w = w - c.cw | ||||
|     end | ||||
|     -- adjust the size to the length of the value | ||||
|     for key,row in pairs(self.values) do | ||||
|       row = self:getDisplayValues(row, key) | ||||
|       for _,col in pairs(t) do | ||||
|         local value = row[col.key] | ||||
|         if value then | ||||
|           value = tostring(value) | ||||
|           if #value > col.width then | ||||
|             col.width = #value | ||||
|           if #value > col.cw then | ||||
|             w = w + col.cw | ||||
|             col.cw = math.min(#value, w) | ||||
|             w = w - col.cw | ||||
|             if w <= 0 then | ||||
|               break | ||||
|             end | ||||
|           end | ||||
|         end | ||||
|       end | ||||
|       if w <= 0 then | ||||
|         break | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     local colswidth = 1 | ||||
|     for _,c in pairs(self.columns) do | ||||
|       colswidth = colswidth + c.width | ||||
|     -- last column does not get padding (right alignment) | ||||
|     if not self.columns[#self.columns].width then | ||||
|       Util.removeByValue(t, self.columns[#self.columns]) | ||||
|     end | ||||
|  | ||||
|     local spacing = (self.width - 1 - colswidth)  | ||||
|     if spacing > 0 then | ||||
|       local left = self.width - 1 | ||||
|       for k,c in pairs(self.columns) do | ||||
|         local totalSpacing = left - colswidth | ||||
|         local space = totalSpacing / (#self.columns - k + 1) | ||||
|         colswidth = colswidth - c.width | ||||
|         c.width = c.width + math.floor(space) | ||||
|         left = left - c.width | ||||
|     -- got some extra room - add some padding | ||||
|     if w > 0 then | ||||
|       for k,c in ipairs(t) do | ||||
|         local padding = math.floor(w / (#t - k + 1)) | ||||
|         c.cw = c.cw + padding | ||||
|         w = w - padding | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| @@ -1721,7 +1776,7 @@ function UI.Grid:drawHeadings() | ||||
|         ind = self.sortIndicator | ||||
|       end | ||||
|     end | ||||
|     sb:insert(ind .. col.heading, col.width + 1) | ||||
|     sb:insert(ind .. col.heading, col.cw + 1) | ||||
|   end | ||||
|   self:write(1, 1, sb:get(), self.headerBackgroundColor, self.headerTextColor) | ||||
| end | ||||
| @@ -1760,7 +1815,7 @@ function UI.Grid:drawRows() | ||||
|     end | ||||
|  | ||||
|     for _,col in pairs(self.columns) do | ||||
|       sb:insert(ind .. safeValue(row[col.key] or ''), col.width + 1) | ||||
|       sb:insert(ind .. safeValue(row[col.key] or ''), col.cw + 1) | ||||
|       ind = ' ' | ||||
|     end | ||||
|  | ||||
| @@ -1853,7 +1908,7 @@ function UI.Grid:eventHandler(event) | ||||
|       if event.y == 1 then | ||||
|         local col = 2 | ||||
|         for _,c in ipairs(self.columns) do | ||||
|           if event.x < col + c.width then | ||||
|           if event.x < col + c.cw then | ||||
|             if self.sortColumn == c.key then | ||||
|               self:setInverseSort(not self.inverseSort) | ||||
|             else | ||||
| @@ -1863,7 +1918,7 @@ function UI.Grid:eventHandler(event) | ||||
|             self:draw() | ||||
|             break | ||||
|           end | ||||
|           col = col + c.width + 1 | ||||
|           col = col + c.cw + 1 | ||||
|         end | ||||
|         return true | ||||
|       end | ||||
| @@ -2405,8 +2460,8 @@ function UI.Tabs:setParent() | ||||
|  | ||||
|   for _,child in pairs(self.children) do | ||||
|     if child ~= self.tabBar then | ||||
|       child.y = 2 | ||||
|       child.height = self.height - 1 | ||||
|       child.oy = 2 | ||||
|       --child.height = self.height - 1 | ||||
|       child:resize() | ||||
|     end | ||||
|   end | ||||
| @@ -2641,152 +2696,66 @@ function UI.Throttle:update() | ||||
|   end | ||||
| end | ||||
|  | ||||
| --[[-- GridLayout --]]-- | ||||
| UI.GridLayout = class(UI.Window) | ||||
| UI.GridLayout.defaults = { | ||||
|   UIElement = 'GridLayout', | ||||
|   x = 1, | ||||
|   y = 1, | ||||
|   textColor = colors.white, | ||||
|   backgroundColor = colors.black, | ||||
|   values = { }, | ||||
|   columns = { }, | ||||
| } | ||||
| function UI.GridLayout:init(args) | ||||
|   local defaults = UI:getDefaults(UI.GridLayout, args) | ||||
|   UI.Window.init(self, defaults) | ||||
| end | ||||
|  | ||||
| function UI.GridLayout:setParent() | ||||
|   UI.Window.setParent(self) | ||||
|   self:adjustWidth() | ||||
| end | ||||
|  | ||||
| function UI.GridLayout:adjustWidth() | ||||
|   if not self.width then | ||||
|     self.width = self:calculateWidth() | ||||
|   end | ||||
|   if self.autospace then | ||||
|     local width | ||||
|     for _,col in pairs(self.columns) do | ||||
|       width = 1 | ||||
|       for _,row in pairs(self.values) do | ||||
|         local value = row[col[2]] | ||||
|         if value then | ||||
|           value = tostring(value) | ||||
|           if #value > width then | ||||
|             width = #value | ||||
|           end | ||||
|         end | ||||
|       end | ||||
|       col[3] = width | ||||
|     end | ||||
|  | ||||
|     local colswidth = 0 | ||||
|     for _,c in pairs(self.columns) do | ||||
|       colswidth = colswidth + c[3] + 1 | ||||
|     end | ||||
|  | ||||
|     local spacing = (self.width - colswidth - 1)  | ||||
|     if spacing > 0 then | ||||
|       spacing = math.floor(spacing / (#self.columns - 1) ) | ||||
|       for _,c in pairs(self.columns) do | ||||
|         c[3] = c[3] + spacing | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| end | ||||
|  | ||||
| function UI.GridLayout:calculateWidth() | ||||
|   -- gutters on each side | ||||
|   local width = 2 | ||||
|   for _,col in pairs(self.columns) do | ||||
|     width = width + col[3] + 1 | ||||
|   end | ||||
|   return width - 1 | ||||
| end | ||||
|  | ||||
| function UI.GridLayout:drawRow(row, y) | ||||
|   local sb = UI.StringBuffer(self.width) | ||||
|   for _,col in pairs(self.columns) do | ||||
|     local value = row[col[2]] | ||||
|     sb:insert(' ' .. (value or ''), col[3] + 1) | ||||
|   end | ||||
|  | ||||
|   local selected = index == self.index and self.selectable | ||||
|   if selected then | ||||
|     self:setSelected(row) | ||||
|   end | ||||
|  | ||||
|   self:write(1, y, sb:get()) | ||||
| end | ||||
|  | ||||
| function UI.GridLayout:draw() | ||||
|  | ||||
|   local size = #self.values | ||||
|   local startRow = self:getStartRow() | ||||
|   local endRow = startRow + self.height - 1 | ||||
|   if endRow > size then | ||||
|     endRow = size | ||||
|   end | ||||
|  | ||||
|   for i = startRow, endRow do | ||||
|     self:drawRow(self.values[i], i) | ||||
|   end | ||||
|  | ||||
|   if endRow - startRow < self.height - 1 then | ||||
|     self:clearArea(1, endRow, self.width, self.height - endRow) | ||||
|   end | ||||
| end | ||||
|  | ||||
| function UI.GridLayout:getStartRow() | ||||
|   return 1 | ||||
| end | ||||
|  | ||||
| --[[-- StatusBar --]]-- | ||||
| UI.StatusBar = class(UI.GridLayout) | ||||
| UI.StatusBar = class(UI.Window) | ||||
| UI.StatusBar.defaults = { | ||||
|   UIElement = 'StatusBar', | ||||
|   backgroundColor = colors.lightGray, | ||||
|   textColor = colors.gray, | ||||
|   columns = { | ||||
|     { '', 'status', 10 }, | ||||
|   }, | ||||
|   values = { }, | ||||
|   status = { status = '' }, | ||||
|   height = 1, | ||||
|   ey = -1, | ||||
| } | ||||
| function UI.StatusBar:init(args) | ||||
|   local defaults = UI:getDefaults(UI.StatusBar, args) | ||||
|   UI.GridLayout.init(self, defaults) | ||||
|   self:setStatus(self.status, true) | ||||
|   UI.Window.init(self, defaults) | ||||
| end | ||||
|  | ||||
| function UI.StatusBar:adjustWidth() | ||||
|   -- Can only have 1 adjustable width | ||||
|   if self.columns then | ||||
|     local w = self.width - #self.columns - 1 | ||||
|     for _,c in pairs(self.columns) do | ||||
|       if c.width then | ||||
|         c.cw = c.width  -- computed width | ||||
|         w = w - c.width | ||||
|       end | ||||
|     end | ||||
|     for _,c in pairs(self.columns) do | ||||
|       if not c.width then | ||||
|         c.cw = w | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| end | ||||
|  | ||||
| function UI.StatusBar:resize() | ||||
|   UI.Window.resize(self) | ||||
|   self:adjustWidth() | ||||
| end | ||||
|  | ||||
| function UI.StatusBar:setParent() | ||||
|   UI.GridLayout.setParent(self) | ||||
|   self.y = self.height | ||||
|   self.height = 1 | ||||
|   if #self.columns == 1 then | ||||
|     self.columns[1][3] = self.width | ||||
|   end | ||||
|   UI.Window.setParent(self) | ||||
|   self:adjustWidth() | ||||
| end | ||||
|  | ||||
| function UI.StatusBar:setStatus(status, noDraw) | ||||
|   if type(status) == 'string' then | ||||
|     self.values[1] = { status = status } | ||||
|   else | ||||
|     self.values[1] = status | ||||
|   end | ||||
|   if not noDraw then | ||||
| function UI.StatusBar:setStatus(status) | ||||
|   if self.values ~= status then | ||||
|     self.values = status | ||||
|     self:draw() | ||||
|   end | ||||
| end | ||||
|  | ||||
| function UI.StatusBar:setValue(name, value) | ||||
|   self.status[name] = value | ||||
|   if not self.values then | ||||
|     self.values = { } | ||||
|   end | ||||
|   self.values[name] = value | ||||
| end | ||||
|  | ||||
| function UI.StatusBar:getValue(name) | ||||
|   return self.status[name] | ||||
|   if self.values then | ||||
|     return self.values[name] | ||||
|   end | ||||
| end | ||||
|  | ||||
| function UI.StatusBar:timedStatus(status, timeout) | ||||
| @@ -2801,22 +2770,36 @@ function UI.StatusBar:timedStatus(status, timeout) | ||||
| end | ||||
|  | ||||
| function UI.StatusBar:getColumnWidth(name) | ||||
|   for _,v in pairs(self.columns) do | ||||
|     if v[2] == name then | ||||
|       return v[3] | ||||
|   for _,c in pairs(self.columns) do | ||||
|     if c.key == name then | ||||
|       return c.cw | ||||
|     end | ||||
|   end | ||||
| end | ||||
|  | ||||
| function UI.StatusBar:setColumnWidth(name, width) | ||||
|   for _,v in pairs(self.columns) do | ||||
|     if v[2] == name then | ||||
|       v[3] = width | ||||
|   for _,c in pairs(self.columns) do | ||||
|     if c.key == name then | ||||
|       c.cw = width | ||||
|       break | ||||
|     end | ||||
|   end | ||||
| end | ||||
|  | ||||
| function UI.StatusBar:draw() | ||||
|   if not self.values then | ||||
|     self:clear() | ||||
|   elseif type(self.values) == 'string' then | ||||
|     self:write(1, 1, Util.widthify(' ' .. self.values, self.width)) | ||||
|   else | ||||
|     local s = '' | ||||
|     for _,c in ipairs(self.columns) do | ||||
|       s = s .. ' ' .. Util.widthify(tostring(self.values[c.key] or ''), c.cw) | ||||
|     end | ||||
|     self:write(1, 1, Util.widthify(s, self.width)) | ||||
|   end | ||||
| end | ||||
|  | ||||
| --[[-- ProgressBar --]]-- | ||||
| UI.ProgressBar = class(UI.Window) | ||||
| UI.ProgressBar.defaults = { | ||||
| @@ -2902,7 +2885,7 @@ function UI.Button:init(args) | ||||
| end | ||||
|  | ||||
| function UI.Button:setParent() | ||||
|   if not self.width then | ||||
|   if not self.width and not self.ex then | ||||
|     self.width = #self.text + 2 | ||||
|   end | ||||
|   UI.Window.setParent(self) | ||||
| @@ -3140,7 +3123,7 @@ function UI.Chooser:init(args) | ||||
| end | ||||
|  | ||||
| function UI.Chooser:setParent() | ||||
|   if not self.width then | ||||
|   if not self.width and not self.ex then | ||||
|     self.width = 1 | ||||
|     for _,v in pairs(self.choices) do | ||||
|       if #v.name > self.width then | ||||
| @@ -3218,7 +3201,7 @@ function UI.Text:init(args) | ||||
| end | ||||
|  | ||||
| function UI.Text:setParent() | ||||
|   if not self.width then | ||||
|   if not self.width and not self.ex then | ||||
|     self.width = #tostring(self.value) | ||||
|   end | ||||
|   UI.Window.setParent(self) | ||||
| @@ -3284,8 +3267,8 @@ function UI.Form:createForm() | ||||
|       if child.formKey then | ||||
|         child.x = self.labelWidth + self.margin - 1 | ||||
|         child.y = y | ||||
|         if not child.width and not child.rex then | ||||
|           child.rex = -self.margin | ||||
|         if not child.width and not child.ex then | ||||
|           child.ex = -self.margin | ||||
|         end | ||||
|         child.value = self.values[child.formKey] or '' | ||||
|       end | ||||
| @@ -3305,12 +3288,12 @@ function UI.Form:createForm() | ||||
|   end | ||||
|  | ||||
|   table.insert(self.children, UI.Button { | ||||
|     ry = -self.margin + 1, rx = -12 - self.margin + 1, | ||||
|     y = -self.margin, x = -12 - self.margin, | ||||
|     text = 'Ok', | ||||
|     event = 'form_ok', | ||||
|   }) | ||||
|   table.insert(self.children, UI.Button { | ||||
|     ry = -self.margin + 1, rx = -7 - self.margin + 1, | ||||
|     y = -self.margin, x = -7 - self.margin, | ||||
|     text = 'Cancel', | ||||
|     event = 'form_cancel', | ||||
|   }) | ||||
|   | ||||
| @@ -28,16 +28,16 @@ return function(args) | ||||
|     grid = UI.ScrollingGrid { | ||||
|       x  =  2, | ||||
|       y  =  2, | ||||
|       rex = -2, | ||||
|       rey = -4, | ||||
|       ex = -2, | ||||
|       ey = -4, | ||||
|       path = '', | ||||
|       sortColumn = 'name', | ||||
|       columns = columns, | ||||
|     }, | ||||
|     path = UI.TextEntry { | ||||
|       x  =  2, | ||||
|       ry = -1, | ||||
|       rex = -11, | ||||
|       y  = -2, | ||||
|       ex = -11, | ||||
|       limit = 256, | ||||
|       accelerators = { | ||||
|         enter = 'path_enter', | ||||
| @@ -45,8 +45,8 @@ return function(args) | ||||
|     }, | ||||
|     cancel = UI.Button { | ||||
|       text = 'Cancel', | ||||
|       rx = -8, | ||||
|       ry = -1, | ||||
|       x = -9, | ||||
|       y = -2, | ||||
|       event = 'cancel', | ||||
|     }, | ||||
|   } | ||||
|   | ||||
| @@ -71,19 +71,17 @@ local Browser = UI.Page { | ||||
|   }, | ||||
|   grid = UI.ScrollingGrid { | ||||
|     columns = {  | ||||
|       { heading = 'Name', key = 'name',  width = UI.term.width-11 }, | ||||
|       { heading = 'Name', key = 'name'             }, | ||||
|       {                   key = 'flags', width = 2 }, | ||||
|       { heading = 'Size', key = 'fsize', width = 6 }, | ||||
|     }, | ||||
|     sortColumn = 'name', | ||||
|     y = 2, | ||||
|     height = UI.term.height-2, | ||||
|     y = 2, ey = -2, | ||||
|   }, | ||||
|   statusBar = UI.StatusBar { | ||||
|     columns = {  | ||||
|       { '',       'status',    UI.term.width - 8 }, | ||||
|       --{ '',       'info',      10                 }, | ||||
|       { 'Size: ', 'totalSize', 8                  }, | ||||
|       { key = 'status'               }, | ||||
|       { key = 'totalSize', width = 6 }, | ||||
|     }, | ||||
|   }, | ||||
|   accelerators = { | ||||
|   | ||||
| @@ -127,7 +127,8 @@ function UI.VerticalTabBar:init(args) | ||||
|   UI.TabBar.init(self, args) | ||||
|   self.x = 1 | ||||
|   self.width = 8 | ||||
|   self.rey = -1 | ||||
|   self.height = nil | ||||
|   self.ey = -1 | ||||
|   for k,c in pairs(self.children) do | ||||
|     c.x = 1 | ||||
|     c.y = k + 1 | ||||
|   | ||||
| @@ -20,7 +20,7 @@ local systemPage = UI.Page { | ||||
|     pathTab = UI.Window { | ||||
|       tabTitle = 'Path', | ||||
|       entry = UI.TextEntry { | ||||
|         x = 2, y = 2, rex = -2, | ||||
|         x = 2, y = 2, ex = -2, | ||||
|         limit = 256, | ||||
|         value = shell.path(), | ||||
|         shadowText = 'enter system path', | ||||
| @@ -40,12 +40,12 @@ local systemPage = UI.Page { | ||||
|     aliasTab = UI.Window { | ||||
|       tabTitle = 'Aliases', | ||||
|       alias = UI.TextEntry { | ||||
|         x = 2, y = 2, rex = -2,  | ||||
|         x = 2, y = 2, ex = -2,  | ||||
|         limit = 32, | ||||
|         shadowText = 'Alias', | ||||
|       }, | ||||
|       path = UI.TextEntry { | ||||
|         y = 3, x = 2, rex = -2, | ||||
|         y = 3, x = 2, ex = -2, | ||||
|         limit = 256, | ||||
|         shadowText = 'Program path', | ||||
|         accelerators = { | ||||
| @@ -74,7 +74,7 @@ local systemPage = UI.Page { | ||||
|         value = 'Label' | ||||
|       }, | ||||
|       label = UI.TextEntry { | ||||
|         x = 9, y = 2, rex = -4, | ||||
|         x = 9, y = 2, ex = -4, | ||||
|         limit = 32, | ||||
|         value = os.getComputerLabel(), | ||||
|         accelerators = { | ||||
|   | ||||
| @@ -17,7 +17,7 @@ local page = UI.Page { | ||||
|   grid = UI.ScrollingGrid { | ||||
|     y = 2, | ||||
|     columns = { | ||||
|       { heading = 'ID',     key = 'tabId'     }, | ||||
|       { heading = 'ID',     key = 'tabId',    width = 4 }, | ||||
|       { heading = 'Title',  key = 'title'     }, | ||||
|       { heading = 'Status', key = 'status'    }, | ||||
|       { heading = 'Time',   key = 'timestamp' }, | ||||
|   | ||||
| @@ -34,6 +34,11 @@ local _tabId = 0 | ||||
| local overviewTab | ||||
| local runningTab | ||||
| local tabsDirty = false | ||||
| local closeInd = '*' | ||||
|  | ||||
| if Util.getVersion() >= 1.79 then | ||||
|   closeInd = '\215' | ||||
| end | ||||
|  | ||||
| local config = { | ||||
|   standard = { | ||||
| @@ -114,7 +119,7 @@ local function draw() | ||||
|     parentTerm.setTextColor(_colors.focusTextColor) | ||||
|     parentTerm.setBackgroundColor(_colors.backgroundColor) | ||||
|     parentTerm.setCursorPos( w, 1 ) | ||||
|     parentTerm.write('\215') | ||||
|     parentTerm.write(closeInd) | ||||
|   end | ||||
|  | ||||
|   if currentTab then | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 kepler155c@gmail.com
					kepler155c@gmail.com