Script Bay UI suggestions welcome!

Hi all,
For those who have not been following the progress of Script Bay, I've just made some major improvements to the script editor (like undo/redo, automatic code indenting, etc.) and functionality of it in general: http://in-tools.com/wordpress/script-bay/script-bay-version-0-1-5
I've working on some smaller improvements now, but the next major improvement will hopefully be script categorizing. I'd like to give the option to categorize scripts and display them by category. What concerns me more than the technical hurdles to implement it is the UI hurdles. I'm having a hard time envisioning how a UI to create and apply (possibly multiple) categories to scripts should look like.
Anyone has ideas on how they'd like it to look?
Harbs

pkahrel wrote:
> Should the UI be universal,
You're right that it might become confusing and that probably not all categories make sense in all apps. But maybe you could distinguish between global and local categories. E.g., you could have the category Text in Ill and ID scripts. If you allow a global and a local Text category on all scripts, the user could then decide to display only app-specific text scripts or all of them.
I think I will make two main branches or categories: App specific, and Universal scripts. That should make it very clear what the categroies are.
Alternatively, maybe you could make Script Bay sensitive to the active apps so that it shows only the scripts for the running apps. Scripts are not cross-app, are they? So it probably doesn't make sense to show scripts for PhotoShop is PS isn't active.
There are actually two types of script folders in Script Bay: app-specific folders which only show up in a specific app, and cross app folders which show up in every app. I think the best way to present the info is by spliting the list into two like I did in the attached screen shot.
Does this look good?
> what categories should I include by default?
I would opt for this: Indesign: text (maybe too general), Find/change, notes, tables, graphics, index
Of the other apps, I use only PhotoShop and have so few scripts that categorisation isn't useful. Dreamweaver I use biut haven't scripted it.
Okay. I'll start with a few default categories, and add them as we go...
Harbs

Similar Messages

  • Script Bay UI suggestions

    There's a discussion going on over at the InDesign scripting forum about improvements I hope to add to Script Bay. http://forums.adobe.com/message/3213272#3213272
    I  could really use some input on how to implement some of these features  -- especially when it comes to cross-app issues. Any input is very  welcome!
    Harbs

    pkahrel wrote:
    > Should the UI be universal,
    You're right that it might become confusing and that probably not all categories make sense in all apps. But maybe you could distinguish between global and local categories. E.g., you could have the category Text in Ill and ID scripts. If you allow a global and a local Text category on all scripts, the user could then decide to display only app-specific text scripts or all of them.
    I think I will make two main branches or categories: App specific, and Universal scripts. That should make it very clear what the categroies are.
    Alternatively, maybe you could make Script Bay sensitive to the active apps so that it shows only the scripts for the running apps. Scripts are not cross-app, are they? So it probably doesn't make sense to show scripts for PhotoShop is PS isn't active.
    There are actually two types of script folders in Script Bay: app-specific folders which only show up in a specific app, and cross app folders which show up in every app. I think the best way to present the info is by spliting the list into two like I did in the attached screen shot.
    Does this look good?
    > what categories should I include by default?
    I would opt for this: Indesign: text (maybe too general), Find/change, notes, tables, graphics, index
    Of the other apps, I use only PhotoShop and have so few scripts that categorisation isn't useful. Dreamweaver I use biut haven't scripted it.
    Okay. I'll start with a few default categories, and add them as we go...
    Harbs

  • How can I get my stereo to play music videos from my Ipod Nano?  It comes up with the message "This device not supported".  Strangely my Iphone IS recognised.  The stereo, Ipod, and Iphone are less than 4 months old. Any suggestions welcome!

    How do I get my Ipod to play music videos through my theatre system?  I keep getting the message "This device not supported".  My theatre system WILL recognise my Iphone however.  The theatre system, Ipod, and Iphone are all less than 4 months old.  Any suggestions welcome!

    Check with the theater system vendor and see if their system is compatible with the Nano. The resolution on the Nano may be too low for the system.

  • IPhone 3GS keeps turning off/shutting down.Have done system restore but no improvement. Suggestions welcome.

    iPhone 3GS keeps turning off/shutting down. After numerous attempts I've managed to get it on again. Any ideas - could it be battery? Suggestions welcome.

    Try forcing the phone into recovery mode and restore as a new device.
    Follow these steps:
    iOS: How to back up your device and setup as a new device
    http://support.apple.com/kb/HT4137
    Doing this will help eliminate any possible software issue that could be causing this. Setting up a new device will bypass a backup with possible data corruption.
    If the issue continues after this, you should contact Apple for service for the phone as it will very likely be a hardware issue.

  • Pleeeease help!! iTunes driving me crazy! Any suggestions welcome

    When iTunes plays any track it freezes the whole computer when it gets to 11s into the track then becomes unfrozen at 24s. Media player doesn't do this so it has to be an iTunes problem. I have downloaded iTunes many times to try and fix/reinstall the software but nothing works. Please help! Any suggestions welcome!!

    I had a similar problem when I got my Mac. I had problems with both syncing to iPhone as well as Apple TV. I ended up deleting and reinstalling iTunes (make sure you get all the components, there's a KB out there on it). Then repairing permissions using the Disk Utility (reinstall iTunes after this), apparently that fixes a lot of sins in the Mac world. (The basic problem is permissions, or at least mine was.)
    I too was skeptical at first.

  • IMovie(v10.0.2) is unable to import iPhoto media (v9.5.1)  Suggestions welcome!

    I am unable to see the iPhoto media from iMovie.  I can see the iPhoto icon, but it is grayed out.  However, from Picasa, I CAN see the iPhoto media.  Suggestions welcome!

    Hello, Tomconn. 
    Thank you for visiting Apple Support Communities. 
    Here is an article that you may find helpful when experiencing this issue. 
    iLife: Cannot See iPhoto Files in Other iLife Applications
    http://support.apple.com/kb/ts1192
    Cheers,
    Jason H. 

  • I have just about given up trying to download Mavericks for my 6-month old iMac running OS X 10.8.5. Each time it gets to around 996mb and stops. Any suggestions welcome.

    I have just about given up trying to download Mavericks for my 6-month old iMac running OS X 10.8.5. Each time it gets to around 996mb and stops. Any suggestions welcome.

    Thanks Giancarlo. The problem turned out to be my modem/wireless router, which has now been replaced and the problem solved.

  • HT3576 Only receiving notifications to my iPhone but not to my iPad. Pretty sure they are both set up the same. Any suggestions welcome.

    Only receiving notifications to my iPhone but not to my iPad. Pretty sure they are both set up the same. Any suggestions welcome.

    Open the Settings app on teh iPad, go to Notifications and check to see what you have set up.
    Make sure Do Not Disturb isn't set to On.

  • HT1386 I am trying to sync my ipad3 to my itunes on a pc laptop, the ipad does not show up in the itunes left hand column. an ipod is already synced to the itunes. any suggestions welcome

    I am trying to sync my ipad3 to my itunes on a pc laptop, the ipad does not show up in the itunes left hand column. an ipod is already synced to the itunes. any suggestions welcome

    Hi lindaasw,
    Welcome to the Support Communities!
    Do you have the latest version of iTunes for Windows installed?  I would turn on the sidebar and the menu bar just to make sure you are seeing everything.  If the iPhone is still not recognized in iTunes, follow these troubleshooting steps:
    iTunes: Turning on iTunes menus in Windows 8 and 7
    http://support.apple.com/kb/HT5610
    iTunes 11: Frequently used features
    http://support.apple.com/kb/HT5649
    iOS: Device not recognized in iTunes for Windows
    http://support.apple.com/kb/TS1538
    Cheers,
      - Judy

  • PowerShell Script for Setting the Welcome Page View of a document set

    Hi,
    We are using document set in the document library and we have created the separate view in the document set and it will show only particular metadata columns. We need to change from default view to another view. For this, we need to write the power shell
    script and update the document set welcome page view link in the document set template. Please let me know how we can get this.
    Thanks,
    Mylsamy

    Hey Mylsamy,
    welcome page view is stored in $contenttype.XmlDocuments. Here is how you can change the view using powershell:
    $web = Get-SPWeb "WEBURL"
    $list = $web.Lists["LISTNAME"]
    $contenttype = $list.ContentTypes["CONTENTYPENAME"]
    $viewid = $list.Views["VIEWNAME"].Id
    $xmldocs = $contenttype.XmlDocuments
    foreach($xmldoc in $xmldocs)
    if($xmldoc.Contains("WelcomePageView"))
    Write-Host "XML contains WPV"
    $newview = [XML] @"
    <wpv:WelcomePageView xmlns:wpv="http://schemas.microsoft.com/office/documentsets/welcomepageview" ViewId="$viewid" />
    $xmldocs.Delete("http://schemas.microsoft.com/office/documentsets/welcomepageview")
    $xmldocs.Add($newview)
    break;
    $contenttype.Update($updateChildren, $false)
    Write-Host "Welcome Page View updated at " $list.Title
    Regards,
    Alexander 

  • First foray into Java, Suggestions welcome

    So I'm in the middle of the Collections trail, and I thought I'd make a new version of the Queue that orders it's items randomly (as opposed to priority or fifo). A sample case, and the one I used to make sure it worked, is as a deck of cards.
    Since this is the first non-hello world-ish thing I've done, I'd love any comments or suggestions you have.
    Also, I found it a little odd that I had to do that much wrapper code just to add a few things. I had thought that perhaps the AbstractQueue would be a better base, but I couldn't find where it was actually storing it's items, so that was out.
    import java.util.Collection;
    import java.util.Collections;
    import java.util.Iterator;
    import java.util.LinkedList;
    import java.util.List;
    import java.util.Queue;
    import java.util.Random;
    class RandomQueue<E> implements Queue<E> {
        private Queue<E> items = new LinkedList<E>();
        private Random rnd = new Random();
        public RandomQueue() {
            // nothing to see here
        public RandomQueue(Collection<E> c) {
            addAll(c);
        /** Inserts the item in a random location. */
        public synchronized boolean add(E e) {
            boolean flag = true;
            if (size() > 0) {
                ((List<E>)items).add(rnd.nextInt(size()), e);
            } else {
                flag = items.add(e);
            return flag;
        /** Adds all the items, then shuffles the Queue. */
        public synchronized boolean addAll(Collection<? extends E> c) {
            List<E> tmp = new LinkedList<E>(items);
            tmp.addAll(c);
            Collections.shuffle(tmp, rnd);
            items = (Queue<E>)tmp;
            return true;
        public void clear() {
            items.clear();
        public boolean contains(Object o) {
            return items.contains(o);
        public boolean containsAll(Collection<?> c) {
            return items.containsAll(c);
        public E element() {
            return items.element();
        public boolean isEmpty() {
            return items.isEmpty();
        public Iterator<E> iterator() {
            return items.iterator();
        public boolean offer(E e) {
            return items.offer(e);
        public E peek() {
            return items.peek();
        public E poll() {
            return items.poll();
        public E remove() {
            return items.remove();
        public boolean remove(Object o) {
            return items.remove(o);
        public boolean removeAll(Collection<?> c) {
            return items.removeAll(c);
        public boolean retainAll(Collection<?> c) {
            return items.retainAll(c);
        public int size() {
            return items.size();
        public Object[] toArray() {
            return items.toArray();
        public <T> T[] toArray(T[] a) {
            return items.toArray(a);
        @Override
        public String toString() {
            // get a decent toString()
            return ((List)items).toString();
        public static void main(String[] args) {
            System.out.println("This class is meant to be instantiated, not run directly.");
    public class Deck {
        // testsuite follows
        public static void main(String[] args) {
            System.out.println("First, add()ing each item...");
            RandomQueue<String> q = new RandomQueue<String>();
            String[] suits = {"Clubs", "Diamonds", "Hearts", "Spades"};
            String[] faces = {"Jack", "Queen", "King", "Ace"};
            System.out.println(q);
            for (String suit : suits) {
                for (int i=2; i<=10; i++) {
                    q.add(String.format("%s of %s", i, suit));
                for (String face : faces) {
                    q.add(String.format("%s of %s", face, suit));
            System.out.println(q);
            System.out.format("%nAnd now, add()ed all at once..%n");
            RandomQueue<String> q2 = new RandomQueue<String>();
            q2.addAll(q);
            System.out.println(q2);
            System.out.format("%nFinally, all added through constructor...%n");
            System.out.println(new RandomQueue<String>(q2));
            System.out.format("%nAnd now to remove() every item...%n");
            while (!q.isEmpty())
                System.out.println(q.remove());
            System.out.println(q);
            System.out.format("Random card: %s%n", new RandomQueue<String>(q2).remove());
    }

    And now for a little update. I really think it would be better to use an abstract base class, so I re-wrote it to do so. Then I added a Stack class that also extends this base. Again, suggestions/comments welcome./* To run:
    * -Save this as Deck.java
    * -$ javac Deck.java                       # compiles the source
    * -$ jar cfe Deck.jar Deck *.class         # builds a jar file
    * -$ java -jar Deck.jar                    # executes the jar
    import java.util.Collection;
    import java.util.Collections;
    import java.util.Iterator;
    import java.util.LinkedList;
    import java.util.List;
    import java.util.Queue;
    import java.util.Random;
    * Extended Abstract Queue.  add() and addAll() methods MUST be implemented,
    *      others as needed.
    abstract class AbstractQueueEx<E> implements Queue<E> {
        protected Queue<E> items = new LinkedList<E>();
        public abstract boolean add(E e);
        public abstract boolean addAll(Collection<? extends E> c);
        public AbstractQueueEx() {
            // nothing to see here
        public AbstractQueueEx(Collection<E> c) {
            addAll(c);
        public void clear() {
            items.clear();
        public boolean contains(Object o) {
            return items.contains(o);
        public boolean containsAll(Collection<?> c) {
            return items.containsAll(c);
        public E element() {
            return items.element();
        public boolean isEmpty() {
            return items.isEmpty();
        public Iterator<E> iterator() {
            return items.iterator();
        public boolean offer(E e) {
            return items.offer(e);
        public E peek() {
            return items.peek();
        public E poll() {
            return items.poll();
        public E remove() {
            return items.remove();
        public boolean remove(Object o) {
            return items.remove(o);
        public boolean removeAll(Collection<?> c) {
            return items.removeAll(c);
        public boolean retainAll(Collection<?> c) {
            return items.retainAll(c);
        public int size() {
            return items.size();
        public Object[] toArray() {
            return items.toArray();
        public <T> T[] toArray(T[] a) {
            return items.toArray(a);
        @Override
        public String toString() {
            // get a decent toString()
            return ((List)items).toString();
    * Items in this queue are stored in random order.
    class RandomQueue<E> extends AbstractQueueEx<E> {
        private static final Random rnd = new Random();
        public RandomQueue() {}
        public RandomQueue (Collection<E> c) {
            super(c);
        /** Inserts the item in a random location. */
        public synchronized boolean add(E e) {
            boolean flag = true;
            if (size() > 0) {
                ((List<E>)items).add(rnd.nextInt(size()), e);
            } else {
                flag = items.add(e);
            return flag;
        /** Adds all the items, then shuffles the Queue. */
        public synchronized boolean addAll(Collection<? extends E> c) {
            List<E> tmp = new LinkedList<E>(items);
            tmp.addAll(c);
            Collections.shuffle(tmp, rnd);
            items = (Queue<E>)tmp;
            return true;
    * LIFO queue.
    class Stack<E> extends AbstractQueueEx<E> {
        public Stack() {}
        public Stack(Collection<E> c) {
            super(c);
        /** Inserts the item in a random location. */
        public synchronized boolean add(E e) {
            ((List<E>)items).add(0, e);
            return true;
        /** Adds all the items, then shuffles the Queue. */
        public synchronized boolean addAll(Collection<? extends E> c) {
            /* Items come in, add them reversed, so that the last item in the
             * collection is the first remove()d
            List<E> tmp = new LinkedList<E>(c);
            Collections.reverse(tmp);
            tmp.addAll(items);
            items = (Queue<E>)tmp;
            return true;
    * Just a Stack with another name.
    class LIFOQueue<E> extends Stack<E> {
        public LIFOQueue() {}
        public LIFOQueue(Collection<E> c) {
            super(c);
    public class Deck {
        // testsuite follows
        public static void main(String[] args) {
            System.out.println("First, add()ing each item...");
            RandomQueue<String> q = new RandomQueue<String>();
            String[] suits = {"Clubs", "Diamonds", "Hearts", "Spades"};
            String[] faces = {"Jack", "Queen", "King", "Ace"};
            System.out.println(q);
            for (String suit : suits) {
                for (int i=2; i<=10; i++) {
                    q.add(String.format("%s of %s", i, suit));
                for (String face : faces) {
                    q.add(String.format("%s of %s", face, suit));
            System.out.println(q);
            System.out.format("%nAnd now, add()ed all at once...%n");
            RandomQueue<String> q2 = new RandomQueue<String>();
            q2.addAll(q);
            System.out.println(q2);
            System.out.format("%nFinally, all added through constructor...%n");
            System.out.println(new RandomQueue<String>(q2));
            System.out.format("%nAnd now to remove() every item...%n");
            while (!q.isEmpty())
                System.out.println(q.remove());
            System.out.println(q);
            System.out.format("Random card: %s%n", new RandomQueue<String>(q2).remove());
            System.out.format("%nAnd now for some stacks...%n");
            LIFOQueue<String> lq = new LIFOQueue<String>();
            lq.add("foo");
            lq.add("bar");
            lq.add("baz");
            LIFOQueue<String> lq2 = new LIFOQueue<String>(lq);
            while (!lq.isEmpty())
                System.out.println(lq.remove());
            System.out.println("Testing addition through constructor...");
            while (!lq2.isEmpty())
                System.out.println(lq2.remove());
    }

  • Java Scripting (LUA or suggestions)

    I am working on building an MMORPG client and server purely using Java. I have come to the point in development where I would really like to implement a form of scripting to make adding/editing features easier. I found a really cool library called LuaJava, but the project looks long dead. I did get it kinda working, but it doesn't seem to be very stable so I don't want to use it.
    Does anyone know of a beter Java Lua library, OR know of another scripting language that DOES work very well with Java. Speed is important, but I have a feeling that most of the scripting languages of today are plenty fast enough, and coupled with that fact that my target server will be very fast it shouldn't be an issue.
    So, ideas or suggestions?

    I have made up my mind. I found a much better API called LuaJ that does exactly what is should, and has pretty good documentation.
    When I said it didn't seem stable, I was referring to LuaJava, and not Lua in general. Lua is a very solid language.
    Thank you guys for your help.

  • My MacBook pro has stopped connecting to the outgoing mail server smpt (Tiscali) server, still receives mail fine, and connects to the web. Any suggestions welcome.

    My MacbookPro has always worked fine, receiving and sending emails through my server,Tiscali.  I took it to France for a few days, and was able to receive emails and use the web (through the wireless router and server in our accomodation), although as usual when away from home, I couldn't send emails. I tried to set up a new outgoing email route using O2 (as suggested by a web article), but it didn't work, so I deleted it, and used Tiscali webmail to send emails.
    When I returned home, I selected my usual outgoing server (Tiscali), but found to my great surprise, that I could no longer send emails - Mail timed out, 'unable to connect'. I noticed when clicking on: Mail - Preferences, that in the outgoing mail smpt box, Tiscali appeared, as usual, but now was followed by (Offline)
    Receiving emails and web connections have remained fine.
    I've checked with Tiscali, and they can't find any problem with their server or my settings.  Grateful for any suggestions about possible causes for this problem, and how to fix it.
    Joe

    I have just tried attaching the ethernet cable to the MacBook to see what happens. The system is fine, but when starting Mail, it never opens and locks up. You eventually just have to force quit out of the program.

  • Need advice for project. Any suggestions welcome.

    Hello fellow Archers,
    I am taking an advanced operating systems class and our focus is on the linux kernel. My group has been assigned the topic of memory management within the Linux kernel. I am looking for suggestions for an interesting project involving memory management. I'm sure I could get into the kernel source and make a mess of things, but that wouldn't be very interesting would it.
    I have seen some interesting posts on this forum, so I figured there are some power users who could offer such suggestions.
    Thanks

    Pages, or any simple layout app.
    https://itunes.apple.com/us/app/pages/id409201541?mt=12

  • Design Issues, suggestions welcome

    I have stumbled across some design issues, with a carhire system i am making.
              kept in
         [CAR]------------------->[GARAGE]
    |
                        |
                        | Retives car from garage
    |
    |
    |
                        [TIMESLOT]
    As it stands the GARAGE class automatically has CAR objects added as attributes.     
    import java.util.*;
    public class Garage {
         //class attributes     
              private LinkedList carhold;
              Car ford_ka = new Car("A",135);
              Car ford_focus = new Car("B",149);
              Car ford_Mondeo = new Car("C",179);
               Car Vauxhall_Vectra = new Car("D",239);
              Car Mercedes_E240 = new Car("H",290);
              Car Renault_Espace = new Car("V",399);
         public Garage() {
              carhold = new LinkedList();
              carhold.add(ford_ka);
              carhold.add(ford_focus);
              carhold.add(ford_Mondeo);
              carhold.add(Vauxhall_Vectra);
              carhold.add(Mercedes_E240);
              carhold.add(Renault_Espace);          The TIMESLOT class has an GARAGE object as an attribute, thus enabling it access mehtods.
    import java.util.*;
    public class TimeSlot {
           Garage g = new Garage();
    public void getCarCost(String input) {
               Car theCar = g.search(input);problem is each time a new TIMESLOT is create so too is a
    new garage created with all the cars.
    I really need the garage to be a seperate entity, but still allowing
    the TIMESLOT class to use its methods.
    would in heritence be the appropriate solution, or maybe something else.
    I would like to hear other suggestions.

    I believe a Singleton pattern works perfectly here. A singleton ensures that only one instance of an object is created. You would use it as follows:
    public class Garage {
        private LinkedList carhold;
        // Car declarations here
        private Garage() {
            carhold = new LinkedList();
            // add cars here  
        public static Garage getInstance() {
            static Garage instance = null;
            if (instance == null)
                instance = new Garage();
            return instance;
    public class TimeSlot {
        public void getCarCost(String input) {
            Garage g = Garage.getInstance();
            // do some other stuff
    }Notice the PRIVATE constructor on the Garage class. This keeps classes other than Garage from instantiating it. In fact, the only way to get an instance of Garage is to call Garage.getInstance(), which will always return the same instance.
    You might also consider the Builder pattern, which will keep you from having to instantiate all those Car objects inside of your Garage. You would do something like this:
    public class Garage {
        LinkedList carhold;
        public Garage() {
            carhold = new LinkedList();
        public void addCar(Car c) {
            carhold.add(c);
    public class GarageBuilder {
        public static final int BOBS_GARAGE = 0;
        public static final int BILLS_GARAGE = 1;
        public static Garage buildGarage(int garage) {
            Garage g = new Garage();
            switch (garage) {
                case BOBS_GARAGE:
                    Car c = new Car("bobsCar", 200);
                    g.add(c);
                    break;
                case BILLS_GARAGE:
                    Car c = new Car("billsCar", 400);
                    g.add(c);
                    break;
            return g;
    }

Maybe you are looking for