utils/BitmapLibrary.py
author Laurent Bessard
Mon, 25 Jun 2012 20:03:53 +0200
changeset 714 131ea7f237b9
permissions -rw-r--r--
Replacing buttons with text by buttons with icons
Adding support for bitmap library to have a common API for icon request handling
Simplify wx controls and sizers creation in dialogs and custom controls and panels
714
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
     1
#!/usr/bin/env python
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
     2
# -*- coding: utf-8 -*-
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
     3
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
     4
#This file is part of PLCOpenEditor, a library implementing an IEC 61131-3 editor
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
     5
#based on the plcopen standard. 
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
     6
#
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
     7
#Copyright (C) 2012: Edouard TISSERANT and Laurent BESSARD
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
     8
#
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
     9
#See COPYING file for copyrights details.
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    10
#
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    11
#This library is free software; you can redistribute it and/or
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    12
#modify it under the terms of the GNU General Public
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    13
#License as published by the Free Software Foundation; either
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    14
#version 2.1 of the License, or (at your option) any later version.
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    15
#
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    16
#This library is distributed in the hope that it will be useful,
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    17
#but WITHOUT ANY WARRANTY; without even the implied warranty of
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    18
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    19
#General Public License for more details.
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    20
#
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    21
#You should have received a copy of the GNU General Public
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    22
#License along with this library; if not, write to the Free Software
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    23
#Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    24
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    25
import os
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    26
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    27
import wx
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    28
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    29
#-------------------------------------------------------------------------------
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    30
#                            Library Structures
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    31
#-------------------------------------------------------------------------------
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    32
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    33
BitmapLibrary = {}
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    34
BitmapFolders = []
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    35
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    36
#-------------------------------------------------------------------------------
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    37
#                             Library Helpers
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    38
#-------------------------------------------------------------------------------
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    39
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    40
def AddBitmapFolder(path):
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    41
    if path not in BitmapFolders:
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    42
        BitmapFolders.append(path)
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    43
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    44
def SearchBitmap(bmp_name):
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    45
    for folder in BitmapFolders:
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    46
        bmp_path = os.path.join(folder, bmp_name + ".png")
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    47
        if os.path.isfile(bmp_path):
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    48
            return wx.Bitmap(bmp_path)
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    49
    return None
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    50
    
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    51
def GetBitmap(bmp_name1, bmp_name2=None, size=None):
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    52
    bmp = BitmapLibrary.get((bmp_name1, bmp_name2, size))
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    53
    if bmp is not None:
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    54
        return bmp
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    55
    
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    56
    if bmp_name2 is None:
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    57
        bmp = SearchBitmap(bmp_name1)
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    58
    else:
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    59
        # Bitmap with two icon
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    60
        bmp1 = SearchBitmap(bmp_name1)
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    61
        bmp2 = SearchBitmap(bmp_name2)
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    62
        
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    63
        if bmp1 is not None and bmp2 is not None:
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    64
            # Calculate bitmap size
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    65
            width = bmp1.GetWidth() + bmp2.GetWidth() - 1
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    66
            height = max(bmp1.GetHeight(), bmp2.GetHeight())
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    67
            
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    68
            # Create bitmap with both icons
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    69
            bmp = wx.EmptyBitmap(width, height)
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    70
            dc = wx.MemoryDC()
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    71
            dc.SelectObject(bmp)
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    72
            dc.Clear()
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    73
            dc.DrawBitmap(bmp1, 0, 0)
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    74
            dc.DrawBitmap(bmp2, bmp1.GetWidth() - 1, 0)
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    75
            dc.Destroy()
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    76
        
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    77
        elif bmp1 is not None:
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    78
            bmp = bmp1
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    79
        elif bmp2 is not None:
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    80
            bmp = bmp2
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    81
    
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    82
    if bmp is not None:
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    83
        BitmapLibrary[(bmp_name1, bmp_name2, size)] = bmp
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    84
        
131ea7f237b9 Replacing buttons with text by buttons with icons
Laurent Bessard
parents:
diff changeset
    85
    return bmp