<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wiki.linuxmce.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=T0ny</id>
	<title>LinuxMCE - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.linuxmce.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=T0ny"/>
	<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php/Special:Contributions/T0ny"/>
	<updated>2026-05-11T04:43:06Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=Media_Plugin&amp;diff=3771</id>
		<title>Media Plugin</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=Media_Plugin&amp;diff=3771"/>
		<updated>2007-03-29T20:34:16Z</updated>

		<summary type="html">&lt;p&gt;T0ny: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Plutoperm|This page was written by Pluto and imported with their permission when LinuxMCE branched off in February, 2007.  In general any information should apply to LinuxMCE.  However, this page should be edited to reflect changes to LinuxMCE and remove old references to Pluto.}}[[Media Pictures (mediapics)]]&lt;/div&gt;</summary>
		<author><name>T0ny</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=AOpen_MiniPC&amp;diff=3750</id>
		<title>AOpen MiniPC</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=AOpen_MiniPC&amp;diff=3750"/>
		<updated>2007-03-27T09:48:48Z</updated>

		<summary type="html">&lt;p&gt;T0ny: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://minipc.aopen.com/Global/spec.htm aOpen MiniPC]&lt;br /&gt;
Mini PC is coming to my table in the next few days. Like anything else it has pros and cons. Let me do initial evaluation...&lt;br /&gt;
&lt;br /&gt;
*Pros&lt;br /&gt;
**???&lt;br /&gt;
*Cons&lt;br /&gt;
**no digital audio (SPDIF)&amp;lt;br&amp;gt; - it seems like SPDIF is present on motherboard and soldering connector can help...&lt;br /&gt;
**no com port to control A/V equipment over Rs232C (workaround is USB to rs232 but haven&#039;t tested it)...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Update --[[User:Tinia|Tinia]] 10:25, 7 June 2006 (BST) : &lt;br /&gt;
&lt;br /&gt;
AOpen is running as MD. Playing ripped DVD chokes it : 72% for Xine player and 26% for XFree...&lt;br /&gt;
&lt;br /&gt;
--[[User:Nite man|Nite man]] 02:33, 4 July 2006 (MST) [http://shopper.cnet.com/AOpen_MiniPC_MP915_B_SuperMulti/4014-11485_9-31664595.html The price] is $334.&lt;br /&gt;
&lt;br /&gt;
Update --[[User:Totallymaxed|Totallymaxed]] 08:56, 22 July 2006 (MST)&lt;br /&gt;
The Aopen MiniPC performs beautifully once it has the i810 drivers installed. MD playback of DVD&#039;s, Ripped DVD&#039;s from the core and streamed TV are all delivered very smoothly (once that vesa driver is out of the way!). A great looking, very small, slick Media Director. One caveate currently... there is an intermittant bug in either the i810 driver or Xine&#039;s handling of xv that exhibits itself as video that looks like its been through a Photoshop &#039;solarising&#039; filter. This only affects machines using the i810 driver ie i915/945/855 Intel chipsets. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:aOpen-front.jpg]] [[Image:aOpen-back.jpg]]&lt;/div&gt;</summary>
		<author><name>T0ny</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=Apex_Destiny-6100&amp;diff=3749</id>
		<title>Apex Destiny-6100</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=Apex_Destiny-6100&amp;diff=3749"/>
		<updated>2007-03-27T09:47:28Z</updated>

		<summary type="html">&lt;p&gt;T0ny: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Plutoperm}}&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
In order to setup the Apex system, you first need to connect it to a power supply, set the sensors and tie them to the inputs on the board from the panel, and also connect the wall panel to the main panel. You can find a very thorough description in the installation manual supplied by HoneyWell (can be downloaded in [http://www.security.honeywell.com/hsce/resources/literature/index.html the support section] of the security site).&lt;br /&gt;
&lt;br /&gt;
The configuration can be done either using the wall panel, or a computer and then upload it with the special software HoneyWell supplies. What interests us more, though, is communicating with the panel directly through the serial RS232 protocol.&lt;br /&gt;
&lt;br /&gt;
== Destiny 6100 RS232 protocol ==&lt;br /&gt;
&lt;br /&gt;
In the same support section, you can also download the specification for communicating to the panel through RS232 (filename k1231.pdf at this time). There is also a simple application you can use to verify the command string syntax (explained in k1231.pdf), as well the fact that the panel is set up to receive commands through the serial port.&lt;br /&gt;
&lt;br /&gt;
There is a special board that has to be mounted on the main board in the panel&#039;s case, in order to get a RS232 connector. You can plug an RJ45 cable there, witch goes to a serial converter (or any other way you can plug it into your computer, we used the to serial converter as well as a RadioShack USB Serial cable).&lt;br /&gt;
&lt;br /&gt;
After setting this, use the software to make sure the panel is set up correctly. You first have to connect to the correct port, then start sending commands. If everything is ok, you should here the vocal confirmations from the panel. If you don&#039;t, check the yellow led on the board, the one that&#039;s the closest to the RS232 extension. This one should blink the instant you send a command. If this happens. most probably you don&#039;t have the proper jumper setting on the RS232 extension board. It should connect the pins that are closer to the box edge.&lt;br /&gt;
&lt;br /&gt;
In the document you can also find a short C program that builds command strings (there is a checksum that has to be added to the command string) that can be sent directly through the serial port once you got it working.&lt;br /&gt;
&lt;br /&gt;
== Figuring the protocol up ==&lt;br /&gt;
&lt;br /&gt;
The communication protocol is pretty simple, but there is a section not so well documented, more exactly section 5.8. You can find the specifications for most memory locations in the Installation Instructions (page 36). Still, there&#039;s no info about fetching zone data in there (they say configuring the zones can only be done through the wall panel control - page 23 of the same document).&lt;br /&gt;
&lt;br /&gt;
Using the memory location access commands, we took a snapshots of the memory (you can only query 32 - 0x20 - bytes at a time, so getting a snapshot over the serial port takes a bit of a time) and reverse-engineered the memory map.&lt;/div&gt;</summary>
		<author><name>T0ny</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=Orbiter&amp;diff=3747</id>
		<title>Orbiter</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=Orbiter&amp;diff=3747"/>
		<updated>2007-03-27T08:47:37Z</updated>

		<summary type="html">&lt;p&gt;T0ny: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Plutoperm}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a simplified [[UML]] for Orbiter (pocketfrog implementation).&lt;br /&gt;
&lt;br /&gt;
[[Integrating custom controls in Orbiter]]&lt;br /&gt;
&lt;br /&gt;
[[Orbiter refactoring - the new design]]&lt;br /&gt;
&lt;br /&gt;
Devel notes:&lt;br /&gt;
&lt;br /&gt;
* [[SDL&#039;s TextWrapper and TextSplitter]]&lt;br /&gt;
* [[OpenGL implementation]]&lt;br /&gt;
* [[Building Orbiter for the Nokia 770]]&lt;br /&gt;
* [[Computing screen]]&lt;br /&gt;
* [[FileSave screen]]&lt;br /&gt;
* [[Child devices]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
User notes:&lt;br /&gt;
&lt;br /&gt;
*[[Web Orbiter]]&lt;br /&gt;
*[[Add CISCO 7078 Orbiter]]&lt;br /&gt;
[[Category: Programmer&#039;s Guide]]&lt;/div&gt;</summary>
		<author><name>T0ny</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=Image_properties&amp;diff=3746</id>
		<title>Image properties</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=Image_properties&amp;diff=3746"/>
		<updated>2007-03-27T08:46:05Z</updated>

		<summary type="html">&lt;p&gt;T0ny: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Plutoperm}}&lt;br /&gt;
&#039;&#039;&#039;Top&#039;&#039;&#039; : &#039;&#039;&#039;&#039;&#039;Integer&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The top coordinate of the Image control. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Left&#039;&#039;&#039; : &#039;&#039;&#039;&#039;&#039;Integer&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The left coordinate of the Image control.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Width&#039;&#039;&#039; : &#039;&#039;&#039;&#039;&#039;Integer&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The width (in pixels) of Image control. If width is not specified, the width will be image&#039;s source size.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Height&#039;&#039;&#039; : &#039;&#039;&#039;&#039;&#039;Integer&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Height (in pixels) of Image control. If height is not specified, the height will be image&#039;s source size.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Picture&#039;&#039;&#039; : &#039;&#039;&#039;&#039;&#039;String&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
That describe path to a file that will be loaded to be displayed.&lt;/div&gt;</summary>
		<author><name>T0ny</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=ASUS_DIGIMatrix&amp;diff=3745</id>
		<title>ASUS DIGIMatrix</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=ASUS_DIGIMatrix&amp;diff=3745"/>
		<updated>2007-03-27T08:43:47Z</updated>

		<summary type="html">&lt;p&gt;T0ny: Removed the &amp;lt;br&amp;gt; that are not needed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__toc__&lt;br /&gt;
&lt;br /&gt;
Asus Digimatrix has pros and cons. Let me do initial evaluation...&lt;br /&gt;
&lt;br /&gt;
I&#039;ve also added Panel utility that lets you control LCD display...&lt;br /&gt;
&lt;br /&gt;
*Pros:&lt;br /&gt;
**Small factor&lt;br /&gt;
**Nice front panel&lt;br /&gt;
**Integrated IR Remote&lt;br /&gt;
**Clock and Temp display (although Time under LinuxMCE is not right at the moment)&lt;br /&gt;
*Cons:&lt;br /&gt;
**Cannot PXE boot (I simulate this with boot CD that is always in tray)&lt;br /&gt;
**Wake on LAN still doesn&#039;t work properly (but can be wrong on this one)...&lt;br /&gt;
&lt;br /&gt;
[[Image:asus-fromt.jpg]] [[Image:asus_back.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== HW clock problem ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Digimatrix has nice little VFD screen that shows hardware clock. The problem is that when it is powered off that time is in GMT rather than local time (in my case this is two hours  behind). This comes from default handling of time in Linux - HW clock keeps GMT time and software then handles it when powered on. But after power down it goes back to GMT.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Solution&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Entry UTC=yes in /etc/default/rcS (for that particular MD and not on the core) has to be changed to UTC=no.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I have no idea if this breaks any automatic daylight time saving feature or anything else, but works on my Digimatrix now - so I can see proper time when powered off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Adding remote control==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It seems pretty straightforward, but I it seems it starts to work only after few hard reboots...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Two additional kernel modules are required for remote to operate properly (lirc_dev, lirc_it87). They should be added as additional kernel modules on Media Directors page. As I&#039;m writing this, this feature doesn&#039;t work, so you must manually add them to /etc/modules and watch, cause that file could get overwritten (particularly if you click on &#039;Rebuild image&#039;)...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Add &#039;Digimatrix&#039; remote control in the bottom of corresponding entry in Media directors LinuxMCE-admin page.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Select &#039;default&#039; driver&lt;br /&gt;
&lt;br /&gt;
Those actions will add two devices to Digimatrix MD parent device : &#039;Digimatrix&#039; (remote) and &#039;default&#039; which will start actual lircd daemon. Now some of buttons should work (left,right,up,down) but not all of them. There is another further step necessary :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Setting up remote mapping in MySQL database pluto_main, RemoteMapping (where keys from lircd.conf on Digmatrix remote page have to be added to trigger proper DCE messages, but please read [http://linuxmce.com/wiki/index.php/Control_LinuxMCE_using_an_Infrared_remote this] first - if you make changes on your own, you&#039;ll lose upgrading feature of table entries!!!)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I&#039;ve already sent email with suggested additions for Digimatrix remote :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 --------------------- suggested additions to table are listed in ()-------&lt;br /&gt;
 (os_start)Power;|0 -203 1 194&lt;br /&gt;
 1;One;|0 -203 1 28 26 16&lt;br /&gt;
 2;Two;|0 -203 1 28 26 17&lt;br /&gt;
 3;Three;|0 -203 1 28 26 18&lt;br /&gt;
 4;Four;|0 -203 1 28 26 19&lt;br /&gt;
 5;Five;|0 -203 1 28 26 20&lt;br /&gt;
 6;Six;|0 -203 1 28 26 21&lt;br /&gt;
 7;Seven;|0 -203 1 28 26 22&lt;br /&gt;
 8;Eight;|0 -203 1 28 26 23&lt;br /&gt;
 9;Nine;|0 -203 1 28 26 24&lt;br /&gt;
 0;Zero;|0 -203 1 28 26 25&lt;br /&gt;
 enter;|0 -203 1 28 26 5&lt;br /&gt;
 (next)SkipNext;skipfwd;|0 -106 1 65 5 +1&lt;br /&gt;
 (pre)SkipPrior;skipback;|0 -106 1 65 5 -1&lt;br /&gt;
 (ch+)chup;ChanUp;|0 -106 1 65 5 +1&lt;br /&gt;
 (ch-)chdown;ChanDown;|0 -106 1 65 5 -1&lt;br /&gt;
 (step+)fastforward;Forward;|0 -106 1 41 43 +2&lt;br /&gt;
 (step-)Rewind;|0 -106 1 41 43 -2&lt;br /&gt;
 Pause;|0 -106 1 39&lt;br /&gt;
 Play;|0 -106 1 37&lt;br /&gt;
 Mute;|0 -106 1 97&lt;br /&gt;
 Stop;|0 -106 1 95 203 1&lt;br /&gt;
 Down;|0 -203 1 201&lt;br /&gt;
 Up;|0 -203 1 200&lt;br /&gt;
 Left;|0 -203 1 202&lt;br /&gt;
 Right;|0 -203 1 203&lt;br /&gt;
 ok;|0 -203 1 190&lt;br /&gt;
 (vol-)voldn;VolDown;|0 -106 1 90&lt;br /&gt;
 (vol+)VolUp;|0 -106 1 89&lt;br /&gt;
 recorded_tv;RecTV;|0 -203 1 401 29 5&lt;br /&gt;
 (dvd_vcd;dvd_audio)DVD;|0 -106 1 43&lt;br /&gt;
 menu;|0 -106 1 548&lt;br /&gt;
 tv;live_tv;LiveTV;|0 -106 1 43 29 1&lt;br /&gt;
 Back;|0 -203 1 240&lt;br /&gt;
 Clear;|0 -203 1 363&lt;br /&gt;
 (subtitle)epg;Guide;|0 -106 1 126&lt;br /&gt;
 start;Home;|0 -203 1 741 159 1&lt;br /&gt;
 Music;|0 -203 1 401 29 4&lt;br /&gt;
 (ui_size)Radio;|0 -106 1 43 29 6&lt;br /&gt;
 (rec)Record;|0 -106 1 102&lt;br /&gt;
 (ui_on_off)display;info;list;|0 -203 1 399&lt;br /&gt;
 green;|0 -203 1 28 26 177&lt;br /&gt;
 yellow;|0 -203 1 28 26 178&lt;br /&gt;
 red;|0 -203 1 28 26 179&lt;br /&gt;
 blue;|0 -203 1 28 26 180&lt;br /&gt;
&lt;br /&gt;
----- suggestions to change in digimatrix remote entry &lt;br /&gt;
          on_off                   0x000000000000B04F&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to change to &#039;music&#039; - there is alternate sign on remote that is more useful than on_off feature (os_start is for that)&lt;br /&gt;
&lt;br /&gt;
I also suggested new entry in table :&lt;br /&gt;
 photo (music,tv,dvd are already in)...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(to be expanded)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Power ON/OFF from remote control !!!==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Currently not many PCs can do this. But digitools package (look below) includes digiwake utility that must be run on system&#039;s shutdown (anytime after lircd, but it disables it so shutdown is best place) and Digimatrix will then wake up on Music (On/Off) button on remote - if it stays in idle power of course..&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Currently for 1.03 Digiwake, you must run digiwake -w to write default values. On on/off remote button Digimatrix starts booting but it doesn&#039;t read CD to PXE boot (maybe my BIOS is not the right version...&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Radu suggests putting script in /etc/init.d, and make symlinks in /etc/rc6.d and /etc/rc0.d (rc6 = reboot; rc0 = halt/poweroff); use the existing symlinks as reference - I think only rc0 symlink is necessary.&lt;br /&gt;
&lt;br /&gt;
&#039;digiwake.sh&#039; content (in /etc/init.d ) &amp;lt;br&amp;gt;&lt;br /&gt;
 #&lt;br /&gt;
 # digiwake.sh Prepares Digmatrix to be powered on by remote on/off button.&lt;br /&gt;
 #&lt;br /&gt;
 /usr/local/sbin/digiwake -w&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
and make this :&lt;br /&gt;
 ln -s /etc/init.d/digiwake.sh /etc/rc0.d/S80digiwake&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Getting VFD panel to display time, temperature (with volume) and volume knob to work  ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You need to compile [http://www.geexbox.org/src/devel/ Digitools ]&amp;lt;br&amp;gt;&lt;br /&gt;
My notes:&lt;br /&gt;
     wget http://www.geexbox.org/src/devel/digitools-1.03.tar.gz&lt;br /&gt;
     tar zxvf digitools-1.03.tar.gz&lt;br /&gt;
     cd digitools&lt;br /&gt;
     apt-get install libc6-dev&lt;br /&gt;
     apt-get install libasound2-dev&lt;br /&gt;
     make install&lt;br /&gt;
 &lt;br /&gt;
Then I add this line to /etc/inittab (not sure if this is proper and nice way of doing it - but it works) :&lt;br /&gt;
&lt;br /&gt;
     FP:2345:once:/usr/local/sbin/digipanel -l -s -t &amp;amp;&amp;gt; /dev/null &amp;amp; echo &amp;quot;Starting panel control&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(to be expanded)&lt;/div&gt;</summary>
		<author><name>T0ny</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=MirrorsOld&amp;diff=3743</id>
		<title>MirrorsOld</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=MirrorsOld&amp;diff=3743"/>
		<updated>2007-03-27T08:31:05Z</updated>

		<summary type="html">&lt;p&gt;T0ny: Removed the two links at the bottom&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The md5sum for the LinuxMCE 1.0 Install CD (linuxmce-1.0-packages.iso) is: 0c925976b65ba481271cbb133051fe3a&lt;br /&gt;
&lt;br /&gt;
This wiki page is editable so users can add additional mirrors.  To prevent the addition of malware to the .iso, the md5sum is also shown on the home page in the news section, which is not editable by the public.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse:collapse; border-color:#8eabd0; background:#e7edf5&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: lightsteelblue&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Official Torrent:&lt;br /&gt;
|&lt;br /&gt;
* http://torrents.thepiratebay.org/3646881/linuxmce-1.0-packages.iso.3646881.TPB.torrent&lt;br /&gt;
|-&lt;br /&gt;
!U.S.:&lt;br /&gt;
|&lt;br /&gt;
* http://www.neversfw.com/linux/ (new installer .deb posted)&lt;br /&gt;
* http://www.robogoat.com/rampage/linuxmce/linuxmce-1.0-packages.iso&lt;br /&gt;
* http://mirror.chibiko.net/linuxmce-1.0-packages.iso - Dreamhost Mirror, 2TB/mo - Atreidae&lt;br /&gt;
* http://server2.cpl1337.net/linuxmce-1.0-packages.iso&lt;br /&gt;
* http://proyectos.pixelamigo.com/software/Ubuntu/linuxMCE/ By donation ( Linux MCE + Ubuntu Ultimate Edition 1.3 + Ubuntu Gamers Edition )&lt;br /&gt;
* http://coblitz.codeen.org:3125/linuxmce.com/linuxmce-1.0-packages.iso - ( [http://codeen.cs.princeton.edu/  CoDeen] &amp;amp; [http://www.planet-lab.org PlanetLab])&lt;br /&gt;
|-&lt;br /&gt;
!Australia:&lt;br /&gt;
|&lt;br /&gt;
* [http://linuxmce.rtfm.net.au/ Packages ISO and Installer - RTFM Computing Melbourne Australia] &lt;br /&gt;
|-&lt;br /&gt;
!Europe:&lt;br /&gt;
|&lt;br /&gt;
* http://www.netzwelt.de/software/4459-linuxmce.html&lt;br /&gt;
* http://mirror.hgkz.ch/ftp/iso/linuxmce/linuxmce-1.0-packages.iso&lt;br /&gt;
* ftp://mirror.hgkz.ch/iso/linuxmce/linuxmce-1.0-packages.iso&lt;br /&gt;
* rsync://mirror.hgkz.ch/linuxmce/&lt;br /&gt;
|-&lt;br /&gt;
!FileFront Mirror:&lt;br /&gt;
|&lt;br /&gt;
* http://hosted.filefront.com/linuxmce/1925781 To help take some load of paid websites...&lt;br /&gt;
|-&lt;br /&gt;
![http://www.pando.com/ Pando] (a P2P app):&lt;br /&gt;
|&lt;br /&gt;
* [http://cache.pando.com/soapservices/Package/package.pando?id=93C79E269A55BE14C7F68A859B0EF336B2CF4849&amp;amp;key=AAE42C36492B011477091337338945CB724B32ADC6F975597A261448318B620B&amp;amp;tt=S2W Pando Link]&lt;br /&gt;
|-&lt;br /&gt;
!MediaFire Direct Links:&lt;br /&gt;
|&lt;br /&gt;
* Files are direct downloads, use [http://www.freebyte.com/hjsplit/ HJ-Split] to combine.&lt;br /&gt;
* [http://www.mediafire.com/?014wq4mgmki Part 1]&lt;br /&gt;
* [http://www.mediafire.com/?9ozzyltiimt Part 2]&lt;br /&gt;
* [http://www.mediafire.com/?a5q5yfdyzqy Part 3]&lt;br /&gt;
* [http://www.mediafire.com/?1uwzzzzu0xm Part 4]&lt;br /&gt;
* [http://www.mediafire.com/?czzmq5jzygu Part 5]&lt;br /&gt;
* [http://www.mediafire.com/?64dw2mzz3km Part 6]&lt;br /&gt;
* [http://www.mediafire.com/?5ygynmnnqfr Part 7]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>T0ny</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=MirrorsOld&amp;diff=3711</id>
		<title>MirrorsOld</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=MirrorsOld&amp;diff=3711"/>
		<updated>2007-03-25T06:47:47Z</updated>

		<summary type="html">&lt;p&gt;T0ny: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The md5sum for the LinuxMCE 1.0 Install CD (linuxmce-1.0-packages.iso) is: 0c925976b65ba481271cbb133051fe3a&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse:collapse; border-color:#8eabd0; background:#e7edf5&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: lightsteelblue&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Official Torrent:&lt;br /&gt;
|&lt;br /&gt;
* http://torrents.thepiratebay.org/3646881/linuxmce-1.0-packages.iso.3646881.TPB.torrent&lt;br /&gt;
|-&lt;br /&gt;
!U.S.:&lt;br /&gt;
|&lt;br /&gt;
* [http://www.cyburdinehosting.com/linuxmce/linuxmce-1.0-packages.iso linuxmce-1.0-packages.iso - Cyburdine Hosting CA Data Center]&lt;br /&gt;
* http://www.neversfw.com/linux/ (new installer .deb posted)&lt;br /&gt;
* http://www.robogoat.com/rampage/linuxmce/linuxmce-1.0-packages.iso&lt;br /&gt;
|-&lt;br /&gt;
!Australia:&lt;br /&gt;
|&lt;br /&gt;
* [http://linuxmce.rtfm.net.au/ Packages ISO and Installer - RTFM Computing Melbourne Australia] &lt;br /&gt;
(Please note this is a very new site, it&#039;s DNS records may not have yet propagated.)&lt;br /&gt;
|-&lt;br /&gt;
!Switzerland:&lt;br /&gt;
|&lt;br /&gt;
* http://mirror.hgkz.ch/ftp/iso/linuxmce/linuxmce-1.0-packages.iso&lt;br /&gt;
* ftp://mirror.hgkz.ch/iso/linuxmce/linuxmce-1.0-packages.iso&lt;br /&gt;
* rsync://mirror.hgkz.ch/linuxmce/&lt;br /&gt;
|-&lt;br /&gt;
!FileFront Mirror:&lt;br /&gt;
|&lt;br /&gt;
* http://hosted.filefront.com/linuxmce/1925781 To help take some load of paid websites...&lt;br /&gt;
|-&lt;br /&gt;
![http://www.pando.com/ Pando] (a P2P app):&lt;br /&gt;
|&lt;br /&gt;
* [http://cache.pando.com/soapservices/Package/package.pando?id=93C79E269A55BE14C7F68A859B0EF336B2CF4849&amp;amp;key=AAE42C36492B011477091337338945CB724B32ADC6F975597A261448318B620B&amp;amp;tt=S2W Pando Link]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>T0ny</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=MirrorsOld&amp;diff=3710</id>
		<title>MirrorsOld</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=MirrorsOld&amp;diff=3710"/>
		<updated>2007-03-25T06:46:48Z</updated>

		<summary type="html">&lt;p&gt;T0ny: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The md5sum for the LinuxMCE 1.0 Install CD (linuxmce-1.0-packages.iso) is: 0c925976b65ba481271cbb133051fe3a&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse:collapse; border-color:#8eabd0; background:#e7edf5&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: lightsteelblue&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Official Torrent:&lt;br /&gt;
|&lt;br /&gt;
* http://torrents.thepiratebay.org/3646881/linuxmce-1.0-packages.iso.3646881.TPB.torrent&lt;br /&gt;
|-&lt;br /&gt;
!U.S.:&lt;br /&gt;
|&lt;br /&gt;
* [http://www.cyburdinehosting.com/linuxmce/linuxmce-1.0-packages.iso linuxmce-1.0-packages.iso - Cyburdine Hosting CA Data Center]&lt;br /&gt;
* http://www.neversfw.com/linux/ (new installer .deb posted)&lt;br /&gt;
* http://www.robogoat.com/rampage/linuxmce/linuxmce-1.0-packages.iso&lt;br /&gt;
|-&lt;br /&gt;
!Australia:&lt;br /&gt;
|&lt;br /&gt;
* [http://linuxmce.rtfm.net.au/ Packages ISO and Installer - RTFM Computing Melbourne Australia] &lt;br /&gt;
(Please note this is a very new site, it&#039;s DNS records may not have yet propagated.)&lt;br /&gt;
|-&lt;br /&gt;
!Switzerland:&lt;br /&gt;
|&lt;br /&gt;
* http://mirror.hgkz.ch/ftp/iso/linuxmce/linuxmce-1.0-packages.iso&lt;br /&gt;
* ftp://mirror.hgkz.ch/iso/linuxmce/linuxmce-1.0-packages.iso&lt;br /&gt;
* rsync://mirror.hgkz.ch/linuxmce/&lt;br /&gt;
|-&lt;br /&gt;
!FileFront Mirror:&lt;br /&gt;
|&lt;br /&gt;
* http://hosted.filefront.com/linuxmce/1925781 To help take some load of paid websites...&lt;br /&gt;
|-&lt;br /&gt;
!Pando (a P2P app):&lt;br /&gt;
|&lt;br /&gt;
* [http://cache.pando.com/soapservices/Package/package.pando?id=93C79E269A55BE14C7F68A859B0EF336B2CF4849&amp;amp;key=AAE42C36492B011477091337338945CB724B32ADC6F975597A261448318B620B&amp;amp;tt=S2W Pando Link]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>T0ny</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=MirrorsOld&amp;diff=3706</id>
		<title>MirrorsOld</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=MirrorsOld&amp;diff=3706"/>
		<updated>2007-03-25T04:53:34Z</updated>

		<summary type="html">&lt;p&gt;T0ny: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The md5sum for the LinuxMCE 1.0 Install CD (linuxmce-1.0-packages.iso) is: 0c925976b65ba481271cbb133051fe3a&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse:collapse; border-color:#8eabd0; background:#e7edf5&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: lightsteelblue&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Official Torrent:&lt;br /&gt;
|&lt;br /&gt;
* http://torrents.thepiratebay.org/3646881/linuxmce-1.0-packages.iso.3646881.TPB.torrent&lt;br /&gt;
|-&lt;br /&gt;
!U.S.:&lt;br /&gt;
|&lt;br /&gt;
* [http://www.cyburdinehosting.com/linuxmce/linuxmce-1.0-packages.iso linuxmce-1.0-packages.iso - Cyburdine Hosting CA Data Center]&lt;br /&gt;
* [http://63.228.213.140/linuxmce/linuxmce-1.0-packages.iso linuxmce-1.0-packages.iso - Cyburdine Hosting UT Data Center]&lt;br /&gt;
* http://www.neversfw.com/linux/ (new installer .deb posted)&lt;br /&gt;
* http://www.robogoat.com/rampage/linuxmce/linuxmce-1.0-packages.iso&lt;br /&gt;
|-&lt;br /&gt;
!Australia:&lt;br /&gt;
|&lt;br /&gt;
* [http://linuxmce.rtfm.net.au/linuxmce-1.0-packages.iso linuxmce-1.0-packages.iso - RTFM Computing Melbourne Australia]&lt;br /&gt;
|-&lt;br /&gt;
!Switzerland:&lt;br /&gt;
|&lt;br /&gt;
* http://mirror.hgkz.ch/ftp/iso/linuxmce/linuxmce-1.0-packages.iso&lt;br /&gt;
* ftp://mirror.hgkz.ch/iso/linuxmce/linuxmce-1.0-packages.iso&lt;br /&gt;
* rsync://mirror.hgkz.ch/linuxmce/&lt;br /&gt;
|-&lt;br /&gt;
!FileFront Mirror:&lt;br /&gt;
|&lt;br /&gt;
* http://hosted.filefront.com/linuxmce/1925781 To help take some load of paid websites...&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>T0ny</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=Integrating_custom_controls_in_Orbiter&amp;diff=3705</id>
		<title>Integrating custom controls in Orbiter</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=Integrating_custom_controls_in_Orbiter&amp;diff=3705"/>
		<updated>2007-03-25T04:31:30Z</updated>

		<summary type="html">&lt;p&gt;T0ny: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Plutoperm}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The concept of screen in Orbiter ==&lt;br /&gt;
A &#039;&#039;DesignObj&#039;&#039; is a graphic object from Orbiter. Each &#039;&#039;DesignObj&#039;&#039; may be a collection of &#039;&#039;DesignObj&#039;&#039; children and so on. A parent &#039;&#039;DesignObj&#039;&#039; can be associated with a &#039;&#039;screen&#039;&#039;, which gives the programmer the possibility to do custom additional actions with that &#039;&#039;DesignObj&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== How to associate a &#039;&#039;DesignObj&#039;&#039; to a &#039;&#039;screen&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
Once the parent &#039;&#039;design object&#039;&#039; is created with the Designer, go in &#039;&#039;pluto_main&#039;&#039; database and insert into &#039;&#039;Screen&#039;&#039; table a record with a description and few comments about the new screen. Then check Screen_DesignObj table and add a recording to link the screen with the designobj. You might also want to specify the UI and the Skin.&lt;br /&gt;
&lt;br /&gt;
=== How to use ScreenGen to regenerate screens and how to use it ===&lt;br /&gt;
&lt;br /&gt;
Run ScreenGen with &#039;&#039;-h &amp;lt;host&amp;gt;&#039;&#039; command line parameter and you should see in src/Gen_Devices/AllScreens.h that handlers for your need screens were added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Let&#039;s say your screen has PK_Screen = 39, with the description &amp;quot;Computing&amp;quot;:&lt;br /&gt;
[[Image:A_record_from_screen_table.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In Screen_DesignObj, you should have something like this:&lt;br /&gt;
[[Image:records_from_screen_designobj.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== Understand AllScreens.h and ScreenHandlerBase class. ===&lt;br /&gt;
&lt;br /&gt;
There is another table in the database, &#039;&#039;Screen_CommandParameter&#039;&#039; which allows you to associate a screen with a collection of command parameters. This means you can send a &amp;quot;go to screen&amp;quot; command and attach to it this collection of parameters.&lt;br /&gt;
&lt;br /&gt;
AllScreens.h header file contains inline definitions for wrapper command classes (SCREEN_* classes) which allow you to send a &amp;quot;go to screen&amp;quot; command with additional parameters, without creating the message &amp;quot;by hand&amp;quot;. An example:&lt;br /&gt;
[[Image:Screen_wrapper_class.PNG]]&lt;br /&gt;
&lt;br /&gt;
From other application, the class can be used like this:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;SCREEN_SingleCameraViewOnly screenSingleCameraViewOnly(DeviceIDFrom, DeviceIDTo, iPK_Device);&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;SendCommand(screenSingleCameraViewOnly);&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ScreenHandler class is derived from ScreenHandlerBase class. The ScreenHandlerBase has a basing implementation for each &#039;&#039;screen&#039;&#039;, like this:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;virtual void SCREEN_QuadViewCameras(long PK_Screen, string sList_PK_Device){ GotoScreen(PK_Screen); }&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ScreenHandlerBase already demultiplexes each &amp;quot;go to screen&amp;quot; command and calls the right SCREEN_* method and also deserializes the command parameters. In order to add extrafunctionality for that screen, you will need to derive that virtual method in ScreenHandler class (for screens available for all orbiter) or OSDScreenHandler class (which has the handlers only for linux OSD Orbiter).&lt;br /&gt;
&lt;br /&gt;
== ScreenHandler and how to register a callback ==&lt;br /&gt;
&lt;br /&gt;
Once you have derivated a SCREEN method in a ScreenHandlerBase&#039;s derived class, you may register few callbacks. &lt;br /&gt;
So far, this is the list with callback types you can register:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enum CallBackType&lt;br /&gt;
{&lt;br /&gt;
    cbUnused,&lt;br /&gt;
    cbDataGridSelected,&lt;br /&gt;
    cbObjectSelected,&lt;br /&gt;
    cbOnDialogCreate,   // create a unique dialog&lt;br /&gt;
    cbOnDialogDelete,   // close dialog without saving data&lt;br /&gt;
    cbOnDialogRefresh,  // refresh dialog with new data&lt;br /&gt;
    cbOnDialogSave,     // save data from dialog&lt;br /&gt;
    cbOnDialogWaitUser, // wait for an user action&lt;br /&gt;
    cbOnKeyDown,&lt;br /&gt;
    cbOnKeyUp,&lt;br /&gt;
    cbOnMouseDown,&lt;br /&gt;
    cbOnMouseUp,&lt;br /&gt;
    cbCapturedKeyboardBufferChanged,&lt;br /&gt;
    cbOnTimer,&lt;br /&gt;
    cbMessageIntercepted,&lt;br /&gt;
    cbOnRenderScreen,&lt;br /&gt;
    cbOnGotoScreen&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For each type of callback, your registered callback can be notified when an event is fired with extra data. That extra data is actually a derived class from CallBackData class.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s say we want to register a callback for &amp;quot;orbiter selected&amp;quot; event in SCREEN_CountryWizard method. We&#039;ll do something like this:&lt;br /&gt;
&lt;br /&gt;
[[Image:Screenhandler_method.PNG]]&lt;br /&gt;
&lt;br /&gt;
where :&lt;br /&gt;
&lt;br /&gt;
[[Image:Callback_function_sample.PNG]]&lt;br /&gt;
&lt;br /&gt;
First time an event is fired, the registered callbacks of that type are executed first and then Orbiter&#039;s code for that event. Returning true in your callback will cancel Orbiter&#039;s code executing. Returning false will make Orbiter continue to process the event executing its internal code.&lt;br /&gt;
&lt;br /&gt;
== How to send tasks to task manager. ==&lt;br /&gt;
&lt;br /&gt;
Task manager is a proxy between Orbiter and wx widgets. Since Orbiter is running in a different thread then wx widgets&#039;s dialogs, we needed a asynchronous method of communicating with WX. &lt;br /&gt;
TaskManager is a thread-safe singleton, which means that only one instance of TaskManager will be available, it can be access from anywhere and it can manager multithreaded requests safetly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Orbiter sends &amp;quot;tasks&amp;quot; to WX via TaskManager. A task has associated info about the dialog type, callback type, callback data and a task id (which is generated and managed by TaskManager). To do this, there are two methods in TaskManager :&lt;br /&gt;
&lt;br /&gt;
void AddTask(Task *Event);&lt;br /&gt;
void AddTaskAndWait(Task *Event);&lt;br /&gt;
&lt;br /&gt;
AddTask allows you to send info to WX asynchronously. AddTaskAndWait allows you to send info to WX synchronously. Once the task is added in the queue, a conditional wait is made in the queue and when a task is processed, it wakes up and verifies if the task with the id added was processed or not. If yes, the method returns.&lt;br /&gt;
&lt;br /&gt;
To create a task, you&#039;ll have to use TaskManager&#039;s CreateTask method.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take an example:&lt;br /&gt;
&lt;br /&gt;
To create a &amp;quot;speed control&amp;quot; wxdialog, we&#039;ll do a :&lt;br /&gt;
&lt;br /&gt;
SpeedControlCallBackData *pSpeedControlData = new SpeedControlCallBackData(plutoRect);&lt;br /&gt;
&lt;br /&gt;
Task *pTask = TaskManager::Instance().CreateTask(cbOnDialogCreate, E_Dialog_SpeedControl, pSpeedControlData);&lt;br /&gt;
&lt;br /&gt;
TaskManager::Instance().AddTaskAndWait(pTask);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To delete the dialog, we&#039;ll use cbOnDialogDelete callback type and to refresh, cbOnDialogRefresh.&lt;br /&gt;
If we want to now there to create and delete the dialog, we may want to create a screen for the parent object of wx control and register callbacks in overriden SCREEN_* method from the screen handler class like this:&lt;br /&gt;
&lt;br /&gt;
RegisterCallBack( cbOnDialogCreate, (ScreenHandlerCallBack)&amp;amp;OSDScreenHandler::SpeedControlCreate, new PositionCallBackData() );&lt;br /&gt;
&lt;br /&gt;
RegisterCallBack( cbOnDialogDelete, (ScreenHandlerCallBack)&amp;amp;OSDScreenHandler::SpeedControlDelete, new PositionCallBackData() );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The new UI will allows you to manage wx widget&#039;s dialog as popups, via PopupManager class. ***comming soon***&lt;/div&gt;</summary>
		<author><name>T0ny</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=Integrating_custom_controls_in_Orbiter&amp;diff=3704</id>
		<title>Integrating custom controls in Orbiter</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=Integrating_custom_controls_in_Orbiter&amp;diff=3704"/>
		<updated>2007-03-25T04:31:17Z</updated>

		<summary type="html">&lt;p&gt;T0ny: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Plutoperm}}&lt;br /&gt;
&lt;br /&gt;
== The concept of screen in Orbiter ==&lt;br /&gt;
A &#039;&#039;DesignObj&#039;&#039; is a graphic object from Orbiter. Each &#039;&#039;DesignObj&#039;&#039; may be a collection of &#039;&#039;DesignObj&#039;&#039; children and so on. A parent &#039;&#039;DesignObj&#039;&#039; can be associated with a &#039;&#039;screen&#039;&#039;, which gives the programmer the possibility to do custom additional actions with that &#039;&#039;DesignObj&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== How to associate a &#039;&#039;DesignObj&#039;&#039; to a &#039;&#039;screen&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
Once the parent &#039;&#039;design object&#039;&#039; is created with the Designer, go in &#039;&#039;pluto_main&#039;&#039; database and insert into &#039;&#039;Screen&#039;&#039; table a record with a description and few comments about the new screen. Then check Screen_DesignObj table and add a recording to link the screen with the designobj. You might also want to specify the UI and the Skin.&lt;br /&gt;
&lt;br /&gt;
=== How to use ScreenGen to regenerate screens and how to use it ===&lt;br /&gt;
&lt;br /&gt;
Run ScreenGen with &#039;&#039;-h &amp;lt;host&amp;gt;&#039;&#039; command line parameter and you should see in src/Gen_Devices/AllScreens.h that handlers for your need screens were added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Let&#039;s say your screen has PK_Screen = 39, with the description &amp;quot;Computing&amp;quot;:&lt;br /&gt;
[[Image:A_record_from_screen_table.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In Screen_DesignObj, you should have something like this:&lt;br /&gt;
[[Image:records_from_screen_designobj.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== Understand AllScreens.h and ScreenHandlerBase class. ===&lt;br /&gt;
&lt;br /&gt;
There is another table in the database, &#039;&#039;Screen_CommandParameter&#039;&#039; which allows you to associate a screen with a collection of command parameters. This means you can send a &amp;quot;go to screen&amp;quot; command and attach to it this collection of parameters.&lt;br /&gt;
&lt;br /&gt;
AllScreens.h header file contains inline definitions for wrapper command classes (SCREEN_* classes) which allow you to send a &amp;quot;go to screen&amp;quot; command with additional parameters, without creating the message &amp;quot;by hand&amp;quot;. An example:&lt;br /&gt;
[[Image:Screen_wrapper_class.PNG]]&lt;br /&gt;
&lt;br /&gt;
From other application, the class can be used like this:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;SCREEN_SingleCameraViewOnly screenSingleCameraViewOnly(DeviceIDFrom, DeviceIDTo, iPK_Device);&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;SendCommand(screenSingleCameraViewOnly);&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ScreenHandler class is derived from ScreenHandlerBase class. The ScreenHandlerBase has a basing implementation for each &#039;&#039;screen&#039;&#039;, like this:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;virtual void SCREEN_QuadViewCameras(long PK_Screen, string sList_PK_Device){ GotoScreen(PK_Screen); }&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ScreenHandlerBase already demultiplexes each &amp;quot;go to screen&amp;quot; command and calls the right SCREEN_* method and also deserializes the command parameters. In order to add extrafunctionality for that screen, you will need to derive that virtual method in ScreenHandler class (for screens available for all orbiter) or OSDScreenHandler class (which has the handlers only for linux OSD Orbiter).&lt;br /&gt;
&lt;br /&gt;
== ScreenHandler and how to register a callback ==&lt;br /&gt;
&lt;br /&gt;
Once you have derivated a SCREEN method in a ScreenHandlerBase&#039;s derived class, you may register few callbacks. &lt;br /&gt;
So far, this is the list with callback types you can register:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enum CallBackType&lt;br /&gt;
{&lt;br /&gt;
    cbUnused,&lt;br /&gt;
    cbDataGridSelected,&lt;br /&gt;
    cbObjectSelected,&lt;br /&gt;
    cbOnDialogCreate,   // create a unique dialog&lt;br /&gt;
    cbOnDialogDelete,   // close dialog without saving data&lt;br /&gt;
    cbOnDialogRefresh,  // refresh dialog with new data&lt;br /&gt;
    cbOnDialogSave,     // save data from dialog&lt;br /&gt;
    cbOnDialogWaitUser, // wait for an user action&lt;br /&gt;
    cbOnKeyDown,&lt;br /&gt;
    cbOnKeyUp,&lt;br /&gt;
    cbOnMouseDown,&lt;br /&gt;
    cbOnMouseUp,&lt;br /&gt;
    cbCapturedKeyboardBufferChanged,&lt;br /&gt;
    cbOnTimer,&lt;br /&gt;
    cbMessageIntercepted,&lt;br /&gt;
    cbOnRenderScreen,&lt;br /&gt;
    cbOnGotoScreen&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For each type of callback, your registered callback can be notified when an event is fired with extra data. That extra data is actually a derived class from CallBackData class.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s say we want to register a callback for &amp;quot;orbiter selected&amp;quot; event in SCREEN_CountryWizard method. We&#039;ll do something like this:&lt;br /&gt;
&lt;br /&gt;
[[Image:Screenhandler_method.PNG]]&lt;br /&gt;
&lt;br /&gt;
where :&lt;br /&gt;
&lt;br /&gt;
[[Image:Callback_function_sample.PNG]]&lt;br /&gt;
&lt;br /&gt;
First time an event is fired, the registered callbacks of that type are executed first and then Orbiter&#039;s code for that event. Returning true in your callback will cancel Orbiter&#039;s code executing. Returning false will make Orbiter continue to process the event executing its internal code.&lt;br /&gt;
&lt;br /&gt;
== How to send tasks to task manager. ==&lt;br /&gt;
&lt;br /&gt;
Task manager is a proxy between Orbiter and wx widgets. Since Orbiter is running in a different thread then wx widgets&#039;s dialogs, we needed a asynchronous method of communicating with WX. &lt;br /&gt;
TaskManager is a thread-safe singleton, which means that only one instance of TaskManager will be available, it can be access from anywhere and it can manager multithreaded requests safetly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Orbiter sends &amp;quot;tasks&amp;quot; to WX via TaskManager. A task has associated info about the dialog type, callback type, callback data and a task id (which is generated and managed by TaskManager). To do this, there are two methods in TaskManager :&lt;br /&gt;
&lt;br /&gt;
void AddTask(Task *Event);&lt;br /&gt;
void AddTaskAndWait(Task *Event);&lt;br /&gt;
&lt;br /&gt;
AddTask allows you to send info to WX asynchronously. AddTaskAndWait allows you to send info to WX synchronously. Once the task is added in the queue, a conditional wait is made in the queue and when a task is processed, it wakes up and verifies if the task with the id added was processed or not. If yes, the method returns.&lt;br /&gt;
&lt;br /&gt;
To create a task, you&#039;ll have to use TaskManager&#039;s CreateTask method.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take an example:&lt;br /&gt;
&lt;br /&gt;
To create a &amp;quot;speed control&amp;quot; wxdialog, we&#039;ll do a :&lt;br /&gt;
&lt;br /&gt;
SpeedControlCallBackData *pSpeedControlData = new SpeedControlCallBackData(plutoRect);&lt;br /&gt;
&lt;br /&gt;
Task *pTask = TaskManager::Instance().CreateTask(cbOnDialogCreate, E_Dialog_SpeedControl, pSpeedControlData);&lt;br /&gt;
&lt;br /&gt;
TaskManager::Instance().AddTaskAndWait(pTask);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To delete the dialog, we&#039;ll use cbOnDialogDelete callback type and to refresh, cbOnDialogRefresh.&lt;br /&gt;
If we want to now there to create and delete the dialog, we may want to create a screen for the parent object of wx control and register callbacks in overriden SCREEN_* method from the screen handler class like this:&lt;br /&gt;
&lt;br /&gt;
RegisterCallBack( cbOnDialogCreate, (ScreenHandlerCallBack)&amp;amp;OSDScreenHandler::SpeedControlCreate, new PositionCallBackData() );&lt;br /&gt;
&lt;br /&gt;
RegisterCallBack( cbOnDialogDelete, (ScreenHandlerCallBack)&amp;amp;OSDScreenHandler::SpeedControlDelete, new PositionCallBackData() );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The new UI will allows you to manage wx widget&#039;s dialog as popups, via PopupManager class. ***comming soon***&lt;/div&gt;</summary>
		<author><name>T0ny</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=WebDT_366&amp;diff=3703</id>
		<title>WebDT 366</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=WebDT_366&amp;diff=3703"/>
		<updated>2007-03-25T04:31:01Z</updated>

		<summary type="html">&lt;p&gt;T0ny: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Plutoperm}}&lt;br /&gt;
[[Image:WebDT366.jpg]]&lt;br /&gt;
&lt;br /&gt;
[http://dtresearch.com/prod_webDT366.html Official site]&lt;br /&gt;
&lt;br /&gt;
- Windows® Embedded and Windows XP with Windows Media Player and Internet Explorer; ICA &amp;amp; RDP Terminal clients; Terminal Emulation software &amp;lt;br&amp;gt;&lt;br /&gt;
- Compatible with Windows CE or Windows XP applications &amp;lt;br&amp;gt;&lt;br /&gt;
- Brilliant 8.4&amp;quot; TFT Active Matrix LCD at 800 x 600 SVGA resolution &amp;lt;br&amp;gt;&lt;br /&gt;
- Integrated touch screen display with &amp;quot;on screen&amp;quot; soft keyboard support &amp;lt;br&amp;gt;&lt;br /&gt;
- CompactFlash™ slot; PC Card slot; USB port &amp;lt;br&amp;gt;&lt;br /&gt;
- Built-in HDD, 802.11 b/g WLAN adapter and Bluetooth available &amp;lt;br&amp;gt;&lt;br /&gt;
- Full 16-bit audio with stereo; headset jack; built-in stereo speakers and microphone&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Price: $1800&lt;/div&gt;</summary>
		<author><name>T0ny</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=Template:Plutoperm&amp;diff=3702</id>
		<title>Template:Plutoperm</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=Template:Plutoperm&amp;diff=3702"/>
		<updated>2007-03-25T04:30:42Z</updated>

		<summary type="html">&lt;p&gt;T0ny: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&#039;&#039;&#039;Example:&#039;&#039;&#039;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{| style=&amp;quot;background: #FFCFCF; border: 1px dotted black;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|This page was written by Pluto and imported with their permission when LinuxMCE branched off in February, 2007.  In general any information should apply to LinuxMCE.  However, this page should be edited to reflect changes to LinuxMCE and remove old references to Pluto.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>T0ny</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=Template:Plutoperm&amp;diff=3701</id>
		<title>Template:Plutoperm</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=Template:Plutoperm&amp;diff=3701"/>
		<updated>2007-03-25T04:30:30Z</updated>

		<summary type="html">&lt;p&gt;T0ny: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&#039;&#039;&#039;Example:&#039;&#039;&#039;&amp;lt;/noinclude&amp;gt;{| style=&amp;quot;background: #FFCFCF; border: 1px dotted black;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|This page was written by Pluto and imported with their permission when LinuxMCE branched off in February, 2007.  In general any information should apply to LinuxMCE.  However, this page should be edited to reflect changes to LinuxMCE and remove old references to Pluto.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>T0ny</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=WebDT_366&amp;diff=3700</id>
		<title>WebDT 366</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=WebDT_366&amp;diff=3700"/>
		<updated>2007-03-25T04:28:02Z</updated>

		<summary type="html">&lt;p&gt;T0ny: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;background: #FFCFCF;&amp;quot;&lt;br /&gt;
|This page was written by Pluto and imported with their permission when LinuxMCE branched off in February, 2007.  In general any information should apply to LinuxMCE.  However, this page should be edited to reflect changes to LinuxMCE and remove old references to Pluto.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Image:WebDT366.jpg]]&lt;br /&gt;
&lt;br /&gt;
[http://dtresearch.com/prod_webDT366.html Official site]&lt;br /&gt;
&lt;br /&gt;
- Windows® Embedded and Windows XP with Windows Media Player and Internet Explorer; ICA &amp;amp; RDP Terminal clients; Terminal Emulation software &amp;lt;br&amp;gt;&lt;br /&gt;
- Compatible with Windows CE or Windows XP applications &amp;lt;br&amp;gt;&lt;br /&gt;
- Brilliant 8.4&amp;quot; TFT Active Matrix LCD at 800 x 600 SVGA resolution &amp;lt;br&amp;gt;&lt;br /&gt;
- Integrated touch screen display with &amp;quot;on screen&amp;quot; soft keyboard support &amp;lt;br&amp;gt;&lt;br /&gt;
- CompactFlash™ slot; PC Card slot; USB port &amp;lt;br&amp;gt;&lt;br /&gt;
- Built-in HDD, 802.11 b/g WLAN adapter and Bluetooth available &amp;lt;br&amp;gt;&lt;br /&gt;
- Full 16-bit audio with stereo; headset jack; built-in stereo speakers and microphone&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Price: $1800&lt;/div&gt;</summary>
		<author><name>T0ny</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=Integrating_custom_controls_in_Orbiter&amp;diff=3698</id>
		<title>Integrating custom controls in Orbiter</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=Integrating_custom_controls_in_Orbiter&amp;diff=3698"/>
		<updated>2007-03-25T04:25:51Z</updated>

		<summary type="html">&lt;p&gt;T0ny: /* ScreenHandler and how to register a callback */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;background: #FFCFCF; border: 1px dotted black;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|This page was written by Pluto and imported with their permission when LinuxMCE branched off in February, 2007.  In general any information should apply to LinuxMCE.  However, this page should be edited to reflect changes to LinuxMCE and remove old references to Pluto.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The concept of screen in Orbiter ==&lt;br /&gt;
A &#039;&#039;DesignObj&#039;&#039; is a graphic object from Orbiter. Each &#039;&#039;DesignObj&#039;&#039; may be a collection of &#039;&#039;DesignObj&#039;&#039; children and so on. A parent &#039;&#039;DesignObj&#039;&#039; can be associated with a &#039;&#039;screen&#039;&#039;, which gives the programmer the possibility to do custom additional actions with that &#039;&#039;DesignObj&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== How to associate a &#039;&#039;DesignObj&#039;&#039; to a &#039;&#039;screen&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
Once the parent &#039;&#039;design object&#039;&#039; is created with the Designer, go in &#039;&#039;pluto_main&#039;&#039; database and insert into &#039;&#039;Screen&#039;&#039; table a record with a description and few comments about the new screen. Then check Screen_DesignObj table and add a recording to link the screen with the designobj. You might also want to specify the UI and the Skin.&lt;br /&gt;
&lt;br /&gt;
=== How to use ScreenGen to regenerate screens and how to use it ===&lt;br /&gt;
&lt;br /&gt;
Run ScreenGen with &#039;&#039;-h &amp;lt;host&amp;gt;&#039;&#039; command line parameter and you should see in src/Gen_Devices/AllScreens.h that handlers for your need screens were added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Let&#039;s say your screen has PK_Screen = 39, with the description &amp;quot;Computing&amp;quot;:&lt;br /&gt;
[[Image:A_record_from_screen_table.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In Screen_DesignObj, you should have something like this:&lt;br /&gt;
[[Image:records_from_screen_designobj.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== Understand AllScreens.h and ScreenHandlerBase class. ===&lt;br /&gt;
&lt;br /&gt;
There is another table in the database, &#039;&#039;Screen_CommandParameter&#039;&#039; which allows you to associate a screen with a collection of command parameters. This means you can send a &amp;quot;go to screen&amp;quot; command and attach to it this collection of parameters.&lt;br /&gt;
&lt;br /&gt;
AllScreens.h header file contains inline definitions for wrapper command classes (SCREEN_* classes) which allow you to send a &amp;quot;go to screen&amp;quot; command with additional parameters, without creating the message &amp;quot;by hand&amp;quot;. An example:&lt;br /&gt;
[[Image:Screen_wrapper_class.PNG]]&lt;br /&gt;
&lt;br /&gt;
From other application, the class can be used like this:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;SCREEN_SingleCameraViewOnly screenSingleCameraViewOnly(DeviceIDFrom, DeviceIDTo, iPK_Device);&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;SendCommand(screenSingleCameraViewOnly);&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ScreenHandler class is derived from ScreenHandlerBase class. The ScreenHandlerBase has a basing implementation for each &#039;&#039;screen&#039;&#039;, like this:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;virtual void SCREEN_QuadViewCameras(long PK_Screen, string sList_PK_Device){ GotoScreen(PK_Screen); }&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ScreenHandlerBase already demultiplexes each &amp;quot;go to screen&amp;quot; command and calls the right SCREEN_* method and also deserializes the command parameters. In order to add extrafunctionality for that screen, you will need to derive that virtual method in ScreenHandler class (for screens available for all orbiter) or OSDScreenHandler class (which has the handlers only for linux OSD Orbiter).&lt;br /&gt;
&lt;br /&gt;
== ScreenHandler and how to register a callback ==&lt;br /&gt;
&lt;br /&gt;
Once you have derivated a SCREEN method in a ScreenHandlerBase&#039;s derived class, you may register few callbacks. &lt;br /&gt;
So far, this is the list with callback types you can register:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enum CallBackType&lt;br /&gt;
{&lt;br /&gt;
    cbUnused,&lt;br /&gt;
    cbDataGridSelected,&lt;br /&gt;
    cbObjectSelected,&lt;br /&gt;
    cbOnDialogCreate,   // create a unique dialog&lt;br /&gt;
    cbOnDialogDelete,   // close dialog without saving data&lt;br /&gt;
    cbOnDialogRefresh,  // refresh dialog with new data&lt;br /&gt;
    cbOnDialogSave,     // save data from dialog&lt;br /&gt;
    cbOnDialogWaitUser, // wait for an user action&lt;br /&gt;
    cbOnKeyDown,&lt;br /&gt;
    cbOnKeyUp,&lt;br /&gt;
    cbOnMouseDown,&lt;br /&gt;
    cbOnMouseUp,&lt;br /&gt;
    cbCapturedKeyboardBufferChanged,&lt;br /&gt;
    cbOnTimer,&lt;br /&gt;
    cbMessageIntercepted,&lt;br /&gt;
    cbOnRenderScreen,&lt;br /&gt;
    cbOnGotoScreen&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For each type of callback, your registered callback can be notified when an event is fired with extra data. That extra data is actually a derived class from CallBackData class.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s say we want to register a callback for &amp;quot;orbiter selected&amp;quot; event in SCREEN_CountryWizard method. We&#039;ll do something like this:&lt;br /&gt;
&lt;br /&gt;
[[Image:Screenhandler_method.PNG]]&lt;br /&gt;
&lt;br /&gt;
where :&lt;br /&gt;
&lt;br /&gt;
[[Image:Callback_function_sample.PNG]]&lt;br /&gt;
&lt;br /&gt;
First time an event is fired, the registered callbacks of that type are executed first and then Orbiter&#039;s code for that event. Returning true in your callback will cancel Orbiter&#039;s code executing. Returning false will make Orbiter continue to process the event executing its internal code.&lt;br /&gt;
&lt;br /&gt;
== How to send tasks to task manager. ==&lt;br /&gt;
&lt;br /&gt;
Task manager is a proxy between Orbiter and wx widgets. Since Orbiter is running in a different thread then wx widgets&#039;s dialogs, we needed a asynchronous method of communicating with WX. &lt;br /&gt;
TaskManager is a thread-safe singleton, which means that only one instance of TaskManager will be available, it can be access from anywhere and it can manager multithreaded requests safetly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Orbiter sends &amp;quot;tasks&amp;quot; to WX via TaskManager. A task has associated info about the dialog type, callback type, callback data and a task id (which is generated and managed by TaskManager). To do this, there are two methods in TaskManager :&lt;br /&gt;
&lt;br /&gt;
void AddTask(Task *Event);&lt;br /&gt;
void AddTaskAndWait(Task *Event);&lt;br /&gt;
&lt;br /&gt;
AddTask allows you to send info to WX asynchronously. AddTaskAndWait allows you to send info to WX synchronously. Once the task is added in the queue, a conditional wait is made in the queue and when a task is processed, it wakes up and verifies if the task with the id added was processed or not. If yes, the method returns.&lt;br /&gt;
&lt;br /&gt;
To create a task, you&#039;ll have to use TaskManager&#039;s CreateTask method.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take an example:&lt;br /&gt;
&lt;br /&gt;
To create a &amp;quot;speed control&amp;quot; wxdialog, we&#039;ll do a :&lt;br /&gt;
&lt;br /&gt;
SpeedControlCallBackData *pSpeedControlData = new SpeedControlCallBackData(plutoRect);&lt;br /&gt;
&lt;br /&gt;
Task *pTask = TaskManager::Instance().CreateTask(cbOnDialogCreate, E_Dialog_SpeedControl, pSpeedControlData);&lt;br /&gt;
&lt;br /&gt;
TaskManager::Instance().AddTaskAndWait(pTask);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To delete the dialog, we&#039;ll use cbOnDialogDelete callback type and to refresh, cbOnDialogRefresh.&lt;br /&gt;
If we want to now there to create and delete the dialog, we may want to create a screen for the parent object of wx control and register callbacks in overriden SCREEN_* method from the screen handler class like this:&lt;br /&gt;
&lt;br /&gt;
RegisterCallBack( cbOnDialogCreate, (ScreenHandlerCallBack)&amp;amp;OSDScreenHandler::SpeedControlCreate, new PositionCallBackData() );&lt;br /&gt;
&lt;br /&gt;
RegisterCallBack( cbOnDialogDelete, (ScreenHandlerCallBack)&amp;amp;OSDScreenHandler::SpeedControlDelete, new PositionCallBackData() );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The new UI will allows you to manage wx widget&#039;s dialog as popups, via PopupManager class. ***comming soon***&lt;/div&gt;</summary>
		<author><name>T0ny</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=Integrating_custom_controls_in_Orbiter&amp;diff=3697</id>
		<title>Integrating custom controls in Orbiter</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=Integrating_custom_controls_in_Orbiter&amp;diff=3697"/>
		<updated>2007-03-25T04:25:23Z</updated>

		<summary type="html">&lt;p&gt;T0ny: Converted table to wiki from html&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;background: #FFCFCF; border: 1px dotted black;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|This page was written by Pluto and imported with their permission when LinuxMCE branched off in February, 2007.  In general any information should apply to LinuxMCE.  However, this page should be edited to reflect changes to LinuxMCE and remove old references to Pluto.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The concept of screen in Orbiter ==&lt;br /&gt;
A &#039;&#039;DesignObj&#039;&#039; is a graphic object from Orbiter. Each &#039;&#039;DesignObj&#039;&#039; may be a collection of &#039;&#039;DesignObj&#039;&#039; children and so on. A parent &#039;&#039;DesignObj&#039;&#039; can be associated with a &#039;&#039;screen&#039;&#039;, which gives the programmer the possibility to do custom additional actions with that &#039;&#039;DesignObj&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== How to associate a &#039;&#039;DesignObj&#039;&#039; to a &#039;&#039;screen&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
Once the parent &#039;&#039;design object&#039;&#039; is created with the Designer, go in &#039;&#039;pluto_main&#039;&#039; database and insert into &#039;&#039;Screen&#039;&#039; table a record with a description and few comments about the new screen. Then check Screen_DesignObj table and add a recording to link the screen with the designobj. You might also want to specify the UI and the Skin.&lt;br /&gt;
&lt;br /&gt;
=== How to use ScreenGen to regenerate screens and how to use it ===&lt;br /&gt;
&lt;br /&gt;
Run ScreenGen with &#039;&#039;-h &amp;lt;host&amp;gt;&#039;&#039; command line parameter and you should see in src/Gen_Devices/AllScreens.h that handlers for your need screens were added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Let&#039;s say your screen has PK_Screen = 39, with the description &amp;quot;Computing&amp;quot;:&lt;br /&gt;
[[Image:A_record_from_screen_table.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In Screen_DesignObj, you should have something like this:&lt;br /&gt;
[[Image:records_from_screen_designobj.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== Understand AllScreens.h and ScreenHandlerBase class. ===&lt;br /&gt;
&lt;br /&gt;
There is another table in the database, &#039;&#039;Screen_CommandParameter&#039;&#039; which allows you to associate a screen with a collection of command parameters. This means you can send a &amp;quot;go to screen&amp;quot; command and attach to it this collection of parameters.&lt;br /&gt;
&lt;br /&gt;
AllScreens.h header file contains inline definitions for wrapper command classes (SCREEN_* classes) which allow you to send a &amp;quot;go to screen&amp;quot; command with additional parameters, without creating the message &amp;quot;by hand&amp;quot;. An example:&lt;br /&gt;
[[Image:Screen_wrapper_class.PNG]]&lt;br /&gt;
&lt;br /&gt;
From other application, the class can be used like this:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;SCREEN_SingleCameraViewOnly screenSingleCameraViewOnly(DeviceIDFrom, DeviceIDTo, iPK_Device);&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;SendCommand(screenSingleCameraViewOnly);&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ScreenHandler class is derived from ScreenHandlerBase class. The ScreenHandlerBase has a basing implementation for each &#039;&#039;screen&#039;&#039;, like this:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;virtual void SCREEN_QuadViewCameras(long PK_Screen, string sList_PK_Device){ GotoScreen(PK_Screen); }&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ScreenHandlerBase already demultiplexes each &amp;quot;go to screen&amp;quot; command and calls the right SCREEN_* method and also deserializes the command parameters. In order to add extrafunctionality for that screen, you will need to derive that virtual method in ScreenHandler class (for screens available for all orbiter) or OSDScreenHandler class (which has the handlers only for linux OSD Orbiter).&lt;br /&gt;
&lt;br /&gt;
== ScreenHandler and how to register a callback ==&lt;br /&gt;
&lt;br /&gt;
Once you have derivated a SCREEN method in a ScreenHandlerBase&#039;s derived class, you may register few callbacks. &lt;br /&gt;
So far, this is the list with callback types you can register:&lt;br /&gt;
&lt;br /&gt;
enum CallBackType&lt;br /&gt;
{&lt;br /&gt;
    cbUnused,&lt;br /&gt;
    cbDataGridSelected,&lt;br /&gt;
    cbObjectSelected,&lt;br /&gt;
    cbOnDialogCreate,   // create a unique dialog&lt;br /&gt;
    cbOnDialogDelete,   // close dialog without saving data&lt;br /&gt;
    cbOnDialogRefresh,  // refresh dialog with new data&lt;br /&gt;
    cbOnDialogSave,     // save data from dialog&lt;br /&gt;
    cbOnDialogWaitUser, // wait for an user action&lt;br /&gt;
    cbOnKeyDown,&lt;br /&gt;
    cbOnKeyUp,&lt;br /&gt;
    cbOnMouseDown,&lt;br /&gt;
    cbOnMouseUp,&lt;br /&gt;
    cbCapturedKeyboardBufferChanged,&lt;br /&gt;
    cbOnTimer,&lt;br /&gt;
    cbMessageIntercepted,&lt;br /&gt;
    cbOnRenderScreen,&lt;br /&gt;
    cbOnGotoScreen&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
For each type of callback, your registered callback can be notified when an event is fired with extra data. That extra data is actually a derived class from CallBackData class.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s say we want to register a callback for &amp;quot;orbiter selected&amp;quot; event in SCREEN_CountryWizard method. We&#039;ll do something like this:&lt;br /&gt;
&lt;br /&gt;
[[Image:Screenhandler_method.PNG]]&lt;br /&gt;
&lt;br /&gt;
where :&lt;br /&gt;
&lt;br /&gt;
[[Image:Callback_function_sample.PNG]]&lt;br /&gt;
&lt;br /&gt;
First time an event is fired, the registered callbacks of that type are executed first and then Orbiter&#039;s code for that event. Returning true in your callback will cancel Orbiter&#039;s code executing. Returning false will make Orbiter continue to process the event executing its internal code.&lt;br /&gt;
&lt;br /&gt;
== How to send tasks to task manager. ==&lt;br /&gt;
&lt;br /&gt;
Task manager is a proxy between Orbiter and wx widgets. Since Orbiter is running in a different thread then wx widgets&#039;s dialogs, we needed a asynchronous method of communicating with WX. &lt;br /&gt;
TaskManager is a thread-safe singleton, which means that only one instance of TaskManager will be available, it can be access from anywhere and it can manager multithreaded requests safetly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Orbiter sends &amp;quot;tasks&amp;quot; to WX via TaskManager. A task has associated info about the dialog type, callback type, callback data and a task id (which is generated and managed by TaskManager). To do this, there are two methods in TaskManager :&lt;br /&gt;
&lt;br /&gt;
void AddTask(Task *Event);&lt;br /&gt;
void AddTaskAndWait(Task *Event);&lt;br /&gt;
&lt;br /&gt;
AddTask allows you to send info to WX asynchronously. AddTaskAndWait allows you to send info to WX synchronously. Once the task is added in the queue, a conditional wait is made in the queue and when a task is processed, it wakes up and verifies if the task with the id added was processed or not. If yes, the method returns.&lt;br /&gt;
&lt;br /&gt;
To create a task, you&#039;ll have to use TaskManager&#039;s CreateTask method.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Let&#039;s take an example:&lt;br /&gt;
&lt;br /&gt;
To create a &amp;quot;speed control&amp;quot; wxdialog, we&#039;ll do a :&lt;br /&gt;
&lt;br /&gt;
SpeedControlCallBackData *pSpeedControlData = new SpeedControlCallBackData(plutoRect);&lt;br /&gt;
&lt;br /&gt;
Task *pTask = TaskManager::Instance().CreateTask(cbOnDialogCreate, E_Dialog_SpeedControl, pSpeedControlData);&lt;br /&gt;
&lt;br /&gt;
TaskManager::Instance().AddTaskAndWait(pTask);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To delete the dialog, we&#039;ll use cbOnDialogDelete callback type and to refresh, cbOnDialogRefresh.&lt;br /&gt;
If we want to now there to create and delete the dialog, we may want to create a screen for the parent object of wx control and register callbacks in overriden SCREEN_* method from the screen handler class like this:&lt;br /&gt;
&lt;br /&gt;
RegisterCallBack( cbOnDialogCreate, (ScreenHandlerCallBack)&amp;amp;OSDScreenHandler::SpeedControlCreate, new PositionCallBackData() );&lt;br /&gt;
&lt;br /&gt;
RegisterCallBack( cbOnDialogDelete, (ScreenHandlerCallBack)&amp;amp;OSDScreenHandler::SpeedControlDelete, new PositionCallBackData() );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The new UI will allows you to manage wx widget&#039;s dialog as popups, via PopupManager class. ***comming soon***&lt;/div&gt;</summary>
		<author><name>T0ny</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=MirrorsOld&amp;diff=3696</id>
		<title>MirrorsOld</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=MirrorsOld&amp;diff=3696"/>
		<updated>2007-03-25T04:19:47Z</updated>

		<summary type="html">&lt;p&gt;T0ny: I added a table, I hope you like.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The md5sum for the LinuxMCE 1.0 Install CD (linuxmce-1.0-packages.iso) is: 0c925976b65ba481271cbb133051fe3a&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse:collapse; border-color:#8eabd0; background:#e7edf5&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: lightsteelblue&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Official Torrent:&lt;br /&gt;
|&lt;br /&gt;
* http://torrents.thepiratebay.org/3646881/linuxmce-1.0-packages.iso.3646881.TPB.torrent&lt;br /&gt;
|-&lt;br /&gt;
!U.S.:&lt;br /&gt;
|&lt;br /&gt;
* [http://www.cyburdinehosting.com/linuxmce/linuxmce-1.0-packages.iso linuxmce-1.0-packages.iso - Cyburdine Hosting CA Data Center]&lt;br /&gt;
* [http://63.228.213.140/linuxmce/linuxmce-1.0-packages.iso linuxmce-1.0-packages.iso - Cyburdine Hosting UT Data Center]&lt;br /&gt;
* http://www.neversfw.com/linux/ (new installer .deb posted)&lt;br /&gt;
* http://www.robogoat.com/rampage/linuxmce/linuxmce-1.0-packages.iso&lt;br /&gt;
|-&lt;br /&gt;
!Australia:&lt;br /&gt;
|&lt;br /&gt;
* http://linuxmce.rtfm.net.au/linuxmce-1.0-packages.iso [Melbourne Australia]&lt;br /&gt;
|-&lt;br /&gt;
!Switzerland:&lt;br /&gt;
|&lt;br /&gt;
* http://mirror.hgkz.ch/ftp/iso/linuxmce/linuxmce-1.0-packages.iso&lt;br /&gt;
* ftp://mirror.hgkz.ch/iso/linuxmce/linuxmce-1.0-packages.iso&lt;br /&gt;
* rsync://mirror.hgkz.ch/linuxmce/&lt;br /&gt;
|-&lt;br /&gt;
!FileFront Mirror:&lt;br /&gt;
|&lt;br /&gt;
* http://hosted.filefront.com/linuxmce/1925781 To help take some load of paid websites...&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>T0ny</name></author>
	</entry>
</feed>