~ubuntu-branches/ubuntu/vivid/psi/vivid

« back to all changes in this revision

Viewing changes to tools/toolbars_state.rb

  • Committer: Bazaar Package Importer
  • Author(s): Jan Niehusmann
  • Date: 2008-08-28 18:46:52 UTC
  • mfrom: (1.2.4 upstream)
  • Revision ID: james.westby@ubuntu.com-20080828184652-iiik12dl91nq7cdi
Tags: 0.12-2
Uploading to unstable (Closes: Bug#494352)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/env ruby -wKU
 
2
 
 
3
require 'base64'
 
4
require 'iconv'
 
5
 
 
6
raise "Pass toolbars-state data as argument." if ARGV.length != 1
 
7
data = Base64.decode64(ARGV[0])
 
8
 
 
9
$toolBarStateMarker    = 0xfe
 
10
$toolBarStateMarkerEx  = 0xfc
 
11
$dockWidgetStateMarker = 0xfd
 
12
 
 
13
class MainWinState
 
14
  def initialize(data)
 
15
    @data = data
 
16
    @offset = 0
 
17
  end
 
18
 
 
19
  def unpack(format, byte_length)
 
20
    result = @data.unpack("@#{@offset}#{format}")
 
21
    @offset += byte_length
 
22
    return result
 
23
  end
 
24
 
 
25
  def readQString
 
26
    bytes = unpack("N", 4)[0]
 
27
    return "" if bytes == 0xffffffff
 
28
    len = bytes / 2
 
29
    Iconv.open('UTF-8', 'UCS-2BE') do |cd|
 
30
      result = cd.iconv(@data[@offset, bytes])
 
31
      @offset += bytes
 
32
      return result
 
33
    end
 
34
  end
 
35
 
 
36
  def toSigned(num)
 
37
    length = 32
 
38
    mid = 2**(length-1) 
 
39
    max_unsigned = 2**length 
 
40
    (num >= mid) ? num - max_unsigned : num
 
41
  end
 
42
 
 
43
  def unpackRect(geom0, geom1)
 
44
    floating = geom0 & 1
 
45
    x = y = w = h = 0
 
46
 
 
47
    if floating != 0
 
48
      geom0 >>= 1;
 
49
 
 
50
      x = (geom0 & 0x0000ffff) - 0x7FFF
 
51
      y = (geom1 & 0x0000ffff) - 0x7FFF
 
52
 
 
53
      geom0 >>= 16;
 
54
      geom1 >>= 16;
 
55
 
 
56
      w = geom0 & 0x0000ffff;
 
57
      h = geom1 & 0x0000ffff;
 
58
    end
 
59
 
 
60
    return "(x:#{x} y:#{y} w:#{w} h:#{h} floating:#{floating != 0 ? 'true' : 'false'})"
 
61
  end
 
62
 
 
63
  def toolBarAreaName(pos)
 
64
    case pos
 
65
      when 0: "LeftDock"
 
66
      when 1: "RightDock"
 
67
      when 2: "TopDock"
 
68
      when 3: "BottomDock"
 
69
    end
 
70
  end
 
71
 
 
72
  def toolBarAreaLayoutRestoreState(tmarker)
 
73
    lines = unpack("N", 4)[0]
 
74
    (0...lines).each do |j|
 
75
      pos = unpack("N", 4)[0]
 
76
      cnt = unpack("N", 4)[0]
 
77
      (0...cnt).each do |k|
 
78
        objectName = readQString
 
79
        shown      = unpack("C", 1)[0]
 
80
        item_pos   = unpack("N", 4)[0]
 
81
        item_size  = unpack("N", 4)[0]
 
82
        geom0      = unpack("N", 4)[0]
 
83
        rect       = ""
 
84
 
 
85
        if tmarker == $toolBarStateMarkerEx
 
86
          geom1 = unpack("N", 4)[0]
 
87
          rect = unpackRect(geom0, geom1)
 
88
        end
 
89
        puts "#{objectName}"
 
90
        puts "\tpos:       #{toolBarAreaName(pos)}"
 
91
        puts "\tshown:     #{shown != 0 ? 'true' : 'false'}"
 
92
        puts "\titem_pos:  #{item_pos}"
 
93
        puts "\titem_size: #{item_size}"
 
94
        puts "\trect:      #{rect}"
 
95
      end
 
96
    end
 
97
  end
 
98
 
 
99
  def dockAreaLayoutRestoreState
 
100
    puts "dockAreaLayoutRestoreState:"
 
101
    cnt = unpack("N", 4)[0]
 
102
    (0...cnt).each do |i|
 
103
      raise "TODO"
 
104
    end
 
105
 
 
106
    width, height = unpack("NN", 8)
 
107
    puts "\tcentralWidgetRect = #{width} x #{height}"
 
108
 
 
109
    (0...4).each do |i|
 
110
      puts "\tcornerData[#{i}] = #{unpack('N', 4)}"
 
111
    end
 
112
  end
 
113
 
 
114
  def restoreState
 
115
    marker, version = unpack("NN", 8)
 
116
    raise "Incompatible format: #{marker}, #{version}" if marker != 0xff or version != 0
 
117
 
 
118
    while true do
 
119
      marker = unpack("C", 1)[0]
 
120
 
 
121
      case marker
 
122
      when $toolBarStateMarker, $toolBarStateMarkerEx
 
123
        # puts "toolBarAreaLayoutRestoreState"
 
124
        toolBarAreaLayoutRestoreState(marker)
 
125
      when $dockWidgetStateMarker
 
126
        # puts "dockAreaLayoutRestoreState"
 
127
        dockAreaLayoutRestoreState
 
128
      end
 
129
 
 
130
      break if @offset >= @data.length
 
131
    end
 
132
  end
 
133
end
 
134
 
 
135
MainWinState.new(data).restoreState