From 789b86ec6c5748d5bcc32eed167ece7369d8c3cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Sat, 17 Mar 2007 18:25:27 +0000 Subject: [PATCH] don't send a message on mouse down and mouve moved correctly set "be:channel_changed" correctly set "be:current_channel" with SetCurrentChannel() correctly set "be:value" git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20388 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/interface/ChannelControl.cpp | 13 ++++++------- src/kits/interface/ChannelSlider.cpp | 21 +++++++++------------ 2 files changed, 15 insertions(+), 19 deletions(-) diff --git a/src/kits/interface/ChannelControl.cpp b/src/kits/interface/ChannelControl.cpp index d46f0e62af..bd4439d2a0 100644 --- a/src/kits/interface/ChannelControl.cpp +++ b/src/kits/interface/ChannelControl.cpp @@ -263,14 +263,12 @@ BChannelControl::InvokeChannel(BMessage *msg, int32 fromChannel, invokeMessage.AddInt32("be:current_channel", fCurrentChannel); - if (channelCount == -1) + if (channelCount < 0) channelCount = fChannelCount - fromChannel; - for (int32 i = fromChannel; i < fromChannel + channelCount; i++) { - invokeMessage.AddInt32("be:channel_value", fChannelValues[i]); - // TODO: Fix this: just send "be:channel_changed" = true - // for channels which have changed their values. - invokeMessage.AddBool("be:channel_changed", true); + for (int32 i = 0; i < channelCount; i++) { + invokeMessage.AddInt32("be:channel_value", fChannelValues[fromChannel + i]); + invokeMessage.AddBool("be:channel_changed", inMask ? inMask[i] : true); } return BControl::Invoke(&invokeMessage); @@ -417,7 +415,8 @@ BChannelControl::SetAllValue(int32 values) delete[] fChannelValues; fChannelValues = newValues; - + BControl::SetValue(fChannelValues[fCurrentChannel]); + return B_OK; } diff --git a/src/kits/interface/ChannelSlider.cpp b/src/kits/interface/ChannelSlider.cpp index 6174f8932d..725a167a4c 100644 --- a/src/kits/interface/ChannelSlider.cpp +++ b/src/kits/interface/ChannelSlider.cpp @@ -272,6 +272,7 @@ BChannelSlider::MouseDown(BPoint where) // Click was on a slider. if (frame.Contains(where)) { fCurrentChannel = channel; + SetCurrentChannel(channel); break; } } @@ -626,18 +627,15 @@ void BChannelSlider::FinishChange() { if (fInitialValues != NULL) { - if (fAllChannels) { - // TODO: Iterate through the list of channels, and invoke only - // for changed values ? - - InvokeChannel(); - - } else { - if (ValueList()[fCurrentChannel] != fInitialValues[fCurrentChannel]) { - SetValueFor(fCurrentChannel, ValueList()[fCurrentChannel]); - Invoke(); - } + bool *inMask = NULL; + int32 numChannels = CountChannels(); + if (!fAllChannels) { + inMask = new bool[CountChannels()]; + for (int i=0; i