Ruby/Tk code critique

R

rubist __

I have a bunch of Tk buttons tied to code. They're wrapped in an array
to process later.

What I'd like to do is set each one to have a visual indicator that it
was used. So after it's clicked, it gets configured to have relief
"flat" or background "yellow" etc.

And then later, when a new row is being processed, I can iterate thru
button_array and reset their color/relief etc. -- this is to aid the
user in knowing which buttons they've already used.

The simple/ugly way I suppose would be to make each button be like:
TkButton.new(frame) {
text "bleh"
command proc {
self.configure("relief","flat")
run_code:)buttoncode)
}
}

What I'm looking for is basically an elegant way to do this. Rather than
modify each proc to add code to change the relief, I'd like an 'around'
method to put around run_code. Or in run_code if I could identify the
button that was clicked.

#Random status label changes
pru=proc{@status.configure('text'=>"Processing...")}
prr=proc{@status.configure('text'=>"Ready...")}

## Proc for ETL tasks
retl = proc{run_code:)etl)}
etlre = proc{run_code:)etlreuse)}
idsre = proc{run_code:)idsreuse)}
edwre = proc{run_code:)edwreuse)}
sorre = proc{run_code:)sorreuse)}
#Buttons - ETL reuse
lxxs_4 = TkButton.new(reusefr) { text "Reuse-ETL"; command etlre}
lxxs_5 = TkButton.new(reusefr) { text "Reuse-IDS"; command idsre}
lxxs_6 = TkButton.new(reusefr) { text "Reuse-EDW"; command edwre}
lxxs_7 = TkButton.new(reusefr) { text "Reuse-SOR"; command sorre}

button_array = [lxxs_4, lxxs_5 etc.]

Incidentally, run_code looks like this:
def run_code(par)
@controller.dispatcher(par)
end
 
H

Hidetoshi NAGAI

Probably, using `bindtag' is not so bad idea.

From: rubist __ <[email protected]>
Subject: Ruby/Tk code critique
Date: Sat, 29 Jul 2006 04:07:46 +0900
Message-ID: said:
button_array = [lxxs_4, lxxs_5 etc.]

btag = TkBindTag.new
btag.bind('ButtonRelease-1', proc{|w| w['relief'] = 'flat'}, '%W')
button_array.each{|b| b.bindtags_unshift(btag) }
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top