The scroll bars now work correctly.

Mouse wheel support added.


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@6572 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2004-02-12 22:57:27 +00:00
parent bf74bb653a
commit 4a66542685
4 changed files with 53 additions and 3 deletions
+40 -1
View File
@@ -7,8 +7,9 @@
#include "DataView.h"
#include "DataEditor.h"
#include <Messenger.h>
//#include <Messenger.h>
#include <Looper.h>
#include <ScrollBar.h>
static const uint32 kBlockSize = 16;
@@ -158,6 +159,9 @@ DataView::Draw(BRect updateRect)
int32
DataView::PositionAt(view_focus focus, BPoint point, view_focus *_newFocus)
{
if (!Bounds().Contains(point))
return -1;
float left = fCharWidth * (fPositionLength + kBlockSpace) + kHorizontalSpace;
float hexWidth = fCharWidth * kBlockSize * kHexByteWidth;
float width = fCharWidth;
@@ -478,6 +482,41 @@ DataView::WindowActivated(bool active)
}
void
DataView::UpdateScroller()
{
float width, height;
GetPreferredSize(&width, &height);
BScrollBar *bar;
if ((bar = ScrollBar(B_HORIZONTAL)) != NULL) {
float delta = width - Bounds().Width();
if (delta < 0)
delta = 0;
bar->SetRange(0, delta);
bar->SetSteps(fCharWidth, Bounds().Width());
bar->SetProportion(Bounds().Width() / width);
}
if ((bar = ScrollBar(B_VERTICAL)) != NULL) {
float delta = height - Bounds().Height();
if (delta < 0)
delta = 0;
bar->SetRange(0, delta);
bar->SetSteps(fFontHeight, Bounds().Height());
bar->SetProportion(Bounds().Height() / height);
}
}
void
DataView::FrameResized(float width, float height)
{
UpdateScroller();
}
void
DataView::MouseDown(BPoint where)
{
+2
View File
@@ -34,10 +34,12 @@ class DataView : public BView {
virtual void MouseUp(BPoint where);
virtual void WindowActivated(bool active);
virtual void FrameResized(float width, float height);
virtual void SetFont(const BFont *font, uint32 properties = B_FONT_ALL);
virtual void GetPreferredSize(float *_width, float *_height);
void SetFontSize(float point);
void UpdateScroller();
void SetSelection(int32 start, int32 end, view_focus focus = kNoFocus);
void GetSelection(int32 &start, int32 &end);
+3 -1
View File
@@ -365,6 +365,8 @@ ProbeView::ProbeView(BRect rect, entry_ref *ref, const char *attribute)
fScrollView = new BScrollView("scroller", fDataView, B_FOLLOW_ALL, B_WILL_DRAW, true, true);
AddChild(fScrollView);
fDataView->UpdateScroller();
}
@@ -383,7 +385,7 @@ ProbeView::UpdateSizeLimits()
fDataView->GetPreferredSize(&width, &height);
Window()->SetSizeLimits(200, width + B_V_SCROLL_BAR_WIDTH,
200, height + fHeaderView->Frame().bottom + 1 + B_H_SCROLL_BAR_HEIGHT + Frame().top);
200, height + fHeaderView->Frame().bottom + 4 + B_H_SCROLL_BAR_HEIGHT + Frame().top);
}
+8 -1
View File
@@ -83,7 +83,14 @@ ProbeWindow::~ProbeWindow()
void
ProbeWindow::MessageReceived(BMessage *message)
{
BWindow::MessageReceived(message);
switch (message->what) {
case B_MOUSE_WHEEL_CHANGED:
if (BView *view = FindView("dataView"))
view->MessageReceived(message);
break;
default:
BWindow::MessageReceived(message);
}
}