<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Script Triggers: Monitoring and Restoring Tabs</title>
	<atom:link href="http://sixfriedrice.com/wp/script-triggers-monitoring-and-restoring-tabs/feed/" rel="self" type="application/rss+xml" />
	<link>http://sixfriedrice.com/wp/script-triggers-monitoring-and-restoring-tabs/</link>
	<description>smart business solutions</description>
	<lastBuildDate>Mon, 01 Mar 2010 04:42:36 -0600</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: RichT</title>
		<link>http://sixfriedrice.com/wp/script-triggers-monitoring-and-restoring-tabs/comment-page-1/#comment-1908</link>
		<dc:creator>RichT</dc:creator>
		<pubDate>Wed, 24 Feb 2010 19:30:50 +0000</pubDate>
		<guid isPermaLink="false">http://sixfriedrice.com/wp/?p=295#comment-1908</guid>
		<description>seems like a simple way to make it work for muti layout would be with a repeating varable set using Get(LayoutNumber) Like this

Set Variable [ $$FRONT_TAB[Get(LayoutNumber)];
   Case(
      GetLayoutObjectAttribute ( &quot;myFirstTab&quot;, &quot;isFrontTabPanel&quot; ); &quot;First tab is in front&quot;;
      GetLayoutObjectAttribute ( &quot;mySecondTab&quot;, &quot;isFrontTabPanel&quot; ); &quot;Second tab is in front&quot;;
      GetLayoutObjectAttribute ( &quot;myThirdtTab&quot;, &quot;isFrontTabPanel&quot; ); &quot;Third tab is in front&quot;
   )
]

Then Call it back the same way .... 

If [ Not IsEmpty($$FRONT_TAB[Get(LayoutNumber)]) ]
   Go to Object [ $$FRONT_TAB[Get(LayoutNumber)] ]
End If</description>
		<content:encoded><![CDATA[<p>seems like a simple way to make it work for muti layout would be with a repeating varable set using Get(LayoutNumber) Like this</p>
<p>Set Variable [ $$FRONT_TAB[Get(LayoutNumber)];<br />
   Case(<br />
      GetLayoutObjectAttribute ( &#8220;myFirstTab&#8221;, &#8220;isFrontTabPanel&#8221; ); &#8220;First tab is in front&#8221;;<br />
      GetLayoutObjectAttribute ( &#8220;mySecondTab&#8221;, &#8220;isFrontTabPanel&#8221; ); &#8220;Second tab is in front&#8221;;<br />
      GetLayoutObjectAttribute ( &#8220;myThirdtTab&#8221;, &#8220;isFrontTabPanel&#8221; ); &#8220;Third tab is in front&#8221;<br />
   )<br />
]</p>
<p>Then Call it back the same way &#8230;. </p>
<p>If [ Not IsEmpty($$FRONT_TAB[Get(LayoutNumber)]) ]<br />
   Go to Object [ $$FRONT_TAB[Get(LayoutNumber)] ]<br />
End If</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jerry Beck</title>
		<link>http://sixfriedrice.com/wp/script-triggers-monitoring-and-restoring-tabs/comment-page-1/#comment-1907</link>
		<dc:creator>Jerry Beck</dc:creator>
		<pubDate>Mon, 15 Feb 2010 22:35:53 +0000</pubDate>
		<guid isPermaLink="false">http://sixfriedrice.com/wp/?p=295#comment-1907</guid>
		<description>got it.


Case(
      GetLayoutObjectAttribute ( &quot;tabone&quot;; &quot;isFrontTabPanel&quot; ); &quot;tabone&quot;;
      GetLayoutObjectAttribute ( &quot;tabtwo&quot;; &quot;isFrontTabPanel&quot; ); &quot;tabtwo&quot;;
      GetLayoutObjectAttribute ( &quot;tabthree&quot;; &quot;isFrontTabPanel&quot; ); &quot;tabthree&quot;
   )

I need this to return to the &quot;same tab&quot; location from many tables and did not want to hard code each return.

Jerry</description>
		<content:encoded><![CDATA[<p>got it.</p>
<p>Case(<br />
      GetLayoutObjectAttribute ( &#8220;tabone&#8221;; &#8220;isFrontTabPanel&#8221; ); &#8220;tabone&#8221;;<br />
      GetLayoutObjectAttribute ( &#8220;tabtwo&#8221;; &#8220;isFrontTabPanel&#8221; ); &#8220;tabtwo&#8221;;<br />
      GetLayoutObjectAttribute ( &#8220;tabthree&#8221;; &#8220;isFrontTabPanel&#8221; ); &#8220;tabthree&#8221;<br />
   )</p>
<p>I need this to return to the &#8220;same tab&#8221; location from many tables and did not want to hard code each return.</p>
<p>Jerry</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jerry Beck</title>
		<link>http://sixfriedrice.com/wp/script-triggers-monitoring-and-restoring-tabs/comment-page-1/#comment-1906</link>
		<dc:creator>Jerry Beck</dc:creator>
		<pubDate>Mon, 15 Feb 2010 19:49:19 +0000</pubDate>
		<guid isPermaLink="false">http://sixfriedrice.com/wp/?p=295#comment-1906</guid>
		<description>I wish I could tell you the number of hours I have tried to get this to work, it&#039;s beyond beyond. 

Set Variable [ $$frnt_tab; Value:Case(
GetLayoutObjectAttribute ( &quot;insp.prgm&quot; ;&quot;isFrontTabPanel&quot;);
GetLayoutObjectAttribute ( &quot;insp.insp&quot; ;&quot;isFrontTabPanel&quot;);
GetLayoutObjectAttribute ( &quot;insp.task&quot; ;&quot;isFrontTabPanel&quot;);
GetLayoutObjectAttribute ( &quot;insp.task.mod&quot; ;&quot;isFrontTabPanel&quot;);
GetLayoutObjectAttribute ( &quot;insp.scrtch&quot; ;&quot;isFrontTabPanel&quot;)
) ]

data viewer keeps showing me; 0 or 1, not the text value of the object named tabs, &quot;insp.prgm&quot;, &quot;insp.insp&quot; etc.

The Attribute &quot;isFrontTabPanel&quot; under GetLayoutObjectAttribute supports this.    &quot;isFrontTabPanel - returns 1 (True) if the target object is the tab panel that is in front&quot;

What am I not seeing?

Jerry</description>
		<content:encoded><![CDATA[<p>I wish I could tell you the number of hours I have tried to get this to work, it&#8217;s beyond beyond. </p>
<p>Set Variable [ $$frnt_tab; Value:Case(<br />
GetLayoutObjectAttribute ( "insp.prgm" ;"isFrontTabPanel");<br />
GetLayoutObjectAttribute ( "insp.insp" ;"isFrontTabPanel");<br />
GetLayoutObjectAttribute ( "insp.task" ;"isFrontTabPanel");<br />
GetLayoutObjectAttribute ( "insp.task.mod" ;"isFrontTabPanel");<br />
GetLayoutObjectAttribute ( "insp.scrtch" ;"isFrontTabPanel")<br />
) ]</p>
<p>data viewer keeps showing me; 0 or 1, not the text value of the object named tabs, &#8220;insp.prgm&#8221;, &#8220;insp.insp&#8221; etc.</p>
<p>The Attribute &#8220;isFrontTabPanel&#8221; under GetLayoutObjectAttribute supports this.    &#8220;isFrontTabPanel &#8211; returns 1 (True) if the target object is the tab panel that is in front&#8221;</p>
<p>What am I not seeing?</p>
<p>Jerry</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Geoff Coffey</title>
		<link>http://sixfriedrice.com/wp/script-triggers-monitoring-and-restoring-tabs/comment-page-1/#comment-1900</link>
		<dc:creator>Geoff Coffey</dc:creator>
		<pubDate>Thu, 04 Feb 2010 21:47:05 +0000</pubDate>
		<guid isPermaLink="false">http://sixfriedrice.com/wp/?p=295#comment-1900</guid>
		<description>Ron:

You are correct that FileMaker does not support multi-row tabs in one tab control. 

If you want this sort of look, one way is to do what you describe. Essentially you hide the FileMaker tabs entirely, then add your own with any look, position, and orientation you want. Note that you must set the line width of the tab control to 0px for this to work properly, otherwise a zero-width tab will have to tiny borders that are still clickable.

Also note that you can *nest* tabs, which is sometimes useful (although in general I avoid both multi-line tabs and nested tabs because I think they can be confusing for the user).

Finally, depending on what these tabs do, sometimes a nicer interface is to have one portal, and a pop-up menu or series of buttons that twiddle the records that are shown by setting a global field. For instance, if you have a list of associated Sprockets, and you want to be able to flip between Tiny, Small, Medium, Large, Huge, and All sprockets, you can get by with one portal, a pop-up menu, and some clever relationship work.

Hope this helps,

Geoff</description>
		<content:encoded><![CDATA[<p>Ron:</p>
<p>You are correct that FileMaker does not support multi-row tabs in one tab control. </p>
<p>If you want this sort of look, one way is to do what you describe. Essentially you hide the FileMaker tabs entirely, then add your own with any look, position, and orientation you want. Note that you must set the line width of the tab control to 0px for this to work properly, otherwise a zero-width tab will have to tiny borders that are still clickable.</p>
<p>Also note that you can *nest* tabs, which is sometimes useful (although in general I avoid both multi-line tabs and nested tabs because I think they can be confusing for the user).</p>
<p>Finally, depending on what these tabs do, sometimes a nicer interface is to have one portal, and a pop-up menu or series of buttons that twiddle the records that are shown by setting a global field. For instance, if you have a list of associated Sprockets, and you want to be able to flip between Tiny, Small, Medium, Large, Huge, and All sprockets, you can get by with one portal, a pop-up menu, and some clever relationship work.</p>
<p>Hope this helps,</p>
<p>Geoff</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ron Gafron</title>
		<link>http://sixfriedrice.com/wp/script-triggers-monitoring-and-restoring-tabs/comment-page-1/#comment-1899</link>
		<dc:creator>Ron Gafron</dc:creator>
		<pubDate>Thu, 04 Feb 2010 21:09:16 +0000</pubDate>
		<guid isPermaLink="false">http://sixfriedrice.com/wp/?p=295#comment-1899</guid>
		<description>Hi,

I&#039;m fairly new to Filemaker, and am currently using it to port over an old Microsoft Access runtime application.  Now, even back in the days of Access97, you could create multiple-row tabs, something that as as far as I can tell you can&#039;t do with the regular tab control in FM.  From reading a couple of the blog postings here, am I right that the way to do this, ie, multiple row tabs, is to create the number of tabs you want but set their size to zero (got this from another blog posting), and then create something that looks like a set of multi-row tabs (whatever that something might be), let&#039;s say a set of buttons set up in rows, and use script triggers to get to the correct tab page by making use of object naming in some way?

Or am I just delusional? (well, that&#039;s probably true most days, but I mean here and now :-)).

Thanks.

Ron</description>
		<content:encoded><![CDATA[<p>Hi,</p>
<p>I&#8217;m fairly new to Filemaker, and am currently using it to port over an old Microsoft Access runtime application.  Now, even back in the days of Access97, you could create multiple-row tabs, something that as as far as I can tell you can&#8217;t do with the regular tab control in FM.  From reading a couple of the blog postings here, am I right that the way to do this, ie, multiple row tabs, is to create the number of tabs you want but set their size to zero (got this from another blog posting), and then create something that looks like a set of multi-row tabs (whatever that something might be), let&#8217;s say a set of buttons set up in rows, and use script triggers to get to the correct tab page by making use of object naming in some way?</p>
<p>Or am I just delusional? (well, that&#8217;s probably true most days, but I mean here and now <img src='http://sixfriedrice.com/wp/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> ).</p>
<p>Thanks.</p>
<p>Ron</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Geoff Coffey</title>
		<link>http://sixfriedrice.com/wp/script-triggers-monitoring-and-restoring-tabs/comment-page-1/#comment-1885</link>
		<dc:creator>Geoff Coffey</dc:creator>
		<pubDate>Tue, 12 Jan 2010 16:51:53 +0000</pubDate>
		<guid isPermaLink="false">http://sixfriedrice.com/wp/?p=295#comment-1885</guid>
		<description>David:

That sounds like a nice enhancement. Have you tried an OnRecordLoad trigger? It fires both when you switch to a layout for the first time and when you switch records on the same layout. I&#039;m not 100% sure if it fires when changing among layouts with the same base table occurrence, so you may need an OnLayoutLoad as well. But it should allow you to put your script in just one or two places and get the effect you&#039;re after.

Geoff</description>
		<content:encoded><![CDATA[<p>David:</p>
<p>That sounds like a nice enhancement. Have you tried an OnRecordLoad trigger? It fires both when you switch to a layout for the first time and when you switch records on the same layout. I&#8217;m not 100% sure if it fires when changing among layouts with the same base table occurrence, so you may need an OnLayoutLoad as well. But it should allow you to put your script in just one or two places and get the effect you&#8217;re after.</p>
<p>Geoff</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: David Crowe</title>
		<link>http://sixfriedrice.com/wp/script-triggers-monitoring-and-restoring-tabs/comment-page-1/#comment-1884</link>
		<dc:creator>David Crowe</dc:creator>
		<pubDate>Tue, 12 Jan 2010 16:47:20 +0000</pubDate>
		<guid isPermaLink="false">http://sixfriedrice.com/wp/?p=295#comment-1884</guid>
		<description>Awesome. I store the current tab in a record so that every record can have its own tab memory. This creates a new problem because &quot;Go To Layout&quot; is not always used to navigate between records. So I need to add the tab restore script to other scripts as well. I have tabs that show a portal of between 1 and 4 sub-records. Some records have only one sub-record with lots of details, others have more records with less detail. So it&#039;s nice that the record &quot;remembers&quot; it&#039;s own layout.</description>
		<content:encoded><![CDATA[<p>Awesome. I store the current tab in a record so that every record can have its own tab memory. This creates a new problem because &#8220;Go To Layout&#8221; is not always used to navigate between records. So I need to add the tab restore script to other scripts as well. I have tabs that show a portal of between 1 and 4 sub-records. Some records have only one sub-record with lots of details, others have more records with less detail. So it&#8217;s nice that the record &#8220;remembers&#8221; it&#8217;s own layout.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ward Clark</title>
		<link>http://sixfriedrice.com/wp/script-triggers-monitoring-and-restoring-tabs/comment-page-1/#comment-1835</link>
		<dc:creator>Ward Clark</dc:creator>
		<pubDate>Tue, 18 Aug 2009 23:08:47 +0000</pubDate>
		<guid isPermaLink="false">http://sixfriedrice.com/wp/?p=295#comment-1835</guid>
		<description>I&#039;m a late-comer to this discussion because my &quot;restore tab&quot; logic from FileMaker 9 just stopped working in one of my databases.  Rather than debug it, I took this as a sign it&#039;s time to take advantage of a Layout Script Triggers.

Although the tab-name technique Geoff described makes sense, I would  foresee a script maintenance headache because my tabs evolve.  I chose instead to build on the tab numbering technique I was using in FileMaker 9.

1.  Define a non-stored Calculation field named &quot;tabNumber&quot; with enough repetitions to handle a maximum number of tabs (15 as been more than enough so far):

Let ( $$tabNumber = Get( CalculationRepetitionNumber ) ;
$$tabNumber
)

2.  Put an instance of the &quot;tabNumber&quot; field in each tab panel, choosing a single, unique repetition for each panel.  For example, the second tab uses &quot;Show repetitions: 2 through 2&quot;.  Make the field invisible.

I place the field at the left margin of the tab panel, in the blank space to the left of the centered tabs, which keeps it in the panel but outside of the &quot;business&quot; part of the panel.

3.  Add a Script Trigger to the layout which performs a script that doesn&#039;t care about tab names:

If [ not IsEmpty ( $$tabNumber ) ]
Go to Field [ tablename: tabNumber[$$tabNumber] ]
Go to Field []
End If</description>
		<content:encoded><![CDATA[<p>I&#8217;m a late-comer to this discussion because my &#8220;restore tab&#8221; logic from FileMaker 9 just stopped working in one of my databases.  Rather than debug it, I took this as a sign it&#8217;s time to take advantage of a Layout Script Triggers.</p>
<p>Although the tab-name technique Geoff described makes sense, I would  foresee a script maintenance headache because my tabs evolve.  I chose instead to build on the tab numbering technique I was using in FileMaker 9.</p>
<p>1.  Define a non-stored Calculation field named &#8220;tabNumber&#8221; with enough repetitions to handle a maximum number of tabs (15 as been more than enough so far):</p>
<p>Let ( $$tabNumber = Get( CalculationRepetitionNumber ) ;<br />
$$tabNumber<br />
)</p>
<p>2.  Put an instance of the &#8220;tabNumber&#8221; field in each tab panel, choosing a single, unique repetition for each panel.  For example, the second tab uses &#8220;Show repetitions: 2 through 2&#8243;.  Make the field invisible.</p>
<p>I place the field at the left margin of the tab panel, in the blank space to the left of the centered tabs, which keeps it in the panel but outside of the &#8220;business&#8221; part of the panel.</p>
<p>3.  Add a Script Trigger to the layout which performs a script that doesn&#8217;t care about tab names:</p>
<p>If [ not IsEmpty ( $$tabNumber ) ]<br />
Go to Field [ tablename: tabNumber[$$tabNumber] ]<br />
Go to Field []<br />
End If</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Loretta</title>
		<link>http://sixfriedrice.com/wp/script-triggers-monitoring-and-restoring-tabs/comment-page-1/#comment-1826</link>
		<dc:creator>Loretta</dc:creator>
		<pubDate>Thu, 30 Jul 2009 18:56:39 +0000</pubDate>
		<guid isPermaLink="false">http://sixfriedrice.com/wp/?p=295#comment-1826</guid>
		<description>Jonathon:  Thanks ... this solution rocks!</description>
		<content:encoded><![CDATA[<p>Jonathon:  Thanks &#8230; this solution rocks!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Bob Stuart</title>
		<link>http://sixfriedrice.com/wp/script-triggers-monitoring-and-restoring-tabs/comment-page-1/#comment-1815</link>
		<dc:creator>Bob Stuart</dc:creator>
		<pubDate>Wed, 08 Jul 2009 22:55:33 +0000</pubDate>
		<guid isPermaLink="false">http://sixfriedrice.com/wp/?p=295#comment-1815</guid>
		<description>Jonathon, I couldn&#039;t find a feedback section on your blog where I could say &#039;thank you&#039; for an excellent technique. Implementing it in my solutions has been a huge timesaver because the management of tabs is handled in script triggers that fire when a tab control is modified or a layout is loaded. Therefore, you don&#039;t need to memorize tabs in every navigation script. Great stuff!</description>
		<content:encoded><![CDATA[<p>Jonathon, I couldn&#8217;t find a feedback section on your blog where I could say &#8216;thank you&#8217; for an excellent technique. Implementing it in my solutions has been a huge timesaver because the management of tabs is handled in script triggers that fire when a tab control is modified or a layout is loaded. Therefore, you don&#8217;t need to memorize tabs in every navigation script. Great stuff!</p>
]]></content:encoded>
	</item>
</channel>
</rss>
