e4db172a3b
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@38920 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
271 lines
6.2 KiB
C++
271 lines
6.2 KiB
C++
///////////////////////////////////////////////////////////////////////////////
|
|
// Name: src/palmos/statbrpalm.cpp
|
|
// Purpose: Implementation of wxStatusBar for PalmOS
|
|
// Author: William Osborne - minimal working wxPalmOS port
|
|
// Modified by: Wlodzimierz ABX Skiba - transition from faked drawing to native statusbar
|
|
// Created: 10/13/04
|
|
// RCS-ID: $Id$
|
|
// Copyright: (c) William Osborne, Wlodzimierz Skiba
|
|
// Licence: wxWindows licence
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
// for compilers that support precompilation, includes "wx.h".
|
|
#include "wx/wxprec.h"
|
|
|
|
#ifdef __BORLANDC__
|
|
#pragma hdrstop
|
|
#endif
|
|
|
|
#if wxUSE_NATIVE_STATUSBAR
|
|
|
|
#include "wx/statusbr.h"
|
|
|
|
#ifndef WX_PRECOMP
|
|
#include "wx/frame.h"
|
|
#include "wx/settings.h"
|
|
#include "wx/dcclient.h"
|
|
#include "wx/intl.h"
|
|
#include "wx/log.h"
|
|
#endif
|
|
|
|
#include <StatusBar.h>
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// macros
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// ============================================================================
|
|
// implementation
|
|
// ============================================================================
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// wxStatusBarPalm class
|
|
// ----------------------------------------------------------------------------
|
|
|
|
wxStatusBarPalm::wxStatusBarPalm()
|
|
{
|
|
SetParent(NULL);
|
|
}
|
|
|
|
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);
|
|
SetId( id == wxID_ANY ? NewControlId() : id );
|
|
|
|
parent->AddChild(this);
|
|
|
|
SetFieldsCount(1);
|
|
|
|
return true;
|
|
}
|
|
|
|
wxStatusBarPalm::~wxStatusBarPalm()
|
|
{
|
|
Show();
|
|
|
|
DeleteStatusBuffer();
|
|
}
|
|
|
|
bool wxStatusBarPalm::IsShown() const
|
|
{
|
|
return StatGetAttribute ( statAttrBarVisible , NULL );
|
|
}
|
|
|
|
bool wxStatusBarPalm::Show( bool show )
|
|
{
|
|
if(show)
|
|
{
|
|
// show it if hidden
|
|
if(IsShown())
|
|
return false;
|
|
status_t rc = StatShow();
|
|
wxCHECK_MSG( rc == errNone, false, wxT("cannot hide status bar") );
|
|
}
|
|
else
|
|
{
|
|
// hide it if shown
|
|
if(!IsShown())
|
|
return false;
|
|
status_t rc = StatHide();
|
|
wxCHECK_MSG( rc == errNone, false, wxT("cannot hide status bar") );
|
|
}
|
|
return true;
|
|
}
|
|
|
|
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()
|
|
{
|
|
#if 0
|
|
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);
|
|
#endif
|
|
}
|
|
|
|
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 wxEmptyString;
|
|
|
|
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()
|
|
{
|
|
if(!StatusTextBuffer)
|
|
{
|
|
return;
|
|
}
|
|
|
|
for(int 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
|