Author: remi
Date: 2009-03-19 16:56:33 +0100 (Thu, 19 Mar 2009)
New Revision: 4153

Added:
   
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/build.py
   
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/builder/
   
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/builder/GadgetPackager.py
   
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/builder/__init__.py
   
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/builder/util/
   
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/builder/util/__init__.py
   
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/builder/util/misc/
   
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/builder/util/misc/DirectoriesAndFilesTools.py
   
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/builder/util/misc/__init__.py
   
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/builder/util/misc/test_DirectoriesAndFilesTools.py
   
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/builder/util/misc/version.py
   
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/builder/version.py
Log:
* added the builder
  $python build.py

Added: 
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/build.py
===================================================================
--- 
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/build.py
                            (rev 0)
+++ 
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/build.py
    2009-03-19 15:56:33 UTC (rev 4153)
@@ -0,0 +1,11 @@
+# -*- coding: utf-8 -*-
+
+#    Copyleft (C) 2009 C2ME Sa
+#    Remi Jocaille <[email protected]>
+#    Distributed under the terms of the GNU General Public License
+#    http://www.gnu.org/copyleft/gpl.html
+
+from builder.GadgetPackager import GadgetPackager
+
+if __name__ == "__main__":
+    GadgetPackager().createTgf("tuxdroid-gadget-webradio.tgf")


Property changes on: 
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/build.py
___________________________________________________________________
Name: svn:keywords
   + Id

Added: 
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/builder/GadgetPackager.py
===================================================================
--- 
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/builder/GadgetPackager.py
                           (rev 0)
+++ 
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/builder/GadgetPackager.py
   2009-03-19 15:56:33 UTC (rev 4153)
@@ -0,0 +1,78 @@
+# -*- coding: utf-8 -*-
+
+import version
+__author__ = version.author
+__date__ = version.date
+__version__ = version.version
+__licence__ = version.licence
+del version
+
+#    Copyleft (C) 2009 C2ME Sa
+#    Remi Jocaille <[email protected]>
+#    Distributed under the terms of the GNU General Public License
+#    http://www.gnu.org/copyleft/gpl.html
+
+import os
+from zipfile import *
+
+from util.misc.DirectoriesAndFilesTools import *
+
+# 
------------------------------------------------------------------------------
+# Class to create a TGF file from the main directory of a python gadget 
project.
+# 
------------------------------------------------------------------------------
+class GadgetPackager(object):
+    """Class to create a TGF file from the main directory of a python gadget
+    project.
+    """
+
+    # 
--------------------------------------------------------------------------
+    # Create a tgf file.
+    # 
--------------------------------------------------------------------------
+    def createTgf(self, tgfFileName):
+        """Create a tgf file.
+        @param tgfFileName: Tux Gadget Format file name.
+        @return: The success of the file creation.
+        """
+        self.__sourcePath = os.path.realpath("")
+        if not os.path.isdir(self.__sourcePath):
+            return False
+        if not os.path.isdir(os.path.join(self.__sourcePath, "executables")):
+            return False
+        if not os.path.isdir(os.path.join(self.__sourcePath, "resources")):
+            return False
+        # Get some paths
+        SRC_EXECUTABLES_PATH = os.path.join(self.__sourcePath, "executables")
+        SRC_RESOURCES_PATH = os.path.join(self.__sourcePath, "resources")
+        TMP_BUILD_PATH = os.path.join(self.__sourcePath, "tmp")
+        DEST_EXECUTABLES_PATH = os.path.join(TMP_BUILD_PATH, "executables")
+        DEST_RESOURCES_PATH = os.path.join(TMP_BUILD_PATH, "resources")
+        DEST_TGF_FILENAME = os.path.join(self.__sourcePath, tgfFileName)
+        # Create the temporary build path
+        MKDirsF(TMP_BUILD_PATH)
+        # Copy "executables" directory
+        CPDir(SRC_EXECUTABLES_PATH, DEST_EXECUTABLES_PATH)
+        # Copy "resources" directory
+        CPDir(SRC_RESOURCES_PATH, DEST_RESOURCES_PATH)
+        # Filtering the content of temporary path
+        RMWithFilters(TMP_BUILD_PATH, filters = ['.svn', '.pyc'])
+        # Create a zip file
+        directory = TMP_BUILD_PATH
+        last_cwd = os.getcwd()
+        os.chdir(TMP_BUILD_PATH)
+        zf = ZipFile(DEST_TGF_FILENAME, 'w', compression = ZIP_DEFLATED)
+        def walker(zip, directory, files, root = directory):
+            for file in files:
+                file = os.path.join(directory, file)
+                name = file[len(TMP_BUILD_PATH) + 1:]
+                if os.path.isfile(file):
+                    zip.write(file, name, ZIP_DEFLATED)
+                elif os.path.isdir(file):
+                    file = os.path.join(file, "")
+                    name = os.path.join(name, "")
+                    zip.writestr(name, name)
+        os.path.walk(TMP_BUILD_PATH, walker, zf)
+        zf.close()
+        os.chdir(os.path.abspath(last_cwd))
+        # Remove the temporary directory
+        RMDirs(TMP_BUILD_PATH)
+        return True


Property changes on: 
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/builder/GadgetPackager.py
___________________________________________________________________
Name: svn:keywords
   + Id

Added: 
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/builder/__init__.py
===================================================================


Property changes on: 
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/builder/__init__.py
___________________________________________________________________
Name: svn:keywords
   + Id

Added: 
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/builder/util/__init__.py
===================================================================


Property changes on: 
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/builder/util/__init__.py
___________________________________________________________________
Name: svn:keywords
   + Id

Added: 
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/builder/util/misc/DirectoriesAndFilesTools.py
===================================================================
--- 
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/builder/util/misc/DirectoriesAndFilesTools.py
                               (rev 0)
+++ 
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/builder/util/misc/DirectoriesAndFilesTools.py
       2009-03-19 15:56:33 UTC (rev 4153)
@@ -0,0 +1,161 @@
+# -*- coding: utf-8 -*-
+
+import version
+__author__ = version.author
+__date__ = version.date
+__version__ = version.version
+__licence__ = version.licence
+del version
+
+#    Copyleft (C) 2008 Acness World
+#    Remi Jocaille <[email protected]>
+#    Distributed under the terms of the GNU General Public License
+#    http://www.gnu.org/copyleft/gpl.html
+
+import os
+import shutil
+
+if os.name == 'nt':
+    import win32con
+    import win32file
+
+# 
==============================================================================
+# Public functions
+# 
==============================================================================
+
+# 
------------------------------------------------------------------------------
+# Force to create a directories tree if not exists.
+# 
------------------------------------------------------------------------------
+def MKDirs(path):
+    """Force to create a directories tree if not exists.
+    @param path: Directory path.
+    """
+    if not os.path.isdir(path):
+        try:
+            os.makedirs(path)
+        except:
+            pass
+
+# 
------------------------------------------------------------------------------
+# Force to create a directories tree after having deleted the old one.
+# 
------------------------------------------------------------------------------
+def MKDirsF(path):
+    """Force to create a directories tree after having deleted the old one.
+    @param path: Directory path.
+    """
+    if os.path.isdir(path):
+        RMDirs(path)
+    os.makedirs(path)
+
+# 
------------------------------------------------------------------------------
+# Remove directories and files recursively.
+# 
------------------------------------------------------------------------------
+def RMDirs(path):
+    """Remove directories and files recursively.
+    @param path: Path of the base directory.
+    """
+    if not os.path.isdir(path):
+        return
+    for root, dirs, files in os.walk(path, topdown = False):
+        for d in dirs:
+            try:
+                os.removedirs(os.path.join(root, d))
+            except:
+                pass
+        for f in files:
+            try:
+                if os.name == 'nt':
+                    win32file.SetFileAttributesW(os.path.join(root, f),
+                        win32con.FILE_ATTRIBUTE_NORMAL)
+                os.remove(os.path.join(root, f))
+            except:
+                pass
+    if os.path.isdir(path):
+        try:
+            os.removedirs(path)
+        except:
+            pass
+
+# 
------------------------------------------------------------------------------
+# Remove directories and files recursively with filters.
+# 
------------------------------------------------------------------------------
+def RMWithFilters(path, filters = ['.pyc', '.pyo']):
+    """Remove directories and files recursively with filters.
+    @param path: Path of the base directory.
+    @param filters: Filters as list.
+    """
+    def checkFilter(name):
+        for filter in filters:
+            if name.lower().find(filter.lower()) == (len(name) - len(filter)):
+                return True
+        return False
+
+    if not os.path.isdir(path):
+        return
+
+    for root, dirs, files in os.walk(path, topdown = False):
+        for d in dirs:
+            if checkFilter(os.path.join(root, d)):
+                try:
+                    RMDirs(os.path.join(root, d))
+                except:
+                    pass
+        for f in files:
+            if checkFilter(os.path.join(root, f)):
+                try:
+                    if os.name == 'nt':
+                        win32file.SetFileAttributesW(os.path.join(root, f),
+                            win32con.FILE_ATTRIBUTE_NORMAL)
+                    os.remove(os.path.join(root, f))
+                except:
+                    pass
+
+# 
------------------------------------------------------------------------------
+# Remove a file.
+# 
------------------------------------------------------------------------------
+def RMFile(path):
+    """Remove a file.
+    @param path: File path.
+    """
+    if os.path.isfile(path):
+        try:
+            if os.name == 'nt':
+                win32file.SetFileAttributesW(path,
+                    win32con.FILE_ATTRIBUTE_NORMAL)
+            os.remove(path)
+        except:
+            pass
+
+# 
------------------------------------------------------------------------------
+# Copy a directories tree to another directory.
+# 
------------------------------------------------------------------------------
+def CPDir(src, dest):
+    """Copy a directories tree to another directory.
+    @param src: Source path.
+    @param dest: Destination path.
+    """
+    if not os.path.isdir(src):
+        return
+    if os.path.isdir(dest):
+        RMDirs(dest)
+    shutil.copytree(src, dest)
+
+# 
------------------------------------------------------------------------------
+# Retrieve the OS temporary directory.
+# 
------------------------------------------------------------------------------
+def GetOSTMPDir():
+    """Retrieve the OS temporary directory.
+    @return: The OS temporary directory.
+    """
+    result = None
+    # On Windows
+    if os.name == 'nt':
+        result = os.environ.get('tmp')
+        if result == None:
+            result = os.environ.get('temp')
+            if result == None:
+                result = "c:\\windows\\temp"
+    # On linux
+    else:
+        result = "/tmp"
+    return result


Property changes on: 
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/builder/util/misc/DirectoriesAndFilesTools.py
___________________________________________________________________
Name: svn:keywords
   + Id

Added: 
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/builder/util/misc/__init__.py
===================================================================


Property changes on: 
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/builder/util/misc/__init__.py
___________________________________________________________________
Name: svn:keywords
   + Id

Added: 
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/builder/util/misc/test_DirectoriesAndFilesTools.py
===================================================================
--- 
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/builder/util/misc/test_DirectoriesAndFilesTools.py
                          (rev 0)
+++ 
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/builder/util/misc/test_DirectoriesAndFilesTools.py
  2009-03-19 15:56:33 UTC (rev 4153)
@@ -0,0 +1,173 @@
+# -*- coding: utf-8 -*-
+
+import version
+__author__ = version.author
+__date__ = version.date
+__version__ = version.version
+__licence__ = version.licence
+del version
+
+#    Copyleft (C) 2008 C2ME Sa
+#    Remi Jocaille <[email protected]>
+#    Distributed under the terms of the GNU General Public License
+#    http://www.gnu.org/copyleft/gpl.html
+
+import unittest
+import os
+
+import DirectoriesAndFilesTools
+
+# 
==============================================================================
+# Public class
+# 
==============================================================================
+
+# 
------------------------------------------------------------------------------
+# A test class for DirectoriesAndFilesTools module.
+# 
------------------------------------------------------------------------------
+class testDirectoriesAndFilesTools(unittest.TestCase):
+    """A test class for DirectoriesAndFilesTools module.
+    """
+
+    # 
--------------------------------------------------------------------------
+    # Initialization.
+    # 
--------------------------------------------------------------------------
+    def setUp(self):
+        """Initialization.
+        """
+        self.tmpDirectory = ""
+
+    # 
--------------------------------------------------------------------------
+    # Test the retrieving of the temporary directory.
+    # 
--------------------------------------------------------------------------
+    def test00GetOSTMPDir(self):
+        """Test the retrieving of the temporary directory.
+        """
+        # Retrieve the temporary directory of the OS.
+        self.tmpDirectory = DirectoriesAndFilesTools.GetOSTMPDir()
+        self.assertNotEqual(self.tmpDirectory, "")
+        # Check the creation of a file in the retrieved directory
+        work = True
+        try:
+            f = open(os.path.join(self.tmpDirectory, "test.tmp"), 'wb')
+            f.write("\n")
+            f.close()
+            os.remove(os.path.join(self.tmpDirectory, "test.tmp"))
+        except:
+            work = False
+        self.assertEqual(work, True)
+
+    # 
--------------------------------------------------------------------------
+    # Test the creation of a new directories tree.
+    # 
--------------------------------------------------------------------------
+    def test01CreateDirectoriesTree(self):
+        """Test the creation of a new directories tree.
+        """
+        # Create a directories tree
+        self.tmpDirectory = DirectoriesAndFilesTools.GetOSTMPDir()
+        extTree = os.path.join(self.tmpDirectory, 'test', 'test2', 'test3')
+        DirectoriesAndFilesTools.MKDirs(extTree)
+        # Check if the last directory exists
+        self.assertTrue(os.path.isdir(extTree))
+        # Create a file
+        try:
+            f = open(os.path.join(extTree, 'myfile.tmp'), 'wb')
+            f.close()
+        except:
+            pass
+        self.assertTrue(os.path.isfile(os.path.join(extTree, 'myfile.tmp')))
+
+    # 
--------------------------------------------------------------------------
+    # Test the creation of a clean directories tree (Erase the old one).
+    # 
--------------------------------------------------------------------------
+    def test02CreateDirectoriesTreeFFS(self):
+        """Test the creation of a clean directories tree (Erase the old one).
+        """
+        # Create a directories tree
+        self.tmpDirectory = DirectoriesAndFilesTools.GetOSTMPDir()
+        extTree = os.path.join(self.tmpDirectory, 'test', 'test2', 'test3')
+        DirectoriesAndFilesTools.MKDirsF(extTree)
+        # Check if the last directory exists
+        self.assertTrue(os.path.isdir(extTree))
+        # Check if the previously created file still exists
+        self.assertFalse(os.path.isfile(os.path.join(extTree, 'myfile.tmp')))
+
+    # 
--------------------------------------------------------------------------
+    # Test the removing of directories and files with a name filter.
+    # 
--------------------------------------------------------------------------
+    def test03RemoveDAFRecWF(self):
+        """Test the removing of directories and files with a name filter.
+        """
+        self.tmpDirectory = DirectoriesAndFilesTools.GetOSTMPDir()
+        extTree = os.path.join(self.tmpDirectory, 'test', 'test2', 'test3')
+        # Create some files
+        try:
+            f = open(os.path.join(extTree, 'myfile.tmp'), 'wb')
+            f.close()
+            f = open(os.path.join(extTree, 'myfile2.tmp'), 'wb')
+            f.close()
+            f = open(os.path.join(extTree, 'myfile.ttt'), 'wb')
+            f.close()
+            f = open(os.path.join(extTree, 'myfile.h'), 'wb')
+            f.close()
+        except:
+            pass
+        self.assertTrue(os.path.isfile(os.path.join(extTree, 'myfile.tmp')))
+        # Create a directory called '.tmp'
+        DirectoriesAndFilesTools.MKDirs(os.path.join(extTree, 'truc.tmp'))
+        self.assertTrue(os.path.isdir(os.path.join(extTree, 'truc.tmp')))
+        # Remove files and directories with 'tmp' extention
+        DirectoriesAndFilesTools.RMWithFilters(extTree, filters = ['.tmp', ])
+        self.assertFalse(os.path.isfile(os.path.join(extTree, 'myfile.tmp')))
+        self.assertFalse(os.path.isfile(os.path.join(extTree, 'myfile2.tmp')))
+        self.assertFalse(os.path.isdir(os.path.join(extTree, 'truc.tmp')))
+        self.assertTrue(os.path.isdir(extTree))
+
+    # 
--------------------------------------------------------------------------
+    # Test the copying of directories tree.
+    # 
--------------------------------------------------------------------------
+    def test04CopyTree(self):
+        """Test the copying of directories tree.
+        """
+        self.tmpDirectory = DirectoriesAndFilesTools.GetOSTMPDir()
+        extTree = os.path.join(self.tmpDirectory, 'test2', 'test2', 'test3')
+        DirectoriesAndFilesTools.CPDir(os.path.join(self.tmpDirectory, 'test'),
+            os.path.join(self.tmpDirectory, 'test2'))
+        self.assertTrue(os.path.isfile(os.path.join(extTree, 'myfile.ttt')))
+
+    # 
--------------------------------------------------------------------------
+    # Test the removing of directories tree with files.
+    # 
--------------------------------------------------------------------------
+    def test05RemoveDAFRec(self):
+        """Test the removing of directories tree with files.
+        """
+        self.tmpDirectory = DirectoriesAndFilesTools.GetOSTMPDir()
+        baseTree = os.path.join(self.tmpDirectory, 'test')
+        DirectoriesAndFilesTools.RMDirs(baseTree)
+        self.assertFalse(os.path.isdir(baseTree))
+        baseTree = os.path.join(self.tmpDirectory, 'test2')
+        DirectoriesAndFilesTools.RMDirs(baseTree)
+        self.assertFalse(os.path.isdir(baseTree))
+
+# 
==============================================================================
+# Public functions
+# 
==============================================================================
+
+# 
------------------------------------------------------------------------------
+# Unitest suite for the module 'DirectoriesAndFilesTools'
+# 
------------------------------------------------------------------------------
+def suite():
+    """Unitest suite for the module 'DirectoriesAndFilesTools'
+    """
+    print "\n" + "".join("=" * 70)
+    print "Test the 'DirectoriesAndFilesTools' Module"
+    print "".join("=" * 70) + "\n"
+
+    suite = unittest.TestSuite()
+    suite.addTest(unittest.makeSuite(testDirectoriesAndFilesTools))
+    return suite
+
+# 
------------------------------------------------------------------------------
+# Main
+# 
------------------------------------------------------------------------------
+if __name__ == '__main__':
+    unittest.TextTestRunner(verbosity=2).run(suite())


Property changes on: 
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/builder/util/misc/test_DirectoriesAndFilesTools.py
___________________________________________________________________
Name: svn:keywords
   + Id

Added: 
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/builder/util/misc/version.py
===================================================================
--- 
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/builder/util/misc/version.py
                                (rev 0)
+++ 
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/builder/util/misc/version.py
        2009-03-19 15:56:33 UTC (rev 4153)
@@ -0,0 +1,19 @@
+# -*- coding: utf-8 -*-
+
+"""Version data for tuxisalive.lib.Util"""
+
+__author__ = "Remi Jocaille ([email protected])"
+
+#    Copyleft (C) 2008 C2ME Sa
+#    Remi Jocaille <[email protected]>
+#    Distributed under the terms of the GNU General Public License
+#    http://www.gnu.org/copyleft/gpl.html
+
+name = 'util.misc'
+version = '0.0.1'
+author = "Remi Jocaille ([email protected])"
+
+description = "Utilities libraries."
+
+licence = "GPL"
+date = "December 2008"


Property changes on: 
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/builder/util/misc/version.py
___________________________________________________________________
Name: svn:keywords
   + Id

Added: 
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/builder/version.py
===================================================================
--- 
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/builder/version.py
                          (rev 0)
+++ 
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/builder/version.py
  2009-03-19 15:56:33 UTC (rev 4153)
@@ -0,0 +1,9 @@
+#    Copyleft (C) 2009 C2ME Sa
+#    Remi Jocaille <[email protected]>
+#    Distributed under the terms of the GNU General Public License
+#    http://www.gnu.org/copyleft/gpl.html
+
+version = '0.0.1'
+author = "Remi Jocaille ([email protected])"
+licence = "GPL"
+date = "2009"


Property changes on: 
software_suite_v2/software/gadgets/tuxdroid-gadget-clockradio/branches/0.0.3-windows-compatible/builder/version.py
___________________________________________________________________
Name: svn:keywords
   + Id


------------------------------------------------------------------------------
Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are
powering Web 2.0 with engaging, cross-platform capabilities. Quickly and
easily build your RIAs with Flex Builder, the Eclipse(TM)based development
software that enables intelligent coding and step-through debugging.
Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
_______________________________________________
Tux-droid-svn mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tux-droid-svn

Reply via email to