diff options
Diffstat (limited to 'bitbake')
-rw-r--r-- | bitbake/lib/toaster/toastergui/templates/machines.html | 67 | ||||
-rwxr-xr-x | bitbake/lib/toaster/toastergui/views.py | 48 |
2 files changed, 86 insertions, 29 deletions
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 @@ | |||
30 | {% include "layers_dep_modal.html" %} | 30 | {% include "layers_dep_modal.html" %} |
31 | <div class="page-header"> | 31 | <div class="page-header"> |
32 | <h1> | 32 | <h1> |
33 | {% if request.GET.search %} | ||
34 | {% if objects.paginator.count != 0 %} | ||
35 | {{objects.paginator.count}} machines found | ||
36 | {% else %} | ||
37 | No Machines found | ||
38 | {% endif %} | ||
39 | {% else %} | ||
40 | |||
33 | All machines | 41 | All machines |
34 | <i class="icon-question-sign get-help heading-help" title="This page lists all the machines compatible with the current project that Toaster knows about. They include community-created targets suitable for use on top of OpenEmbedded Core and any targets you have imported"></i> | 42 | <i class="icon-question-sign get-help heading-help" title="This page lists all the machines compatible with the current project that Toaster knows about. They include community-created targets suitable for use on top of OpenEmbedded Core and any targets you have imported"></i> |
43 | {% endif %} | ||
35 | </h1> | 44 | </h1> |
36 | </div> | 45 | </div> |
37 | |||
38 | <div class="alert alert-info lead" id="alert-area" style="display:none"> | 46 | <div class="alert alert-info lead" id="alert-area" style="display:none"> |
39 | <button type="button" class="close" id="dismiss-alert">×</button> | 47 | <button type="button" class="close" id="dismiss-alert">×</button> |
40 | <span id="alert-msg"></span> | 48 | <span id="alert-msg"></span> |
41 | </div> | 49 | </div> |
50 | {% if request.GET.search and objects.paginator.count == 0 %} | ||
51 | <div class="alert row-fluid"> | ||
52 | <form class="navbar-search input-append pull-left" id="searchform"> | ||
53 | <input class="input-xxlarge" id="search" name="search" type="text" placeholder="Search machines" value="{{request.GET.search}}"><a href="javascript:$('#search').val('');searchform.submit()" class="add-on btn" tabindex="-1"><i class="icon-remove"></i></a> | ||
54 | <input type="hidden" name="orderby" value=""> | ||
55 | <input type="hidden" name="page" value="1"> | ||
56 | <button class="btn" type="submit" value="Search">Search</button> | ||
57 | <button type="submit" class="btn btn-link"><a href="{%url 'machines' %}">Show all machines</a></button> | ||
58 | </form> | ||
59 | </div> | ||
60 | {% else %} | ||
61 | {% include "basetable_top.html" %} | ||
62 | {% for o in objects %} | ||
63 | <tr class="data"> | ||
64 | <td class="machine">{{o.name}}</td> | ||
65 | <td class="description">{{o.description}}</td> | ||
66 | <td class="layer"><a href="{%url "layerdetails" o.layer_version.id %}">{{o.layer_version.layer.name}}</a></td> | ||
67 | <td class="source">{{o.layer_source.name}}</td> | ||
68 | <td class="branch">{{o.layer_version.get_vcs_reference}}</td> | ||
69 | <td class="machinefile"><code>/machine/conf/{{o.name}}.conf</code><a href="{{o.get_vcs_machine_file_link_url}}" target="_blank"><i class="icon-share get-info"></i></a></td> | ||
70 | <td class="select-or-add"> | ||
71 | <a href="#" class="btn btn-block select-machine-btn" data-machine-name="{{o.name}}" data-layer-version-id="{{o.layer_version.id}}" | ||
72 | {%if o.layer_version.id not in project_layers %}style="display:none" {%endif%} >Select machine</a> | ||
73 | <a href="#" class="btn btn-block nopop add-layer" data-layer-version-id="{{o.layer_version.id}}" data-layer-name="{{o.layer_version.layer.name}}" {%if o.layer_version.id in project_layers %}style="display:none" {%endif%} | ||
74 | > | ||
75 | <i class="icon-plus"></i> | ||
76 | Add layer | ||
77 | <i class="icon-question-sign get-help" title="To build this machine, you must first add the {{o.layer_version.layer.name}} layer to your project"></i> | ||
78 | </a> | ||
79 | </td> | ||
80 | </tr> | ||
81 | {% endfor %} | ||
42 | 82 | ||
43 | {% include "basetable_top.html" %} | 83 | {% include "basetable_bottom.html" %} |
44 | {% for o in objects %} | 84 | {% endif %} |
45 | <tr class="data"> | ||
46 | <td class="machine">{{o.name}}</td> | ||
47 | <td class="description">{{o.description}}</td> | ||
48 | <td class="layer"><a href="{%url "layerdetails" o.layer_version.id %}">{{o.layer_version.layer.name}}</a></td> | ||
49 | <td class="source">{{o.layer_source.name}}</td> | ||
50 | <td class="branch">{{o.layer_version.commit}}</td> | ||
51 | <td class="machinefile"><code>/machine/conf/{{o.name}}.conf</code><a href="{{o.get_vcs_machine_file_link_url}}" target="_blank"><i class="icon-share get-info"></i></a></td> | ||
52 | <td class="select-or-add"> | ||
53 | <a href="#" class="btn btn-block select-machine-btn" data-machine-name="{{o.name}}" data-layer-version-id="{{o.layer_version.id}}" | ||
54 | {%if o.layer_version.id not in project_layers %}style="display:none" {%endif%} >Select machine</a> | ||
55 | <a href="#" class="btn btn-block nopop add-layer" data-layer-version-id="{{o.layer_version.id}}" data-layer-name="{{o.layer_version.layer.name}}" {%if o.layer_version.id in project_layers %}style="display:none" {%endif%} | ||
56 | > | ||
57 | <i class="icon-plus"></i> | ||
58 | Add layer | ||
59 | <i class="icon-question-sign get-help" title="To build this machine, you must first add the {{o.layer_version.layer.name}} layer to your project"></i> | ||
60 | </a> | ||
61 | </td> | ||
62 | </tr> | ||
63 | {% endfor %} | ||
64 | |||
65 | {% include "basetable_bottom.html" %} | ||
66 | 85 | ||
67 | {% endblock %} | 86 | {% 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: | |||
2789 | 2789 | ||
2790 | queryset_all = Machine.objects.all() | 2790 | queryset_all = Machine.objects.all() |
2791 | 2791 | ||
2792 | queryset_with_search = _get_queryset(Machine, queryset_all, None, search_term, ordering_string, '-name') | 2792 | prj = Project.objects.get(pk = request.session['project_id']) |
2793 | queryset = _get_queryset(Machine, queryset_all, filter_string, search_term, ordering_string, '-name') | 2793 | compatible_layers = prj.compatible_layerversions() |
2794 | # Make sure we only show machines / layers which are compatible with the current project | ||
2795 | queryset_all = queryset_all.filter(layer_version__in=compatible_layers) | ||
2794 | 2796 | ||
2795 | project_layers = ProjectLayer.objects.filter(project_id=request.session['project_id']).values_list('layercommit',flat=True) | 2797 | project_layers = ProjectLayer.objects.filter(project_id=request.session['project_id']).values_list('layercommit',flat=True) |
2796 | 2798 | ||
2799 | by_pass_filter_string = False | ||
2800 | # "special" filters identified by these valid filter strings we | ||
2801 | # by pass the usual filter applying method because we're filtering using | ||
2802 | # a subquery done by project_layers | ||
2803 | if "name:inprj" in filter_string: | ||
2804 | queryset_all = queryset_all.filter(layer_version__in=project_layers) | ||
2805 | by_pass_filter_string = True | ||
2806 | |||
2807 | if "name:notinprj" in filter_string: | ||
2808 | queryset_all = queryset_all.exclude(layer_version__in=project_layers) | ||
2809 | by_pass_filter_string = True | ||
2810 | |||
2811 | queryset_with_search = _get_queryset(Machine, queryset_all, None, search_term, ordering_string, '-name') | ||
2812 | |||
2813 | if by_pass_filter_string: | ||
2814 | queryset = _get_queryset(Machine, queryset_all, None, search_term, ordering_string, '-name') | ||
2815 | else: | ||
2816 | queryset = _get_queryset(Machine, queryset_all, filter_string, search_term, ordering_string, '-name') | ||
2817 | |||
2818 | selected_filter_count = { | ||
2819 | 'inprj' : queryset.filter(layer_version__in=project_layers).count(), | ||
2820 | 'notinprj' : queryset.exclude(layer_version__in=project_layers).count() | ||
2821 | } | ||
2822 | |||
2823 | |||
2797 | # retrieve the objects that will be displayed in the table; machines a paginator and gets a page range to display | 2824 | # retrieve the objects that will be displayed in the table; machines a paginator and gets a page range to display |
2798 | machine_info = _build_page_range(Paginator(queryset, request.GET.get('count', 10)),request.GET.get('page', 1)) | 2825 | machine_info = _build_page_range(Paginator(queryset, request.GET.get('count', 10)),request.GET.get('page', 1)) |
2799 | 2826 | ||
@@ -2802,7 +2829,7 @@ if toastermain.settings.MANAGED: | |||
2802 | 'project_layers' : project_layers, | 2829 | 'project_layers' : project_layers, |
2803 | 'objectname' : "machines", | 2830 | 'objectname' : "machines", |
2804 | 'default_orderby' : 'name:+', | 2831 | 'default_orderby' : 'name:+', |
2805 | 'total_count': queryset_with_search.count(), | 2832 | 'total_count': machine_info.paginator.count, |
2806 | 2833 | ||
2807 | 'tablecols' : [ | 2834 | 'tablecols' : [ |
2808 | { 'name': 'Machine', | 2835 | { 'name': 'Machine', |
@@ -2840,12 +2867,23 @@ if toastermain.settings.MANAGED: | |||
2840 | 'hidden' : 1, | 2867 | 'hidden' : 1, |
2841 | }, | 2868 | }, |
2842 | { 'name': 'Select', | 2869 | { 'name': 'Select', |
2843 | 'dclass': 'span2', | 2870 | 'dclass': 'select span2', |
2844 | 'qhelp': "Add or delete machines to / from your project ", | 2871 | 'qhelp': "Sets the selected machine as the project machine. You can only have one machine per project", |
2872 | 'filter': { | ||
2873 | 'class': 'select', | ||
2874 | 'label': 'Show:', | ||
2875 | 'options': [ | ||
2876 | (u'Machines provided by layers added to this project', 'name:inprj', selected_filter_count['inprj']), | ||
2877 | (u'Machines provided by layers not added to this project', 'name:notinprj', selected_filter_count['notinprj']), | ||
2878 | |||
2879 | ], | ||
2880 | } | ||
2881 | |||
2845 | }, | 2882 | }, |
2846 | 2883 | ||
2847 | ] | 2884 | ] |
2848 | } | 2885 | } |
2886 | |||
2849 | response = render(request, template, context) | 2887 | response = render(request, template, context) |
2850 | _save_parameters_cookies(response, pagesize, orderby, request) | 2888 | _save_parameters_cookies(response, pagesize, orderby, request) |
2851 | 2889 | ||