qmsk/dmx/web.py
changeset 80 5254ba612630
parent 76 ca10547ba9db
child 82 b5878197d017
equal deleted inserted replaced
79:076657910c0a 80:5254ba612630
    14     )
    14     )
    15     JS = (
    15     JS = (
    16             '//code.jquery.com/jquery-2.1.0.js',
    16             '//code.jquery.com/jquery-2.1.0.js',
    17             '//code.jquery.com/ui/1.10.4/jquery-ui.js',
    17             '//code.jquery.com/ui/1.10.4/jquery-ui.js',
    18             '//netdna.bootstrapcdn.com/bootstrap/3.0.3/js/bootstrap.min.js',
    18             '//netdna.bootstrapcdn.com/bootstrap/3.0.3/js/bootstrap.min.js',
       
    19             
       
    20             '/static/color-slider.js',
    19     )
    21     )
    20 
    22 
    21     STYLE = """
    23     STYLE = """
    22 body {
    24 body {
    23     padding-top: 2em;
    25     padding-top: 2em;
    30 }
    32 }
    31 
    33 
    32 .panel {
    34 .panel {
    33     width: 30em;
    35     width: 30em;
    34     margin: 1em auto;
    36     margin: 1em auto;
    35     }
    37 }
       
    38 
       
    39 input.color-control {
       
    40     width: 5em;
       
    41 }
       
    42 
       
    43 div#color {
       
    44     width: 5em;
       
    45     height: 5em;
       
    46 
       
    47     margin: 1em auto;
       
    48 }
       
    49 
       
    50 div.color-slider {
       
    51     margin: 1em;
       
    52 }
       
    53 
       
    54 div.color-slider#slider-r .ui-slider-range {
       
    55     background: #ff0000;
       
    56 }
       
    57 
       
    58 div.color-slider#slider-g .ui-slider-range {
       
    59     background: #00ff00;
       
    60 }
       
    61 
       
    62 div.color-slider#slider-b .ui-slider-range {
       
    63     background: #0000ff;
       
    64 }
    36     """
    65     """
    37 
    66 
    38     # test
    67     # test
    39     TITLE = u"Hello World"
    68     TITLE = u"DMX Control"
    40 
    69 
    41     def process (self) :
    70     def process (self) :
    42         if self.request.method == 'POST' :
    71         if self.request.method == 'POST' :
    43             self.color = tuple((int(x, 16) if x else 0) for x in (
    72             self.color = tuple((int(x, 16) if x else 0) for x in (
    44                     self.request.form.get('r'),
    73                     self.request.form.get('r'),
    59         if self.color :
    88         if self.color :
    60             r, g, b = self.color
    89             r, g, b = self.color
    61         else :
    90         else :
    62             r = g = b = None
    91             r = g = b = None
    63 
    92 
       
    93         def color_swatch () :
       
    94             return html.div(id='color',
       
    95                     style='background-color: rgb({r}, {g}, {b})'.format(r=r, g=g, b=b)
       
    96             )(' '),
       
    97 
    64         def color_input (name, value) :
    98         def color_input (name, value) :
    65             color = dict(r=0, g=0, b=0)
    99             color = dict(r=0, g=0, b=0)
    66             bgcolor = dict(r=0, g=0, b=0)
   100             bgcolor = dict(r=0, g=0, b=0)
    67 
   101 
    68             if value :
   102             if value :
    69                 color[name] = value
   103                 color[name] = value
    70                 alpha = value / 2
   104                 alpha = value / 255.0
    71             else :
   105             else :
    72                 alpha = 0
   106                 alpha = 0
    73 
   107 
    74             bgcolor[name] = 255
   108             bgcolor[name] = 255
    75 
   109 
    76             return html.input(type='text', name=name, class_='form-control', placeholder=name,
   110             return html.input(type='text', name=name,
       
   111                     class_      = 'form-control color-control',
       
   112                     placeholder = name,
       
   113                     id          = name,
       
   114 
    77                     value   = '{v:02x}'.format(v=value) if value else None,
   115                     value   = '{v:02x}'.format(v=value) if value else None,
    78                     #style   = 'background-color: #{r:02x}{g:02x}{b:02x}'.format(**color),
   116                     style   = 'background-color: rgba({r}, {g}, {b}, {a:0.2f})'.format(a=alpha, **bgcolor),
    79                     style   = 'background-color: rgba({r}, {g}, {b}, {a})'.format(a=alpha, **bgcolor),
       
    80             )
   117             )
    81 
   118 
    82         return html.div(class_='container')(
   119         return html.div(class_='container')(
    83             html.div(class_='panel')(
   120             html.div(class_='panel')(
    84                 html.form(action='.', method='POST', class_='form-horizontal')(
   121                 color_swatch(),
       
   122                 html.div(id='slider-r', class_='color-slider')(' '),
       
   123                 html.div(id='slider-g', class_='color-slider')(' '),
       
   124                 html.div(id='slider-b', class_='color-slider')(' '),
       
   125                 html.form(action='.', method='POST', class_='form-inline')(
       
   126                        #html.label(for_='color', class_='control-label')("Color"),
    85                     html.div(class_='form-group')(
   127                     html.div(class_='form-group')(
    86                        html.label(for_='color', class_='control-label')("Color"),
       
    87                        color_input('r', r),
   128                        color_input('r', r),
       
   129                     ),
       
   130                     html.div(class_='form-group')(
    88                        color_input('g', g),
   131                        color_input('g', g),
       
   132                     ),
       
   133                     html.div(class_='form-group')(
    89                        color_input('b', b),
   134                        color_input('b', b),
    90                     ),
   135                     ),
    91                     html.div(class_='form-group')(
   136                     html.div(class_='form-group')(
    92                         html.button(type='submit', class_='btn btn-primary')("Go"),
   137                         html.button(type='submit', class_='btn btn-primary')("Go"),
    93                     ),
   138                     ),
   105 
   150 
   106         self.dmx = dmx
   151         self.dmx = dmx
   107 
   152 
   108     def dmx_color (self, r, g, b, a=255) :
   153     def dmx_color (self, r, g, b, a=255) :
   109         for c in (1, 30) :
   154         for c in (1, 30) :
   110             # XXX: this is four separate commands... each one flushes...
   155             # XXX: separate commands... each one flushes...
   111             self.dmx[c + 0:c + 26:3] = r
   156             self.dmx[c + 0:c + 26] = (r, g, b)
   112             self.dmx[c + 1:c + 26:3] = g
   157             self.dmx[c + 27] = (0, a)
   113             self.dmx[c + 2:c + 26:3] = b
       
   114             self.dmx[c + 28] = 255
       
   115 
   158