Пример #1
0
 def initialize(self):
     self.flags = BitDict(
         'KeepScreenRatio',
         'FrameTransition',  # (HWA only) frame has a transition
         'ResampleStretch',  # (HWA only) resample while resizing
         'GlobalRefresh'  # (Mobile) force global refresh
     )
    def write_init(self, writer):
        data = self.get_data()
        x_size = max(1, data.readInt())
        y_size = max(1, data.readInt())
        z_size = max(1, data.readInt())
        flags = BitDict('Numeric', 'Text', 'Base1', 'Global')
        flags.setFlags(data.readInt())
        is_numeric = flags['Numeric']
        offset = int(flags['Base1'])

        init = to_c('initialize(%s, %s, %s, %s, %s);', is_numeric, offset,
                    x_size, y_size, z_size)

        if flags['Global']:
            glob = self.get_global('ArrayObject::SavedArray')
            writer.putlnc('global_data = &%s;', glob)
            writer.putlnc('if (!%s.init) {', glob)
            writer.indent()
            writer.putlnc('%s.init = true;', glob)
            writer.putln(init)
            writer.dedent()
            writer.putln('} else {')
            writer.indent()
            writer.putlnc('data = %s.value;', glob)
            writer.end_brace()
        else:
            writer.putln(init)
Пример #3
0
    def created(self, data):
        self.flags = flags = BitDict(
            'HorizontalScrollbar', 'HorizontalAutoscroll', 'VerticalScrollbar',
            'VerticalAutoscroll', 'ReadOnly', 'Multiline', 'Password',
            'Border', 'HideOnStart', 'Uppercase', 'Lowercase', 'Tabstop',
            'SystemColor', '3DLook', 'Transparent', None, 'AlignCenter',
            'AlignRight')
        self.width = data.readShort(True)
        self.height = data.readShort(True)
        # XXX support unicode when the unicode build is out!
        self.logFont = LogFont(data, old=True)
        data.skipBytes(4 * 16)  # custom colors?
        self.foregroundColor = data.readColor()
        self.backgroundColor = data.readColor()
        data.skipBytes(40)  # text-style?
        flags.setFlags(data.readInt())

        if flags['HideOnStart']:
            self.parent.visible = False

        self.enable_mouse()
        self.widget = self.new(Edit)
        self.widget.initialize(
            int(self.x),
            int(self.y) - self.height, self.width, self.height,
            self.foregroundColor, self.backgroundColor, self.logFont,
            flags['Password'], flags['AlignCenter'], flags['AlignRight'],
            flags['Uppercase'], flags['Lowercase'], flags['ReadOnly'],
            flags['Multiline'], flags['Transparent'], flags['Border'])
        self.player.window.push_handlers(
            on_text_motion=self.widget.on_text_motion,
            on_text=self.widget.on_text,
            on_text_motion_select=self.widget.on_text_motion_select)
Пример #4
0
    def write_init(self, writer):
        data = self.get_data()
        flags = BitDict('FreeFlag', 'VerticalScrollbar', 'Sort', 'Border',
                        'HideOnStart', 'SystemColor', '3DLook',
                        'ScrollToNewline')
        width = data.readShort()
        height = data.readShort()
        is_unicode = self.data.settings.get('unicode', False)
        font = self.data.new(LogFont, data, old=not is_unicode)
        font_color = data.readColor()
        self.data.readString(data, 40)

        data.skipBytes(16 * 4)
        back_color = data.readColor()
        flags.setFlags(data.readInt())
        line_count = data.readShort(True)
        index_offset = -1 if data.readInt() == 1 else 0
        data.skipBytes(4 * 3)
        lines = []
        for _ in xrange(line_count):
            line = self.data.readString(data)
            writer.putln(to_c('add_line(%r);', line))

        if flags['HideOnStart']:
            writer.putln('set_visible(false);')

        if flags['Sort']:
            writer.putln('list_flags |= SORT_LIST;')

        writer.putlnc('index_offset = current_line = %s;', index_offset)
Пример #5
0
    def write_init(self, writer):
        data = self.get_data()
        x_size = max(1, data.readInt())
        y_size = max(1, data.readInt())
        z_size = max(1, data.readInt())
        flags = BitDict('Numeric', 'Text', 'Base1', 'Global')
        flags.setFlags(data.readInt())
        is_numeric = flags['Numeric']
        offset = int(flags['Base1'])

        init = to_c('initialize(%s, %s, %s, %s, %s);', is_numeric, offset,
                    x_size, y_size, z_size)

        if flags['Global']:
            writer.putln('static ArrayData static_global_data;')
            writer.putln('global_data = &static_global_data;')
            writer.putln('static bool init = false;')
            writer.putln('if (!init) {')
            writer.indent()
            writer.putln('init = true;')
            writer.putln(init)
            writer.dedent()
            writer.putln('} else {')
            writer.indent()
            writer.putln('data = static_global_data;')
            writer.end_brace()
        else:
            writer.putln(init)
Пример #6
0
 def initialize(self):
     # 0x8000 == TimedMovements
     self.flags = BitDict('DisplayName', 'GrabDesktop', 'KeepDisplay',
                          'FadeIn', 'FadeOut', 'TotalCollisionMask',
                          'Password', 'ResizeAtStart', 'DoNotCenter',
                          'ForceLoadOnCall', 'NoSurface', 'Reserved_1',
                          'Reserved_2', 'RecordDemo', None,
                          'TimedMovements')
Пример #7
0
 def created(self, data):
     self.flags = flags = BitDict('HideOnStart', 'DisableOnStart',
                                  'TextOnLeft', 'Transparent',
                                  'SystemColor')
     strings = []
     width = data.readShort()
     height = data.readShort()
     self.buttonType = buttonType = data.readShort()
     self.buttonCount = buttonCount = data.readShort()
     flags.setFlags(data.readInt())
     self.font = LogFont(data)
     self.fontColor = data.readColor()
     self.backColor = data.readColor()
     if self.flags['SystemColor']:
         self.backColor = (255, 255, 255)
     buttonImages = [data.readShort() for _ in xrange(3)]
     if buttonType in (PUSHBITMAP_BUTTON, PUSHTEXTBITMAP_BUTTON):
         self.textures = textures = []
         for item in buttonImages:
             textures.append(
                 self.make_image_handle(item) if item != -1 else None)
     if buttonType == PUSHBITMAP_BUTTON:
         width = max([item.width
                      for item in textures if item is not None] + [32])
         height = max(
             [item.height for item in textures if item is not None] + [32])
     data.readShort()  # fourth word in img array
     data.readInt()  # ebtnSecu
     align = data.readShort()
     tooltip = ''
     if buttonType == RADIO_BUTTON:
         strings = [data.readString() for _ in xrange(buttonCount)]
     else:
         strings.append(data.readString())
         tooltip = data.readString()
     self.values = [False for _ in xrange(buttonCount)]
     self.width = width
     self.height = height
     self.strings = strings
     self.tooltip = tooltip
     self.enable_mouse()
     if flags['DisableOnStart']:
         value = False
     else:
         value = True
     self.enabled = [value for _ in xrange(self.buttonCount)]
     if flags['HideOnStart']:
         self.parent.visible = False
     self.setup()
Пример #8
0
 def initialize(self):
     self.palette = []
     self.flags = BitDict(
         'GrabDesktop',
         'KeepDisplay',
         'BackgroundCollisions',
         'DisplayFrameTitle',
         'ResizeToScreen',
         'ForceLoadOnCall',
         'NoDisplaySurface',
         'ScreenSaverSetup',
         'TimerBasedMovements',
         'MochiAds',
         'NoGlobalEvents'
     )
Пример #9
0
 def initialize(self):
     self.flags = BitDict(
         'XCoefficient',
         'YCoefficient',
         'DoNotSaveBackground',
         None, #Wrap (Obsolete)
         'Visible', # visible
         'WrapHorizontally',
         'WrapVertically',
         None, None, None, None,
         None, None, None, None, None,
         'Redraw',
         'ToHide',
         'ToShow'
     )
Пример #10
0
 def created(self, data):
     self.flags = flags = BitDict(
         'Resize',
         'HideOnStart',
         'TransparentBlack',
         'TransparentFirstPixel',
         'FlippedHorizontally',
         'FlippedVertically',
         'Resample',
         'WrapModeOff',
     )
     self.width = data.readInt()
     self.height = data.readInt()
     flags.setFlags(data.readInt(True))
     self.transparentColor = data.readColor()
     imageName = data.readString(260)
     if imageName != '':
         self.load(imageName)
Пример #11
0
 def created(self, data):
     storage = self.get_storage()
     if storage:
         self.array = storage['value']
         return
     xDimension = data.readInt()
     yDimension = data.readInt()
     zDimension = data.readInt()
     flags = BitDict('Numeric', 'Text', 'Base1', 'Global')
     flags.setFlags(data.readInt())
     if flags['Base1']:
         self.arrayX = self.arrayY = self.arrayZ = 1
     # yeah, I think this is comprehensive too.
     self.array = array = MMFArray()
     if flags['Numeric']:
         arrayType = 'Numeric'
     else:
         arrayType = 'Text'
     array.flags = flags
     array.setup(xDimension, yDimension, zDimension, arrayType)
     self.get_storage()['value'] = array
Пример #12
0
 def write_init(self, writer):
     data = self.get_data()
     width = data.readInt()
     height = data.readInt()
     self.flags = BitDict(
         'Resize',
         'HideOnStart',
         'TransparentBlack',
         'TransparentFirstPixel',
         'FlippedHorizontally',
         'FlippedVertically',
         'Resample',
         'WrapModeOff',
     )
     self.flags.setFlags(data.readInt(True))
     visible = not self.flags['HideOnStart']
     transparent_color = data.readColor()
     if not self.flags['TransparentFirstPixel']:
         writer.putln('set_transparent_color(%s);' %
                      make_color(transparent_color))
     image = data.readString(260) or None
Пример #13
0
    def created(self, data):
        self.flags = flags = BitDict('FreeFlag', 'VerticalScrollbar', 'Sort',
                                     'Border', 'HideOnStart', 'SystemColor',
                                     '3DLook', 'ScrollToNewline')
        self.width = data.readShort()
        self.height = data.readShort()
        # XXX support unicode
        self.font = font = LogFont(data, old=True)
        self.fontColor = data.readColor()
        data.readString(40)
        data.skipBytes(16 * 4)
        self.backColor = data.readColor()
        flags.setFlags(data.readInt())
        lineCount = data.readShort(True)
        self.indexOffset = -1 if data.readInt() == 1 else 0
        data.skipBytes(4 * 3)
        lines = []
        for _ in xrange(lineCount):
            lines.append(data.readString())

        if flags['HideOnStart']:
            self.parent.visible = False

        self.listObject = self.new(List)
        self.listObject.initialize(0,
                                   0,
                                   self.width,
                                   self.height,
                                   border=flags['Border'],
                                   border3d=flags['3DLook'],
                                   scrollBar=flags['VerticalScrollbar'],
                                   backColor=self.backColor,
                                   font=font,
                                   fontColor=self.fontColor)

        self.enable_mouse()

        self.listObject.extend(lines)
Пример #14
0
    def write_init(self, writer):
        data = self.get_data()
        flags = BitDict('FreeFlag', 'VerticalScrollbar', 'Sort', 'Border',
                        'HideOnStart', 'SystemColor', '3DLook',
                        'ScrollToNewline')
        width = data.readShort()
        height = data.readShort()
        # XXX support unicode
        font = LogFont(data, old=True)
        font_color = data.readColor()
        data.readString(40)
        data.skipBytes(16 * 4)
        back_color = data.readColor()
        flags.setFlags(data.readInt())
        line_count = data.readShort(True)
        index_offset = -1 if data.readInt() == 1 else 0
        data.skipBytes(4 * 3)
        lines = []
        for _ in xrange(line_count):
            line = data.readString()
            writer.putln(to_c('add_line(%r);', line))

        if flags['HideOnStart']:
            writer.putln('set_visible(false);')
Пример #15
0
    def getType(self):
        header = self.data[:4]
        if self.data[:4] == 'RIFF':
            return 'WAV'
        elif self.data[:4] == 'AIFF':
            return 'AIFF'
        elif self.data[:4] == 'OggS':
            return 'OGG'
        else:
            # assume MOD
            return 'MOD'

SOUND_FLAGS = BitDict(
    'Wave',
    'MIDI',
    None, None,
    'LoadOnCall',
    'PlayFromDisk',
    'Loaded'
)

class SoundItem(BaseSound):
    handle = None
    checksum = None
    references = None
    flags = None
    name = None
    data = None
    
    def initialize(self):
        self.flags = SOUND_FLAGS.copy()
    
Пример #16
0
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Anaconda.  If not, see <http://www.gnu.org/licenses/>.

from chowdren.writers.objects import ObjectWriter
from chowdren.common import get_animation_name, to_c, make_color
from chowdren.writers.events import (ComparisonWriter, ActionMethodWriter,
                                     ConditionMethodWriter,
                                     ExpressionMethodWriter, make_table)
from mmfparser.bitdict import BitDict

FLAGS = BitDict('Resize', 'HideOnStart', 'TransparentBlack',
                'TransparentFirstPixel', 'FlippedHorizontally',
                'FlippedVertically', 'Resample', 'WrapModeOff')


class ActivePicture(ObjectWriter):
    is_active_picture = True
    class_name = 'ActivePicture'
    filename = 'picture'
    use_alterables = True
    default_instance = 'default_picture_instance'

    def write_init(self, writer):
        data = self.get_data()
        if self.is_active_picture:
            width = data.readInt()
            height = data.readInt()
Пример #17
0
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Anaconda.  If not, see <http://www.gnu.org/licenses/>.

from chowdren.writers.objects import ObjectWriter
from chowdren.common import get_animation_name, to_c, make_color
from chowdren.writers.events import (ComparisonWriter, ActionMethodWriter,
                                     ConditionMethodWriter,
                                     ExpressionMethodWriter, make_table,
                                     EmptyAction)
from mmfparser.data.font import LogFont
from mmfparser.bitdict import BitDict

BUTTON_FLAGS = BitDict('HideOnStart', 'DisableOnStart', 'TextOnLeft',
                       'Transparent', 'SystemColor')

PUSHTEXT_BUTTON = 0
CHECKBOX_BUTTON = 1
RADIO_BUTTON = 2
PUSHBITMAP_BUTTON = 3
PUSHTEXTBITMAP_BUTTON = 4

BUTTON_BORDER = 1


class ButtonObject(ObjectWriter):
    class_name = 'ButtonObject'
    filename = 'buttonext'

    def write_init(self, writer):
Пример #18
0
# You should have received a copy of the GNU General Public License
# along with Anaconda.  If not, see <http://www.gnu.org/licenses/>.

from chowdren.writers.objects import ObjectWriter

from chowdren.common import get_animation_name, to_c, make_color

from chowdren.writers.events import (ComparisonWriter, ActionMethodWriter,
                                     ConditionMethodWriter,
                                     ExpressionMethodWriter, make_table)

from mmfparser.bitdict import BitDict
from mmfparser.data.font import LogFont

COMBO_FLAGS = BitDict('Simple', 'Dropdown', 'DropdownList', 'ScrollBar',
                      'Sort', 'HideOnStart', 'SystemColor', 'Scroll',
                      'OneBase')


class ComboBox(ObjectWriter):
    class_name = 'ComboBox'
    filename = 'combobox'

    def write_init(self, writer):
        data = self.get_data()
        width = data.readShort(True)
        height = data.readShort(True)
        is_unicode = self.data.settings.get('unicode', False)
        log_font = self.data.new(LogFont, data, old=not is_unicode)
        font_color = data.readColor()
        font_style = self.data.readString(data, 40)
Пример #19
0
 def initialize(self):
     self.flags = BitDict('Numeric', 'Text', 'Base1', 'Global')
     self.flags.setFlags(0)  # to prevent BitDict from complaining :)
     self.flags['Base1'] = True  # default
     self.flags['Text'] = True  # default
     self.default = ''
Пример #20
0
from chowdren.writers.objects import ObjectWriter
from chowdren.common import get_animation_name, to_c, make_color
from chowdren.writers.events import (ComparisonWriter, ActionMethodWriter,
                                     ConditionMethodWriter,
                                     ExpressionMethodWriter, make_table)
from mmfparser.data.font import LogFont
from mmfparser.bitdict import BitDict

EDIT_FLAGS = BitDict('HorizontalScrollbar', 'HorizontalAutoscroll',
                     'VerticalScrollbar', 'VerticalAutoscroll', 'ReadOnly',
                     'Multiline', 'Password', 'Border', 'HideOnStart',
                     'Uppercase', 'Lowercase', 'Tabstop', 'SystemColor',
                     '3DLook', 'Transparent', None, 'AlignCenter',
                     'AlignRight')


class EditObject(ObjectWriter):
    class_name = 'EditObject'
    filename = 'editext'

    def write_init(self, writer):
        if not self.has_updates():
            return
        data = self.get_data()
        width = data.readShort(True)
        height = data.readShort(True)
        logFont = LogFont(data, old=True)
        data.skipBytes(4 * 16)  # custom colors?
        foregroundColor = data.readColor()
        backgroundColor = data.readColor()
        data.skipBytes(40)  # text-style?
Пример #21
0
        reader.writeColor(self.backColor)
        reader.writeShort(0)
        reader.writeInt(self.id)

class Int(ParameterCommon):
    value = None

    def read(self, reader):
        self.value = reader.readInt()

    def write(self, reader):
        reader.writeInt(self.value)

SAMPLE_FLAGS = BitDict(
    'Uninterruptible',
    'Bad',
    'IPhoneAudioPlayer',
    'IPhoneOpenAL'
)


class Sample(ParameterCommon):
    handle = None
    flags = None

    def initialize(self):
        self.flags = SAMPLE_FLAGS.copy()

    def read(self, reader):
        self.handle = reader.readShort()
        self.flags.setFlags(reader.readShort(True))
        self.name = self.readString(reader)
Пример #22
0
 def created(self):
     self.flags = BitDict('Wait', 'Hide')
 def initialize(self):
     self.flags = BitDict('Color')
Пример #24
0
        reader.writeColor(self.fontColor)
        reader.writeColor(self.backColor)
        reader.writeShort(0)
        reader.writeInt(self.id)

class Int(ParameterCommon):
    value = None
    
    def read(self, reader):
        self.value = reader.readInt()
    
    def write(self, reader):
        reader.writeInt(self.value)

SAMPLE_FLAGS = BitDict(
    'Uninterruptible',
    'Bad'
)


class Sample(ParameterCommon):
    handle = None
    flags = None
    
    def initialize(self):
        self.flags = SAMPLE_FLAGS.copy()
    
    def read(self, reader):
        self.handle = reader.readShort()
        self.flags.setFlags(reader.readShort(True))
        self.name = reader.readString()
    
Пример #25
0
        return instance.x


class Expression3(Expression):
    """
    Y Position of hiscore table
    Return type: Int
    """
    def get(self, instance):
        return instance.y


from mmfparser.data.font import LogFont
from mmfparser.bitdict import BitDict

HIGHSCORE_FLAGS = BitDict('HideOnStart', 'NameFirst', 'CheckOnStart',
                          'HideScores', 'FullPath')

from mmfparser.player.objects.question import (draw_rectangle, draw_border,
                                               X_MARGIN, Y_MARGIN)
from pyglet.text import Label
from mmfparser.player.ini import FastINI
import os

from pyglet import gl
from pyglet.window import key

BOX_WIDTH = 400
BOX_HEIGHT = 70


class DefaultObject(HiddenObject):
Пример #26
0
    def get(self, instance):
        raise NotImplementedError('%s not implemented' % (str(self)))


class Expression14(Expression):
    """
    Files->Get File Size
    Return type: Int
    """
    def get(self, instance):
        raise NotImplementedError('%s not implemented' % (str(self)))


from mmfparser.bitdict import BitDict

FLAGS = BitDict('FilterCharacters', 'NoPadding')

global_keys = {}


class DefaultObject(HiddenObject):
    def created(self, data):
        self.flags = flags = FLAGS.copy()
        flags.setFlags(data.readInt())
        data.skipBytes(4)
        self.filter = filter = []
        while 1:
            byte = data.read(1)
            if byte == '\x00':
                data.skipBytes(1)
                break
 def initialize(self):
     self.flags = BitDict('Wave', 'MIDI', None, None, 'LoadOnCall',
                          'PlayFromDisk', 'Loaded')
Пример #28
0
    if index & (1 << 31) != 0:
        return get_color_tuple(index)
    try:
        return COLORS[index]
    except KeyError:
        return (0, 0, 0)


def read_system_color(reader):
    return get_system_color(reader.readInt(True))


FLAGS = BitDict('AlignTop', 'AlignVerticalCenter', 'AlignBottom', None,
                'AlignLeft', 'AlignHorizontalCenter', 'AlignRight', None,
                'Multiline', 'NoPrefix', 'EndEllipsis', 'PathEllipsis',
                'Container', 'Contained', 'Hyperlink', None,
                'AlignImageTopLeft', 'AlignImageCenter', 'AlignImagePattern',
                None, 'Button', 'Checkbox', 'ShowButtonBorder',
                'ImageCheckbox', 'HideImage', 'ForceClipping', None, None,
                'ButtonPressed', 'ButtonHighlighted', 'Disabled')

NONE, HYPERLINK, BUTTON, CHECKBOX = xrange(4)


class SystemBox(ObjectWriter):
    class_name = 'SystemBox'
    filename = 'systembox'
    use_alterables = True
    default_instance = 'default_systembox_instance'

    def write_init(self, writer):
        data = self.get_data()
Пример #29
0
    def writeKeys(self, reader):
        self.keys.write(reader)

    def write(self, reader):
        reader.writeShort(self.controlType)


HEADER_FLAGS = BitDict(
    'BorderMax',
    'NoHeading',
    'Panic',
    'SpeedIndependent',
    'Stretch',
    'MusicOn',  # obsolete?
    'SoundOn',  # obsolete?
    'MenuHidden',
    'MenuBar',
    'Maximize',  # maximized at bootup?
    'MultiSamples',
    'FullscreenAtStart',
    'FullscreenSwitch',
    'Protected',  # wonder...
    'Copyright',
    'OneFile'  # ?
)

HEADER_NEW_FLAGS = BitDict(
    'SamplesOverFrames',
    'RelocFiles',
    'RunFrame',
    'SamplesWhenNotFocused',
    'NoMinimizeBox',
Пример #30
0
            items.append(self.new(CHUNK_LOADERS[id], data))
        size = reader.tell() - start
        reader.seek(start)
        self.saved = reader.read(size)

    def write(self, reader):
        if self.saved is not None:
            reader.write(self.saved)
        else:
            reader.writeByte(0)

LAYER_FLAGS = BitDict(
    'Visible',
    'Locked',
    'Obsolete',
    'HideAtStart',
    'NoBackground',
    'WrapHorizontally',
    'WrapVertically',
    'PreviousEffect'
)

class Layer(DataLoader):
    name = None
    xCoefficient = None
    yCoefficient = None
    flags = None

    def initialize(self):
        self.flags = LAYER_FLAGS.copy()

    def read(self, reader):