]> git.saurik.com Git - wxWidgets.git/blobdiff - src/palmos/statusbr.cpp
Committed William Osborne's wxPalmOS port
[wxWidgets.git] / src / palmos / statusbr.cpp
diff --git a/src/palmos/statusbr.cpp b/src/palmos/statusbr.cpp
new file mode 100644 (file)
index 0000000..a4dd9a1
--- /dev/null
@@ -0,0 +1,250 @@
+///////////////////////////////////////////////////////////////////////////////
+// Name:        palmos/statusbr.cpp
+// Purpose:     Implementation of wxStatusBar for PalmOS
+// Author:      William Osborne
+// Modified by:
+// Created:     10/13/04
+// RCS-ID:      $Id: 
+// Copyright:   (c) William Osborne
+// Licence:     wxWindows licence
+///////////////////////////////////////////////////////////////////////////////
+
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
+#pragma implementation "statusbr.h"
+#endif
+
+// for compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+  #pragma hdrstop
+#endif
+
+#ifndef WX_PRECOMP
+  #include "wx/setup.h"
+  #include "wx/frame.h"
+  #include "wx/settings.h"
+  #include "wx/dcclient.h"
+#endif
+
+#if wxUSE_STATUSBAR && wxUSE_NATIVE_STATUSBAR
+
+#include "wx/intl.h"
+#include "wx/log.h"
+#include "wx/statusbr.h"
+
+// ----------------------------------------------------------------------------
+// macros
+// ----------------------------------------------------------------------------
+
+// ============================================================================
+// implementation
+// ============================================================================
+
+// ----------------------------------------------------------------------------
+// wxStatusBarPalm class
+// ----------------------------------------------------------------------------
+
+wxStatusBarPalm::wxStatusBarPalm()
+{
+    SetParent(NULL);
+    m_hWnd = 0;
+    m_windowId = 0;
+}
+
+bool wxStatusBarPalm::Create(wxWindow *parent,
+                           wxWindowID id,
+                           long style,
+                           const wxString& name)
+{
+    wxCHECK_MSG( parent, FALSE, wxT("status bar must have a parent") );
+
+    StatusTextBuffer = NULL;
+
+    SetName(name);
+    SetParent(parent);
+
+    parent->AddChild(this);
+
+    m_windowId = id == -1 ? NewControlId() : id;
+
+    SetFieldsCount(1);
+    SubclassWin(m_hWnd);
+
+    return TRUE;
+}
+
+wxStatusBarPalm::~wxStatusBarPalm()
+{
+    DeleteStatusBuffer();
+}
+
+void wxStatusBarPalm::SetFieldsCount(int nFields, const int *widths)
+{
+    // this is a Windows limitation
+    wxASSERT_MSG( (nFields > 0) && (nFields < 255), _T("too many fields") );
+
+    wxStatusBarBase::SetFieldsCount(nFields, widths);
+
+    SetFieldsWidth();
+}
+
+void wxStatusBarPalm::SetStatusWidths(int n, const int widths[])
+{
+    wxStatusBarBase::SetStatusWidths(n, widths);
+
+    SetFieldsWidth();
+}
+
+void wxStatusBarPalm::SetFieldsWidth()
+{
+    // clear the status bar
+    DeleteStatusBuffer();
+}
+
+void wxStatusBarPalm::SetStatusText(const wxString& strText, int nField)
+{
+    wxCHECK_RET( (nField >= 0) && (nField < m_nFields),
+                 _T("invalid statusbar field index") );
+
+    SetStatusBufferText(strText,nField);
+    DrawStatusBar();
+}
+
+wxString wxStatusBarPalm::GetStatusText(int nField) const
+{
+    wxCHECK_MSG( (nField >= 0) && (nField < m_nFields), wxEmptyString,
+                 _T("invalid statusbar field index") );
+
+    wxString text;
+    return text;
+}
+
+void wxStatusBarPalm::DrawStatusBar()
+{
+    int i=0;
+    int leftPos=0;
+    wxArrayInt widthsAbs;
+    wxString text;
+    
+    RectangleType EraseRect;
+    EraseRect.topLeft.x=0;
+    EraseRect.topLeft.y=160-FntCharHeight()-1;    
+    EraseRect.extent.x=159;
+    EraseRect.extent.y=159;    
+    WinEraseRectangle(&EraseRect,0);
+
+    if(m_nFields>0)
+        widthsAbs=CalculateAbsWidths(160 - 2*(m_nFields - 1));
+    
+    for(i=0;i<m_nFields;i++)
+    {
+        text=GetStatusBufferText(i);
+        WinDrawTruncChars(text,StrLen(text),leftPos,160-FntCharHeight(),widthsAbs[i]);
+        leftPos+=widthsAbs[i]+2;
+    }
+    WinDrawLine(0,160-FntCharHeight()-1,159,160-FntCharHeight()-1);
+}
+
+void wxStatusBarPalm::SetStatusBufferText(const wxString& text, int number)
+{
+    wxListString* st = GetOrCreateStatusBuffer(number);
+
+    wxString tmp1(text);
+    wxString* tmp = new wxString(tmp1);
+    st->Insert(tmp);
+}
+
+wxString wxStatusBarPalm::GetStatusBufferText(int number)
+{
+    wxListString *st = GetStatusBufferStack(number);
+    if(st==0)
+        return "";
+
+    wxListString::compatibility_iterator top = st->GetFirst();
+    return(*top->GetData());
+}
+
+wxListString *wxStatusBarPalm::GetOrCreateStatusBuffer(int i)
+{
+    if(!StatusTextBuffer)
+    {
+        StatusTextBuffer = new wxListString*[m_nFields];
+
+        size_t j;
+        for(j = 0; j < (size_t)m_nFields; ++j) StatusTextBuffer[j] = 0;
+    }
+
+    if(!StatusTextBuffer[i])
+    {
+        StatusTextBuffer[i] = new wxListString();
+    }
+    else
+    {
+        wxListString *st=StatusTextBuffer[i];
+        wxListString::compatibility_iterator top = st->GetFirst();
+        delete top->GetData();
+        st->Erase(top);
+        delete st;
+          
+        StatusTextBuffer[i] = new wxListString();
+    }
+
+    return StatusTextBuffer[i];
+}
+
+wxListString *wxStatusBarPalm::GetStatusBufferStack(int i) const
+{
+    if(!StatusTextBuffer)
+        return 0;
+    return StatusTextBuffer[i];
+}
+
+void wxStatusBarPalm::DeleteStatusBuffer()
+{
+    int i=0;
+    
+    if(!StatusTextBuffer)
+    {
+        return;
+    }
+
+    for(i=0;i<m_nFields;i++)
+    {
+        if(StatusTextBuffer[i])
+        {
+            wxListString *st=StatusTextBuffer[i];
+            wxListString::compatibility_iterator top = st->GetFirst();
+            delete top->GetData();
+            st->Erase(top);
+            delete st;
+            StatusTextBuffer[i]=0;
+        }
+    }
+    delete[] m_statusTextStacks;
+}
+
+int wxStatusBarPalm::GetBorderX() const
+{
+    return 0;
+}
+
+int wxStatusBarPalm::GetBorderY() const
+{
+    return 0;
+}
+
+void wxStatusBarPalm::SetMinHeight(int height)
+{
+}
+
+bool wxStatusBarPalm::GetFieldRect(int i, wxRect& rect) const
+{
+}
+
+void wxStatusBarPalm::DoMoveWindow(int x, int y, int width, int height)
+{
+}
+
+#endif // wxUSE_NATIVE_STATUSBAR
+