module Gtk

Web上の画像をレンダリングできる。 レンダリング中は読み込み中の代替イメージが表示され、ロードが終了したら指定された画像が表示される。 メモリキャッシュ、ストレージキャッシュがついてる。

なーにがkonami_watcherじゃ

Constants

KONAMI_SEQUENCE
KonamiCache
NO_ACTION
PRESS_WITH_ALT
PRESS_WITH_CONTROL
PRESS_WITH_HYPER
PRESS_WITH_SHIFT
PRESS_WITH_SUPER
RetrieverHeaderWidget

message_detail_viewプラグインなどで使われている、ヘッダ部分のユーザ情報。 コンストラクタにはUserではなくMessageなど、userを保持しているDivaを渡すことに注意。 このウィジェットによって表示されるタイムスタンプをクリックすると、 コンストラクタに渡されたModelのperma_linkを開くようになっている。

Attributes

exception[RW]
konami[RW]
konami_image[R]

Public Class Methods

buttonname(key) click to toggle source
# File core/mui/gtk_extension.rb, line 121
def self.buttonname(key)
  type_strict key => Array
  type, button, state = key
  return NO_ACTION if key.empty? or type == 0 or not key.all?
  r = ""
  r << PRESS_WITH_CONTROL if (state & Gdk::Window::CONTROL_MASK) != 0
  r << PRESS_WITH_SHIFT if (state & Gdk::Window::SHIFT_MASK) != 0
  r << PRESS_WITH_ALT if (state & Gdk::Window::MOD1_MASK) != 0
  r << PRESS_WITH_SUPER if (state & Gdk::Window::SUPER_MASK) != 0
  r << PRESS_WITH_HYPER if (state & Gdk::Window::HYPER_MASK) != 0
  r << "Button #{button} "
  case type
  when Gdk::Event::BUTTON_PRESS
    r << 'Click'.freeze
  when Gdk::Event::BUTTON2_PRESS
    r << 'Double Click'.freeze
  when Gdk::Event::BUTTON3_PRESS
    r << 'Triple Click'.freeze
  else
    return NO_ACTION end
  return r end
keyname(key) click to toggle source
# File core/mui/gtk_extension.rb, line 109
def self.keyname(key)
  type_strict key => Array
  return NO_ACTION if key.empty? or key[0] == 0 or not key.all?

  r = ""
  r << PRESS_WITH_CONTROL if (key[1] & Gdk::Window::CONTROL_MASK) != 0
  r << PRESS_WITH_SHIFT if (key[1] & Gdk::Window::SHIFT_MASK) != 0
  r << PRESS_WITH_ALT if (key[1] & Gdk::Window::MOD1_MASK) != 0
  r << PRESS_WITH_SUPER if (key[1] & Gdk::Window::SUPER_MASK) != 0
  r << PRESS_WITH_HYPER if (key[1] & Gdk::Window::HYPER_MASK) != 0
  return r + Gdk::Keyval.to_name(key[0]) end
konami_load() click to toggle source
# File core/mui/gtk_extension.rb, line 91
def self.konami_load
  return if @konami
  if FileTest.exist? KonamiCache
    @konami_image = GdkPixbuf::Pixbuf.new(file: KonamiCache, width: 41, height: 52)
    @konami = true
  else
    Thread.new do
      begin
        tmpfile = File.join(Environment::TMPDIR, '600eur')
        open('http://mikutter.hachune.net/img/konami.png', 'rb') { |konami|
          open(tmpfile, 'wb'){ |cache| IO.copy_stream konami, cache } }
        FileUtils.mkdir_p(File.dirname(KonamiCache))
        FileUtils.mv(tmpfile, KonamiCache)
        @konami_image = GdkPixbuf::Pixbuf.new(file: KonamiCache, width: 41, height: 52)
        @konami = true
      rescue => exception
        error exception end end end end
openurl(url) click to toggle source
# File core/mui/gtk_extension.rb, line 283
def openurl(url)
  Plugin.call(:open, url)
end

Public Instance Methods

all_options() click to toggle source

PostBoxを複製するときのために、このPostBoxを生成した時に指定された全ての名前付き引数と値のペアを返す

Return

Hash

# File core/mui/gtk_postbox.rb, line 396
def all_options
  { from: @from,
    to: @to,
    footer: @footer,
    to_display_only: to_display_only?,
    visibility: @visibility,
    **@options } end
brothers() click to toggle source
# File core/mui/gtk_postbox.rb, line 264
def brothers
  if(@options[:postboxstorage])
    @options[:postboxstorage].children.find_all{|c| c.sensitive? }
  else
    [] end end
destroy_if_necessary(*related_widgets) click to toggle source

related_widgets のうちどれもアクティブではなく、フォーカスが外れたら削除される設定の場合、このウィジェットを削除する

# File core/mui/gtk_postbox.rb, line 282
def destroy_if_necessary(*related_widgets)
  if(not(frozen? or destroyed?) and not([widget_post, *related_widgets].compact.any?{ |w| w.focus? }) and destructible?)
    destroy
    true end end
destructible?() click to toggle source

フォーカスが外れたことによって削除して良いなら真を返す。

# File core/mui/gtk_postbox.rb, line 274
def destructible?
  if(@options.has_key?(:postboxstorage))
    return false if lonely? or (brothers - [self]).all?{ |w| !w.delegatable? }
    post_is_empty?
  else
    true end end
focus_out_event(widget, event=nil) click to toggle source
# File core/mui/gtk_postbox.rb, line 360
def focus_out_event(widget, event=nil)
  options = @options
  Delayer.new{
    if(not(frozen? or destroyed?) and not(options.has_key?(:postboxstorage)) and post_is_empty?)
      destroy_if_necessary(widget_send, widget_tool, *@reply_widgets) end }
  false end
get_backgroundcolor(message) click to toggle source

Initialize Methods

# File core/mui/gtk_postbox.rb, line 369
def get_backgroundcolor(message)
  if(message.from_me?)
    UserConfig[:mumble_self_bg]
  elsif(message.to_me?)
    UserConfig[:mumble_reply_bg]
  else
    UserConfig[:mumble_basic_bg] end end
get_backgroundstyle(message) click to toggle source
# File core/mui/gtk_postbox.rb, line 377
def get_backgroundstyle(message)
  style = Gtk::Style.new()
  color = get_backgroundcolor(message)
  [Gtk::STATE_ACTIVE, Gtk::STATE_NORMAL, Gtk::STATE_SELECTED, Gtk::STATE_PRELIGHT, Gtk::STATE_INSENSITIVE].each{ |state|
    style.set_bg(state, *color) }
  style end
lonely?() click to toggle source
# File core/mui/gtk_postbox.rb, line 270
def lonely?
  brothers.size <= 1 end
on_delete() click to toggle source
# File core/mui/gtk_postbox.rb, line 287
def on_delete
  if(block_given?)
    @on_delete = Proc.new
  elsif defined? @on_delete
    @on_delete.call end end
post_is_empty?() click to toggle source

テキストが編集前と同じ状態なら真を返す。 ウィジェットが破棄されている場合は、常に真を返す

# File core/mui/gtk_postbox.rb, line 261
def post_is_empty?
  widget_post.destroyed? or widget_post.buffer.text.empty? or widget_post.buffer.text == @header + @footer end
post_set_default_text(post) click to toggle source
# File core/mui/gtk_postbox.rb, line 384
def post_set_default_text(post)
  if @options[:delegated_by]
    post.buffer.text = @options[:delegated_by].post.buffer.text
    @options[:delegated_by].post.buffer.text = ''
  elsif !(@header.empty? and @footer.empty?)
    post.buffer.text = @header + @footer
    post.buffer.place_cursor(post.buffer.get_iter_at_offset(@header.size)) end
  post.accepts_tab = false end
posted_url_length(url) click to toggle source

URL url がTwitterに投稿された時に何文字としてカウントされるかを返す

Args

url

String URL

Return

Fixnum URLの長さ

# File core/mui/gtk_postbox.rb, line 357
def posted_url_length(url)
  Plugin.filtering(:tco_url_length, url, 0).last end
register() click to toggle source
# File core/mui/gtk_postbox.rb, line 296
def register
  @@ringlock.synchronize{
    @@postboxes << self } end
remain_charcount() click to toggle source
# File core/mui/gtk_postbox.rb, line 306
def remain_charcount
  if not widget_post.destroyed?
    text = trim_hidden_regions(widget_post.buffer.text + UserConfig[:footer])
    Twitter::TwitterText::Extractor.extract_urls(text).map{|url|
      if url.length < posted_url_length(url)
        -(posted_url_length(url) - url.length)
      else
        url.length - posted_url_length(url) end
    }.inject(140 - text.size, &:+)
  end end
reply?() click to toggle source
# File core/mui/gtk_postbox.rb, line 293
def reply?
  !@to.empty? and !to_display_only? end
to_display_only?() click to toggle source

真を返すなら、 @to の要素はPostBoxの下に表示するのみで、投稿時にリプライにしない

Return

TrueClass|FalseClass

# File core/mui/gtk_postbox.rb, line 407
def to_display_only?
  @to_display_only end
trim_hidden_header(text) click to toggle source

文字列からhidden headerを除いた文字列を返す。 hidden headerが含まれていない場合は、 text を返す。

# File core/mui/gtk_postbox.rb, line 323
def trim_hidden_header(text)
  return text unless UserConfig[:auto_populate_reply_metadata]
  mentions = text.match(%r[\A((?:@[a-zA-Z0-9_]+\s+)+)])
  forecast_receivers_sn = Set.new
  if reply?
    @to.first.each_ancestor.each do |m|
      forecast_receivers_sn << m.user.idname
      forecast_receivers_sn.merge(m.receive_user_screen_names)
    end
  end
  if mentions
    specific_screen_names = Set.new(mentions[1].split(/\s+/).map{|s|s[1, s.size]})
    [*(specific_screen_names - forecast_receivers_sn).map{|s|"@#{s}"}, text[mentions.end(0),text.size]].join(' '.freeze)
  else
    text
  end
end
trim_hidden_regions(text) click to toggle source
# File core/mui/gtk_postbox.rb, line 317
def trim_hidden_regions(text)
  trim_hidden_header(trim_hidden_footer(text))
end