Supplies:
Simple Ribbon Tutorial
1. Have my Simple Ribbon Tutorial available (either printed or open in a web browser).
2. Go to the script toolbar (or menu) and press the circle to start recording.
Toolbar

Menu

3. Follow the directions in the Simple Ribbon Tutorial, including the optional steps. Do not worry if you make a mistake. If you make a mistake, just undo the action (Ctrl-Z).
4. Once you have finished the tutorial, save the script by going to the script toolbar (or menu) and pressing the disk icon.

5. Now we will edit the script so that the user can choose whether or not to apply the plugin, Greg's Factory Output Vol. II: Pool Shadow. Open up the script editor by clicking the scroll button on the script toolbar.

6. The script looks like this:
from JascApp import * def ScriptProperties(): return { 'Author': u'', 'Copyright': u'', 'Description': u'', 'Host': u'Paint Shop Pro 9', 'Host Version': u'9.01' } def Do(Environment): # EnableOptimizedScriptUndo App.Do( Environment, 'EnableOptimizedScriptUndo', { 'GeneralSettings': { 'ExecutionMode': App.Constants.ExecutionMode.Default, 'AutoActionMode': App.Constants.AutoActionMode.Match, 'Version': ((9,0,1),1) } }) # FileNew App.Do( Environment, 'NewFile', { 'Width': 3600, 'Height': 150, 'ColorDepth': App.Constants.Colordepth.SixteenMillionColor, 'DimensionUnits': App.Constants.DimensionType.Pixels, 'ResolutionUnits': App.Constants.ResolutionUnits.PixelsPerIn, 'Resolution': 300, 'FillMaterial': { 'Color': (255,255,255), 'Pattern': None, 'Gradient': None, 'Texture': None, 'Art': None }, 'Transparent': True, 'LayerType': App.Constants.NewLayerType.Raster, 'ArtMediaTexture': { 'Category': u'Art Media', 'Name': u'Asphalt', 'EnableFill': True, 'FillColor': (255,255,255) }, 'GeneralSettings': { 'ExecutionMode': App.Constants.ExecutionMode.Default, 'AutoActionMode': App.Constants.AutoActionMode.Match, 'Version': ((9,0,1),1) } }) # SelectDocument App.Do( Environment, 'SelectDocument', { 'SelectedImage': 0, 'Strict': False, 'GeneralSettings': { 'ExecutionMode': App.Constants.ExecutionMode.Default, 'AutoActionMode': App.Constants.AutoActionMode.Match, 'Version': ((9,0,1),1) } }) # Fill App.Do( Environment, 'Fill', { 'BlendMode': App.Constants.BlendMode.Normal, 'MatchMode': App.Constants.MatchMode.None, 'Material': { 'Color': (54,146,171), 'Pattern': None, 'Gradient': None, 'Texture': None, 'Art': None }, 'UseForeground': True, 'Opacity': 100, 'Point': (2376.5,66.5), 'SampleMerged': False, 'Tolerance': 10, 'GeneralSettings': { 'ExecutionMode': App.Constants.ExecutionMode.Default, 'AutoActionMode': App.Constants.AutoActionMode.Match, 'Version': ((9,0,1),1) } }) # SelectAll App.Do( Environment, 'SelectAll', { 'GeneralSettings': { 'ExecutionMode': App.Constants.ExecutionMode.Default, 'AutoActionMode': App.Constants.AutoActionMode.Match, 'Version': ((9,0,1),1) } }) # Select Selection Borders App.Do( Environment, 'SelectSelectionBorders', { 'Antialias': True, 'BordersType': App.Constants.BordersType.Inside, 'BorderWidth': 10, 'GeneralSettings': { 'ExecutionMode': App.Constants.ExecutionMode.Default, 'AutoActionMode': App.Constants.AutoActionMode.Match, 'Version': ((9,0,1),1) } }) # Fill App.Do( Environment, 'Fill', { 'BlendMode': App.Constants.BlendMode.Normal, 'MatchMode': App.Constants.MatchMode.None, 'Material': { 'Color': (141,204,213), 'Pattern': None, 'Gradient': None, 'Texture': None, 'Art': None }, 'UseForeground': True, 'Opacity': 100, 'Point': (2079.5,3.5), 'SampleMerged': False, 'Tolerance': 10, 'GeneralSettings': { 'ExecutionMode': App.Constants.ExecutionMode.Default, 'AutoActionMode': App.Constants.AutoActionMode.Match, 'Version': ((9,0,1),1) } }) # ResizeCanvas App.Do( Environment, 'ResizeCanvas', { 'AspectRatio': 24, 'FillColor': (255,255,255), 'HoriPlace': App.Constants.HorizontalType.Center, 'MaintainAspect': False, 'NewDimUnits': App.Constants.UnitsOfMeasure.Pixels, 'NewHeight': 150, 'NewWidth': 3580, 'PlaceBottom': 0, 'PlaceLeft': -10, 'PlaceRight': -10, 'PlaceTop': 0, 'VertPlace': App.Constants.VerticalType.Center, 'GeneralSettings': { 'ExecutionMode': App.Constants.ExecutionMode.Default, 'AutoActionMode': App.Constants.AutoActionMode.Match, 'Version': ((9,0,1),1) } }) # Blinds App.Do( Environment, 'Blinds', { 'Width': 5, 'Opacity': 25, 'Horizontal': False, 'LightFromLeftTop': True, 'Color': (62,105,148), 'GeneralSettings': { 'ExecutionMode': App.Constants.ExecutionMode.Default, 'AutoActionMode': App.Constants.AutoActionMode.Match, 'Version': ((9,0,1),1) } }) # SelectInvert App.Do( Environment, 'SelectInvert', { 'GeneralSettings': { 'ExecutionMode': App.Constants.ExecutionMode.Default, 'AutoActionMode': App.Constants.AutoActionMode.Match, 'Version': ((9,0,1),1) } }) # Halftone App.Do( Environment, 'Halftone', { 'BackgroundColor': (255,255,255), 'ColorScheme': App.Constants.ColorScheme.Greyscale, 'HalftonePattern': App.Constants.HalftonePattern.Line, 'Overlay': True, 'OverlayBlendMode': App.Constants.BlendMode.Screen, 'OverlayOpacity': 48, 'PatternColor': (0,0,0), 'ScreenAngles': (90,137,137), 'Size': 5, 'TransparentBackground': False, 'GeneralSettings': { 'ExecutionMode': App.Constants.ExecutionMode.Default, 'AutoActionMode': App.Constants.AutoActionMode.Match, 'Version': ((9,0,1),1) } }) # SelectNone App.Do( Environment, 'SelectNone', { 'GeneralSettings': { 'ExecutionMode': App.Constants.ExecutionMode.Default, 'AutoActionMode': App.Constants.AutoActionMode.Match, 'Version': ((9,0,1),1) } }) # Magic Wand App.Do( Environment, 'MagicWand', { 'General': { 'Mode': App.Constants.SelectionOperation.Replace, 'Antialias': True, 'Feather': 0, 'SampleMerged': False }, 'MatchMode': App.Constants.MatchMode.RGBValue, 'Contiguous': False, 'Point': (1482.5,90.5), 'Tolerance': 1, 'AntialiasType': App.Constants.AntialiasType.Outside, 'GeneralSettings': { 'ExecutionMode': App.Constants.ExecutionMode.Default, 'AutoActionMode': App.Constants.AutoActionMode.Match, 'Version': ((9,0,1),1) } }) # Drop Shadow App.Do( Environment, 'DropShadow', { 'Blur': 5, 'Color': (0,0,0), 'Horizontal': 0, 'NewLayer': False, 'Opacity': 80, 'Vertical': 0, 'GeneralSettings': { 'ExecutionMode': App.Constants.ExecutionMode.Default, 'AutoActionMode': App.Constants.AutoActionMode.Match, 'Version': ((9,0,1),1) } }) # SelectNone App.Do( Environment, 'SelectNone', { 'GeneralSettings': { 'ExecutionMode': App.Constants.ExecutionMode.Default, 'AutoActionMode': App.Constants.AutoActionMode.Match, 'Version': ((9,0,1),1) } }) # Gregs Factory Output Vol. II_Pool Shadow App.Do( Environment, 'Gregs Factory Output Vol. II_Pool Shadow', { 'GeneralSettings': { 'ExecutionMode': App.Constants.ExecutionMode.Default, 'AutoActionMode': App.Constants.AutoActionMode.Match, 'Version': ((9,0,1),1) }, 'DefaultProperties': [] })We are going to place the section in purple inside an if clause. First, we need to ask the user a question using a Message Box.
result = App.Do(Environment, 'MsgBox', { 'Buttons': App.Constants.MsgButtons.YesNo, 'Icon': App.Constants.MsgIcons.Question, 'Text': 'Do you wish to apply Greg\'s Factory Output\n' 'Vol. II Pool Shadow?', })The \n in the text section tells the Message Box to insert a return. Special characters, such as the apostrophe, need to be escaped with a backslash (\) so that the text does not end prematurely.
7. This will create a question message box with two options: Yes and No. (Read more about message boxes.)

8. To make the script use the plugin if the user chooses yes, but skip the plugin if the user chooses no, insert the 'if' statement before the plugin command.
if result == 1: # Gregs Factory Output Vol. II_Pool Shadow App.Do( Environment, 'Gregs Factory Output Vol. II_Pool Shadow', { 'GeneralSettings': { 'ExecutionMode': App.Constants.ExecutionMode.Default, 'AutoActionMode': App.Constants.AutoActionMode.Match, 'Version': ((9,0,1),1) }, 'DefaultProperties': [] }) else: # MsgBox Result = App.Do(Environment,'MsgBox',{ 'Buttons':App.Constants.MsgButtons.OK, 'Icon':App.Constants.MsgIcons.Info, 'Text':'Script Complete\n\n' 'http://humbuggraphicsgalore.blogspot.com/', })
This conditional says, if the result is equal to one (meaning Yes) then use the plugin. Else, if the result is not equal to one then produce a message box saying that the script is complete.


If the block is not indented, then the script will not load and the script output window will produce an error stating, "IndentationError: expected an indented block"
9. The 'else' part of the if clause is optional. It does not need to exist and it only occurs when the user answers 'No' to the question. The following code snippet would produce the same effect for the plugin, but the final message would always appear, not just when the user clicked 'No'.
if result == 1: # Gregs Factory Output Vol. II_Pool Shadow App.Do( Environment, 'Gregs Factory Output Vol. II_Pool Shadow', { 'GeneralSettings': { 'ExecutionMode': App.Constants.ExecutionMode.Default, 'AutoActionMode': App.Constants.AutoActionMode.Match, 'Version': ((9,0,1),1) }, 'DefaultProperties': [] }) # MsgBox Result = App.Do(Environment,'MsgBox',{ 'Buttons':App.Constants.MsgButtons.OK, 'Icon':App.Constants.MsgIcons.Info, 'Text':'Script Complete\n\n' 'http://humbuggraphicsgalore.blogspot.com/', })
In this case, what happens is that after the script reaches the end of the if clause, it continues with the rest of the script.
10. Finally, multiple if statements can be nested inside each other. For example,
EC5 = App.Do(Environment, 'MsgBox', { 'Buttons': App.Constants.MsgButtons.YesNo, 'Icon': App.Constants.MsgIcons.Question, 'Text': 'Do you have Eye Candy 5 Impact?', }) if EC5 == 1: # Alien Skin Eye Candy 5: Impact_Bevel App.Do( Environment, 'Alien Skin Eye Candy 5: Impact_Bevel', { 'GeneralSettings': { 'ExecutionMode': App.Constants.ExecutionMode.Default, 'AutoActionMode': App.Constants.AutoActionMode.Match, 'Version': ((9,0,1),1) }, 'DefaultProperties': [(1313631852,1651470188,0,(1,r'''AQ==''')),(1466201192,1413830740,0,(1, r'''NDIgcGl4ZWxzAA==''')),(1131312242,1685026146,0,(1,r'''AAAAAACAQUA=''')),(1399682152, 1685026146,0,(1,r'''AAAAAAAAWUA=''')),(1111847523,1685026146,0,(1,r'''AAAAAAAAAAA=''')), (1111848057,1701737837,0,(1,r'''aXRlQjBUZWI=''')),(1148349294,1685026146,0,(1,r'''AAAAAAAAAAA=''' )),(1181491232,1651470188,0,(1,r'''AQ==''')),(1111843443,1701737837,0,(1,r'''eXR1UzBSdXM=''' )),(1114468417,1685026146,0,(1,r'''AAAAAAAAOUA=''')),(1399874414,1413830740,0,(1,r'''OS4wODMgcGl4ZWxzAA==''' )),(1382966355,1819242087,0,(1,r'''1x8AAA==''')),(1148347252,1685026146,0,(1,r'''AAAAAADgcEA=''' )),(1229874028,1685026146,0,(1,r'''AAAAAABAUEA=''')),(1114793832,1685026146,0,(1,r'''AAAAAAAAREA=''' )),(1399353968,1685026146,0,(1,r'''AAAAAACAUUA=''')),(1131180576,1413830740,0,(1,r'''UkdCOiAyNTUgMjU1IDI1NSAA''' )),(1935963971,1413830740,0,(1,r'''UkdCOiA2NCA2NCA2NCAA''')),(1111843683,1413830740,0,(1 ,r'''Q3VzdG9tQ3VydmU6IDMgMCAxIDAgMC41IDAuNjYgMCAxIDAgMAA=''')),(1111843700,1701737837,0, (1,r'''dGNlQjBUY2I=''')),(1111843444,1701737837,0,(1,r'''Y2JlQjBVYmI='''))] }) else: EC4000 = App.Do(Environment, 'MsgBox', { 'Buttons': App.Constants.MsgButtons.YesNo, 'Icon': App.Constants.MsgIcons.Question, 'Text': 'Do you have Eye Candy 4000?', }) if EC4000 == 1: # Eye Candy 4000_Bevel Boss App.Do( Environment, 'Eye Candy 4000_Bevel Boss', { 'GeneralSettings': { 'ExecutionMode': App.Constants.ExecutionMode.Interactive, 'AutoActionMode': App.Constants.AutoActionMode.Match, 'Version': ((12,0,1),1) }, 'DefaultProperties': [(1466201192,1413830740,0,(1,r'''MjQuMDAgcGl4ZWxzAA==''')),(1131312242, 1685026146,0,(1,r'''AAAAAAAASUA=''')),(1399682152,1685026146,0,(1,r'''AAAAAADAUkA=''')), (1651928147,1701737837,0,(1,r'''aXRlQjBUZWI=''')),(1148349294,1685026146,0,(1,r'''AAAAAAAAAAA=''' )),(1181491232,1651470188,0,(1,r'''AQ==''')),(1148347252,1685026146,0,(1,r'''AAAAAADgYEA=''' )),(1229874028,1685026146,0,(1,r'''AAAAAACARkA=''')),(1114793832,1685026146,0,(1,r'''AAAAAAAAWUA=''' )),(1399353968,1685026146,0,(1,r'''AAAAAAAAOUA=''')),(1131180576,1413830740,0,(1,r'''UkdCOiAxMDAuMCUgMTAwLjAlIDEwMC4wJSAoMjU1IDI1NSAyNTUpAA==''' )),(1935963971,1413830740,0,(1,r'''UkdCOiAwLjAlIDAuMCUgMC4wJSAoMCAwIDApAA==''')),(1111848556 ,1413830740,0,(1,r'''QmV2ZWw6IDMvMC4wMDAgMS4wMDAgMC8wLjUwMCAwLjY2MCAwLzEuMDAwIDAuMDAwIDAA''' ))] }) else: result = App.Do(Environment, 'MsgBox', { 'Buttons': App.Constants.MsgButtons.OK, 'Icon': App.Constants.MsgIcons.Info, 'Text': 'You need a version of Eye Candy.', })Notice that the if statements are placed (left indented) inside the previous if statements, like so:
Code |----Code |----Code |----Code
This is known as nesting. The indentation tells Python when various pieces of code end.
No comments:
Post a Comment