stack inside stack

LiveCode is the premier environment for creating multi-platform solutions for all major operating systems - Windows, Mac OS X, Linux, the Web, Server environments and Mobile platforms. Brand new to LiveCode? Welcome!

Moderators: Klaus, FourthWorld, heatherlaine, kevinmiller, robinmiller

WaltBrown
Posts: 466
Joined: Mon May 11, 2009 9:12 pm
Location: NE USA

Re: stack inside stack

Post by WaltBrown » Thu Oct 28, 2010 11:11 am

If you know the name of the "lost" object, you can type

Code: Select all

show myObjectName
in the Message Box.
Walt
Walt Brown
Omnis traductor traditor

Dixie
Livecode Opensource Backer
Livecode Opensource Backer
Posts: 1336
Joined: Sun Jul 12, 2009 10:53 am
Location: Bordeaux, France

Re: stack inside stack

Post by Dixie » Thu Oct 28, 2010 12:44 pm

Hi...

I just quickly made a stack "Untitled 1"... then a substack "Untitled 2"
In a button in stack "Untitled 1" I put the following :-

Code: Select all

on mouseUp
   open stack "Untitled 2" in the window of stack "Untitled 1"
end mouseUp
The substack, stack "Untitled 2" then opens in the window of stack "Untitled 1"
Is this what you are wanting to do ?

be well

Dixie

openworld
Posts: 63
Joined: Sat Sep 11, 2010 3:56 am
Location: Virginia, USA
Contact:

Re: stack inside stack

Post by openworld » Fri Oct 29, 2010 4:51 am

Klaus,

Is there a way in LiveCode to locate substacks of a Mainstack? I've tried various commands in the Message box, for example

- open substack "QuickTagger" of MainStack "Soctet"
- open palette "QuickTagger" of MainStack "Soctet"

When I do a "find" search on "Quicktagger" on the stack (with all search options checked), I do not find the substack. Is there a better way?

Best,

Mark
Klaus wrote:Hi Mark,

maybe:
...
palette "Quicktagger"
...
will work for you?

Or dou you mean the stack is really not "visible" which IS indeed a porperty of a stack? :D


Best

Klaus

Klaus
Posts: 12117
Joined: Sat Apr 08, 2006 8:41 am
Location: Germany
Contact:

Re: stack inside stack

Post by Klaus » Fri Oct 29, 2010 11:01 am

Hi Mark,

"find" will only find text inside of stacks, so this will not work for you.

To get a list of substacks you can
...
put the substacks of stack "you main stack here"
...

And once a mainstack is open you should be able to pen any of its substacks by simply using
...
go stack "substack 1"
## = the same as: toplevel "substack 1"
...
OR
...
palette "substack 2"
...
OR
...
modeless "substack 2"
...
OR
...
modal "substack 3"
...

Is that what you mean?


Best

Klaus

P.S.
The correct syntax for opening substacks is:
go stack "name of substack" of stack "mainstack here"

openworld
Posts: 63
Joined: Sat Sep 11, 2010 3:56 am
Location: Virginia, USA
Contact:

Re: stack inside stack

Post by openworld » Fri Oct 29, 2010 6:06 pm

Klaus,

All is good now here re the recent substack issue - my thanks for providing the resolution!

Best,

Mark

nomodes
VIP Livecode Opensource Backer
VIP Livecode Opensource Backer
Posts: 7
Joined: Tue Nov 09, 2010 7:48 pm

Re: stack inside stack

Post by nomodes » Tue Nov 09, 2010 11:32 pm

Here is a way to position one or more inner stacks (substacks) in an outer stack (mainstack) so that the inner stacks never move and never disappear under the outer stack.

Create the inner stacks using the menu command "New Substack of Outer".

Use the Application Browser to access the Property Inspector of each substack. You probably will want to uncheck Shadow. You probably will want to set the Title Bar Controls (using the Controls field wand) to Empty (the last choice in the Title Bar Controls dialog). After sizing and positioning them, you will probably want to uncheck Resizable.

Here is an (outer) stack script that produces the desired behavior. My test case uses four inner stacks that have no adornments--no title bar, no scroll bars, etc. The top row has two inner stacks 300 pixels high. The bottom row has two inner stacks 500 pixels high. All four inner stacks are 400 pixels wide and are separated by two-pixel gaps. To change the number of inner stacks and/or their locations within the outer stack, only one line of the script needs to be edited.

Code: Select all

on openStack
   set the raisePalettes to true -- Make inner stacks float in their own layer above the outer stack
   positionInnerStacks the left of me, the top of me -- ensure that all the inner stacks are shown correctly
end openStack

on moveStack newStackLeft,newStackTop
   positionInnerStacks newStackLeft, newStackTop -- ensure that all the inner stacks are shown correctly
end moveStack

on positionInnerStacks outerStackLeft,outerStackTop
   put the substacks of me into innerStackNames
   -- To change the layout, simply edit the top-left corner coordinates on the next line
   put "0 0, 402 0, 0 302, 402 302" into innerStackLocations -- Be sure they are in substacks order
   send "showInnerStacks" to me in 1 second -- Prevent flickering
   repeat with i = 1 to the number of lines in innerStackNames
      put line i of innerStackNames into innerStackName
      -- Prepare inner stack
      set the shadow of stack innerStackName to false -- Usually looks better
      palette stack innerStackName -- Causes palette behavior
      hide stack innerStackName -- Prevent flickering
      -- Position inner stack
      put item i of innerStackLocations into hv
      set the left of stack innerStackName to outerStackLeft + word 1 of hv
      set the top of stack innerStackName to outerStackTop + word 2 of hv
   end repeat
end positionInnerStacks

on showInnerStacks -- Prevent flickering
   repeat for each line innerStackName in the substacks of me
      show stack innerStackName
   end repeat
end showInnerStacks
One problem though... In Palette mode, it doesn't seem to be possible to edit a substack using the tools. A way around this is to right-click the stack or card in the Application Browser and choose TopLevel from the menu. When done editing, either (a) right-click the card in the stack window and choose Stack Mode > Palette from the menu or (b) move the stack window a tad (which will run the above script and accomplish the same thing).

Dixie
Livecode Opensource Backer
Livecode Opensource Backer
Posts: 1336
Joined: Sun Jul 12, 2009 10:53 am
Location: Bordeaux, France

Re: stack inside stack

Post by Dixie » Tue Nov 09, 2010 11:49 pm

nomodes...

I must be missing the point here... but I still think that the easiest way to accomplish what was asked 'opening a stack inside a stack' is just to open the substack in the window of the main stack... Make a stack "Untitled 1"... then a substack "Untitled 2". Then from wherever you wish to call the substack, just use the one line of script.. it would work for any number of substacks that were in the stackfile...

Code: Select all

open stack "Untitled 2" in the window of stack "Untitled 1"
The substack, stack "Untitled 2" then opens in the window of stack "Untitled 1"...

be well

Dixie

nomodes
VIP Livecode Opensource Backer
VIP Livecode Opensource Backer
Posts: 7
Joined: Tue Nov 09, 2010 7:48 pm

Re: stack inside stack

Post by nomodes » Wed Nov 10, 2010 8:19 am

Dixie,

The problem that pmc posed was,
I want my substack to be inside the panel of the Mainstack, which does not go beyond it(the mainstack). Something like an object, eg. Tab panel, which you put into a card. You see, the tab panel which you put in a card does not 'move' out from this card, it stayed inside it. And furthermore, you are able to specify the size and position of the tab panel in the card.
In a subsequent message, one containing illustrations, pmc further clarified the requirement. I believe that my solution addresses it. Yours is much shorter than mine, but when I try to incorporate it into a real-world example, it doesn't do what I think pmc wanted.

I tried doing what I think you suggested:

Code: Select all

open stack "Outer" -- works as expected
open stack "Upper Left" in the window of stack "Outer" -- Changes the title and content of the window "Outer" to that of the stack "Upper Left"
open stack "Lower Left" in the window of stack "Outer" -- Message execution error: Error description: go: error in window expression
open stack "Outer" -- Opens the stack "Outer" in a new (yet another) window
If you meant something else, can you provide a more extensive example?

Unfortunately, the command open stack "A" in the window of stack "B" is not explained in the Developer Documentation at http://docs.runrev.com/Command/go. I am not sure what it is supposed to do. If you know a place where it is documented, could you post that location?

Thanks,

Larry

shaosean
Posts: 906
Joined: Thu Nov 04, 2010 7:53 am

Re: stack inside stack

Post by shaosean » Fri Nov 12, 2010 5:15 pm

open stack "A" in the window of stack "B"
This replaces the content of stack "B" (what you see on the screen, not the actual file) with the content of stack "A".. This is a nice method to open a new stack in the same location and size as a previous stack but without all the flickering..

ctflatt
VIP Livecode Opensource Backer
VIP Livecode Opensource Backer
Posts: 243
Joined: Sun Dec 06, 2009 12:24 am
Location: Fredericktown, MO
Contact:

Re: stack inside stack

Post by ctflatt » Tue Jan 18, 2011 12:14 pm

Klaus:

According to the Dictionary included with the IDE, "The close command closes the stack window immediately, but it does not necessarily remove the stack from memory. A stack that is closed but in memory still takes up space in RAM and its objects are still accessible to scripts."

The app I am creating for the iPad consists of a main stack (obviously) which opens other stacks based on user selection. What is the best way to handle the closing of these substacks and removing them from memory when "closed?"

Do I need to catch the opening stack's name (in a variable) in the main stack, and then upon closing the substack, destroy the substack from the main stack?

Does this make sense, or am I speaking gibberish?

:Todd

PS. This wasn't necessarily a mobile question, so I hope I have used the correct forum for this question. Thanks :)

Dixie
Livecode Opensource Backer
Livecode Opensource Backer
Posts: 1336
Joined: Sun Jul 12, 2009 10:53 am
Location: Bordeaux, France

Re: stack inside stack

Post by Dixie » Tue Jan 18, 2011 12:21 pm

Hi...

Have a look at 'destroyStack' in the dictionary...

be well

Dixie

ctflatt
VIP Livecode Opensource Backer
VIP Livecode Opensource Backer
Posts: 243
Joined: Sun Dec 06, 2009 12:24 am
Location: Fredericktown, MO
Contact:

Re: stack inside stack

Post by ctflatt » Tue Jan 18, 2011 12:30 pm

Dixie:

Thanks for the info. I had already checked out the destroyStack property in the dictionary...

In the close handler of the substack, would I include the following?

Code: Select all

set the destroyStack of this stack to true
Is it that easy?

:Todd

Dixie
Livecode Opensource Backer
Livecode Opensource Backer
Posts: 1336
Joined: Sun Jul 12, 2009 10:53 am
Location: Bordeaux, France

Re: stack inside stack

Post by Dixie » Tue Jan 18, 2011 1:09 pm

Hi Todd...

Why not just set the 'destroyStack' to true when you create the stack ? That way whenever it is closed it will be removed from memory. You can also do this by clicking the checkbox 'purge stack on close' in the stack's property inspector...

be well

Dixie

Post Reply

Return to “Getting Started with LiveCode - Experienced Developers”