diff options
| -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 | ||
