Do not localize

mini display 를 이용하여 외부 모니터를 연결 한 상태로 부팅시 <<do not localize>> 상태이며 부팅 후 외부 모니터 연결시 인식조차 하지 못함

Also happend to me last night when i updated to 10.5.4, have tried almost everything and it is driving me nuts too.

Similar Messages

  • Display resolution ...do not localize?

    it can not allowed me to change display resolution ...it says do not localize?

    Found a solution mentioned here as well. The issue comes when your OS X language is not english as Default.
    Try changing it back to English (System preferences / languages and text /  Language / Drag english to the top of your prefered languages)
    Then reboot. Voilà, it has to fix the issue.

  • Snow Leopard: Display settings not working anymore. DO NOT LOCALIZE

    Hello,
    the following message was posted in the MacBook Pro Display forums and i was suggested to write it here:
    I purchased a MacBox Set and upgraded from Tiger on a MacBook Pro 15" (2007). I did a clean install. That was two weeks ago.
    Today i went into System Preferences>Displays (not my first time there) and a window oppened by itself saying that the display setting was about to be changed and maybe certain software would not be showed properly in a resolution below 800X600 (sorry, that's my translation. I use a Spanish SO).
    After that, the resolution changed to 640X480 and the Display panel became useless. It's impossible to set any other resolution and on the refresh settins apears that message: <<do not localize>>. Under the Resolutions Field appears <<<DO NOT LOCALIZE>>> as well.
    I tryed:
    * Repair disk Permissions
    * Reset PRAM
    * Reset PMU
    * I did a hardware test (the long one). No problems found.
    I was not able to use the system disks (the ones that came with my computer) because the image on the screen appears completly distorted and i am not able to navigate through the menus. I was able to use Hardware Test because the buttons where showed in the middle of the screen.
    I tryed to use the Snow Leopard DVD, but the part of the welcome window in wich the buttons are was out of the screen and i had no chance to click on them.
    I have temporarily fixed that using a ten days trial version of SwitchRes X. Everything works fine now, but the Display preferences panel from MacOs stays "in coma". So i guess it's not a hardware problem, but a Snow Leopard Problem. If in ten days i don't find a fix for that, i'm gonna be forced to buy the program, a really good software, i have to say, but a software i shoulnd't need.
    After been able to recover my original resolution via SwitchRes X, I checked the disk and it was ok. I repaired it anyway. Back to my desktop, i checked the permisions and everything was fine except for this message:
    "Advertencia: el archivo SUID “System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/MacOS/ARDAgen t” se ha modificado y no se reparará."
    I got this message since the first time i checked permissions and its well know by other users. It is supposed to be normal.
    Anyway, it didn't worked.
    I'll appreciate any help. Thanks!
    Message was edited by: ignatius j.Reilly

    "I was not able to use the system disks 'cos the image on the screen appears completly distorted and i am not able to navigate the menus."
    Never ran across that type of problem on Apple's message boards.
    "I have temporarily fixed that using a ten days trial version of SwitchRes X. Everything works fine now but the Display preferences panel from MacOs, wich stays "in coma"."
    In that case, are you now able to boot off your install DVD? If so, run the +"repair disk"+ option, when done boot back to desktop & run repair permissions.
    "So i guess it's not a hardware problem, but a Snow Leopard Problem."
    Post in the Mac OS X v10.6 Snow Leopard Forums where the SL users hang out at.
    !http://i50.tinypic.com/izvwo1.gif!

  • Message. Can't create a new account: Do Not Localize

    I try to create a new account. Select "Other message account..."
    Each attempt ends with the message << Do Not Localize >>.
    And that's it.
    My accounts preferences dialogue. Right side is empty
    3. Can't fill the fields. After pressing "Set Up" button, the contents of the field disappears:
    It's definitely Mac OS, not a Windows?

    I really don't understand your use of the word "image" in this context. Especially your statement "there is already (an admin account) in the image". Can you clarify?

  • Mail: DO NOT LOCALIZE - My Mail isn't there

    I've just finished cloning my Macintosh HD drive to a larger drive.
    I've encountered a few minor issues, except for this and an iTunes problem.
    Someone else also had this issue about a year ago, but there's no resolution. My problem is the same exactly:
    +I am no longer able to add or modify accounts in Mail. When I select preferences, at the bottom of the preferences window there is text between the "-" and the "?" saying <do not localize>. When I click on the "" to start adding an account nothing happens, the only way then to close Mail is to force quit.+
    I start Mail, it starts. But my mail isn't there. The files are all present in myusername/library/mail but mail won't access it. I tried reloading the mail app with no results.
    Anyone any thoughts at all, because I have no idea at this point.
    I can't get mail to do anything because at the bottom of the preferences window there is text between the "-" and the "?" saying <do not localize>.
    Thanks as always.

    I would say that something went wrong with your cloning. Parts of the Mail.app seem to be missing. I would not trust this clone and better retry. Now it's just a few minor things, but what if you find out about other problems later on?
    My advice would be to repair privileges and check your source volume. Then boot off another system so that your source is not in use. From there clone again using Carbon Copy Cloner and you should be fine.

  • Date Parameters do not respond to Localization

    We are using CR 2008 in our Windows App and feeding CR Reports with Parameters, two of which are the "start date" and "end date" of the reporting data.
    When UK users of our app run our reports all dates in the report respond to the Localization setting, EXCEPT the two dates coming in as parameters.
    In other words, if a date that would be 12/31/2008 in the US is run in the UK, it gets properly localized to 31/12/2008 anywhere it appears in the data body of the report.
    But if the same date is passed as a parameter (date type), it does not localize and remains as 12/31/2008.
    Anyone know why this is?  Is there a way to fix this?

    Thanks for responding, but neither is the case...
    This is a Visual Basic .NET application that calls a variety of Crystal Reports.  The reports get their data via SQL Stored Procedures - so the "From date" and "To date" are passed using CR's Discrete parameters.
    What is particularly odd about this problem is that I have checked those parameters on the Crystal side and they are of "DateTime" type.  This is odd because ALL other DateTime type data fields respond and localize properly - ONLY the passed parameters (the 2 of them) do not.
    I know this is a bit mysterious and I am digging everywhere I can to find answers, but if you have any further suggestions, please offer them - if not, thanks for responding just the same.

  • Not Able to use Mail.app

    Hello to everyone. After been browsing this site and google for about 2 days I have decided to post this message and see if someone can help me fix the problem I am having. My mail.app has been not working for me ever since I got my new mac and migrated all my information from my previous mac and applied all the new updates to it. When I open the mail.app the main window does not come up unless I go to view and click the view reader window option. I also can't add a new email account from the preference panel. I click on the "+" sign and nothing happens and on at the bottom of that screen it reads <do not localize>.
    I have already deleted all the apple.mail.plist files as well as the ones on the preference folder and the cache and mail folder and try to re-install the mail app from the Leopard DVD and did no solve the problem. I also tried fixing permissions and nothing (haven't try fix disk from the boot of the Leopard DVD but will try tomorrow after I get off work). Any other recommendations?
    Also please noticed that I also did create a test user and open the mail from inside that account and mail works perfectly, so I don't know if maybe something is screwed up inside my user folder or what. Please reply back if you have any other ideas or if you know of a solution to this problem. I have also notice that my mac crash every time I try to use yahoo messenger too, maybe that could be related to the mail.app problem that I am having.

    _*I did what you told me and here is what it says right after i open the mail.app_:*
    12/8/08 6:39:08 AM Mail[287] -[ABAddressBook sharedAddressBook] Can't ABACQUIREFILELOCK /SourceCache/AddressBook/AddressBook-696/Framework/AddressBook/ABAddressBook.m: 3165
    12/8/08 6:39:08 AM Mail[287] * Assertion failure in -[ABPerson nts_initWithUniqueId:addressBook:], /SourceCache/AddressBook/AddressBook-696/Framework/AddressBook/ABRecord.m:195
    12/8/08 6:39:08 AM Mail[287] this method is not thread safe. AddressBook must not be nil.
    Stack Trace: (
    2524893515,
    2461404731,
    2524892971,
    2518456916,
    2457822250,
    2457821463,
    2457821282,
    4351636,
    4352136,
    1562955,
    16194,
    2517546478,
    2524396357,
    2524396792,
    2470409344,
    2470408857,
    2470408461,
    2493379133,
    2493377264,
    2493348651,
    2493140324,
    1026466
    12/8/08 6:39:08 AM Mail[287] this method is not thread safe. AddressBook must not be nil.
    Stack Trace: (
    2524893515,
    2461404731,
    2524892971,
    2518456916,
    2457822250,
    2457821463,
    2457821282,
    4351636,
    4352136,
    1562955,
    16194,
    2517546478,
    2524396357,
    2524396792,
    2470409344,
    2470408857,
    2470408461,
    2493379133,
    2493377264,
    2493348651,
    2493140324,
    1026466
    _*When I open the preferences panel I get this code*:_
    12/8/08 6:12:41 AM Mail[244] DeliveryAccounts are missing. Trying to restore from backup. (null)
    *_And when I try to add a new email account I get this:_*
    12/8/08 6:13:34 AM Mail[244] * Assertion failure in -[ABPerson nts_initWithUniqueId:addressBook:], /SourceCache/AddressBook/AddressBook-696/Framework/AddressBook/ABRecord.m:195
    12/8/08 6:13:34 AM Mail[244] this method is not thread safe. AddressBook must not be nil.
    Stack Trace: (
    2524893515,
    2461404731,
    2524892971,
    2518456916,
    2457822250,
    2457821463,
    2457821282,
    4351636,
    4352136,
    978102,
    975351,
    974927,
    974450,
    974243,
    915524,
    914672,
    2494237179,
    2494236984,
    2494236606,
    2494234135,
    2494232170,
    2494230308,
    2494223971,
    2494013961,
    190171,
    2493348703,
    2493140324,
    1026466
    12/8/08 6:42:09 AM Mail[287] DeliveryAccounts are missing. Trying to restore from backup. (null)
    12/8/08 6:42:09 AM Mail[287] DeliveryAccounts are missing. Trying to restore from backup. (null)
    12/8/08 6:42:19 AM Mail[287] * Assertion failure in -[ABPerson nts_initWithUniqueId:addressBook:], /SourceCache/AddressBook/AddressBook-696/Framework/AddressBook/ABRecord.m:195
    12/8/08 6:42:19 AM Mail[287] this method is not thread safe. AddressBook must not be nil.
    Stack Trace: (
    2524893515,
    2461404731,
    2524892971,
    2518456916,
    2457822250,
    2457821463,
    2457821282,
    4351636,
    4352136,
    978102,
    975351,
    974927,
    974450,
    974243,
    915524,
    914672,
    2494237179,
    2494236984,
    2494236606,
    2494234135,
    2494232170,
    2494230308,
    2494223971,
    2494013961,
    190171,
    2493348703,
    2493140324,
    1026466
    ))

  • How should the new note & mortgage servicer report the loan on the credit report ?

    History... Default on a modification to original note and mortgage with same lender/service provider that was made (the modification) after Chapter 7 bankruptcy discharge and never reaffirmed, no further monetary liability to signer on the note. After the modification default the loan is transferred to a new loan servicer. The trade lines continue to report CH7 status from the original loan service provider, closed account, 0 balance, etc. from the original servicer of the loan, nothing from the new servicer. A second modification is attempted via the new loan servicer and denied, After the modification denial, co-signer files CH 7. The signer on the note and mortgage quitclaims the property to co-signer.  Then the foreclosure process starts with the new loan servicer and the new loan servicer places a new trade line on the signer's credit report showing foreclosure status, account open, late, account balance shown, etc. During the foreclosure process with the new loan servicer  the co-signer files a CH 13, which is approved by the courts and the case is now closed. Regarding the signer of the note and mortgage, (not the co-signer), I thought the new loan servicer would have to report the loan on the credit report just as the prior original servicer did,  CH7 status, closed account, 0 balance, etc. I’m trying to make sense of how this is supposed to be reporting from the new loan servicer for the signer of the note and mortgage who quitclaimed the property. Thanks

    Localization does not change any of the data or text objects that you created on the report.  It will change special fields and tooltips that are a part of the viewer.  I believe it might also change the formatting of dates and numbers.  Anything more than that is translation not localization.

  • Adding text as a *filter*, not a new layer.

    Hi there. Anyone know if there is a filter out there that allows me to add a bit of text to a shot as a filter, rather than having to use the Text generator and use a new layer?
    I'm thinking of something along the lines of the Timecode generator filter or 'Viewfinder' filter, but just for text and without the numbers/viewfinder frame. I just want to add static text to a whole bunch of shots without needing to go to a new layer or messing around with nesting. TIA.

    alright already ! easier to doi than explain
    open up the FXBuilder [Tools>FXBuilder], then cut and paste the text below into the Editor window... create it [FXBuilder>Create Plugin...] give it a name, and save it into your /Library/Application Support/Final Cut Pro System Support/Plugins folder.
    // Plugin Text follows
    scriptid "Andy's Text Filter" //DO NOT LOCALIZE
    filter "Andy's Text Filter"
    group "Text"
    fullFrame
    input str, "Text", text, "SAMPLE TEXT" textheight 10;
    input fontname, "Font", FontList, "", "str";
    input fontsize, "Size", slider, 36, 0, 1000 ramp 80 detent 36;
    input fontstyle, "Style", popup, 1, "Plain", "Bold", "Italic", "Bold/Italic";
    input center, "Center", point, 0, 0.3;
    input fontcolor, "Font Color", color, 255, 255, 255, 255;
    input ignoreOpacity, "Ignore Opacity (Faster)", checkbox, 1
    input opacityTC, "Opacity", slider, 100, 0, 100 detent 100;
    input backcolor, "Back Color", color, 255, 0, 0, 0;
    code
    float a, d, w, h;
    point centeroftxt, framesize, poly[4], txtbox[4];
    resetText;
    fontcolor.a = 255;
    backcolor.a = 255;
    dimensionsof(dest, framesize.x, framesize.y);
    fontsize *= (framesize.x / 640)
    setTextFont(fontname);
    setTextSize(fontsize);
    if fontstyle == 4          //     bold & italic
         setTextstyle(kbolditalic);
    else if fontstyle == 3     //     italic
         setTextstyle(kitalic);
    else if fontstyle == 2     //     bold
         setTextstyle(kbold);
    else                         //     plain
         setTextstyle(kplain);
    end if;
    centeroftxt = framesize;
    centeroftxt *= center;
    measurestringplain(str, w, h, a, d, aspectof(dest));
    makerect(txtbox, centeroftxt.x-w/2, centeroftxt.y-a/2, w, a);
    poly = txtbox;
    scale(poly, centeroftxt, 1.1, 1.5);
    if ignoreOpacity
         // This performs faster, because it avoids a bunch of extra processing
         dest = src1
         backcolor.a = 255
         fillpoly( poly, dest, backcolor )
    else
         channelfill(dest, 0, 0, 0, 0);
         fillpoly(poly, dest, kwhite);
         channelcopy(dest, dest, kred, knone, knone, knone);
         channelfill(dest, -1, backcolor.r, backcolor.g, backcolor.b);
         Matte(dest, src1, dest, opacityTC/100, kalpha);
    end if
    drawstringplain(str, txtbox, dest, fontcolor, aspectof(dest));

  • Display settings in System Preferences acting up

    I'm having trouble with my Display settings under System Preferences. I am not using an external monitor. My display seems to be working fine, but when I open Display settings to change resolution and colour, weird stuff happens. Basically, I cannot use this preference pane at all.
    My display is 1920x1200, but when I open the Display settings, I get two windows, one telling me that "I am about to change [something something], some applications cannot display information correctly if the screen has less than 800x600 pixels", and the other one, the usual main window, telling me that my resolution is now 640x480 (it isn't).
    If I hit OK in the extra window that pops up, my resolution changes to 640x480 or something similar, and I am unable to change back unless I reboot. Also, in the main Display settings window, it says <<< DO NOT LOCALIZE >>> under the list of available resolutions, as well as << do not localize >> in the box where I can change refresh rate. None of the buttons seem to be working.
    Does anyone have any idea what is going on here? This was working just fine when I received my new MacBook Pro a few days ago, but now it's not. I've been repairing disk permissions and rebooting, etc.
    I have been installing the trial version of Adobe CS5, but had massive problems with this installation (as a lot of people are reporting with CS5 and Snow Leopard...) and uninstalled them again, cleaning out Adobe preference files. Could I have deleted some other important files by accident in this process?

    Quit System Preferences, then delete these files or folders.
    Users/yourname/Library/Preferences /com.apple.systempreferences.plist
    Users/yourname/Library/Preferences/By Host/com.apple.systempreferences.xxxxx.plist and com.apple.PrefPane.Network.xxxxx.plist (the X's will be numbers)
    Also, Users/Home/Library/Caches
    Now relaunch System Preferences. Let us know.
    -mj

  • Shading certain columns depending on start day of week.

    Good Afternoon,
    I have reason to edit the calendar wizard to make it completely automated.  And before anyone says that this isn't used anymore, we've received 2 separate calendar files over the last made from our Finance departments, each making them with Word calendar
    wizard highlighting year end dates.  So believe me, the calendar wizard is still very much in use!
    Last September, I finally figured out how to automate the first day of the week, though.  I have 2 templates now, one for Monday as first day and one for Sunday being the first day of the week.
    The only thing missing is to automate the shading so that the columns for Saturday and Sunday are shaded with light grey, and since it's automation we're talking about, only those cells in the columns with a number in them.
    I know it's do-able, I'm just not a vb expert, only being able to handle editing simple macros.
    But I understand that since I had some help with the macros and they might have changed from the original to some degree, that I should post the code.  Is this correct?  I hope that it is.
    ' WORD 97 WIZARD
    ' Calendar Wizard Specific Code
    Option Explicit
    ' CONSTANT DECLARATIONS
    '=============================== LOCALIZATION BLOCK ===============================
    ' Localization Note: iWeekStartDay is the starting day of the week (Sun = 0, Mon = 1, ...Sat = 6)
    Public Const iWeekStartDay As Integer = 1
    ' Banter strings
    Public Const strWarnYearReq As String = "Both starting and ending years are required."
    Public Const strWarnMinExceeded As String = "The year can not be before 1900."
    Public Const strWarnMaxExceeded As String = "The year can not be after 4095."
    Public Const strWarnRangeExceeded As String = "The calendar is limited to 120 months (10 years)."
    Public Const strAppCaptionPart1 As String = "Calendar: "
    Public Const strAppCaptionPart1b As String = ""
    Public Const strAppCaptionPart2 As String = ", "
    Public Const strAppCaptionPart3 As String = " to "
    Public Const strAppCaptionPart4 As String = ", "
    ' Status messages
    Public Const strStatusIntro As String = "Creating Calendar..."
    Public Const strStatusPart1 As String = "Creating "
    Public Const strStatusPart2 As String = ", "
    Public Const strStatusPart3 As String = "..."
    ' Assistant
    Public Const strCallBackHeading As String = "Do more with the calendar?"
    'Margins for A4 size (if wizard changes pagesize to A4)
    Public Const sA4_SHORT_MARGIN As Single = 28.8
    Public Const sA4_LONG_MARGIN As Single = 57.6
    'Margins for Letter size (if wizard changes pagesize to Letter) in pts
    Public Const sLETTER_SHORT_MARGIN As Single = 36
    Public Const sLETTER_LONG_MARGIN As Single = 36
    '========== END LOCALIZATION BLOCK - DO NOT MAKE CHANGES BELOW THIS LINE ==========
    Public Const iYearMin As Integer = 1900
    Public Const iYearMax As Integer = 4095
    ' Bookmark Names - DO NOT LOCALIZE
    ' Note: No spaces allowed in bookmark names
    Public Const strBkMkMonth As String = "Month"
    Public Const strBkMkDays As String = "Days"
    Public Const strBkMkDayNames As String = "DayNames"
    Public Const strBkMkYear As String = "Year"
    ' Calendar Style Names and Constants
    Public Const wzBOXES As Integer = 0
    Public Const wzBANNER As Integer = 1
    Public Const wzJAZZY As Integer = 2
    ' Form Control
    Public Const wzPAGE_START As Integer = 0
    Public Const wzPAGE_STYLE As Integer = 1
    Public Const wzPAGE_DIRECTION As Integer = 2
    Public Const wzPAGE_MONTHS As Integer = 3
    Public Const wzPAGE_FINISH As Integer = 4
    'orientation
    Public Const iORTN_PORTRAIT As Integer = 0
    Public Const iORTN_LANDSCAPE As Integer = 1
    ' Assistant
    Public Const iMAX_PANEL As Integer = 4 ' Number of last panel in MultiPage (First=0)
    Public Const iCALL_BACK_COUNT As Integer = 3 ' Number of items in CallBackBalloon (First=1)
    'postwizard balloon document variable
    Public Const strPOST_WIZ_BLN As String = "Calendar post wizard balloon"
    ' VARIABLE DECLARATIONS
    ' General
    Public rgstrMonthName(11) As String
    Public rgstrDayName(6) As String
    Public rgiDaysInMonth(11) As String
    Public fDateError As Boolean
    Public fCheckValidity As Boolean 'if set then the dates are checked for validity
    'variables used in doc. creation
    Public str1_TO_28 As String
    Public rgsDaysHeight(2, 1, 1) As Single
    Public rgsMonthNamesHeight(2, 1, 1) As Single
    Public rgstrDaysStyle(2) As String
    Public rgstrMonthNamesStyle(2) As String
    Public strSTY_BANNER_HDG3 As String
    ' Assistant
    Public rgstrAssistantMsg(iMAX_PANEL + 1) As String
    Public rgstrCallBackMsg(iCALL_BACK_COUNT) As String
    Public rgstrCallBackTip(iCALL_BACK_COUNT) As String
    ' Page 1
    Public iCalendarStyle As Integer
    Public iSavedStyle As Integer
    ' Page 2
    ' Page 3
    ' Page 4
    Public Sub InitWizardName(fDummy As Boolean)
    strWizName = "Calendar Wizard"
    strWizLongName = strWizName
    strWizShortName = "Calendar"
    End Sub
    Public Sub InitWizardStrings(fDummy As Boolean)
    Dim i As Integer
    On Error GoTo FatalError
    '=============================== LOCALIZATION BLOCK ===============================
    ' Note: this list is indexed 0 - iMAX_PANEL
    rgstrAssistantMsg(0) = "The Calendar Wizard helps you create a monthly calendar that you can customize with pictures and events. If you want to track and be reminded of events, you should probably use Microsoft Outlook, Microsoft Schedule+, or Microsoft Exchange."
    rgstrAssistantMsg(1) = "Select the look you want for your calendar. The Jazzy style uses the Algerian font. If it is not installed on your system, copy alger.ttf from the Valupack folder on the Microsoft Office CD to your hard drive."
    rgstrAssistantMsg(2) = "If you leave room for a picture, Word will insert a placeholder picture that you can replace with any picture you want."
    rgstrAssistantMsg(3) = "Your calendar can start on any month, and you can make your calendar shorter than or longer than 12 months. Each month will appear on a different page."
    rgstrAssistantMsg(4) = "To change any settings, click Back."
    ' Note: change constant iCALL_BACK_COUNT if number of items in list changes
    rgstrCallBackMsg(0) = "Add, remove, or replace a picture"
    rgstrCallBackMsg(1) = "Enter information into the calendar"
    rgstrCallBackMsg(2) = "Get Help on Something Else..."
    rgstrCallBackTip(0) = "To remove a picture, click on it and then press Delete. To add a picture, click where you want to insert the picture, point to Picture on the Insert menu, and then click From File."
    rgstrCallBackTip(1) = "To enter information, click where you want to insert the text and start typing. To move between different dates in the calendar, press Tab to move forward or press Shift+Tab to move to the previous date."
    'Load Month Name array
    rgstrMonthName(0) = "January"
    rgstrMonthName(1) = "February"
    rgstrMonthName(2) = "March"
    rgstrMonthName(3) = "April"
    rgstrMonthName(4) = "May"
    rgstrMonthName(5) = "June"
    rgstrMonthName(6) = "July"
    rgstrMonthName(7) = "August"
    rgstrMonthName(8) = "September"
    rgstrMonthName(9) = "October"
    rgstrMonthName(10) = "November"
    rgstrMonthName(11) = "December"
    'Load Day Name array LOCALIZATION NOTE: DO NOT CHANGE THE ORDER IN WHICH THESE APPEAR!
    ' TO CHANGE THE WEEK START DAY, CHANGE THE CONSTANT iWeekStartDay
    rgstrDayName(0) = "Sun"
    rgstrDayName(1) = "Mon"
    rgstrDayName(2) = "Tue"
    rgstrDayName(3) = "Wed"
    rgstrDayName(4) = "Thu"
    rgstrDayName(5) = "Fri"
    rgstrDayName(6) = "Sat"
    'Load Days In Month array
    rgiDaysInMonth(0) = 31
    rgiDaysInMonth(1) = 28 'Will not be used - must be calculated for leap year accuracy
    rgiDaysInMonth(2) = 31
    rgiDaysInMonth(3) = 30
    rgiDaysInMonth(4) = 31
    rgiDaysInMonth(5) = 30
    rgiDaysInMonth(6) = 31
    rgiDaysInMonth(7) = 31
    rgiDaysInMonth(8) = 30
    rgiDaysInMonth(9) = 31
    rgiDaysInMonth(10) = 30
    rgiDaysInMonth(11) = 31
    rgstrDaysStyle(wzBOXES) = "Boxes"
    rgstrDaysStyle(wzBANNER) = "Banner"
    rgstrDaysStyle(wzJAZZY) = "Jazzy"
    rgstrMonthNamesStyle(wzBOXES) = "Boxes Heading2"
    rgstrMonthNamesStyle(wzBANNER) = "Banner Heading2"
    'we dont set the style for month names in Jazzy style
    'the Banner style landscape calendar with picture uses Banner Heading3 style for month names
    strSTY_BANNER_HDG3 = "Banner Heading3"
    rgsMonthNamesHeight(wzBOXES, iORTN_PORTRAIT, 0) = 55
    rgsMonthNamesHeight(wzBOXES, iORTN_PORTRAIT, 1) = 55
    rgsMonthNamesHeight(wzBOXES, iORTN_LANDSCAPE, 0) = 36
    rgsMonthNamesHeight(wzBOXES, iORTN_LANDSCAPE, 1) = 36
    rgsDaysHeight(wzBOXES, iORTN_PORTRAIT, 0) = 56
    rgsDaysHeight(wzBOXES, iORTN_PORTRAIT, 1) = 102
    rgsDaysHeight(wzBOXES, iORTN_LANDSCAPE, 0) = 72
    rgsDaysHeight(wzBOXES, iORTN_LANDSCAPE, 1) = 71
    rgsMonthNamesHeight(wzBANNER, iORTN_PORTRAIT, 0) = 60
    rgsMonthNamesHeight(wzBANNER, iORTN_PORTRAIT, 1) = 60
    rgsMonthNamesHeight(wzBANNER, iORTN_LANDSCAPE, 0) = 55
    rgsMonthNamesHeight(wzBANNER, iORTN_LANDSCAPE, 1) = 51
    rgsDaysHeight(wzBANNER, iORTN_PORTRAIT, 0) = 64
    rgsDaysHeight(wzBANNER, iORTN_PORTRAIT, 1) = 110
    rgsDaysHeight(wzBANNER, iORTN_LANDSCAPE, 0) = 81
    rgsDaysHeight(wzBANNER, iORTN_LANDSCAPE, 1) = 81
    rgsMonthNamesHeight(wzJAZZY, iORTN_PORTRAIT, 0) = 73
    rgsMonthNamesHeight(wzJAZZY, iORTN_PORTRAIT, 1) = 73
    rgsMonthNamesHeight(wzJAZZY, iORTN_LANDSCAPE, 0) = 62
    rgsMonthNamesHeight(wzJAZZY, iORTN_LANDSCAPE, 1) = 59
    rgsDaysHeight(wzJAZZY, iORTN_PORTRAIT, 0) = 40.5
    rgsDaysHeight(wzJAZZY, iORTN_PORTRAIT, 1) = 81.8
    rgsDaysHeight(wzJAZZY, iORTN_LANDSCAPE, 0) = 58.2
    rgsDaysHeight(wzJAZZY, iORTN_LANDSCAPE, 1) = 57.5
    str1_TO_28 = ""
    For i = 1 To 28
    str1_TO_28 = str1_TO_28 & CStr(i) & vbTab
    Next i
    'strip off last tab
    str1_TO_28 = Left$(str1_TO_28, Len(str1_TO_28) - 1)
    ' Location in registry DO NOT LOCALIZE
    strRegSettingsKey = strREG_SETTINGS_BASE_KEY & "Calendar Wizard"
    Exit Sub
    FatalError:
    ReportError Err
    End Sub ' InitWizardStrings
    Public Sub InitWizard(fDummy As Boolean)
    ' Global Vars
    fWizardCallBack = False
    fDateError = False
    iCurrentPanel = 0
    ' Initialize strings
    InitWizardStrings (True)
    ' Create a new instance of the form
    Set formWizard = New formWizDlg
    If formWizard Is Nothing Then GoTo FatalError
    formWizard.lblWizName1.Caption = " " & strWizLongName & " "
    Exit Sub
    FatalError:
    DisplayErrorMsg strERR_INIT_FORM
    ReportError Err
    End Sub
    ' fDummy prevents sub from appearing in Word Tools/Macro list
    Public Sub SaveDialogValues(fDummy As Boolean)
    On Error GoTo FatalError
    ' Display status
    Application.ScreenUpdating = False
    System.Cursor = wdCursorWait
    StatusBar = strSAVE_SETTINGS
    ' Assistant
    System.PrivateProfileString("", strREG_SETTINGS_BASE_KEY, strREG_ASSISTANT_TIME_STAMP) = Format$(Now, "General Date")
    StoreValPref strREG_ASSISTANT_HELP, iLocalState
    ' Page 1
    StoreValPref "iCalendarStyle", iCalendarStyle
    ' Page 2
    StoreValPref "optPortrait", formWizard.optPortrait.Value
    StoreValPref "optPictureYes", formWizard.optPictureYes.Value
    ' Page 3
    StatusBar = ""
    System.Cursor = wdCursorNormal
    fSettingsSaved = True
    Application.ScreenUpdating = True
    Exit Sub
    FatalError:
    ReportError Err
    End Sub
    Public Sub RestoreDialogValues(fDummy As Boolean)
    Dim i As Integer
    On Error GoTo FatalError
    ' Display status
    Application.ScreenUpdating = False
    StatusBar = strRST_SETTINGS
    System.Cursor = wdCursorWait
    ' Page 1
    iCalendarStyle = IRestorePref("iCalendarStyle", 0)
    Select Case iCalendarStyle
    Case wzBOXES
    formWizard.optBoxes.Value = True
    formWizard.shpShadowBoxes.Visible = True
    Case wzBANNER
    formWizard.optBanner.Value = True
    formWizard.shpShadowBanner.Visible = True
    Case wzJAZZY
    formWizard.optJazzy.Value = True
    formWizard.shpShadowJazzy.Visible = True
    Case Else
    iCalendarStyle = wzBOXES
    formWizard.optBoxes.Value = True
    formWizard.shpShadowBoxes.Visible = True
    End Select
    ' Page 2
    If FRestorePref("optPortrait", False) Then
    formWizard.optPortrait.Value = True
    formWizard.shpPortraitShadow.Visible = True
    formWizard.shpLandscapeShadow.Visible = False
    Else
    formWizard.optLandscape.Value = True
    formWizard.shpPortraitShadow.Visible = False
    formWizard.shpLandscapeShadow.Visible = True
    End If
    formWizard.optPictureYes.Value = FRestorePref("optPictureYes", False)
    ' Page 3
    formWizard.cboMonthStart.ListIndex = Month(Date) - 1
    formWizard.cboMonthEnd.ListIndex = Month(Date) - 1
    formWizard.txtYearStart = Year(Date)
    formWizard.txtYearEnd = Year(Date)
    fCheckValidity = False
    StatusBar = ""
    System.Cursor = wdCursorNormal
    fSettingsRestored = True
    Application.ScreenUpdating = True
    Exit Sub
    FatalError:
    ReportError Err
    Exit Sub
    End Sub ' RestoreDialogValues
    ' fDummy prevents sub from appearing in Word Tools/Macro list
    Public Sub CreateNewDoc(fDummy As Boolean)
    Dim iMonthCurr As Integer
    Dim iYearCurr As Integer
    Dim lYearMonthCurr As Long
    Dim lYearMonthEnd As Long
    Dim iDaysCnt As Integer
    Dim iDaysInMonth As Integer
    Dim iCnt As Integer
    Dim strAutoTextName As String
    Dim objTableDays As Table
    Dim iRow As Integer
    Dim iCol As Integer
    Dim ocboMonthStart As ComboBox
    Dim ocboMonthEnd As ComboBox
    Dim otxtYearStart As TextBox
    Dim otxtYearEnd As TextBox
    Dim strJazzyDayNames As String
    Dim objFps As PageSetup
    Dim objRng As Range
    Dim sShortMargin As Single
    Dim sLongMargin As Single
    Dim strCaptionTxt As String
    Dim iOrientation As Integer
    Dim iNoPicture As Integer
    Dim i As Integer
    Dim strDays As String
    On Error GoTo CreateNewDoc_Error
    System.Cursor = wdCursorWait
    Set ocboMonthStart = formWizard.cboMonthStart
    Set ocboMonthEnd = formWizard.cboMonthEnd
    Set otxtYearStart = formWizard.txtYearStart
    Set otxtYearEnd = formWizard.txtYearEnd
    With Application
    .ScreenUpdating = False
    .StatusBar = strStatusIntro
    End With
    Set objActiveRange = ActiveDocument.Content
    objActiveRange.Collapse wdCollapseEnd
    If (formWizard.optPortrait) Then
    iOrientation = iORTN_PORTRAIT
    Else
    iOrientation = iORTN_LANDSCAPE
    End If
    iNoPicture = Abs(formWizard.optPictureNo.Value)
    'the margins have to be changed if papersize was changed in Common
    If (fChangeToA4 Or fChangeToLetter) Then
    Set objFps = ActiveDocument.PageSetup
    If iOrientation = iORTN_LANDSCAPE Then
    objFps.Orientation = wdOrientLandscape 'setting paper size in common
    'resets orientation to Portrait
    If fChangeToA4 Then
    sShortMargin = sA4_SHORT_MARGIN
    sLongMargin = sA4_LONG_MARGIN
    Else
    sShortMargin = sLETTER_SHORT_MARGIN
    sLongMargin = sLETTER_LONG_MARGIN
    End If
    Else
    If fChangeToA4 Then
    sShortMargin = sA4_LONG_MARGIN
    sLongMargin = sA4_SHORT_MARGIN
    Else
    sShortMargin = sLETTER_LONG_MARGIN
    sLongMargin = sLETTER_SHORT_MARGIN
    End If
    End If
    With objFps
    .TopMargin = sShortMargin
    .BottomMargin = sShortMargin
    .LeftMargin = sLongMargin
    .RightMargin = sLongMargin
    End With
    End If
    strAutoTextName = StrBuildAutoTextName(True)
    objWizTemplate.AutoTextEntries(strAutoTextName).Insert objActiveRange, True
    If iCalendarStyle <> wzJAZZY Then
    Set objActiveRange = ActiveDocument.Bookmarks(strBkMkDays).Range
    Else
    Set objActiveRange = ActiveDocument.Bookmarks(strBkMkDayNames).Range
    End If
    strJazzyDayNames = ""
    For iCnt = iWeekStartDay To 6
    strJazzyDayNames = strJazzyDayNames & rgstrDayName(iCnt) & vbTab
    Next
    For iCnt = 0 To (iWeekStartDay - 1)
    strJazzyDayNames = strJazzyDayNames & rgstrDayName(iCnt) & vbTab
    Next
    'Strip trailing Tab
    strJazzyDayNames = Left$(strJazzyDayNames, Len(strJazzyDayNames) - 1)
    objActiveRange.Text = strJazzyDayNames
    If iCalendarStyle <> wzJAZZY Then
    If (iCalendarStyle = wzBANNER) And (iOrientation = iORTN_LANDSCAPE) And (iNoPicture = 0) Then
    objActiveRange.Style = strSTY_BANNER_HDG3
    Else
    objActiveRange.Style = rgstrMonthNamesStyle(iCalendarStyle)
    End If
    objActiveRange.Select
    Selection.ConvertToTable wdSeparateByTabs, 1, 7
    End If
    Set objActiveRange = ActiveDocument.Content
    objActiveRange.Copy
    iMonthCurr = CInt(ocboMonthStart.ListIndex) + 1
    iYearCurr = CInt(otxtYearStart.Text)
    lYearMonthCurr = (CLng(iYearCurr) * 100) + CLng(iMonthCurr)
    lYearMonthEnd = (CLng(otxtYearEnd.Text) * 100) + (CLng(ocboMonthEnd.ListIndex) + 1)
    'Create each month of the calendar
    Do Until lYearMonthCurr > lYearMonthEnd
    Application.StatusBar = strStatusPart1 & rgstrMonthName(iMonthCurr - 1) & strStatusPart2 & CStr(iYearCurr) & strStatusPart3
    'Set month
    If iCalendarStyle = wzJAZZY Then
    ActiveDocument.Bookmarks(strBkMkMonth).Range.Text = CStr(iMonthCurr)
    Else
    ActiveDocument.Bookmarks(strBkMkMonth).Range.Text = rgstrMonthName(iMonthCurr - 1)
    End If
    'Set year
    ActiveDocument.Bookmarks(strBkMkYear).Range.Text = CStr(iYearCurr)
    'Determine number of days in month
    If iMonthCurr = 2 Then
    iDaysInMonth = DateSerial(iYearCurr, 3, 1) - DateSerial(iYearCurr, 2, 1)
    Else
    iDaysInMonth = rgiDaysInMonth(iMonthCurr - 1)
    End If
    'Set Column of First Day Of Month by using Weekday function. The 8th
    'is used (to start with) instead of the 1st to allow for offsetting (via
    'iWeekStartDay) for localization since the 8th will always fall on the
    'same day (of the week) as the 1st.
    iCol = WeekDay(DateSerial(iYearCurr, iMonthCurr, 8 - iWeekStartDay))
    ActiveDocument.Bookmarks(strBkMkDays).Select
    If iCalendarStyle <> wzJAZZY Then _
    Selection.MoveDown wdLine 'the bookmark is now in the first cell of the table
    strDays = ""
    For i = 1 To iCol - 1
    strDays = strDays & vbTab
    Next i
    strDays = strDays & str1_TO_28
    For i = 29 To iDaysInMonth
    strDays = strDays & vbTab & CStr(i)
    Next i
    'to get a 6 * 7 table always
    For i = iDaysInMonth + iCol - 1 To 41
    strDays = strDays & vbTab
    Next i
    Set objActiveRange = Selection.Range
    objActiveRange.Text = strDays
    objActiveRange.Style = rgstrDaysStyle(iCalendarStyle) & iOrientation & iNoPicture
    objActiveRange.Select
    Selection.ConvertToTable wdSeparateByTabs, 6, 7
    Selection.Cells.Height = rgsDaysHeight(iCalendarStyle, iOrientation, iNoPicture)
    Selection.Tables(1).Rows(1).Height = rgsMonthNamesHeight(iCalendarStyle, iOrientation, iNoPicture)
    '========================================================
    ' Mn.Sept.01.2014; 08h21
    ' TABLE GRIDLINES CODE: Automatically creates printable gridlines in the table.
    With Selection.Tables(1).Borders
    .InsideLineStyle = wdLineStyleSingle
    .InsideLineWidth = wdLineWidth100pt
    .InsideColorIndex = wdAuto
    .OutsideLineStyle = wdLineStyleSingle
    .OutsideLineWidth = wdLineWidth100pt
    End With
    '========================================================
    ActiveDocument.Bookmarks(strBkMkDays).Delete
    'Advance the current month
    If iMonthCurr = 12 Then
    iMonthCurr = 1
    iYearCurr = iYearCurr + 1
    Else
    iMonthCurr = iMonthCurr + 1
    End If
    lYearMonthCurr = (CLng(iYearCurr) * 100) + CLng(iMonthCurr)
    If lYearMonthCurr <= lYearMonthEnd Then
    Set objActiveRange = ActiveDocument.Content
    objActiveRange.Collapse wdCollapseEnd
    'Insert Page Break
    objActiveRange.InsertBreak wdPageBreak
    Set objActiveRange = ActiveDocument.Content
    objActiveRange.Collapse wdCollapseEnd
    objActiveRange.Paste
    End If
    Loop
    Application.StatusBar = ""
    strCaptionTxt = ""
    'Set Application caption
    strCaptionTxt = " - " & strAppCaptionPart1 & strAppCaptionPart1b & ocboMonthStart.Text & strAppCaptionPart2 & otxtYearStart.Text & strAppCaptionPart3 & ocboMonthEnd.Text & strAppCaptionPart4 & otxtYearEnd.Text
    ActiveDocument.UndoClear
    With ActiveWindow
    .Caption = .Caption & strCaptionTxt
    With .View
    .TableGridlines = False
    .ShowDrawings = True
    End With
    End With
    'Position cursor at the top
    Selection.HomeKey wdStory
    CreateNewDoc_Exit:
    Exit Sub
    CreateNewDoc_Error:
    ReportError Err
    GoTo CreateNewDoc_Exit
    End Sub ' CreateNewDoc
    Public Sub InitCallBack(fDummy As Boolean)
    Dim i As Integer
    Dim objCallBackLabels As BalloonLabels
    On Error GoTo ErrorCallBack
    If Not (fBlnInitialized) Then
    Set objPostWizBln = Assistant.NewBalloon
    fBlnInitialized = True
    With objPostWizBln
    .Heading = strCallBackHeading
    .Mode = msoModeModeless
    .Button = msoButtonSetCancel
    .BalloonType = msoBalloonTypeButtons
    .Callback = "Calendar.fnCallBack"
    End With
    Set objCallBackLabels = objPostWizBln.Labels
    objCallBackLabels.Count = iCALL_BACK_COUNT
    For i = 1 To iCALL_BACK_COUNT
    objCallBackLabels.Item(i).Text = rgstrCallBackMsg(i - 1)
    Next i
    End If
    objPostWizBln.Show
    If (Assistant.BalloonError) Then GoTo ErrorCallBack
    fPostWizBlnOpen = True
    Set objDocBln = ActiveDocument
    Set clsBln.app = Application
    ActiveDocument.Variables.Add strPOST_WIZ_BLN, "1"
    Exit Sub
    ErrorCallBack:
    DisplayErrorMsg strERR_INIT_CALL_BACK
    fPostWizBlnOpen = False
    Set objDocBln = ActiveDocument
    Set clsBln.app = Application
    ActiveDocument.Variables.Add strPOST_WIZ_BLN, "0"
    End Sub
    Public Function fnCallBack(objBln As Balloon, iBtn As Integer, lPrivate As Long)
    On Error GoTo ErrorCallBack
    Select Case iBtn
    Case Is < 1 'Exit
    objBln.Close
    fPostWizBlnOpen = False
    ActiveDocument.Variables(strPOST_WIZ_BLN).Value = "0"
    RestoreAssistant (True)
    Case 1 'Remove existing picture
    DisplayTip rgstrCallBackTip(0)
    Case 2 'Enter information into calendar
    DisplayTip rgstrCallBackTip(1)
    Case 3 ' Get help
    Assistant.Help
    End Select
    Exit Function
    ErrorCallBack:
    DisplayErrorMsg Err.Description
    End Function
    Private Function StrBuildAutoTextName(fDummy As Boolean) As String
    Dim strATName As String
    On Error GoTo BuildAutoTextName_Error
    'Select base AutoText Name NOTE: DO NOT LOCALIZE
    Select Case iCalendarStyle
    Case wzBOXES
    strATName = "Boxes"
    Case wzBANNER
    strATName = "Banner"
    Case wzJAZZY
    strATName = "Jazzy"
    End Select
    strATName = strATName & CStr(Abs(formWizard.optLandscape.Value))
    strATName = strATName & CStr(Abs(formWizard.optPictureNo.Value))
    StrBuildAutoTextName = strATName
    BuildAutoTextName_Exit:
    Exit Function
    BuildAutoTextName_Error:
    StrBuildAutoTextName = ""
    Resume BuildAutoTextName_Exit
    End Function
    'displays a tip during post-wizard options
    'assumes that Assistant is present since it is called from post-wizard balloon
    Private Sub DisplayTip(strTip As String)
    Dim objBlnTip As Balloon
    On Error GoTo FatalError
    Set objBlnTip = Assistant.NewBalloon
    With objBlnTip
    .Mode = msoModeModal
    .Heading = strWizName
    .Text = strTip
    .Button = msoButtonSetOK
    End With
    objBlnTip.Show
    If Assistant.BalloonError <> msoBalloonErrorNone Then GoTo FatalError
    Exit Sub
    FatalError:
    Err.Clear
    End Sub
    The above is from the module labelled "Calendar".  I don't believe anything was altered in the module labelled "Common", but please let me know that I should post it.
    To recap, in this wizard file, the first day of the week is set for Monday.  So the Saturday and Sunday columns always fall as the last 2 columns in the calendar table (Sunday as first day has the 1st and last column as the ones that would need shading).
    How can that syntax be added to shade the last 2 columns in the Monday calendar wizard, and the 1st and last column for the Sunday calendar wizard and hopefully shading just those particular cells in either with numbers in them?
    Thank you!  Very much appreciated. 

    Thanks, Doug!  Works beautifully.  I tried them again this morning, really incredible!
    I'm going to keep the Monday and Sunday wizard files as separate files because I realized that I don't have the skills (or the time) to try to figure out how to modify it so the user is requested the starting day.  It'll be beyond my meager skills,
    I'm sure, especially since there are all those dialogue boxes to contend with at the wizard's start.  I was forgetting about those.  So leaving these as 2 separate files where one chooses the starting day as per the title, the Monday one for Monday
    and the other, the Sunday one, for a Sunday start day.
    However, the only difference between them at this point is that one has a "0" for Sunday and the other a "1" for Monday, at the appropriate spots in the code.  being the starting week day and the other a "1" for Monday. 
    That's it.  They're beautifully the same in the rest of the code.  And a further benefit is that only one module was touched at all for all of this, the Calendar module (leaving the one labelled "Common" untouched.
    So anyone with a calendar wizard file can just change the piece of code below (begging the group's indulgence, if I may, in posting the modified code (??):
    ' WORD 97 WIZARD
    ' Calendar Wizard Specific Code
    Option Explicit
    ' CONSTANT DECLARATIONS
    '=============================== LOCALIZATION BLOCK ===============================
    ' Localization Note: iWeekStartDay is the starting day of the week (Sun = 0, Mon = 1, ...Sat = 6)
    Public Const iWeekStartDay As Integer = 1
    ' Banter strings
    Public Const strWarnYearReq As String = "Both starting and ending years are required."
    Public Const strWarnMinExceeded As String = "The year can not be before 1900."
    Public Const strWarnMaxExceeded As String = "The year can not be after 4095."
    Public Const strWarnRangeExceeded As String = "The calendar is limited to 120 months (10 years)."
    Public Const strAppCaptionPart1 As String = "Calendar: "
    Public Const strAppCaptionPart1b As String = ""
    Public Const strAppCaptionPart2 As String = ", "
    Public Const strAppCaptionPart3 As String = " to "
    Public Const strAppCaptionPart4 As String = ", "
    ' Status messages
    Public Const strStatusIntro As String = "Creating Calendar..."
    Public Const strStatusPart1 As String = "Creating "
    Public Const strStatusPart2 As String = ", "
    Public Const strStatusPart3 As String = "..."
    ' Assistant
    Public Const strCallBackHeading As String = "Do more with the calendar?"
    'Margins for A4 size (if wizard changes pagesize to A4)
    Public Const sA4_SHORT_MARGIN As Single = 28.8
    Public Const sA4_LONG_MARGIN As Single = 57.6
    'Margins for Letter size (if wizard changes pagesize to Letter) in pts
    Public Const sLETTER_SHORT_MARGIN As Single = 36
    Public Const sLETTER_LONG_MARGIN As Single = 36
    '========== END LOCALIZATION BLOCK - DO NOT MAKE CHANGES BELOW THIS LINE ==========
    Public Const iYearMin As Integer = 1900
    Public Const iYearMax As Integer = 4095
    ' Bookmark Names - DO NOT LOCALIZE
    ' Note: No spaces allowed in bookmark names
    Public Const strBkMkMonth As String = "Month"
    Public Const strBkMkDays As String = "Days"
    Public Const strBkMkDayNames As String = "DayNames"
    Public Const strBkMkYear As String = "Year"
    ' Calendar Style Names and Constants
    Public Const wzBOXES As Integer = 0
    Public Const wzBANNER As Integer = 1
    Public Const wzJAZZY As Integer = 2
    ' Form Control
    Public Const wzPAGE_START As Integer = 0
    Public Const wzPAGE_STYLE As Integer = 1
    Public Const wzPAGE_DIRECTION As Integer = 2
    Public Const wzPAGE_MONTHS As Integer = 3
    Public Const wzPAGE_FINISH As Integer = 4
    'orientation
    Public Const iORTN_PORTRAIT As Integer = 0
    Public Const iORTN_LANDSCAPE As Integer = 1
    ' Assistant
    Public Const iMAX_PANEL As Integer = 4 ' Number of last panel in MultiPage (First=0)
    Public Const iCALL_BACK_COUNT As Integer = 3 ' Number of items in CallBackBalloon (First=1)
    'postwizard balloon document variable
    Public Const strPOST_WIZ_BLN As String = "Calendar post wizard balloon"
    ' VARIABLE DECLARATIONS
    ' General
    Public rgstrMonthName(11) As String
    Public rgstrDayName(6) As String
    Public rgiDaysInMonth(11) As String
    Public fDateError As Boolean
    Public fCheckValidity As Boolean 'if set then the dates are checked for validity
    'variables used in doc. creation
    Public str1_TO_28 As String
    Public rgsDaysHeight(2, 1, 1) As Single
    Public rgsMonthNamesHeight(2, 1, 1) As Single
    Public rgstrDaysStyle(2) As String
    Public rgstrMonthNamesStyle(2) As String
    Public strSTY_BANNER_HDG3 As String
    ' Assistant
    Public rgstrAssistantMsg(iMAX_PANEL + 1) As String
    Public rgstrCallBackMsg(iCALL_BACK_COUNT) As String
    Public rgstrCallBackTip(iCALL_BACK_COUNT) As String
    ' Page 1
    Public iCalendarStyle As Integer
    Public iSavedStyle As Integer
    ' Page 2
    ' Page 3
    ' Page 4
    Public Sub InitWizardName(fDummy As Boolean)
    strWizName = "Calendar Wizard"
    strWizLongName = strWizName
    strWizShortName = "Calendar"
    End Sub
    Public Sub InitWizardStrings(fDummy As Boolean)
    Dim i As Integer
    On Error GoTo FatalError
    '=============================== LOCALIZATION BLOCK ===============================
    ' Note: this list is indexed 0 - iMAX_PANEL
    rgstrAssistantMsg(0) = "The Calendar Wizard helps you create a monthly calendar that you can customize with pictures and events. If you want to track and be reminded of events, you should probably use Microsoft Outlook, Microsoft Schedule+, or Microsoft Exchange."
    rgstrAssistantMsg(1) = "Select the look you want for your calendar. The Jazzy style uses the Algerian font. If it is not installed on your system, copy alger.ttf from the Valupack folder on the Microsoft Office CD to your hard drive."
    rgstrAssistantMsg(2) = "If you leave room for a picture, Word will insert a placeholder picture that you can replace with any picture you want."
    rgstrAssistantMsg(3) = "Your calendar can start on any month, and you can make your calendar shorter than or longer than 12 months. Each month will appear on a different page."
    rgstrAssistantMsg(4) = "To change any settings, click Back."
    ' Note: change constant iCALL_BACK_COUNT if number of items in list changes
    rgstrCallBackMsg(0) = "Add, remove, or replace a picture"
    rgstrCallBackMsg(1) = "Enter information into the calendar"
    rgstrCallBackMsg(2) = "Get Help on Something Else..."
    rgstrCallBackTip(0) = "To remove a picture, click on it and then press Delete. To add a picture, click where you want to insert the picture, point to Picture on the Insert menu, and then click From File."
    rgstrCallBackTip(1) = "To enter information, click where you want to insert the text and start typing. To move between different dates in the calendar, press Tab to move forward or press Shift+Tab to move to the previous date."
    'Load Month Name array
    rgstrMonthName(0) = "January"
    rgstrMonthName(1) = "February"
    rgstrMonthName(2) = "March"
    rgstrMonthName(3) = "April"
    rgstrMonthName(4) = "May"
    rgstrMonthName(5) = "June"
    rgstrMonthName(6) = "July"
    rgstrMonthName(7) = "August"
    rgstrMonthName(8) = "September"
    rgstrMonthName(9) = "October"
    rgstrMonthName(10) = "November"
    rgstrMonthName(11) = "December"
    'Load Day Name array LOCALIZATION NOTE: DO NOT CHANGE THE ORDER IN WHICH THESE APPEAR!
    ' TO CHANGE THE WEEK START DAY, CHANGE THE CONSTANT iWeekStartDay
    rgstrDayName(0) = "Sun"
    rgstrDayName(1) = "Mon"
    rgstrDayName(2) = "Tue"
    rgstrDayName(3) = "Wed"
    rgstrDayName(4) = "Thu"
    rgstrDayName(5) = "Fri"
    rgstrDayName(6) = "Sat"
    'Load Days In Month array
    rgiDaysInMonth(0) = 31
    rgiDaysInMonth(1) = 28 'Will not be used - must be calculated for leap year accuracy
    rgiDaysInMonth(2) = 31
    rgiDaysInMonth(3) = 30
    rgiDaysInMonth(4) = 31
    rgiDaysInMonth(5) = 30
    rgiDaysInMonth(6) = 31
    rgiDaysInMonth(7) = 31
    rgiDaysInMonth(8) = 30
    rgiDaysInMonth(9) = 31
    rgiDaysInMonth(10) = 30
    rgiDaysInMonth(11) = 31
    rgstrDaysStyle(wzBOXES) = "Boxes"
    rgstrDaysStyle(wzBANNER) = "Banner"
    rgstrDaysStyle(wzJAZZY) = "Jazzy"
    rgstrMonthNamesStyle(wzBOXES) = "Boxes Heading2"
    rgstrMonthNamesStyle(wzBANNER) = "Banner Heading2"
    'we dont set the style for month names in Jazzy style
    'the Banner style landscape calendar with picture uses Banner Heading3 style for month names
    strSTY_BANNER_HDG3 = "Banner Heading3"
    rgsMonthNamesHeight(wzBOXES, iORTN_PORTRAIT, 0) = 55
    rgsMonthNamesHeight(wzBOXES, iORTN_PORTRAIT, 1) = 55
    rgsMonthNamesHeight(wzBOXES, iORTN_LANDSCAPE, 0) = 36
    rgsMonthNamesHeight(wzBOXES, iORTN_LANDSCAPE, 1) = 36
    rgsDaysHeight(wzBOXES, iORTN_PORTRAIT, 0) = 56
    rgsDaysHeight(wzBOXES, iORTN_PORTRAIT, 1) = 102
    rgsDaysHeight(wzBOXES, iORTN_LANDSCAPE, 0) = 72
    rgsDaysHeight(wzBOXES, iORTN_LANDSCAPE, 1) = 71
    rgsMonthNamesHeight(wzBANNER, iORTN_PORTRAIT, 0) = 60
    rgsMonthNamesHeight(wzBANNER, iORTN_PORTRAIT, 1) = 60
    rgsMonthNamesHeight(wzBANNER, iORTN_LANDSCAPE, 0) = 55
    rgsMonthNamesHeight(wzBANNER, iORTN_LANDSCAPE, 1) = 51
    rgsDaysHeight(wzBANNER, iORTN_PORTRAIT, 0) = 64
    rgsDaysHeight(wzBANNER, iORTN_PORTRAIT, 1) = 110
    rgsDaysHeight(wzBANNER, iORTN_LANDSCAPE, 0) = 81
    rgsDaysHeight(wzBANNER, iORTN_LANDSCAPE, 1) = 81
    rgsMonthNamesHeight(wzJAZZY, iORTN_PORTRAIT, 0) = 73
    rgsMonthNamesHeight(wzJAZZY, iORTN_PORTRAIT, 1) = 73
    rgsMonthNamesHeight(wzJAZZY, iORTN_LANDSCAPE, 0) = 62
    rgsMonthNamesHeight(wzJAZZY, iORTN_LANDSCAPE, 1) = 59
    rgsDaysHeight(wzJAZZY, iORTN_PORTRAIT, 0) = 40.5
    rgsDaysHeight(wzJAZZY, iORTN_PORTRAIT, 1) = 81.8
    rgsDaysHeight(wzJAZZY, iORTN_LANDSCAPE, 0) = 58.2
    rgsDaysHeight(wzJAZZY, iORTN_LANDSCAPE, 1) = 57.5
    str1_TO_28 = ""
    For i = 1 To 28
    str1_TO_28 = str1_TO_28 & CStr(i) & vbTab
    Next i
    'strip off last tab
    str1_TO_28 = Left$(str1_TO_28, Len(str1_TO_28) - 1)
    ' Location in registry DO NOT LOCALIZE
    strRegSettingsKey = strREG_SETTINGS_BASE_KEY & "Calendar Wizard"
    Exit Sub
    FatalError:
    ReportError Err
    End Sub ' InitWizardStrings
    Public Sub InitWizard(fDummy As Boolean)
    ' Global Vars
    fWizardCallBack = False
    fDateError = False
    iCurrentPanel = 0
    ' Initialize strings
    InitWizardStrings (True)
    ' Create a new instance of the form
    Set formWizard = New formWizDlg
    If formWizard Is Nothing Then GoTo FatalError
    formWizard.lblWizName1.Caption = " " & strWizLongName & " "
    Exit Sub
    FatalError:
    DisplayErrorMsg strERR_INIT_FORM
    ReportError Err
    End Sub
    ' fDummy prevents sub from appearing in Word Tools/Macro list
    Public Sub SaveDialogValues(fDummy As Boolean)
    On Error GoTo FatalError
    ' Display status
    Application.ScreenUpdating = False
    System.Cursor = wdCursorWait
    StatusBar = strSAVE_SETTINGS
    ' Assistant
    System.PrivateProfileString("", strREG_SETTINGS_BASE_KEY, strREG_ASSISTANT_TIME_STAMP) = Format$(Now, "General Date")
    StoreValPref strREG_ASSISTANT_HELP, iLocalState
    ' Page 1
    StoreValPref "iCalendarStyle", iCalendarStyle
    ' Page 2
    StoreValPref "optPortrait", formWizard.optPortrait.Value
    StoreValPref "optPictureYes", formWizard.optPictureYes.Value
    ' Page 3
    StatusBar = ""
    System.Cursor = wdCursorNormal
    fSettingsSaved = True
    Application.ScreenUpdating = True
    Exit Sub
    FatalError:
    ReportError Err
    End Sub
    Public Sub RestoreDialogValues(fDummy As Boolean)
    Dim i As Integer
    On Error GoTo FatalError
    ' Display status
    Application.ScreenUpdating = False
    StatusBar = strRST_SETTINGS
    System.Cursor = wdCursorWait
    ' Page 1
    iCalendarStyle = IRestorePref("iCalendarStyle", 0)
    Select Case iCalendarStyle
    Case wzBOXES
    formWizard.optBoxes.Value = True
    formWizard.shpShadowBoxes.Visible = True
    Case wzBANNER
    formWizard.optBanner.Value = True
    formWizard.shpShadowBanner.Visible = True
    Case wzJAZZY
    formWizard.optJazzy.Value = True
    formWizard.shpShadowJazzy.Visible = True
    Case Else
    iCalendarStyle = wzBOXES
    formWizard.optBoxes.Value = True
    formWizard.shpShadowBoxes.Visible = True
    End Select
    ' Page 2
    If FRestorePref("optPortrait", False) Then
    formWizard.optPortrait.Value = True
    formWizard.shpPortraitShadow.Visible = True
    formWizard.shpLandscapeShadow.Visible = False
    Else
    formWizard.optLandscape.Value = True
    formWizard.shpPortraitShadow.Visible = False
    formWizard.shpLandscapeShadow.Visible = True
    End If
    formWizard.optPictureYes.Value = FRestorePref("optPictureYes", False)
    ' Page 3
    formWizard.cboMonthStart.ListIndex = Month(Date) - 1
    formWizard.cboMonthEnd.ListIndex = Month(Date) - 1
    formWizard.txtYearStart = Year(Date)
    formWizard.txtYearEnd = Year(Date)
    fCheckValidity = False
    StatusBar = ""
    System.Cursor = wdCursorNormal
    fSettingsRestored = True
    Application.ScreenUpdating = True
    Exit Sub
    FatalError:
    ReportError Err
    Exit Sub
    End Sub ' RestoreDialogValues
    ' fDummy prevents sub from appearing in Word Tools/Macro list
    Public Sub CreateNewDoc(fDummy As Boolean)
    Dim iMonthCurr As Integer
    Dim iYearCurr As Integer
    Dim lYearMonthCurr As Long
    Dim lYearMonthEnd As Long
    Dim iDaysCnt As Integer
    Dim iDaysInMonth As Integer
    Dim iCnt As Integer
    Dim strAutoTextName As String
    Dim objTableDays As Table
    Dim iRow As Integer
    Dim iCol As Integer
    Dim ocboMonthStart As ComboBox
    Dim ocboMonthEnd As ComboBox
    Dim otxtYearStart As TextBox
    Dim otxtYearEnd As TextBox
    Dim strJazzyDayNames As String
    Dim objFps As PageSetup
    Dim objRng As Range
    Dim sShortMargin As Single
    Dim sLongMargin As Single
    Dim strCaptionTxt As String
    Dim iOrientation As Integer
    Dim iNoPicture As Integer
    Dim i As Integer
    Dim strDays As String
    On Error GoTo CreateNewDoc_Error
    System.Cursor = wdCursorWait
    Set ocboMonthStart = formWizard.cboMonthStart
    Set ocboMonthEnd = formWizard.cboMonthEnd
    Set otxtYearStart = formWizard.txtYearStart
    Set otxtYearEnd = formWizard.txtYearEnd
    With Application
    .ScreenUpdating = False
    .StatusBar = strStatusIntro
    End With
    Set objActiveRange = ActiveDocument.Content
    objActiveRange.Collapse wdCollapseEnd
    If (formWizard.optPortrait) Then
    iOrientation = iORTN_PORTRAIT
    Else
    iOrientation = iORTN_LANDSCAPE
    End If
    iNoPicture = Abs(formWizard.optPictureNo.Value)
    'the margins have to be changed if papersize was changed in Common
    If (fChangeToA4 Or fChangeToLetter) Then
    Set objFps = ActiveDocument.PageSetup
    If iOrientation = iORTN_LANDSCAPE Then
    objFps.Orientation = wdOrientLandscape 'setting paper size in common
    'resets orientation to Portrait
    If fChangeToA4 Then
    sShortMargin = sA4_SHORT_MARGIN
    sLongMargin = sA4_LONG_MARGIN
    Else
    sShortMargin = sLETTER_SHORT_MARGIN
    sLongMargin = sLETTER_LONG_MARGIN
    End If
    Else
    If fChangeToA4 Then
    sShortMargin = sA4_LONG_MARGIN
    sLongMargin = sA4_SHORT_MARGIN
    Else
    sShortMargin = sLETTER_LONG_MARGIN
    sLongMargin = sLETTER_SHORT_MARGIN
    End If
    End If
    With objFps
    .TopMargin = sShortMargin
    .BottomMargin = sShortMargin
    .LeftMargin = sLongMargin
    .RightMargin = sLongMargin
    End With
    End If
    strAutoTextName = StrBuildAutoTextName(True)
    objWizTemplate.AutoTextEntries(strAutoTextName).Insert objActiveRange, True
    If iCalendarStyle <> wzJAZZY Then
    Set objActiveRange = ActiveDocument.Bookmarks(strBkMkDays).Range
    Else
    Set objActiveRange = ActiveDocument.Bookmarks(strBkMkDayNames).Range
    End If
    strJazzyDayNames = ""
    For iCnt = iWeekStartDay To 6
    strJazzyDayNames = strJazzyDayNames & rgstrDayName(iCnt) & vbTab
    Next
    For iCnt = 0 To (iWeekStartDay - 1)
    strJazzyDayNames = strJazzyDayNames & rgstrDayName(iCnt) & vbTab
    Next
    'Strip trailing Tab
    strJazzyDayNames = Left$(strJazzyDayNames, Len(strJazzyDayNames) - 1)
    objActiveRange.Text = strJazzyDayNames
    If iCalendarStyle <> wzJAZZY Then
    If (iCalendarStyle = wzBANNER) And (iOrientation = iORTN_LANDSCAPE) And (iNoPicture = 0) Then
    objActiveRange.Style = strSTY_BANNER_HDG3
    Else
    objActiveRange.Style = rgstrMonthNamesStyle(iCalendarStyle)
    End If
    objActiveRange.Select
    Selection.ConvertToTable wdSeparateByTabs, 1, 7
    End If
    Set objActiveRange = ActiveDocument.Content
    objActiveRange.Copy
    iMonthCurr = CInt(ocboMonthStart.ListIndex) + 1
    iYearCurr = CInt(otxtYearStart.Text)
    lYearMonthCurr = (CLng(iYearCurr) * 100) + CLng(iMonthCurr)
    lYearMonthEnd = (CLng(otxtYearEnd.Text) * 100) + (CLng(ocboMonthEnd.ListIndex) + 1)
    'Create each month of the calendar
    Do Until lYearMonthCurr > lYearMonthEnd
    Application.StatusBar = strStatusPart1 & rgstrMonthName(iMonthCurr - 1) & strStatusPart2 & CStr(iYearCurr) & strStatusPart3
    'Set month
    If iCalendarStyle = wzJAZZY Then
    ActiveDocument.Bookmarks(strBkMkMonth).Range.Text = CStr(iMonthCurr)
    Else
    ActiveDocument.Bookmarks(strBkMkMonth).Range.Text = rgstrMonthName(iMonthCurr - 1)
    End If
    'Set year
    ActiveDocument.Bookmarks(strBkMkYear).Range.Text = CStr(iYearCurr)
    'Determine number of days in month
    If iMonthCurr = 2 Then
    iDaysInMonth = DateSerial(iYearCurr, 3, 1) - DateSerial(iYearCurr, 2, 1)
    Else
    iDaysInMonth = rgiDaysInMonth(iMonthCurr - 1)
    End If
    'Set Column of First Day Of Month by using Weekday function. The 8th
    'is used (to start with) instead of the 1st to allow for offsetting (via
    'iWeekStartDay) for localization since the 8th will always fall on the
    'same day (of the week) as the 1st.
    iCol = WeekDay(DateSerial(iYearCurr, iMonthCurr, 8 - iWeekStartDay))
    ActiveDocument.Bookmarks(strBkMkDays).Select
    If iCalendarStyle <> wzJAZZY Then _
    Selection.MoveDown wdLine 'the bookmark is now in the first cell of the table
    strDays = ""
    For i = 1 To iCol - 1
    strDays = strDays & vbTab
    Next i
    strDays = strDays & str1_TO_28
    For i = 29 To iDaysInMonth
    strDays = strDays & vbTab & CStr(i)
    Next i
    'to get a 6 * 7 table always
    For i = iDaysInMonth + iCol - 1 To 41
    strDays = strDays & vbTab
    Next i
    Set objActiveRange = Selection.Range
    objActiveRange.Text = strDays
    objActiveRange.Style = rgstrDaysStyle(iCalendarStyle) & iOrientation & iNoPicture
    objActiveRange.Select
    Selection.ConvertToTable wdSeparateByTabs, 6, 7
    Selection.Cells.Height = rgsDaysHeight(iCalendarStyle, iOrientation, iNoPicture)
    Selection.Tables(1).Rows(1).Height = rgsMonthNamesHeight(iCalendarStyle, iOrientation, iNoPicture)
    '================================================================================================================================
    ' Tu.Mar.11.2015; 17h56 - MVPEdits/MyEdits
    ' SATURDAY and SUNDAY cells get shaded in the table (no matter where they fall).
    ' Doug Robbins - Word MVP; https://social.msdn.microsoft.com/Forums/office/en-US/6ab55be0-adc0-4e37-9565-8cdff089d20a/shading-certain-columns-depending-on-start-day-of-week?forum=worddev
    Dim j As Long
    With Selection.Tables(1)
    If iWeekStartDay = 1 Then
    For i = 6 To 7
    With .Columns(i)
    ' For j = 1 To .Cells.Count ' 1 = Cells with SAT and SUN text are shaded
    For j = 2 To .Cells.Count ' 2 = Cells with SAT and SUN text are _ NOT_ shaded
    With .Cells(j).Range
    If Len(.Text) > 2 Then
    .Shading.BackgroundPatternColor = wdColorGray20 'wdColorGray_ _ _ (the number following gives the shade of gray, i.e., wdColorGray20 vs. wdColorGray50)
    End If
    End With
    Next j
    End With
    Next i
    Else
    For i = 1 To 7 Step 6
    With .Columns(i)
    ' For j = 1 To .Cells.Count ' 1 = Cells with SAT and SUN text are shaded
    For j = 2 To .Cells.Count ' 2 = Cells with SAT and SUN text are _ NOT_ shaded
    With .Cells(j).Range
    If Len(.Text) > 2 Then
    .Shading.BackgroundPatternColor = wdColorGray20 'wdColorGray_ _ _ (the number following gives the shade of gray, i.e., wdColorGray20 vs. wdColorGray50)
    End If
    End With
    Next j
    End With
    Next i
    End If
    End With
    '================================================================================================================================
    '================================================================================================================================
    ' Mn.Sept.01.2014; 08h21 - MVPEdits/MyEdits
    ' TABLE GRIDLINES CODE: Automatically creates printable gridlines in the table.
    With Selection.Tables(1).Borders
    .InsideLineStyle = wdLineStyleSingle
    .InsideLineWidth = wdLineWidth100pt
    .InsideColorIndex = wdAuto
    .OutsideLineStyle = wdLineStyleSingle
    .OutsideLineWidth = wdLineWidth100pt
    End With
    '================================================================================================================================
    ActiveDocument.Bookmarks(strBkMkDays).Delete
    'Advance the current month
    If iMonthCurr = 12 Then
    iMonthCurr = 1
    iYearCurr = iYearCurr + 1
    Else
    iMonthCurr = iMonthCurr + 1
    End If
    lYearMonthCurr = (CLng(iYearCurr) * 100) + CLng(iMonthCurr)
    If lYearMonthCurr <= lYearMonthEnd Then
    Set objActiveRange = ActiveDocument.Content
    objActiveRange.Collapse wdCollapseEnd
    'Insert Page Break
    objActiveRange.InsertBreak wdPageBreak
    Set objActiveRange = ActiveDocument.Content
    objActiveRange.Collapse wdCollapseEnd
    objActiveRange.Paste
    End If
    Loop
    Application.StatusBar = ""
    strCaptionTxt = ""
    'Set Application caption
    strCaptionTxt = " - " & strAppCaptionPart1 & strAppCaptionPart1b & ocboMonthStart.Text & strAppCaptionPart2 & otxtYearStart.Text & strAppCaptionPart3 & ocboMonthEnd.Text & strAppCaptionPart4 & otxtYearEnd.Text
    ActiveDocument.UndoClear
    With ActiveWindow
    .Caption = .Caption & strCaptionTxt
    With .View
    .TableGridlines = False
    .ShowDrawings = True
    End With
    End With
    'Position cursor at the top
    Selection.HomeKey wdStory
    CreateNewDoc_Exit:
    Exit Sub
    CreateNewDoc_Error:
    ReportError Err
    GoTo CreateNewDoc_Exit
    End Sub ' CreateNewDoc
    Public Sub InitCallBack(fDummy As Boolean)
    Dim i As Integer
    Dim objCallBackLabels As BalloonLabels
    On Error GoTo ErrorCallBack
    If Not (fBlnInitialized) Then
    Set objPostWizBln = Assistant.NewBalloon
    fBlnInitialized = True
    With objPostWizBln
    .Heading = strCallBackHeading
    .Mode = msoModeModeless
    .Button = msoButtonSetCancel
    .BalloonType = msoBalloonTypeButtons
    .Callback = "Calendar.fnCallBack"
    End With
    Set objCallBackLabels = objPostWizBln.Labels
    objCallBackLabels.Count = iCALL_BACK_COUNT
    For i = 1 To iCALL_BACK_COUNT
    objCallBackLabels.Item(i).Text = rgstrCallBackMsg(i - 1)
    Next i
    End If
    objPostWizBln.Show
    If (Assistant.BalloonError) Then GoTo ErrorCallBack
    fPostWizBlnOpen = True
    Set objDocBln = ActiveDocument
    Set clsBln.app = Application
    ActiveDocument.Variables.Add strPOST_WIZ_BLN, "1"
    Exit Sub
    ErrorCallBack:
    DisplayErrorMsg strERR_INIT_CALL_BACK
    fPostWizBlnOpen = False
    Set objDocBln = ActiveDocument
    Set clsBln.app = Application
    ActiveDocument.Variables.Add strPOST_WIZ_BLN, "0"
    End Sub
    Public Function fnCallBack(objBln As Balloon, iBtn As Integer, lPrivate As Long)
    On Error GoTo ErrorCallBack
    Select Case iBtn
    Case Is < 1 'Exit
    objBln.Close
    fPostWizBlnOpen = False
    ActiveDocument.Variables(strPOST_WIZ_BLN).Value = "0"
    RestoreAssistant (True)
    Case 1 'Remove existing picture
    DisplayTip rgstrCallBackTip(0)
    Case 2 'Enter information into calendar
    DisplayTip rgstrCallBackTip(1)
    Case 3 ' Get help
    Assistant.Help
    End Select
    Exit Function
    ErrorCallBack:
    DisplayErrorMsg Err.Description
    End Function
    Private Function StrBuildAutoTextName(fDummy As Boolean) As String
    Dim strATName As String
    On Error GoTo BuildAutoTextName_Error
    'Select base AutoText Name NOTE: DO NOT LOCALIZE
    Select Case iCalendarStyle
    Case wzBOXES
    strATName = "Boxes"
    Case wzBANNER
    strATName = "Banner"
    Case wzJAZZY
    strATName = "Jazzy"
    End Select
    strATName = strATName & CStr(Abs(formWizard.optLandscape.Value))
    strATName = strATName & CStr(Abs(formWizard.optPictureNo.Value))
    StrBuildAutoTextName = strATName
    BuildAutoTextName_Exit:
    Exit Function
    BuildAutoTextName_Error:
    StrBuildAutoTextName = ""
    Resume BuildAutoTextName_Exit
    End Function
    'displays a tip during post-wizard options
    'assumes that Assistant is present since it is called from post-wizard balloon
    Private Sub DisplayTip(strTip As String)
    Dim objBlnTip As Balloon
    On Error GoTo FatalError
    Set objBlnTip = Assistant.NewBalloon
    With objBlnTip
    .Mode = msoModeModal
    .Heading = strWizName
    .Text = strTip
    .Button = msoButtonSetOK
    End With
    objBlnTip.Show
    If Assistant.BalloonError <> msoBalloonErrorNone Then GoTo FatalError
    Exit Sub
    FatalError:
    Err.Clear
    End Sub
    Thank you once again for all your help!!  Very much appreciated.  :D

  • Open multiple images as one layered file

    Hi!
    I'm doing a gif animation in PS and have five pictures that I need to have as layers on the top of each other. At the moment I'm opening them and copy-pasting them on one of the images to make layers, but this is slow and sometimes confusing with all the images open at the same time.
    Is there any way to just tell Photoshop to open all the files so that they are automatically stacked on the top of each other as layers? Please tell me this is possible!
    Any help would be highly appreciated! Thanks!

    Yes this a CS3 feature, although I remember it being avaiable as a separate download somewhere - it works w/CS2 (and 7 I think).<br />I'll copy it below, save it in Notepad, name it "Load Files into Stack.jsx" (no quotes) and put it in C:\Program Files\Adobe\Adobe Photoshop CS2\Presets\Scripts\<br /><br />// (c) Copyright 2006.  Adobe Systems, Incorporated.  All rights reserved.<br /><br />/*<br />@@@BUILDINFO@@@ Load Files into Stack.jsx 1.0.0.0<br />*/<br /><br />//<br />// Load Files into Stack.jsx - does just that.<br />//<br /><br />/*<br /><br />// BEGIN__HARVEST_EXCEPTION_ZSTRING<br /><br /><javascriptresource><br /><name>$$$/JavaScripts/LoadFilesintoStack/Menu=Load Files into Stack...</name><br /><about>$$$/JavaScripts/LoadFilesintoStack/About=Load Files into Stack ^r^rCopyright 2006-2007 Adobe Systems Incorporated. All rights reserved.^r^rLoads multiple files into a stack object.</about><br /></javascriptresource><br /><br />// END__HARVEST_EXCEPTION_ZSTRING<br /><br />*/<br /><br />// debug level: 0-2 (0:disable, 1:break on error, 2:break at beginning)<br />//$.level = (Window.version.search("d") != -1) ? 1 : 0;     // This chokes bridge<br />$.level = 0;<br /><br />// debugger; // launch debugger on next line<br /><br />// on localized builds we pull the $$$/Strings from a .dat file<br />$.localize = true;<br /><br />// Put header files in a "Stack Scripts Only" folder.  The "...Only" tells<br />// PS not to place it in the menu.  For that reason, we do -not- localize that<br />// portion of the folder name.<br />var g_StackScriptFolderPath = app.path + "/"+ localize("$$$/ScriptingSupport/InstalledScripts=Presets/Scripts") + "/"<br />                                                  + localize("$$$/Private/LoadStack/StackScriptOnly=Stack Scripts Only/");<br /><br />$.evalFile(g_StackScriptFolderPath + "LatteUI.jsx");<br /><br />$.evalFile(g_StackScriptFolderPath + "StackSupport.jsx");<br /><br />$.evalFile(g_StackScriptFolderPath + "CreateImageStack.jsx");<br /><br />/************************************************************/<br />// loadLayers routines<br /><br />loadLayers = new ImageStackCreator( localize("$$$/AdobePlugin/Shared/LoadStack/Process/Name=Load Layers"),<br />                                                    localize('$$$/AdobePlugin/Shared/LoadStack/Auto/untitled=Untitled' ) );<br /><br />// LoadLayers is less restrictive than MergeToHDR<br />loadLayers.mustBeSameSize               = false;     // Images' height & width don't need to match<br />loadLayers.mustBeUnmodifiedRaw          = false;     // Exposure adjustements in Camera raw are allowed<br />loadLayers.mustNotBe32Bit               = false;     // 32 bit images<br />loadLayers.createSmartObject          = false;     // If true, option to create smart object is checked.<br /><br />// Add hooks to read the value of the "Create Smart Object" checkbox<br />loadLayers.customDialogSetup = function( w )<br />{<br />     w.findControl('_createSO').value = loadLayers.createSmartObject;<br />     if (! app.featureEnabled( localize( "$$$/private/ExtendedImageStackCreation=ImageStack Creation" ) ))<br />          w.findControl('_createSO').hide();<br />}<br /><br />loadLayers.customDialogFunction = function( w )<br />{<br />     loadLayers.createSmartObject = w.findControl('_createSO').value;<br />}<br /><br />// Override the default to use "Auto" alignment.<br />loadLayers.alignStack = function( stackDoc )<br />{<br />     selectAllLayers(stackDoc, 2);<br />     alignLayersByContent( "Auto" );<br />}<br /><br />loadLayers.stackLayers = function()<br />{<br />     var result, i, stackDoc = null;<br />     <br />     stackDoc = this.loadStackLayers();<br />     if (! stackDoc)<br />          return;<br />     <br />     // Nuke the "destination" layer that got created (M2HDR holdover)<br />     stackDoc.layers[this.pluginName].remove();<br />     <br />     // Stack 'em up.<br />     if (this.createSmartObject)<br />     {<br />          selectAllLayers( stackDoc );<br />          executeAction( knewPlacedLayerStr, new ActionDescriptor(), DialogModes.NO );<br />     }<br />}<br /><br />// "Main" execution of Merge to HDR<br />loadLayers.doInteractiveLoad = function ()<br />{<br />     this.getFilesFromBridgeOrDialog( localize("$$$/Private/LoadStack/LoadLayersexv=LoadLayers.exv") );<br /><br />     if (this.stackElements)<br />          this.stackLayers();<br />}<br /><br />loadLayers.intoStack = function(filelist, alignFlag)<br />{<br />     if (typeof(alignFlag) == 'boolean')<br />          loadLayers.useAlignment = alignFlag;<br />          <br />     if (filelist.length < 2)<br />     {<br />          alert(localize("$$$/AdobeScripts/Shared/LoadLayers/AtLeast2=At least two files must be selected to create a stack."), this.pluginName, true );<br />          return;<br />     }<br />     var j;<br />     this.stackElements = new Array();<br />     for (j in filelist)<br />     {<br />          var f = filelist[j];<br />          this.stackElements.push( new StackElement( (typeof(f) == 'string') ? File(f) : f ) );<br />     }<br />          <br />     if (this.stackElements.length > 1)<br />          this.mergeStackElements();<br />}<br /><br />if (typeof(loadLayersFromScript) == 'undefined')<br />     loadLayers.doInteractiveLoad();

  • Photoshop Cs 4 Image Processor

    Unable to use image processor feature in CS 4. Error message indicates "Cannot find javascript plug-in. This feature was working just fine until a few weeks ago. Nothing unusual has changed. Thanks

    the folder must have moved or something...
    here it is for now copy it to ... applications/adobe photoshop cs4/presets/scripts : and it will be a good time to see if that folder is even there.
    Regards
    G
    // (c) Copyright 2006-2007.  Adobe Systems, Incorporated.  All rights reserved.
    // Photomerge in ExtendScript.
    // Translated from the original C++ automation & filter plugins
    // John Peterson, Adobe Systems, 2006
    // Adobe Patent or Adobe Patent Pending Invention Included Within this File
    @@@BUILDINFO@@@ Photomerge.jsx 3.0.0.1
    // BEGIN__HARVEST_EXCEPTION_ZSTRING
    <javascriptresource>
    <name>$$$/JavaScripts/Photomerge/Menu=Photomerge...</name>
    <about>$$$/JavaScripts/Photomerge/About=Photomerge^r^rCopyright 2006-2008 Adobe Systems Incorporated. All rights reserved.^r^rCombines several photographs into one continuous image.</about>
    <menu>automate</menu>
    </javascriptresource>
    // END__HARVEST_EXCEPTION_ZSTRING
    // on localized builds we pull the $$$/Strings from a .dat file
    $.localize = true;
    // Put header files in a "Stack Scripts Only" folder.  The "...Only" tells
    // PS not to place it in the menu.  For that reason, we do -not- localize that
    // portion of the folder name.
    var g_StackScriptFolderPath = app.path + "/"+ localize("$$$/ScriptingSupport/InstalledScripts=Presets/Scripts") + "/"
                                            + localize("$$$/Private/Exposuremerge/StackScriptOnly=Stack Scripts Only/");
    $.evalFile(g_StackScriptFolderPath + "LatteUI.jsx");
    $.evalFile(g_StackScriptFolderPath + "StackSupport.jsx");
    $.evalFile(g_StackScriptFolderPath + "CreateImageStack.jsx");
    $.evalFile(g_StackScriptFolderPath + "Geometry.jsx");
    $.evalFile(g_StackScriptFolderPath + "PolyClip.jsx");
    // debug level: 0-2 (0:disable, 1:break on error, 2:break at beginning)
    // Must leave at zero, otherwise trapping gFileFromBridge fails on QA's debug builds.
    $.level = 0; // (Window.version.search("d") != -1) ? 1 : 0;
    // debugger; // launch debugger on next line
    if (typeof(PMDebug) == 'undefined')
        var PMDebug = false;
    // photomerge routines
    // Debug - write the trapezoid in Matlab format
    function dumpTrap( name, corners )
        var i;
        if (! PMDebug) return;
        $.write( name + "= [" );
        for (i in corners)
            $.write( ((i > 0) ? "; " : "" ) + corners[i].fX + " " + corners[i].fY );
        $.writeln( "];");
    StackElement.prototype.dumpMLCorners = function()
        // Weed out file suffix (chokes matlab)
        dumpTrap( this.fName.match(/([^.]+)/)[1], this.fCorners );
    // Set the fCorners of the layer to the bounds of the Photoshop layer.
    StackElement.prototype.setCornersToLayerBounds = function( stackDoc )
        if (typeof(stackDoc) == "undefined")
            stackDoc = app.activeDocument;
        var bounds = stackDoc.layers[this.fName].bounds;
        this.fCorners = new Array();
        this.fCorners[0] = new TPoint( bounds[0].as("px"), bounds[1].as("px") );
        this.fCorners[2] = new TPoint( bounds[2].as("px"), bounds[3].as("px") );
        this.fCorners[1] = new TPoint( this.fCorners[2].fX, this.fCorners[0].fY );
        this.fCorners[3] = new TPoint( this.fCorners[0].fX, this.fCorners[2].fY );
    // Add the corner data to the string of per-stackElement information
    // that gets passed to the filter plugin
    StackElement.prototype.addPieceData = function()
        if (typeof(this.fCorners) != "undefined")
            // Add corners in place of trailing '\n'
            this.fString = this.fString.slice(0,-1) + "fCorners=";
            for (j = 0; j < 4; j++)
                this.fString += " " + this.fCorners[j].fX.toString() + " " + this.fCorners[j].fY.toString();
            this.fString += "\t";
            if (typeof(this.fScale) != "undefined")
                this.fString += ("fScale=" + this.fScale.toString() + "\t");
            if ((typeof(this.fConnectedTo) != "undefined") && this.fConnectedTo)
                this.fString += "fConnectedTo=" + this.fConnectedTo.fLayerID + "\t";
            if (typeof(this.fLayerID) != "undefined")
                this.fString += "fLayerID=" + this.fLayerID.toString() + "\t";
            this.fString += "\n";
        else
            debugger;    // Corner data missing!
    StackElement.prototype.overlapArea = function( other )
        if (other == this)
            return TPoint.polygonArea( this.fCorners );
        var overlapBounds = TRect.intersection( this.fBoundsCache, other.fBoundsCache );
        if (overlapBounds.isEmpty())
            return 0.0;
        var clipPoly = TPoint.intersectConvexPolygons( this.fCorners, other.fCorners );
        if (! clipPoly)
            return 0.0;
        else return TPoint.polygonArea( clipPoly );
    // Find the points where the two quadrilaterals intersect (yes, eight is a theoretical max)
    // Note situations where one piece intersects the same edge twice - special
    // case handled by SoftEdgeBlend
    StackElement.prototype.findQuadIntersections = function( other, intersections )
        var i, j;
        var curIntersections, numIntersections = 0;
        var innerEdgeIntersections = [ 0, 0, 0, 0 ];
        var outerEdgeIntersections = [ 0, 0, 0, 0 ];
        var thisEdge = false;
        var otherEdge = false;
        for (i = 0; i < 4; i++)
            var eb0 = other.fCorners[i];
            var eb1 = other.fCorners[(i + 1) > 3 ? 0 : i + 1];
            curIntersections = numIntersections;
            for (j = 0; j < 4; j++)
                var ed0 = this.fCorners[j];
                var ed1 = this.fCorners[(j + 1) > 3 ? 0 : j + 1];
                var cross = TPoint.lineSegmentIntersect( eb0, eb1, ed0, ed1 );
                if (cross != TPoint.kInfinite)
                    intersections[numIntersections++] = cross;
                    innerEdgeIntersections[j]++;
            outerEdgeIntersections[i] = numIntersections - curIntersections;
        if (numIntersections == 2)
            for (i = 0; i < 4; i++)
                if (innerEdgeIntersections[i] == 2) thisEdge = true;
                if (outerEdgeIntersections[i] == 2) otherEdge = true;
        return {"numIntersections":numIntersections, "thisEdge":thisEdge, "otherEdge":otherEdge};
    // Look for a point of this that's inside the corners of other.
    StackElement.prototype.findSingleInsidePoint = function( other )
        var i;
        var result = new Object();
        result.numFound = 0;
        for (i = 0; i < 4; i++)
            if (this.fCorners[i].pointInQuad( other.fCorners ))
                result.numFound++;
                result.insidePt = this.fCorners[i];
        return result;
    // "Adobe patent application tracking # B349, entitled 'Method and apparatus for Layer-based Panorama Adjustment and Editing', inventor: John Peterson"
    // Because we're dealing with quads, we can't use the simple scheme
    // to generate blend rects that the rectangles use - black stuff
    // from the rects will seep in. So instead, we use various heuristics to
    // figure out how the quads themselves intersect.  This isn't too hard
    // when there's just two intersection points (usual case), but there are
    // some pathological cases where there are many more intersections (the octogon
    // from one square 45 deg. off from another is the classic example).          
    StackElement.prototype.softEdgeBlend = function( other, blendRad )
        var i, j;
        var intersections = new Array();    // Worst case is a square inside a 45 degree rot square
        // If there's no distortion, do the blend strictly on the rectangles
    /*    if ((!IsQuadMapped() && !other->IsQuadMapped())
            || (IsRectilinear() && other->IsRectilinear()))
            Assert_( other->fWarpedRaster );
            fWarpedRaster->SoftEdgeBlendRasters( *(other->fWarpedRaster), blendRad );
            return;
        var bounds = this.getBounds();
        // Find the points where the two quadrilaterals intersect
        var intResult = this.findQuadIntersections( other, intersections );
        var numIntersections = intResult.numIntersections;
        var thisEdgeTwice = intResult.thisEdge;
        var otherEdgeTwice = intResult.otherEdge;
        var thisInsidePt = this.findSingleInsidePoint( other );
        var otherInsidePt = other.findSingleInsidePoint( this );
        // If quads don't overlap, just bail
        if (numIntersections == 0)
            return;
        // Handle cases where just one point overlaps the other piece
        var insidePoint;
        if (otherEdgeTwice || ((numIntersections == 2) && (thisInsidePt.numFound == 1)))
            insidePoint = thisInsidePt.insidePt;
            this.makeBlendTrapezoid( intersections[0], intersections[1], insidePoint, blendRad, false );
            return;
        if (thisEdgeTwice /*|| ((numIntersections == 2) && (otherInsidePt.numFound == 1))*/)
            insidePoint = otherInsidePt.insidePt;
            this.makeBlendTrapezoid( intersections[0], intersections[1], insidePoint, blendRad, false );
            return;
        // ...More than two corners overlap, apply heuristics to find reasonable blending
        $.bp( numIntersections > 8 );
        // If we got more than two points, pick the two furthest apart
        if (numIntersections > 2)
            var max0, max1;
            var maxDist = -1.0;
            for (i = 0; i < numIntersections - 1; i++)
                for (j = i + 1; j < numIntersections; j++)
                    var dist = (intersections[i] - intersections[j]).vectorLength();
                    if (dist > maxDist)
                        max0 = intersections[i];
                        max1 = intersections[j];
                        maxDist = dist;
            $.bp( maxDist <= -1.0 );
            intersections[0] = max0;
            intersections[1] = max1;
            numIntersections = 2;
        TPoint.clipLineToRect( bounds, intersections[0], intersections[1] );
        // The point furthest away from the cut line on the "other" image
        // is the one that we blend toward (the "dark" corner).
        var maxPoint = 0, maxDist = -1;
        for (i = 0; i < 4; i++)
            var dist = Math.abs( other.fCorners[i].distanceToLine( intersections[0], intersections[1] ) );
            if (dist > maxDist)
                maxDist = dist;
                maxPoint = i;
        this.makeBlendTrapezoid( intersections[0], intersections[1], other.fCorners[maxPoint], blendRad, true );
    // "Adobe patent application tracking # B349, entitled 'Method and apparatus for Layer-based Panorama Adjustment and Editing', inventor: John Peterson"
    // Create a layer mask that fades out from the edge0,edge1 cutline towards "insidePt"
    // If two points are inside, construct the mask fade from the edge of the image.
    //                       insidePt
    //             |            *           |
    //             |           / \          |
    //             |          /   \         |
    // insetLine-> |       +-/-----\-+      |  --
    //             |       |/       \|      |   | radius
    // baseLine->  +-------*---------*------+  --
    //                    /edge0      \edge1
    StackElement.prototype.makeBlendTrapezoid = function( edge0, edge1, insidePt, radius, useCorners )
        function sgn(x) { if (x < 0) return -1; if (x > 0) return 1; return 0; }
        function wrap4(i, next)
            i += next;
            if (i > 3) return i % 4;
            if (i < 0) return 3;
            return i;
        // Create a layer mask
        selectOneLayer( app.activeDocument, this.fName );
    //    app.activeDocument.activeLayer = app.activeDocument.layers[this.fName];    // Broken if multiple layers selected.
        createLayerMask();    // Does nothing if the layer already has a mask
        // Create vector perpendicular to edge towards insidePt
        var edgeDir = edge1 - edge0;
        var blendDir = new TPoint( -edgeDir.fY, edgeDir.fX );
        blendDir /= blendDir.vectorLength();    // Make unit length
        // Make a polygonal selection covering the area
        var dist = insidePt.distanceToLine( edge0, edge1 );
        var blendOffset = blendDir * dist;
        var blendBox;
        if (! useCorners)
            blendBox = [edge0, edge0+blendOffset, edge1+blendOffset, edge1, edge0];
        else
            // If the cutline slices across the image (two points on each side), then
            //        - Look for the edge edge0 is on
            //        - Figure out which corner is on the same side as "insdePt"
            //        - Construct the blendBox from that.
            var i, nextPtInd;
            for (i = 0; i < 4; i++)
                if (edge0.distanceToLine( this.fCorners[i], this.fCorners[wrap4(i,1)] ) < 0.0001 )
                    if (this.fCorners[i].sideOf( edge0, edge1 ) == sgn( dist ))
                        nextPtInd = -1;
                    else
                        nextPtInd = 1;
                    blendBox = new Array();
                    blendBox[0] = edge0;
                    blendBox[1] = (nextPtInd < 0) ? this.fCorners[i] : this.fCorners[i+1];
                    blendBox[2] = (nextPtInd < 0) ? this.fCorners[wrap4(i, -1)] : this.fCorners[wrap4(i, 2)];
                    blendBox[3] = edge1;
                    break;
            $.bp( i == 4 );    // Never found edge0?
        createPolygonSelection( blendBox );
        // Fill it.
        var midPoint = (edge0 + edge1) * 0.5;
        gradientFillLayerMask( midPoint, midPoint + blendDir * radius * sgn(dist) );
        app.activeDocument.selection.deselect();
    // Photomerge base class
    const kPhotomergeAdvancedBlendingFlag = app.stringIDToTypeID( "PhotomergeAdvancedBlendingFlag" );  
    photomerge = new ImageStackCreator( localize("$$$/AdobePlugin/Shared/Photomerge/Process/Name=Photomerge"),
                                              localize('$$$/AdobePlugin/Shared/Photomerge/Auto/untitled=Untitled_Panorama' ), null );
    // For now, alignment is turned OFF, because we want to
    // invoke it independantly.             
    photomerge.useAlignment            = false;    // We do the alignment, not PS
    photomerge.hideAlignment        = true;
    photomerge.mustBeSameSize        = false;
    photomerge.mustBeUnmodifiedRaw = false;
    photomerge.mustNotBe32Bit        = ! app.featureEnabled(localize("$$$/private/32BitLayersFeature=32-Bit Layers"));
    photomerge.radioButtons = ["_LOauto", "_LOperspective", "_LOcylindrical", "_LOspherical", "_LOcollage", "_LOnormal", "_LOinteractive"];
    photomerge.interactiveFlag        = false;
    photomerge.alignmentKey            = "Auto";    // Defaults to perspective
    photomerge.compositionFile        = null;
    photomerge.advancedBlending        = true;
    photomerge.lensCorrection        = false;
    photomerge.removeVignette        = false;
    try {
    // We want to steer people to the advanced blending option,
    // so have it be on by default, rather than sticky.
    //    var desc = app.getCustomOptions("PhotomergeFlags001");
    //    photomerge.advancedBlending = desc.getBoolean( kPhotomergeAdvancedBlendingFlag );
    catch (e)
    // Get the bounds of all of the stackElements.
    photomerge.getBounds = function()
        var i;
        for (i in this.stackElements)
            if (i == 0)
                this.fBounds = this.stackElements[i].getBounds();
            else
                this.fBounds.extendTo( this.stackElements[i].getBounds() );
        return this.fBounds;
    // Align selected layers by content (uses SIFT registration in Photoshop core)
    // This just returns the alignment data, it does not actually transform the layers
    // unless doTransform is true
    photomerge.getAlignmentInfo = function( stackDoc, doTransform )
        selectAllLayers(stackDoc, 1);
        const kMargin = 10;
        function offsetGroup( delta, group )
            group.bounds.offset( delta );
            var k;
            for (k = 0; k < group.layers.length; ++k)
                group.layers[k].offset( delta );
                if (doTransform)
                    selectOneLayer( stackDoc, group.layers[k].fName );
                    // Translate gets broken when document DPI isn't 72 DPI...(PR 1417264)
    //                activeDocument.activeLayer.translate( UnitValue( delta.fX, "px" ), UnitValue( delta.fY, "px" ) );   
                    translateActiveLayer( delta.fX, delta.fY );
        var i, j, alignInfo;
        var alignmentFlags = [];
        if (this.lensCorrection) alignmentFlags.push(kradialDistortStr);
        if (this.removeVignette) alignmentFlags.push(kvignetteStr);
        alignInfo = getActiveDocAlignmentInfo( this.alignmentKey, doTransform, alignmentFlags );
        // If the alignment fails completely, fake up a plan B...
        // For now, just set the images side by side.
        if (! alignInfo)
            alert(localize("$$$/AdobePlugin/Shared/Photomerge/alignbad=Some images could not be automatically aligned"));
            var xpos = 0;
            for (i in this.stackElements)
                this.stackElements[i].setCornersToSize();
                this.stackElements[i].offset( new TPoint( xpos, 0 ) );
                xpos += this.stackElements[i].getBounds().getWidth() + kMargin;
            this.fGroups = null;
        else
            var layerList = alignInfo.layerInfo;
            this.fGroups = new Array();
            for (i = 0; i < layerList.length; ++i)
                // Note we depend on stackElement's order matching
                // the document's sheet list!
                var curGroup = layerList[i].groupNum;
                if (!doTransform && (layerList[i].corners.length > 0))
                    this.stackElements[i].fCorners = layerList[i].corners;
                else
                    this.stackElements[i].setCornersToLayerBounds( stackDoc );
                this.stackElements[i].fAlignGroup = curGroup;
                this.stackElements[i].fBaseFlag = layerList[i].baseFlag;
                if (typeof(this.fGroups[curGroup]) == "undefined")
                    this.fGroups[curGroup] = new Object();
                    this.fGroups[curGroup].hasCorners = layerList[i].corners.length > 0;
                    this.fGroups[curGroup].bounds = this.stackElements[i].getBounds();
                    this.fGroups[curGroup].layers = new Array();
                    this.fGroups[curGroup].xformType = layerList[i].xformType;
                else
                    this.fGroups[curGroup].bounds.extendTo( this.stackElements[i].getBounds() );
                this.fGroups[curGroup].layers.push( this.stackElements[i] );
            // Now move the groups into  place
            // Note carefully: if the corners were given, then the group is already
            // transformed into the proper spot, and we just need to move the corners to
            // match.  So shut off moving the layer pixels around from here on out.
            offsetGroup( -this.fGroups[0].bounds.getTopLeft(), this.fGroups[0] );
            for (i = 1; i < alignInfo.numGroups; ++i)
                var spacing = Math.round(this.fGroups[i-1].bounds.getHeight() / 10.0);
                offsetGroup( -this.fGroups[i].bounds.getTopLeft() + new TPoint(0, spacing + Math.round(this.fGroups[i-1].bounds.fBottom)),
                               this.fGroups[i] );
        this.getBounds();
    // The original Photomerge plugin needs to have the "connectivity" of the
    // pieces when in perspective mode, i.e., a pieces distortion is based
    // on the distortion of the one it overlaps most.  This takes the
    // "base" piece information from the PS core and uses overlap area to
    // determine this.
    photomerge.setupConnectivity = function()
        var i;
        // See if stackElem is connected to the "base".  If "without"
        // is given, then the path to the base must not use "without"
        function isConnectedToBase( stackElem, without, dbg_count )
            if (typeof(dbg_count) == "undefined")
                dbg_count = 0;
            if (typeof(without) == "undefined")
                without = null;
            $.bp( dbg_count > 150 );    // oops, got stuck in a loop...
            if (stackElem == null)
                return false;
            if (stackElem == without)
                return false;
            if (stackElem.fConnectedTo == stackElem)
                return true;        // Already at base
            return isConnectedToBase( stackElem.fConnectedTo, without, dbg_count + 1 );
        // Initialize
        for (i in this.stackElements)
            this.stackElements[i].fBoundsCache = this.stackElements[i].getBounds();
            this.stackElements[i].fLayerID = i;
            // Bases connect to themselves.
            this.stackElements[i].fConnectedTo = this.stackElements[i].fBaseFlag ? this.stackElements[i] : null;
            this.stackElements[i].fNeighborOverlap = 0;
        // Create a connection table based on the overlap of the pieces
        var g, i, j, baseInd = -1;
        if (this.fGroups)
            for (g in this.fGroups)
                var group = this.fGroups[g];
                var connections = new Array();
                var numLayers = group.layers.length;
                // Ignore orphan images
                if (numLayers < 2)
                    group.layers[0].fBaseFlag = false;
                    group.layers[0].fConnectedTo = null;
                    continue;
                // If there's no perspective, there's no connections ("0" is kProjective in UAlignment.h)
                if (group.xformType != 0)
                    for (i = 0; i < numLayers; ++i)
                        group.layers[i].fBaseFlag = false;
                        group.layers[i].fConnectedTo = group.layers[i];
                    continue;
                for (i = 0; i < numLayers; ++i)
                    if (group.layers[i].fBaseFlag)
                        baseInd = i;
                    connections[i] = new Array();
                    group.layers[i].fGroupIndex = i;
                    if (i > 0)
                        for (j = 0; j < i; ++j)
                            connections[i][j] = group.layers[i].overlapArea( group.layers[j] );
                            connections[j][i] = connections[i][j];    // table is symentric
                $.bp( baseInd == -1 );    // Never found the base?
                // Debug - dump the connection table
        /*        for (i = 0; i < numLayers; ++i)
                    var s = "";
                    for (j = 0; j < numLayers; ++j)
                        s += ", " + Math.floor(connections[i][j]);
                    $.writeln(s);
                // Connect everything to the base that's connected.
                for (i = 0; i < numLayers; ++i)
                    if ((i != baseInd) && (connections[baseInd][i] > 0))
                        group.layers[i].fConnectedTo = group.layers[baseInd];
                        group.layers[i].fNeighborOverlap = connections[baseInd][i];
                // Walk the cconnectivity table and make sure everything is
                // "optimally" connected.
                var changes = false;
                do {
                    changes = false;
                    for (i = 0; i < numLayers; ++i)
                        if (i != baseInd)
                            var curLayer = group.layers[i];
                            for (j = 0; j < numLayers; ++j)
                                if (((j != baseInd) && (j != i))
                                    && (((connections[i][j] > curLayer.fNeighborOverlap)
                                            && isConnectedToBase( group.layers[j], curLayer ))))
                                    curLayer.fConnectedTo = group.layers[j];
                                    curLayer.fNeighborOverlap = connections[i][j];
                                    changes = true;
                } while (changes);
        //        for (i = 0; i < numLayers; ++i)
        //            $.writeln( group.layers[i].fName + " is connected to " + (group.layers[i].fConnectedTo ? group.layers[i].fConnectedTo.fName : "??") );
    photomerge.offsetStack = function( delta )
        for (i in this.stackElements)
            this.stackElements[i].offset( delta );
        this.fBounds.offset( delta );
    photomerge.scaleStack = function( s )
        for (i in this.stackElements)
            this.stackElements[i].scale( s );
        this.getBounds();
    // This gets executed before a filter plugin is invoked.  "desc"
    // allows passing parameters to the filter.
    photomerge.customPluginArguments = function( desc )
        var f = new File(this.stackElements[0].fFullName);
        var path = File.encode( f.parent.fsName ) + (File.fs == "Windows" ? "\\" : "/");
        desc.putString( app.charIDToTypeID('PMfp'), path );
        if (this.compositionFile)
            desc.putString( app.charIDToTypeID('PMrf'), this.compositionFile.fsName );
            desc.putString( app.charIDToTypeID('PMcf'), File.encode( this.compositionFile.fsName ) );
    photomerge.callInteractivePlugin = function( stackDoc )
        // Scale the results to fit the screen
    /*        var scaleFactor = 1.0, screenSize = primaryScreenDimensions() * 0.75;
        if (this.fBounds.getHeight() > this.fBounds.getWidth())
            if (this.fBounds.getHeight() > screenSize.fY)
                scaleFactor = screenSize.fY / this.fBounds.getHeight();
        else
            if (this.fBounds.getWidth() > screenSize.fX)
                scaleFactor = screenSize.fX / this.fBounds.getWidth();
        const kMaxPieceSize = 1024;        // Must match value in PhotomergeUI.cpp
        var i;
        // The old plugin insists on eight bit data.
        if (stackDoc.bitsPerChannel != BitsPerChannelType.EIGHT)
            stackDoc.bitsPerChannel = BitsPerChannelType.EIGHT;
            this.stackDepthChanged = true;
        if (this.compositionFile == null)
            // Make sure the quad coordinates coorespond to the scale used by the UI plugin
            var maxPieceSize = 0;
            for (i in this.stackElements)
                maxPieceSize = Math.max( Math.max( this.stackElements[i].fWidth, this.stackElements[i].fHeight ), maxPieceSize );
            var mipLevel = 0;
            while (maxPieceSize >> mipLevel > kMaxPieceSize)
                mipLevel++;
            var imageReduction = 1.0 / (1 << mipLevel);
            this.offsetStack( -this.fBounds.getCenter() );
            this.scaleStack( imageReduction );
            this.offsetStack( -this.fBounds.getTopLeft() );
            this.setupConnectivity();
            // Add the additional per-piece metadata to pass to the filter plugin
            for (i in this.stackElements)
                this.stackElements[i].addPieceData();
        // Make the result layer active
        app.activeDocument.activeLayer = app.activeDocument.layers[app.activeDocument.layers.length -1];
        // Note: we need an "unmodified" flag, so if no
        // changes are made we skip the data recovery step...
        var result, err;
        try {
            result = this.invokeFilterPlugin( "AdobePhotomergeUI4SCRIPT", DialogModes.ALL );
        catch (err)
            result = null;
        if (result == null)        // Cancelled / bombed out
            stackDoc.close(SaveOptions.DONOTSAVECHANGES);
            return null;
        // Extract the data from the plugin
        var modifiedPieceInfo = result.getString( app.charIDToTypeID('PSpc') ).split('\n');
        for (i in modifiedPieceInfo)
            // If we loaded a composition (.pmg) file, we won't have corners yet.
            if (typeof(this.stackElements[i].fCorners) == "undefined")
                this.stackElements[i].fCorners = new Array();
            var j, pieceData = modifiedPieceInfo[i].split('\t');
            for (j in pieceData)
                var k, pair = pieceData[j].split('=');
                if (pair[0] == 'fUsed')
                    this.stackElements[i].fUsed = eval(pair[1]);
                if (pair[0] == 'fCorners')
                    var coords = pair[1].split(/\s+/).slice(1);
                    for (k = 0; k < 4; k++)
                        this.stackElements[i].fCorners[k] = new TPoint( Number(coords[k*2]), Number(coords[k*2+1]) );
        // Remove unused photos
        for (i = 0; i < this.stackElements.length; ++i)
            if (! this.stackElements[i].fUsed)
                stackDoc.layers[(this.stackElements.length-1)-i].remove();
                this.stackElements.splice(i,1);
                i--;
        // Hey...it could happen.
        if (this.stackElements.length < 2)
            return null;
        // If we run the UI, we're restricted to an eight bit stack.
        // If the source images were higher, we need to reload the image stack.
        if (this.stackDepthChanged)
            stackDoc.close(SaveOptions.DONOTSAVECHANGES);
            stackDoc = this.loadStackLayers();
        this.getBounds();        // Update w/new corner data
        return stackDoc;
    // "Adobe patent application tracking # B349, entitled 'Method and apparatus for Layer-based Panorama Adjustment and Editing', inventor: John Peterson"
    // Use the geometry of the overlapping pieces to create
    // simple rectangular blend masks.
    photomerge.quickBlend = function()
        var i, j;
        var blendRadius = Math.round(Math.min(this.stackElements[0].fWidth, this.stackElements[0].fHeight) / 10.0);
        if (PMDebug)
            for (i in this.stackElements)
                this.stackElements[i].dumpMLCorners();
        // Set up progress bar for blending
        // The progress bar doesn't work - there's know way in ScriptUI to force it to update.
    /*    var progressWindow = latteUI( g_StackScriptFolderPath + "PMBlendingProgress.exv" );
        var num = this.stackElements.length;
        var progressBar = progressWindow.findControl('_progress');
        progressBar.maxvalue = (num * (num + 1)) / 2;
        num = 0;
        progressWindow.center();
        progressWindow.show();
        // Blend the i'th piece against the 0..i-1 pieces below it
        for (i = this.stackElements.length-1; i > 0; --i)
            for (j = i-1; j >= 0; j--)
    //            num++;
    //            progressBar.value = num; // ScriptUI bug - there's no way to force this to update.
                this.stackElements[i].softEdgeBlend( this.stackElements[j], blendRadius );
    //    progressWindow.close();
    // Wrap the advancedBlend in a try/catch so errors (i.e., user cancel)
    // just stop the blend process.
    photomerge.advancedBlend = function( stackDoc )
        try {
            selectAllLayers(stackDoc, 1);
            advancedMergeLayers();
        catch (err)
    // With the stack elements specified, this
    // portion actually creates the Panorama.
    // Returns boolean indicating success/failure
    photomerge.doPanorama = function()
        var i, stackDoc = null;
        function primaryScreenDimensions()
            var i;
            for (i in $.screens)
                if ($.screens[i].primary)
                    return new TPoint( $.screens[i].right - $.screens[i].left,
                                          $.screens[i].bottom - $.screens[i].top );
        function resizeCanvasToFitPano()
            // Extend the canvas to hold the panorama
            var w = UnitValue( photomerge.getBounds().getWidth(), "px" );
            var h = UnitValue( photomerge.getBounds().getHeight(), "px" );
            app.activeDocument.resizeCanvas( w, h, AnchorPosition.TOPLEFT );
        if (this.interactiveFlag)
            // Filter must have eight bit depth and RGB color space
            stackDoc = this.loadStackLayers( BitsPerChannelType.EIGHT );
            stackDoc.changeMode(ChangeMode.RGB);
        else
            stackDoc = this.loadStackLayers();
        if (! stackDoc)
            return false;
        // Remove spurious last layer (not needed by Photomerge)
        if (app.activeDocument.layers[app.activeDocument.layers.length-1].name == this.pluginName)
            app.activeDocument.layers[app.activeDocument.layers.length-1].remove();
        // The UI needs everything in the top left corner
        if (this.interactiveFlag)
            for (i = 0; i < stackDoc.layers.length; ++i)
                var xoff = stackDoc.layers[i].bounds[0].as("px");
                var yoff = stackDoc.layers[i].bounds[1].as("px");
                if ((xoff != 0) || (yoff != 0))
                    stackDoc.layers[i].translate( UnitValue( -xoff, "px" ), UnitValue( -yoff, "px" ) );
        // Sort out exactly what operations we want to do.
        if (! this.interactiveFlag)
            selectAllLayers(stackDoc, 1);
            this.getAlignmentInfo( stackDoc, true );
            resizeCanvasToFitPano();
            if (this.advancedBlending)
                stackDoc.changeMode( ChangeMode.RGB );    // Auto-blend requires  RGB
                this.advancedBlend( stackDoc );
    // The Advanced blending works so well that there's little point
    // in having the rectangular gradient blends anymore.  Uncomment the
    // following two lines if you still want them (see similar code below
    // for the interactive case).
    //        else
    //            this.quickBlend();
            purgeHistoryStates();
            return true;
        // Interactive happens here
        if (this.compositionFile == null)
            this.getAlignmentInfo( stackDoc, false );   
            // With the corners computed by getAlignmentInfo,
            // find the bounds and use that to slide the images
            // over so their bounds has origin 0,0 (top left)
            this.offsetStack( -this.fBounds.getTopLeft() );
        if (this.interactiveFlag)
            stackDoc = this.callInteractivePlugin( stackDoc );
        if (stackDoc == null)
            return false;
        resizeCanvasToFitPano();
        // Now apply the transformation to the pieces
        for (i in this.stackElements)
            this.stackElements[i].transform();
        if (this.advancedBlending)
            selectAllLayers( stackDoc, 1 );
            stackDoc.changeMode( ChangeMode.RGB );    // Auto-blend requires  RGB
            advancedMergeLayers();
    // The new "advanced blending" works well enough that there's
    // little point in invoking the rectangular gradient blends anymore.
    // If you really want them, you can uncomment the two lines below.
    //    else
    //        this.quickBlend();
        purgeHistoryStates();
        return true;
    // Extra group breaks the main dialog's radio buttons,
    // so we manually implement it here (ScriptUI lossage)
    // NOTE: When called, this is a member function of radioControl,
    // -not- photomerge.  JavaScript voodoo.
    photomerge.radioClick = function()
        var w = this.window;
        var i;
        // Some of the transforms don't allow lens correction...
        var allowLensCor = ((this.button_id != '_LOnormal')
                            && (this.button_id != '_LOcollage')
                            && (this.button_id != '_LOinteractive'));
        w.findControl('_useLensCorrection').enabled = allowLensCor;
        w.findControl('_removeVignette').enabled = allowLensCor;
        // Be aggressive about it...
        if (! allowLensCor)
            w.findControl('_useLensCorrection').value = false;
            w.findControl('_removeVignette').value = false;
        for (i in photomerge.radioButtons)
            var b = w.findControl(photomerge.radioButtons[i]);
            if (b != this)
                b.value = false;
    // Callback when "Load Composition" is clicked.
    // NOTE: When called, this is a member function of buttonControl,
    // -not- photomerge.  JavaScript voodoo.
    photomerge.loadCompositionClick = function()
        function MacPMGType( f )
            if (f.type == 'PhMg')
                return true;
            var match = f.name.match(/.*[.](.+)$/);
            var suffix = match != null ? match[1].toLowerCase() : "";
            if (suffix == "pmg")
                return true;
            if (f instanceof Folder)
                // If the item is an app or a bundle it will be an
                // instance of folder. If we return true it will
                // appear as an enabled item. While the OS will not
                // let the user navigate into it, it is better to
                // have it appear as disabled.
                if (suffix.match(/app|bundle/i) != null)
                    // Do not navigate folders that end in .app or .bundle
                    return false;
                // navigate any other folder
                return true;
            // some unknown file type/suffix
            return false;
        var fileType = File.fs == "Windows" ? localize("$$$/AdobePlugin/Shared/Photomerge/Auto/Win=Photomerge Compositions:*.pmg")
                                        : MacPMGType;
        photomerge.compositionFile = File.openDialog( localize("$$$/AdobePlugin/Photomerge/LoadComp=Load Photomerge Composition"), fileType );
        if (photomerge.compositionFile == null || !photomerge.compositionFile.open("r"))
            return;
        var line = photomerge.compositionFile.readln();
        if (! line.match(/^VIS/))
            alert( this.pluginName + localize("$$$/AdobePlugin/Photomerge/BadComp=The Composition file is corrupt"), this.pluginName, true );
            return;
        // Read through the composition file and extract the file paths in it.
        var mergeFiles = new Array();
        while (! photomerge.compositionFile.eof)
            line = photomerge.compositionFile.readln();
            var f = line.match(/^\s*PATH\s+<([^>]+)/);
            if (f)
                // If no file path delimiters, image paths are assumed relative to the composition file
                var relPath = (f[1].indexOf( (File.fs == "Windows") ? "\\" : "/" ) < 0);
                f = (relPath ? photomerge.compositionFile.path + "/" : "") + f[1];
                mergeFiles.push( new StackElement( new File(f) ) );
        if (mergeFiles.length < 2)
            alert( this.pluginName + localize("$$$/AdobePlugin/Photomerge/BadComp=The Composition file is corrupt"), this.pluginName, true );
            return;
        photomerge.stackElements = mergeFiles;
        photomerge.interactiveFlag = true;
        this.window.close(kFilesFromPMLoad);
    // Set up the radio buttons
    photomerge.customDialogSetup = function( w )
        var i, button;
        for (i in this.radioButtons)
            button = w.findControl(this.radioButtons[i]);
            button.onClick = this.radioClick;
            // Flag with name so we can identify it in radioClick
            button.button_id = this.radioButtons[i];
        // Missing feature: We should query the selected file's metadata and
        // automatically turn on the '_useLensCorrection' checkbox if the
        // file has the proper support for it.
        w.findControl("_loadcomp").onClick = this.loadCompositionClick;
        // Julie didn't like the intro line; nuke it here because stackDialog looks for it.
        w.findControl("_intro").parent.remove(['_intro']);
        var size = w.findControl("_fileList").size;
        size[1] += 20;
        w.findControl("_LOauto").value = true;        // Set default
        w.findControl("_advancedBlend").value = this.advancedBlending;
        // If the PhotomergeUI or ADM plugins aren't there, don't display the option for it.
        if ((app.systemInformation.search(/PhotomergeUI/) < 0) || (app.systemInformation.search(/ADM /) < 0))
           w.findControl("_PMInteractive").hide();
           w.findControl("_loadcomp").hide();
    // Called by the dialog on closing to collect the results
    photomerge.customDialogFunction = function( w )
        if (w.findControl("_LOinteractive").value)
            this.interactiveFlag = true;
            this.alignmentKey = 'interactive';
        else
            var i, d = [{k:"_LOauto",v:"Auto"},{k:"_LOnormal",v:"translation"},{k:"_LOperspective",v:"Prsp"},{k: "_LOcylindrical",v:"cylindrical"},{k:"_LOspherical",v:"spherical"},{k:"_LOcollage",v:"scen eCollage"}];
            for (i in d)
                if (w.findControl(d[i].k).value)
                    this.alignmentKey = d[i].v;
                    break;
        this.advancedBlending = w.findControl("_advancedBlend").value;
        this.lensCorrection = w.findControl("_useLensCorrection").value;
        this.removeVignette = w.findControl("_removeVignette").value;
    // "Main" execution of Photomerge from the menu
    photomerge.doInteractivePano = function ()
        // Because of the ",true", the dialog is pre-loaded with any bridge files.
        this.getFilesFromBridgeOrDialog( localize("$$$/Private/Photomerge/PMDialogexv=PMDialog.exv"), true );
        try {
            if (this.stackElements && this.doPanorama())
                fitViewOnScreen();
                var flagDesc = new ActionDescriptor();
                flagDesc.putBoolean( kPhotomergeAdvancedBlendingFlag, photomerge.advancedBlending );
                app.putCustomOptions( "PhotomergeFlags001", flagDesc, true );
        catch (err)
            if (this.stackDoc)
                this.stackDoc.close(SaveOptions.DONOTSAVECHANGES)
    // Use this version to call Photomerge from a script.
    photomerge.createPanorama = function(filelist, displayDialog)
        this.interactiveFlag = (typeof(displayDialog) == 'boolean') ? displayDialog : false;
        if (filelist.length < 2)
            alert(localize("$$$/AdobePlugin/Shared/Photomerge/AtLeast2=Photomerge needs at least two files selected."), this.pluginName, true );
            return;
        var j;
        this.stackElements = new Array();
        for (j in filelist)
            var f = filelist[j];
            this.stackElements.push( new StackElement( (typeof(f) == 'string') ? File(f) : f ) );
        if (this.stackElements.length > 1)
            this.doPanorama();
    if ((typeof(runphotomergeFromScript) == 'undefined')
        || (runphotomergeFromScript==false))
        photomerge.doInteractivePano();

  • Can I modify 'Load Files into Stack.jsx' for custom white balance?

    I've been wondering whether its possible to change Adobe's 'Load Layers in Stack' script so that it loads RAW files with the white balance adjustments I have made in Camera Raw ('ACR').
    At present, the script loads the files as layers with the default ACR (or Lightroom) settings. This means that any white balance adjustments to the file in ACR are ignored and the RAW file is loaded with the WB 'As Shot'.
    It IS possible to save new ACR default settings, but this doesn't really help because I don't want the WB to be a constant value. The changes I make in ACR are usually subtle and 'by eye'.
    I would like the script to be mindful of these changes when opening the RAW file.. does anyone have any suggestions?
    The script is below.
    // (c) Copyright 2006.  Adobe Systems, Incorporated.  All rights reserved.
    @@@BUILDINFO@@@ Load Files into Stack.jsx 1.0.0.1
    // Load Files into Stack.jsx - does just that.
    // BEGIN__HARVEST_EXCEPTION_ZSTRING
    <javascriptresource>
    <name>$$$/JavaScripts/LoadFilesintoStack/Menu=Load Files into Stack...</name>
    </javascriptresource>
    // END__HARVEST_EXCEPTION_ZSTRING
    // debug level: 0-2 (0:disable, 1:break on error, 2:break at beginning)
    //$.level = (Window.version.search("d") != -1) ? 1 : 0;          // This chokes bridge
    $.level = 0;
    // debugger; // launch debugger on next line
    // on localized builds we pull the $$$/Strings from a .dat file
    $.localize = true;
    // Put header files in a "Stack Scripts Only" folder.  The "...Only" tells
    // PS not to place it in the menu.  For that reason, we do -not- localize that
    // portion of the folder name.
    var g_StackScriptFolderPath = app.path + "/"+ localize("$$$/ScriptingSupport/InstalledScripts=Presets/Scripts") + "/"
                                                                                                        + localize("$$$/private/LoadStack/StackScriptOnly=Stack Scripts Only/");
    $.evalFile(g_StackScriptFolderPath + "LatteUI.jsx");
    $.evalFile(g_StackScriptFolderPath + "StackSupport.jsx");
    $.evalFile(g_StackScriptFolderPath + "CreateImageStack.jsx");
    // loadLayers routines
    loadLayers = new ImageStackCreator( localize("$$$/AdobePlugin/Shared/LoadStack/Process/Name=Load Layers"),
                                                                                                          localize('$$$/AdobePlugin/Shared/LoadStack/Auto/untitled=Untitled' ) );
    // LoadLayers is less restrictive than MergeToHDR
    loadLayers.mustBeSameSize                              = false;          // Images' height & width don't need to match
    loadLayers.mustBeUnmodifiedRaw                    = false;          // Exposure adjustements in Camera raw are allowed
    loadLayers.mustNotBe32Bit                              = false;          // 32 bit images
    loadLayers.createSmartObject                    = false;          // If true, option to create smart object is checked.
    // Add hooks to read the value of the "Create Smart Object" checkbox
    loadLayers.customDialogSetup = function( w )
              w.findControl('_createSO').value = loadLayers.createSmartObject;
              if (! app.featureEnabled( localize( "$$$/private/ExtendedImageStackCreation=ImageStack Creation" ) ))
                        w.findControl('_createSO').hide();
    loadLayers.customDialogFunction = function( w )
              loadLayers.createSmartObject = w.findControl('_createSO').value;
    // Override the default to use "Auto" alignment.
    loadLayers.alignStack = function( stackDoc )
              selectAllLayers(stackDoc, 2);
              alignLayersByContent( "Auto" );
    loadLayers.stackLayers = function()
              var result, i, stackDoc = null;
              stackDoc = this.loadStackLayers();
              if (! stackDoc)
                        return;
              // Nuke the "destination" layer that got created (M2HDR holdover)
              stackDoc.layers[this.pluginName].remove();
              // Stack 'em up.
              if (this.createSmartObject)
                        selectAllLayers( stackDoc );
                        executeAction( knewPlacedLayerStr, new ActionDescriptor(), DialogModes.NO );
    // "Main" execution of Merge to HDR
    loadLayers.doInteractiveLoad = function ()
              this.getFilesFromBridgeOrDialog( localize("$$$/private/LoadStack/LoadLayersexv=LoadLayers.exv") );
              if (this.stackElements)
                        this.stackLayers();
    loadLayers.intoStack = function(filelist, alignFlag)
              if (typeof(alignFlag) == 'boolean')
                        loadLayers.useAlignment = alignFlag;
              if (filelist.length < 2)
                        alert(localize("$$$/AdobeScripts/Shared/LoadLayers/AtLeast2=At least two files must be selected to create a stack."), this.pluginName, true );
                        return;
              var j;
              this.stackElements = new Array();
              for (j in filelist)
                        var f = filelist[j];
                        this.stackElements.push( new StackElement( (typeof(f) == 'string') ? File(f) : f ) );
              if (this.stackElements.length > 1)
                        this.stackLayers();
    if (typeof(loadLayersFromScript) == 'undefined')
              loadLayers.doInteractiveLoad();

    This is part of the script looks interesting - is there a reference where can I find more hooks? Perhaps there is one that relates to WB?
    // LoadLayers is less restrictive than MergeToHDR
    loadLayers.mustBeSameSize                              = false;          // Images' height & width don't need to match
    loadLayers.mustBeUnmodifiedRaw                    = false;          // Exposure adjustements in Camera raw are allowed
    loadLayers.mustNotBe32Bit                              = false;          // 32 bit images
    loadLayers.createSmartObject                    = false;          // If true, option to create smart object is checked.
    // Add hooks to read the value of the "Create Smart Object" checkbox
    loadLayers.customDialogSetup = function( w )

  • Translation of Properties of "ParagraphStyle"

    Hi everybody,
    I need a little help with the translation of some properties for a user interface. Some properties of “ParagraphStyle” should be displayed for the user in German.
    Does anyone know how “Ruby Font” or “Kenten Font” is best translated into German?
    And what is meant by “previewColor” in connection with “ParagraphStyle”?
    The Reference Guide says only: “The color to use for preview, … representing R,G, and B values, …”. But what preview?
    Thanks for the help!
    Roland

    I need a little help with the translation of some properties for a user interface. Some properties of “ParagraphStyle” should be displayed for the user in German.
    Does anyone know how “Ruby Font” or “Kenten Font” is best translated into German?
    Just as we do not translate "Ruby" and "Kenten" into English, so you should not translate them into German. InDesign does not localize these terms, and that is correct. Anyone who wants to use them will refer to them by their transliterated-into-English names, Ruby and Kenten. Trying to come up with German names will simply cause confusion.
    As for your second question, in this post, Helpful AnswerRe: Fast Display always gray, Jongware suggests it doesn't do anything.

Maybe you are looking for

  • Error while creating dynamic internal table.

    Hello Expert, While creating a dynamic internal table, it throw an run time error as : " LOAD PROGRAM NOT FOUND   CX_SY_PROGRAM_NOT_FOUND" i tried to debug the program, it found this error comes while calling CALL METHOD cl_alv_table_create=>create_d

  • Maintaining cookies at the HTTP server level?

    Hi, My Apache HTTP server authenticates the request by hitting another server before forwarding the request to the J2EE App Servers. Is there any way to avoid this authentication hit on every request at the HTTP Server using cookies for the same sess

  • Issue while creating BPEL artifacts using BPEL command line tool

    All I am trying to create BPEL artificats for SQL server stored procedure for SQO Server 2005 using BPEL Command line tool. My demo.properties is ProductName=Microsoft SQL Server DriverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver Connection

  • Help needed regarding reading in a text file and tokenizing strings.

    Hello, I require help with a task I've been set, which asks me to read in a text file, and check the contents for errors. The text file contains lines as follows. surname:forename:1234:01-02-06 I can read in the file, but dont know how to split the s

  • Toolbar Oddities - How To Get Rid Of??

    I recently upgraded from Lion to Moutain Lion, and was happily working away on projects.  One of my projects required me to move some photos I have from one folder to another.  Upon completing my clicking and dragging of them, I began noticing that s