Thanks Ken,

I will rewrite it once more using what I learned from your comments (and Richard's) to clean it up (in my own developing style) since others may look at it to learn from. One thing is that it is too big. That is because I could not find a small file for the VC and AC objects on my hard drive. If anyone has a dinky one or knows how to make a dinky one (I never work with these) I will use it to make the stack much smaller since it might be used as a reference and kept around.

More comments below.

On May 28, 2005, at 12:45 AM, Ken Ray wrote:

On 5/27/05 10:01 PM, "Dennis Brown" <[EMAIL PROTECTED]> wrote:


I doubt my scripts would be a model of superb Transcript.  Perhaps
someone can take a look at it and suggest better ways of doing this
simple table task.  It seemed very clunky to me for the way I figured
out how to click on the header rows for a sort --but it was quick and
dirty.


If you don't mind, I'd like to take a stab at it... here's your original
script:

on mouseup
  get me
  if the clickChunk is not empty then
    do "put "&the clickChunk&" into x"
put "wd,cd,grp,btn,fld,sb,grc,img,player,EPS,vc,ac" into objList --wd
    repeat with i=number of items of objList+1 down to 0
      if x contains item i of objList then exit repeat
    end repeat
    set itemdel to tab
    sort it
    if i>0 then sort lines of it descending by item i+1 of each
    put it into me
  end if
  set the textcolor of line one of me to blue
  repeat with i=2 to the number of lines of me
    if i mod 2 = 0 then get darkred else get black
    set the textcolor of line i of me to it
  end repeat
end mouseup

Here's what I suggest as a more optimal way (watch the line wraps):

on mouseUp
  put itemOffset(the
clickText,"wd,cd,grp,btn,fld,sb,grc,img,player,EPS,vc,ac")+1 into tItemNum
  set itemDel to tab
  put me into tData
  sort tData
if tItemNum > 1 then sort lines of tData descending by item tItemNum of
each
  put tData into me
  set the textColor of line 1 of me to blue
  repeat with i = 2 to (the number of lines of me) step 2
    set the textColor of line i of me to darkred
  end repeat
end mouseUp

You can use is the clickText instead of the clickChunk so you can get the text that was clicked directly. By using 'itemOffset', you can directly get the comma-delimited item that matches the clickText, and add 1 to it. If the
text isn't found, it will return 0; 0+1 = 1.

Since you already have the location of the matching column in tItemNum, you
can use it to do the sort.

Good Ideas. What I really would have expected of a table field is that it would have returned the column and row that I clicked in, and that I could get and put data based on column and row just as if it were an array. I expect that Rev will develop this soon.


Finally, the 'repeat' control structure allows you to skip every x number of lines in the data by using the 'step' option; here, I'm using 'step 2' to make sure that it only handles the even numbered lines. Since by default the text is black when it is put into the field, you only need to set the blue
and red lines.

I was experimenting with colors other than black also.


I also noticed that you use 'it' a lot (as a result of a 'get'). Since 'it' is a temporary variable, it's lifespan before it gets changed is usually very small. So I would recommend using 'put' instead of 'get', depositing the result into a variable of your own naming (I used 'tData' and 'tItem'
here).

Using "it" as much as possible is a goal of mine, as long as the context is short. I might have stretched the point a bit here. "get" stands out to identify the context of it. "it" is also my favorite way to break up a complex statement to make it more readable and understandable (like parens) without having to create useless extra names to type and remember. I am still working on developing my style with variable names.

Your sorting routines work because you have an inserted space before
"Property Name", and all the other columns are either X's or blanks other than the header. This is quite clever! However what might have been better would be to separate the header into another field that was placed atop the field with the data in the group. Clicking on the header would cause the
*other* field to sort; the header would be left alone.

I thought of this, but I did not want the extra code to keep the two fields sized and aligned (incl tab stops) if someone wanted to resize them. As it is now, someone can take just the display field and remove it from everything else and still have the all the sort functionality. The creation button only needed to be executed once, ever --by me (or again if Rev changes properties).

Regardless of my attempt at optimizing your scripts, I must say that I am
very encouraged at your rate of progress. Keep up the good work!

Thank you.

Dennis
_______________________________________________
use-revolution mailing list
use-revolution@lists.runrev.com
http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to