projects
/
wxWidgets.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
new makefile
[wxWidgets.git]
/
src
/
generic
/
sashwin.cpp
diff --git
a/src/generic/sashwin.cpp
b/src/generic/sashwin.cpp
index 18b56afa7b7ae15dede1891a6e931a2246d94aad..90bc832b3920c99c6bbfc67a61200cf4ee3783f6 100644
(file)
--- a/
src/generic/sashwin.cpp
+++ b/
src/generic/sashwin.cpp
@@
-22,23
+22,23
@@
#pragma hdrstop
#endif
#pragma hdrstop
#endif
+#if wxUSE_SASH
+
#ifndef WX_PRECOMP
#ifndef WX_PRECOMP
-#include "wx/wx.h"
+ #include "wx/dialog.h"
+ #include "wx/frame.h"
+ #include "wx/settings.h"
#endif
#endif
-#if !wxUSE_SASH
- #error "Thisfile requires wxUSE_SASH to be defined."
-#endif // wxUSE_SASH
-
#include <math.h>
#include <stdlib.h>
#include <math.h>
#include <stdlib.h>
-#include "wx/string.h"
#include "wx/dcscreen.h"
#include "wx/sashwin.h"
#include "wx/laywin.h"
#include "wx/dcscreen.h"
#include "wx/sashwin.h"
#include "wx/laywin.h"
-#if !USE_SHARED_LIBRARY
+DEFINE_EVENT_TYPE(wxEVT_SASH_DRAGGED)
+
IMPLEMENT_DYNAMIC_CLASS(wxSashWindow, wxWindow)
IMPLEMENT_DYNAMIC_CLASS(wxSashEvent, wxCommandEvent)
IMPLEMENT_DYNAMIC_CLASS(wxSashWindow, wxWindow)
IMPLEMENT_DYNAMIC_CLASS(wxSashEvent, wxCommandEvent)
@@
-47,30
+47,20
@@
BEGIN_EVENT_TABLE(wxSashWindow, wxWindow)
EVT_SIZE(wxSashWindow::OnSize)
EVT_MOUSE_EVENTS(wxSashWindow::OnMouseEvent)
END_EVENT_TABLE()
EVT_SIZE(wxSashWindow::OnSize)
EVT_MOUSE_EVENTS(wxSashWindow::OnMouseEvent)
END_EVENT_TABLE()
-#endif
-wxSashWindow::wxSashWindow()
+bool wxSashWindow::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos,
+ const wxSize& size, long style, const wxString& name)
{
{
- m_draggingEdge = wxSASH_NONE;
- m_dragMode = wxSASH_DRAG_NONE;
- m_oldX = 0;
- m_oldY = 0;
- m_firstX = 0;
- m_firstY = 0;
- m_borderSize = 3 ;
- m_extraBorderSize = 0;
- m_sashCursorWE = NULL;
- m_sashCursorNS = NULL;
+ return wxWindow::Create(parent, id, pos, size, style, name);
+}
- m_minimumPaneSizeX = 0;
- m_minimumPaneSizeY = 0;
-
m_maximumPaneSizeX = 10000
;
-
m_maximumPaneSizeY = 10000
;
+wxSashWindow::~wxSashWindow()
+{
+
delete m_sashCursorWE
;
+
delete m_sashCursorNS
;
}
}
-wxSashWindow::wxSashWindow(wxWindow *parent, wxWindowID id, const wxPoint& pos,
- const wxSize& size, long style, const wxString& name)
- :wxWindow(parent, id, pos, size, style, name)
+void wxSashWindow::Init()
{
m_draggingEdge = wxSASH_NONE;
m_dragMode = wxSASH_DRAG_NONE;
{
m_draggingEdge = wxSASH_NONE;
m_dragMode = wxSASH_DRAG_NONE;
@@
-86,17
+76,12
@@
wxSashWindow::wxSashWindow(wxWindow *parent, wxWindowID id, const wxPoint& pos,
m_maximumPaneSizeY = 10000;
m_sashCursorWE = new wxCursor(wxCURSOR_SIZEWE);
m_sashCursorNS = new wxCursor(wxCURSOR_SIZENS);
m_maximumPaneSizeY = 10000;
m_sashCursorWE = new wxCursor(wxCURSOR_SIZEWE);
m_sashCursorNS = new wxCursor(wxCURSOR_SIZENS);
+ m_mouseCaptured = FALSE;
// Eventually, we'll respond to colour change messages
InitColours();
}
// Eventually, we'll respond to colour change messages
InitColours();
}
-wxSashWindow::~wxSashWindow()
-{
- delete m_sashCursorWE;
- delete m_sashCursorNS;
-}
-
void wxSashWindow::OnPaint(wxPaintEvent& WXUNUSED(event))
{
wxPaintDC dc(this);
void wxSashWindow::OnPaint(wxPaintEvent& WXUNUSED(event))
{
wxPaintDC dc(this);
@@
-109,25
+94,27
@@
void wxSashWindow::OnPaint(wxPaintEvent& WXUNUSED(event))
void wxSashWindow::OnMouseEvent(wxMouseEvent& event)
{
void wxSashWindow::OnMouseEvent(wxMouseEvent& event)
{
-
long
x, y;
- event.Position(&x, &y);
+
wxCoord
x, y;
+ event.
Get
Position(&x, &y);
wxSashEdgePosition sashHit = SashHitTest(x, y);
// reset the cursor
wxSashEdgePosition sashHit = SashHitTest(x, y);
// reset the cursor
-#ifdef __WXMOTIF__
- SetCursor(* wxSTANDARD_CURSOR);
+#if defined(__WXMOTIF__) || defined(__WXGTK__)
+ // Not necessary and in fact inhibits proper cursor setting (JACS 8/2000)
+ //SetCursor(* wxSTANDARD_CURSOR);
#endif
#ifdef __WXMSW__
#endif
#ifdef __WXMSW__
- SetCursor(wx
Cursor()
);
+ SetCursor(wx
NullCursor
);
#endif
if (event.LeftDown())
{
#endif
if (event.LeftDown())
{
+ CaptureMouse();
+ m_mouseCaptured = TRUE;
+
if ( sashHit != wxSASH_NONE )
{
if ( sashHit != wxSASH_NONE )
{
- CaptureMouse();
-
// Required for X to specify that
// that we wish to draw on top of all windows
// - and we optimise by specifying the area
// Required for X to specify that
// that we wish to draw on top of all windows
// - and we optimise by specifying the area
@@
-149,12
+136,24
@@
void wxSashWindow::OnMouseEvent(wxMouseEvent& event)
m_draggingEdge = sashHit;
m_firstX = x;
m_firstY = y;
m_draggingEdge = sashHit;
m_firstX = x;
m_firstY = y;
+
+ if ( (sashHit == wxSASH_LEFT) || (sashHit == wxSASH_RIGHT) )
+ {
+ SetCursor(*m_sashCursorWE);
+ }
+ else
+ {
+ SetCursor(*m_sashCursorNS);
+ }
}
}
else if ( event.LeftUp() && m_dragMode == wxSASH_DRAG_LEFT_DOWN )
{
// Wasn't a proper drag
}
}
else if ( event.LeftUp() && m_dragMode == wxSASH_DRAG_LEFT_DOWN )
{
// Wasn't a proper drag
- ReleaseMouse();
+ if (m_mouseCaptured)
+ ReleaseMouse();
+ m_mouseCaptured = FALSE;
+
wxScreenDC::EndDrawingOnTop();
m_dragMode = wxSASH_DRAG_NONE;
m_draggingEdge = wxSASH_NONE;
wxScreenDC::EndDrawingOnTop();
m_dragMode = wxSASH_DRAG_NONE;
m_draggingEdge = wxSASH_NONE;
@@
-163,7
+162,10
@@
void wxSashWindow::OnMouseEvent(wxMouseEvent& event)
{
// We can stop dragging now and see what we've got.
m_dragMode = wxSASH_DRAG_NONE;
{
// We can stop dragging now and see what we've got.
m_dragMode = wxSASH_DRAG_NONE;
- ReleaseMouse();
+ if (m_mouseCaptured)
+ ReleaseMouse();
+ m_mouseCaptured = FALSE;
+
// Erase old tracker
DrawSashTracker(m_draggingEdge, m_oldX, m_oldY);
// Erase old tracker
DrawSashTracker(m_draggingEdge, m_oldX, m_oldY);
@@
-281,6
+283,12
@@
void wxSashWindow::OnMouseEvent(wxMouseEvent& event)
event.SetDragRect(dragRect);
GetEventHandler()->ProcessEvent(event);
}
event.SetDragRect(dragRect);
GetEventHandler()->ProcessEvent(event);
}
+ else if ( event.LeftUp() )
+ {
+ if (m_mouseCaptured)
+ ReleaseMouse();
+ m_mouseCaptured = FALSE;
+ }
else if (event.Moving() && !event.Dragging())
{
// Just change the cursor if required
else if (event.Moving() && !event.Dragging())
{
// Just change the cursor if required
@@
-295,6
+303,10
@@
void wxSashWindow::OnMouseEvent(wxMouseEvent& event)
SetCursor(*m_sashCursorNS);
}
}
SetCursor(*m_sashCursorNS);
}
}
+ else
+ {
+ SetCursor(wxNullCursor);
+ }
}
else if ( event.Dragging() &&
((m_dragMode == wxSASH_DRAG_DRAGGING) ||
}
else if ( event.Dragging() &&
((m_dragMode == wxSASH_DRAG_DRAGGING) ||
@@
-402,7
+414,7
@@
void wxSashWindow::DrawBorders(wxDC& dc)
wxPen lightShadowPen(m_lightShadowColour, 1, wxSOLID);
wxPen hilightPen(m_hilightColour, 1, wxSOLID);
wxPen lightShadowPen(m_lightShadowColour, 1, wxSOLID);
wxPen hilightPen(m_hilightColour, 1, wxSOLID);
- if ( GetWindowStyleFlag() & wxSW_3D )
+ if ( GetWindowStyleFlag() & wxSW_3D
BORDER
)
{
dc.SetPen(mediumShadowPen);
dc.DrawLine(0, 0, w-1, 0);
{
dc.SetPen(mediumShadowPen);
dc.DrawLine(0, 0, w-1, 0);
@@
-467,20
+479,20
@@
void wxSashWindow::DrawSash(wxSashEdgePosition edge, wxDC& dc)
dc.SetBrush(faceBrush);
dc.DrawRectangle(sashPosition, 0, GetEdgeMargin(edge), h);
dc.SetBrush(faceBrush);
dc.DrawRectangle(sashPosition, 0, GetEdgeMargin(edge), h);
- if (GetWindowStyleFlag() & wxSW_3D)
+ if (GetWindowStyleFlag() & wxSW_3D
SASH
)
{
if (edge == wxSASH_LEFT)
{
{
if (edge == wxSASH_LEFT)
{
- // Draw a
black
line on the left to indicate that the
+ // Draw a
dark grey
line on the left to indicate that the
// sash is raised
// sash is raised
- dc.SetPen(
black
Pen);
+ dc.SetPen(
mediumShadow
Pen);
dc.DrawLine(GetEdgeMargin(edge), 0, GetEdgeMargin(edge), h);
}
else
{
dc.DrawLine(GetEdgeMargin(edge), 0, GetEdgeMargin(edge), h);
}
else
{
- // Draw a
white
line on the right to indicate that the
+ // Draw a
highlight
line on the right to indicate that the
// sash is raised
// sash is raised
- dc.SetPen(
white
Pen);
+ dc.SetPen(
hilight
Pen);
dc.DrawLine(w - GetEdgeMargin(edge), 0, w - GetEdgeMargin(edge), h);
}
}
dc.DrawLine(w - GetEdgeMargin(edge), 0, w - GetEdgeMargin(edge), h);
}
}
@@
-497,21
+509,21
@@
void wxSashWindow::DrawSash(wxSashEdgePosition edge, wxDC& dc)
dc.SetBrush(faceBrush);
dc.DrawRectangle(0, sashPosition, w, GetEdgeMargin(edge));
dc.SetBrush(faceBrush);
dc.DrawRectangle(0, sashPosition, w, GetEdgeMargin(edge));
- if (GetWindowStyleFlag() & wxSW_3D)
+ if (GetWindowStyleFlag() & wxSW_3D
SASH
)
{
if (edge == wxSASH_BOTTOM)
{
{
if (edge == wxSASH_BOTTOM)
{
- // Draw a
black
line on the bottom to indicate that the
+ // Draw a
highlight
line on the bottom to indicate that the
// sash is raised
// sash is raised
- dc.SetPen(
black
Pen);
+ dc.SetPen(
hilight
Pen);
dc.DrawLine(0, h - GetEdgeMargin(edge), w, h - GetEdgeMargin(edge));
}
else
{
dc.DrawLine(0, h - GetEdgeMargin(edge), w, h - GetEdgeMargin(edge));
}
else
{
- // Draw a
white
line on the top to indicate that the
+ // Draw a
drak grey
line on the top to indicate that the
// sash is raised
// sash is raised
- dc.SetPen(
white
Pen);
- dc.DrawLine(
0, GetEdgeMargin(edge), w
, GetEdgeMargin(edge));
+ dc.SetPen(
mediumShadow
Pen);
+ dc.DrawLine(
1, GetEdgeMargin(edge), w-1
, GetEdgeMargin(edge));
}
}
}
}
}
}
@@
-647,12
+659,12
@@
void wxSashWindow::SizeWindows()
void wxSashWindow::InitColours()
{
// Shadow colours
void wxSashWindow::InitColours()
{
// Shadow colours
-#if
defined(__WIN95__)
- m_faceColour = wxSystemSettings::Get
System
Colour(wxSYS_COLOUR_3DFACE);
- m_mediumShadowColour = wxSystemSettings::Get
System
Colour(wxSYS_COLOUR_3DSHADOW);
- m_darkShadowColour = wxSystemSettings::Get
System
Colour(wxSYS_COLOUR_3DDKSHADOW);
- m_lightShadowColour = wxSystemSettings::Get
System
Colour(wxSYS_COLOUR_3DLIGHT);
- m_hilightColour = wxSystemSettings::Get
System
Colour(wxSYS_COLOUR_3DHILIGHT);
+#if
ndef __WIN16__
+ m_faceColour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE);
+ m_mediumShadowColour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DSHADOW);
+ m_darkShadowColour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DDKSHADOW);
+ m_lightShadowColour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DLIGHT);
+ m_hilightColour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DHILIGHT);
#else
m_faceColour = *(wxTheColourDatabase->FindColour("LIGHT GREY"));
m_mediumShadowColour = *(wxTheColourDatabase->FindColour("GREY"));
#else
m_faceColour = *(wxTheColourDatabase->FindColour("LIGHT GREY"));
m_mediumShadowColour = *(wxTheColourDatabase->FindColour("GREY"));
@@
-671,3
+683,4
@@
void wxSashWindow::SetSashVisible(wxSashEdgePosition edge, bool sash)
m_sashes[edge].m_margin = 0;
}
m_sashes[edge].m_margin = 0;
}
+#endif // wxUSE_SASH