wxCocoa: Added wxScrollBar
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@27967 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
34
Makefile.in
34
Makefile.in
@@ -1181,6 +1181,7 @@ COND_TOOLKIT_COCOA_GUI_HDR = \
|
||||
wx/cocoa/NSControl.h \
|
||||
wx/cocoa/NSMenu.h \
|
||||
wx/cocoa/NSPanel.h \
|
||||
wx/cocoa/NSScroller.h \
|
||||
wx/cocoa/NSTabView.h \
|
||||
wx/cocoa/NSTableView.h \
|
||||
wx/cocoa/NSTextField.h \
|
||||
@@ -1226,6 +1227,7 @@ COND_TOOLKIT_COCOA_GUI_HDR = \
|
||||
wx/cocoa/radiobox.h \
|
||||
wx/cocoa/radiobut.h \
|
||||
wx/cocoa/region.h \
|
||||
wx/cocoa/scrolbar.h \
|
||||
wx/cocoa/slider.h \
|
||||
wx/cocoa/spinbutt.h \
|
||||
wx/cocoa/statbmp.h \
|
||||
@@ -2571,6 +2573,7 @@ COND_TOOLKIT_COCOA___GUI_SRC_OBJECTS = \
|
||||
monodll_NSControl.o \
|
||||
monodll_NSMenu.o \
|
||||
monodll_NSPanel.o \
|
||||
monodll_NSScroller.o \
|
||||
monodll_NSTabView.o \
|
||||
monodll_NSTableView.o \
|
||||
monodll_NSTextField.o \
|
||||
@@ -2616,6 +2619,7 @@ COND_TOOLKIT_COCOA___GUI_SRC_OBJECTS = \
|
||||
monodll_radiobox.o \
|
||||
monodll_radiobut.o \
|
||||
monodll_region.o \
|
||||
monodll_scrolbar.o \
|
||||
monodll_settings.o \
|
||||
monodll_slider.o \
|
||||
monodll_spinbutt.o \
|
||||
@@ -3431,6 +3435,7 @@ COND_TOOLKIT_COCOA___GUI_SRC_OBJECTS_1 = \
|
||||
monolib_NSControl.o \
|
||||
monolib_NSMenu.o \
|
||||
monolib_NSPanel.o \
|
||||
monolib_NSScroller.o \
|
||||
monolib_NSTabView.o \
|
||||
monolib_NSTableView.o \
|
||||
monolib_NSTextField.o \
|
||||
@@ -3476,6 +3481,7 @@ COND_TOOLKIT_COCOA___GUI_SRC_OBJECTS_1 = \
|
||||
monolib_radiobox.o \
|
||||
monolib_radiobut.o \
|
||||
monolib_region.o \
|
||||
monolib_scrolbar.o \
|
||||
monolib_settings.o \
|
||||
monolib_slider.o \
|
||||
monolib_spinbutt.o \
|
||||
@@ -4463,6 +4469,7 @@ COND_TOOLKIT_COCOA___GUI_SRC_OBJECTS_2 = \
|
||||
coredll_NSControl.o \
|
||||
coredll_NSMenu.o \
|
||||
coredll_NSPanel.o \
|
||||
coredll_NSScroller.o \
|
||||
coredll_NSTabView.o \
|
||||
coredll_NSTableView.o \
|
||||
coredll_NSTextField.o \
|
||||
@@ -4508,6 +4515,7 @@ COND_TOOLKIT_COCOA___GUI_SRC_OBJECTS_2 = \
|
||||
coredll_radiobox.o \
|
||||
coredll_radiobut.o \
|
||||
coredll_region.o \
|
||||
coredll_scrolbar.o \
|
||||
coredll_settings.o \
|
||||
coredll_slider.o \
|
||||
coredll_spinbutt.o \
|
||||
@@ -5190,6 +5198,7 @@ COND_TOOLKIT_COCOA___GUI_SRC_OBJECTS_3 = \
|
||||
corelib_NSControl.o \
|
||||
corelib_NSMenu.o \
|
||||
corelib_NSPanel.o \
|
||||
corelib_NSScroller.o \
|
||||
corelib_NSTabView.o \
|
||||
corelib_NSTableView.o \
|
||||
corelib_NSTextField.o \
|
||||
@@ -5235,6 +5244,7 @@ COND_TOOLKIT_COCOA___GUI_SRC_OBJECTS_3 = \
|
||||
corelib_radiobox.o \
|
||||
corelib_radiobut.o \
|
||||
corelib_region.o \
|
||||
corelib_scrolbar.o \
|
||||
corelib_settings.o \
|
||||
corelib_slider.o \
|
||||
corelib_spinbutt.o \
|
||||
@@ -8147,6 +8157,9 @@ monodll_NSMenu.o: $(srcdir)/src/cocoa/NSMenu.mm $(MONODLL_ODEP)
|
||||
monodll_NSPanel.o: $(srcdir)/src/cocoa/NSPanel.mm $(MONODLL_ODEP)
|
||||
$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $<
|
||||
|
||||
monodll_NSScroller.o: $(srcdir)/src/cocoa/NSScroller.mm $(MONODLL_ODEP)
|
||||
$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $<
|
||||
|
||||
monodll_NSTabView.o: $(srcdir)/src/cocoa/NSTabView.mm $(MONODLL_ODEP)
|
||||
$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $<
|
||||
|
||||
@@ -10064,6 +10077,9 @@ monodll_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONODLL_ODEP)
|
||||
@COND_TOOLKIT_MAC_USE_GUI_1_WXUNIV_0@monodll_scrolbar.o: $(srcdir)/src/mac/carbon/scrolbar.cpp $(MONODLL_ODEP)
|
||||
@COND_TOOLKIT_MAC_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $<
|
||||
|
||||
@COND_TOOLKIT_COCOA_USE_GUI_1_WXUNIV_0@monodll_scrolbar.o: $(srcdir)/src/cocoa/scrolbar.mm $(MONODLL_ODEP)
|
||||
@COND_TOOLKIT_COCOA_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $<
|
||||
|
||||
@COND_TOOLKIT_PM_USE_GUI_1_WXUNIV_0@monodll_scrolbar.o: $(srcdir)/src/os2/scrolbar.cpp $(MONODLL_ODEP)
|
||||
@COND_TOOLKIT_PM_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $<
|
||||
|
||||
@@ -11090,6 +11106,9 @@ monolib_NSMenu.o: $(srcdir)/src/cocoa/NSMenu.mm $(MONOLIB_ODEP)
|
||||
monolib_NSPanel.o: $(srcdir)/src/cocoa/NSPanel.mm $(MONOLIB_ODEP)
|
||||
$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $<
|
||||
|
||||
monolib_NSScroller.o: $(srcdir)/src/cocoa/NSScroller.mm $(MONOLIB_ODEP)
|
||||
$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $<
|
||||
|
||||
monolib_NSTabView.o: $(srcdir)/src/cocoa/NSTabView.mm $(MONOLIB_ODEP)
|
||||
$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $<
|
||||
|
||||
@@ -13007,6 +13026,9 @@ monolib_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONOLIB_ODEP)
|
||||
@COND_TOOLKIT_MAC_USE_GUI_1_WXUNIV_0@monolib_scrolbar.o: $(srcdir)/src/mac/carbon/scrolbar.cpp $(MONOLIB_ODEP)
|
||||
@COND_TOOLKIT_MAC_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $<
|
||||
|
||||
@COND_TOOLKIT_COCOA_USE_GUI_1_WXUNIV_0@monolib_scrolbar.o: $(srcdir)/src/cocoa/scrolbar.mm $(MONOLIB_ODEP)
|
||||
@COND_TOOLKIT_COCOA_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $<
|
||||
|
||||
@COND_TOOLKIT_PM_USE_GUI_1_WXUNIV_0@monolib_scrolbar.o: $(srcdir)/src/os2/scrolbar.cpp $(MONOLIB_ODEP)
|
||||
@COND_TOOLKIT_PM_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $<
|
||||
|
||||
@@ -14519,6 +14541,9 @@ coredll_NSMenu.o: $(srcdir)/src/cocoa/NSMenu.mm $(COREDLL_ODEP)
|
||||
coredll_NSPanel.o: $(srcdir)/src/cocoa/NSPanel.mm $(COREDLL_ODEP)
|
||||
$(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $<
|
||||
|
||||
coredll_NSScroller.o: $(srcdir)/src/cocoa/NSScroller.mm $(COREDLL_ODEP)
|
||||
$(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $<
|
||||
|
||||
coredll_NSTabView.o: $(srcdir)/src/cocoa/NSTabView.mm $(COREDLL_ODEP)
|
||||
$(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $<
|
||||
|
||||
@@ -16217,6 +16242,9 @@ coredll_win32.o: $(srcdir)/src/univ/themes/win32.cpp $(COREDLL_ODEP)
|
||||
@COND_TOOLKIT_MAC_USE_GUI_1_WXUNIV_0@coredll_scrolbar.o: $(srcdir)/src/mac/carbon/scrolbar.cpp $(COREDLL_ODEP)
|
||||
@COND_TOOLKIT_MAC_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $<
|
||||
|
||||
@COND_TOOLKIT_COCOA_USE_GUI_1_WXUNIV_0@coredll_scrolbar.o: $(srcdir)/src/cocoa/scrolbar.mm $(COREDLL_ODEP)
|
||||
@COND_TOOLKIT_COCOA_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $<
|
||||
|
||||
@COND_TOOLKIT_PM_USE_GUI_1_WXUNIV_0@coredll_scrolbar.o: $(srcdir)/src/os2/scrolbar.cpp $(COREDLL_ODEP)
|
||||
@COND_TOOLKIT_PM_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $<
|
||||
|
||||
@@ -16949,6 +16977,9 @@ corelib_NSMenu.o: $(srcdir)/src/cocoa/NSMenu.mm $(CORELIB_ODEP)
|
||||
corelib_NSPanel.o: $(srcdir)/src/cocoa/NSPanel.mm $(CORELIB_ODEP)
|
||||
$(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $<
|
||||
|
||||
corelib_NSScroller.o: $(srcdir)/src/cocoa/NSScroller.mm $(CORELIB_ODEP)
|
||||
$(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $<
|
||||
|
||||
corelib_NSTabView.o: $(srcdir)/src/cocoa/NSTabView.mm $(CORELIB_ODEP)
|
||||
$(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $<
|
||||
|
||||
@@ -18647,6 +18678,9 @@ corelib_win32.o: $(srcdir)/src/univ/themes/win32.cpp $(CORELIB_ODEP)
|
||||
@COND_TOOLKIT_MAC_USE_GUI_1_WXUNIV_0@corelib_scrolbar.o: $(srcdir)/src/mac/carbon/scrolbar.cpp $(CORELIB_ODEP)
|
||||
@COND_TOOLKIT_MAC_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $<
|
||||
|
||||
@COND_TOOLKIT_COCOA_USE_GUI_1_WXUNIV_0@corelib_scrolbar.o: $(srcdir)/src/cocoa/scrolbar.mm $(CORELIB_ODEP)
|
||||
@COND_TOOLKIT_COCOA_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $<
|
||||
|
||||
@COND_TOOLKIT_PM_USE_GUI_1_WXUNIV_0@corelib_scrolbar.o: $(srcdir)/src/os2/scrolbar.cpp $(CORELIB_ODEP)
|
||||
@COND_TOOLKIT_PM_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $<
|
||||
|
||||
|
@@ -1851,6 +1851,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
|
||||
src/cocoa/NSControl.mm
|
||||
src/cocoa/NSMenu.mm
|
||||
src/cocoa/NSPanel.mm
|
||||
src/cocoa/NSScroller.mm
|
||||
src/cocoa/NSTabView.mm
|
||||
src/cocoa/NSTableView.mm
|
||||
src/cocoa/NSTextField.mm
|
||||
@@ -1896,6 +1897,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
|
||||
src/cocoa/radiobox.mm
|
||||
src/cocoa/radiobut.mm
|
||||
src/cocoa/region.mm
|
||||
src/cocoa/scrolbar.mm
|
||||
src/cocoa/settings.cpp
|
||||
src/cocoa/slider.mm
|
||||
src/cocoa/spinbutt.mm
|
||||
@@ -1935,6 +1937,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
|
||||
wx/cocoa/NSControl.h
|
||||
wx/cocoa/NSMenu.h
|
||||
wx/cocoa/NSPanel.h
|
||||
wx/cocoa/NSScroller.h
|
||||
wx/cocoa/NSTabView.h
|
||||
wx/cocoa/NSTableView.h
|
||||
wx/cocoa/NSTextField.h
|
||||
@@ -1980,6 +1983,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
|
||||
wx/cocoa/radiobox.h
|
||||
wx/cocoa/radiobut.h
|
||||
wx/cocoa/region.h
|
||||
wx/cocoa/scrolbar.h
|
||||
wx/cocoa/slider.h
|
||||
wx/cocoa/spinbutt.h
|
||||
wx/cocoa/statbmp.h
|
||||
|
39
include/wx/cocoa/NSScroller.h
Normal file
39
include/wx/cocoa/NSScroller.h
Normal file
@@ -0,0 +1,39 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Name: wx/cocoa/NSScroller.h
|
||||
// Purpose: wxCocoaNSScroller class
|
||||
// Author: David Elliott
|
||||
// Modified by:
|
||||
// Created: 2004/04/27
|
||||
// RCS-ID: $Id$
|
||||
// Copyright: (c) 2004 David Elliott
|
||||
// Licence: wxWindows licence
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef _WX_COCOA_NSSCROLLER_H__
|
||||
#define _WX_COCOA_NSSCROLLER_H__
|
||||
|
||||
#include "wx/hashmap.h"
|
||||
#include "wx/cocoa/ObjcAssociate.h"
|
||||
#include "wx/cocoa/ObjcRef.h"
|
||||
|
||||
DECLARE_WXCOCOA_OBJC_CLASS(NSScroller);
|
||||
|
||||
WX_DECLARE_OBJC_HASHMAP(NSScroller);
|
||||
|
||||
class wxCocoaNSScroller
|
||||
{
|
||||
WX_DECLARE_OBJC_INTERFACE_HASHMAP(NSScroller);
|
||||
public:
|
||||
void AssociateNSScroller(WX_NSScroller cocoaNSScroller);
|
||||
inline void DisassociateNSScroller(WX_NSScroller cocoaNSScroller)
|
||||
{
|
||||
if(cocoaNSScroller)
|
||||
sm_cocoaHash.erase(cocoaNSScroller);
|
||||
}
|
||||
|
||||
virtual void Cocoa_wxNSScrollerAction(void) = 0;
|
||||
protected:
|
||||
static const wxObjcAutoRefFromAlloc<struct objc_object*> sm_cocoaTarget;
|
||||
};
|
||||
|
||||
#endif // _WX_COCOA_NSSCROLLER_H__
|
74
include/wx/cocoa/scrolbar.h
Normal file
74
include/wx/cocoa/scrolbar.h
Normal file
@@ -0,0 +1,74 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: wx/cocoa/scrolbar.h
|
||||
// Purpose: wxScrollBar class
|
||||
// Author: David Elliott
|
||||
// Modified by:
|
||||
// Created: 2004/04/25
|
||||
// RCS-ID: $Id$
|
||||
// Copyright: (c) 2004 David Elliott
|
||||
// Licence: wxWindows licence
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef _WX_COCOA_SCROLBAR_H__
|
||||
#define _WX_COCOA_SCROLBAR_H__
|
||||
|
||||
#include "wx/cocoa/NSScroller.h"
|
||||
|
||||
// ========================================================================
|
||||
// wxScrollBar
|
||||
// ========================================================================
|
||||
class WXDLLEXPORT wxScrollBar: public wxScrollBarBase, protected wxCocoaNSScroller
|
||||
{
|
||||
DECLARE_DYNAMIC_CLASS(wxScrollBar)
|
||||
DECLARE_EVENT_TABLE()
|
||||
WX_DECLARE_COCOA_OWNER(NSScroller,NSControl,NSView)
|
||||
// ------------------------------------------------------------------------
|
||||
// initialization
|
||||
// ------------------------------------------------------------------------
|
||||
public:
|
||||
wxScrollBar() { }
|
||||
wxScrollBar(wxWindow *parent, wxWindowID winid,
|
||||
const wxPoint& pos = wxDefaultPosition,
|
||||
const wxSize& size = wxDefaultSize,
|
||||
long style = wxSL_HORIZONTAL,
|
||||
const wxValidator& validator = wxDefaultValidator,
|
||||
const wxString& name = wxScrollBarNameStr)
|
||||
{
|
||||
Create(parent, winid, pos, size, style, validator, name);
|
||||
}
|
||||
|
||||
bool Create(wxWindow *parent, wxWindowID winid,
|
||||
const wxPoint& pos = wxDefaultPosition,
|
||||
const wxSize& size = wxDefaultSize,
|
||||
long style = wxSL_HORIZONTAL,
|
||||
const wxValidator& validator = wxDefaultValidator,
|
||||
const wxString& name = wxScrollBarNameStr);
|
||||
virtual ~wxScrollBar();
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// Cocoa callbacks
|
||||
// ------------------------------------------------------------------------
|
||||
protected:
|
||||
virtual void Cocoa_wxNSScrollerAction(void);
|
||||
// ------------------------------------------------------------------------
|
||||
// Implementation
|
||||
// ------------------------------------------------------------------------
|
||||
public:
|
||||
// accessors
|
||||
virtual int GetThumbPosition() const;
|
||||
virtual int GetThumbSize() const { return m_thumbSize; }
|
||||
virtual int GetPageSize() const { return m_pageSize; }
|
||||
virtual int GetRange() const { return m_range; }
|
||||
|
||||
// operations
|
||||
virtual void SetThumbPosition(int viewStart);
|
||||
virtual void SetScrollbar(int position, int thumbSize,
|
||||
int range, int pageSize,
|
||||
bool refresh = TRUE);
|
||||
protected:
|
||||
int m_range;
|
||||
int m_thumbSize;
|
||||
int m_pageSize;
|
||||
};
|
||||
|
||||
#endif // _WX_COCOA_SCROLBAR_H__
|
@@ -53,6 +53,8 @@ private:
|
||||
#include "wx/gtk/scrolbar.h"
|
||||
#elif defined(__WXMAC__)
|
||||
#include "wx/mac/scrolbar.h"
|
||||
#elif defined(__WXCOCOA__)
|
||||
#include "wx/cocoa/scrolbar.h"
|
||||
#elif defined(__WXPM__)
|
||||
#include "wx/os2/scrolbar.h"
|
||||
#endif
|
||||
|
56
src/cocoa/NSScroller.mm
Normal file
56
src/cocoa/NSScroller.mm
Normal file
@@ -0,0 +1,56 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: cocoa/NSScroller.mm
|
||||
// Purpose: wxCocoaNSScroller
|
||||
// Author: David Elliott
|
||||
// Modified by:
|
||||
// Created: 2004/04/27
|
||||
// RCS-ID: $Id$
|
||||
// Copyright: (c) 2004 David Elliott
|
||||
// Licence: wxWindows licence
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "wx/wxprec.h"
|
||||
#ifndef WX_PRECOMP
|
||||
#include "wx/log.h"
|
||||
#endif // WX_PRECOMP
|
||||
|
||||
#include "wx/cocoa/NSScroller.h"
|
||||
#import <AppKit/NSScroller.h>
|
||||
|
||||
WX_IMPLEMENT_OBJC_INTERFACE_HASHMAP(NSScroller)
|
||||
|
||||
// ============================================================================
|
||||
// @class wxNSScrollerTarget
|
||||
// ============================================================================
|
||||
@interface wxNSScrollerTarget : NSObject
|
||||
{
|
||||
}
|
||||
|
||||
- (void)wxNSScrollerAction: (id)sender;
|
||||
@end // wxNSScrollerTarget
|
||||
|
||||
@implementation wxNSScrollerTarget : NSObject
|
||||
- (void)wxNSScrollerAction: (id)sender
|
||||
{
|
||||
wxCocoaNSScroller *scroller = wxCocoaNSScroller::GetFromCocoa(sender);
|
||||
wxCHECK_RET(scroller,wxT("wxNSScrollerAction received without associated wx object"));
|
||||
scroller->Cocoa_wxNSScrollerAction();
|
||||
}
|
||||
|
||||
@end // implementation wxNSScrollerTarget
|
||||
|
||||
// ============================================================================
|
||||
// class wxCocoaNSScroller
|
||||
// ============================================================================
|
||||
const wxObjcAutoRefFromAlloc<struct objc_object*> wxCocoaNSScroller::sm_cocoaTarget = [[wxNSScrollerTarget alloc] init];
|
||||
|
||||
void wxCocoaNSScroller::AssociateNSScroller(WX_NSScroller cocoaNSScroller)
|
||||
{
|
||||
if(cocoaNSScroller)
|
||||
{
|
||||
sm_cocoaHash.insert(wxCocoaNSScrollerHash::value_type(cocoaNSScroller,this));
|
||||
[cocoaNSScroller setTarget: sm_cocoaTarget];
|
||||
[cocoaNSScroller setAction: @selector(wxNSScrollerAction:)];
|
||||
}
|
||||
}
|
||||
|
134
src/cocoa/scrolbar.mm
Normal file
134
src/cocoa/scrolbar.mm
Normal file
@@ -0,0 +1,134 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: cocoa/scrolbar.mm
|
||||
// Purpose: wxScrollBar
|
||||
// Author: David Elliott
|
||||
// Modified by:
|
||||
// Created: 2004/04/25
|
||||
// RCS-ID: $Id$
|
||||
// Copyright: (c) 2004 David Elliott
|
||||
// Licence: wxWindows licence
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "wx/wxprec.h"
|
||||
#if wxUSE_SCROLLBAR
|
||||
|
||||
#ifndef WX_PRECOMP
|
||||
#include "wx/app.h"
|
||||
#include "wx/scrolbar.h"
|
||||
#endif //WX_PRECOMP
|
||||
|
||||
#import <AppKit/NSScroller.h>
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxScrollBar, wxControl)
|
||||
BEGIN_EVENT_TABLE(wxScrollBar, wxScrollBarBase)
|
||||
END_EVENT_TABLE()
|
||||
WX_IMPLEMENT_COCOA_OWNER(wxScrollBar,NSScroller,NSControl,NSView)
|
||||
|
||||
bool wxScrollBar::Create(wxWindow *parent, wxWindowID winid,
|
||||
const wxPoint& pos, const wxSize& size, long style,
|
||||
const wxValidator& validator, const wxString& name)
|
||||
{
|
||||
if(!CreateControl(parent,winid,pos,size,style,validator,name))
|
||||
return false;
|
||||
SetNSScroller([[NSScroller alloc] initWithFrame: MakeDefaultNSRect(size)]);
|
||||
[m_cocoaNSView release];
|
||||
if(m_parent)
|
||||
m_parent->CocoaAddChild(this);
|
||||
SetInitialFrameRect(pos,size);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
wxScrollBar::~wxScrollBar()
|
||||
{
|
||||
DisassociateNSScroller(GetNSScroller());
|
||||
}
|
||||
|
||||
/* A word about NSScroller vs. wxScrollbar:
|
||||
|
||||
NSScroller uses two float values to represent the state of the scroller.
|
||||
The floatValue indicates where the knob is positioned on a scale from
|
||||
0.0 to 1.0. A value of 0.0 indicates the scroller is at the top or left,
|
||||
a value of 1.0 indicates the scroller is at the bottom or right. A value
|
||||
of 0.5 indicates the scroller is dead center.
|
||||
|
||||
wxScrollBar uses three values. The position indicates the number of
|
||||
scroll units where 0 is at the top or left. The range indicates how
|
||||
many scroll units there are in the entire bar and the thumb size indicates
|
||||
how many scroll units the thumb takes. The scrollbar is at the bottom
|
||||
or right when position == range - thumbSize.
|
||||
|
||||
It may be easier to consider wx position to be the top or left of the thumb.
|
||||
In Cocoa, floatValue can be considered as if it were the center of the
|
||||
thumb and the range is ALWAYS (no matter what the knobProportion is) the
|
||||
distance between the center point of the knob from one extreme to the other.
|
||||
*/
|
||||
|
||||
int wxScrollBar::GetThumbPosition() const
|
||||
{
|
||||
return (int)((m_range-m_thumbSize)*[GetNSScroller() floatValue]);
|
||||
}
|
||||
|
||||
void wxScrollBar::SetThumbPosition(int position)
|
||||
{
|
||||
[GetNSScroller() setFloatValue:((float)position)/(m_range-m_thumbSize)];
|
||||
}
|
||||
|
||||
void wxScrollBar::SetScrollbar(int position, int thumbSize,
|
||||
int range, int pageSize, bool refresh)
|
||||
{
|
||||
m_range = range;
|
||||
m_thumbSize = thumbSize;
|
||||
m_pageSize = pageSize;
|
||||
[GetNSScroller() setFloatValue:((float)position)/(m_range-m_thumbSize)
|
||||
knobProportion:((float)m_thumbSize)/m_range];
|
||||
}
|
||||
|
||||
void wxScrollBar::Cocoa_wxNSScrollerAction()
|
||||
{
|
||||
NSScrollerPart hitPart = [GetNSScroller() hitPart];
|
||||
wxEventType command;
|
||||
// Note: the comments about the part that is hit are for OS X, the
|
||||
// constants are sort of a leftover from NeXT. It makes more sense if
|
||||
// you remember that in NeXT clicking the knob slot used to do what
|
||||
// option-clicking does now.
|
||||
switch(hitPart)
|
||||
{
|
||||
// User dragged knob
|
||||
case NSScrollerKnob:
|
||||
command = wxEVT_SCROLL_THUMBTRACK;
|
||||
break;
|
||||
// User option-clicked slot
|
||||
case NSScrollerKnobSlot:
|
||||
command = wxEVT_SCROLL_THUMBTRACK;
|
||||
break;
|
||||
// User clicked Up/Left button
|
||||
case NSScrollerDecrementLine:
|
||||
command = wxEVT_SCROLL_LINEUP;
|
||||
break;
|
||||
// User option-clicked Up/left or clicked in slot
|
||||
case NSScrollerDecrementPage:
|
||||
command = wxEVT_SCROLL_PAGEUP;
|
||||
break;
|
||||
// User clicked Down/Right button
|
||||
case NSScrollerIncrementLine:
|
||||
command = wxEVT_SCROLL_LINEDOWN;
|
||||
break;
|
||||
// User option-clicked Down/Right or clicked in slot
|
||||
case NSScrollerIncrementPage:
|
||||
command = wxEVT_SCROLL_PAGEDOWN;
|
||||
break;
|
||||
// No-op
|
||||
case NSScrollerNoPart:
|
||||
default:
|
||||
return;
|
||||
}
|
||||
// TODO: When scrolling by pages, readjust the floatValue using the
|
||||
// pageSize (which may be different from thumbSize).
|
||||
wxScrollEvent event(command, GetId(), GetThumbPosition(),
|
||||
HasFlag(wxSB_VERTICAL)?wxVERTICAL:wxHORIZONTAL);
|
||||
event.SetEventObject(this);
|
||||
GetEventHandler()->ProcessEvent(event);
|
||||
}
|
||||
|
||||
#endif // wxUSE_SCROLLBAR
|
Reference in New Issue
Block a user