Exemplo n.º 1
0
def updateDetails(*args, **kwargs):
    """
    A macro function that will update one Details-sheet while preserving
    previous user data. Movelister can have multiple Details-views. To determine
    which one is updated, the code checks which Overview button was pressed to
    trigger the macro.
    """
    try:
        if not Sheet.checkTemplatesExists():
            message_box.showWarningWithOk(
                'This file doesn\'t seem to have all necessary templates. Can\'t generate.'
            )
            return

        # Get Overview sheet name from active sheet or from provided kwargs.
        activeOverviewName = kwargs.get('activeSheet',
                                        helper.getActiveSheetName())
        # Get view name for the Details. This is presented in Overview sheet name inside parentheses.
        viewName = names.getViewName(activeOverviewName)
        detailsSheetName = names.getDetailsName(viewName)
        previousDetails = Details(viewName)
        if Sheet.hasByName(detailsSheetName):
            # Check if user wants to update existing Details-sheet.
            if not message_box.showSheetUpdateWarning():
                return
            previousDetails = Details.fromSheet(detailsSheetName)
        modifiersSheet = Modifiers(MODIFIER_LIST_SHEET_NAME)
        parentOverview = Overview.fromSheet(activeOverviewName)
        # Create new Details sheet by combining new and existing data.
        newDetails = UpdateDetails.update(modifiersSheet, parentOverview,
                                          previousDetails, viewName)
        # Delete previous Details-sheet and generate a new one.
        Sheet.deleteSheetByName(detailsSheetName)
        formatter = DetailsFormatter(newDetails, parentOverview)
        unoDetailsSheet = formatter.generate()
        # Make columns width optimal.
        length = cursor.getWidth(unoDetailsSheet)
        format.setOptimalWidthToRange(unoDetailsSheet, 0, length)
        # Generate data validation.
        validation.setDataValidationToDetailsSheet(unoDetailsSheet, viewName)
        # Generate named ranges.
        about = About(ABOUT_SHEET_NAME)
        if about.isGenerateNamedRangesOn():
            NamedRanges(unoDetailsSheet, 0, viewName).generate()
        # Generate cell styles used for details sheet.
        UpdateStyles.update()
        # Create conditional format ranges to the new details sheet which uses
        # styles created above.
        masterSheet = Master(MASTER_LIST_SHEET_NAME)
        resultsSheet = Results(RESULT_LIST_SHEET_NAME)
        inputSheet = Inputs(INPUT_LIST_SHEET_NAME)
        conditionalFormat.createDetailsConditionalFormats(
            unoDetailsSheet, masterSheet, resultsSheet, inputSheet, viewName)
        # Set new sheet as currently active sheet.
        helper.setActiveSheet(unoDetailsSheet)
    except errors.MovelisterError as e:
        helper.setActiveSheet(e.activeSheet)
        message_box.showWarningWithOk(str(e))
Exemplo n.º 2
0
    def testGenerate(self):
        """
        Test generating new Overview-sheet from template, then assert that the
        sheet really exists and has generated content in it.
        """
        modifier1 = Modifier('aa')
        modifier2 = Modifier('bb')
        modifier3 = Modifier('cc')
        self.overview.modifiers = [modifier1, modifier2, modifier3]

        modAct1 = Action('attack 1', phases=2, hitPhase=1, default=True)
        modAct1.addModifier(0, Modifier('aa'))
        modAct1.addModifier(1, Modifier('bb'))
        self.overview.addAction(modAct1)

        formatter = OverviewFormatter(self.overview)
        formatter.generate(1)

        sheet = Sheet.getByName(names.getOverviewName(self.sheetName))
        data = cursor.getSheetContent(sheet)
        self.assertEqual(
            data, [['', '', '', '', '', '', '', '', '', '', ''],
                   [
                       'Action Name', 'Hit', 'Frames', 'Phase', 'DEF', 'aa',
                       'bb', 'cc', 'Notes 1', 'Notes 2', 'Notes 3'
                   ], ['attack 1', '', '', '0', 'x', 'x', '', '', '', '', ''],
                   ['attack 1', 'x', '', '1', 'x', '', 'x', '', '', '', '']])
Exemplo n.º 3
0
 def testInputsConditionalFormats(self):
     inputSheet = Inputs(INPUT_LIST_SHEET_NAME)
     detailsUnoSheet = Sheet.getByName(self.detailsName)
     inputsConditionalFormat = conditionalFormat.createInputsConditionalFormat(
         detailsUnoSheet, inputSheet, self.view)
     self.assertGreater(inputsConditionalFormat.getCount(), 0)
     self.assertIn('Entry1', inputsConditionalFormat.getElementNames())
Exemplo n.º 4
0
 def _readSheetContent(self):
     self.sheet = Sheet.getByName(self.name)
     self.data = cursor.getSheetContent(self.sheet)
     self.headerRowIndex = helper.getHeaderRowPosition(self.data)
     self.dataBeginRow = self.headerRowIndex + 1
     self.nameColumnIndex = helper.getColumnPosition(
         self.data, 'Action Name', 0)
     self.hitColumnIndex = helper.getColumnPosition(self.data, 'Hit', 1)
     self.framesColumnIndex = helper.getColumnPosition(
         self.data, 'Frames', 2)
     self.phaseColumnIndex = helper.getColumnPosition(self.data, 'Phase', 3)
     self.defaultColumnIndex = helper.getColumnPosition(self.data, 'DEF', 4)
     self.notesIndex1 = helper.getColumnPosition(self.data, 'Notes 1', 5)
     self.notesIndex2 = helper.getColumnPosition(self.data, 'Notes 2', 6)
     self.notesIndex3 = helper.getColumnPosition(self.data, 'Notes 3', 7)
     self.dataHeader = self.data[self.headerRowIndex]
     self.dataRows = self._dataRows()
     self.modifierStartColumn = self.dataHeader.index(
         MODIFIER_START_COLUMN_NAME) + 1
     self.modifierEndColumn = self.dataHeader.index(
         MODIFIER_END_COLUMN_NAME)
     self.modifiers = self._readModifiers()
     self.actionNames = self._getUniqueActionNames()
     self._actions = self._readActions()
     self._highestPhase = self._getHighestPhase()
Exemplo n.º 5
0
 def testResultsConditionalFormats(self):
     resultsSheet = Results(RESULT_LIST_SHEET_NAME)
     detailsUnoSheet = Sheet.getByName(self.detailsName)
     resultsConditionalFormat = conditionalFormat.createResultsConditionalFormat(
         detailsUnoSheet, resultsSheet)
     self.assertGreater(resultsConditionalFormat.getCount(), 0)
     self.assertIn('Entry1', resultsConditionalFormat.getElementNames())
Exemplo n.º 6
0
 def testActionConditionalFormats(self):
     masterSheet = Master(MASTER_LIST_SHEET_NAME)
     detailsUnoSheet = Sheet.getByName(self.detailsName)
     actionConditionalFormat = conditionalFormat.createActionConditionalFormats(
         detailsUnoSheet, masterSheet, self.view)
     self.assertGreater(actionConditionalFormat.getCount(), 0)
     self.assertIn('Entry1', actionConditionalFormat.getElementNames())
Exemplo n.º 7
0
 def testNewSheetRightOf(self):
     rightOfName = MASTER_LIST_SHEET_NAME
     name = 'test sheet'
     sheet = Sheet.newSheetRightOf(rightOfName, name)
     self.assertEqual(sheet.getName(), name)
     names = Context.getDocument().Sheets.getElementNames()
     index = names.index(rightOfName)
     self.assertEqual(names.index(name), index + 1)
Exemplo n.º 8
0
 def generate(self):
     """
     Generate new Details sheet by copying template sheet and placing
     formatted Details class instance data in it.
     """
     sheet = Sheet.newDetails(self.parentOverviewName, self.instance.name)
     cursor.setSheetContent(sheet, self.format())
     return sheet
Exemplo n.º 9
0
 def generate(self, overviewSheetPosition):
     """
     Generate new Overview sheet by copying template sheet to given position
     and placing formatted Overview class instance data in it.
     """
     sheet = Sheet.newOverview(self.instance.name, overviewSheetPosition)
     cursor.setSheetContent(sheet, self.format())
     return sheet
Exemplo n.º 10
0
 def testNewSheetLeftOf(self):
     leftOfName = MODIFIER_LIST_SHEET_NAME
     name = 'test sheet'
     sheet = Sheet.newSheetLeftOf(leftOfName, name)
     self.assertEqual(sheet.getName(), name)
     names = Context.getDocument().Sheets.getElementNames()
     index = names.index(leftOfName)
     self.assertEqual(names.index(name), index - 1)
Exemplo n.º 11
0
 def __init__(self, sheetName):
     self.name = sheetName
     self.sheet = Sheet.getByName(sheetName)
     self.data = cursor.getSheetContent(self.sheet)
     self.dataBeginRow = 2
     self.optionsColumnIndex = 0
     self.generateNamedRangesIndex = helper.getRowPosition(
         self.data, 'Generate Named Ranges:', self.optionsColumnIndex)
     self.showEntriesAscendingIndex = helper.getRowPosition(
         self.data, 'Show entries ascending when generating validation:',
         self.optionsColumnIndex)
     self.OptionsColors = helper.getCellColorsFromColumn(
         self.sheet, 1, self.dataBeginRow, len(self.data))
Exemplo n.º 12
0
 def __init__(self, sheetName):
     self.name = sheetName
     self.sheet = Sheet.getByName(sheetName)
     self.data = cursor.getSheetContent(self.sheet)
     self.headerRowIndex = helper.getHeaderRowPosition(self.data)
     self.dataBeginRow = self.headerRowIndex + 1
     self.resultColumnIndex = helper.getColumnPosition(
         self.data, 'Results', 0)
     self.colorColumnIndex = helper.getColumnPosition(self.data, 'Color', 1)
     self.dataRows = self.data[self.dataBeginRow:]
     self.resultNames = self._parseResults()
     self.resultColors = helper.getCellColorsFromColumn(
         self.sheet, self.colorColumnIndex, self.dataBeginRow,
         len(self.data))
Exemplo n.º 13
0
 def __init__(self, sheetName):
     self.name = sheetName
     self.sheet = Sheet.getByName(sheetName)
     self.data = cursor.getSheetContent(self.sheet)
     self.headerRowIndex = helper.getHeaderRowPosition(self.data)
     self.dataBeginRow = self.headerRowIndex + 1
     self.inputsColumnIndex = helper.getColumnPosition(
         self.data, 'Input List', 0)
     self.nameColumnIndex = helper.getColumnPosition(
         self.data, 'Input Name', 1)
     self.buttonColumnIndex = helper.getColumnPosition(
         self.data, 'Button', 2)
     self.colorColumnIndex = helper.getColumnPosition(self.data, 'Color', 3)
     self.dataHeader = self.data[self.headerRowIndex]
     self.dataRows = self.data[self.dataBeginRow:]
     self.inputColors = helper.getCellColorsFromColumn(
         self.sheet, self.colorColumnIndex, self.dataBeginRow,
         len(self.data))
     self.inputs = self._parseInputs()
Exemplo n.º 14
0
 def testNewSheetWithExistingName(self):
     with self.assertRaises(RuntimeException):
         Sheet.newSheet(MASTER_LIST_SHEET_NAME, 0)
Exemplo n.º 15
0
 def setUp(self):
     super().setUp()
     self.detailsUnoSheet = Sheet.getByName('Details (Default)')
Exemplo n.º 16
0
 def testGetPosition(self):
     position = Sheet.getPosition(MODIFIER_LIST_SHEET_NAME)
     self.assertEqual(position, 4)
Exemplo n.º 17
0
def updateOverview(*args, **kwargs):
    """
    A macro function to update or create a new Overview sheet. Updated sheet
    will include earlier user data in the old Overview if any.
    """
    try:
        if not Sheet.checkTemplatesExists():
            message_box.showWarningWithOk(
                'This file doesn\'t seem to have all necessary templates. Can\'t generate.'
            )
            return

        # Get name of the Overview which user wants to generate.
        masterSheet = Master(MASTER_LIST_SHEET_NAME)
        activeSheetName = kwargs.get('activeSheet', '')
        if activeSheetName == '':
            viewName = masterSheet.getOverviewName()
            overviewSheetName = names.getOverviewName(viewName)
        else:
            viewName = names.getViewName(activeSheetName)
            overviewSheetName = activeSheetName

        # Some error checking.
        if not viewName:
            message_box.showWarningWithOk(
                'You can\'t generate an Overview if no View-name is set in cell C1.'
            )
            return

        if viewName not in masterSheet.getViewNames():
            message_box.showWarningWithOk(
                'You can\'t generate a View that has no Actions. Make sure at least one '
                +
                'Action uses the View-name written in cell C1 before continuing.'
            )
            return

        oldOverview = Overview(viewName)
        # If document has existing Overview, then that is set as previous instead.
        if Sheet.hasByName(overviewSheetName):
            # Check if user wants to update existing Overview.
            if not message_box.showSheetUpdateWarning():
                return
            oldOverview = Overview.fromSheet(overviewSheetName)

        newOverview = UpdateOverview.update(oldOverview, viewName)

        # Place new Overview sheet on the same position as the previous one. If previous one
        # does not exist, then place right of the Master sheet instead.
        position = Sheet.getPosition(overviewSheetName)
        if not position:
            position = Sheet.getPosition(MASTER_LIST_SHEET_NAME) + 1
        # Delete old sheet if exists.
        Sheet.deleteSheetByName(overviewSheetName)
        # Generate a new one.
        formatter = OverviewFormatter(newOverview)
        unoOverviewSheet = formatter.generate(position)
        # Make columns width optimal.
        length = cursor.getWidth(unoOverviewSheet)
        format.setOptimalWidthToRange(unoOverviewSheet, 0, length)
        # Fix sheet colors.
        formatter.setOverviewModifierColors(overviewSheetName)
        # Set new sheet as currently active sheet.
        helper.setActiveSheet(unoOverviewSheet)
    except errors.MovelisterError as e:
        helper.setActiveSheet(e.activeSheet)
        message_box.showWarningWithOk(str(e))
Exemplo n.º 18
0
 def testGetSheetContent(self):
     masterSheet = Sheet.getByName(MASTER_LIST_SHEET_NAME)
     data = cursor.getSheetContent(masterSheet)
     for row in data:
         self.assertIsInstance(row, list)
Exemplo n.º 19
0
 def testGetWrongPosition(self):
     self.assertEqual(Sheet.getPosition('fails'), None)
Exemplo n.º 20
0
 def testGetSheetNames(self):
     names = Sheet.getSheetNames()
     for name in names:
         self.assertIsInstance(name, str)
Exemplo n.º 21
0
 def __init__(self, activeSheetName, message):
     Exception.__init__(self, message)
     self.activeSheet = Sheet.getByName(activeSheetName)
Exemplo n.º 22
0
 def testNewSheet(self):
     newName = 'test sheet'
     sheet = Sheet.newSheet(newName, 0)
     self.assertEqual(sheet.getName(), newName)
Exemplo n.º 23
0
 def testNewOverview(self):
     name = 'test'
     overviewName = names.getOverviewName(name)
     sheet = Sheet.newOverview(overviewName, 0)
     self.assertEqual(sheet.Name, overviewName)
     self.assertTrue(overviewName in Sheet.getSheetNames())
Exemplo n.º 24
0
 def testNewSheetRightOfWithWrongName(self):
     rightOfName = 'fail'
     self.assertEqual(Sheet.newSheetRightOf(rightOfName, 'will fail'), None)