]> git.saurik.com Git - wxWidgets.git/blobdiff - src/palmos/utils.cpp
Make the margin between wxSpinCtrlGeneric sub-windows compatible with MSW.
[wxWidgets.git] / src / palmos / utils.cpp
index e35d21ae23058848444dccb2692f7e66873aaea7..d52e90fb352bf56d224999f7845b2de5024b8c8f 100644 (file)
 #include "wx/apptrait.h"
 #include "wx/dynload.h"
 #include "wx/confbase.h"
+#include "wx/power.h"
 
+#include <PalmTypes.h>
 #include <MemoryMgr.h>
 #include <DLServer.h>
 #include <SoundMgr.h>
+#include <SystemMgr.h> // SysDoze()...
 #include <SysUtils.h>
 
+#ifdef __WXPALMOS6__
+extern void SysReset (void);
+extern UInt32 SysTaskID (void);
+#endif
+
 // ============================================================================
 // implementation
 // ============================================================================
@@ -89,7 +97,7 @@ bool wxGetUserName(wxChar *buf, int maxSize)
         return false;
     }
 
-    wxStrncpy (buf, wxConvertMB2WX(id), maxSize - 1);
+    wxStrlcpy(buf, wxSafeConvertMB2WX(id), maxSize);
 
     // free the buffer
     MemPtrUnlock(id);
@@ -99,12 +107,15 @@ bool wxGetUserName(wxChar *buf, int maxSize)
 
 const wxChar* wxGetHomeDir(wxString *pstr)
 {
-    return NULL;
+    if (NULL != pstr) {
+        *pstr = "/palmos";
+    }
+    return wxT("/palmos");
 }
 
-wxChar *wxGetUserHome(const wxString& WXUNUSED(user))
+wxString wxGetUserHome(const wxString& WXUNUSED(user))
 {
-    return NULL;
+    return wxString("/palmos");
 }
 
 bool wxGetDiskSpace(const wxString& path, wxDiskspaceSize_t *pTotal, wxDiskspaceSize_t *pFree)
@@ -121,10 +132,17 @@ bool wxGetEnv(const wxString& var, wxString *value)
     return false;
 }
 
+#if ! WXWIN_COMPATIBILITY_2_8
 bool wxSetEnv(const wxString& var, const wxChar *value)
 {
     return false;
 }
+#endif // ! WXWIN_COMPATIBILITY_2_8
+
+bool wxUnsetEnv(const wxString& var)
+{
+    return false;
+}
 
 // ----------------------------------------------------------------------------
 // process management
@@ -144,18 +162,52 @@ bool wxShell(const wxString& command)
 // Shutdown or reboot the PC
 bool wxShutdown(wxShutdownFlags wFlags)
 {
+    switch (wFlags) {
+    case wxSHUTDOWN_POWEROFF:
+        // TODO: turn off lamps
+#ifdef __WXPALMOS6__
+        //extern void SysReset (void);
+        //extern UInt32 SysTaskID (void);
+        #define SysReset()
+        #define SysTaskID() (0)
+        SysSleep ();
+#else
+        //SysSleep (false, false);// undocument API
+        SysDoze (true);
+#endif
+        break;
+    case wxSHUTDOWN_REBOOT:
+        SysReset ();
+        break;
+    }
     return false;
 }
 
+// ----------------------------------------------------------------------------
+// power management
+// ----------------------------------------------------------------------------
+
 wxPowerType wxGetPowerType()
 {
+    //SysBatteryKind kind;
+    //POS_SysBatteryInfo (false, NULL, NULL, NULL, NULL, NULL, &kind, NULL);
+     //return wxPOWER_SOCKET;
     return wxPOWER_BATTERY;
 }
 
 wxBatteryState wxGetBatteryState()
 {
-    // TODO
-    return wxBATTERY_UNKNOWN_STATE;
+    //#include "SystemMgr.h"
+    UInt8 percent;
+    POS_SysBatteryInfo (false, NULL, NULL, NULL, NULL, NULL, NULL, &percent);
+    if (percent < 3)
+        return wxBATTERY_SHUTDOWN_STATE;
+    else if (percent < 5)
+        return wxBATTERY_CRITICAL_STATE;
+    else if (percent < 15)
+        return wxBATTERY_LOW_STATE;
+    //return wxBATTERY_UNKNOWN_STATE;
+    return wxBATTERY_NORMAL_STATE;
 }
 
 // ----------------------------------------------------------------------------
@@ -170,7 +222,7 @@ wxMemorySize wxGetFreeMemory()
     uint32_t freeChunk;
 
     // executed twice: for the dynamic heap, and for the non-secure RAM storage heap
-    for ( uint16_t i=0; i<MemNumRAMHeaps(); i++)
+    for ( uint16_t i = 0; i < POS_MemNumRAMHeaps(); i ++)
     {
         status_t err = MemHeapFreeBytes(i, &freeHeap, &freeChunk);
         if( err != errNone )
@@ -183,7 +235,7 @@ wxMemorySize wxGetFreeMemory()
 
 unsigned long wxGetProcessId()
 {
-    return 0;
+    return SysTaskID ();
 }
 
 // Emit a beeeeeep
@@ -192,10 +244,17 @@ void wxBell()
     SndPlaySystemSound(sndWarning);
 }
 
+bool wxIsPlatform64Bit()
+{
+    return false;
+}
+
 wxString wxGetOsDescription()
 {
-    wxString strOS = _T("PalmOS");
+    wxString strOS = wxT("PalmOS");
 
+    //err = FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion);
+    //if (romVersion >= 0x02000000) v20 = true;
     char *version = SysGetOSVersionString();
     if(version)
     {
@@ -210,12 +269,10 @@ wxString wxGetOsDescription()
     return strOS;
 }
 
-wxToolkitInfo& wxAppTraits::GetToolkitInfo()
+wxOperatingSystemId wxGetOsVersion(int *verMaj, int *verMin)
 {
-    static wxToolkitInfo info;
-    info.os = wxPALMOS;
-    info.name = _T("wxBase");
-    return info;
+    // TODO
+    return wxOS_PALM_OS;
 }
 
 // ----------------------------------------------------------------------------
@@ -224,14 +281,35 @@ wxToolkitInfo& wxAppTraits::GetToolkitInfo()
 
 void wxMilliSleep(unsigned long milliseconds)
 {
+    UInt16 ticks_sec;
+    Int32 delay;
+    ticks_sec = SysTicksPerSecond ();
+    delay = milliseconds * ticks_sec / 1000;
+    if (delay > 0) {
+        SysTaskDelay (delay);
+    }
 }
 
 void wxMicroSleep(unsigned long microseconds)
 {
+    UInt16 ticks_sec;
+    Int32 delay;
+    ticks_sec = SysTicksPerSecond ();
+    delay = microseconds * ticks_sec / 1000000;
+    if (delay > 0) {
+        SysTaskDelay (delay);
+    }
 }
 
 void wxSleep(int nSecs)
 {
+    UInt16 ticks_sec;
+    Int32 delay;
+    ticks_sec = SysTicksPerSecond ();
+    delay = nSecs * ticks_sec;
+    if (delay > 0) {
+        SysTaskDelay (delay);
+    }
 }
 
 // ----------------------------------------------------------------------------