#!/usr/bin/python -tt
# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Quick-and-dirty viewer for bmpblock yaml files"""
import os
import sys
import wx

from lib import bmpblock
from lib import pixcontrol
from lib import pixdisplay


class MyApp(wx.App):

  def OnInit(self):
    progname = os.path.basename(sys.argv[0])
    progdir = os.path.abspath(os.path.dirname(sys.argv[0]))
    self._bmpblock = bmpblock.BmpBlock(os.path.join(progdir, 'lib'),
                                       sys.argv[1])
    self._mainframe = pixcontrol.Frame(self._bmpblock, progname)
    self._mainframe.Show()
    self.SetTopWindow(self._mainframe)
    self._imgframe = pixdisplay.Frame(self._bmpblock, sys.argv[1])
    self._imgframe.Show()
    return True

def main():
  if len(sys.argv) != 2:
    print "You must specify a config.yaml file to view"
    sys.exit(1)
  MyApp(False).MainLoop()

if __name__ == '__main__':
  main()
