+/////////////////////////////////////////////////////////////////////////////
+// Name: wx/dialog.h
+// Purpose: wxDialogBase class
+// Author: Vadim Zeitlin
+// Modified by:
+// Created: 29.06.99
+// RCS-ID: $Id$
+// Copyright: (c) Vadim Zeitlin
+// Licence: wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
#ifndef _WX_DIALOG_H_BASE_
#define _WX_DIALOG_H_BASE_
class WXDLLEXPORT wxDialogBase : public wxPanel
{
+public:
+ // the modal dialogs have a return code - usually the id of the last
+ // pressed button
+ void SetReturnCode(int returnCode) { m_returnCode = returnCode; }
+ int GetReturnCode() const { return m_returnCode; }
+
protected:
// functions to help with dialog layout
// ------------------------------------
// as the height of just text which may be retrieved from
// wxGetCharHeight())
long GetStandardTextHeight();
+
+ // the return code from modal dialog
+ int m_returnCode;
};
#if defined(__WXMSW__)
// Name: gridg.h
// Purpose: wxGenericGrid
// Author: Julian Smart
-// Modified by: Michael Bedward 20 April 1999
-// Added edit in place facility
+// Modified by: Michael Bedward
+// Added edit in place facility, 20 April 1999
+// Added cursor key control, 29 Jun 1999
// Created: 01/02/97
// RCS-ID: $Id$
// Copyright: (c)
void OnMouseEvent(wxMouseEvent& event);
void OnSize(wxSizeEvent& event);
void OnText(wxCommandEvent& ev);
+ void OnTextEnter(wxCommandEvent& ev);
void OnTextInPlace(wxCommandEvent& ev);
+ void OnTextInPlaceEnter(wxCommandEvent& ev);
void OnGridScroll(wxScrollEvent& ev);
protected:
#include "wx/dialog.h"
+class WXDLLEXPORT wxTextCtrl;
+
// Handy dialog functions (will be converted into classes at some point)
WXDLLEXPORT_DATA(extern const wxChar*) wxGetTextFromUserPromptStr;
WXDLLEXPORT_DATA(extern const wxChar*) wxEmptyString;
virtual void Maximize() { }
virtual void Restore() { }
- void SetReturnCode(int returnCode) { m_returnCode = returnCode; }
- int GetReturnCode() const { return m_returnCode; }
-
// implementation
virtual void GtkOnSize( int x, int y, int width, int height );
int sizeFlags = wxSIZE_AUTO);
private:
- int m_returnCode;
-
DECLARE_EVENT_TABLE()
};
virtual void Maximize() { }
virtual void Restore() { }
- void SetReturnCode(int returnCode) { m_returnCode = returnCode; }
- int GetReturnCode() const { return m_returnCode; }
-
// implementation
virtual void GtkOnSize( int x, int y, int width, int height );
int sizeFlags = wxSIZE_AUTO);
private:
- int m_returnCode;
-
DECLARE_EVENT_TABLE()
};
// Created: 17/09/98
// RCS-ID: $Id$
// Copyright: (c) Julian Smart
-// Licence: wxWindows licence
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_CLIPBRD_H_
#endif
#include "wx/defs.h"
-#include "wx/setup.h"
+
+#if wxUSE_CLIPBOARD
#include "wx/dataobj.h"
-#include "wx/list.h"
#include "wx/module.h"
bool WXDLLEXPORT wxOpenClipboard();
DECLARE_DYNAMIC_CLASS(wxClipboard)
public:
-
+
wxClipboard();
~wxClipboard();
// open the clipboard before SetData() and GetData()
virtual bool Open();
-
+
// close the clipboard after SetData() and GetData()
virtual void Close();
-
+
// can be called several times
virtual bool SetData( wxDataObject *data );
- // format available on the clipboard ?
- // supply ID if private format, the same as wxPrivateDataObject::SetId()
+ // format available on the clipboard ?
+ // supply ID if private format, the same as wxPrivateDataObject::SetId()
virtual bool IsSupported( wxDataFormat format );
-
+
// fill data with data on the clipboard (if available)
virtual bool GetData( wxDataObject *data );
-
+
// clears wxTheClipboard and the system's clipboard if possible
virtual void Clear();
/// If primary == TRUE, use primary selection in all further ops,
/// primary=FALSE resets it.
inline void UsePrimarySelection(bool primary = TRUE) { m_usePrimary = primary; }
-
- // implementation
-
+
+ // implementation
+
bool m_open;
wxList m_data;
bool m_usePrimary;
class wxClipboardModule: public wxModule
{
DECLARE_DYNAMIC_CLASS(wxClipboardModule)
-
+
public:
wxClipboardModule() {}
bool OnInit();
char *GetClipboardData(char *format, long *length, long time);
/* Get the clipboard client directly. Will be NULL if clipboard data
- is a string, or if some other application owns the clipboard.
+ is a string, or if some other application owns the clipboard.
This can be useful for shortcutting data translation, if the
clipboard user can check for a specific client. (This is used
by the wxMediaEdit class.) */
#endif
// Old clipboard class
+#endif // wxUSE_CLIPBOARD
+
#endif
// _WX_CLIPBRD_H_
// Created: 17/09/98
// RCS-ID: $Id$
// Copyright: (c) Julian Smart
-// Licence: wxWindows licence
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_DIALOG_H_
#define _WX_DIALOG_H_
#ifdef __GNUG__
-#pragma interface "dialog.h"
+ #pragma interface "dialog.h"
#endif
-#include "wx/panel.h"
-
WXDLLEXPORT_DATA(extern const char*) wxDialogNameStr;
// Dialog boxes
-class WXDLLEXPORT wxDialog : public wxPanel
+class WXDLLEXPORT wxDialog : public wxDialogBase
{
DECLARE_DYNAMIC_CLASS(wxDialog)
void Lower();
virtual bool IsIconized() const;
- void Fit();
void SetTitle(const wxString& title);
wxString GetTitle() const ;
- // bool OnClose();
- void OnCharHook(wxKeyEvent& event);
- void OnCloseWindow(wxCloseEvent& event);
-
void SetModal(bool flag);
- virtual void Centre(int direction = wxBOTH);
- virtual bool IsModal() const { return ((GetWindowStyleFlag() & wxDIALOG_MODAL) == wxDIALOG_MODAL); }
+ virtual bool IsModal() const
+ { return ((GetWindowStyleFlag() & wxDIALOG_MODAL) == wxDIALOG_MODAL); }
virtual int ShowModal();
virtual void EndModal(int retCode);
- void SetReturnCode(int returnCode) { m_returnCode = returnCode; }
- int GetReturnCode() const { return m_returnCode; }
+ // Implementation
+ virtual void ChangeFont(bool keepOriginalSize = TRUE);
+ virtual void ChangeBackgroundColour();
+ virtual void ChangeForegroundColour();
+ inline WXWidget GetTopWidget() const { return m_mainWidget; }
+ inline WXWidget GetClientWidget() const { return m_mainWidget; }
// Standard buttons
void OnOK(wxCommandEvent& event);
void OnApply(wxCommandEvent& event);
void OnCancel(wxCommandEvent& event);
+
void OnPaint(wxPaintEvent &event);
// Responds to colour changes
void OnSysColourChanged(wxSysColourChangedEvent& event);
- // Implementation
- virtual void ChangeFont(bool keepOriginalSize = TRUE);
- virtual void ChangeBackgroundColour();
- virtual void ChangeForegroundColour();
- inline WXWidget GetTopWidget() const { return m_mainWidget; }
- inline WXWidget GetClientWidget() const { return m_mainWidget; }
+ // bool OnClose();
+ void OnCharHook(wxKeyEvent& event);
+ void OnCloseWindow(wxCloseEvent& event);
public:
//// Motif-specific
bool m_modalShowing;
wxString m_dialogTitle;
- int m_returnCode;
protected:
virtual void DoSetSize(int x, int y,
void ClearUpdateRegion() { m_updateRegion.Clear(); }
void SetUpdateRegion(const wxRegion& region) { m_updateRegion = region; }
+ // sets the fore/background colour for the given widget
+ static void DoChangeForegroundColour(WXWidget widget, wxColour& foregroundColour);
+ static void DoChangeBackgroundColour(WXWidget widget, wxColour& backgroundColour, bool changeArmColour = FALSE);
+
protected:
// event handlers (not virtual by design)
void OnIdle(wxIdleEvent& event);
public:
// Change properties
virtual void ChangeFont(bool keepOriginalSize = TRUE); // Change to the current font (often overridden)
- virtual void DoChangeForegroundColour(WXWidget widget, wxColour& foregroundColour);
- virtual void DoChangeBackgroundColour(WXWidget widget, wxColour& backgroundColour, bool changeArmColour = FALSE);
// Change background and foreground colour using current background colour
// setting (Motif generates foreground based on background)
~wxDialog();
- void SetReturnCode(int returnCode) { m_returnCode = returnCode; }
- int GetReturnCode() const { return m_returnCode; }
-
virtual bool Destroy();
virtual void DoSetClientSize(int width, int height);
WXHWND m_hwndToolTip;
#endif // tooltips
- int m_returnCode;
-
+private:
DECLARE_EVENT_TABLE()
};
// Name: gridg.cpp
// Purpose: wxGenericGrid
// Author: Julian Smart
-// Modified by: Michael Bedward 20 Apr 1999
-// Added edit in place facility
+// Modified by: Michael Bedward
+// Added edit in place facility, 20 Apr 1999
+// Added cursor key control, 29 Jun 1999
// Created: 04/01/98
// RCS-ID: $Id$
// Copyright: (c) Julian Smart and Markus Holzem
-// Licence: wxWindows license
+// Licence: wxWindows license
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
-#pragma implementation "gridg.h"
-#pragma interface
+ #pragma implementation "gridg.h"
+ #pragma interface
#endif
// For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
-#pragma hdrstop
+ #pragma hdrstop
#endif
#ifndef WX_PRECOMP
- #include "wx/utils.h"
- #include "wx/dcclient.h"
- #include "wx/dcmemory.h"
- #include "wx/textctrl.h"
+ #include "wx/utils.h"
+ #include "wx/dcclient.h"
+ #include "wx/dcmemory.h"
+ #include "wx/textctrl.h"
+ #include "wx/settings.h"
#endif
#include <string.h>
#include "wx/string.h"
+
#include "wx/generic/gridg.h"
-#include "wx/settings.h"
// Set to zero to use no double-buffering
#ifdef __WXMSW__
EVT_MOUSE_EVENTS(wxGenericGrid::OnMouseEvent)
EVT_TEXT(wxGRID_TEXT_CTRL, wxGenericGrid::OnText)
EVT_TEXT(wxGRID_EDIT_IN_PLACE_TEXT_CTRL, wxGenericGrid::OnTextInPlace)
+ EVT_TEXT_ENTER(wxGRID_TEXT_CTRL, wxGenericGrid::OnTextEnter)
+ EVT_TEXT_ENTER(wxGRID_EDIT_IN_PLACE_TEXT_CTRL, wxGenericGrid::OnTextInPlaceEnter)
EVT_COMMAND_SCROLL(wxGRID_HSCROLL, wxGenericGrid::OnGridScroll)
EVT_COMMAND_SCROLL(wxGRID_VSCROLL, wxGenericGrid::OnGridScroll)
m_editInPlace = TRUE;
m_inOnTextInPlace = FALSE;
-
+
#if defined(__WIN95__)
m_scrollWidth = wxSystemSettings::GetSystemMetric(wxSYS_VSCROLL_X);
#elif defined(__WXGTK__)
m_textItem = new wxTextCtrl(m_editingPanel, wxGRID_TEXT_CTRL, "",
wxPoint(m_editControlPosition.x, m_editControlPosition.y),
wxSize(m_editControlPosition.width, -1),
- 0);
+ wxTE_PROCESS_ENTER);
m_textItem->Show(TRUE);
m_textItem->SetFocus();
int controlW, controlH;
// SetSize(pos.x, pos.y, size.x, size.y);
m_inPlaceTextItem = new wxTextCtrl( (wxPanel*)this, wxGRID_EDIT_IN_PLACE_TEXT_CTRL, "",
- wxPoint( m_currentRect.x-2, m_currentRect.y-2 ),
- wxSize( m_currentRect.width+4, m_currentRect.height+4 ),
- wxNO_BORDER );
+ wxPoint( m_currentRect.x-2, m_currentRect.y-2 ),
+ wxSize( m_currentRect.width+4, m_currentRect.height+4 ),
+ wxNO_BORDER | wxTE_PROCESS_ENTER );
m_inPlaceTextItem->Show(TRUE);
m_inPlaceTextItem->SetFocus();
-
+
return TRUE;
}
rect2.height -= 4;
dc->SetTextForeground(GetLabelTextColour());
dc->SetFont(GetLabelTextFont());
- if ( !cell->GetTextValue().IsNull() )
- DrawTextRect(dc, cell->GetTextValue(), &rect2, GetLabelAlignment(wxHORIZONTAL));
+ if ( !cell->GetTextValue().IsNull() )
+ DrawTextRect(dc, cell->GetTextValue(), &rect2, GetLabelAlignment(wxHORIZONTAL));
}
}
rect2.height -= 4;
dc->SetTextForeground(GetLabelTextColour());
dc->SetFont(GetLabelTextFont());
- if ( !cell->GetTextValue().IsNull() )
- DrawTextRect(dc, cell->GetTextValue(), &rect2, GetLabelAlignment(wxVERTICAL));
+ if ( !cell->GetTextValue().IsNull() )
+ DrawTextRect(dc, cell->GetTextValue(), &rect2, GetLabelAlignment(wxVERTICAL));
}
}
dc->SetTextForeground(cell->GetTextColour());
dc->SetFont(cell->GetFont());
- if ( !cell->GetTextValue().IsNull() )
- DrawTextRect(dc, cell->GetTextValue(), &rect2, cell->GetAlignment());
+ if ( !cell->GetTextValue().IsNull() )
+ DrawTextRect(dc, cell->GetTextValue(), &rect2, cell->GetAlignment());
}
}
}
int widthCount = 0;
int i;
- int nx = 0;
+ int nx = 0;
for (i = m_scrollPosX ; i < m_totalCols; i++)
{
widthCount += m_colWidths[i];
- // A partial bit doesn't count, we still have to scroll to see the
- // rest of it
+ // A partial bit doesn't count, we still have to scroll to see the
+ // rest of it
if (widthCount + m_leftOfSheet + m_verticalLabelWidth > (cw-vertScrollBarWidth))
break;
- else
- nx ++;
+ else
+ nx ++;
}
int heightCount = 0;
int i;
- int ny = 0;
+ int ny = 0;
for (i = m_scrollPosY ; i < m_totalRows; i++)
{
heightCount += m_rowHeights[i];
- // A partial bit doesn't count, we still have to scroll to see the
- // rest of it
+ // A partial bit doesn't count, we still have to scroll to see the
+ // rest of it
if (heightCount + m_topOfSheet + m_horizontalLabelHeight > (ch-horizScrollBarHeight))
break;
- else
- ny ++;
+ else
+ ny ++;
}
noVertSteps += ny;
if (m_totalGridWidth + vertScrollBarWidth <= cw)
{
- if ( m_hScrollBar )
- m_hScrollBar->Show(FALSE);
+ if ( m_hScrollBar )
+ m_hScrollBar->Show(FALSE);
SetScrollPosX(0);
}
else
void wxGenericGrid::OnSize(wxSizeEvent& WXUNUSED(event) )
{
if (!m_vScrollBar || !m_hScrollBar)
- return;
+ return;
AdjustScrollbars();
SetCursor(*wxSTANDARD_CURSOR);
int cw, ch;
GetClientSize(&cw, &ch);
- wxSizeEvent evt;
+ wxSizeEvent evt;
OnSize(evt);
break;
}
{
HighlightCell(dc);
}
-
+
// Highlight the new cell and copy its content to the edit control
SetCurrentRect(m_wCursorRow, m_wCursorColumn);
wxGridCell *cell = GetCell(m_wCursorRow, m_wCursorColumn);
if (cell)
{
- if ( cell->GetTextValue().IsNull() )
- m_textItem->SetValue("");
- else
- m_textItem->SetValue(cell->GetTextValue());
+ if ( cell->GetTextValue().IsNull() )
+ m_textItem->SetValue("");
+ else
+ m_textItem->SetValue(cell->GetTextValue());
}
SetGridClippingRegion(dc);
if ( m_editable && m_editInPlace )
{
- m_inPlaceTextItem->SetSize( m_currentRect.x-2, m_currentRect.y-2,
- m_currentRect.width+4, m_currentRect.height+4 );
+ m_inPlaceTextItem->SetSize( m_currentRect.x-2, m_currentRect.y-2,
+ m_currentRect.width+4, m_currentRect.height+4 );
if ( cell )
- {
- if ( cell->GetTextValue().IsNull() )
- {
- m_inPlaceTextItem->SetValue( "" );
- }
- else
- {
- m_inPlaceTextItem->SetFont( cell->GetFont() );
- m_inPlaceTextItem->SetValue( cell->GetTextValue() );
- }
- }
-
+ {
+ if ( cell->GetTextValue().IsNull() )
+ {
+ m_inPlaceTextItem->SetValue( "" );
+ }
+ else
+ {
+ m_inPlaceTextItem->SetFont( cell->GetFont() );
+ m_inPlaceTextItem->SetValue( cell->GetTextValue() );
+ }
+ }
+
m_inPlaceTextItem->Show(TRUE);
m_inPlaceTextItem->SetFocus();
}
else
- {
+ {
// 1) Why isn't this needed for Windows??
// Probably because of the SetValue?? JS.
- // 2) Arrrrrgh. This isn't needed anywhere,
+ // 2) Arrrrrgh. This isn't needed anywhere,
// of course. One hour of debugging... RR.
//
// 3) It *is* needed for Motif - michael
OnSelectCell(row, col);
wxGridEvent g_evt2(GetId(), wxEVT_GRID_SELECT_CELL, this, row, col);
- GetEventHandler()->ProcessEvent(g_evt2);
+ GetEventHandler()->ProcessEvent(g_evt2);
}
wxGridCell *wxGenericGrid::OnCreateCell(void)
dc->DrawLine( m_currentRect.x + 1,
m_currentRect.y + 1,
m_currentRect.x + m_currentRect.width - 1,
- m_currentRect.y + 1);
+ m_currentRect.y + 1);
// Right
dc->DrawLine( m_currentRect.x + m_currentRect.width - 1,
m_currentRect.y + 1,
m_currentRect.x + m_currentRect.width - 1,
- m_currentRect.y +m_currentRect.height - 1 );
+ m_currentRect.y +m_currentRect.height - 1 );
// Bottom
dc->DrawLine( m_currentRect.x + m_currentRect.width - 1,
m_currentRect.y + m_currentRect.height - 1,
m_currentRect.x + 1,
- m_currentRect.y + m_currentRect.height - 1);
+ m_currentRect.y + m_currentRect.height - 1);
// Left
dc->DrawLine( m_currentRect.x + 1,
m_currentRect.y + m_currentRect.height - 1,
- m_currentRect.x + 1,
- m_currentRect.y + 1);
+ m_currentRect.x + 1,
+ m_currentRect.y + 1);
dc->SetLogicalFunction(wxCOPY);
}
if (m_inPlaceTextItem)
{
- m_inPlaceTextItem->Show(TRUE);
- m_inPlaceTextItem->SetFocus();
+ m_inPlaceTextItem->Show(TRUE);
+ m_inPlaceTextItem->SetFocus();
}
}
else
m_textItem->Show(FALSE);
m_editingPanel->Show(FALSE);
}
-
+
if ( m_inPlaceTextItem )
{
- m_inPlaceTextItem->Show(FALSE);
+ m_inPlaceTextItem->Show(FALSE);
}
}
UpdateDimensions();
if ( m_editInPlace != edit )
{
m_editInPlace = edit;
-
+
if ( m_editInPlace ) // switched on
- {
- if ( m_currentRectVisible && m_editable )
- {
- m_inPlaceTextItem->SetSize( m_currentRect.x-2, m_currentRect.y-2,
- m_currentRect.width+4, m_currentRect.height+4 );
-
- wxGridCell *cell = GetCell(m_wCursorRow, m_wCursorColumn);
-
- if ( cell )
- {
- if ( cell->GetTextValue().IsNull() )
- {
- m_inPlaceTextItem->SetValue( "" );
- }
- else
- {
- m_inPlaceTextItem->SetFont( cell->GetFont() );
- m_inPlaceTextItem->SetValue( cell->GetTextValue() );
- }
- }
-
- m_inPlaceTextItem->Show( TRUE );
- m_inPlaceTextItem->SetFocus();
- }
- }
+ {
+ if ( m_currentRectVisible && m_editable )
+ {
+ m_inPlaceTextItem->SetSize( m_currentRect.x-2, m_currentRect.y-2,
+ m_currentRect.width+4, m_currentRect.height+4 );
+
+ wxGridCell *cell = GetCell(m_wCursorRow, m_wCursorColumn);
+
+ if ( cell )
+ {
+ if ( cell->GetTextValue().IsNull() )
+ {
+ m_inPlaceTextItem->SetValue( "" );
+ }
+ else
+ {
+ m_inPlaceTextItem->SetFont( cell->GetFont() );
+ m_inPlaceTextItem->SetValue( cell->GetTextValue() );
+ }
+ }
+
+ m_inPlaceTextItem->Show( TRUE );
+ m_inPlaceTextItem->SetFocus();
+ }
+ }
else // switched off
- {
- m_inPlaceTextItem->Show( FALSE );
- }
+ {
+ m_inPlaceTextItem->Show( FALSE );
+ }
}
}
wxGenericGrid *grid = this;
wxGridCell *cell = grid->GetCell(grid->GetCursorRow(), grid->GetCursorColumn());
if (cell && grid->CurrentCellVisible())
- {
- cell->SetTextValue(grid->GetTextItem()->GetValue());
- if ( m_editInPlace && !m_inOnTextInPlace )
- {
- m_inPlaceTextItem->SetValue( grid->GetTextItem()->GetValue() );
- }
-
- wxClientDC dc(grid);
-
- dc.BeginDrawing();
- grid->SetGridClippingRegion(& dc);
- grid->DrawCellBackground(& dc, &grid->GetCurrentRect(), grid->GetCursorRow(), grid->GetCursorColumn());
- grid->DrawCellValue(& dc, &grid->GetCurrentRect(), grid->GetCursorRow(), grid->GetCursorColumn());
- if ( !(m_editable && m_editInPlace ) ) grid->HighlightCell(& dc);
- dc.DestroyClippingRegion();
- dc.EndDrawing();
-
- //grid->OnCellChange(grid->GetCursorRow(), grid->GetCursorColumn());
- wxGridEvent g_evt(GetId(), wxEVT_GRID_CELL_CHANGE, grid,
- grid->GetCursorRow(), grid->GetCursorColumn());
- GetEventHandler()->ProcessEvent(g_evt);
-
- // grid->DrawCellText();
- }
+ {
+ cell->SetTextValue(grid->GetTextItem()->GetValue());
+ if ( m_editInPlace && !m_inOnTextInPlace )
+ {
+ m_inPlaceTextItem->SetValue( grid->GetTextItem()->GetValue() );
+ }
+
+ wxClientDC dc(grid);
+
+ dc.BeginDrawing();
+ grid->SetGridClippingRegion(& dc);
+ grid->DrawCellBackground(& dc, &grid->GetCurrentRect(), grid->GetCursorRow(), grid->GetCursorColumn());
+ grid->DrawCellValue(& dc, &grid->GetCurrentRect(), grid->GetCursorRow(), grid->GetCursorColumn());
+ if ( !(m_editable && m_editInPlace ) ) grid->HighlightCell(& dc);
+ dc.DestroyClippingRegion();
+ dc.EndDrawing();
+
+ //grid->OnCellChange(grid->GetCursorRow(), grid->GetCursorColumn());
+ wxGridEvent g_evt(GetId(), wxEVT_GRID_CELL_CHANGE, grid,
+ grid->GetCursorRow(), grid->GetCursorColumn());
+ GetEventHandler()->ProcessEvent(g_evt);
+
+ // grid->DrawCellText();
+ }
+ }
+}
+
+void wxGenericGrid::OnTextEnter(wxCommandEvent& WXUNUSED(ev) )
+{
+ // move the cursor down the current row (if possible)
+ // when the enter key has been pressed
+ //
+ if ( m_editable )
+ {
+ if ( GetCursorRow() < GetRows()-1 )
+ {
+ wxClientDC dc( this );
+ dc.BeginDrawing();
+ OnSelectCellImplementation(& dc,
+ GetCursorRow()+1,
+ GetCursorColumn() );
+ dc.EndDrawing();
+ }
}
}
wxGenericGrid *grid = this;
wxGridCell *cell = grid->GetCell(grid->GetCursorRow(), grid->GetCursorColumn());
if (cell && grid->CurrentCellVisible())
- {
- m_inOnTextInPlace = TRUE;
- grid->GetTextItem()->SetValue( m_inPlaceTextItem->GetValue() );
- OnText( ev );
- m_inOnTextInPlace = FALSE;
- }
+ {
+ m_inOnTextInPlace = TRUE;
+ grid->GetTextItem()->SetValue( m_inPlaceTextItem->GetValue() );
+ OnText( ev );
+ m_inOnTextInPlace = FALSE;
+ }
+ }
+}
+
+void wxGenericGrid::OnTextInPlaceEnter(wxCommandEvent& WXUNUSED(ev) )
+{
+ // move the cursor down the current row (if possible)
+ // when the enter key has been pressed
+ //
+ if ( m_editable )
+ {
+ if ( GetCursorRow() < GetRows()-1 )
+ {
+ wxClientDC dc( this );
+ dc.BeginDrawing();
+ OnSelectCellImplementation(& dc,
+ GetCursorRow()+1,
+ GetCursorColumn() );
+ dc.EndDrawing();
+ }
}
}
static bool inScroll = FALSE;
if ( inScroll )
- return;
+ return;
if ( m_editInPlace ) m_inPlaceTextItem->Show(FALSE);
if ( m_editInPlace && m_currentRectVisible )
{
- m_inPlaceTextItem->SetSize( m_currentRect.x-2, m_currentRect.y-2,
- m_currentRect.width+4, m_currentRect.height+4 );
+ m_inPlaceTextItem->SetSize( m_currentRect.x-2, m_currentRect.y-2,
+ m_currentRect.width+4, m_currentRect.height+4 );
m_inPlaceTextItem->Show( TRUE );
- m_inPlaceTextItem->SetFocus();
+ m_inPlaceTextItem->SetFocus();
}
inScroll = FALSE;
#include "wx/statbmp.h"
#include "wx/layout.h"
#include "wx/intl.h"
- #include "wx/dcclient.h"
- #include "wx/settings.h"
+ #include "wx/icon.h"
#endif
#include <stdio.h>
// get the longest caption and also calc the number of buttons
size_t nBtn, nButtons = 0;
- long width, widthBtnMax = 0;
+ int width, widthBtnMax = 0;
for ( nBtn = 0; nBtn < Btn_Max; nBtn++ ) {
if ( buttons[nBtn] ) {
nButtons++;
- dc.GetTextExtent(buttons[nBtn]->GetLabel(), &width, NULL);
+ GetTextExtent(buttons[nBtn]->GetLabel(), &width, NULL);
if ( width > widthBtnMax )
widthBtnMax = width;
}
// ----------------------------------------------------------------------------
#ifdef __GNUG__
- #pragma implementation "windowbase.h"
+ #pragma implementation "tipdlg.h"
#endif
// For compilers that support precompilation, includes "wx.h".
#include "wx/statbox.h"
#include "wx/statbmp.h"
#include "wx/dialog.h"
+ #include "wx/icon.h"
+ #include "wx/intl.h"
+ #include "wx/layout.h"
+ #include "wx/settings.h"
+ #include "wx/textctrl.h"
#endif // WX_PRECOMP
#include "wx/statline.h"
wxIcon icon("wxICON_TIP");
#else
#include "wx/generic/tip.xpm"
- wxIcon icon(info);
+ wxIcon icon(tipIcon);
#endif
wxStaticBitmap *bmp = new wxStaticBitmap(this, -1, icon);
VPATH = .:${srcdir}:${srcdir}/../common:${srcdir}/../generic:${EXTRA_VPATH}
-EXTRA_DIST = "${srcdir}/../common ${srcdir}/../generic ${srcdir}"
-
lib_LTLIBRARIES = @WX_LIBRARY_NAME@
EXTRA_LTLIBRARIES = libwx_gtk.la libwx_motif.la libwx_msw.la
VPATH = .:${srcdir}:${srcdir}/../common:${srcdir}/../generic:${EXTRA_VPATH}
-EXTRA_DIST = "${srcdir}/../common ${srcdir}/../generic ${srcdir}"
-
lib_LTLIBRARIES = @WX_LIBRARY_NAME@
EXTRA_LTLIBRARIES = libwx_gtk.la libwx_motif.la libwx_msw.la
db.cpp \
dbtable.cpp \
dcbase.cpp \
+ dlgcmn.cpp \
docmdi.cpp \
docview.cpp \
dynlib.cpp \
statusbr.cpp \
tabg.cpp \
textdlgg.cpp \
+ tipdlg.cpp \
treectrl.cpp \
\
threadpsx.cpp \
#include "wx/intl.h"
#if wxUSE_THREADS
-#include "wx/thread.h"
+ #include "wx/thread.h"
#endif
#if wxUSE_WX_RESOURCES
// Created: 17/09/98
// RCS-ID: $Id$
// Copyright: (c) Julian Smart
-// Licence: wxWindows licence
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
m_buttonBitmapOriginal = bitmap;
m_buttonBitmapSelected = bitmap;
m_buttonBitmapSelectedOriginal = bitmap;
-
+
SetName(name);
SetValidator(validator);
parent->AddChild(this);
-
+
m_backgroundColour = parent->GetBackgroundColour() ;
m_foregroundColour = parent->GetForegroundColour() ;
m_windowStyle = style;
m_marginX = 0;
m_marginY = 0;
-
+
/*
int x = pos.x;
int y = pos.y;
int width = size.x;
int height = size.y;
*/
-
+
if (id == -1)
m_windowId = NewControlId();
else
m_windowId = id;
-
+
Widget parentWidget = (Widget) parent->GetClientWidget();
-
+
/*
* Patch Note (important)
* There is no major reason to put a defaultButtonThickness here.
* in the ::SetDefaultButton method.
*/
Widget buttonWidget = XtVaCreateManagedWidget ("button",
-
+
// Gadget causes problems for default button operation.
#if wxUSE_GADGETS
xmPushButtonGadgetClass, parentWidget,
#endif
// XmNdefaultButtonShadowThickness, 1, // See comment for wxButton::SetDefault
NULL);
-
+
m_mainWidget = (WXWidget) buttonWidget;
-
+
m_font = parent->GetFont();
ChangeFont(FALSE);
-
+
ChangeBackgroundColour ();
-
+
DoSetBitmap();
-
+
XtAddCallback (buttonWidget, XmNactivateCallback, (XtCallbackProc) wxButtonCallback,
(XtPointer) this);
-
+
SetCanAddEventHandler(TRUE);
AttachWidget (parent, m_mainWidget, (WXWidget) NULL, pos.x, pos.y, size.x, size.y);
-
+
return TRUE;
}
wxBitmapButton::~wxBitmapButton()
{
SetBitmapLabel(wxNullBitmap);
-
+
if (m_insensPixmap)
XmDestroyPixmap (DefaultScreenOfDisplay ((Display*) GetXDisplay()), (Pixmap) m_insensPixmap);
}
{
m_buttonBitmapOriginal = bitmap;
m_buttonBitmap = bitmap;
-
+
DoSetBitmap();
}
{
m_buttonBitmapSelected = sel;
m_buttonBitmapSelectedOriginal = sel;
-
+
DoSetBitmap();
};
{
m_buttonBitmapDisabled = disabled;
m_buttonBitmapDisabledOriginal = disabled;
-
+
DoSetBitmap();
};
Pixmap pixmap = 0;
Pixmap insensPixmap = 0;
Pixmap armPixmap = 0;
-
+
// Must re-make the bitmap to have its transparent areas drawn
// in the current widget background colour.
if (m_buttonBitmapOriginal.GetMask())
int backgroundPixel;
XtVaGetValues((Widget) m_mainWidget, XmNbackground, &backgroundPixel,
NULL);
-
+
wxColour col;
col.SetPixel(backgroundPixel);
-
+
wxBitmap newBitmap = wxCreateMaskedBitmap(m_buttonBitmapOriginal, col);
m_buttonBitmap = newBitmap;
-
+
pixmap = (Pixmap) m_buttonBitmap.GetPixmap();
}
else
pixmap = (Pixmap) m_buttonBitmap.GetLabelPixmap(m_mainWidget);
-
+
if (m_buttonBitmapDisabledOriginal.Ok())
{
if (m_buttonBitmapDisabledOriginal.GetMask())
int backgroundPixel;
XtVaGetValues((Widget) m_mainWidget, XmNbackground, &backgroundPixel,
NULL);
-
+
wxColour col;
col.SetPixel(backgroundPixel);
-
+
wxBitmap newBitmap = wxCreateMaskedBitmap(m_buttonBitmapDisabledOriginal, col);
m_buttonBitmapDisabled = newBitmap;
-
+
insensPixmap = (Pixmap) m_buttonBitmapDisabled.GetPixmap();
}
else
}
else
insensPixmap = (Pixmap) m_buttonBitmap.GetInsensPixmap(m_mainWidget);
-
+
// Now make the bitmap representing the armed state
if (m_buttonBitmapSelectedOriginal.Ok())
{
int backgroundPixel;
XtVaGetValues((Widget) m_mainWidget, XmNarmColor, &backgroundPixel,
NULL);
-
+
wxColour col;
col.SetPixel(backgroundPixel);
-
+
wxBitmap newBitmap = wxCreateMaskedBitmap(m_buttonBitmapSelectedOriginal, col);
m_buttonBitmapSelected = newBitmap;
-
+
armPixmap = (Pixmap) m_buttonBitmapSelected.GetPixmap();
}
else
}
else
armPixmap = (Pixmap) m_buttonBitmap.GetArmPixmap(m_mainWidget);
-
+
if (insensPixmap == pixmap) // <- the Get...Pixmap()-functions return the same pixmap!
{
insensPixmap =
XCreateInsensitivePixmap(DisplayOfScreen(XtScreen((Widget) m_mainWidget)), pixmap);
m_insensPixmap = (WXPixmap) insensPixmap;
}
-
+
XtVaSetValues ((Widget) m_mainWidget,
XmNlabelPixmap, pixmap,
XmNlabelInsensitivePixmap, insensPixmap,
void wxBitmapButton::ChangeBackgroundColour()
{
DoChangeBackgroundColour(m_mainWidget, m_backgroundColour, TRUE);
-
+
// Must reset the bitmaps since the colours have changed.
DoSetBitmap();
}
// Created: 17/09/98
// RCS-ID: $Id$
// Copyright: (c) Julian Smart
-// Licence: wxWindows licence
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
#include "wx/button.h"
#include "wx/utils.h"
+#include "wx/panel.h"
#include <Xm/PushBG.h>
#include <Xm/PushB.h>
m_backgroundColour = parent->GetBackgroundColour();
m_foregroundColour = parent->GetForegroundColour();
m_font = parent->GetFont();
-
+
parent->AddChild((wxButton *)this);
-
+
if (id == -1)
m_windowId = NewControlId();
else
m_windowId = id;
-
+
wxString label1(wxStripMenuCodes(label));
-
+
XmString text = XmStringCreateSimple ((char*) (const char*) label1);
Widget parentWidget = (Widget) parent->GetClientWidget();
-
+
XmFontList fontList = (XmFontList) m_font.GetFontList(1.0, XtDisplay(parentWidget));
-
+
/*
* Patch Note (important)
* There is no major reason to put a defaultButtonThickness here.
XmNlabelString, text,
// XmNdefaultButtonShadowThickness, 1, // See comment for wxButton::SetDefault
NULL);
-
+
XmStringFree (text);
-
+
XtAddCallback ((Widget) m_mainWidget, XmNactivateCallback, (XtCallbackProc) wxButtonCallback,
(XtPointer) this);
-
+
SetCanAddEventHandler(TRUE);
AttachWidget (parent, m_mainWidget, (WXWidget) NULL, pos.x, pos.y, size.x, size.y);
-
+
ChangeBackgroundColour();
-
+
return TRUE;
}
void wxButton::SetDefault()
{
- wxWindow *parent = (wxWindow *)GetParent();
-/*
- TODO
- if (parent)
- parent->SetDefaultItem(this);
-*/
-
+ wxWindow *parent = GetParent();
+ wxPanel *panel = wxDynamicCast(panel, wxPanel);
+ if ( panel )
+ panel->SetDefaultItem(this);
+
// We initially do not set XmNdefaultShadowThickness, to have small buttons.
// Unfortunately, buttons are now mis-aligned. We try to correct this
// now -- setting this ressource to 1 for each button in the same row.
bool managed = XtIsManaged((Widget) item->GetMainWidget());
if (managed)
XtUnmanageChild ((Widget) item->GetMainWidget());
-
+
XtVaSetValues ((Widget) item->GetMainWidget(),
XmNdefaultButtonShadowThickness, 1,
NULL);
-
+
if (managed)
XtManageChild ((Widget) item->GetMainWidget());
}
- } // while
-
+ } // while
+
// XtVaSetValues((Widget)handle, XmNshowAsDefault, 1, NULL);
XtVaSetValues ((Widget) parent->GetMainWidget(), XmNdefaultButton, (Widget) GetMainWidget(), NULL);
}
if (!wxGetWindowFromTable(w))
// Widget has been deleted!
return;
-
+
wxButton *item = (wxButton *) clientData;
wxCommandEvent event (wxEVT_COMMAND_BUTTON_CLICKED, item->GetId());
event.SetEventObject(item);
// that I have found the code responsible for this behaviour.
#if XmVersion >= 1002
#if XmVersion < 2000
- Widget optionLabel = XmOptionLabelGadget ((Widget) m_buttonWidget);
// JACS, 24/1/99: this seems to cause a malloc crash later on, e.g.
// in controls sample.
- // XtUnmanageChild (optionLabel);
+ //
+ // Widget optionLabel = XmOptionLabelGadget ((Widget) m_buttonWidget);
+ // XtUnmanageChild (optionLabel);
#endif
#endif
#pragma implementation "clipbrd.h"
#endif
+#include "wx/defs.h"
+
+#if wxUSE_CLIPBOARD
+
#include "wx/app.h"
#include "wx/frame.h"
#include "wx/bitmap.h"
}
#endif
+#endif // wxUSE_CLIPBOARD
// Created: 17/09/98
// RCS-ID: $Id$
// Copyright: (c) Julian Smart
-// Licence: wxWindows licence
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
#endif
#include "wx/control.h"
+#include "wx/panel.h"
#include "wx/utils.h"
#include <Xm/Xm.h>
{
// If we delete an item, we should initialize the parent panel,
// because it could now be invalid.
-/*
- TODO
- wxWindow *parent = (wxWindow *)GetParent();
- if (parent)
+ wxPanel *panel = wxDynamicCast(GetParent(), wxPanel);
+ if (panel)
{
- if (parent->GetDefaultItem() == (wxButton*) this)
- parent->SetDefaultItem((wxButton*) NULL);
+ if (panel->GetDefaultItem() == this)
+ panel->SetDefaultItem((wxButton*) NULL);
}
-*/
}
void wxControl::SetLabel(const wxString& label)
Widget widget = (Widget) GetLabelWidget() ;
if (!widget)
return;
-
+
wxStripMenuCodes((char*) (const char*) label, wxBuffer);
-
+
XmString text = XmStringCreateSimple (wxBuffer);
XtVaSetValues (widget,
XmNlabelString, text,
Widget widget = (Widget) GetLabelWidget() ;
if (!widget)
return wxEmptyString;
-
+
XmString text;
char *s;
XtVaGetValues (widget,
XmNlabelString, &text,
NULL);
-
+
if (XmStringGetLtoR (text, XmSTRING_DEFAULT_CHARSET, &s))
{
wxString str(s);
void wxControl::Centre (int direction)
{
int x, y, width, height, panel_width, panel_height, new_x, new_y;
-
+
wxWindow *parent = (wxWindow *) GetParent ();
if (!parent)
return;
-
+
parent->GetClientSize (&panel_width, &panel_height);
GetSize (&width, &height);
GetPosition (&x, &y);
-
+
new_x = x;
new_y = y;
-
+
if (direction & wxHORIZONTAL)
new_x = (int) ((panel_width - width) / 2);
-
+
if (direction & wxVERTICAL)
new_y = (int) ((panel_height - height) / 2);
-
+
SetSize (new_x, new_y, width, height);
}
// Author: Julian Smart
// Id: $Id$
// Copyright: (c) 1998 Julian Smart
-// Licence: wxWindows licence
+// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
#pragma implementation "dataobj.h"
#endif
+#include "wx/defs.h"
+
+#if wxUSE_CLIPBOARD
+
#include "wx/dataobj.h"
#include "wx/app.h"
memcpy( dest, data, GetSize() );
}
+#endif // wxUSE_CLIPBOARD
// Created: 17/09/98
// RCS-ID: $Id$
// Copyright: (c) Julian Smart
-// Licence: wxWindows licence
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
m_windowStyle = style;
m_modalShowing = FALSE;
m_dialogTitle = title;
-
+
m_backgroundColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE);
m_foregroundColour = *wxBLACK;
-
+
SetName(name);
-
+
if (!parent)
wxTopLevelWindows.Append(this);
-
+
if (parent) parent->AddChild(this);
-
+
if ( id == -1 )
m_windowId = (int)NewControlId();
else
m_windowId = id;
-
+
Widget parentWidget = (Widget) 0;
if (parent)
parentWidget = (Widget) parent->GetTopWidget();
if (!parent)
parentWidget = (Widget) wxTheApp->GetTopLevelWidget();
-
+
wxASSERT_MSG( (parentWidget != (Widget) 0), "Could not find a suitable parent shell for dialog." );
-
+
Arg args[2];
XtSetArg (args[0], XmNdefaultPosition, False);
XtSetArg (args[1], XmNautoUnmanage, False);
Widget dialogShell = XmCreateBulletinBoardDialog(parentWidget, (char*) (const char*) name, args, 2);
m_mainWidget = (WXWidget) dialogShell;
-
+
// We don't want margins, since there is enough elsewhere.
XtVaSetValues(dialogShell,
XmNmarginHeight, 0,
XmNmarginWidth, 0,
XmNresizePolicy, XmRESIZE_NONE,
NULL) ;
-
+
Widget shell = XtParent(dialogShell) ;
if (!title.IsNull())
{
NULL);
XmStringFree(str);
}
-
+
m_font = wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT);
ChangeFont(FALSE);
-
+
wxAddWindowToTable(dialogShell, this);
-
+
// Intercept CLOSE messages from the window manager
Atom WM_DELETE_WINDOW = XmInternAtom(XtDisplay(shell), "WM_DELETE_WINDOW", False);
-
+
/* Remove and add WM_DELETE_WINDOW so ours is only handler */
/* Why do we have to do this for wxDialog, but not wxFrame? */
XmRemoveWMProtocols(shell, &WM_DELETE_WINDOW, 1);
XmAddWMProtocols(shell, &WM_DELETE_WINDOW, 1);
XmActivateWMProtocol(shell, WM_DELETE_WINDOW);
-
+
// Modified Steve Hammes for Motif 2.0
#if (XmREVISION > 1 || XmVERSION > 1)
XmAddWMProtocolCallback(shell, WM_DELETE_WINDOW, (XtCallbackProc) wxCloseDialogCallback, (XtPointer)this);
#else
XmAddWMProtocolCallback(shell, WM_DELETE_WINDOW, (void (*)())wxCloseDialogCallback, (caddr_t)this);
#endif
-
+
XtTranslations ptr ;
XtOverrideTranslations(dialogShell,
ptr = XtParseTranslationTable("<Configure>: resize()"));
XtFree((char *)ptr);
-
+
// Can't remember what this was about... but I think it's necessary.
-
+
if (wxUSE_INVISIBLE_RESIZE)
{
if (pos.x > -1)
if (pos.y > -1)
XtVaSetValues(dialogShell, XmNy, pos.y,
NULL);
-
+
if (size.x > -1)
XtVaSetValues(dialogShell, XmNwidth, size.x, NULL);
if (size.y > -1)
XtVaSetValues(dialogShell, XmNheight, size.y, NULL);
}
-
+
// This patch come from Torsten Liermann lier@lier1.muc.de
if (XmIsMotifWMRunning(shell))
{
decor |= MWM_DECOR_MINIMIZE;
if (m_windowStyle & wxMAXIMIZE_BOX)
decor |= MWM_DECOR_MAXIMIZE;
-
+
XtVaSetValues(shell,XmNmwmDecorations,decor,NULL) ;
}
// This allows non-Motif window managers to support at least the
if ((m_windowStyle & wxCAPTION) != wxCAPTION)
XtVaSetValues((Widget) shell,XmNoverrideRedirect,TRUE,NULL);
}
-
+
XtRealizeWidget(dialogShell);
-
+
XtAddCallback(dialogShell,XmNunmapCallback,
(XtCallbackProc)wxUnmapBulletinBoard,this) ;
-
+
// Positioning of the dialog doesn't work properly unless the dialog
// is managed, so we manage without mapping to the screen.
// To show, we map the shell (actually it's parent).
if (!wxUSE_INVISIBLE_RESIZE)
XtVaSetValues(shell, XmNmappedWhenManaged, FALSE, NULL);
-
+
if (!wxUSE_INVISIBLE_RESIZE)
{
XtManageChild(dialogShell);
}
XtAddEventHandler(dialogShell,ExposureMask,FALSE,
wxUniversalRepaintProc, (XtPointer) this);
-
+
XtAddEventHandler(dialogShell,
ButtonPressMask | ButtonReleaseMask | PointerMotionMask | KeyPressMask,
FALSE,
wxDialogBoxEventHandler,
(XtPointer)this);
-
+
ChangeBackgroundColour();
-
+
return TRUE;
}
else
if ( m_windowStyle & wxDIALOG_MODAL )
m_windowStyle -= wxDIALOG_MODAL ;
-
+
wxModelessWindows.DeleteObject(this);
if (!flag)
wxModelessWindows.Append(this);
if (m_mainWidget)
XtRemoveEventHandler((Widget) m_mainWidget, ExposureMask, FALSE,
wxUniversalRepaintProc, (XtPointer) this);
-
+
m_modalShowing = FALSE;
if (!wxUSE_INVISIBLE_RESIZE && m_mainWidget)
{
XtUnmapWidget((Widget) m_mainWidget);
}
-
+
wxTopLevelWindows.DeleteObject(this);
-
+
if ( (GetWindowStyleFlag() & wxDIALOG_MODAL) != wxDIALOG_MODAL )
wxModelessWindows.DeleteObject(this);
-
+
// If this is the last top-level window, exit.
if (wxTheApp && (wxTopLevelWindows.Number() == 0))
{
wxTheApp->SetTopWindow(NULL);
-
+
if (wxTheApp->GetExitOnFrameDelete())
{
wxTheApp->ExitMainLoop();
}
}
-
+
// This event-flushing code used to be in wxWindow::PostDestroyChildren (wx_dialog.cpp)
// but I think this should work, if we destroy the children first.
// Note that this might need to be done for wxFrame also.
wxCommandEvent cancelEvent(wxEVT_COMMAND_BUTTON_CLICKED, wxID_CANCEL);
cancelEvent.SetEventObject( this );
GetEventHandler()->ProcessEvent(cancelEvent);
-
+
return;
}
// We didn't process this event.
if (!title.IsNull())
{
XmString str = XmStringCreateSimple((char*) (const char*) title);
- XtVaSetValues((Widget) m_mainWidget,
+ XtVaSetValues((Widget) m_mainWidget,
XmNtitle, (char*) (const char*) title,
XmNdialogTitle, str, // Roberto Cocchi
XmNiconName, (char*) (const char*) title,
return m_dialogTitle;
}
-void wxDialog::Centre(int direction)
-{
- int x_offset,y_offset ;
- int display_width, display_height;
- int width, height, x, y;
- wxWindow *parent = GetParent();
- if ((direction & wxCENTER_FRAME) && parent)
- {
- parent->GetPosition(&x_offset,&y_offset) ;
- parent->GetSize(&display_width,&display_height) ;
- }
- else
- {
- wxDisplaySize(&display_width, &display_height);
- x_offset = 0 ;
- y_offset = 0 ;
- }
-
- GetSize(&width, &height);
- GetPosition(&x, &y);
-
- if (direction & wxHORIZONTAL)
- x = (int)((display_width - width)/2);
- if (direction & wxVERTICAL)
- y = (int)((display_height - height)/2);
-
- SetSize(x+x_offset, y+y_offset, width, height);
-}
-
void wxDialog::Raise()
{
Window parent_window = XtWindow((Widget) m_mainWidget),
bool wxDialog::Show(bool show)
{
m_isShown = show;
-
+
if (show)
{
if (!wxUSE_INVISIBLE_RESIZE)
XtMapWidget(XtParent((Widget) m_mainWidget));
else
- XtManageChild((Widget) m_mainWidget) ;
-
+ XtManageChild((Widget) m_mainWidget) ;
+
XRaiseWindow(XtDisplay((Widget) m_mainWidget), XtWindow((Widget) m_mainWidget));
-
+
}
else
{
XtUnmapWidget(XtParent((Widget) m_mainWidget));
else
XtUnmanageChild((Widget) m_mainWidget) ;
-
+
XFlush(XtDisplay((Widget) wxTheApp->GetTopLevelWidget()));
XSync(XtDisplay((Widget) wxTheApp->GetTopLevelWidget()), FALSE);
}
-
+
return TRUE;
}
int wxDialog::ShowModal()
{
m_windowStyle |= wxDIALOG_MODAL;
-
+
Show(TRUE);
-
+
if (m_modalShowing)
return 0;
-
+
wxModalShowingStack.Insert((wxObject *)TRUE);
-
+
m_modalShowing = TRUE;
XtAddGrab((Widget) m_mainWidget, TRUE, FALSE);
-
+
XEvent event;
-
+
// Loop until we signal that the dialog should be closed
while ((wxModalShowingStack.Number() > 0) && ((int)(wxModalShowingStack.First()->Data()) != 0))
{
// XtAppProcessEvent((XtAppContext) wxTheApp->GetAppContext(), XtIMAll);
-
+
XtAppNextEvent((XtAppContext) wxTheApp->GetAppContext(), &event);
wxTheApp->ProcessXEvent((WXEvent*) &event);
}
-
+
// Remove modal dialog flag from stack
wxNode *node = wxModalShowingStack.First();
if (node)
delete node;
-
+
// Now process all events in case they get sent to a destroyed dialog
XSync(XtDisplay((Widget) wxTheApp->GetTopLevelWidget()), FALSE);
while (XtAppPending((XtAppContext) wxTheApp->GetAppContext()))
{
XFlush(XtDisplay((Widget) wxTheApp->GetTopLevelWidget()));
XtAppNextEvent((XtAppContext) wxTheApp->GetAppContext(), &event);
-
+
wxTheApp->ProcessXEvent((WXEvent*) &event);
}
-
+
// TODO: is it safe to call this, if the dialog may have been deleted
// by now? Probably only if we're using delayed deletion of dialogs.
return GetReturnCode();
{
if (!m_modalShowing)
return;
-
+
SetReturnCode(retCode);
-
+
// Strangely, we don't seem to need this now.
// XtRemoveGrab((Widget) m_mainWidget);
-
+
Show(FALSE);
-
+
m_modalShowing = FALSE;
-
+
wxNode *node = wxModalShowingStack.First();
if (node)
node->SetData((wxObject *)FALSE);
// The default OnCancel (above) simply ends a modal dialog, and hides a modeless dialog.
static wxList closing;
-
+
if ( closing.Member(this) )
return;
-
+
closing.Append(this);
-
+
wxCommandEvent cancelEvent(wxEVT_COMMAND_BUTTON_CLICKED, wxID_CANCEL);
cancelEvent.SetEventObject( this );
GetEventHandler()->ProcessEvent(cancelEvent); // This may close the dialog
Refresh();
}
-void wxDialog::Fit()
-{
- wxWindow::Fit();
-}
-
// Handle a close event from the window manager
-static void wxCloseDialogCallback( Widget WXUNUSED(widget), XtPointer client_data,
+static void wxCloseDialogCallback( Widget WXUNUSED(widget), XtPointer client_data,
XmAnyCallbackStruct *WXUNUSED(cbs))
{
wxDialog *dialog = (wxDialog *)client_data;
wxCloseEvent closeEvent(wxEVT_CLOSE_WINDOW, dialog->GetId());
closeEvent.SetEventObject(dialog);
-
+
// May delete the dialog (with delayed deletion)
dialog->GetEventHandler()->ProcessEvent(closeEvent);
}
-void wxDialogBoxEventHandler (Widget wid,
- XtPointer WXUNUSED(client_data),
- XEvent* event,
- Boolean *continueToDispatch)
+void wxDialogBoxEventHandler(Widget wid,
+ XtPointer WXUNUSED(client_data),
+ XEvent* event,
+ Boolean* continueToDispatch)
{
- wxDialog *dialog = (wxDialog *)wxWidgetHashTable->Get((long)wid);
+ wxDialog *dialog = (wxDialog *)wxGetWindowFromTable(wid);
if (dialog)
{
wxMouseEvent wxevent(wxEVT_NULL);
{
keyEvent.SetEventType(wxEVT_CHAR);
dialog->GetEventHandler()->ProcessEvent(keyEvent);
- }
+ }
}
}
}
IMPLEMENT_CLASS(wxFileDialog, wxDialog)
#endif
-#define DEFAULT_FILE_SELECTOR_SIZE 0
+#define DEFAULT_FILE_SELECTOR_SIZE 0
// Let Motif defines the size of File
// Selector Box (if 1), or fix it to
// wxFSB_WIDTH x wxFSB_HEIGHT (if 0)
-#define wxFSB_WIDTH 600
+#define wxFSB_WIDTH 600
#define wxFSB_HEIGHT 500
{
// If there's a default extension specified but no filter, we create a suitable
// filter.
-
+
wxString filter2("");
if ( defaultExtension && !filter )
filter2 = wxString("*.") + wxString(defaultExtension) ;
else if ( filter )
filter2 = filter;
-
+
wxString defaultDirString;
if (defaultDir)
defaultDirString = defaultDir;
else
defaultDirString = "";
-
+
wxString defaultFilenameString;
if (defaultFileName)
defaultFilenameString = defaultFileName;
else
defaultFilenameString = "";
-
+
wxFileDialog fileDialog(parent, title, defaultDirString, defaultFilenameString, filter2, flags, wxPoint(x, y));
-
+
if ( fileDialog.ShowModal() == wxID_OK )
{
return fileDialog.GetPath();
wxWindow* parent,
int x,
int y)
-
+
{
wxFileDialog fileDialog(parent, title ? title : "", defaultDir ? defaultDir : "",
defaultFileName ? defaultFileName : "", filter ? filter : "", flags, wxPoint(x, y));
-
+
if ( fileDialog.ShowModal() == wxID_OK )
{
*defaultFilterIndex = fileDialog.GetFilterIndex();
wxString wxFileDialog::m_fileSelectorAnswer = "";
bool wxFileDialog::m_fileSelectorReturned = FALSE;
-void wxFileSelCancel( Widget WXUNUSED(fs), XtPointer WXUNUSED(client_data),
+void wxFileSelCancel( Widget WXUNUSED(fs), XtPointer WXUNUSED(client_data),
XmFileSelectionBoxCallbackStruct *WXUNUSED(cbs) )
{
wxFileDialog::m_fileSelectorAnswer = "";
static void wxChangeListBoxColours(wxWindow* win, Widget widget)
{
- win->DoChangeBackgroundColour((WXWidget) widget, *wxWHITE);
+ wxWindow::DoChangeBackgroundColour((WXWidget) widget, *wxWHITE);
// Change colour of the scrolled areas of the listboxes
Widget listParent = XtParent (widget);
- win->DoChangeBackgroundColour((WXWidget) listParent, *wxWHITE, TRUE);
+ wxWindow::DoChangeBackgroundColour((WXWidget) listParent, *wxWHITE, TRUE);
Widget hsb = (Widget) 0;
Widget vsb = (Widget) 0;
XmNhorizontalScrollBar, &hsb,
XmNverticalScrollBar, &vsb,
NULL);
-
+
/* TODO: should scrollbars be affected? Should probably have separate
* function to change them (by default, taken from wxSystemSettings)
*/
wxColour backgroundColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE);
- win->DoChangeBackgroundColour((WXWidget) hsb, backgroundColour, TRUE);
- win->DoChangeBackgroundColour((WXWidget) vsb, backgroundColour, TRUE);
+ wxWindow::DoChangeBackgroundColour((WXWidget) hsb, backgroundColour, TRUE);
+ wxWindow::DoChangeBackgroundColour((WXWidget) vsb, backgroundColour, TRUE);
if (hsb)
XtVaSetValues (hsb,
int wxFileDialog::ShowModal()
{
wxBeginBusyCursor();
-
+
// static char fileBuf[512];
Widget parentWidget = (Widget) 0;
if (m_parent)
}
else
parentWidget = (Widget) wxTheApp->GetTopLevelWidget();
-
+
Widget fileSel = XmCreateFileSelectionDialog(parentWidget, "file_selector", NULL, 0);
XtUnmanageChild(XmFileSelectionBoxGetChild(fileSel, XmDIALOG_HELP_BUTTON));
Widget selectionWidget = XmFileSelectionBoxGetChild(fileSel, XmDIALOG_TEXT);
Widget dirListWidget = XmFileSelectionBoxGetChild(fileSel, XmDIALOG_DIR_LIST);
Widget fileListWidget = XmFileSelectionBoxGetChild(fileSel, XmDIALOG_LIST);
+
+ // code using these vars disabled
+#if 0
Widget okWidget = XmFileSelectionBoxGetChild(fileSel, XmDIALOG_OK_BUTTON);
Widget applyWidget = XmFileSelectionBoxGetChild(fileSel, XmDIALOG_APPLY_BUTTON);
Widget cancelWidget = XmFileSelectionBoxGetChild(fileSel, XmDIALOG_CANCEL_BUTTON);
+#endif
+
-
Widget shell = XtParent(fileSel);
-
+
if (!m_message.IsNull())
XtVaSetValues(shell, XmNtitle, (char*) (const char*) m_message, NULL);
-
+
wxString entirePath("");
-
+
if ((m_dir != "") && (m_fileName != ""))
{
entirePath = m_dir + wxString("/") + m_fileName;
{
entirePath = m_fileName;
}
-
+
if (entirePath != "")
{
XmTextSetString(selectionWidget, (char*) (const char*) entirePath);
}
-
+
if (m_wildCard != "")
{
wxString filter("");
filter = m_dir + wxString("/") + m_wildCard;
else
filter = m_wildCard;
-
+
XmTextSetString(filterWidget, (char*) (const char*) filter);
XmFileSelectionDoSearch(fileSel, NULL);
}
-
+
// Suggested by Terry Gitnick, 16/9/97, because of change in Motif
// file selector on Solaris 1.5.1.
if ( m_dir != "" )
{
XmString thePath = XmStringCreateLtoR ((char*) (const char*) m_dir,
XmSTRING_DEFAULT_CHARSET);
-
+
XtVaSetValues (fileSel,
XmNdirectory, thePath,
NULL);
-
+
XmStringFree(thePath);
}
-
+
XtAddCallback(fileSel, XmNcancelCallback, (XtCallbackProc)wxFileSelCancel, (XtPointer)NULL);
XtAddCallback(fileSel, XmNokCallback, (XtCallbackProc)wxFileSelOk, (XtPointer)NULL);
-
+
//#if XmVersion > 1000
// I'm not sure about what you mean with XmVersion.
// If this is for Motif1.1/Motif1.2, then check XmVersion>=1200
DoChangeBackgroundColour((WXWidget) filterWidget, *wxWHITE);
DoChangeBackgroundColour((WXWidget) selectionWidget, *wxWHITE);
- /* For some reason this crashes
+ // apparently, this provokes a crash
+#if 0
DoChangeBackgroundColour((WXWidget) okWidget, m_backgroundColour, TRUE);
DoChangeBackgroundColour((WXWidget) cancelWidget, m_backgroundColour, TRUE);
DoChangeBackgroundColour((WXWidget) applyWidget, m_backgroundColour, TRUE);
- */
+#endif
wxChangeListBoxColours(this, dirListWidget);
wxChangeListBoxColours(this, fileListWidget);
-
+
XtManageChild(fileSel);
m_fileSelectorAnswer = "";
m_fileSelectorReturned = FALSE;
-
+
wxEndBusyCursor();
-
+
XtAddGrab(XtParent(fileSel), TRUE, FALSE);
XEvent event;
while (!m_fileSelectorReturned)
XtAppProcessEvent((XtAppContext) wxTheApp->GetAppContext(), XtIMAll);
}
XtRemoveGrab(XtParent(fileSel));
-
+
XmUpdateDisplay((Widget) wxTheApp->GetTopLevelWidget()); // Experimental
-
+
// XtDestroyWidget(fileSel);
XtUnmapWidget(XtParent(fileSel));
XtDestroyWidget(XtParent(fileSel));
-
+
// Now process all events, because otherwise
// this might remain on the screen
XSync(XtDisplay((Widget) wxTheApp->GetTopLevelWidget()), FALSE);
XtAppNextEvent((XtAppContext) wxTheApp->GetAppContext(), &event);
XtDispatchEvent(&event);
}
-
+
m_path = m_fileSelectorAnswer;
m_fileName = wxFileNameFromPath(m_fileSelectorAnswer);
m_dir = wxPathOnly(m_path);
-
+
if (m_fileName == "")
return wxID_CANCEL;
else
wxDefaultFileSelector(bool load, const char *what, const char *extension, const char *default_name, wxWindow *parent)
{
char *ext = (char *)extension;
-
- char prompt[50];
+
+ wxString prompt;
wxString str;
if (load)
- str = "Load %s file";
+ str = _("Load %s file");
else
- str = "Save %s file";
- sprintf(prompt, wxGetTranslation(str), what);
-
- if (*ext == '.') ext++;
- char wild[60];
- sprintf(wild, "*.%s", ext);
-
+ str = _("Save %s file");
+ prompt.Printf(str, what);
+
+ if (*ext == '.')
+ ext++;
+ wxString wild;
+ wild.Printf("*.%s", ext);
+
return wxFileSelector (prompt, NULL, default_name, ext, wild, 0, parent);
}
// Created: 17/09/98
// RCS-ID: $Id$
// Copyright: (c) Julian Smart
-// Licence: wxWindows licence
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
wxXFont::~wxXFont()
{
- XFontStruct* fontStruct = (XFontStruct*) m_fontStruct;
XmFontList fontList = (XmFontList) m_fontList;
-
+
XmFontListFree (fontList);
-
+
// TODO: why does freeing the font produce a segv???
// Note that XFreeFont wasn't called in wxWin 1.68 either.
+ // XFontStruct* fontStruct = (XFontStruct*) m_fontStruct;
// XFreeFont((Display*) m_display, fontStruct);
}
m_weight = data.m_weight;
m_underlined = data.m_underlined;
m_faceName = data.m_faceName;
-
+
// Don't have to copy actual fonts, because they'll be created
// on demand.
}
wxFont::wxFont(int pointSize, int family, int style, int weight, bool underlined, const wxString& faceName)
{
Create(pointSize, family, style, weight, underlined, faceName);
-
+
if ( wxTheFontList )
wxTheFontList->Append(this);
}
{
UnRef();
m_refData = new wxFontRefData;
-
+
M_FONTDATA->m_family = family;
M_FONTDATA->m_style = style;
M_FONTDATA->m_weight = weight;
M_FONTDATA->m_pointSize = pointSize;
M_FONTDATA->m_underlined = underlined;
M_FONTDATA->m_faceName = faceName;
-
+
RealizeResource();
-
+
return TRUE;
}
void wxFont::SetPointSize(int pointSize)
{
Unshare();
-
+
M_FONTDATA->m_pointSize = pointSize;
-
+
RealizeResource();
}
void wxFont::SetFamily(int family)
{
Unshare();
-
+
M_FONTDATA->m_family = family;
-
+
RealizeResource();
}
void wxFont::SetStyle(int style)
{
Unshare();
-
+
M_FONTDATA->m_style = style;
-
+
RealizeResource();
}
void wxFont::SetWeight(int weight)
{
Unshare();
-
+
M_FONTDATA->m_weight = weight;
-
+
RealizeResource();
}
void wxFont::SetFaceName(const wxString& faceName)
{
Unshare();
-
+
M_FONTDATA->m_faceName = faceName;
-
+
RealizeResource();
}
void wxFont::SetUnderlined(bool underlined)
{
Unshare();
-
+
M_FONTDATA->m_underlined = underlined;
-
+
RealizeResource();
}
{
if (!Ok())
return (wxXFont*) NULL;
-
+
long intScale = long(scale * 100.0 + 0.5); // key for wxXFont
int pointSize = (M_FONTDATA->m_pointSize * 10 * intScale) / 100;
-
+
wxNode* node = M_FONTDATA->m_fonts.First();
while (node)
{
return f;
node = node->Next();
}
-
+
WXFontStructPtr font = LoadQueryFont(pointSize, M_FONTDATA->m_family,
M_FONTDATA->m_style, M_FONTDATA->m_weight, M_FONTDATA->m_underlined);
-
+
if (!font)
{
// search up and down by stepsize 10
int max_size = pointSize + 20 * (1 + (pointSize/180));
int min_size = pointSize - 20 * (1 + (pointSize/180));
int i;
-
+
// Search for smaller size (approx.)
for (i=pointSize-10; !font && i >= 10 && i >= min_size; i -= 10)
font = LoadQueryFont(i, M_FONTDATA->m_family, M_FONTDATA->m_style, M_FONTDATA->m_weight, M_FONTDATA->m_underlined);
font = LoadQueryFont(i, M_FONTDATA->m_family, M_FONTDATA->m_style, M_FONTDATA->m_weight, M_FONTDATA->m_underlined);
// Try default family
if (!font && M_FONTDATA->m_family != wxDEFAULT)
- font = LoadQueryFont(pointSize, wxDEFAULT, M_FONTDATA->m_style,
+ font = LoadQueryFont(pointSize, wxDEFAULT, M_FONTDATA->m_style,
M_FONTDATA->m_weight, M_FONTDATA->m_underlined);
// Bogus font
if (!font)
default: xweight = "*";
break;
}
-
+
sprintf(wxBuffer, "-*-%s-%s-%s-normal-*-*-%d-*-*-*-*-*-*",
xfamily, xweight, xstyle, pointSize);
-
+
Display *dpy = (Display*) wxGetDisplay();
XFontStruct* font = XLoadQueryFont(dpy, wxBuffer);
-
+
return (WXFontStructPtr) font;
}
extern wxHashTable *wxWidgetHashTable;
void wxCloseFrameCallback(Widget, XtPointer, XmAnyCallbackStruct *cbs);
-void wxFrameFocusProc(Widget workArea, XtPointer clientData,
+void wxFrameFocusProc(Widget workArea, XtPointer clientData,
XmAnyCallbackStruct *cbs);
-static void wxFrameMapProc(Widget frameShell, XtPointer clientData,
+static void wxFrameMapProc(Widget frameShell, XtPointer clientData,
XCrossingEvent * event);
extern wxList wxModelessWindows;
m_frameMenuBar = NULL;
m_frameStatusBar = NULL;
-
+
m_parent = NULL;
m_iconized = FALSE;
-
+
//// Motif-specific
m_frameShell = (WXWidget) NULL;
m_frameWidget = (WXWidget) NULL;;
{
if (!parent)
wxTopLevelWindows.Append(this);
-
+
SetName(name);
-
+
m_windowStyle = style;
m_frameMenuBar = NULL;
#if wxUSE_TOOLBAR
m_frameToolBar = NULL ;
#endif // wxUSE_TOOLBAR
m_frameStatusBar = NULL;
-
+
//// Motif-specific
m_frameShell = (WXWidget) NULL;
m_frameWidget = (WXWidget) NULL;;
m_clientArea = (WXWidget) NULL;;
m_visibleStatus = TRUE;
m_title = "";
-
+
m_backgroundColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE);
m_foregroundColour = *wxBLACK;
m_font = wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT);
-
+
if ( id > -1 )
m_windowId = id;
else
m_windowId = (int)NewControlId();
-
+
if (parent) parent->AddChild(this);
-
+
wxModelessWindows.Append(this);
-
+
int x = pos.x; int y = pos.y;
int width = size.x; int height = size.y;
-
+
if (wxTopLevelUsed)
// Change suggested by Matthew Flatt
m_frameShell = (WXWidget) XtAppCreateShell(name, wxTheApp->GetClassName(), topLevelShellWidgetClass, (Display*) wxGetDisplay(), NULL, 0);
m_frameShell = wxTheApp->GetTopLevelWidget();
wxTopLevelUsed = TRUE;
}
-
- XtVaSetValues((Widget) m_frameShell,
+
+ XtVaSetValues((Widget) m_frameShell,
// Allows menu to resize
XmNallowShellResize, True,
XmNdeleteResponse, XmDO_NOTHING,
XmNmappedWhenManaged, False,
XmNiconic, (style & wxICONIZE) ? TRUE : FALSE,
NULL);
-
+
if (!title.IsNull())
- XtVaSetValues((Widget) m_frameShell,
+ XtVaSetValues((Widget) m_frameShell,
XmNtitle, (const char*) title,
NULL);
-
+
m_frameWidget = (WXWidget) XtVaCreateManagedWidget("main_window",
xmMainWindowWidgetClass, (Widget) m_frameShell,
XmNresizePolicy, XmRESIZE_NONE,
NULL);
-
+
m_workArea = (WXWidget) XtVaCreateWidget("form",
xmFormWidgetClass, (Widget) m_frameWidget,
XmNresizePolicy, XmRESIZE_NONE,
NULL);
-
+
m_clientArea = (WXWidget) XtVaCreateWidget("client",
xmBulletinBoardWidgetClass, (Widget) m_workArea,
XmNmarginWidth, 0,
XtAddEventHandler((Widget) m_clientArea, ExposureMask,FALSE,
wxUniversalRepaintProc, (XtPointer) this);
-
+
XtVaSetValues((Widget) m_frameWidget,
XmNworkWindow, (Widget) m_workArea,
NULL);
-
+
XtManageChild((Widget) m_clientArea);
XtManageChild((Widget) m_workArea);
-
- wxASSERT_MSG ((wxWidgetHashTable->Get((long)m_workArea) == (wxObject*) NULL), "Widget table clash in frame.cpp") ;
-
+
+ wxASSERT_MSG( !wxGetWindowFromTable((Widget)m_workArea),
+ "Widget table clash in frame.cpp") ;
+
wxAddWindowToTable((Widget) m_workArea, this);
-
+
XtTranslations ptr ;
-
+
XtOverrideTranslations((Widget) m_workArea,
ptr = XtParseTranslationTable("<Configure>: resize()"));
-
+
XtFree((char *)ptr);
-
- XtAddCallback((Widget) m_workArea, XmNfocusCallback,
+
+ XtAddCallback((Widget) m_workArea, XmNfocusCallback,
(XtCallbackProc)wxFrameFocusProc, (XtPointer)this);
-
+
/* Part of show-&-hide fix */
XtAddEventHandler((Widget) m_frameShell, StructureNotifyMask,
False, (XtEventHandler)wxFrameMapProc,
(XtPointer)m_workArea);
-
+
if (x > -1)
XtVaSetValues((Widget) m_frameShell, XmNx, x, NULL);
if (y > -1)
XtVaSetValues((Widget) m_frameShell, XmNwidth, width, NULL);
if (height > -1)
XtVaSetValues((Widget) m_frameShell, XmNheight, height, NULL);
-
+
m_mainWidget = m_frameWidget;
-
+
ChangeFont(FALSE);
-
+
// This patch comes from Torsten Liermann lier@lier1.muc.de
if (XmIsMotifWMRunning( (Widget) m_frameShell ))
{
XtVaSetValues((Widget) m_frameShell,XmNoverrideRedirect,TRUE,NULL);
}
XtRealizeWidget((Widget) m_frameShell);
-
+
// Intercept CLOSE messages from the window manager
Atom WM_DELETE_WINDOW = XmInternAtom(XtDisplay((Widget) m_frameShell), "WM_DELETE_WINDOW", False);
#if (XmREVISION > 1 || XmVERSION > 1)
XmAddWMProtocolCallback((Widget) m_frameShell, WM_DELETE_WINDOW, (void (*)())wxCloseFrameCallback, (caddr_t)this);
#endif
#endif
-
+
ChangeBackgroundColour();
-
+
PreResize();
-
+
wxSizeEvent sizeEvent(wxSize(width, height), GetId());
sizeEvent.SetEventObject(this);
-
+
GetEventHandler()->ProcessEvent(sizeEvent);
-
+
return TRUE;
}
if (m_frameMenuBar)
{
m_frameMenuBar->DestroyMenuBar();
-
+
// Hack to stop core dump on Ultrix, OSF, for some strange reason.
#if MOTIF_MENUBAR_DELETE_FIX
GetMenuBar()->SetMainWidget((WXWidget) NULL);
delete m_frameMenuBar;
m_frameMenuBar = NULL;
}
-
+
wxTopLevelWindows.DeleteObject(this);
wxModelessWindows.DeleteObject(this);
-
+
if (m_frameStatusBar)
delete m_frameStatusBar;
-
+
DestroyChildren();
-
+
/*
int i;
for (i = 0; i < wxMAX_STATUS; i++)
if (statusTextWidget[i])
XtDestroyWidget (statusTextWidget[i]);
-
+
if (statusLineForm)
XtDestroyWidget (statusLineForm);
-
+
if (statusLineWidget)
XtDestroyWidget (statusLineWidget);
*/
-
+
if (m_workArea)
{
wxDeleteWindowFromTable((Widget) m_workArea);
-
+
XtDestroyWidget ((Widget) m_workArea);
}
-
+
if (m_frameWidget)
{
wxDeleteWindowFromTable((Widget) m_frameWidget);
XtDestroyWidget ((Widget) m_frameWidget);
}
-
+
if (m_frameShell)
XtDestroyWidget ((Widget) m_frameShell);
-
+
SetMainWidget((WXWidget) NULL);
-
+
/* Check if it's the last top-level window */
-
+
if (wxTheApp && (wxTopLevelWindows.Number() == 0))
{
wxTheApp->SetTopWindow(NULL);
-
+
if (wxTheApp->GetExitOnFrameDelete())
{
// Signal to the app that we're going to close
wxTheApp->ExitMainLoop();
}
}
-
+
}
// Get size *available for subwindows* i.e. excluding menu bar, toolbar etc.
{
Dimension xx, yy;
XtVaGetValues((Widget) m_workArea, XmNwidth, &xx, XmNheight, &yy, NULL);
-
+
if (m_frameStatusBar)
{
int sbw, sbh;
{
wxWindow *win = (wxWindow *)node->Data();
hasSubPanel = (win->IsKindOf(CLASSINFO(wxPanel)) && !win->IsKindOf(CLASSINFO(wxDialog)));
-
+
if (hasSubPanel)
break;
}
}
}
*/
-
+
*x = xx; *y = yy;
}
// main window area, and adding on to the new client area
if (width > -1)
XtVaSetValues((Widget) m_workArea, XmNwidth, width, NULL);
-
+
if (height > -1)
{
if (m_frameStatusBar)
height += tbh;
}
#endif // wxUSE_TOOLBAR
-
+
XtVaSetValues((Widget) m_workArea, XmNheight, height, NULL);
}
PreResize();
-
+
wxSizeEvent sizeEvent(wxSize(width, height), GetId());
sizeEvent.SetEventObject(this);
-
+
GetEventHandler()->ProcessEvent(sizeEvent);
-
+
}
void wxFrame::GetSize(int *width, int *height) const
Window parent_window = XtWindow((Widget) m_frameShell),
next_parent = XtWindow((Widget) m_frameShell),
root = RootWindowOfScreen(XtScreen((Widget) m_frameShell));
-
+
// search for the parent that is child of ROOT, because the WM may
// reparent twice and notify only the next parent (like FVWM)
while (next_parent != root) {
XtVaSetValues((Widget) m_frameWidget, XmNwidth, width, NULL);
if (height > -1)
XtVaSetValues((Widget) m_frameWidget, XmNheight, height, NULL);
-
+
if (!(height == -1 && width == -1))
{
PreResize();
-
+
wxSizeEvent sizeEvent(wxSize(width, height), GetId());
sizeEvent.SetEventObject(this);
-
+
GetEventHandler()->ProcessEvent(sizeEvent);
}
}
{
if (!m_frameShell)
return wxWindow::Show(show);
-
+
m_visibleStatus = show; /* show-&-hide fix */
-
+
m_isShown = show;
if (show) {
XtMapWidget((Widget) m_frameShell);
{
if (!iconize)
Show(TRUE);
-
+
if (m_frameShell)
XtVaSetValues((Widget) m_frameShell, XmNiconic, (Boolean)iconize, NULL);
}
void wxFrame::Maximize(bool maximize)
{
Show(TRUE);
-
+
if (maximize && m_frameShell)
XtVaSetValues((Widget) m_frameShell, XmNiconic, FALSE, NULL);
}
{
if (!m_frameShell)
return FALSE;
-
+
Boolean iconic;
XtVaGetValues((Widget) m_frameShell, XmNiconic, &iconic, NULL);
return iconic;
{
if (title == m_title)
return;
-
+
m_title = title;
-
+
if (!title.IsNull())
- XtVaSetValues((Widget) m_frameShell,
+ XtVaSetValues((Widget) m_frameShell,
XmNtitle, (const char*) title,
XmNiconName, (const char*) title,
NULL);
void wxFrame::SetIcon(const wxIcon& icon)
{
m_icon = icon;
-
+
if (!m_frameShell)
return;
-
+
if (!icon.Ok() || !icon.GetPixmap())
return;
-
+
XtVaSetValues((Widget) m_frameShell, XtNiconPixmap, icon.GetPixmap(), NULL);
}
const wxString& name)
{
wxStatusBar *statusBar = NULL;
-
+
statusBar = new wxStatusBar(this, id, wxPoint(0, 0), wxSize(100, 20),
style, name);
-
+
// Set the height according to the font and the border size
wxClientDC dc(statusBar);
dc.SetFont(statusBar->GetFont());
-
+
long x, y;
dc.GetTextExtent("X", &x, &y);
-
+
int height = (int)( (y * 1.1) + 2* statusBar->GetBorderY());
-
+
statusBar->SetSize(-1, -1, 100, height);
-
+
statusBar->SetFieldsCount(number);
return statusBar;
}
const wxString& name)
{
// Calling CreateStatusBar twice is an error.
- wxCHECK_MSG( m_frameStatusBar == NULL, FALSE,
+ wxCHECK_MSG( m_frameStatusBar == NULL, FALSE,
"recreating status bar in wxFrame" );
-
+
m_frameStatusBar = OnCreateStatusBar(number, style, id,
name);
if ( m_frameStatusBar )
void wxFrame::SetStatusText(const wxString& text, int number)
{
wxCHECK_RET( m_frameStatusBar != NULL, "no statusbar to set text for" );
-
+
m_frameStatusBar->SetStatusText(text, number);
}
void wxFrame::SetStatusWidths(int n, const int widths_field[])
{
wxCHECK_RET( m_frameStatusBar != NULL, "no statusbar to set widths for" );
-
+
m_frameStatusBar->SetStatusWidths(n, widths_field);
PositionStatusBar();
}
{
if (!m_frameStatusBar)
return;
-
+
int w, h;
GetClientSize(&w, &h);
int sw, sh;
m_frameStatusBar->GetSize(&sw, &sh);
-
+
// Since we wish the status bar to be directly under the client area,
// we use the adjusted sizes without using wxSIZE_NO_ADJUSTMENTS.
m_frameStatusBar->SetSize(0, h, w, sh);
m_frameMenuBar = NULL;
return;
}
-
+
// Currently can't set it twice
// wxASSERT_MSG( (m_frameMenuBar == (wxMenuBar*) NULL), "Cannot set the menubar more than once");
-
+
if (m_frameMenuBar)
{
m_frameMenuBar->DestroyMenuBar();
delete m_frameMenuBar;
}
-
+
m_frameMenuBar = menuBar;
m_frameMenuBar->CreateMenuBar(this);
}
{
// Find a child that's a subwindow, but not a dialog box.
wxWindow *win = (wxWindow *)node->Data();
-
+
if (!win->IsKindOf(CLASSINFO(wxFrame)) &&
!win->IsKindOf(CLASSINFO(wxDialog)))
{
int x, y;
win->GetSize(&width, &height);
win->GetPosition(&x, &y);
-
+
if ((x + width) > max_width)
max_width = x + width;
if ((y + height) > max_height)
{
SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE));
Refresh();
-
+
if ( m_frameStatusBar )
{
wxSysColourChangedEvent event2;
event2.SetEventObject( m_frameStatusBar );
m_frameStatusBar->ProcessEvent(event2);
}
-
+
// Propagate the event to the non-top-level children
wxWindow::OnSysColourChanged(event);
}
return;
}
#endif
-
+
// do we have _exactly_ one child?
wxWindow *child = NULL;
for ( wxNode *node = GetChildren().First(); node; node = node->Next() )
{
wxWindow *win = (wxWindow *)node->Data();
if ( !win->IsKindOf(CLASSINFO(wxFrame)) &&
- !win->IsKindOf(CLASSINFO(wxDialog)) &&
+ !win->IsKindOf(CLASSINFO(wxDialog)) &&
(win != GetStatusBar())
#if wxUSE_TOOLBAR
&& (win != GetToolBar())
child = win;
}
}
-
+
if ( child ) {
// we have exactly one child - set it's size to fill the whole frame
int clientW, clientH;
GetClientSize(&clientW, &clientH);
-
+
int x = 0;
int y = 0;
-
+
child->SetSize(x, y, clientW, clientH);
}
}
{
int display_width, display_height, width, height, x, y;
wxDisplaySize(&display_width, &display_height);
-
+
GetSize(&width, &height);
GetPosition(&x, &y);
-
+
if (direction & wxHORIZONTAL)
x = (int)((display_width - width)/2);
if (direction & wxVERTICAL)
y = (int)((display_height - height)/2);
-
+
SetSize(x, y, width, height);
}
{
int w, h;
GetToolBar()->GetSize(& w, & h);
-
+
if (GetToolBar()->GetWindowStyleFlag() & wxTB_VERTICAL)
{
pt.x += w;
void wxFrame::ScreenToClient(int *x, int *y) const
{
wxWindow::ScreenToClient(x, y);
-
+
// We may be faking the client origin.
// So a window that's really at (0, 30) may appear
// (to wxWin apps) to be at (0, 0).
wxPoint pt1(GetClientAreaOrigin());
*x += pt1.x;
*y += pt1.y;
-
+
wxWindow::ClientToScreen(x, y);
}
{
wxCHECK_MSG( m_frameToolBar == NULL, FALSE,
"recreating toolbar in wxFrame" );
-
+
wxToolBar* toolBar = OnCreateToolBar(style, id, name);
if (toolBar)
{
void wxFrame::PositionToolBar()
{
int cw, ch;
-
+
GetClientSize(& cw, &ch);
-
+
if (GetToolBar())
{
int tw, th;
GetToolBar()->GetSize(& tw, & th);
-
+
if (GetToolBar()->GetWindowStyleFlag() & wxTB_VERTICAL)
{
// Use the 'real' position. wxSIZE_NO_ADJUSTMENTS
{
if (m_winCaptured)
return;
-
+
if (GetMainWidget())
XtAddGrab((Widget) m_frameShell, TRUE, FALSE);
m_winCaptured = TRUE;
{
if (!m_winCaptured)
return;
-
+
if (GetMainWidget())
XtRemoveGrab((Widget) m_frameShell);
m_winCaptured = FALSE;
XLowerWindow(XtDisplay((Widget) m_frameShell), parent_window);
}
-void wxFrameFocusProc(Widget workArea, XtPointer clientData,
+void wxFrameFocusProc(Widget workArea, XtPointer clientData,
XmAnyCallbackStruct *cbs)
{
- wxFrame *frame = (wxFrame *)clientData;
-
// wxDebugMsg("focus proc from frame %ld\n",(long)frame);
// TODO
- // frame->GetEventHandler()->OnSetFocus();
+ // wxFrame *frame = (wxFrame *)clientData;
+ // frame->GetEventHandler()->OnSetFocus();
}
/* MATTEW: Used to insure that hide-&-show within an event cycle works */
-static void wxFrameMapProc(Widget frameShell, XtPointer clientData,
+static void wxFrameMapProc(Widget frameShell, XtPointer clientData,
XCrossingEvent * event)
{
- wxFrame *frame = (wxFrame *)wxWidgetHashTable->Get((long)clientData);
-
+ wxFrame *frame = (wxFrame *)wxGetWindowFromTable((Widget)clientData);
+
if (frame) {
XEvent *e = (XEvent *)event;
-
+
if (e->xany.type == MapNotify)
{
// Iconize fix
void wxCloseFrameCallback(Widget widget, XtPointer client_data, XmAnyCallbackStruct *cbs)
{
wxFrame *frame = (wxFrame *)client_data;
-
+
wxCloseEvent closeEvent(wxEVT_CLOSE_WINDOW, frame->GetId());
closeEvent.SetEventObject(frame);
-
+
// May delete the frame (with delayed deletion)
frame->GetEventHandler()->ProcessEvent(closeEvent);
}
// Created: 17/09/98
// RCS-ID: $Id$
// Copyright: (c) Julian Smart
-// Licence: wxWindows licence
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
extern wxList wxModelessWindows;
// Implemented in frame.cpp
-extern void wxFrameFocusProc(Widget workArea, XtPointer clientData,
+extern void wxFrameFocusProc(Widget workArea, XtPointer clientData,
XmAnyCallbackStruct *cbs);
#define wxID_NOTEBOOK_CLIENT_AREA wxID_HIGHEST + 100
m_clientWindow = (wxMDIClientWindow*) NULL;
m_activeChild = (wxMDIChildFrame*) NULL;
m_activeMenuBar = (wxMenuBar*) NULL;
-
+
bool success = wxFrame::Create(parent, id, title, pos, size, style, name);
if (success)
{
// TODO: app cannot override OnCreateClient since
// wxMDIParentFrame::OnCreateClient will still be called
// (we're in the constructor). How to resolve?
-
+
m_clientWindow = OnCreateClient();
-
+
// Uses own style for client style
m_clientWindow->CreateClient(this, GetWindowStyleFlag());
-
+
int w, h;
GetClientSize(& w, & h);
m_clientWindow->SetSize(0, 0, w, h);
{
// Make sure we delete the client window last of all
RemoveChild(m_clientWindow);
-
+
DestroyChildren();
-
+
delete m_clientWindow;
m_clientWindow = NULL;
}
void wxMDIParentFrame::SetMenuBar(wxMenuBar *menu_bar)
{
m_frameMenuBar = menu_bar;
-
+
SetChildMenuBar((wxMDIChildFrame*) NULL);
}
int y = 0;
int width, height;
GetClientSize(&width, &height);
-
+
if ( GetClientWindow() )
GetClientWindow()->SetSize(x, y, width, height);
}
void wxMDIParentFrame::SetChildMenuBar(wxMDIChildFrame* child)
{
wxMenuBar* oldMenuBar = m_activeMenuBar;
-
+
if (child == (wxMDIChildFrame*) NULL) // No child: use parent frame
{
if (GetMenuBar() && (GetMenuBar() != m_activeMenuBar))
{
// if (m_activeMenuBar)
// m_activeMenuBar->DestroyMenuBar();
-
+
m_activeMenuBar = GetMenuBar();
m_activeMenuBar->CreateMenuBar(this);
/*
*/
if (oldMenuBar && oldMenuBar->GetMainWidget())
XtUnmapWidget((Widget) oldMenuBar->GetMainWidget());
-
+
}
}
else if (child->GetMenuBar() == (wxMenuBar*) NULL) // No child menu bar: use parent frame
{
// if (m_activeMenuBar)
// m_activeMenuBar->DestroyMenuBar();
-
+
m_activeMenuBar = child->GetMenuBar();
m_activeMenuBar->CreateMenuBar(this);
/*
static wxEventType inEvent = wxEVT_NULL;
if (inEvent == event.GetEventType())
return FALSE;
-
+
inEvent = event.GetEventType();
-
+
bool res = FALSE;
if (m_activeChild && event.IsKindOf(CLASSINFO(wxCommandEvent)))
{
res = m_activeChild->GetEventHandler()->ProcessEvent(event);
}
-
+
if (!res)
res = GetEventHandler()->wxEvtHandler::ProcessEvent(event);
-
+
inEvent = wxEVT_NULL;
-
+
return res;
}
void wxMDIParentFrame::OnSysColourChanged(wxSysColourChangedEvent& event)
{
// TODO
-
+
// Propagate the event to the non-top-level children
wxFrame::OnSysColourChanged(event);
}
const wxString& name)
{
SetName(name);
-
+
m_backgroundColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE);
m_foregroundColour = *wxBLACK;
m_font = wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT);
-
+
if ( id > -1 )
m_windowId = id;
else
m_windowId = (int)NewControlId();
-
+
wxMDIClientWindow* clientWindow = parent->GetClientWindow();
-
+
wxASSERT_MSG( (clientWindow != (wxWindow*) NULL), "Missing MDI client window.");
-
+
if (clientWindow) clientWindow->AddChild(this);
-
+
SetMDIParentFrame(parent);
-
- int x = pos.x; int y = pos.y;
- int width = size.x; int height = size.y;
+
+ int width = size.x;
+ int height = size.y;
if (width == -1)
width = 200; // TODO: give reasonable default
if (height == -1)
height = 200; // TODO: give reasonable default
-
+
// We're deactivating the old child
wxMDIChildFrame* oldActiveChild = parent->GetActiveChild();
if (oldActiveChild)
event.SetEventObject( oldActiveChild );
oldActiveChild->GetEventHandler()->ProcessEvent(event);
}
-
+
// This is the currently active child
parent->SetActiveChild((wxMDIChildFrame*) this);
-
+
// This time we'll try a bog-standard bulletin board for
// the 'frame'. A main window doesn't seem to work.
-
+
m_mainWidget = (WXWidget) XtVaCreateWidget("client",
xmBulletinBoardWidgetClass, (Widget) clientWindow->GetTopWidget(),
XmNmarginWidth, 0,
XtAddEventHandler((Widget) m_mainWidget, ExposureMask,FALSE,
wxUniversalRepaintProc, (XtPointer) this);
-
+
SetCanAddEventHandler(TRUE);
AttachWidget (parent, m_mainWidget, (WXWidget) NULL, pos.x, pos.y, size.x, size.y);
-
- ChangeBackgroundColour();
-
+
+ ChangeBackgroundColour();
+
XtManageChild((Widget) m_mainWidget);
-
+
SetTitle(title);
-
+
clientWindow->AddPage(this, title, TRUE);
clientWindow->Refresh();
-
+
// Positions the toolbar and status bar -- but we don't have any.
// PreResize();
-
+
wxModelessWindows.Append(this);
return TRUE;
}
if (m_mainWidget)
XtRemoveEventHandler((Widget) m_mainWidget, ExposureMask,FALSE,
wxUniversalRepaintProc, (XtPointer) this);
-
+
if (GetMDIParentFrame())
{
wxMDIParentFrame* parentFrame = GetMDIParentFrame();
-
+
if (parentFrame->GetActiveChild() == this)
parentFrame->SetActiveChild((wxMDIChildFrame*) NULL);
wxMDIClientWindow* clientWindow = parentFrame->GetClientWindow();
-
+
// Remove page if still there
if (clientWindow->RemovePage(this))
clientWindow->Refresh();
-
+
// Set the selection to the first remaining page
if (clientWindow->GetPageCount() > 0)
{
wxMDIParentFrame* parentFrame = (wxMDIParentFrame*) GetParent() ;
wxMDIChildFrame* oldActiveChild = parentFrame->GetActiveChild();
parentFrame->SetActiveChild(this);
-
+
if (oldActiveChild)
{
wxActivateEvent event(wxEVT_ACTIVATE, FALSE, oldActiveChild->GetId());
event.SetEventObject( oldActiveChild );
oldActiveChild->GetEventHandler()->ProcessEvent(event);
}
-
+
wxActivateEvent event(wxEVT_ACTIVATE, TRUE, this->GetId());
event.SetEventObject( this );
this->GetEventHandler()->ProcessEvent(event);
{
wxMDIParentFrame* parentFrame = (wxMDIParentFrame*) GetParent() ;
wxMDIChildFrame* oldActiveChild = parentFrame->GetActiveChild();
-
+
if (oldActiveChild == this)
{
wxActivateEvent event(wxEVT_ACTIVATE, FALSE, oldActiveChild->GetId());
// Don't create the underlying menubar yet; need to recreate
// it every time the child is activated.
m_frameMenuBar = menuBar;
-
+
// We make the assumption that if you're setting the menubar,
// this is the currently active child.
GetMDIParentFrame()->SetChildMenuBar(this);
m_icon = icon;
if (m_icon.Ok())
{
- // Not appropriate since there are no icons in
+ // Not appropriate since there are no icons in
// a tabbed window
}
}
// By the time this destructor is called, the child frames will have been
// deleted and removed from the notebook/client window.
DestroyChildren();
-
+
m_mainWidget = (WXWidget) 0;
}
{
// m_windowParent = parent;
// m_backgroundColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE);
-
+
bool success = wxNotebook::Create(parent, wxID_NOTEBOOK_CLIENT_AREA, wxPoint(0, 0), wxSize(100, 100), 0);
if (success)
{
wxActivateEvent event(wxEVT_ACTIVATE, TRUE, activeChild->GetId());
event.SetEventObject( activeChild );
activeChild->GetEventHandler()->ProcessEvent(event);
-
+
if (activeChild->GetMDIParentFrame())
{
activeChild->GetMDIParentFrame()->SetActiveChild(activeChild);
// Purpose: Region class
// Author: Markus Holzem/Julian Smart
// Created: Fri Oct 24 10:46:34 MET 1997
-// RCS-ID: $Id$
+// RCS-ID: $Id$
// Copyright: (c) 1997 Markus Holzem/Julian Smart
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// #include "wx/motif/private.h"
#if !USE_SHARED_LIBRARY
- IMPLEMENT_DYNAMIC_CLASS(wxRegion, wxGDIObject)
- IMPLEMENT_DYNAMIC_CLASS(wxRegionIterator, wxObject)
+ IMPLEMENT_DYNAMIC_CLASS(wxRegion, wxGDIObject)
+ IMPLEMENT_DYNAMIC_CLASS(wxRegionIterator, wxObject)
#endif
//-----------------------------------------------------------------------------
class WXDLLEXPORT wxRegionRefData : public wxGDIRefData {
public:
- wxRegionRefData()
- {
- m_region = XCreateRegion();
- }
-
- wxRegionRefData(const wxRegionRefData& data)
- {
- m_region = XCreateRegion();
- XUnionRegion(m_region, data.m_region, m_region);
- }
-
- ~wxRegionRefData()
- {
- XDestroyRegion(m_region);
- }
+ wxRegionRefData()
+ {
+ m_region = XCreateRegion();
+ }
+
+ wxRegionRefData(const wxRegionRefData& data)
+ {
+ m_region = XCreateRegion();
+ XUnionRegion(m_region, data.m_region, m_region);
+ }
+
+ ~wxRegionRefData()
+ {
+ XDestroyRegion(m_region);
+ }
Region m_region;
};
{
m_refData = new wxRegionRefData;
- XRectangle rect;
- rect.x = x;
- rect.y = y;
- rect.width = w;
- rect.height = h;
- XUnionRectWithRegion(&rect, M_REGION, M_REGION);
+ XRectangle rect;
+ rect.x = x;
+ rect.y = y;
+ rect.width = w;
+ rect.height = h;
+ XUnionRectWithRegion(&rect, M_REGION, M_REGION);
}
wxRegion::wxRegion(const wxPoint& topLeft, const wxPoint& bottomRight)
{
m_refData = new wxRegionRefData;
- XRectangle rect;
- rect.x = topLeft.x;
- rect.y = topLeft.y;
- rect.width = bottomRight.x - topLeft.x;
- rect.height = bottomRight.y - topLeft.y;
- XUnionRectWithRegion(&rect, M_REGION, M_REGION);
+ XRectangle rect;
+ rect.x = topLeft.x;
+ rect.y = topLeft.y;
+ rect.width = bottomRight.x - topLeft.x;
+ rect.height = bottomRight.y - topLeft.y;
+ XUnionRectWithRegion(&rect, M_REGION, M_REGION);
}
wxRegion::wxRegion(const wxRect& rect)
m_refData = new wxRegionRefData;
XRectangle rect1;
- rect1.x = rect.x;
- rect1.y = rect.y;
- rect1.width = rect.width;
+ rect1.x = rect.x;
+ rect1.y = rect.y;
+ rect1.width = rect.width;
rect1.height = rect.height;
XUnionRectWithRegion(&rect1, M_REGION, M_REGION);
}
//! Combine rectangle (x, y, w, h) with this.
bool wxRegion::Combine(long x, long y, long width, long height, wxRegionOp op)
{
- // Don't change shared data
- if (!m_refData) {
- m_refData = new wxRegionRefData();
- } else if (m_refData->GetRefCount() > 1) {
- wxRegionRefData* ref = (wxRegionRefData*)m_refData;
- UnRef();
- m_refData = new wxRegionRefData(*ref);
- }
+ // Don't change shared data
+ if (!m_refData) {
+ m_refData = new wxRegionRefData();
+ } else if (m_refData->GetRefCount() > 1) {
+ wxRegionRefData* ref = (wxRegionRefData*)m_refData;
+ UnRef();
+ m_refData = new wxRegionRefData(*ref);
+ }
// If ref count is 1, that means it's 'ours' anyway so no action.
Region rectRegion = XCreateRegion();
- XRectangle rect;
- rect.x = x;
- rect.y = y;
- rect.width = width;
- rect.height = height;
- XUnionRectWithRegion(&rect, rectRegion, rectRegion);
+ XRectangle rect;
+ rect.x = x;
+ rect.y = y;
+ rect.width = width;
+ rect.height = height;
+ XUnionRectWithRegion(&rect, rectRegion, rectRegion);
- int mode = 0; // TODO platform-specific code
switch (op)
{
case wxRGN_AND:
- XIntersectRegion(M_REGION, rectRegion, M_REGION);
+ XIntersectRegion(M_REGION, rectRegion, M_REGION);
break ;
case wxRGN_OR:
- XUnionRegion(M_REGION, rectRegion, M_REGION);
+ XUnionRegion(M_REGION, rectRegion, M_REGION);
break ;
case wxRGN_XOR:
// TODO
//! Union /e region with this.
bool wxRegion::Combine(const wxRegion& region, wxRegionOp op)
{
- if (region.Empty())
- return FALSE;
-
- // Don't change shared data
- if (!m_refData) {
- m_refData = new wxRegionRefData();
- } else if (m_refData->GetRefCount() > 1) {
- wxRegionRefData* ref = (wxRegionRefData*)m_refData;
- UnRef();
- m_refData = new wxRegionRefData(*ref);
- }
-
- int mode = 0; // TODO platform-specific code
+ if (region.Empty())
+ return FALSE;
+
+ // Don't change shared data
+ if (!m_refData) {
+ m_refData = new wxRegionRefData();
+ } else if (m_refData->GetRefCount() > 1) {
+ wxRegionRefData* ref = (wxRegionRefData*)m_refData;
+ UnRef();
+ m_refData = new wxRegionRefData(*ref);
+ }
+
switch (op)
{
case wxRGN_AND:
- XIntersectRegion(M_REGION, ((wxRegionRefData*)region.m_refData)->m_region,
- M_REGION);
+ XIntersectRegion(M_REGION, ((wxRegionRefData*)region.m_refData)->m_region,
+ M_REGION);
break ;
case wxRGN_OR:
- XUnionRegion(M_REGION, ((wxRegionRefData*)region.m_refData)->m_region,
- M_REGION);
+ XUnionRegion(M_REGION, ((wxRegionRefData*)region.m_refData)->m_region,
+ M_REGION);
break ;
case wxRGN_XOR:
// TODO
// Outer bounds of region
void wxRegion::GetBox(long& x, long& y, long&w, long &h) const
{
- if (m_refData) {
- XRectangle rect;
- XClipBox(M_REGION, &rect);
- x = rect.x;
- y = rect.y;
- w = rect.width;
- h = rect.height;
- } else {
- x = y = w = h = 0;
- }
+ if (m_refData) {
+ XRectangle rect;
+ XClipBox(M_REGION, &rect);
+ x = rect.x;
+ y = rect.y;
+ w = rect.width;
+ h = rect.height;
+ } else {
+ x = y = w = h = 0;
+ }
}
wxRect wxRegion::GetBox() const
// Is region empty?
bool wxRegion::Empty() const
{
- return m_refData ? XEmptyRegion(M_REGION) : TRUE;
+ return m_refData ? XEmptyRegion(M_REGION) : TRUE;
}
//-----------------------------------------------------------------------------
// Does the region contain the point (x,y)?
wxRegionContain wxRegion::Contains(long x, long y) const
{
- if (!m_refData)
- return wxOutRegion;
+ if (!m_refData)
+ return wxOutRegion;
// TODO. Return wxInRegion if within region.
if (0)
// Does the region contain the point pt?
wxRegionContain wxRegion::Contains(const wxPoint& pt) const
{
- if (!m_refData)
- return wxOutRegion;
+ if (!m_refData)
+ return wxOutRegion;
- return XPointInRegion(M_REGION, pt.x, pt.y) ? wxInRegion : wxOutRegion;
+ return XPointInRegion(M_REGION, pt.x, pt.y) ? wxInRegion : wxOutRegion;
}
// Does the region contain the rectangle (x, y, w, h)?
wxRegionContain wxRegion::Contains(long x, long y, long w, long h) const
{
- if (!m_refData)
- return wxOutRegion;
-
- switch (XRectInRegion(M_REGION, x, y, w, h)) {
- case RectangleIn: return wxInRegion;
- case RectanglePart: return wxPartRegion;
- }
- return wxOutRegion;
+ if (!m_refData)
+ return wxOutRegion;
+
+ switch (XRectInRegion(M_REGION, x, y, w, h)) {
+ case RectangleIn: return wxInRegion;
+ case RectanglePart: return wxPartRegion;
+ }
+ return wxOutRegion;
}
// Does the region contain the rectangle rect
wxRegionContain wxRegion::Contains(const wxRect& rect) const
{
- if (!m_refData)
- return wxOutRegion;
+ if (!m_refData)
+ return wxOutRegion;
long x, y, w, h;
x = rect.x;
}
///////////////////////////////////////////////////////////////////////////////
-// //
-// wxRegionIterator //
-// //
+// //
+// wxRegionIterator //
+// //
///////////////////////////////////////////////////////////////////////////////
/*!
{
m_rects = NULL;
- Reset(region);
+ Reset(region);
}
/*!
*/
void wxRegionIterator::Reset(const wxRegion& region)
{
- m_current = 0;
- m_region = region;
+ m_current = 0;
+ m_region = region;
if (m_rects)
delete[] m_rects;
m_rects = NULL;
- if (m_region.Empty())
- m_numRects = 0;
- else
+ if (m_region.Empty())
+ m_numRects = 0;
+ else
{
// TODO create m_rects and fill with rectangles for this region
m_numRects = 0;
*/
void wxRegionIterator::operator ++ ()
{
- if (m_current < m_numRects)
- ++m_current;
+ if (m_current < m_numRects)
+ ++m_current;
}
/*!
*/
void wxRegionIterator::operator ++ (int)
{
- if (m_current < m_numRects)
- ++m_current;
+ if (m_current < m_numRects)
+ ++m_current;
}
long wxRegionIterator::GetX() const
{
- if (m_current < m_numRects)
- return m_rects[m_current].x;
- return 0;
+ if (m_current < m_numRects)
+ return m_rects[m_current].x;
+ return 0;
}
long wxRegionIterator::GetY() const
{
- if (m_current < m_numRects)
- return m_rects[m_current].y;
- return 0;
+ if (m_current < m_numRects)
+ return m_rects[m_current].y;
+ return 0;
}
long wxRegionIterator::GetW() const
{
- if (m_current < m_numRects)
- return m_rects[m_current].width ;
- return 0;
+ if (m_current < m_numRects)
+ return m_rects[m_current].width ;
+ return 0;
}
long wxRegionIterator::GetH() const
{
- if (m_current < m_numRects)
- return m_rects[m_current].height;
- return 0;
+ if (m_current < m_numRects)
+ return m_rects[m_current].height;
+ return 0;
}