diff --git a/bitbake/lib/toaster/toastergui/templates/machines.html b/bitbake/lib/toaster/toastergui/templates/machines.html
index 650c47bd66..9930a94f4d 100644
--- a/bitbake/lib/toaster/toastergui/templates/machines.html
+++ b/bitbake/lib/toaster/toastergui/templates/machines.html
@@ -30,38 +30,57 @@
{% include "layers_dep_modal.html" %}
-
+{% if request.GET.search and objects.paginator.count == 0 %}
+
+{% else %}
+ {% include "basetable_top.html" %}
+ {% for o in objects %}
+
+ | {{o.name}} |
+ {{o.description}} |
+ {{o.layer_version.layer.name}} |
+ {{o.layer_source.name}} |
+ {{o.layer_version.get_vcs_reference}} |
+ /machine/conf/{{o.name}}.conf |
+
+ Select machine
+
+
+ Add layer
+
+
+ |
+
+ {% endfor %}
-{% include "basetable_top.html" %}
-{% for o in objects %}
-
- | {{o.name}} |
- {{o.description}} |
- {{o.layer_version.layer.name}} |
- {{o.layer_source.name}} |
- {{o.layer_version.commit}} |
- /machine/conf/{{o.name}}.conf |
-
- Select machine
-
-
- Add layer
-
-
- |
-
-{% endfor %}
-
-{% include "basetable_bottom.html" %}
+ {% include "basetable_bottom.html" %}
+{% endif %}
{% endblock %}
diff --git a/bitbake/lib/toaster/toastergui/views.py b/bitbake/lib/toaster/toastergui/views.py
index 2e52d2bff9..7dc4bbd5a2 100755
--- a/bitbake/lib/toaster/toastergui/views.py
+++ b/bitbake/lib/toaster/toastergui/views.py
@@ -2789,11 +2789,38 @@ if toastermain.settings.MANAGED:
queryset_all = Machine.objects.all()
- queryset_with_search = _get_queryset(Machine, queryset_all, None, search_term, ordering_string, '-name')
- queryset = _get_queryset(Machine, queryset_all, filter_string, search_term, ordering_string, '-name')
+ prj = Project.objects.get(pk = request.session['project_id'])
+ compatible_layers = prj.compatible_layerversions()
+ # Make sure we only show machines / layers which are compatible with the current project
+ queryset_all = queryset_all.filter(layer_version__in=compatible_layers)
project_layers = ProjectLayer.objects.filter(project_id=request.session['project_id']).values_list('layercommit',flat=True)
+ by_pass_filter_string = False
+ # "special" filters identified by these valid filter strings we
+ # by pass the usual filter applying method because we're filtering using
+ # a subquery done by project_layers
+ if "name:inprj" in filter_string:
+ queryset_all = queryset_all.filter(layer_version__in=project_layers)
+ by_pass_filter_string = True
+
+ if "name:notinprj" in filter_string:
+ queryset_all = queryset_all.exclude(layer_version__in=project_layers)
+ by_pass_filter_string = True
+
+ queryset_with_search = _get_queryset(Machine, queryset_all, None, search_term, ordering_string, '-name')
+
+ if by_pass_filter_string:
+ queryset = _get_queryset(Machine, queryset_all, None, search_term, ordering_string, '-name')
+ else:
+ queryset = _get_queryset(Machine, queryset_all, filter_string, search_term, ordering_string, '-name')
+
+ selected_filter_count = {
+ 'inprj' : queryset.filter(layer_version__in=project_layers).count(),
+ 'notinprj' : queryset.exclude(layer_version__in=project_layers).count()
+ }
+
+
# retrieve the objects that will be displayed in the table; machines a paginator and gets a page range to display
machine_info = _build_page_range(Paginator(queryset, request.GET.get('count', 10)),request.GET.get('page', 1))
@@ -2802,7 +2829,7 @@ if toastermain.settings.MANAGED:
'project_layers' : project_layers,
'objectname' : "machines",
'default_orderby' : 'name:+',
- 'total_count': queryset_with_search.count(),
+ 'total_count': machine_info.paginator.count,
'tablecols' : [
{ 'name': 'Machine',
@@ -2840,12 +2867,23 @@ if toastermain.settings.MANAGED:
'hidden' : 1,
},
{ 'name': 'Select',
- 'dclass': 'span2',
- 'qhelp': "Add or delete machines to / from your project ",
+ 'dclass': 'select span2',
+ 'qhelp': "Sets the selected machine as the project machine. You can only have one machine per project",
+ 'filter': {
+ 'class': 'select',
+ 'label': 'Show:',
+ 'options': [
+ (u'Machines provided by layers added to this project', 'name:inprj', selected_filter_count['inprj']),
+ (u'Machines provided by layers not added to this project', 'name:notinprj', selected_filter_count['notinprj']),
+
+ ],
+ }
+
},
]
}
+
response = render(request, template, context)
_save_parameters_cookies(response, pagesize, orderby, request)