utils/BitmapLibrary.py
author Laurent Bessard
Tue, 17 Jul 2012 21:23:21 +0200
changeset 727 46ae58e6469f
parent 714 131ea7f237b9
permissions -rw-r--r--
Fixing bug with filesystem encoding on Windows
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