Referencing Colors

Hello! I'm fairly new to Illustrator, and I'm hoping that this is a feature that I'm just having a hard time understanding.
I have about 5 files that I'm working on (elevations of a buildings), and what I'd like to do is have them all reference one swatch file, so that I could change the colors in the swatch and have it update throughout all of the drawings. Like using xrefed settings in AutoCAD or Maya, you know? Is it possible to do this in Illustrator CS5, and if so, how?
Thanks in advance!

Use global colors and merge swatches.
Do the color changes to a file
Copy everything (or draw some quick rectangles & fill them with your new colors and copy that)
Paste into your 2nd document, the new colors will populate your swatches, delete what you pasted
Select one of the good colors, hold down shift, select the color you want to be replaced by your new color
From you swatches palette flyout menu choose merge swatches
As long as global is checked (greyed out or black) your colors will be global
The method I chose to give you requires you give a new name to your color when you change this, this is better in my opinion, so you can keep track of small color changes that might not be visibly sen.

Similar Messages

  • I am trying to connect a Macbook Pro to a projector for a Powerpoint presentation. When I use a VGA cable, the color of the projected images are not good. When I use a USB cable, the projected image includes the presenter notes on my computer screen?

    I am trying to connect a Macbook Pro to a projector for a Powerpoint presentation. When I use a VGA cable, the color of the projected images are not good. When I use a USB cable, the projected image includes the presenter notes on my computer screen?

    To move an iPhoto Library to a new machine:
    Link the two Macs together: there are several ways to do this: Wireless Network,Firewire Target Disk Mode, Ethernet, or even just copy the Library to an external HD and then on to the new machine...
    But however you do choose to link the two machines...
    Simply copy the iPhoto Library from the Pictures Folder on the old Machine to the Pictures Folder on the new Machine.
    Then hold down the option (or alt) key key and launch iPhoto. From the resulting menu select 'Choose Library'
    and select the Library that you moved.  That's it.
    This moves photos, events, albums, books, keywords, slideshows and everything else.
    Your first option didn't work because you imported one Library to another. Every version and thumbnail is imported like a distinct photo, you lose all your Albums, Keywords etc., the link between Original and Previews is destroyed, the non-destructive editing feature is ruined and so on. In summary: it's mess.
    Your second option didn't work because you simply referenced her library on the old machine.
    Regards
    TD

  • font color=red Create/Modify forms and triggers through C++ using OPEN API

    <font color=red>
    Dear brothers/sisters<font color=darkblue>
    <br><br>
    Please help us to find the linking problem.
    <br>
    We have to add PRE-FORM trigger to many FMBies. We have thousants of FMBies. So opening one by one is difficult. For this we are using OPEN API and BORLAND C++. We have coppied all header files from D:\orant\FORMS60\API.
    But there is a link error. Here is the snippet.
    <br>
    <font color=red>
    <br>#include <stdio.h>
    <br>#include <stdlib.h>
    <br>#include <malloc.h>
    <br>#include <d2fctx.h> /* Forms API context */
    <br>#include <d2ffmd.h> /* Form module header file */
    <br>int main (int argc, char *argv[])
    <br>{
    <br>d2fctxa ctx_attr;
    <br>d2fctx *ctx;
    <br>d2ffmd *form;
    <br>text *form_name;
    <br>/* Check arguments */
    <br>if ( argc != 2 )
    <br>{
    <br>fprintf(stderr, "USAGE: %s <filename>\n", argv[0]);
    <br>exit(1);
    <br>}
    <br>/* Create Forms API context */
    <br>ctx_attr.mask_d2fctxa = (ub4)0;
    <br>if ( d2fctxcr_Create(&ctx, &ctx_attr) != D2FS_SUCCESS )
    <br>{
    <br>fprintf(stderr, "Error creating Forms API context\n");
    <br>exit(1);
    <br>}
    <br>/* Load the form module into memory */
    <br>if ( d2ffmdld_Load(ctx, &form, argv[1], FALSE) != D2FS_SUCCESS )
    <br>{
    <br>fprintf(stderr, "Failed to load form module: %s\n", argv[1]);
    <br>exit(1);
    <br>}
    <br>/* Get the name of the form module */
    <br>if ( d2ffmdg_name(ctx, form, &form_name) != D2FS_SUCCESS )
    <br>{
    <br>fprintf(stderr, "Error getting the name of the form module\n");
    <br>}
    <br>else
    <br>{
    <br>/* Print the name of the form, then free it */
    <br>printf ("The name of the form is %s\n", form_name);
    <br>free(form_name);
    <br>}
    <br>/* Destroy the in-memory form */
    <br>if ( d2ffmdde_Destroy(ctx, form) != D2FS_SUCCESS )
    <br>{
    <br>fprintf(stderr, "Error destroying form module\n");
    <br>}
    <br>/* Close the API and destroy context */
    <br>d2fctxde_Destroy(ctx);
    <br>return 0;
    <br>}
    <br>
    <font color=darkblue>
    <br>
    The compilation is success. But there is a link error. Please help us to find the problem.
    <br><br>
    Here is the error Message.
    <br>
    <font color=red>
    <br>Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
    <br>FIRST.CPP:
    <br>Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
    <br>Error: Unresolved external '_d2fctxcr_Create' referenced from D:\API\FIRST.OBJ
    <br>Error: Unresolved external '_d2ffmdld_Load' referenced from D:\API\FIRST.OBJ
    <br>Error: Unresolved external '_d2ffmdgt_GetTextProp' referenced from D:\API\FIRST.OBJ
    <br>Error: Unresolved external '_d2fctxde_Destroy' referenced from D:\API\FIRST.OBJ
    <br><br>
    <font color=darkblue size=4>Could you please help us.......<br>

    <font color=red>
    Dear brothers/sisters<font color=darkblue>
    <br><br>
    Please help us to find the linking problem.
    <br>
    We have to add PRE-FORM trigger to many FMBies. We have thousants of FMBies. So opening one by one is difficult. For this we are using OPEN API and BORLAND C++. We have coppied all header files from D:\orant\FORMS60\API.
    But there is a link error. Here is the snippet.
    <br>
    <font color=red>
    <br>#include <stdio.h>
    <br>#include <stdlib.h>
    <br>#include <malloc.h>
    <br>#include <d2fctx.h> /* Forms API context */
    <br>#include <d2ffmd.h> /* Form module header file */
    <br>int main (int argc, char *argv[])
    <br>{
    <br>d2fctxa ctx_attr;
    <br>d2fctx *ctx;
    <br>d2ffmd *form;
    <br>text *form_name;
    <br>/* Check arguments */
    <br>if ( argc != 2 )
    <br>{
    <br>fprintf(stderr, "USAGE: %s <filename>\n", argv[0]);
    <br>exit(1);
    <br>}
    <br>/* Create Forms API context */
    <br>ctx_attr.mask_d2fctxa = (ub4)0;
    <br>if ( d2fctxcr_Create(&ctx, &ctx_attr) != D2FS_SUCCESS )
    <br>{
    <br>fprintf(stderr, "Error creating Forms API context\n");
    <br>exit(1);
    <br>}
    <br>/* Load the form module into memory */
    <br>if ( d2ffmdld_Load(ctx, &form, argv[1], FALSE) != D2FS_SUCCESS )
    <br>{
    <br>fprintf(stderr, "Failed to load form module: %s\n", argv[1]);
    <br>exit(1);
    <br>}
    <br>/* Get the name of the form module */
    <br>if ( d2ffmdg_name(ctx, form, &form_name) != D2FS_SUCCESS )
    <br>{
    <br>fprintf(stderr, "Error getting the name of the form module\n");
    <br>}
    <br>else
    <br>{
    <br>/* Print the name of the form, then free it */
    <br>printf ("The name of the form is %s\n", form_name);
    <br>free(form_name);
    <br>}
    <br>/* Destroy the in-memory form */
    <br>if ( d2ffmdde_Destroy(ctx, form) != D2FS_SUCCESS )
    <br>{
    <br>fprintf(stderr, "Error destroying form module\n");
    <br>}
    <br>/* Close the API and destroy context */
    <br>d2fctxde_Destroy(ctx);
    <br>return 0;
    <br>}
    <br>
    <font color=darkblue>
    <br>
    The compilation is success. But there is a link error. Please help us to find the problem.
    <br><br>
    Here is the error Message.
    <br>
    <font color=red>
    <br>Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
    <br>FIRST.CPP:
    <br>Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
    <br>Error: Unresolved external '_d2fctxcr_Create' referenced from D:\API\FIRST.OBJ
    <br>Error: Unresolved external '_d2ffmdld_Load' referenced from D:\API\FIRST.OBJ
    <br>Error: Unresolved external '_d2ffmdgt_GetTextProp' referenced from D:\API\FIRST.OBJ
    <br>Error: Unresolved external '_d2fctxde_Destroy' referenced from D:\API\FIRST.OBJ
    <br><br>
    <font color=darkblue size=4>Could you please help us.......<br>

  • How To Change Hyperlinks And Nav Menu Colors

    I continue to see people stating that it's impossible to change hyperlink colors and navigation menu colors until after you publish your site. This is not true. It's quite easy to update your templates with the colors YOU want and when you update the template, you never have to mess with any post-processing. You make a new page? Your colors are already there.
    I've gone over this before in this thread:
    http://discussions.apple.com/thread.jspa?messageID=3288533&#3288533
    But I'll go over the quick and dirty version here as well. Those who want more detail can post a question and I'll elaborate.
    First, do you know how to get into iWeb's inner folders? You right click or control click on your iWeb icon and select Show Package Contents from the pop-up menu.
    Step 2
    Once you've done that, you'll see a new Finder window that shows a folder called Contents. Open that and then open the next folder Resources. Within Resources there's a folder named Shared. Open the Shared folder.
    You're now looking at your collection of iWeb template files. You'll notice that each template has seven individual page files - each file defines the layout and styles for the page for which its named. This is actually one of the two places where you'll find the data/images that make up your iWeb pages. This location only contains the images. Now I'll show you were to find the data file.
    So you're currently here:
    /Applications/iWeb/Contents/Resources/Shared/
    You want to go here:
    /Applications/iWeb/Contents/Resources/English.lproj
    Now if you speak another language and your Mac's system language is set to the language you speak, substitue English with that language. If your system is set to English regardless of the language you speak, and you use the English templates, then stick with the English folder.
    When you're in the English.lproj folder, you will see seven sub-folders and one file named TemplatesInfo.plist. TemplatesInfo.plist is the file that registers the templates and tells iWeb what you've got in your collection. But we don't care about that file for now. We're after the template data files.
    The seven sub-folders are aptly named for each of the seven page-types as you can see. Open the About Me folder.
    Now you will see an "about me.webtemplate" file for every template you have in your collection. Good job. You've learned something new. Move on to Step 3.
    Step 3
    If you haven't decided yet, now's the time to decide which template you'd like to update. If you're just along for the ride to learn something new, no worries. We won't do anything you can't undo.
    Pick a template file now. Perhaps you chose the White template, or:
    White About Me.webtemplate
    Right click or control click on this file and select Show Package Contents from the pop-up menu. This will launch a new Finder window that displays the contents of the White About Me.webtemplate file.
    You will likely see a handful of different files, but the file you want is the one named Index.xml.gz.
    Index.xml.gz is the brain behind the template. Within this file are all the settings for the page you chose and it's really not hard to find what you want and change it. So let's take a peek.
    Step 4
    Double-click the file Index.xml.gz. This will reveal a new file named Index.xml. You might have to scroll down in your Finder window to see it. Rename Index.xml.gz to Index.xml.gz.backup in case you screw things up, you have your original.
    Now, open Index.xml with TextEdit. Do not open the file with a code editor unless you have already formatted the file.
    When the file opens, you'll notice it's one gigantic jumbled mess of stuff. No worries, we'll straighten that out. All you need to do is a find/replace.
    Find all instances of: ><
    And replace with:
    <
    The line break is important so maybe just copy the lines right out of this post. When you replace all of those, the file will be far more easy to view.
    Assuming you've completed that step. You're basically ready to make your change and test it out! Not hard ey?
    So let's say you want to change your hyperlink color from grey to blue. Search for this string:
    BLDefaultHyperlinkCharacterStyleIdentifier0
    When you find that string, you will see a few lines below it, two lines that look similar to this:
    <sf:fontColor>
    <sf:color xsi:type="sfa:calibrated-rgb-color-type" sfa:r=".8" sfa:g="1" sfa:b="0.4" sfa:a="1"/>
    This is how the template specifies color. It's RGB100. Your Mac came with a program called Art Director's Took Kit and that application can tell you the RGB100 values for any color you want. Tinker with that and you'll have a lot of fun with this.
    So I picked out a nice royal blue for you. The RGB100 values for it are:
    R:0 G:25 B:100
    What you need to do is update the color line to match those values:
    <sf:color xsi:type="sfa:calibrated-rgb-color-type" sfa:r="0" sfa:g=".25" sfa:b="1" sfa:a="1"/>
    Notice that you specify these in terms of a percentage, where 25 became .25 and 100 became 1.
    Step 5
    Save your file. It's time to see your work in action. Open iWeb if it isn't open already and create a new page using the template you've just altered. If you altered the White About Me page, then select that and create the new page.
    It there are hyperlinks already on this page, you should already see that they reflect your new color. If there aren't any hyperlinks, then type some text and create one. You should see your new link color right away!
    Now if you don't see the new color, either you picked the wrong page or you neglected to rename the Index.xml.gz file a few steps back. If you did not rename that file, then it's still in control of your template. Rename it now and try again.
    If you don't like that color, simply swap back to the TextEdit page and change it until you like it - switching back and forth between the file and iWeb to view your changes. Once you're happy, make note of the color you chose and make the change for the remaining six pages in the tempalte you selected. Just be sure to follow the steps for each page you edit. If you fail to see your change, again, check to see that you renamed Index.xml.gz.
    Side Notes
    For the more technical, rather than editing an existing template, you might want to duplicate and rename a template. This essentially creates a brand new one. If you're pretty good within Finder then go for it, just be sure that you duplicate the files in both locations:
    /Applications/iWeb/Contents/Resources/Shared/
    /Applications/iWeb/Contents/Resources/English.lproj/...
    Choose a unique name for the duplicated template and change every single file so that the new name replaces the old one. You would have to register this new template in the TemplatesInfo.plist file as well, but I'm not going to get into that here.
    The thread I referenced at the top has all kinds of search terms to find the other hyperlink styles (rollover and visited) and all the navigation menu styles plus a bunch of other fun stuff.
    Now, it seems long, but that's because I wrote it well. The shortest version of this I've ever written was two sentences, but that was for a UNIX geek and he got it. It's just as easy for you, but I write it out so that anyone can do this, because anyone can. It's just not hard.
    If you have questions about any of the steps, go ahead and ask.

    Good. Okay here's how to apply a background color to your nav bar buttons. For example, my Aerolite template sets the selected page to a black background color. The rollover effect uses a gradient fill. I'll describe both of those here.
    First, here are the navigation menu search terms:
    navbaritem-style-normal-default
    navbaritem-style-rollover-default
    navbaritem-style-selected-default
    navbar-pargraph
    The first three set the button effects and text colors. The last one there sets the font, font size and other paragraph styles.
    To change the selected page button background color, or gradient or image, first search for it using the search term above. Start from the top of the file because there are two instances of those terms, one where you can set the values, the other is only reference to the first and does not allow you to change settings.
    When you find the search term, you might want to insert an empty line above it to help separate it from the rest of the code. You can also insert an empty line below the section. The end of this style ends with:
    </sf:navbar-item-style>
    Be careful not to mix that up with </sf:navbaritem-character-style>
    Now, within this section, you'll find all kinds of settings... stroke, fill, character styles, etc. Notice you can change font color in there. But for this demo, you want to find the section that looks like this:
    <sf:fill>
    <sf:null/>
    </sf:fill>
    I'm assuming you're editing an Apple template that does not already have a fill effect. If it does have one, then your example might not look exactly like that.
    To apply a color fill, change those three lines to these lines:
    <sf:fill>
    <sf:color xsi:type="sfa:calibrated-rgb-color-type" sfa:r="0" sfa:g="0" sfa:b="0" sfa:a="1"/>
    </sf:fill>
    You can see that we've inserted the line that specifies color - something you should be familiar with by now. Here you can specify the color that will become the background of your nav bar button. This example specifies black. Easy no?
    If you would prefer a gradient fill, then replace those three lines with this:
    <sf:fill>
    <sf:angle-gradient sfa:ID="SFRAngleGradient-1111" sf:opacity="1" sf:type="linear" sf:angle="0">
    <sf:stops sfa:ID="NSMutableArray-1111">
    <sf:gradient-stop sfa:ID="SFRGradientStop-1111" sf:fraction="0">
    <sf:color xsi:type="sfa:calibrated-rgb-color-type" sfa:r="0.40" sfa:g="0.40" sfa:b="0.30" sfa:a="1"/>
    </sf:gradient-stop>
    <sf:gradient-stop sfa:ID="SFRGradientStop-2222" sf:fraction="1">
    <sf:color xsi:type="sfa:calibrated-rgb-color-type" sfa:r="0.64" sfa:g="0.66" sfa:b="0.54" sfa:a="1"/>
    </sf:gradient-stop>
    </sf:stops>
    </sf:angle-gradient>
    </sf:fill>
    Now, don't panic Here's what this is. The first line allows you to specify the angle of your gradient. Play with the numbers from 0 to 359 until you have what makes sense for your design.
    Then, you will see two familiar lines again - the lines that allow you to specify color! The first line is the first color of your gradient and the second color is the second color of your gradient. That's all there is to it!
    SECRET: It might be possible to add additional colors, not just two. Do you see the part sf:fraction="0" and sf:fraction="1"? These are gradient stops. I'm willing to bet that if you inserted a thrid gradient stop with a fraction setting of .5, you'd have a three-color gradient!
    <sf:gradient-stop sfa:ID="SFRGradientStop-3333" sf:fraction=".5">
    <sf:color xsi:type="sfa:calibrated-rgb-color-type" sfa:r="0" sfa:g="0.25" sfa:b="4" sfa:a="1"/>
    </sf:gradient-stop>
    I have never tried this - it just occurred to me as I was looking at this code. Big prize for the first person to prove the theory
    NOTE: You will notice that the number 1111 and 2222 are within this code. iWeb XML relies on identification tags here and there. It's nothing you really have to care about except if you insert gradient fills in more than one area. Those numbers need to be unique so if you paste that code in for your selected page button and then paste it again for your rollover buttons, you'll need to update the numbers for the second button. Any numbers are fine. Use 3333 and 4444 for the second set, 5555 and 6666 for the thrid and so on. I often just type 4345781476 - doesn't matter.
    Next lesson will be images.

  • Logic 8 crashing when double click on color in the color window

    every time I try and create a custom color in the color window by double clicking on a color square logic crashes . Is anyone else seeing this? - sent apple crash report

    Try trash the com.apple.iPhoto.plist file from the HD/Users/ Your Name / library / preferences folder.
    (On 10.7: Hold the option (or alt) key while clicking on the Go menu in Finder to access the User Library)
    (Remember you'll need to reset your User options afterwards. These include minor settings like the window colour and so on. Note: If you've moved your library you'll need to point iPhoto at it again.)
    What's the plist file?
    For new users: Every application on your Mac has an accompanying plist file. It records certain User choices. For instance, in your favourite Word Processor it remembers your choice of Default Font, on your Web Browser is remembers things like your choice of Home Page. It even recalls what windows you had open last if your app allows you to pick up from where you left off last. The iPhoto plist file remembers things like the location of the Library, your choice of background colour, whether you are running a Referenced or Managed Library, what preferences you have for autosplitting events and so on. Trashing the plist file forces the app to generate a new one on the next launch, and this restores things to the Factory Defaults. Hence, if you've changed any of these things you'll need to reset them. If you haven't, then no bother. Trashing the plist file is Mac troubleshooting 101.

  • How to Block Themes, Wallpapers and other Display Customizations (DPI, Scaling, Window Color and Appearance) with USMT 5.0?

    I'm doing something wrong, but I can't figure out what.
    I've read some great write ups on the subject:
    USMT Custom XML the Free and Easy Way
    USMT
    4.0 Custom Sample - Blocking Wallpaper and Theme Migration from Windows Vista and Windows 7
    Blocking
    Wallpaper Migration with USMT (or: you are a jerk)
    and used part of the XML in their example, but the wallpaper, themes and other display customizations are still coming over.  Now I'm trying to use MigXmlHelper.DestinationPriority() but really its just my last ditch effort.
    From an elevated command prompt in C:\USMT\amd64\, I'm executing:
    scanstate.exe E:\USMTBackup /config:nothemeuiconfig.xml /i:MigApp.xml /i:MigDocs.xml /i:MigUser.xml /i:unconditionalexclusions.xml /i:blockwallpaperandthemev3.xml /i:getlocalpsts.xml /i:inclusions.xml /ui:domain1\user1 /ue:*\* /vsc /c /o /nocompress /localonly /v:13 /l:\\path\to\scanstate.log /progress:\\path\to\scanstate_progress.log /listfiles:\\path\to\scanstate_listfiles.log
    The blockwallpaperandthemev3.xml contains:
    <?xml version="1.0" encoding="UTF-8"?>
    <migration urlid="http://www.microsoft.com/migration/1.0/migxmlext/blockwallpaperandthemev3">
    <component type="Documents" context="User">
    <displayName>Block Wallpaper, Theme and Display Registry Settings</displayName>
    <role role="Data">
    <rules>
    <unconditionalExclude>
    <objectSet>
    <!-- Blocks wallpaper, themes (which include wallpaper) and other display/visual customizations (DPI, Screen Saver, Window Color & Appearance etc.) in the registry when migrating from Vista, 7 and beyond -->
    <pattern type="Registry">HKCU\Control Panel\Appearance\* [*]</pattern>
    <pattern type="Registry">HKCU\Control Panel\Desktop [Pattern]</pattern>
    <pattern type="Registry">HKCU\Control Panel\Desktop [SCRNSAVE.EXE]</pattern>
    <pattern type="Registry">HKCU\Control Panel\Desktop [TileWallpaper]</pattern>
    <pattern type="Registry">HKCU\Control Panel\Desktop [WallPaper]</pattern>
    <pattern type="Registry">HKCU\Control Panel\Desktop [WallPaperStyle]</pattern>
    <pattern type="Registry">HKCU\Control Panel\Desktop\Colors [*]</pattern>
    <pattern type="Registry">HKCU\Control Panel\Desktop\WindowMetrics [*]</pattern>
    <pattern type="Registry">HKCU\Software\Microsoft\Internet Explorer\Desktop\General [WallpaperSource]</pattern>
    <pattern type="Registry">HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Wallpapers\* [*]</pattern>
    <pattern type="Registry">HKCU\Software\Microsoft\Windows\CurrentVersion\ThemeManager\* [*]</pattern>
    <pattern type="Registry">HKCU\Software\Microsoft\Windows\CurrentVersion\Themes\* [*]</pattern>
    </objectSet>
    </unconditionalExclude>
    <merge script="MigXmlHelper.DestinationPriority()">
    <objectSet>
    <pattern type="Registry">HKCU\Control Panel\Appearance\* [*]</pattern>
    <pattern type="Registry">HKCU\Control Panel\Desktop [Pattern]</pattern>
    <pattern type="Registry">HKCU\Control Panel\Desktop [SCRNSAVE.EXE]</pattern>
    <pattern type="Registry">HKCU\Control Panel\Desktop [TileWallpaper]</pattern>
    <pattern type="Registry">HKCU\Control Panel\Desktop [WallPaper]</pattern>
    <pattern type="Registry">HKCU\Control Panel\Desktop [WallPaperStyle]</pattern>
    <pattern type="Registry">HKCU\Control Panel\Desktop\Colors [*]</pattern>
    <pattern type="Registry">HKCU\Control Panel\Desktop\WindowMetrics [*]</pattern>
    <pattern type="Registry">HKCU\Software\Microsoft\Internet Explorer\Desktop\General [WallpaperSource]</pattern>
    <pattern type="Registry">HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Wallpapers\* [*]</pattern>
    <pattern type="Registry">HKCU\Software\Microsoft\Windows\CurrentVersion\ThemeManager\* [*]</pattern>
    <pattern type="Registry">HKCU\Software\Microsoft\Windows\CurrentVersion\Themes\* [*]</pattern>
    </objectSet>
    </merge>
    </rules>
    </role>
    </component>
    <!-- This component blocks wallpaper & screen saver files -->
    <component type="Documents" context="User">
    <displayName>Block Wallpapers and Theme Files</displayName>
    <role role="Data">
    <rules>
    <unconditionalExclude>
    <objectSet>
    <content filter="MigXmlHelper.ExtractSingleFile(NULL, NULL)">
    <objectSet>
    <pattern type="Registry">HKCU\Control Panel\Desktop [SCRNSAVE.EXE]</pattern>
    <pattern type="Registry">HKCU\Control Panel\Desktop [WallPaper]</pattern>
    <pattern type="Registry">HKCU\Software\Microsoft\Internet Explorer\Desktop\General [WallpaperSource]</pattern>
    <pattern type="Registry">HKCU\Software\Microsoft\Windows\CurrentVersion\Themes\* [*]</pattern>
    </objectSet>
    </content>
    </objectSet>
    </unconditionalExclude>
    <merge script="MigXmlHelper.DestinationPriority()">
    <objectSet>
    <content filter="MigXmlHelper.ExtractSingleFile(NULL, NULL)">
    <objectSet>
    <pattern type="Registry">HKCU\Control Panel\Desktop [SCRNSAVE.EXE]</pattern>
    <pattern type="Registry">HKCU\Control Panel\Desktop [WallPaper]</pattern>
    <pattern type="Registry">HKCU\Software\Microsoft\Internet Explorer\Desktop\General [WallpaperSource]</pattern>
    <pattern type="Registry">HKCU\Software\Microsoft\Windows\CurrentVersion\Themes\* [*]</pattern>
    </objectSet>
    </content>
    </objectSet>
    </merge>
    <unconditionalExclude>
    <objectSet>
    <pattern type="File">%CSIDL_LOCAL_APPDATA%\Microsoft\Windows\Themes\* [*]</pattern>
    <pattern type="File">%CSIDL_APPDATA%\Microsoft\Windows\Themes\* [*]</pattern>
    <pattern type="File">%CSIDL_WINDOWS%\Resources\Ease of Access Themes\* [*]</pattern>
    <pattern type="File">%CSIDL_WINDOWS%\Resources\Themes\* [*]</pattern>
    <pattern type="File">%CSIDL_WINDOWS%\Web\Wallpaper\* [*]</pattern>
    </objectSet>
    </unconditionalExclude>
    <merge script="MigXmlHelper.DestinationPriority()">
    <objectSet>
    <pattern type="File">%CSIDL_LOCAL_APPDATA%\Microsoft\Windows\Themes\* [*]</pattern>
    <pattern type="File">%CSIDL_APPDATA%\Microsoft\Windows\Themes\* [*]</pattern>
    <pattern type="File">%CSIDL_WINDOWS%\Resources\Ease of Access Themes\* [*]</pattern>
    <pattern type="File">%CSIDL_WINDOWS%\Resources\Themes\* [*]</pattern>
    <pattern type="File">%CSIDL_WINDOWS%\Web\Wallpaper\* [*]</pattern>
    </objectSet>
    </merge>
    <unconditionalExclude>
    <objectSet>
    <script>MigXmlHelper.GenerateDrivePatterns ("\Users\*\AppData\Local\Microsoft\Windows\Themes\* [*]","Fixed")</script>
    <script>MigXmlHelper.GenerateDrivePatterns ("\Users\*\AppData\Roaming\Microsoft\Windows\Themes\* [*]","Fixed")</script>
    <script>MigXmlHelper.GenerateDrivePatterns ("\Windows\Resources\Ease of Access Themes\* [*]","Fixed")</script>
    <script>MigXmlHelper.GenerateDrivePatterns ("\Windows\Resources\Themes\* [*]","Fixed")</script>
    <script>MigXmlHelper.GenerateDrivePatterns ("\Windows\Web\Wallpaper\* [*]","Fixed")</script>
    </objectSet>
    </unconditionalExclude>
    <merge script="MigXmlHelper.DestinationPriority()">
    <objectSet>
    <script>MigXmlHelper.GenerateDrivePatterns ("\Users\*\AppData\Local\Microsoft\Windows\Themes\* [*]","Fixed")</script>
    <script>MigXmlHelper.GenerateDrivePatterns ("\Users\*\AppData\Roaming\Microsoft\Windows\Themes\* [*]","Fixed")</script>
    <script>MigXmlHelper.GenerateDrivePatterns ("\Windows\Resources\Ease of Access Themes\* [*]","Fixed")</script>
    <script>MigXmlHelper.GenerateDrivePatterns ("\Windows\Resources\Themes\* [*]","Fixed")</script>
    <script>MigXmlHelper.GenerateDrivePatterns ("\Windows\Web\Wallpaper\* [*]","Fixed")</script>
    </objectSet>
    </merge>
    </rules>
    </role>
    </component>
    </migration>
    I generated a config.xml called nothemeuiconfig.xml and changed this:
    <component displayname="Microsoft-Windows-themeui" migrate="yes" ID="http://www.microsoft.com/migration/1.0/migxmlext/cmi/microsoft-windows-themeui/microsoft-windows-themeui/settings"/>
    To this:
    <component displayname="Microsoft-Windows-themeui" migrate="no" ID="http://www.microsoft.com/migration/1.0/migxmlext/cmi/microsoft-windows-themeui/microsoft-windows-themeui/settings"/>
    But themes, wallpapers - everything - still come over.
    Opened a case with Microsoft, sent them:
    the XML's I'm using
    the command I used to generate the config.xml
    the command I used for scanstate
    the log files generated by scanstate
    the command I used for loadstate
    the log files generated by loadstate
    Summary result of the MS case:
    After much review & scrutiny, the command line and XML files are syntactically correct and rules are sound.
    The articles I referenced in the ticket are indeed old and speak of an older version of USMT, so I can accept the possibility that something may have changed between USMT versions that render those suggested rules & instructions invalid.
    Despite using
    unconditionalExclude to unconditionally globally exclude objects, something else is trumping that rule, and there’s no way around that.
    Even using
    MigXmlHelper.DestinationPrioity() won’t help us here because, like above, something else trumps that rule, and there’s no way around that.
    The last proposed suggestion is to disable the shmig component, which may or may not break or otherwise adversely affect the backup/restore of other things.  (This may be too difficult to detect easily or in initial testing and the uncertainty doesn’t
    give us confidence problems won’t arise as a result of this change.  Also,
    Ned Pyle's post post says NOT to, but then again that's an old post.)
    Is this no longer possible or am I'm just doing it wrong?

    Thanks for the reply
    TimAmico!
    I saw your responses on Friday & Saturday, but didn't reply because I wanted to think this over a bit and try to get a second opinion.
    The 'Appearance and Display' component looks to have a has a number of sub-components.
    <component displayname="Appearance and Display" migrate="yes" ID="appearance_and_display">
    <component displayname="Windows Games Settings" migrate="yes" ID="appearance_and_display\windows_games_settings">
    <component displayname="Microsoft-Windows-GameExplorer" migrate="yes" ID="http://www.microsoft.com/migration/1.0/migxmlext/cmi/microsoft-windows-gameexplorer/microsoft-windows-gameexplorer/settings"/>
    </component>
    <component displayname="Taskbar and Start Menu" migrate="yes" ID="appearance_and_display\taskbar_and_start_menu">
    <component displayname="Microsoft-Windows-stobject" migrate="yes" ID="http://www.microsoft.com/migration/1.0/migxmlext/cmi/microsoft-windows-stobject/microsoft-windows-stobject/settings"/>
    <component displayname="Microsoft-Windows-explorer" migrate="yes" ID="http://www.microsoft.com/migration/1.0/migxmlext/cmi/microsoft-windows-explorer/microsoft-windows-explorer/settings"/>
    </component>
    <component displayname="Personalized Settings" migrate="yes" ID="appearance_and_display\personalized_settings">
    <component displayname="Microsoft-Windows-uxtheme" migrate="yes" ID="http://www.microsoft.com/migration/1.0/migxmlext/cmi/microsoft-windows-uxtheme/microsoft-windows-uxtheme/settings"/>
    <component displayname="Microsoft-Windows-themeui" migrate="yes" ID="http://www.microsoft.com/migration/1.0/migxmlext/cmi/microsoft-windows-themeui/microsoft-windows-themeui/settings"/>
    <component displayname="Microsoft-Windows-shmig" migrate="yes" ID="http://www.microsoft.com/migration/1.0/migxmlext/cmi/microsoft-windows-shmig/microsoft-windows-shmig/settings"/>
    <component displayname="Microsoft-Windows-shell32" migrate="yes" ID="http://www.microsoft.com/migration/1.0/migxmlext/cmi/microsoft-windows-shell32/microsoft-windows-shell32/settings"/>
    <component displayname="Microsoft-Windows-CommandPrompt" migrate="yes" ID="http://www.microsoft.com/migration/1.0/migxmlext/cmi/microsoft-windows-commandprompt/microsoft-windows-commandprompt/settings"/>
    </component>
    </component>
    If I'm understanding the XML correctly, setting 'Appearance and Display' to 'no' will not bring over any of the sub components:
    Windows Games Settings: Microsoft-Windows-GameExplorer
    Tarkbar & Start Menu: Microsoft-Windows-stobject
    Tarkbar & Start Menu: Microsoft-Windows-explorer
    Personalized Settings: Microsoft-Windows-uxtheme
    Personalized Settings: Microsoft-Windows-themeui
    Personalized Settings: Microsoft-Windows-shmig
    Personalized Settings: Microsoft-Windows-shell32
    Personalized Settings: Microsoft-Windows-CommandPrompt
    If so, that, to me at least, represents a pretty significant change!  We want the pinned items but not the backgrounds and themes so that specific change won't work for us, but glad to hear it meets your needs.  (Also greatly appreciate your sharing
    your results with us.)
    I'll admit, even before reaching out to MS, the logs clearly show that the themes/backgrounds are all part of the 'Microsoft-Windows-shmig' component but dang it if I want something of substance (read: official documentation) that covers what exactly that
    component handles.  (I like to know what I'm potentially getting myself into.)

  • I have an iMac. , mid 2007.  Frequently, when I take an action, the little color wheel starts spinning and goes on for quite awhile.  Save a file, close a file, open a file, open a window, it's all random.  Somtimes it stalls, sometimes it doesn't.  Why?

    I have an iMac. , mid 2007.  Frequently, when I take an action, the little color wheel starts spinning and goes on for quite awhile.  Save a file, close a file, open a file, open a window, it's all random.  Somtimes it stalls, sometimes it doesn't.  Sometimes long, sometims short.  Why is this happening?

    Consider adding more memory. Be sure you have adequate free space on the hard drive - 15 GBs or 10% of the drive's capacity, whichever is greater. Do not run too many applications concurrently. Visit The XLab FAQs and read the FAQ on resolving the SBBOD.
    Do some maintenance:
    Repair the Hard Drive and Permissions
    Boot from your Leopard Installer disc. After the installer loads select your language and click on the Continue button. When the menu bar appears select Disk Utility from the Utilities menu. After DU loads select your hard drive entry (mfgr.'s ID and drive size) from the the left side list.  In the DU status area you will see an entry for the S.M.A.R.T. status of the hard drive.  If it does not say "Verified" then the hard drive is failing or failed. (SMART status is not reported on external Firewire or USB drives.) If the drive is "Verified" then select your OS X volume from the list on the left (sub-entry below the drive entry,) click on the First Aid tab, then click on the Repair Disk button. If DU reports any errors that have been fixed, then re-run Repair Disk until no errors are reported. If no errors are reported click on the Repair Permissions button. Wait until the operation completes, then quit DU and return to the installer.
    If DU reports errors it cannot fix, then you will need Disk Warrior and/or Tech Tool Pro to repair the drive. If you don't have either of them or if neither of them can fix the drive, then you will need to reformat the drive and reinstall OS X.
    Kappy's Personal Suggestions for OS X Maintenance
    For disk repairs use Disk Utility.  For situations DU cannot handle the best third-party utilities are: Disk Warrior;  DW only fixes problems with the disk directory, but most disk problems are caused by directory corruption; Disk Warrior 4.x is now Intel Mac compatible. Drive Genius provides additional tools not found in Disk Warrior.  Versions 1.5.1 and later are Intel Mac compatible.
    OS X performs certain maintenance functions that are scheduled to occur on a daily, weekly, or monthly period. The maintenance scripts run in the early AM only if the computer is turned on 24/7 (no sleep.) If this isn't the case, then an excellent solution is to download and install a shareware utility such as Macaroni, JAW PseudoAnacron, or Anacron that will automate the maintenance activity regardless of whether the computer is turned off or asleep.  Dependence upon third-party utilities to run the periodic maintenance scripts was significantly reduced since Tiger.  These utilities have limited or no functionality with Snow Leopard or Lion and should not be installed.
    OS X automatically defragments files less than 20 MBs in size, so unless you have a disk full of very large files there's little need for defragmenting the hard drive. As for virus protection there are few if any such animals affecting OS X. You can protect the computer easily using the freeware Open Source virus protection software ClamXAV. Personally I would avoid most commercial anti-virus software because of their potential for causing problems. For more about malware see Macintosh Virus Guide.
    I would also recommend downloading a utility such as TinkerTool System, OnyX 2.4.3, or Cocktail 5.1.1 that you can use for periodic maintenance such as removing old log files and archives, clearing caches, etc.
    For emergency repairs install the freeware utility Applejack.  If you cannot start up in OS X, you may be able to start in single-user mode from which you can run Applejack to do a whole set of repair and maintenance routines from the command line.  Note that AppleJack 1.5 is required for Leopard. AppleJack 1.6 is compatible with Snow Leopard. There is no confirmation that this version also works with Lion.
    When you install any new system software or updates be sure to repair the hard drive and permissions beforehand. I also recommend booting into safe mode before doing system software updates.
    Get an external Firewire drive at least equal in size to the internal hard drive and make (and maintain) a bootable clone/backup. You can make a bootable clone using the Restore option of Disk Utility. You can also make and maintain clones with good backup software. My personal recommendations are (order is not significant):
    Carbon Copy Cloner
    Data Backup
    Deja Vu
    SuperDuper!
    SyncTwoFolders
    Synk Pro
    Synk Standard
    Tri-Backup
    Visit The XLab FAQs and read the FAQs on maintenance, optimization, virus protection, and backup and restore.
    Additional suggestions will be found in Mac Maintenance Quick Assist.
    Referenced software can be found at CNet Downloads or MacUpdate.
    Be sure you have an adequate amount of RAM installed for the number of applications you run concurrently. Be sure you leave a minimum of 10% of the hard drive's capacity as free space.

  • How to have 2 link colors on one page?

    Learning CSS and am unable to make this happen. What am I doing wrong?
    http://larrysullivandesign.com/sourceprintmedia.com/_contact.html
    http://larrysullivandesign.com/sourceprintmedia.com/sourceprintmedia.css
    The text links at page bottom (link-typeA) load up blue, even though the stylesheet calls for them to be gray (#E8E8E8), so they'll read on dark background.
    I want blue links site-wide, and grey at page bottom, only for link-typeA
    I want only one style sheet, if possible.
    How do I make all the link stage (active,hover, etc) colors apply to just link-typeA ? Only way I can see is in Page Properties, which makes one single embedded style on each page. confused....
    thanks!

    The divs are always referenced in the body and then you assign a class to that div. You can also asign a class to a table if you are using tables.
    First make a refernce to an external style sheet and place all your css in there.
    make your page and then assign the classes to the divs or tables.
    If you think of a div as a container then you assign a class of (footer) to the container. The reference then looks to the external style sheet of where to find that class and then finds the .footer and assigns the correct attributes to it such as the .footer a:link{color:#000;}
    you can also see the styles and assign them without handcoding by going to window/CSS styles

  • How can I change the background color of my podcast's iTunes page?

    My RSS feed just got accepted but now I need to customize the title, author, background color, and logo of my site. Does anyone know how to do this? Thank you!

    You can't change the background colour - it's white for audio and black for video. The other data can be changed by changing the appropriate tag in the feed, or if you're using a program or online service to make your podcast,. wherever they provide for entering this information.
    The title is carried in the 'title' tag; the author in the 'itunes:author' tag, and the 'podcast image' which appears on the Store page in the 'itunes: image' tag. Republish the feed after making the amendments: it will take a couple of days for the new data to appear, though the image may take several days.
    The image which appears in some podcasts in the bottom left-hand corner of iTunes when subscribing is not referenced in the feed but has to be actually embedded into the media file: please see this page:
    http://www.wilmut.webspace.virginmedia.com/notes/coverart.html
    You may find this general page on making a podcast helpful:
    http://rfwilmut.net/pc

  • HP LaserJet 400 Color MFP M475dw Problems in OS 10.9.4

    I'm using a 2013 MacBook Pro, 2.4 GHz Intel Core i7, 9 GB 1600 MHz DDR3.  I connect via wifi to the referenced printer (for almost a year now).  Since updating to OS 10.9.4 I am able to print only one document at a time.  Attempting to print a second document generates the message "Printer is not connected."  If I turn the printer off and back on again, I'm able to print one document.  Then the same thing occurs again.  I have done the following so far, all to no avail:
    Downloaded and installed latest driver (specifically for Mavericks) from HP
    Checked for Apple software updates and found none
    Reset the printing system (per instructions elsewhere in these forums)
    I updated to OS 10.9.4 on July 5th and that is when this problem started.  Where do I go from here???

    And BTW, here's a repost of what I posted on July 7th:
    I'm running a 2013 Macbook Pro, 2.4 GHz Intel Core i7, 8 GB 1600 MHz DDR3, OS version 10.9.4 (updated to this OS version 5 days ago, on July 2nd).  For a little less than a year I've been printing to a HP LaserJet 400 Color MFP M475dw via wireless connection.  A few weeks ago I began to have numerous "printer is not connected" events, and it reached the point I could not print anything - from my MacBook, my iPad Air, or my iPhone 5S.  I discovered there was an updated printer driver on HP's website, specifically for OS 10.9.  Downloaded and installed it, and the problem was seemingly solved.
    Then I updated the OS to 10.9.4.  AARRRRGH!!!!!!  For the last 5 days, the printer will - sometimes - print the first document in a queue of 2 or more and then, while the printer is still "running," tell me the printer is not connected.  I turn the printer off and back on, get one print job, then have to repeat the process.  Here are all the things I've tried to resolve the issue:
    Verified settings on the printer to make sure everything is set up properly
    Restarted Airport Extreme, printer, and MacBook (multiple times) -- clarification:  I turned off both the MacBook and the printer, then unplugged Airport for a few minutes, replugged it, restarted the printer, then restarted the MacBook
    Reset the printing system (as suggested elsewhere in the Support forums), which basically removes all printers from the MacBook, then lets you add back those that you want - presumably with the most current driver(s).
    Searched help/support forums on Apple, HP, and the internet in general
    Found a firmware update for the printer on HP's website -- but it is not compatible with OS 10.9 (only goes up through 10.8).  I downloaded it and tried, even though 10.9 was not listed, and the "app" wouldn't even open.
    All of these efforts have been to no avail.  The problem persists, and I'm at my wit's end how to solve it.  HELP, please..........anyone??????

  • OS 10.5 color-wheeling for 10 seconds at a time randomly.

    Hello, I'm running a gma950 core 2 duo macbook with 2GB ram. Even as I type this, every app, the dock... everything, will freeze for 6-12 seconds and color-wheel. At such a time, only the mouse and hotcorners work. I can apple-tab through programs but all are non-responsive. These freeze periods seem to come in waves... with about 4 seconds of downtime between each freeze, and 8+ freezes at a time. I have restarted my computer several times, and am wondering how to diagnose and fix this. Could it be a problem with hardware such as my drive? Would erasing my hard drive and installing 10.6 fix it? Nothing too important on here (not that it's unable to be used anyway) but it's obviously annoying. This is the only computer I have available. Thanks.

    No, repairing permissions isn't necessary nor does it fix anything. Perhaps you need to reduce the number of applications you have open concurrently. You have the bare minimum of free space on your hard drive. You could replace it with a larger, faster drive.
    Did you check out the site reference I provided?
    Meanwhile you can do some maintenance:
    Kappy's Personal Suggestions for OS X Maintenance
    For disk repairs use Disk Utility. For situations DU cannot handle the best third-party utilities are: Disk Warrior; DW only fixes problems with the disk directory, but most disk problems are caused by directory corruption; Disk Warrior 4.x is now Intel Mac compatible. TechTool Pro provides additional repair options including file repair and recovery, system diagnostics, and disk defragmentation. TechTool Pro 4.5.1 or higher are Intel Mac compatible; Drive Genius is similar to TechTool Pro in terms of the various repair services provided. Versions 1.5.1 or later are Intel Mac compatible.
    OS X performs certain maintenance functions that are scheduled to occur on a daily, weekly, or monthly period. The maintenance scripts run in the early AM only if the computer is turned on 24/7 (no sleep.) If this isn't the case, then an excellent solution is to download and install a shareware utility such as Macaroni, JAW PseudoAnacron, or Anacron that will automate the maintenance activity regardless of whether the computer is turned off or asleep. Dependence upon third-party utilities to run the periodic maintenance scripts had been significantly reduced in Tiger and Leopard. These utilities have limited or no functionality with Snow Leopard and should not be installed.
    OS X automatically defrags files less than 20 MBs in size, so unless you have a disk full of very large files there's little need for defragmenting the hard drive. As for virus protection there are few if any such animals affecting OS X. You can protect the computer easily using the freeware Open Source virus protection software ClamXAV. Personally I would avoid most commercial anti-virus software because of their potential for causing problems.
    I would also recommend downloading the shareware utility TinkerTool System that you can use for periodic maintenance such as removing old logfiles and archives, clearing caches, etc. Other utilities are also available such as Onyx, Leopard Cache Cleaner, CockTail, and Xupport, for example.
    For emergency repairs install the freeware utility Applejack. If you cannot start up in OS X, you may be able to start in single-user mode from which you can run Applejack to do a whole set of repair and maintenance routines from the commandline. Note that AppleJack 1.5 is required for Leopard. AppleJack 1.6 is compatible with Snow Leopard.
    When you install any new system software or updates be sure to repair the hard drive and permissions beforehand. I also recommend booting into safe mode before doing system software updates.
    Get an external Firewire drive at least equal in size to the internal hard drive and make (and maintain) a bootable clone/backup. You can make a bootable clone using the Restore option of Disk Utility. You can also make and maintain clones with good backup software. My personal recommendations are (order is not significant):
    Backuplist
    Carbon Copy Cloner
    Data Backup
    Deja Vu
    iBackup
    JaBack
    Silver Keeper
    MimMac
    Retrospect
    Super Flexible File Synchronizer
    ynchronizer
    SuperDuper!
    Synchronize Pro! X
    SyncTwoFolders
    Synk Pro
    Synk Standard
    Tri-Backup
    Visit The XLab FAQs and read the FAQs on maintenance, optimization, virus protection, and backup and restore.
    Additional suggestions will be found in Mac Maintenance Quick Assist.
    Referenced software can be found at www.versiontracker.com and www.macupdate.com.

  • JTree custom renderer setting selection background color problem

    Hi,
    I have a JTree with a custom icon renderer that displays an icon. The JTree is part of a TreeTable component. Iam having a problem setting the selection background uniformly for the entire row. There is no problem when there is no row selected in the JTable.
    My present code looks like this:
    Iam overriding paint in my renderer which extends DefaultCellRenderer.
           super.paint(g);
            Color bColor = null;
            if(!m_selected) {
                 if(currRow % 2 == 0) {
                      bColor = Color.WHITE;
                 } else {
                                                    bColor = backColor;
            } else {
                 bColor = table.getSelectionBackground();                  bColor = getRowSelectionColor();
         if(bColor != null) {
                           g.setColor(bColor);
             if(!m_selected) {
                   g.setXORMode(new Color(0xFF, 0xFF, 0xFF));
             } else {
                 g.setXORMode(new Color(0x00, 0x00, 0x00));
                  I have a color I arrive at using some algorithm that I want using method getRowSelectionColor(). The other cells in the row have this color. But the cell containing the tree node shows different color. Iam not able to arrive at the right combination of the color to set and the xor color so my tree node also looks like the other cells in the row.
    It is not a problem really as the table still looks good. Its just that the tree node looks like it has been highlighted and this might cause a problem when a table cell is highlighed later on in the application ( two cells in the row would be highlighted causing confusion).
    Any help would be appreciated.
    Regards,
    vidyut

    Hi Camickr,
    Thanks for the reply. Iam sorry I didn't include the sources the first time around. There were too many of them. I have created a small, self-contained, compilable program that demonstrates the problem and including it herewith. Still there's quite many files but they are all needed Iam afraid. The only one you will have to concern yourself fior this problem is the file IconRenderer.java. The treenode background and the other cells background are not in sync when table row is not selected in this example though. But they are in my real program. I just need them to be in sync i.e have the same background color when the row is selected.
    Your help would be very much appreciated.
    These are the files that are included below:
    1. AbstractTreeTableModel.java
    2. Bookmarks.java
    3. BookmarksModel.java
    4. DynamicTreeTableModel.java
    5. IconRenderer.java
    6. IndicatorRenderer.java
    7. JTreeTable.java
    8. TreeTableExample3.java (contains main)
    9. TreeTableModel.java
    10. TreeTableModelAdapter.java
    The copyright and javadocs information has been stripped for clarity.
    cheers,
    vidyut
    // AbstractTreeTableModel.java BEGIN
    import javax.swing.tree.*;
    import javax.swing.event.*;
    public abstract class AbstractTreeTableModel implements TreeTableModel {
        protected Object root;    
        protected EventListenerList listenerList = new EventListenerList();
        public AbstractTreeTableModel(Object root) {
            this.root = root;
        // Default implementations for methods in the TreeModel interface.
        public Object getRoot() {
            return root;
        public boolean isLeaf(Object node) {
            return getChildCount(node) == 0;
        public void valueForPathChanged(TreePath path, Object newValue) {}
        // This is not called in the JTree's default mode:
        // use a naive implementation.
        public int getIndexOfChild(Object parent, Object child) {
            for (int i = 0; i < getChildCount(parent); i++) {
             if (getChild(parent, i).equals(child)) {
                 return i;
         return -1;
        public void addTreeModelListener(TreeModelListener l) {
            listenerList.add(TreeModelListener.class, l);
        public void removeTreeModelListener(TreeModelListener l) {
            listenerList.remove(TreeModelListener.class, l);
        protected void fireTreeNodesChanged(Object source, Object[] path,
                                            int[] childIndices,
                                            Object[] children) {
            // Guaranteed to return a non-null array
            Object[] listeners = listenerList.getListenerList();
            TreeModelEvent e = null;
            // Process the listeners last to first, notifying
            // those that are interested in this event
            for (int i = listeners.length-2; i>=0; i-=2) {
                if (listeners==TreeModelListener.class) {
    // Lazily create the event:
    if (e == null)
    e = new TreeModelEvent(source, path,
    childIndices, children);
    ((TreeModelListener)listeners[i+1]).treeNodesChanged(e);
    protected void fireTreeNodesInserted(Object source, Object[] path,
    int[] childIndices,
    Object[] children) {
    // Guaranteed to return a non-null array
    Object[] listeners = listenerList.getListenerList();
    TreeModelEvent e = null;
    // Process the listeners last to first, notifying
    // those that are interested in this event
    for (int i = listeners.length-2; i>=0; i-=2) {
    if (listeners[i]==TreeModelListener.class) {
    // Lazily create the event:
    if (e == null)
    e = new TreeModelEvent(source, path,
    childIndices, children);
    ((TreeModelListener)listeners[i+1]).treeNodesInserted(e);
    protected void fireTreeNodesRemoved(Object source, Object[] path,
    int[] childIndices,
    Object[] children) {
    // Guaranteed to return a non-null array
    Object[] listeners = listenerList.getListenerList();
    TreeModelEvent e = null;
    // Process the listeners last to first, notifying
    // those that are interested in this event
    for (int i = listeners.length-2; i>=0; i-=2) {
    if (listeners[i]==TreeModelListener.class) {
    // Lazily create the event:
    if (e == null)
    e = new TreeModelEvent(source, path,
    childIndices, children);
    ((TreeModelListener)listeners[i+1]).treeNodesRemoved(e);
    protected void fireTreeStructureChanged(Object source, Object[] path,
    int[] childIndices,
    Object[] children) {
    // Guaranteed to return a non-null array
    Object[] listeners = listenerList.getListenerList();
    TreeModelEvent e = null;
    // Process the listeners last to first, notifying
    // those that are interested in this event
    for (int i = listeners.length-2; i>=0; i-=2) {
    if (listeners[i]==TreeModelListener.class) {
    // Lazily create the event:
    if (e == null)
    e = new TreeModelEvent(source, path,
    childIndices, children);
    ((TreeModelListener)listeners[i+1]).treeStructureChanged(e);
    // Default impelmentations for methods in the TreeTableModel interface.
    public Class getColumnClass(int column) { return Object.class; }
    public boolean isCellEditable(Object node, int column) {
    return getColumnClass(column) == TreeTableModel.class;
    public void setValueAt(Object aValue, Object node, int column) {}
    // Left to be implemented in the subclass:
    * public Object getChild(Object parent, int index)
    * public int getChildCount(Object parent)
    * public int getColumnCount()
    * public String getColumnName(Object node, int column)
    * public Object getValueAt(Object node, int column)
    // AbstractTreeTableModel.java END
    // Bookmarks.java BEGIN
    import java.io.*;
    import java.net.*;
    import java.util.*;
    import javax.swing.*;
    import javax.swing.tree.*;
    import javax.swing.text.*;
    import javax.swing.text.html.*;
    import javax.swing.text.html.parser.*;
    public class Bookmarks {
    /** The root node the bookmarks are added to. */
    private BookmarkDirectory root;
    * Creates a new Bookmarks object, with the entries coming from
    * <code>path</code>.
    public Bookmarks(String path) {
         root = new BookmarkDirectory("Bookmarks");
         if (path != null) {
         parse(path);
    * Returns the root of the bookmarks.
    public BookmarkDirectory getRoot() {
         return root;
    protected void parse(String path) {
         try {
         BufferedReader reader = new BufferedReader(new FileReader
                                       (path));
         new ParserDelegator().parse(reader, new CallbackHandler(), true);
         catch (IOException ioe) {
         System.out.println("IOE: " + ioe);
         JOptionPane.showMessageDialog(null, "Load Bookmarks",
                             "Unable to load bookmarks",
                             JOptionPane.ERROR_MESSAGE);
    private static final short NO_ENTRY = 0;
    private static final short BOOKMARK_ENTRY = 2;
    private static final short DIRECTORY_ENTRY = 3;
    private class CallbackHandler extends HTMLEditorKit.ParserCallback {
         /** Parent node that new entries are added to. */
         private BookmarkDirectory parent;
         /** The most recently parsed tag. */
         private HTML.Tag tag;
         /** The last tag encountered. */
         private HTML.Tag lastTag;
         * The state, will be one of NO_ENTRY, DIRECTORY_ENTRY,
    * or BOOKMARK_ENTRY.
         private short state;
         * Date for the next BookmarkDirectory node.
         private Date parentDate;
         * The values from the attributes are placed in here. When the
         * text is encountered this is added to the node hierarchy and a
    * new instance is created.
         private BookmarkEntry lastBookmark;
         * Creates the CallbackHandler.
         public CallbackHandler() {
         parent = root;
         lastBookmark = new BookmarkEntry();
         // HTMLEditorKit.ParserCallback methods
         * Invoked when text in the html document is encountered. Based on
         * the current state, this will either: do nothing
    * (state == NO_ENTRY),
         * create a new BookmarkEntry (state == BOOKMARK_ENTRY) or
    * create a new
         * BookmarkDirectory (state == DIRECTORY_ENTRY). If state is
    * != NO_ENTRY, it is reset to NO_ENTRY after this is
    * invoked.
    public void handleText(char[] data, int pos) {
         switch (state) {
         case NO_ENTRY:
              break;
         case BOOKMARK_ENTRY:
              // URL.
              lastBookmark.setName(new String(data));
    parent.add(lastBookmark);
    lastBookmark = new BookmarkEntry();
              break;
         case DIRECTORY_ENTRY:
              // directory.
              BookmarkDirectory newParent = new
                   BookmarkDirectory(new String(data));
              newParent.setCreated(parentDate);
              parent.add(newParent);
              parent = newParent;
              break;
         default:
              break;
    state = NO_ENTRY;
         * Invoked when a start tag is encountered. Based on the tag
         * this may update the BookmarkEntry and state, or update the
         * parentDate.
         public void handleStartTag(HTML.Tag t, MutableAttributeSet a,
                        int pos) {
         lastTag = tag;
         tag = t;
         if (t == HTML.Tag.A && lastTag == HTML.Tag.DT) {
    long lDate;
              // URL
              URL url;
              try {
              url = new URL((String)a.getAttribute(HTML.Attribute.HREF));
              } catch (MalformedURLException murle) {
              url = null;
              lastBookmark.setLocation(url);
              // created
              Date date;
              try {
    lDate = Long.parseLong((String)a.getAttribute("add_date"));
    if (lDate != 0l) {
    date = new Date(1000l * lDate);
    else {
    date = null;
              } catch (Exception ex) {
              date = null;
              lastBookmark.setCreated(date);
              // last visited
              try {
    lDate = Long.parseLong((String)a.
    getAttribute("last_visit"));
    if (lDate != 0l) {
    date = new Date(1000l * lDate);
    else {
    date = null;
              } catch (Exception ex) {
              date = null;
              lastBookmark.setLastVisited(date);
              state = BOOKMARK_ENTRY;
         else if (t == HTML.Tag.H3 && lastTag == HTML.Tag.DT) {
              // new node.
              try {
              parentDate = new Date(1000l * Long.parseLong((String)a.
                                  getAttribute("add_date")));
              } catch (Exception ex) {
              parentDate = null;
              state = DIRECTORY_ENTRY;
         * Invoked when the end of a tag is encountered. If the tag is
         * a DL, this will set the node that parents are added to the current
         * nodes parent.
         public void handleEndTag(HTML.Tag t, int pos) {
         if (t == HTML.Tag.DL && parent != null) {
              parent = (BookmarkDirectory)parent.getParent();
    public static class BookmarkDirectory extends DefaultMutableTreeNode {
         /** Dates created. */
         private Date created;
         public BookmarkDirectory(String name) {
         super(name);
         public void setName(String name) {
         setUserObject(name);
         public String getName() {
         return (String)getUserObject();
         public void setCreated(Date date) {
         this.created = date;
         public Date getCreated() {
         return created;
    public static class BookmarkEntry extends DefaultMutableTreeNode {
         /** User description of the string. */
         private String name;
         /** The URL the bookmark represents. */
         private URL location;
         /** Dates the URL was last visited. */
         private Date lastVisited;
         /** Date the URL was created. */
         private Date created;
         public void setName(String name) {
         this.name = name;
         public String getName() {
         return name;
         public void setLocation(URL location) {
         this.location = location;
         public URL getLocation() {
         return location;
         public void setLastVisited(Date date) {
         lastVisited = date;
         public Date getLastVisited() {
         return lastVisited;
         public void setCreated(Date date) {
         this.created = date;
         public Date getCreated() {
         return created;
         public String toString() {
         return getName();
    // Bookmarks.java END
    // BookmarksModel.java BEGIN
    import java.util.Date;
    public class BookmarksModel extends DynamicTreeTableModel {
    * Names of the columns.
    private static final String[] columnNames =
    { "Name", "Location", "Last Visited", "Created" };
    * Method names used to access the data to display.
    private static final String[] methodNames =
    { "getName", "getLocation", "getLastVisited","getCreated" };
    * Method names used to set the data.
    private static final String[] setterMethodNames =
    { "setName", "setLocation", "setLastVisited","setCreated" };
    private static final Class[] classes =
    { TreeTableModel.class, String.class, Date.class, Date.class };
    public BookmarksModel(Bookmarks.BookmarkDirectory root) {
         super(root, columnNames, methodNames, setterMethodNames, classes);
    public boolean isCellEditable(Object node, int column) {
         switch (column) {
         case 0:
         // Allow editing of the name, as long as not the root.
         return (node != getRoot());
         case 1:
         // Allow editing of the location, as long as not a
         // directory
         return (node instanceof Bookmarks.BookmarkEntry);
         default:
         // Don't allow editing of the date fields.
         return false;
    // BookmarksModel.java END
    // DynamicTreeTableModel.java BEGIN
    import java.lang.reflect.*;
    import javax.swing.tree.*;
    public class DynamicTreeTableModel extends AbstractTreeTableModel {
    /** Names of the columns, used for the TableModel getColumnName method. */
    private String[] columnNames;
    private String[] methodNames;
    private String[] setterMethodNames;
    /** Column classes, used for the TableModel method getColumnClass. */
    private Class[] cTypes;
    public DynamicTreeTableModel(TreeNode root, String[] columnNames,
                        String[] getterMethodNames,
                        String[] setterMethodNames,
                        Class[] cTypes) {
         super(root);
         this.columnNames = columnNames;
         this.methodNames = getterMethodNames;
         this.setterMethodNames = setterMethodNames;
         this.cTypes = cTypes;
    public int getChildCount(Object node) {
         return ((TreeNode)node).getChildCount();
    public Object getChild(Object node, int i) {
         return ((TreeNode)node).getChildAt(i);
    public boolean isLeaf(Object node) {
         return ((TreeNode)node).isLeaf();
    public int getColumnCount() {
         return columnNames.length;
    public String getColumnName(int column) {
         if (cTypes == null || column < 0 || column >= cTypes.length) {
         return null;
         return columnNames[column];
    public Class getColumnClass(int column) {
         if (cTypes == null || column < 0 || column >= cTypes.length) {
         return null;
         return cTypes[column];
    public Object getValueAt(Object node, int column) {
         try {
         Method method = node.getClass().getMethod(methodNames[column],
                                  null);
         if (method != null) {
              return method.invoke(node, null);
         catch (Throwable th) {}
         return null;
    * Returns true if there is a setter method name for column
    * <code>column</code>. This is set in the constructor.
    public boolean isCellEditable(Object node, int column) {
    return (setterMethodNames != null &&
         setterMethodNames[column] != null);
    // Note: This looks up the methods each time! This is rather inefficient;
    // it should really be changed to cache matching
    // methods/constructors
    // based on <code>node</code>'s class, and code>aValue</code>'s
    //class.
    public void setValueAt(Object aValue, Object node, int column) {
         boolean found = false;
         try {
         // We have to search through all the methods since the
         // types may not match up.
         Method[] methods = node.getClass().getMethods();
         for (int counter = methods.length - 1; counter >= 0; counter--) {
              if (methods[counter].getName().equals
              (setterMethodNames[column]) && methods[counter].
              getParameterTypes() != null && methods[counter].
              getParameterTypes().length == 1) {
              // We found a matching method
              Class param = methods[counter].getParameterTypes()[0];
              if (!param.isInstance(aValue)) {
                   // Yes, we can use the value passed in directly,
                   // no coercision is necessary!
                   if (aValue instanceof String &&
                   ((String)aValue).length() == 0) {
                   // Assume an empty string is null, this is
                   // probably bogus for here.
                   aValue = null;
                   else {
                   // Have to attempt some sort of coercision.
                   // See if the expected parameter type has
                   // a constructor that takes a String.
                   Constructor cs = param.getConstructor
                   (new Class[] { String.class });
                   if (cs != null) {
                        aValue = cs.newInstance(new Object[]
                                       { aValue });
                   else {
                        aValue = null;
              // null either means it was an empty string, or there
              // was no translation. Could potentially deal with these
              // differently.
              methods[counter].invoke(node, new Object[] { aValue });
              found = true;
              break;
         } catch (Throwable th) {
         System.out.println("exception: " + th);
         if (found) {
         // The value changed, fire an event to notify listeners.
         TreeNode parent = ((TreeNode)node).getParent();
         fireTreeNodesChanged(this, getPathToRoot(parent),
                        new int[] { getIndexOfChild(parent, node) },
                        new Object[] { node });
    public TreeNode[] getPathToRoot(TreeNode aNode) {
    return getPathToRoot(aNode, 0);
    private TreeNode[] getPathToRoot(TreeNode aNode, int depth) {
    TreeNode[] retNodes;
         // This method recurses, traversing towards the root in order
         // size the array. On the way back, it fills in the nodes,
         // starting from the root and working back to the original node.
    /* Check for null, in case someone passed in a null node, or
    they passed in an element that isn't rooted at root. */
    if(aNode == null) {
    if(depth == 0)
    return null;
    else
    retNodes = new TreeNode[depth];
    else {
    depth++;
    if(aNode == root)
    retNodes = new TreeNode[depth];
    else
    retNodes = getPathToRoot(aNode.getParent(), depth);
    retNodes[retNodes.length - depth] = aNode;
    return retNodes;
    // DynamicTreeTableModel.java END
    // IconRenderer.java BEGIN
    import java.awt.*;
    import javax.swing.*;
    import javax.swing.tree.*;
    import javax.swing.plaf.basic.BasicTreeUI;
    class IconRenderer extends DefaultTreeCellRenderer
    // Color backColor = new Color(0xD0, 0xCC, 0xFF);
    Color backColor = new Color(0xF0, 0xF0, 0xE0);
    String tipText = "";
    JTree tree;
    int currRow = 0;
    boolean m_selected;
    JTable table;
    public IconRenderer(JTree tree, JTable table) {
    this.table = table;
    // setBackground(backColor);
    setBackground(Color.GREEN);
    setForeground(Color.black);
         this.tree = tree;
    public Component getTreeCellRendererComponent(JTree tree, Object value,
    boolean selected,
    boolean expanded, boolean leaf,
    int row, boolean hasFocus) {
         Object node = null;
         super.getTreeCellRendererComponent(
    tree, value, selected,
    expanded, leaf, row,
    hasFocus);
         TreePath treePath = tree.getPathForRow(row);
    if(treePath != null)
              node = treePath.getLastPathComponent();
    currRow = row;
    m_selected = selected;
    DefaultMutableTreeNode itc = null;
    if (node instanceof DefaultMutableTreeNode) {
    itc = (DefaultMutableTreeNode)node;
         setClosedIcon(closedIcon);
    setOpenIcon(openIcon);
    return this;
    /* Override the default to send back different strings for folders and leaves. */
    public String getToolTipText() {
    return tipText;
    * Paints the value. The background is filled based on selected.
    public void paint(Graphics g) {
         super.paint(g);
         Color bColor = null;
         if(!m_selected) {
              System.out.println(" iconren not sel currRow " + currRow);
              if(currRow % 2 == 0) {
                   bColor = Color.WHITE;
              } else {
              bColor = backColor;
         } else {
              bColor = table.getSelectionBackground();
              System.out.println("in else selbg = " + bColor);           
              bColor = new Color(0xF0, 0xCC, 0x92);
              System.out.println(" bColor aft = " + bColor);           
         int imageOffset = -1;
         if(bColor != null) {
         imageOffset = getLabelStart();
         g.setColor(bColor);
         if(!m_selected) {
              System.out.println(" not sel setting white ");
              g.setXORMode(new Color(0xFF, 0xFF, 0xFF));
         } else {
    //          g.setXORMode(new Color(0xCC, 0xCC, 0x9F));
              g.setXORMode(new Color(0x00, 0x00, 0x00));
              System.out.println(" using color = " + g.getColor());           
         if(getComponentOrientation().isLeftToRight()) {
         g.fillRect(imageOffset, 0, getWidth() - 1 - imageOffset,
                   getHeight());
         } else {
         g.fillRect(0, 0, getWidth() - 1 - imageOffset,
                   getHeight());
    private int getLabelStart() {
         Icon currentI = getIcon();
         if(currentI != null && getText() != null) {
         return currentI.getIconWidth() + Math.max(0, getIconTextGap() - 1);
         return 0;
    // IconRenderer.java END
    // IndicatorRenderer.java BEGIN
    // import java.awt.*;
    import javax.swing.*;
    import javax.swing.border.*;
    import javax.swing.event.*;
    import javax.swing.tree.*;
    import javax.swing.table.*;
    import javax.swing.table.*;
    import javax.swing.plaf.basic.*;
    import java.awt.event.*;
    import java.util.EventObject;
    import java.text.NumberFormat;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.StringTokenizer;
    import java.util.Arrays;
    class IndicatorRenderer extends DefaultTableCellRenderer {
    /** Makes sure the number of displayed in an internationalized
    * manner. */
    protected NumberFormat formatter;
    /** Row that is currently being painted. */
    protected int lastRow;
    protected int reloadRow;
    protected int reloadCounter;
    protected TreeTableModel treeTableModel;
    protected TreeTableModelAdapter treeTblAdapter;
    protected JTable table;
    Component renderer = null;
    Color backColor = new Color(0xF0, 0xF0, 0xE0);
    IndicatorRenderer(TreeTableModelAdapter treeTblAdapter, TreeTableModel treeTableModel) {
         setHorizontalAlignment(JLabel.RIGHT);
         setFont(new Font("serif", Font.BOLD, 12));
         this.treeTableModel = treeTableModel;
         this.treeTblAdapter = treeTblAdapter;
    * Invoked as part of DefaultTableCellRenderers implemention. Sets
    * the text of the label.
    public void setValue(Object value) {
    /* setText((value == null) ? "---" : formatter.format(value)); */
         setText((value == null) ? "---" : (String) value.toString());
    * Returns this.
    public Component getTableCellRendererComponent(JTable table,
    Object value, boolean isSelected, boolean hasFocus,
    int row, int column) {
         renderer = super.getTableCellRendererComponent(table, value, isSelected,
    hasFocus, row, column);
         lastRow = row;
         this.table = table;
              if(isSelected) {
                   doMask(hasFocus, isSelected);
              } else
              setBackground(table.getBackground());
    return renderer;
    * If the row being painted is also being reloaded this will draw
    * a little indicator.
    public void paint(Graphics g) {
         super.paint(g);
    private void doMask(boolean hasFocus, boolean selected) {
              maskBackground(hasFocus, selected);
    private void maskBackground(boolean hasFocus, boolean selected) {
              Color seed = null;
              seed = table.getSelectionBackground();
              Color color = seed;
              if (color != null) {
                   setBackground(
    new Color(0xF0, 0xCC, 0x92));
    // IndicatorRenderer.java END
    // JTreeTable.java BEGIN
    import java.awt.*;
    import javax.swing.*;
    import javax.swing.border.*;
    import javax.swing.event.*;
    import javax.swing.tree.*;
    import javax.swing.table.*;
    import java.awt.event.*;
    import java.util.EventObject;
    public class JTreeTable extends JTable {
    /** A subclass of JTree. */
    protected TreeTableCellRenderer tree;
    protected IndicatorRenderer indicatorRenderer = null;
    public JTreeTable(TreeTableModel treeTableModel) {
         super();
         // Creates the tree. It will be used as a renderer and editor.
         tree = new TreeTableCellRenderer(treeTableModel);
         TreeTableModelAdapter tdap = new TreeTableModelAdapter(treeTableModel, tree);
         // Installs a tableModel representing the visible rows in the tree.
         super.setModel(tdap);
         // Forces the JTable and JTree to share their row selection models.
         ListToTreeSelectionModelWrapper selectionWrapper = new
         ListToTreeSelectionModelWrapper();
         tree.setSelectionModel(selectionWrapper);
         setSelectionModel(selectionWrapper.getListSelectionModel());
         // Installs the tree editor renderer and editor.
         setDefaultRenderer(TreeTableModel.class, tree);
         setDefaultEditor(TreeTableModel.class, new TreeTableCellEditor());
         indicatorRenderer = new IndicatorRenderer(tdap, treeTableModel);     
         // No grid.
         setShowGrid(false);
         // No intercell spacing
         setIntercellSpacing(new Dimension(0, 0));     
         // And update the height of the trees row to match that of
         // the table.
         //if (tree.getRowHeight() < 1) {
         // Metal looks better like this.
         setRowHeight(20);
    public TableCellRenderer getCellRenderer(int row, int col) {
              if(col == 0)
              return tree;
              else
              return indicatorRenderer;     
    public void updateUI() {
         super.updateUI();
         if(tree != null) {
         tree.updateUI();
         // Do this so that the editor is referencing the current renderer
         // from the tree. The renderer can potentially change each time
         // laf changes.
         setDefaultEditor(TreeTableModel.class, new TreeTableCellEditor());
         // Use the tree's default foreground and background colors in the
         // table.
    LookAndFeel.installColorsAndFont(this, "Tree.background",
    "Tree.foreground", "Tree.font");
    public int getEditingRow() {
    return (getColumnClass(editingColumn) == TreeTableModel.class) ? -1 :
         editingRow;
    private int realEditingRow() {
         return editingRow;
    public void sizeColumnsToFit(int resizingColumn) {
         super.sizeColumnsToFit(resizingColumn);
         if (getEditingColumn() != -1 && getColumnClass(editingColumn) ==
         TreeTableModel.class) {
         Rectangle cellRect = getCellRect(realEditingRow(),
                             getEditingColumn(), false);
    Component component = getEditorComponent();
         component.setBounds(cellRect);
    component.validate();
    public void setRowHeight(int rowHeight) {
    super.setRowHeight(rowHeight);
         if (tree != null && tree.getRowHeight() != rowHeight) {
    tree.setRowHeight(getRowHeight());
    public JTree getTree() {
         return tree;
    public boolean editCellAt(int row, int column, EventObject e){
         boolean retValue = super.editCellAt(row, column, e);
         if (retValue && getColumnClass(column) == TreeTableModel.class) {
         repaint(getCellRect(row, column, false));
         return retValue;
    public class TreeTableCellRenderer extends JTree implements
         TableCellRenderer {
         /** Last table/tree row asked to renderer. */
         protected int visibleRow;
         /** Border to draw around the tree, if this is non-null, it will
         * be painted. */
         protected Border highlightBorder;
         public TreeTableCellRenderer(Tr

  • "hybrid" color found in iTunes's "Devices - iPod" usage meter

    Hi there,
    I don't believe this is a quirk with iTunes, but it still eludes me nonetheless. I noticed it this morning for the first time when disconnecting my iPod.
    Granted, we have that handy color-coded usage meter showing how much storage space we have left on the iPod (click on the iPod icon under the Devices tab in the sidebar if you are unsure what I'm referencing), along with the type of media occupying the used space and each having its own unique color: blue for music, yellow for photos, purple for video, orange for the mysterious "other", etc.
    This morning, I noticed for the first time that I have a strange indigo-colored section, spliced somewhere between where the music (blue) and video (purple) are indicated.
    The only thing I could possibly equate this to was space allocated for "Music Videos" (the obvious hybrid between Music and Video).
    I couldn't come up with any effective search results on the board - I was curious if some Level 3+'s noticed this, and could shed some light on what indigo could indicate.
    (FYI - I would love to have provided a screenshot, but I am at work at the moment)
    Just curious - thanks!
    Steve

    Jake Simonds-Malamud wrote:
    http://www.flickr.com/photos/62915803@N00/1971734798/
    thats what we're talking about.
    Exactly.
    Never did get a solid answer on this one, but judging from the fact that others out there see this indigo in the iPod spectrum, I'm going to say that it is from Music Videos.
    I'm going to leave this one as unanswered until I'm daring enough (or bored enough, depending upon your point of view...) to delete the Music Videos from my iPod and see if the color changes.
    Steve

  • Auto update colors (from custom swatch library) in documents..

    Hi all,
    I searched the forums for all I could, but found no solution for this one...
    So here goes.
    Is there a way to use a 'user defined' swatch library to (auto)update colors in several artworks/files that use that specific swatch library.
    I know I could reload and 'merge' all the swatches from the library with the ones used in the file (with the same name).
    Select the one you want to keep and then the one you'd like to overwrite, merge!
    But here's what I tried and what I think should be possible..
    I have twelve files that all use colours from one 'user defined' swatch library ['Human'], so all twelve files have the same 'skin' colour where needed.
    Now I need the 'skin' colour (in alle twelve files) to be a shade darker...
    My idea was to open the swatch library 'Human' in Illustrator, change the swatch called 'skin' and save.... Presto! All twelve files using this 'skin'colour should now be one shade darker...
    But this doesn't seem to work...
    Swatches are set to 'global'..
    What am I missing or will this be in the 'features requests' part of these forums next?
    Oh and I'm working in:
    Illustrator CS5, windows 7, 64 bit
    Kind regards,
    Erik

    As far as I know color swatches are referenced from the file itself, they are not like a linked image that can update all files using it. So, with swatches you have to apply the change to each file. Probably should be possible to automate this with a script.

  • Reproducible Long Standing Glitch (Actions or Color Engine?)

    I have a way to reproduce a serious Photoshop problem:
    Quite a long time ago I created a simple little action that allows me to create a new document and paste in the contents of the clipboard in one easy motion.  I assigned a function key to it so it makes it very easy for me to start a Photoshop editing session on an image in my clipboard.
    This always works fine with RGB images, which comprise the lion's share of what I work with.  However, occasionally I'll have a grayscale image in my clipboard and I'll try to use this action, and this causes Photoshop to fail in various ways, sometimes with error messages implying Adobe Color Engine problems, and sometimes locking it up entirely.
    Chris Cox:  Perhaps your being able to reproduce this problem as listed below can help you find and fix a difficult bug.
    The following is the source for the action.  You can download it from here.
    Action: New Image from Clipboard
      Make
       New: document
       Preset:  “Clipboard”
      Paste
       Anti-alias: none
      Merge Layers
      Select Current History State
      Make snapshot
       From: Current History State
       Name:  “New”
       Using: full document
       With replace existing
      Select snapshot “New”
      Set History Brush Source
       To: Current History State
      Clear History States of current document
    Here's how to reproduce the problem:
    1.  Load the above "New Image from Clipboard" action into your Actions palette.
    2.  Create a simple Grayscale image via File - New:
    3.  Using the gradient tool, render a gradient across the image (I'm not sure this is necessary for the bug, but it helps you to see if the image is handled correctly in a later step).
    4.  Select - All, then Edit - Copy.
    5.  Now do File - New and create an RGB color image:
    6.  Run my "New Image from Clipboard" action.
    7.  If the step above completes, Try to paint something on the grayscale image if possible with the paintbrush.
    After step 6 sometimes I'll see no image or a transparent background (as though the screen didn't update fully), sometimes a message will be emitted implying the grayscale image is being pasted into a color image.  Photoshop may lock up.  Sometimes it will actually appear to work, then step 7 will fail with an error message implying there's a problem with the Adobe Color Engine.
    I can reproduce this problem at will with recent versions of Photoshop, though sometimes (rarely) it takes a few tries.
    The weird part is that it will work fine if I go through the steps interactively.  Only when being run as an action on a grayscale image does it fail, and not always in the same way.
    Just a wild guess, but since it seems to have to do with working with a color image in the interim, I'm thinking the actions engine in the File - New step is referencing uninitialized storage somewhere.
    -Noel

    Thanks, guys!  Good luck with the fix.  Even one less time accidentally having Photoshop go south when I'm creating a new image will be a blessing!
    -Noel

Maybe you are looking for

  • Help with java.util.logging SocketHandler - Simple TCP Server

    I have a simple TCP serverString clientSentence;              ServerSocket welcomeSocket = new ServerSocket(5050);              while(true) {                 Socket connectionSocket = welcomeSocket.accept();                 BufferedReader inFromClien

  • How do I move around in mavericks without a scroll bar?

    how do I move around in mavericks without a scroll bar?

  • Locations

    Hi, I am having a problem with the Locations feature of Leopard (10.5.2). I use my Mac to connect to the internet in two primary places: at home, and at school. I use AirPort for both of them. At home, I have a pretty basic password protected Wireles

  • Retrieve the Purchase Order *TAX* Condition Records

    Hi, Tcode : ME23n Area  : Item Tab   : Invoice Tab in Item On clicking the button <b>taxes</b>  I can see different condition attached in the tax code. These taxes are available in KONH KONP table and the related Axxx table, (in my case A003 table).

  • Too big a file for server

    I've got a .wav file that's too big to email. Is there a way to reduce the file so that I can email it?