Beispiel #1
0
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)
        # Add the Canvas
        Canvas = FloatCanvas.FloatCanvas(self,
                                         size = (500,500),
                                         ProjectionFun = None,
                                         Debug = 0,
                                         BackgroundColor = "Black",
                                         )

        self.Canvas = Canvas

        self.Canvas.Bind(wx.EVT_SIZE, self.OnSize)

        # build the squares:
        w = 10
        dx = 14
        for i in range(9):
            for j in range(9):
                Rect = Canvas.AddRectangle((i*dx, j*dx), (w, w), FillColor="White", LineStyle = None)
                Outline = Canvas.AddRectangle((i*dx, j*dx), (w, w),
                                              FillColor=None,
                                              LineWidth=4,
                                              LineColor='Red',
                                              LineStyle=None)
                Rect.indexes = (i,j)
                Rect.outline = Outline
                Rect.Bind(FloatCanvas.EVT_FC_LEFT_DOWN, self.SquareHitLeft)
                Rect.Bind(FloatCanvas.EVT_FC_ENTER_OBJECT, self.SquareEnter)
                Rect.Bind(FloatCanvas.EVT_FC_LEAVE_OBJECT, self.SquareLeave)

        self.Show()
        Canvas.ZoomToBB()
    def test_lib_floatcanvas_fc_recteclips(self):
        fccanvas = fc.FloatCanvas(self.frame)

        obj = fc.RectEllipse((2, 2), (2, 2))

        fccanvas.AddObject(obj)
        fccanvas.Destroy()
Beispiel #3
0
    def _init_ui(self):
        """Create the UI Elements and bind various events."""
        # Create items to add to our layout
        self.canvas = FloatCanvas.FloatCanvas(
            self,
            BackgroundColor="BLACK",
        )

        # Initialize the FloatCanvas. Needs to come before adding items!
        self.canvas.InitAll()

        # Create the legend
        self._create_legend()

        # Draw the die and wafer objects (outline, crosshairs, etc) on the canvas
        self.draw_die()
        if self.plot_die_centers:
            self.draw_die_center()
        self.draw_wafer_objects()

        # Bind events to the canvas
        self._bind_events()

        # Create layout manager and add items
        self.hbox = wx.BoxSizer(wx.HORIZONTAL)

        self.hbox.Add(self.legend, 0, wx.EXPAND)
        self.hbox.Add(self.canvas, 1, wx.EXPAND)

        self.SetSizer(self.hbox)
Beispiel #4
0
    def test_lib_floatcanvas_fc_scaledbitmap(self):
        fccanvas = fc.FloatCanvas(self.frame)

        bmp = wx.Bitmap(pngFile)
        obj = fc.ScaledBitmap(bmp, (2, 2), 100)

        fccanvas.AddObject(obj)
Beispiel #5
0
    def __init__(self, main_cfg):
        super().__init__()
        w, h = 1920, 1080
        super(PyPublisher, self).__init__(None, title="MIBCI", size=(w, h))

        # self.main_cfg = main_cfg
        self.is_pre = main_cfg.is_pre
        self.session_type = main_cfg.session_type
        self.save_path = main_cfg.subject.get_date_dir()
        self.NF_time_len = main_cfg.stim_cfg.NF_training_duration
        self.init_data()
        self.Bind(wx.EVT_CHAR_HOOK, self.onKey)
        self.Bind(wx.EVT_CLOSE, self.onClose)
        self.rect0 = FloatCanvas.Rectangle((0, 0), (0, 0), FillColor='Red')
        # self.rect1 = FloatCanvas.Rectangle((0, 0), (0, 0), FillColor='Red')
        self.rect_t = FloatCanvas.Rectangle((0, 0), (0, 0),
                                            FillColor='Red')  # 进度条
        self.Canvas = FloatCanvas.FloatCanvas(
            self,
            -1,
            size=(w, h),
            ProjectionFun=None,
            Debug=0,
            BackgroundColor="Black",
        )
        self.SetSize(x=1920, y=0, width=w, height=h)
    def test_lib_floatcanvas_fc_squarepoint(self):
        fccanvas = fc.FloatCanvas(self.frame)

        obj = fc.SquarePoint((2, 2))

        fccanvas.AddObject(obj)
        fccanvas.Destroy()
    def test_lib_floatcanvas_fc_text(self):
        fccanvas = fc.FloatCanvas(self.frame)

        obj = fc.Text("some text", (2, 2))

        fccanvas.AddObject(obj)
        fccanvas.Destroy()
Beispiel #8
0
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, None, title='Barcode Editor', **kwargs)
        self.SetIcon(wx.Icon('../imgdata/barcode.ico', wx.BITMAP_TYPE_ICO))
        self.CreateStatusBar()
        self.toolbar = wx.ToolBar(self, wx.ID_ANY)
        self.doc = None
        titledic = {}
        for i in tools:
            self.toolbar.AddTool(100 + tools.index(i), '', wx.Bitmap(i.img))
            titledic[100 + tools.index(i)] = i
        self.toolbar.Bind(
            wx.EVT_TOOL, lambda event: titledic[event.GetId()]
            ().start(self, self.doc))
        self.toolbar.Realize()
        # Add the Canvas
        self.canvas = canvas = FloatCanvas.FloatCanvas(
            self, size=(500, 500), BackgroundColor="LIGHT GRAY")
        canvas.MaxScale = 3  # sets the maximum zoom level
        self.BindEvents()

        bSizer1 = wx.BoxSizer(wx.VERTICAL)
        bSizer1.Add(self.toolbar, 0, wx.ALL | wx.GROW, 0)
        bSizer1.Add(self.canvas, 1, wx.ALL | wx.GROW, 0)
        self.SetSizerAndFit(bSizer1)
        self.Layout()
        self.Show()
        self.moving = False
 def __init__(self, parent,
             IDmodele=None, 
             taille_page=(210, 297),
             margeHaut=10,
             margeGauche=10,
             margeBas = 10,
             margeDroite=10,
             espaceVertical=5,
             espaceHorizontal=5,
             ):
     wx.Panel.__init__(self, parent, id=-1, style=wx.SUNKEN_BORDER|wx.TAB_TRAVERSAL)        
     self.parent = parent
     self.taille_page = taille_page
     self.largeurPage = taille_page[0]
     self.hauteurPage = taille_page[1]
     self.margeHaut = margeHaut
     self.margeGauche = margeGauche
     self.margeBas = margeBas
     self.margeDroite = margeDroite
     self.espaceVertical = espaceVertical
     self.espaceHorizontal = espaceHorizontal
     
     # FloatCanvas
     self.canvas = FloatCanvas.FloatCanvas(self, Debug=0, BackgroundColor=COULEUR_ZONE_TRAVAIL)
     
     # Layout
     grid_sizer_base = wx.FlexGridSizer(rows=2, cols=1, vgap=10, hgap=10)
     grid_sizer_base.Add(self.canvas, 0, wx.EXPAND, 0)
     self.SetSizer(grid_sizer_base)
     grid_sizer_base.AddGrowableRow(0)
     grid_sizer_base.AddGrowableCol(0)
     self.Layout()
     
     # Init Modèle
     self.SetModele(IDmodele)
    def test_lib_floatcanvas_fc_spline(self):
        fccanvas = fc.FloatCanvas(self.frame)

        obj = fc.Spline((2, 2))

        fccanvas.AddObject(obj)
        fccanvas.Destroy()
    def test_lib_floatcanvas_fc_scaledtextbox(self):
        fccanvas = fc.FloatCanvas(self.frame)

        obj = fc.ScaledTextBox("some text", (2, 2), 100)

        fccanvas.AddObject(obj)
        fccanvas.Destroy()
Beispiel #12
0
 def CreateCanvasPanel(self, parent):
     panel = wx.Panel(parent)
     panel.SetBackgroundColour("black")
     self.Canvas = FC.FloatCanvas(panel, BackgroundColor = "Black")
     self.CanvasBox = wx.BoxSizer(wx.VERTICAL)
     self.CanvasBox.Add(self.Canvas, 1, wx.EXPAND)
     panel.SetSizer(self.CanvasBox)
     return panel
    def test_lib_floatcanvas_fc_bitmap(self):
        fccanvas = fc.FloatCanvas(self.frame)

        bmp = wx.Bitmap(pngFile)
        obj = fc.Bitmap(bmp, (2, 2))

        fccanvas.AddObject(obj)
        fccanvas.Destroy()
Beispiel #14
0
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)
        self.canvas = FloatCanvas.FloatCanvas(
            self, BackgroundColor="DARK SLATE BLUE")
        MainSizer = wx.BoxSizer(wx.VERTICAL)
        MainSizer.Add(self.canvas, 4, wx.EXPAND)
        self.SetSizer(MainSizer)
        img = wx.Image('mypng(309x34).png')
        A = self.canvas.AddScaledBitmap(img, (0, 0),
                                        Height=img.GetHeight(),
                                        Position='tl')
        A.Bind(FloatCanvas.EVT_FC_MOTION, self.OnMotion)

        self.canvas.Scale = 1.0
        self.canvas.ViewPortCenter = (154, -17)
Beispiel #15
0
    def __init__(self, parent):
        super(PaintPanel, self).__init__(parent=parent)
        self.network = Engine.Instance().network
        szr = wx.BoxSizer()
        self.canvas = FloatCanvas.FloatCanvas(parent=self)
        szr.Add(self.canvas, proportion=1, flag=wx.EXPAND)
        self.SetSizer(szr)

        #self.Bind(wx.EVT_RIGHT_UP, Engine.Instance().OnRightClick)
        #self.canvas.Bind(wx.EVT_RIGHT_UP, Engine.Instance().OnRightClick)

        # The following is called a lambda expression:
        # It allows us to define functions on-the-go.
        # It is no more than a function without definition.
        self.canvas.Bind(wx.EVT_LEFT_UP, lambda event, panel=self.canvas: self.OnLeftClick(event))
        self.canvas.Bind(wx.EVT_ERASE_BACKGROUND,self.OnWindowBack)
Beispiel #16
0
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)

#        data = [(1, 2, 3), (1, 3, 4), (2, 2, 1), (2, 4, 5)]
#        wfr_info = wm_info.WaferInfo((2, 2), center_xy=(1, 1))
#        self.canvas = wm_core.WaferMapPanel(self, data, wfr_info)
        self.canvas = FloatCanvas.FloatCanvas(self,
                                              BackgroundColor="BLUE")
        self.canvas.InitAll()

        self.legend = Legend(self)

        self.canvas.Bind(FloatCanvas.EVT_MOUSEWHEEL, self.mouse_wheel)
        self.canvas.Bind(wx.EVT_KEY_DOWN, self.key_down)
#        self.Bind(FloatCanvas.EVT_LEFT_DOWN, self.on_click)

        # set our layout
        self.hbox = wx.BoxSizer(wx.HORIZONTAL)
        self.hbox.Add(self.legend, 0, wx.EXPAND)
        self.hbox.Add(self.canvas, 1, wx.EXPAND)
        self.SetSizer(self.hbox)
Beispiel #17
0
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)

        self.CreateStatusBar()

        # Add the Canvas
        Canvas = FloatCanvas.FloatCanvas(
            self,
            size=(500, 500),
            BackgroundColor="DARK SLATE BLUE",
        )

        self.Canvas = Canvas

        self.Canvas.Bind(FloatCanvas.EVT_MOTION, self.OnMove)

        Point = (45, 40)
        Box = Canvas.AddScaledTextBox("A Two Line\nString",
                                      Point,
                                      2,
                                      Color="Black",
                                      BackgroundColor=None,
                                      LineColor="Red",
                                      LineStyle="Solid",
                                      LineWidth=1,
                                      Width=None,
                                      PadSize=5,
                                      Family=wx.ROMAN,
                                      Style=wx.NORMAL,
                                      Weight=wx.NORMAL,
                                      Underlined=False,
                                      Position='br',
                                      Alignment="left",
                                      InForeground=False)

        Box.Bind(FloatCanvas.EVT_FC_LEFT_DOWN, self.Binding)
        self.Show()
        Canvas.ZoomToBB()
Beispiel #18
0
    def __init__(self):
        super(Frame, self).__init__(None)
        self.SetTitle('My Title')
        self.SetClientSize((500, 500))
        self.Center()
        
        self.Canvas = FloatCanvas.FloatCanvas(self, -1,
                                     size=(500, 500),
                                     ProjectionFun=None,
                                     Debug=0,
                                     BackgroundColor="White",
                                     )


        # add a circle
        cir = FloatCanvas.Circle((10, 10), 100)
        self.Canvas.AddObject(cir)

        # add a rectangle
        rect = FloatCanvas.Rectangle((110, 10), (100, 100), FillColor='Red')
        self.Canvas.AddObject(rect)

        self.Canvas.Draw()
Beispiel #19
0
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)

        self.CreateStatusBar()
        # Add the Canvas
        Canvas = FloatCanvas.FloatCanvas(self,
                                         ProjectionFun=None,
                                         Debug=0,
                                         BackgroundColor="WHITE")

        self.Canvas = Canvas

        Canvas.Bind(FC.EVT_MOTION, self.OnMove)
        Canvas.Bind(FC.EVT_LEFT_UP, self.OnLeftUp)

        self.Bitmaps = []
        ## create the bitmaps first
        for Point in ((-100, -100), (55, 1)):
            print Point
            btm = Resources.getMondrianImage()
            mbtm = MovingBitmap(btm, Point, btm.GetHeight(), Position='cc')
            self.Bitmaps.append((mbtm))
            Canvas.AddObject(mbtm)

        for bmp in self.Bitmaps:
            bmp.Bind(FC.EVT_FC_LEFT_DOWN, self.ObjectHit)
            print bmp.XY

        self.Show(True)

        self.add_again()
        # How can I get all the objects on the canvas?
        # print Canvas.GetObjects()
        # And for each object, can I get position?

        self.MoveObject = None
        self.Moving = False
Beispiel #20
0
Note: you need to specify the size in the FloatCanvas Constructor.

hmm -- I wonder if you'd even need the frame?

"""

import wx

## import the installed version
from wx.lib.floatcanvas import FloatCanvas

## import a local version
#import sys
#sys.path.append("../")
#from floatcanvas import NavCanvas, FloatCanvas

app = wx.App()

f = wx.Frame(None)
Canvas = FloatCanvas.FloatCanvas(f, BackgroundColor="Cyan", size=(500, 500))

Canvas.AddRectangle((0, 0), (16, 20))
Canvas.AddRectangle((1, 1), (6, 8.5))
Canvas.AddRectangle((9, 1), (6, 8.5))
Canvas.AddRectangle((9, 10.5), (6, 8.5))
Canvas.AddRectangle((1, 10.5), (6, 8.5))
Canvas.ZoomToBB()

print "Saving the image:", "junk.png"
Canvas.SaveAsImage("junk.png")
Beispiel #21
0
 def test_lib_floatcanvas_fc_rectangle(self):
     fccanvas = fc.FloatCanvas(self.frame)
     
     obj = fc.Rectangle((2, 2),  (2, 2))
     
     fccanvas.AddObject(obj)
Beispiel #22
0
 def test_lib_floatcanvas_fc_polygon(self):
     fccanvas = fc.FloatCanvas(self.frame)
     
     obj = fc.Polygon((2, 2))
     
     fccanvas.AddObject(obj)
Beispiel #23
0
 def test_lib_floatcanvas_fc_pointset(self):
     fccanvas = fc.FloatCanvas(self.frame)
     
     obj = fc.PointSet((2, 2))
     
     fccanvas.AddObject(obj)
Beispiel #24
0
 def test_lib_floatcanvas_fc_circle(self):
     fccanvas = fc.FloatCanvas(self.frame)
     
     obj = fc.Circle((2, 2),  2)
     
     fccanvas.AddObject(obj)
Beispiel #25
0
 def test_lib_floatcanvas_fc_arrowline(self):
     fccanvas = fc.FloatCanvas(self.frame)
     
     obj = fc.ArrowLine((10, 10))
     
     fccanvas.AddObject(obj)
Beispiel #26
0
 def test_lib_floatcanvas_fc_arc(self):
     fccanvas = fc.FloatCanvas(self.frame)
     
     obj = fc.Arc((10, 10), (20, 20), (5, 5))
     
     fccanvas.AddObject(obj)
Beispiel #27
0
 def test_lib_floatcanvas_floatcanvasCtor(self):
     fccanvas = fc.FloatCanvas(self.frame)
Beispiel #28
0
    def __init__(self,*args,**kwargs):
        wx.Frame.__init__(self,*args,**kwargs)

        ## Creating Menubar
        menubar = wx.MenuBar()
        filemenu = wx.Menu()
        file1 = filemenu.Append(wx.ID_NEW,'New','New File')
        file2 = filemenu.Append(wx.ID_OPEN,'Open','Open File')
        edit_submenu = wx.Menu()
        edit_submenu.Append(wx.ID_ANY,'Select')
        edit_submenu.Append(wx.ID_ANY,'Copy')
        edit_submenu.Append(wx.ID_ANY,'Paste')
        filemenu.Append(wx.ID_EDIT, '&Edit', edit_submenu)
        file4 = filemenu.Append(wx.ID_SAVE,'Save','Save File')
        file5 = filemenu.Append(wx.ID_SAVEAS,'Save As','Save As File')
        file6 = filemenu.Append(wx.ID_CLOSE,'Close','Close File')
        menubar.Append(filemenu, '&File')
        network_menu = wx.Menu()
        net1 = network_menu.Append(wx.ID_NETWORK,'net1','Network1')
        net2 = network_menu.Append(wx.ID_PREVIEW,'net2','Network2')
        net3 = network_menu.Append(wx.ID_SELECT_COLOR,'net3','Network3')
        menubar.Append(network_menu, '&Network')
        netisch_menu = wx.Menu()
        netisch1 = netisch_menu.Append(wx.ID_VIEW_DETAILS,'view','View NeTisch')
        netisch2 = netisch_menu.Append(wx.ID_VIEW_LIST,'netisch2','List NeTisch')
        menubar.Append(netisch_menu, '&NeTisch')
        help_menu = wx.Menu()
        aboutmenu = help_menu.Append(wx.ID_ABOUT,'About NeTisch','About NeTisch')
        menubar.Append(help_menu, '&Help')
        self.SetMenuBar(menubar)
        self.SetSize(900,900)
        self.Centre()

        ## Creating Iconbar
        toolbar1 = self.CreateToolBar()
        toolbar1.AddTool(wx.ID_OPEN,'Open/Load', wx.Bitmap('open.png'))
        toolbar1.AddTool(wx.ID_PREVIEW,'Run', wx.Bitmap('play.png'))
        toolbar1.AddTool(wx.ID_VIEW_DETAILS,'ViewCQ', wx.Bitmap('viewcq.png'))
        toolbar1.AddTool(wx.ID_VIEW_LARGEICONS,'ViewOpt-top', wx.Bitmap('viewopttop.png'))
        toolbar1.AddTool(wx.ID_VIEW_SMALLICONS,'VisSchedule', wx.Bitmap('visschedule.png'))
        toolbar1.EnableTool(wx.ID_REDO, False)
        toolbar1.AddSeparator()
        toolbar1.Realize()

        self.splitter_window = wx.SplitterWindow(self,id=wx.ID_ANY,style=wx.SP_3D)
        self.nav_canvas = FloatCanvas.FloatCanvas(self.splitter_window, size=(600, 900), BackgroundColor = "IVORY")
        self.nav_canvas.InitAll()
        self.properties_panel = wx.Panel(self.splitter_window, id = wx.ID_ANY)
        self.splitter_window.SplitVertically(self.nav_canvas, self.properties_panel)
        self.nav_canvas.Bind(FloatCanvas.EVT_LEFT_DOWN, self.OnLeftDown)

        # Creating StatusBar
        self.CreateStatusBar()
        self.SetStatusText("NeTisch - Graphical User Interface")

        self.nav_canvas.Draw()

        # Creating Panel-Network Design attributes
        sizer = wx.GridBagSizer()
        
        text1 = wx.StaticText(self.properties_panel,-1,label="Network Design ::")
        sizer.Add(text1,pos=(0,0),flag=wx.LEFT|wx.TOP, border=10)

        line = wx.StaticLine(self.properties_panel)
        sizer.Add(line, pos=(1, 0), span=(1, 12),flag=wx.EXPAND|wx.BOTTOM, border=10)
 
        text2 = wx.StaticText(self.properties_panel,-1,"Load:")
        sizer.Add(text2, pos=(2, 0), flag=wx.LEFT|wx.TOP, border=10)
        
        text3 = wx.TextCtrl(self.properties_panel,-1,style=wx.TOP|wx.TE_READONLY)
        text3.SetDefaultStyle(wx.TextAttr(wx.BLACK))
        sizer.Add(text3,pos=(2,1),flag=wx.EXPAND|wx.LEFT, border=5)
        
        button1 = wx.Button(self.properties_panel, label="Browse...")
        sizer.Add(button1, pos=(2, 9), flag=wx.TOP|wx.LEFT, border=5)
        self.Bind(wx.EVT_BUTTON, self.OnClickBrowse, button1)

        line1 = wx.StaticLine(self.properties_panel)
        sizer.Add(line1, pos=(4, 0), span=(1, 12),flag=wx.EXPAND|wx.BOTTOM, border=10)

        staticbox = wx.StaticBox(self.properties_panel, label="Gen C.Q:")
        staticboxsizer = wx.StaticBoxSizer(staticbox,wx.VERTICAL)
        combo1 = wx.ComboBox(self.properties_panel,-1,"Select: ",pos=(7,0),size=(150,30),choices=drop1,style=wx.CB_DROPDOWN)
        staticboxsizer.Add(combo1, 0, wx.ALL|wx.LEFT, 10)
        sizer.Add(staticboxsizer, pos=(6, 0), span=(1, 12), flag=wx.EXPAND|wx.TOP|wx.LEFT|wx.RIGHT , border=10)
        self.Bind(wx.EVT_COMBOBOX,self.OnGenCQ,combo1)
        
        sbox = wx.StaticBox(self.properties_panel, label="Optimize:")
        sboxsizer = wx.StaticBoxSizer(sbox,wx.VERTICAL)
        combo2 = wx.ComboBox(self.properties_panel,-1,"Select: ",pos=(11,0),size=(150,30),choices=drop2,style=wx.CB_DROPDOWN)
        sboxsizer.Add(combo2, 0, wx.ALL|wx.LEFT, 10)
        sizer.Add(sboxsizer, pos=(10, 0), span=(1, 12), flag=wx.EXPAND|wx.TOP|wx.LEFT|wx.RIGHT , border=10)
        self.Bind(wx.EVT_COMBOBOX,self.OnOptimize,combo2)

        sb = wx.StaticBox(self.properties_panel, label="Schedule:")
        sbsizer = wx.StaticBoxSizer(sb,wx.VERTICAL)
        combo4 = wx.ComboBox(self.properties_panel,-1,"Select: ",pos=(15,0),size=(150,30),choices=drop3,style=wx.CB_DROPDOWN)
        sbsizer.Add(combo4, 0, wx.ALL|wx.LEFT, 10)
        sizer.Add(sbsizer, pos=(14, 0), span=(1, 12), flag=wx.EXPAND|wx.TOP|wx.LEFT|wx.RIGHT , border=10)
        self.Bind(wx.EVT_COMBOBOX,self.OnSchedule,combo4)
        
        self.properties_panel.SetSizerAndFit(sizer)
        self.Show(True)
Beispiel #29
0
def generate(idtray_s, minimum_spectra):
    """A lot of effort has been made to make it look pretty inside Openoffice document with minimal alterations."""

    try:
        dlg = wx.FileDialog(None, 'Save report as',
                            t_setup.get_value("path_html"), '', '*.html',
                            wx.SAVE)

        if dlg.ShowModal() == wx.ID_OK:
            file_name = dlg.GetPath()
            dir_name = os.path.dirname(file_name)
            t_setup.update({"path_html": dir_name})

            # Report beginning
            h = html_r3(output_type=html.OUTPUT_FILE, file_name=file_name)
            h.open()
            h.page_header("Maps - Trays and Slides")

            w = wx.Frame(None)

            for idtray in idtray_s:

                (tray_code, tray_comments,
                 tray_picture) = t_tray.get_values_from_id(
                     ("code", "comments", "picture"), idtray)

                data_slide = t_slide.get_cursor_1tray(
                    ("id", "code", "shapes", "picture", "comments"),
                    idtray).fetchall()
                no_slides = len(data_slide)

                h.raw("<br>")
                h.title1("Tray " + tray_code)

                ###############
                # Tray details

                if tray_comments:
                    h.p(tray_comments)

                if tray_picture <> None:
                    canvas = fc.FloatCanvas(parent=w, id=wx.NewId())

                    img = wx.ImageFromStream(cStringIO.StringIO(tray_picture),
                                             wx.BITMAP_TYPE_ANY)
                    canvas.AddScaledBitmap(img.ConvertToBitmap(), (0, 0),
                                           Position="tl",
                                           Height=img.GetHeight())

                    file_name = tray_code + ".jpg"
                    complete_file_name = os.path.join(dir_name, file_name)

                    for i in range(0, no_slides):
                        slide_code = data_slide[i][1]
                        slide_shapes = data_slide[i][2]

                        p = pairs()
                        p.from_string(slide_shapes, slide_code)

                        for pair in p.pairs:
                            canvas.AddObject(pair.shape)
                            canvas.AddObject(pair.text)

                    adjust_canvas(canvas)

                    canvas.SaveAsImage(complete_file_name,
                                       ImageType=wx.BITMAP_TYPE_JPEG)

                    h.open_p_center()

                    TRAY_W = 500
                    bb = canvas.BoundingBox
                    height = int(TRAY_W * abs(bb[0, 1] - bb[1, 1]) /
                                 abs(bb[0, 0] - bb[1, 0]))

                    h.img(file_name,
                          w=str(TRAY_W) + "px",
                          h=str(height) + "px")
                    h.close_p()

                # Slides details

                if no_slides > 0:
                    NO_COLS = 3
                    SLIDE_W = 165
                    col = 0
                    flag_first = True

                    h.raw("<br>")
                    h.title1("Tray " + tray_code + " Slides")

                    for (idslide, slide_code, slide_shapes, slide_picture,
                         slide_comments) in data_slide:
                        if col == 0:
                            if not flag_first:
                                h.close_tr()
                                h.close_table()
                                h.raw("<br>")
                            else:
                                flag_first = False
                            h.open_table()
                            h.open_tr()
                        col += 1
                        if col == NO_COLS:
                            col = 0

                        h.open_td(w=str(int(100 / NO_COLS)) + "%")

                        h.title3(slide_code)

                        # Slide details

                        if slide_picture <> None:
                            canvas = fc.FloatCanvas(parent=w, id=wx.NewId())

                            img = wx.ImageFromStream(
                                cStringIO.StringIO(slide_picture),
                                wx.BITMAP_TYPE_ANY)
                            canvas.AddScaledBitmap(img.ConvertToBitmap(),
                                                   (0, 0),
                                                   Position="tl",
                                                   Height=img.GetHeight())

                            file_name = slide_code + ".jpg"
                            complete_file_name = os.path.join(
                                dir_name, file_name)

                            data_colony = t_spectrum.get_cursor_data(
                                field_names=(
                                    "colony.code",
                                    "colony.shapes",
                                    "colony.comments",
                                    "sum(flag_inactive is null or flag_inactive = 0) as sum_active",
                                ),
                                groupbys=["colony.id"],
                                flag_join_slide=True,
                                iddeact=session.iddeact,
                                idslide=idslide).fetchall()

                            no_colonies = len(data_colony)

                            for i in range(0, no_colonies):
                                colony_code = data_colony[i][0]
                                colony_shapes = data_colony[i][1]
                                spectrum_count = data_colony[i][3]

                                if spectrum_count >= minimum_spectra:
                                    p = pairs()
                                    p.from_string(
                                        colony_shapes,
                                        code_in_canvas(colony_code,
                                                       slide_code))

                                    for pair in p.pairs:
                                        canvas.AddObject(pair.shape)
                                        canvas.AddObject(pair.text)

                            adjust_canvas(canvas)

                            canvas.SaveAsImage(complete_file_name,
                                               ImageType=wx.BITMAP_TYPE_JPEG)

                            h.open_p_center()

                            bb = canvas.BoundingBox
                            height = int(SLIDE_W * abs(bb[0, 1] - bb[1, 1]) /
                                         abs(bb[0, 0] - bb[1, 0]))

                            h.img(file_name,
                                  w=str(SLIDE_W) + "px",
                                  h=str(height) + "px")
                            h.close_p()

                        if slide_comments:
                            h.p(slide_comments)

                        for i in range(0, no_colonies):
                            spectrum_count = data_colony[i][3]

                            if spectrum_count >= minimum_spectra:
                                colony_code = data_colony[i][0]
                                colony_comments = data_colony[i][2]
                                if colony_comments:
                                    h.raw(colony_code + " - " +
                                          colony_comments + "<br>")

                        h.close_td()

                if not flag_first:
                    h.close_tr()
                    h.close_table()


#      h.open_table()

# table header
#      h.open_tr()
#      h.th("Tray", 50)
#      h.th("Slide", 50)
#      h.th("Colony", 50)
#      h.th("File name", 50)

#      for name in judge_names(idtray_s):
#        h.th(name, 50)

#      h.close_tr()

#      i = 0
#      ii = 0
#      colony_code_last = -1
#      for row in data:
# row is (idspectrum, flag_active, tray code, slide code, colony code, file name, ...)

#        h.open_tr()
#        for value in row[NO_COLS_SKIP:]:
#          h.td(value)
#        h.close_tr()

#        i += 1
#        ii += 1
#        if ii == 123:
#          progress(float(i+1)/rows)
#          ii = 0

#      progress(1)

#      h.close_table()

            h.close()

    except error_x, e:
        act_main.handle_error(e)
    def __init__(self, parent=None):
        super().__init__(parent, title="SIM intensity profile")
        self.profiler = IntensityProfiler()
        # Outermost sizer.
        vbox = wx.BoxSizer(wx.VERTICAL)

        ## Toolbar
        toolbar = wx.ToolBar(self, -1)
        # Open file
        openTool = toolbar.AddTool(wx.ID_ANY,
                                   "Open",
                                   wx.ArtProvider.GetBitmap(
                                       wx.ART_FILE_OPEN, wx.ART_TOOLBAR,
                                       ICON_SIZE),
                                   shortHelp="Open a dataset.")
        toolbar.AddSeparator()
        # Number of phases
        phaseLabel = wx.StaticText(toolbar,
                                   wx.ID_ANY,
                                   label='# phases: ',
                                   style=wx.TRANSPARENT_WINDOW)
        phaseLabel.Bind(wx.EVT_ERASE_BACKGROUND, lambda event: None)
        toolbar.AddControl(phaseLabel)
        phasesTool = wx.SpinCtrl(toolbar,
                                 wx.ID_ANY,
                                 value='5',
                                 size=(48, -1),
                                 min=1,
                                 max=5,
                                 initial=5,
                                 style=wx.SP_ARROW_KEYS | wx.TE_PROCESS_ENTER)
        phasesTool.Bind(wx.EVT_SPINCTRL,
                        lambda event: self.profiler.setPhases(event.GetInt()))
        phasesTool.Bind(wx.EVT_TEXT_ENTER,
                        lambda event: self.profiler.setPhases(event.GetInt()))
        toolbar.AddControl(control=phasesTool)
        toolbar.AddSeparator()
        # Box size.
        boxLabel = wx.StaticText(toolbar,
                                 wx.ID_ANY,
                                 label='box size: ',
                                 style=wx.TRANSPARENT_WINDOW)
        boxLabel.Bind(wx.EVT_ERASE_BACKGROUND, lambda event: None)
        toolbar.AddControl(boxLabel)
        boxTool = wx.SpinCtrl(toolbar,
                              wx.ID_ANY,
                              value='25',
                              size=(48, -1),
                              min=10,
                              max=2**16,
                              initial=25,
                              style=wx.SP_ARROW_KEYS | wx.TE_PROCESS_ENTER)
        boxTool.Bind(wx.EVT_TEXT_ENTER,
                     lambda event: self.setBoxSize(event.GetInt()))
        boxTool.Bind(wx.EVT_SPINCTRL,
                     lambda event: self.setBoxSize(event.GetInt()))
        toolbar.AddControl(control=boxTool)
        self.boxTool = boxTool
        toolbar.AddSeparator()
        # Calculate profile.
        goTool = toolbar.AddTool(wx.ID_ANY,
                                 "Go",
                                 wx.ArtProvider.GetBitmap(
                                     wx.ART_TIP, wx.ART_TOOLBAR, ICON_SIZE),
                                 shortHelp="Evaluate intensity profile")
        toolbar.Realize()
        self.Bind(wx.EVT_TOOL, self.loadFile, openTool)
        self.Bind(wx.EVT_TOOL, self.calculate, goTool)
        vbox.Add(toolbar, 0, border=5)

        ## Canvases
        hbox = wx.BoxSizer(wx.HORIZONTAL)
        # Image canvas
        self.canvas = FloatCanvas.FloatCanvas(self,
                                              size=(512, 512),
                                              style=wx.WANTS_CHARS)

        img = wx.Image(BITMAP_SIZE[0], BITMAP_SIZE[1], clear=True)
        self.bitmap = self.canvas.AddBitmap(img, (0, 0), 'cc', False)
        self.circle = self.canvas.AddCircle((0, 0), 10, '#ff0000')
        self.rectangle = self.canvas.AddRectangle((0, 0), (20, 20), '#ff0000')
        self.canvas.Bind(FloatCanvas.EVT_LEFT_UP, self.onClickCanvas)
        hbox.Add(self.canvas)
        self.canvas.Bind(wx.EVT_CHAR, self.onKeys)
        # Plot canvas
        self.plotCanvas = plot.PlotCanvas(self, wx.ID_ANY)
        self.plotCanvas.canvas.Bind(wx.EVT_LEFT_UP, self.onClickPlotCanvas)
        self.plotCanvas.MinSize = (512, 512)
        self.plotCanvas.SetSize((512, 512))
        hbox.Add(self.plotCanvas)

        vbox.Add(hbox)

        ## Status bar.
        self.sb = self.CreateStatusBar()
        self.sb.SetFieldsCount(2)
        self.sb.DefaultText = 'Cursors, PgUp/Dn to set box. '        \
                              '(Shift) space to (global) find bead. '\
                              'Enter or Return to calculate.'
        self.sb.SetStatusText(self.sb.DefaultText)
        self.SetSizerAndFit(vbox)

        toolbar.SetToolLongHelp(0, self.sb.DefaultText)

        self.boxTool = boxTool