Class: Rock::Browse::ModelListWidget

Inherits:
Qt::TreeWidget
  • Object
show all
Defined in:
lib/rock/browse/model_list_widget.rb

Constant Summary collapse

ROLE_OROGEN_TYPE =

– !!! DON'T FORGET TO CHANGE THE INITIALIZATION OF Rock::Browse::Main#displays in Rock::Browse::Main#initialize AS WELL AS ROLE_NAMES (below) if you change those ++

0
ROLE_OROGEN_TASK =
1
ROLE_INSTALLED_PACKAGE =
2
ROLE_AVAILABLE_PACKAGE =
3
ROLE_PACKAGE_SET =
4
ROLE_OSDEPS =
5
ROLE_NAMES =
[
    "oroGen Types",
    "oroGen Tasks",
    "Installed Packages",
    "Available Packages",
    "Package Sets",
    'OS Packages'
]

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(parent = nil, loader = self.class.default_loader, manifest = Autoproj.manifest, osdeps = Autoproj.osdeps) ⇒ ModelListWidget

Returns a new instance of ModelListWidget



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/rock/browse/model_list_widget.rb', line 33

def initialize(parent = nil,
               loader = self.class.default_loader,
               manifest = Autoproj.manifest,
               osdeps = Autoproj.osdeps)
    super(parent)

    @loader = loader
    @manifest = manifest
    @osdeps = osdeps

    @roots = Array.new
    ROLE_NAMES.each_with_index do |name, i|
        roots[i] = Qt::TreeWidgetItem.new(self)
        roots[i].set_text(0, name)
    end
    set_header_label("")
end

Instance Attribute Details

#loaderObject (readonly)

Returns the value of attribute loader



4
5
6
# File 'lib/rock/browse/model_list_widget.rb', line 4

def loader
  @loader
end

#manifestObject (readonly)

Returns the value of attribute manifest



5
6
7
# File 'lib/rock/browse/model_list_widget.rb', line 5

def manifest
  @manifest
end

#osdepsObject (readonly)

Returns the value of attribute osdeps



6
7
8
# File 'lib/rock/browse/model_list_widget.rb', line 6

def osdeps
  @osdeps
end

#rootsObject (readonly)

Returns the value of attribute roots



7
8
9
# File 'lib/rock/browse/model_list_widget.rb', line 7

def roots
  @roots
end

Class Method Details

.default_loaderObject



29
30
31
# File 'lib/rock/browse/model_list_widget.rb', line 29

def self.default_loader
    OroGen::Loaders::RTT.new(OroGen.orocos_target)
end

Instance Method Details

#clearObject



51
52
53
# File 'lib/rock/browse/model_list_widget.rb', line 51

def clear
    roots.each(&:take_children)
end

#populateObject



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/rock/browse/model_list_widget.rb', line 60

def populate
    if current = current_item
        current_type = current.data(0, Qt::UserRole)
        if current_type.null?
            current_name = nil
        else
            current_type = current_type.to_int
            current_name = current.text(0)
        end
    end
    clear
    
    loader.each_available_type_name do |name, _|
        item = Qt::TreeWidgetItem.new(roots[ROLE_OROGEN_TYPE])
        item.set_text(0, name)
        item.set_data(0, Qt::UserRole, Qt::Variant.new(ROLE_OROGEN_TYPE))
    end

    loader.each_available_task_model_name do |name|
        item = Qt::TreeWidgetItem.new(roots[ROLE_OROGEN_TASK])
        item.set_text(0, name)
        item.set_data(0, Qt::UserRole, Qt::Variant.new(ROLE_OROGEN_TASK))
    end

    manifest.packages.values.sort_by(&:name).each do |pkg|
        role = if File.directory?(pkg.autobuild.srcdir)
                   ROLE_INSTALLED_PACKAGE
               else
                   ROLE_AVAILABLE_PACKAGE
               end

        item = Qt::TreeWidgetItem.new(roots[role])
        item.set_text(0, pkg.name)
        item.set_data(0, Qt::UserRole, Qt::Variant.new(role))
    end

    manifest.each_package_set.sort_by(&:name).each do |pkg_set|
        item = Qt::TreeWidgetItem.new(roots[ROLE_PACKAGE_SET])
        item.set_text(0, pkg_set.name)
        item.set_data(0, Qt::UserRole, Qt::Variant.new(ROLE_PACKAGE_SET))
    end

    osdeps.all_definitions.keys.sort.each do |osdep_name|
        item = Qt::TreeWidgetItem.new(roots[ROLE_OSDEPS])
        item.set_text(0, osdep_name)
        item.set_data(0, Qt::UserRole, Qt::Variant.new(ROLE_OSDEPS))
    end

    if current_type && current_name
        select(current_type, current_name)
    end
end

#reloadObject



55
56
57
58
# File 'lib/rock/browse/model_list_widget.rb', line 55

def reload
    loader.clear
    populate
end

#role_from_item(item) ⇒ Object



113
114
115
116
117
118
# File 'lib/rock/browse/model_list_widget.rb', line 113

def role_from_item(item)
    role = item.data(0, Qt::UserRole)
    if !role.null?
        role.to_int
    end
end

#select(name, role = nil) ⇒ Object



120
121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/rock/browse/model_list_widget.rb', line 120

def select(name, role = nil)
    matches = findItems(name, Qt::MatchExactly | Qt::MatchRecursive, 0)
    if role
        single_match = matches.find do |item|
            role == role_from_item(item)
        end
    else single_match = matches.first
    end

    if single_match
        self.current_item = single_match
    end
end