--- /dev/null
+///////////////////////////////////////////////////////////////////////////////
+// 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
+