source: subversion/applications/routing/pyroute-dev/pyrouteMenu.py

Last change on this file was 18455, checked in by buerste, 10 years ago

-remove BOM
-fix version strings

  • Property svn:keywords set to Rev
File size: 4.1 KB
Line 
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3
4"""Loads touchscreen menus from textfiles on disk
5
6Usage:
7        (library code for pyroute GUI, not for direct use)
8
9Format:
10        * One menu per textfile  (menuname.txt)
11        * One line per 'column'
12        * Line containing "-----" starts a new row
13                 (the first line should also contain one of these)
14        * 4 rows of 3 columns. all must be defined, even if blank
15        * Item is "name" or "name|event"
16                * name should be unique amongst all menus
17                * name is currently displayed as-is (TODO: translation table)
18                * "Up" is a special name that closes the menu
19                         * Typically the top/left item is always 'Up'
20                * event is a message to send when the menu item is pressed
21                * lines can be blank to represent no menu item in that position
22"""
23
24
25__version__ = "$Rev: 18455 $"[1:-2]
26__license__ = """This program is free software: you can redistribute it and/or modify
27it under the terms of the GNU General Public License as published by
28the Free Software Foundation, either version 3 of the License, or
29(at your option) any later version.
30
31This program is distributed in the hope that it will be useful,
32but WITHOUT ANY WARRANTY; without even the implied warranty of
33MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
34GNU General Public License for more details.
35
36You should have received a copy of the GNU General Public License
37along with this program. If not, see <http://www.gnu.org/licenses/>."""
38_debug = 0
39
40
41import os
42import re
43
44def loadMenu(filename):
45        menu = {}
46        try:
47                file = open(filename, "r")
48                x = 0
49                y = -1
50                for line in file:
51                        line = line.rstrip()
52                        if(line == '-----'):
53                                x = 0
54                                y = y + 1
55                                continue
56                        try:
57                                name,action = line.split('|', 2)
58                        except ValueError:
59                                name,action = (line,None)
60                        #print "%d,%d: %s" % (x,y,action)
61                        icon = name.lower()
62                        icon = re.sub('\s+', '_', icon)
63                        menu["%d,%d"%(x,y)] = {'name':name,'action':action,'icon':icon}
64                        x = x + 1
65
66                file.close()
67        except IOError:
68                print "Can't open file %s" % filename
69        return menu
70
71def loadMenus(directory):
72        menus = {}
73        for file in os.listdir(directory):
74                result = re.search('(\w+)\.txt', file)
75                if(result):
76                        menuName = result.group(1)
77                        menus[menuName] = loadMenu("%s/%s" % (directory,file))
78        return(menus)
79
80def printMenu(menu):
81        print "-" * 63
82        for y in range(4):
83                for x in range(3):
84                        item = menu["%d,%d"%(x,y)]
85                        print expand(item['name'], 20),
86                        print "|",
87                print ""
88                for x in range(3):
89                        item = menu["%d,%d"%(x,y)]
90                        print expand(item['action'], 20),
91                        print "|",
92                print ""
93                for x in range(3):
94                        item = menu["%d,%d"%(x,y)]
95                        print expand(item['icon'], 20),
96                        print "|",
97                print "\n" + "-" * 63
98
99def printStrings(menus):
100        print "\n\nMenu item names:"
101        names = {}
102        # Look for a list of menu names
103        for menuName, menu in menus.items():
104                for xy,item in menu.items():
105                        name = item['name']
106                        if name:
107                                names[name] = 1
108        # Print sorted list of unique names
109        names = names.keys()
110        names.sort()
111        for name in names:
112                print name
113
114def checkIcons(menus, directory):
115        print "\n\nMissing icons:"
116        count = 0
117        for menuName, menu in menus.items():
118                for xy,item in menu.items():
119                        if(item['icon']):
120                                icon = "%s/%s.png" % (directory, item['icon'])
121                                if(not os.path.exists(icon)):
122                                        print icon
123                                        count = count + 1
124        print "%d missing icons" % count
125
126def expand(text,size):
127        if(text == None):
128                return(" " * size)
129        need = size - len(text)
130        n1 = int(need/2)
131        n2 = need-n1
132        return(" " * n1 + text + " " * n2)
133
134
135if(__name__ == "__main__"):
136        menus = loadMenus('.')
137
138        import sys
139        try:
140                if(sys.argv[1] == 'list'):
141                        for name, menu in menus.items():
142                                print "Menu for %s:" % name
143                                printMenu(menu)
144                elif(sys.argv[1] == 'strings'):
145                        printStrings(menus)
146                elif(sys.argv[1] == 'icons'):
147                        checkIcons(menus,"../icons/bitmap")
148                else:
149                        print "Loaded %d menus" % len(menus)
150        except IndexError:
151                print "Usage: %s [mode]" % sys.argv[0]
152                print "  * 'list' - lists the contents of all menus"
153                print "  * 'strings' - exports names, ready for translating"
154                print "  * 'icons' - checks that all the icons exist"
Note: See TracBrowser for help on using the repository browser.