Class: SleipnirAPI::Output

Inherits:
Object
  • Object
show all
Includes:
Enumerable, Util
Defined in:
lib/sleipnir_api/output.rb

Overview

このクラスは Sleipnir の COM オブジェクト (Sleipnir.API) の wrapper クラスです。Sleipnir のアウトプットバーを操作する API を定義しています。

  • このオブジェクトは SleipnirAPI::Sleipnir#output で取得します。

  • このクラスは Enumerable を include しています。

例:

pnir = SleipnirAPI.new
output = pnir.output
output.clear
output.show
output << "foo"
output << "fooo"
output << "bar"
output.count       #=> 3
output.getlines    #=> ["foo", "fooo", "bar"]

# Enumerable method
output.grep(/foo/) #=> ["foo", "fooo"]

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Util

#api, #ensure_version, #join_keyword

Constructor Details

#initialize(sleipnir) ⇒ Output

Returns a new instance of Output.



34
35
36
# File 'lib/sleipnir_api/output.rb', line 34

def initialize(sleipnir)
  @sleipnir = sleipnir
end

Instance Attribute Details

#sleipnirObject (readonly)

SleipnirAPI::Sleipnir object



32
33
34
# File 'lib/sleipnir_api/output.rb', line 32

def sleipnir
  @sleipnir
end

Instance Method Details

#add(string) ⇒ Object Also known as: <<

アウトプットの最後に文字列を追加します。

カーソルは最後に移動します。



116
117
118
# File 'lib/sleipnir_api/output.rb', line 116

def add(string)
  api.OutputAddString(string)
end

#clearObject

アウトプットをクリアします。



168
169
170
# File 'lib/sleipnir_api/output.rb', line 168

def clear
  api.OutputClear
end

#concat(*strings) ⇒ Object

アウトプットに複数の文字列を追加します。



122
123
124
125
126
# File 'lib/sleipnir_api/output.rb', line 122

def concat(*strings)
  strings.flatten.compact.each do |str|
    add(str)
  end
end

#countObject

アウトプットに出力されている文字列の行数を取得します。



109
110
111
# File 'lib/sleipnir_api/output.rb', line 109

def count
  api.OutputGetCount
end

#cursorObject

アウトプットバーの選択行の行番号を取得します。

Sleipnir バージョンが 1.30 より低い場合例外を投げます。



72
73
74
75
# File 'lib/sleipnir_api/output.rb', line 72

def cursor
  ensure_version 130
  api.OutputCurSel
end

#cursor=(lineno) ⇒ Object

アウトプットバーの選択行を設定します。

Sleipnir バージョンが 1.30 より低い場合例外を投げます。

  • lineno が範囲外の場合、カーソルは -1 に設定されます。



82
83
84
85
86
87
88
89
# File 'lib/sleipnir_api/output.rb', line 82

def cursor=(lineno)
  ensure_version 130
  if (0...count).include?(lineno)
    api.OutputCurSel=(lineno) #:nodoc:

  else
    api.OutputCurSel=(-1) #:nodoc:

  end
end

#delete(*lines) ⇒ Object

アウトプットから指定された行を削除します。

  • 引数を省略すると現在のカーソル行を削除します。

  • 削除する行番号は配列や Range を指定可能です。

例:

o = pnir.output
o.delete                     # 現在のカーソル行を削除
o.delete(0)                  # 0 行を削除
o.delete(1, 3, 5)            # 1, 3, 5 行を削除
o.delete([1, 3, 5])          # 同上
o.delete(0...5)              # 0, 1, 2, 3, 4 行を削除
o.dekete(1, 2..3, 10...15)   # 1, 2, 3, 10, 11, 12, 13, 14 行を削除


187
188
189
190
191
192
193
194
195
# File 'lib/sleipnir_api/output.rb', line 187

def delete(*lines)
  if lines.empty?
    delete(self.cursor)
  else
    lines.map{|e| Array(e) }.flatten.compact.sort.uniq.reverse.each do |e|
      api.OutputDeleteString(e)
    end
  end
end

#eachObject

call-seq:

each {|line| ... }

アウトプットに出力されている全行を走査します。



216
217
218
219
220
221
222
223
# File 'lib/sleipnir_api/output.rb', line 216

def each
  i = 0
  while i < count
    self.cursor = i
    yield get(i)
    i = i + 1
  end
end

#get(n = cursor) ⇒ Object

アウトプットから指定された行を取得します。

  • n を省略すると現在のカーソル行の文字列を取得します。

  • n が範囲外の場合 nil を返します。



201
202
203
204
205
# File 'lib/sleipnir_api/output.rb', line 201

def get(n = cursor)
  if (0...count).include?(n)
    api.OutputGetString(n)
  end
end

#getlinesObject

アウトプットに出力されている全行を配列で取得します。



208
209
210
# File 'lib/sleipnir_api/output.rb', line 208

def getlines
  (0...count).map{|i| get(i) }
end

#hideObject

アウトプットバーを隠します。

Sleipnir バージョンが 1.30 より低い場合例外を投げます。



65
66
67
# File 'lib/sleipnir_api/output.rb', line 65

def hide
  self.visible = false
end

#insert(n, string) ⇒ Object

アウトプットに文字列を挿入します。

  • 文字列は指定された行に挿入されます。

  • カーソルは n に移動します。

非互換

  • Sleipnir 2.x では OutputInsertString 後にカーソルは移動しませんが、このメソッドはカーソルが移動します。Sleipnir 1.x の動作にあわせています。



139
140
141
142
143
144
145
146
# File 'lib/sleipnir_api/output.rb', line 139

def insert(n, string)
  if (0..count).include?(n)
    api.OutputInsertString(n, string)
    self.cursor = n if sleipnir.v2?
  else
    self.cursor = -1
  end
end

#insert_after(string) ⇒ Object

アウトプットに文字列を挿入します。

  • 文字列は現在のカーソル行の次行に挿入されます。

  • カーソルの移動しません。



161
162
163
164
165
# File 'lib/sleipnir_api/output.rb', line 161

def insert_after(string)
  c = cursor
  insert(c + 1, string)
  self.cursor = c
end

#insert_before(string) ⇒ Object

アウトプットに文字列を挿入します。

  • 文字列は現在のカーソル行の前行に挿入されます。

  • カーソルがさしている行は変わりません (== insert された分カーソル行が +1 されます)



152
153
154
155
# File 'lib/sleipnir_api/output.rb', line 152

def insert_before(string)
  insert(cursor, string)
  self.cursor += 1
end

#scriptObject

アウトプットでダブルクリックされた時に呼ばれるスクリプトファイルを取得します。

Sleipnir バージョンが 1.30 より低い場合例外を投げます。



94
95
96
97
# File 'lib/sleipnir_api/output.rb', line 94

def script
  ensure_version 130
  api.OutputScript
end

#script=(filename) ⇒ Object

アウトプットでダブルクリックされた時に呼ばれるスクリプトファイルを設定します。

Sleipnir バージョンが 1.30 より低い場合例外を投げます。



102
103
104
105
# File 'lib/sleipnir_api/output.rb', line 102

def script=(filename)
  ensure_version 130
  api.OutputScript=(filename) #:nodoc:

end

#showObject

アウトプットバーを表示します。

Sleipnir バージョンが 1.30 より低い場合例外を投げます。



58
59
60
# File 'lib/sleipnir_api/output.rb', line 58

def show
  self.visible = true
end

#visible=(show) ⇒ Object

アウトプットバーの可視状態を設定します。

Sleipnir バージョンが 1.30 より低い場合例外を投げます。



50
51
52
53
# File 'lib/sleipnir_api/output.rb', line 50

def visible=(show)
  ensure_version 130
  api.OutputVisible=(show) #:nodoc:

end

#visible?Boolean

アウトプットバーの可視状態を取得します。

Sleipnir バージョンが 1.30 より低い場合例外を投げます。

Returns:

  • (Boolean)


42
43
44
45
# File 'lib/sleipnir_api/output.rb', line 42

def visible?
  ensure_version 130
  api.OutputVisible
end