From fcbf63e62c627deae76c1b8cb8c0876c536ed811 Mon Sep 17 00:00:00 2001 From: Jari Vetoniemi Date: Mon, 16 Mar 2020 18:49:26 +0900 Subject: Fresh start --- .../ext/tk/sample/tkextlib/treectrl/mailwasher.rb | 269 +++++++++++++++++++++ 1 file changed, 269 insertions(+) create mode 100644 jni/ruby/ext/tk/sample/tkextlib/treectrl/mailwasher.rb (limited to 'jni/ruby/ext/tk/sample/tkextlib/treectrl/mailwasher.rb') diff --git a/jni/ruby/ext/tk/sample/tkextlib/treectrl/mailwasher.rb b/jni/ruby/ext/tk/sample/tkextlib/treectrl/mailwasher.rb new file mode 100644 index 0000000..1b51bb9 --- /dev/null +++ b/jni/ruby/ext/tk/sample/tkextlib/treectrl/mailwasher.rb @@ -0,0 +1,269 @@ +# +# Demo: MailWasher +# +def demoMailWasher(t) + init_pics('*checked') + + height = t.font.metrics(:linespace) + 2 + height = 18 if height < 18 + + t.configure(:showroot=>false, :showrootbutton=>false, :showbuttons=>false, + :showlines=>false, :itemheight=>height, :selectmode=>:browse, + :xscrollincrement=>1) + + pad = 4 + + if $Version_1_1_OrLater + t.column_create(:text=>'Delete', :textpadx=>pad, :tag=>'delete') + t.column_create(:text=>'Bounce', :textpadx=>pad, :tag=>'bounce') + t.column_create(:text=>'Status', :width=>80, :textpadx=>pad, + :tag=>'status') + t.column_create(:text=>'Size', :width=>40, :textpadx=>pad, + :justify=>:right, :tag=>'size') + t.column_create(:text=>'From', :width=>140, :textpadx=>pad, :tag=>'from') + t.column_create(:text=>'Subject', :width=>240, :textpadx=>pad, + :tag=>'subject') + t.column_create(:text=>'Received', :textpadx=>pad, :arrow=>:up, + :arrowpad=>[4,0], :tag=>'received') + t.column_create(:text=>'Attachments', :textpadx=>pad, :tag=>'attachments') + + t.state_define('CHECK') + + t.element_create('imgCheck', :image, :image=>[ + @images['checked'], ['CHECK'], @images['unchecked'], [] + ]) + + else # TreeCtrl 1.0 + t.column_configure(0, :text=>'Delete', :textpadx=>pad, :tag=>'delete') + t.column_configure(1, :text=>'Bounce', :textpadx=>pad, :tag=>'bounce') + t.column_configure(2, :text=>'Status', :width=>80, :textpadx=>pad, + :tag=>'status') + t.column_configure(3, :text=>'Size', :width=>40, :textpadx=>pad, + :justify=>:right, :tag=>'size') + t.column_configure(4, :text=>'From', :width=>140, :textpadx=>pad, + :tag=>'from') + t.column_configure(5, :text=>'Subject', :width=>240, :textpadx=>pad, + :tag=>'subject') + t.column_configure(6, :text=>'Received', :textpadx=>pad, :arrow=>:up, + :arrowpad=>[4,0], :tag=>'received') + t.column_configure(7, :text=>'Attachments', :textpadx=>pad, + :tag=>'attachments') + + t.element_create('imgOff', :image, :image=>@images['unchecked']) + t.element_create('imgOn', :image, :image=>@images['checked']) + end + + t.element_create('border', :rect, :open=>:nw, :outline=>'gray', + :outlinewidth=>1, :fill=>[@SystemHighlight, ['selected']]) + t.element_create('txtAny', :text, :lines=>1, + :fill=>[@SystemHighlightText, ['selected']]) + t.element_create('txtNone', :text, :text=>'none', :lines=>1, + :fill=>[@SystemHighlightText, ['selected']]) + t.element_create('txtYes', :text, :text=>'yes', :lines=>1, + :fill=>[@SystemHighlightText, ['selected']]) + t.element_create('txtNormal', :text, :text=>'Normal', :lines=>1, + :fill=>[@SystemHighlightText, ['selected'], '#006800', []]) + t.element_create('txtPossSpam', :text, :text=>'Possible Spam', :lines=>1, + :fill=>[@SystemHighlightText, ['selected'], '#787800', []]) + t.element_create('txtProbSpam', :text, :text=>'Probably Spam', :lines=>1, + :fill=>[@SystemHighlightText, ['selected'], '#FF9000', []]) + t.element_create('txtBlacklist', :text, :text=>'Blacklisted', :lines=>1, + :fill=>[@SystemHighlightText, ['selected'], '#FF5800', []]) + + if $Version_1_1_OrLater + s = t.style_create('styCheck') + t.style_elements(s, ['border', 'imgCheck']) + t.style_layout(s, 'border', :detach=>true, :iexpand=>:es) + t.style_layout(s, 'imgCheck', :expand=>:news) + else + ['Off', 'On'].each{|name| + s = t.style_create('sty' << name) + i = 'img' << name + t.style_elements(s, ['border', i]) + t.style_layout(s, 'border', :detach=>true, :iexpand=>:es) + t.style_layout(s, i, :expand=>:news) + } + end + + pad = 4 + + %w(Any None Yes Normal PossSpam ProbSpam Blacklist).each{|name| + s = t.style_create('sty' << name) + e = 'txt' << name + t.style_elements(s, ['border', e]) + t.style_layout(s, 'border', :detach=>true, :iexpand=>:es) + t.style_layout(s, e, :padx=>pad, :squeeze=>:x, :expand=>:ns) + } + + [ + ['baldy@spammer.com', "Your hair is thinning"], + ['flat@spammer.com', "Your breasts are too small"], + ['tiny@spammer.com', "Your penis is too small"], + ['dumbass@spammer.com', "You are not very smart"], + ['bankrobber@spammer.com', "You need more money"], + ['loser@spammer.com', "You need better friends"], + ['gossip@spammer.com', "Find out what your coworkers think about you"], + ['whoami@spammer.com', "Find out what you think about yourself"], + ['downsized@spammer.com', "You need a better job"], + ['poorhouse@spammer.com', "Your mortgage is a joke"], + ['spam4ever@spammer.com', "You need more spam"] + ].each{|frm, subj| + item = t.item_create + status = ['styNormal','styPossSpam','styProbSpam','styBlacklist'][rand(4)] + attachments = ['styNone','styYes'][rand(2)] + + if $Version_1_1_OrLater + delete = [false, true][rand(2)] + bounce = [false, true][rand(2)] + t.item_style_set(item, + 0, 'styCheck', 1, 'styCheck', 2, status, 3, 'styAny', + 4, 'styAny', 5, 'styAny', 6, 'styAny', 7, attachments) + t.item_state_forcolumn(item, 'delete', 'CHECK') if delete + t.item_state_forcolumn(item, 'bounce', 'CHECK') if bounce + + else # TreeCtrl 1.0 + delete = ['styOn', 'styOff'][rand(2)] + bounce = ['styOn', 'styOff'][rand(2)] + t.item_style_set(item, + 0, delete, 1, bounce, 2, status, 3, 'styAny', + 4, 'styAny', 5, 'styAny', 6, 'styAny', 7, attachments) + end + + bytes = 512 + rand(1024 * 12) + size = "#{bytes / 1024 + 1}KB" + seconds = Tk::Clock.seconds - rand(100000) + received = Tk::Clock.format(seconds, '%d/%m/%y %I:%M %p') + t.item_text(item, 3, size, 4, frm, 5, subj, 6, received) + t.item_lastchild(:root, item) + } + + sortColumn = 6 + t.notify_bind(t, 'Header-invoke', + proc{|c, w| + if c == sortColumn + if w.column_cget(sortColumn, :arrow) == 'down' + order = :increasing + arrow = :up + else + order = :decreasing + arrow = :down + end + else + if w.column_cget(sortColumn, :arrow) == 'down' + order = :decreasing + arrow = :down + else + order = :increasing + arrow = :up + end + w.column_configure(sortColumn, :arrow=>:none) + sortColumn = c + end + w.column_configure(c, :arrow=>arrow) + case w.column_cget(c, :tag) + when 'bounce', 'delete' + w.item_sort(:root, order, + { + :column=>c, + :command=>proc{|item1, item2| + compareOnOff(w, c, item1, item2) + } + }, + { :column=>'subject', :dictionary=>true }) + when 'status' + w.item_sort(:root, order, + { :column=>c, :dictionary=>true }) + when 'from' + w.item_sort(:root, order, + { :column=>c, :dictionary=>true }, + { :column=>'subject', :dictionary=>true }) + when 'subject' + w.item_sort(:root, order, + { :column=>c, :dictionary=>true }) + when 'size' + w.item_sort(:root, order, + { :column=>c, :dictionary=>true }, + { :column=>'subject', :dictionary=>true }) + when 'received' + w.item_sort(:root, order, + { :column=>c, :dictionary=>true }, + { :column=>'subject', :dictionary=>true }) + when 'attachments' + w.item_sort(:root, order, + { :column=>c, :dictionary=>true }, + { :column=>'subject', :dictionary=>true }) + end + }, '%C %T') + + mailWasher = TkBindTag.new + + if $Version_1_1_OrLater + mailWasher.bind('ButtonPress-1', + proc{|w, x, y| + id = w.identify(x, y) + if id.empty? + elsif id[0] == 'header' + else + what, item, where, arg1, arg2, arg3 = id + if where == 'column' + tag = w.column_cget(arg1, :tag) + if tag == 'delete' || tag == 'bounce' + w.item_state_forcolumn(item, arg1, '~CHECK') + end + end + end + }, '%W %x %y') + else # TreeCtrl 1.0 + mailWasher.bind('ButtonPress-1', + proc{|w, x, y| + id = w.identify(x, y) + if id.empty? + elsif id[0] == 'header' + else + what, item, where, arg1, arg2, arg3 = id + if where == 'column' + tag = w.column_cget(arg1, :tag) + if tag == 'delete' || tag == 'bounce' + style = w.item_style_set(item, arg1) + if style == 'styOn' + style = 'styOff' + else + style = 'styOn' + end + w.item_style_set(item, arg1, style) + @display_styles_in_item.call(item) + end + end + end + }, '%W %x %y') + end + + t.bindtags = [t, mailWasher, Tk::TreeCtrl, t.winfo_toplevel, TkBindTag::ALL] +end + +if $Version_1_1_OrLater + def compareOnOff(w, c, item1, item2) + s1 = w.item_state_forcolumn(item1, c) + s2 = w.item_state_forcolumn(item2, c) + if (s1 == s2) + 0 + elsif (s1 == 'CHECK') + -1 + else + 1 + end + end + +else # TreeCtrl 1.0 + def compareOnOff(w, c, item1, item2) + s1 = w.item_style_set(item1, c) + s2 = w.item_style_set(item2, c) + if (s1 == s2) + 0 + elsif (s1 == 'styOff') + -1 + else + 1 + end + end +end -- cgit v1.2.3