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 \
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 \
monodll_NSControl.o \
monodll_NSMenu.o \
monodll_NSPanel.o \
+ monodll_NSScroller.o \
monodll_NSTabView.o \
monodll_NSTableView.o \
monodll_NSTextField.o \
monodll_radiobox.o \
monodll_radiobut.o \
monodll_region.o \
+ monodll_scrolbar.o \
monodll_settings.o \
monodll_slider.o \
monodll_spinbutt.o \
monolib_NSControl.o \
monolib_NSMenu.o \
monolib_NSPanel.o \
+ monolib_NSScroller.o \
monolib_NSTabView.o \
monolib_NSTableView.o \
monolib_NSTextField.o \
monolib_radiobox.o \
monolib_radiobut.o \
monolib_region.o \
+ monolib_scrolbar.o \
monolib_settings.o \
monolib_slider.o \
monolib_spinbutt.o \
coredll_NSControl.o \
coredll_NSMenu.o \
coredll_NSPanel.o \
+ coredll_NSScroller.o \
coredll_NSTabView.o \
coredll_NSTableView.o \
coredll_NSTextField.o \
coredll_radiobox.o \
coredll_radiobut.o \
coredll_region.o \
+ coredll_scrolbar.o \
coredll_settings.o \
coredll_slider.o \
coredll_spinbutt.o \
corelib_NSControl.o \
corelib_NSMenu.o \
corelib_NSPanel.o \
+ corelib_NSScroller.o \
corelib_NSTabView.o \
corelib_NSTableView.o \
corelib_NSTextField.o \
corelib_radiobox.o \
corelib_radiobut.o \
corelib_region.o \
+ corelib_scrolbar.o \
corelib_settings.o \
corelib_slider.o \
corelib_spinbutt.o \
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) $<
@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) $<
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) $<
@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) $<
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) $<
@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) $<
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) $<
@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) $<
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
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
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
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
--- /dev/null
+///////////////////////////////////////////////////////////////////////////////
+// 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__
--- /dev/null
+/////////////////////////////////////////////////////////////////////////////
+// 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__
#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
--- /dev/null
+/////////////////////////////////////////////////////////////////////////////
+// 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:)];
+ }
+}
+
--- /dev/null
+/////////////////////////////////////////////////////////////////////////////
+// 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