Search FAQ

Gammon Forum

Notice: Any messages purporting to come from this site telling you that your password has expired, or that you need to verify your details, confirm your email, resolve issues, making threats, or asking for money, are spam. We do not email users with any such messages. If you have lost your password you can obtain a new one by using the password reset link.
 Entire forum ➜ MUSHclient ➜ Plugins ➜ Plugin to show an activity bar in a miniwindow

Plugin to show an activity bar in a miniwindow

Posting of new messages is disabled at present.

Refresh page


Posted by Nick Gammon   Australia  (23,122 posts)  Bio   Forum Administrator
Date Tue 17 Feb 2009 09:16 PM (UTC)

Amended on Tue 17 Feb 2009 11:04 PM (UTC) by Nick Gammon

Message
There have been a few requests for a world activity bar that shows more than 10 worlds at once.

The plugin below achieves that. It uses the new miniwindow concept to make a miniwindow on the top RH corner, which shows an indefinite number of worlds (see screenshots in next post).

Since, to be useful, you would need to see this window in each world, you will find it easiest to make this a "global" plugin. To do that, go to File -> Global Preferences -> Plugins and click on Add to make it a plugin that is loaded into all worlds.

The plugin illustrates a number of useful concepts for plugin-writers:


  • Making a miniwindow that resizes depending on how much needs to be shown.

  • Drawing "buttons" manually.

  • Handling mouse-down and mouse-over events to both do something useful, and show a different button style when activated.

  • Finding a list of open worlds.

  • Finding the status of other worlds.


Below is the plugin.

Save between the lines as World_Activity_Bar.xml and use File menu -> Global Preferences -> Plugins to load that file as a global plugin.

You can also download it by right-clicking on the link below and choosing "save file as", and saving into the worlds -> plugins folder:

http://www.gammon.com.au/mushclient/plugins/World_Activity_Bar.xml



<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE muclient>

<muclient>
<plugin
   name="World_Activity_Bar"
   author="Nick Gammon"
   id="e597e8ceafc1f17c0ab8db01"
   language="Lua"
   purpose="Shows an activity bar"
   date_written="2009-02-18 09:00"
   requires="4.37"
   version="1.0"
   >
   
<description trim="y">
<![CDATA[
Install this plugin to show an activity bar which shows
more than 10 worlds.

Click on a number to activate that world.

Hover over a number to show the world name.
]]>
</description>

</plugin>

<!--  Timers  -->

<timers>
  <timer name="draw_bar" 
         script="draw_bar" 
         enabled="y" 
         second="1.00" 
         active_closed="y" >

  </timer>
</timers>


<!--  Script  -->


<script>
<![CDATA[

win = GetPluginID ()  -- get a unique name

-- configuration

BACKGROUND_COLOUR = ColourNameToRGB "bisque"
BOX_COLOUR = ColourNameToRGB "royalblue"
BUTTON_FILL = ColourNameToRGB "white"
BUTTON_FILL_CLICK = ColourNameToRGB "darkgray"
BUTTON_FILL_MOUSEOVER = ColourNameToRGB "lemonchiffon"
BUTTON_EDGE = ColourNameToRGB "silver"
ACTIVE_COLOUR = ColourNameToRGB "red"
ACTIVE_BLINK_COLOUR = ColourNameToRGB "mediumslateblue"
INACTIVE_COLOUR = ColourNameToRGB "black"
NOT_CONNECTED_COLOUR = ColourNameToRGB "rosybrown"

FONT_NAME = "Fixedsys"
FONT_SIZE = 9

-- where to put the window
WINDOW_POSITION = 6  -- top right
OFFSET = 5  -- gap inside box
EDGE_WIDTH = 2 -- size of border stroke

--[[
Useful positions:

4 = top left
5 = center left-right at top
6 = top right
7 = on right, center top-bottom
8 = on right, at bottom
9 = center left-right at bottom
--]]

local mouse_down_id = nil
local mouse_over_id = nil

function mouseover (flags, hotspot_id)
  mouse_over_id = hotspot_id
  draw_bar ()
end -- mouseover

function cancelmouseover (flags, hotspot_id)
  mouse_over_id = nil
  draw_bar ()
end -- cancelmouseover

function mousedown (flags, hotspot_id)
  mouse_down_id = hotspot_id
  draw_bar ()
end -- mousedown

function cancelmousedown (flags, hotspot_id)
  mouse_down_id = nil
  draw_bar ()
end -- cancelmousedown

function mouseup (flags, hotspot_id)
  mouse_down_id = nil
  draw_bar ()
  if GetWorldID () ~= hotspot_id then
    local w = GetWorldById (hotspot_id)
    if w then
      w:Activate ()
    end -- if world exists 
  end -- if
  
end -- mouseup

local old_world_list = {}

-- draw the bar here
function draw_bar (name)

 local max_width = 0
 
 world_list = GetWorldIdList ()

 --[[
 
   Hotspots do not react well if you remove them during a mouse-click.
   Thus, we will only recreate the window, and recreate the hotspots
   if we absolutely have to. That is, if the number of worlds has changed,
   or the world IDs in the list has changed.
 
 --]]
 
 local list_changed = #old_world_list ~= #world_list
 
 -- number of worlds are the same, but are the IDs the same?
 if not list_changed then
   for i = 1, #old_world_list do
     if #world_list [i] ~= #old_world_list [i] then
       list_changed = true
       break
     end -- if
   end -- if
 end -- if
 
 -- work out widest number 
 for i = 1, #world_list do
   max_width = math.max (max_width, WindowTextWidth (win, "f", string.format ("%i", i)))
 end --  for each world
   
 -- height depends on the number of worlds
 local gauge_height = #world_list * (font_height + OFFSET)
 
 -- make  window if we need to
 if list_changed then
   -- make the miniwindow
   WindowCreate (win, 
               0, 0,   -- left, top (auto-positions)
               max_width + (OFFSET * 2),     -- width
               gauge_height + OFFSET,  -- height
               WINDOW_POSITION,       -- auto-position: bottom left
               0,  -- flags
               BACKGROUND_COLOUR) 
  end -- if world list has changed
                
  -- draw the numbers
 
  -- draw each world button
  for count, id in ipairs (world_list) do
   local text = string.format ("%i", count)
   local number_width = WindowTextWidth (win, "f", text)
   local left = (max_width - number_width) / 2 + OFFSET -- center 
   local top = (count - 1) * (font_height + OFFSET) + OFFSET
   local colour = INACTIVE_COLOUR
   local w = GetWorldById (id)
   local world_name = w:GetInfo (2)
   local new_lines = w:GetInfo (202)
   local connected = w:GetInfo (227) == 8
  
   -- fill with BUTTON_FILL, unless we have moused-over or moused-down in it
   local fill_colour = BUTTON_FILL
   
   if id == mouse_down_id then
     fill_colour = BUTTON_FILL_CLICK
   elseif id == mouse_over_id then
     fill_colour = BUTTON_FILL_MOUSEOVER
   end -- if
   
   -- draw the button (round rectangle)
   WindowCircleOp (win, 3, EDGE_WIDTH, top, - EDGE_WIDTH, top + font_height, 
                    BUTTON_EDGE, 6, 1, fill_colour, 0, 2, 2) 
   
   -- text colour depends on world's status
   if new_lines > 0 then
     if os.time () % 2 == 1 then
       colour = ACTIVE_COLOUR
     else
       colour = ACTIVE_BLINK_COLOUR
     end -- if   
   elseif not connected then
     colour = NOT_CONNECTED_COLOUR  
   end -- if 
                    
   -- draw the number
   WindowText (win, "f", text, left, top, 0, 0, colour)
   
   -- make a hotspot we can click on
   if list_changed then
      WindowAddHotspot(win, id,  
                   EDGE_WIDTH + 1, top, - (EDGE_WIDTH + 1), top + font_height,   -- rectangle
                   "mouseover", 
                   "cancelmouseover", 
                   "mousedown",
                   "cancelmousedown", 
                   "mouseup", 
                   world_name,  -- tooltip text
                   1, 0)  -- hand cursor
   end -- if world list has changed
                      
  end --  for each world
  

  -- draw the border of the whole box
  WindowCircleOp (win, 2, 0, 0, 0, 0, BOX_COLOUR, 6, EDGE_WIDTH, 0x000000, 1) 
    
  -- ensure window visible
  WindowShow (win, true)
  
  -- save list for next time so we know if it changes
  old_world_list = world_list
  
end -- draw_bar


-- hide window on removal
function OnPluginClose ()
  WindowShow (win,  false)  -- hide it
end -- OnPluginClose

-- hide window on disable
function OnPluginDisable ()
  WindowShow (win,  false)  -- hide it
end -- OnPluginDisable

-- startup stuff

-- make the window
WindowCreate (win, 0, 0, 0, 0, WINDOW_POSITION, 0, 0x000000)  -- create window
               
-- grab a font
WindowFont (win, "f", FONT_NAME, FONT_SIZE) -- define font

-- work out how high it is
font_height = WindowFontInfo (win, "f", 1)   -- height of the font  

]]>
</script>

</muclient>

- Nick Gammon

www.gammon.com.au, www.mushclient.com
Top

Posted by Nick Gammon   Australia  (23,122 posts)  Bio   Forum Administrator
Date Reply #1 on Tue 17 Feb 2009 09:17 PM (UTC)
Message

Example of it in operation (small buttons):

Larger buttons:

Very large buttons:


- Nick Gammon

www.gammon.com.au, www.mushclient.com
Top

Posted by Nick Gammon   Australia  (23,122 posts)  Bio   Forum Administrator
Date Reply #2 on Tue 17 Feb 2009 09:20 PM (UTC)
Message
You can change the font name and size (which influences the button size) by changing the lines:


FONT_NAME = "Fixedsys"
FONT_SIZE = 9


... to something else.

You can also configure the colours used for the bar, buttons, and text colour.

Various colours are used to indicate different things. In the default plugin, a black number means no activity, a blinking red button means activity, and a brown button means world not connected.

I used the MUSHclient colour-picker to find suitable colour names. You can do the same thing, and change the appropriate lines to get the look you want.

- Nick Gammon

www.gammon.com.au, www.mushclient.com
Top

Posted by Nick Gammon   Australia  (23,122 posts)  Bio   Forum Administrator
Date Reply #3 on Tue 17 Feb 2009 09:22 PM (UTC)
Message
You can also change:


OFFSET = 5  -- gap inside box


... to some other number. This influences the distances the buttons are apart. For smaller buttons (small fonts) you might choose a lower number, like 2 or 3.

There is no provision to "wrap" the bar if it gets too long (like, if you have 50 worlds). Either choose a small font, or if that doesn't work, I leave that as an exercise for someone to write an improved version. ;)

- Nick Gammon

www.gammon.com.au, www.mushclient.com
Top

Posted by Toreador   USA  (10 posts)  Bio
Date Reply #4 on Fri 27 Mar 2009 12:04 PM (UTC)
Message
Thanks!

When I added the plugin, it didn't come into all worlds, but does come into worlds I open. This obviously means I need to close and reopen worlds that were already open.

I tried to move it in the window, but it's always vertical. How do I make it display horizontally?

And is there a way to make the styles from the activity tab in Global Preferences apply?

Thanks again!
Top

Posted by Nick Gammon   Australia  (23,122 posts)  Bio   Forum Administrator
Date Reply #5 on Fri 27 Mar 2009 08:01 PM (UTC)
Message
Yes, global plugins are checked when you open a world file. It should be OK next time.

To display horizontally you would need to make minor changes. For example where it loops around drawing each button the calculation for "left" and "top" would need to be changed to move horizontally rather than vertically. And when the window is created its size needs to be bigger horizontally the more worlds you have open.

The styles in the global preferences were only there because the original windows all used predefined bitmap buttons. To change the style of the new activity bar, just amend the plugin slightly, for example this stuff:


ACTIVE_COLOUR = ColourNameToRGB "red"
ACTIVE_BLINK_COLOUR = ColourNameToRGB "mediumslateblue"
INACTIVE_COLOUR = ColourNameToRGB "black"
NOT_CONNECTED_COLOUR = ColourNameToRGB "rosybrown"

FONT_NAME = "Fixedsys"
FONT_SIZE = 9


- Nick Gammon

www.gammon.com.au, www.mushclient.com
Top

Posted by Toreador   USA  (10 posts)  Bio
Date Reply #6 on Fri 27 Mar 2009 08:27 PM (UTC)
Message
I tried doing it like this:

WINDOW_POSITION = 6 -- horizontal center at top

and this:

WINDOW_POSITION = 6 -- horizontal center left-right at top

The result was the activity bar still being vertical. Where exactly should I make the modification?

Also, now that I'm using this plugin I'm getting this message when worlds are opened:

Untrusted world xxxxxx, ID: 56e1bc02299365a20fd38bb7
Lua sandbox created, some functions disabled.
Untrusted plugin World_Activity_Bar, ID: e597e8ceafc1f17c0ab8db01
Lua sandbox created, some functions disabled.
Loading of DLLs in scripts is disabled.

Is there a way to resolve those issues?

Thanks!
Top

Posted by Nick Gammon   Australia  (23,122 posts)  Bio   Forum Administrator
Date Reply #7 on Sat 28 Mar 2009 04:05 AM (UTC)
Message
OK, this was trickier than I thought. ;)

The improved version below allows you to configure it for horizontal or vertical bars. Change the ENTITY line (3rd line in) to be "n" for a vertical bar, or "y" for a horizontal one.



<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE muclient [
  <!ENTITY horizontal "n" > 
]>

<muclient>
<plugin
   name="World_Activity_Bar"
   author="Nick Gammon"
   id="e597e8ceafc1f17c0ab8db01"
   language="Lua"
   purpose="Shows an activity bar"
   date_written="2009-02-18 09:00"
   date_modified="2009-03-28 15:00"
   requires="4.37"
   version="2.0"
   >
   
<description trim="y">
<![CDATA[
Install this plugin to show an activity bar which shows
more than 10 worlds.

Click on a number to activate that world.

Hover over a number to show the world name.
]]>
</description>

</plugin>

<!--  Timers  -->

<timers>
  <timer name="draw_bar" 
         script="draw_bar" 
         enabled="y" 
         second="1.00" 
         active_closed="y" >

  </timer>
</timers>


<!--  Script  -->


<script>

horizontal = ("&horizontal;"):lower ():sub (1, 1) == "y";

<![CDATA[

win = GetPluginID ()  -- get a unique name

-- configuration

BACKGROUND_COLOUR = ColourNameToRGB "bisque"
BOX_COLOUR = ColourNameToRGB "royalblue"
BUTTON_FILL = ColourNameToRGB "white"
BUTTON_FILL_CLICK = ColourNameToRGB "darkgray"
BUTTON_FILL_MOUSEOVER = ColourNameToRGB "lemonchiffon"
BUTTON_EDGE = ColourNameToRGB "silver"
ACTIVE_COLOUR = ColourNameToRGB "red"
ACTIVE_BLINK_COLOUR = ColourNameToRGB "mediumslateblue"
INACTIVE_COLOUR = ColourNameToRGB "black"
NOT_CONNECTED_COLOUR = ColourNameToRGB "rosybrown"

-- font and size to use

FONT_NAME = "Fixedsys"
FONT_SIZE = 9

-- where to put the window
WINDOW_POSITION = 6  -- top right
OFFSET = 5  -- gap inside box (between button edge and number)
EDGE_WIDTH = 2 -- size of border stroke (of rectangle holding all buttons)
BUTTON_GAP = 3 -- distance between buttons
BUTTON_CURVE = 5 -- width and height of ellipse

--[[
Useful positions:

4 = top left
5 = center left-right at top
6 = top right
7 = on right, center top-bottom
8 = on right, at bottom
9 = center left-right at bottom
--]]

local mouse_down_id = nil
local mouse_over_id = nil

function mouseover (flags, hotspot_id)
  mouse_over_id = hotspot_id
  draw_bar ()
end -- mouseover

function cancelmouseover (flags, hotspot_id)
  mouse_over_id = nil
  draw_bar ()
end -- cancelmouseover

function mousedown (flags, hotspot_id)
  mouse_down_id = hotspot_id
  draw_bar ()
end -- mousedown

function cancelmousedown (flags, hotspot_id)
  mouse_down_id = nil
  draw_bar ()
end -- cancelmousedown

function mouseup (flags, hotspot_id)
  mouse_down_id = nil
  draw_bar ()
  if GetWorldID () ~= hotspot_id then
    local w = GetWorldById (hotspot_id)
    if w then
      w:Activate ()
    end -- if world exists 
  end -- if
  
end -- mouseup

local old_world_list = {}

-- draw the bar here
function draw_bar (name)

 local max_width = 0
 
 world_list = GetWorldIdList ()

 --[[
 
   Hotspots do not react well if you remove them during a mouse-click.
   Thus, we will only recreate the window, and recreate the hotspots
   if we absolutely have to. That is, if the number of worlds has changed,
   or the world IDs in the list has changed.
 
 --]]
 
 local list_changed = #old_world_list ~= #world_list
 
 -- number of worlds are the same, but are the IDs the same?
 if not list_changed then
   for i = 1, #old_world_list do
     if #world_list [i] ~= #old_world_list [i] then
       list_changed = true
       break
     end -- if
   end -- if
 end -- if
 
 -- work out widest number 
 for i = 1, #world_list do
   max_width = math.max (max_width, WindowTextWidth (win, "f", string.format ("%i", i)))
 end --  for each world
   
 -- height depends on the number of worlds
 
 local gauge_height, gauge_width
 
 if horizontal then
   gauge_height = font_height + OFFSET * 2
   gauge_width = #world_list * (max_width + OFFSET * 2) + 
                (#world_list - 1) * BUTTON_GAP
 else
   gauge_height = #world_list * (font_height + OFFSET * 2) + 
                 (#world_list - 1) * BUTTON_GAP
   gauge_width = max_width + (OFFSET * 2)
 end -- if
 
 -- make  window if we need to
 if list_changed then
   -- make the miniwindow
   WindowCreate (win, 
               0, 0,   -- left, top (auto-positions)
               gauge_width + EDGE_WIDTH * 2,     -- width
               gauge_height + EDGE_WIDTH * 2,  -- height
               WINDOW_POSITION,       -- auto-position: bottom left
               0,  -- flags
               BACKGROUND_COLOUR) 
  end -- if world list has changed
                
  -- draw the numbers
 
  -- draw each world button
  for count, id in ipairs (world_list) do
   local text = string.format ("%i", count)
   local number_width = WindowTextWidth (win, "f", text)
   local left, top, button_left, button_top, button_right, button_bottom
   
   left = OFFSET + (max_width - number_width) / 2  -- go in offset, then center
   
   if horizontal then
     button_left = (count - 1) * (max_width + OFFSET * 2 + BUTTON_GAP)
     button_top = 0
     left = left + button_left
     top = button_top + OFFSET
   else
     button_left = 0
     button_top = (count - 1) * (font_height + OFFSET * 2 + BUTTON_GAP)
     top =  button_top + OFFSET
   end -- if 
   
   button_right = button_left + EDGE_WIDTH + max_width + OFFSET * 2
   button_bottom = button_top  + EDGE_WIDTH + font_height + OFFSET * 2
   
   local colour = INACTIVE_COLOUR
   local w = GetWorldById (id)
   local world_name = w:GetInfo (2)
   local new_lines = w:GetInfo (202)
   local connected = w:GetInfo (227) == 8
  
   -- fill with BUTTON_FILL, unless we have moused-over or moused-down in it
   local fill_colour = BUTTON_FILL
   
   if id == mouse_down_id then
     fill_colour = BUTTON_FILL_CLICK
   elseif id == mouse_over_id then
     fill_colour = BUTTON_FILL_MOUSEOVER
   end -- if
   
   -- draw the button (round rectangle)
   WindowCircleOp (win, 3, 
                    button_left + EDGE_WIDTH,   -- left
                    button_top  + EDGE_WIDTH,   -- top
                    button_right,               -- right
                    button_bottom,              -- bottom
                    BUTTON_EDGE, 6, 1,   -- pen colour, pen style (solid), pen width
                    fill_colour, 0,      -- fill colour, fill style (solid)
                    BUTTON_CURVE, BUTTON_CURVE)  -- width and height of ellipse
   
   -- text colour depends on world's status
   if new_lines > 0 then
     if os.time () % 2 == 1 then
       colour = ACTIVE_COLOUR
     else
       colour = ACTIVE_BLINK_COLOUR
     end -- if   
   elseif not connected then
     colour = NOT_CONNECTED_COLOUR  
   end -- if 
                    
   -- draw the number
   WindowText (win, "f", text, left + EDGE_WIDTH, top + EDGE_WIDTH, 0, 0, colour)
   
   -- make a hotspot we can click on
   if list_changed then
      WindowAddHotspot(win, id,  
                   button_left + EDGE_WIDTH, button_top + EDGE_WIDTH,  -- left, top
                   button_right, button_bottom,   -- right, bottom
                   "mouseover", 
                   "cancelmouseover", 
                   "mousedown",
                   "cancelmousedown", 
                   "mouseup", 
                   world_name,  -- tooltip text
                   1, 0)  -- hand cursor
   end -- if world list has changed
                      
  end --  for each world
  

  -- draw the border of the whole box
  WindowCircleOp (win, 2, 0, 0, 0, 0, BOX_COLOUR, 6, EDGE_WIDTH, 0x000000, 1) 
    
  -- ensure window visible
  WindowShow (win, true)
  
  -- save list for next time so we know if it changes
  old_world_list = world_list
  
end -- draw_bar


-- hide window on removal
function OnPluginClose ()
  WindowShow (win,  false)  -- hide it
end -- OnPluginClose

-- hide window on disable
function OnPluginDisable ()
  WindowShow (win,  false)  -- hide it
end -- OnPluginDisable

-- startup stuff

-- make the window
WindowCreate (win, 0, 0, 0, 0, WINDOW_POSITION, 0, 0x000000)  -- create window
               
-- grab a font
WindowFont (win, "f", FONT_NAME, FONT_SIZE) -- define font

-- work out how high it is
font_height = WindowFontInfo (win, "f", 1)   -- height of the font  

]]>
</script>

</muclient>




Quote:

Untrusted world xxxxxx, ID: 56e1bc02299365a20fd38bb7


You can modify the Lua sandbox to get rid of those messages. See this thread for a discussion and a graphic that shows what to change:

http://www.gammon.com.au/forum/bbshowpost.php?id=9317


- Nick Gammon

www.gammon.com.au, www.mushclient.com
Top

Posted by Toreador   USA  (10 posts)  Bio
Date Reply #8 on Sat 28 Mar 2009 05:32 AM (UTC)
Message
Thank you, Nick!
Top

Posted by Savitar   (3 posts)  Bio
Date Reply #9 on Wed 13 May 2009 10:06 AM (UTC)
Message
Would it be possible to modify the horizontal version of this so it displays the world name instead of the number?
Top

Posted by Nick Gammon   Australia  (23,122 posts)  Bio   Forum Administrator
Date Reply #10 on Thu 14 May 2009 12:25 AM (UTC)
Message
Sure it is possible, however the boxes might get big. In the part that draws the number you would draw the world name instead. Also when calculating the size of the boxes you would need to calculate based on the world name rather than the number.

- Nick Gammon

www.gammon.com.au, www.mushclient.com
Top

Posted by Savitar   (3 posts)  Bio
Date Reply #11 on Thu 14 May 2009 01:59 AM (UTC)
Message
Ah, excellent! I was asking because outside some tinkering I'm still new to this type of scripting. Essentially what I was hoping for is something akin to a 'tabs' look for the worlds as opposed to the current numbered activity bar. Where the tabs display the world name. And instead of putting this on the requested features page, this plugin seemed like it might work instead.
Top

Posted by Nick Gammon   Australia  (23,122 posts)  Bio   Forum Administrator
Date Reply #12 on Thu 28 May 2009 10:13 PM (UTC)
Message
See this thread:

http://www.gammon.com.au/forum/?id=9462

This is an adaptation of the above plugin, that shows names rather than numbers.

- Nick Gammon

www.gammon.com.au, www.mushclient.com
Top

Posted by Jrh1801   (1 post)  Bio
Date Reply #13 on Mon 21 May 2012 01:37 AM (UTC)
Message
Hi I was trying to set the plugin to a horizontal. I copied and pasted the improved version over then changed the Entity line to <!ENTITY horizontal "y" > but it didn't work and I'm wondering where I went wrong.
Top

Posted by Nick Gammon   Australia  (23,122 posts)  Bio   Forum Administrator
Date Reply #14 on Mon 21 May 2012 06:51 AM (UTC)
Message
Worked OK for me when I did just that. In what way did it not work for you? Error message? Numbers still vertical?

- Nick Gammon

www.gammon.com.au, www.mushclient.com
Top

The dates and times for posts above are shown in Universal Co-ordinated Time (UTC).

To show them in your local time you can join the forum, and then set the 'time correction' field in your profile to the number of hours difference between your location and UTC time.


44,952 views.

Posting of new messages is disabled at present.

Refresh page

Go to topic:           Search the forum


[Go to top] top

Information and images on this site are licensed under the Creative Commons Attribution 3.0 Australia License unless stated otherwise.