Anything beyond the basics in using the LiveCode language. Share your handlers, functions and magic here.
Moderators: FourthWorld, heatherlaine, Klaus, kevinmiller, robinmiller
-
tal
- Posts: 84
- Joined: Thu Jul 02, 2009 3:27 pm
Post
by tal » Tue Feb 23, 2010 12:00 am
fourthworld, I want to unselect it cause I dont like the visual aspect of the selection, after unselecting it I will select it with a borderwidth or a backgroundcolor...
Good night see you

-
FourthWorld
- VIP Livecode Opensource Backer

- Posts: 10057
- Joined: Sat Apr 08, 2006 7:05 am
-
Contact:
Post
by FourthWorld » Tue Feb 23, 2010 1:19 am
If your goal is to find obscure bugs, rest assured there are many.
But if your goal is to deliver a good user experience with your software, a little more feedback on what you're looking to do will help us help you find a winning solution.
-
tal
- Posts: 84
- Joined: Thu Jul 02, 2009 3:27 pm
Post
by tal » Tue Feb 23, 2010 11:58 am
Thanks bn your solution works.
I want to design my selection, if the object is selected, it is red, if it is not selected it is gray.
So the problem now is that the object is red and after a time it becomes gray, it is because the handler is called 2 times during the same selection :
Code: Select all
on selectedObjectChanged
-- do your code here
if "unselectMe" is not in the pendingmessages then
if the objselect of me is true then
set the backgroundcolor of btn 1 of me to "gray"
set the objselect of me to false
send "unselectMe" to me in 100 milliseconds -- change this interval
else if the objselect of me is false then
set the backgroundcolor of btn 1 of me to "red"
set the objselect of me to true
send "unselectMe" to me in 1000milliseconds -- change this interval
end if
--send "unselectMe" to me in 100 milliseconds -- change this interval
else
end if
end "selectedObjectChanged"
on UnselectMe
set the selected of me to false
end UnselectMe
-
bn
- VIP Livecode Opensource Backer

- Posts: 4174
- Joined: Sun Jan 07, 2007 9:12 pm
Post
by bn » Tue Feb 23, 2010 1:00 pm
Tal,
try this in the script of every group you want to be hilited/unhilited. It assumes at least one button in each group.
Code: Select all
on selectedObjectChanged
-- do your code here
if the long id of me is in the selectedObjects then -- is only on select, not on unselect
if the objselect of me is true then
set the backgroundcolor of btn 1 of me to "gray"
set the objselect of me to false
send "unselectMe" to me in 10 milliseconds -- change this interval
else
set the backgroundcolor of btn 1 of me to "red"
set the objselect of me to true
send "unselectMe" to me in 10 milliseconds -- change this interval
end if
end if
end "selectedObjectChanged"
on UnselectMe
set the selected of me to false
end UnselectMe
As Richard pointed out, may be you should rethink your user interface. But without knowing your application it is difficult to tell.
regards
Bernd
-
tal
- Posts: 84
- Joined: Thu Jul 02, 2009 3:27 pm
Post
by tal » Tue Feb 23, 2010 1:07 pm
Thank you all , it works fine.
-
tal
- Posts: 84
- Joined: Thu Jul 02, 2009 3:27 pm
Post
by tal » Tue Feb 23, 2010 3:55 pm
It is me again lol sorry if i have a lot of questions, so the solution of bn works but I have a lot of objects on the screen, if i surround them, not all of them will be selected, this problem comes from the laps of time maybe?
thank you
-
bn
- VIP Livecode Opensource Backer

- Posts: 4174
- Joined: Sun Jan 07, 2007 9:12 pm
Post
by bn » Tue Feb 23, 2010 4:37 pm
tal,
I tried it with 50 groups. It is a little slow but works.
I attach the teststack for you to check.
regards
Bernd
-
Attachments
-
- selectGroups.rev.zip
- (2.82 KiB) Downloaded 241 times
-
dunbarx
- VIP Livecode Opensource Backer

- Posts: 10354
- Joined: Wed May 06, 2009 2:28 pm
Post
by dunbarx » Tue Feb 23, 2010 6:35 pm
I have run this back and forth on the mail list.
The issue Tal raises is that when selecting an object by dragging a selection rectangle, as opposed to simply clicking on an object with the pointer, the handles linger after deselecting. The object really is deselected (the selectedObjects returns empty), but the handles linger.
One can "really" re-select the object in the usual ways, and the object's border will hilite. But the handles remain regardless; they are stuck to the object.
It does not even matter if the script is deleted. If the drag is performed with the script intact, the handles linger.
It goes beyond this. Once you have an object in this state, it is possible to move any other selected object by clicking and dragging within the rect of the oddball object, as if that rect were mapped to the rect of the object you are moving. Weird.
Craig Newman
-
Regulae
- Posts: 136
- Joined: Tue Oct 20, 2009 6:05 am
Post
by Regulae » Tue Feb 23, 2010 7:14 pm
Although I see much progress has been made, I’ll post what I have done as a matter of interest. I gather that the requirement is that, although using the pointer tool to make selections, the number and size of objects in this case makes the standard selection “handles” look cluttered and visually unappealing, so the idea is to try another method of highlighting. This is what I glean from various posts. I attach a test stack, the work being done in the card script. I conducted early tests with:
Code: Select all
on selectedObjectChanged
select empty
end selectedObjectChanged
or “set the selected of me to false”
... and found it could produce the state described where, after dragging to select several objects, the “handles” would remain visible, even when “the selectedObjects” returned empty. Perhaps some of the difficulty stems from having the handler trigger itself. On receiving a selectedObjectChanged, we have told it to select empty, which triggers another selectedObjectChanged, so it “double fires”. Like Bernd (regards!), I found “send” helpful.
-
bn
- VIP Livecode Opensource Backer

- Posts: 4174
- Joined: Sun Jan 07, 2007 9:12 pm
Post
by bn » Tue Feb 23, 2010 7:23 pm
Craig,
from your discussion with tal and on the list I noticed this too, I tried to provide a workaround for Tal which works by sending in time a command to select empty.
Funny thing though is that when you issue a "set the selected of the target to false" in the "selectedObjectChanged" handler the "select empty" with the send in time does not work anymore. See script
Code: Select all
on selectedObjectChanged
-- handle your selectedObjectChanged here
--
-- set the selected of the target to false -- does not work if this is uncommented
if "unselectMe" is not in the pendingmessages then
send "unselectMe" to me in 2000 milliseconds -- change this interval
end if
--pass selectedObjectChanged -- does not change the outcome if you set the selected of the target to false
end selectedObjectChanged
on unselectMe
select empty
end unselectMe
there is definitely something weird going on.
regards
Bernd
-
FourthWorld
- VIP Livecode Opensource Backer

- Posts: 10057
- Joined: Sat Apr 08, 2006 7:05 am
-
Contact:
Post
by FourthWorld » Tue Feb 23, 2010 7:43 pm
Feel free to log the bug at the RQCC so it can get into queue to be fixed:
http://quality.runrev.com/qacenter/
In the meantime, if you're looking for a solution for yourself and your users a little more background on the goal you want to accomplish will help us find a good one for you.
-
tal
- Posts: 84
- Joined: Thu Jul 02, 2009 3:27 pm
Post
by tal » Tue Feb 23, 2010 7:55 pm
Hi everyone, i do this cause I want the user to select somes objects and then if a group is moved the other groups selected follow automaticly in the same translation.
So it is for a deplacement of groups.
The bn's solution works, but for my groups, when i surround them, some of them are not selected, maybe it is because my groups contain at least 3 elements? ( not a simple button)
Good night, see you tomorrow
-
bn
- VIP Livecode Opensource Backer

- Posts: 4174
- Joined: Sun Jan 07, 2007 9:12 pm
Post
by bn » Wed Feb 24, 2010 3:34 pm
tal,
I tried a different approach without using the pointer tool in Rev which causes a lot of problems as we have seen.
In this stack you have to click a checkbox button if you want to make a selection. Then you can drag over your groups and a rectangle shows you where you are and the background color of button 1 of each selected group is set to red. Selecting the groups gives you a list of the long ids of the selected groups and you can use this list to move your groups. If you click outside of the groups everything is deselected. Unchecking the checkbox button unselects the groups also. See if this is an approach you can use in your project.
The script is in the card.
-
Attachments
-
- selectGroupsII.rev.zip
- (3.48 KiB) Downloaded 274 times
-
tal
- Posts: 84
- Joined: Thu Jul 02, 2009 3:27 pm
Post
by tal » Wed Feb 24, 2010 3:47 pm
Hi,
Thank you, something like this is exactly what I want, but I have to change this to make it work like the pointer tool :
- A click on an object select it, another click unselect it
- a surrounding selects the objects ( like you did) and if they are already selected it deselects them
Cause I have groups which are very close and with this method I can't really select the object I want and unselect the object I don't want.
Do you think your code can be improved easily? cause this solution is very good.
Thank you.
-
bn
- VIP Livecode Opensource Backer

- Posts: 4174
- Joined: Sun Jan 07, 2007 9:12 pm
Post
by bn » Wed Feb 24, 2010 4:58 pm
Tal,
I changed the script so you can unselect / select with the shift key.
The only thing that could happen is that you have a mouseDown handler in any of your buttons. Then if you click inside your button the card would not get the mouseDown message and it would not start the card script. But usually buttons only go for the mouseUp message. If you do have handlers with a mouseDown handler you could pass the mouseDown message at the end of your handler and all is well.
regards
Bernd
-
Attachments
-
- selectGroupsIII.rev.zip
- (3.55 KiB) Downloaded 264 times