Example #1
0
 def getItemTooltipData(self, task):
     if not self.settings.getboolean('view', 'descriptionpopups'):
         return []
     result = [(self.iconName(task, task in self.curselection()), 
                [self.getItemText(task)])]
     if task.description():
         result.append((None, map(lambda x: x.rstrip('\n'),
                              task.description().split('\n'))))
     if task.notes():
         result.append(('note_icon', sorted([note.subject() for note in task.notes()])))
     if task.attachments():
         result.append(('paperclip_icon',
             sorted([unicode(attachment) for attachment in task.attachments()])))
     return result
Example #2
0
    def __init__(self, parent, task, *args, **kwargs):
        super(SubjectPage, self).__init__(parent, task, *args, **kwargs)
        descriptionBox = widgets.BoxWithFlexGridSizer(self, _("Description"), cols=2, growableRow=1, growableCol=1)
        descriptionBox.add(_("Subject"))
        self._subjectEntry = widgets.SingleLineTextCtrl(descriptionBox, task.subject())
        descriptionBox.add(self._subjectEntry, proportion=1, flag=wx.EXPAND)
        descriptionBox.add(_("Description"))
        self._descriptionEntry = widgets.MultiLineTextCtrl(descriptionBox, task.description())
        descriptionBox.add(self._descriptionEntry, proportion=1, flag=wx.EXPAND)

        priorityBox = widgets.BoxWithFlexGridSizer(self, _("Priority"), cols=2)
        priorityBox.add(_("Priority"))
        self._prioritySpinner = PrioritySpinCtrl(priorityBox, value=render.priority(task.priority()))
        priorityBox.add(self._prioritySpinner)

        for box, proportion in [(descriptionBox, 1), (priorityBox, 0)]:
            box.fit()
            self.add(box, proportion=proportion, flag=wx.EXPAND | wx.ALL, border=5)
        self.fit()
Example #3
0
 def _createColumns(self):
     kwargs = dict(renderDescriptionCallback=lambda task: task.description(),
                   resizeCallback=self.onResizeColumn)
     columns = [widgets.Column('subject', _('Subject'), 
             task.Task.subjectChangedEventType(), 
             'task.completionDateTime', 'task.dueDateTime', 
             'task.startDateTime',
             task.Task.trackStartEventType(), task.Task.trackStopEventType(), 
             sortCallback=uicommand.ViewerSortByCommand(viewer=self,
                 value='subject'),
             width=self.getColumnWidth('subject'), 
             imageIndicesCallback=self.subjectImageIndices,
             renderCallback=self.renderSubject, 
             editCommand=command.EditSubjectCommand, 
             editControl=inplace_editor.SubjectCtrl, **kwargs)] + \
         [widgets.Column('description', _('Description'), 
             task.Task.descriptionChangedEventType(), 
             sortCallback=uicommand.ViewerSortByCommand(viewer=self,
                 value='description'),
             renderCallback=lambda task: task.description(), 
             width=self.getColumnWidth('description'),  
             editCommand=command.EditDescriptionCommand, 
             editControl=inplace_editor.DescriptionCtrl, **kwargs)] + \
         [widgets.Column('attachments', '', 
             task.Task.attachmentsChangedEventType(), # pylint: disable-msg=E1101
             width=self.getColumnWidth('attachments'),
             alignment=wx.LIST_FORMAT_LEFT,
             imageIndicesCallback=self.attachmentImageIndices,
             headerImageIndex=self.imageIndex['paperclip_icon'],
             renderCallback=lambda task: '', **kwargs)]
     if self.settings.getboolean('feature', 'notes'):
         columns.append(widgets.Column('notes', '', 
             task.Task.notesChangedEventType(), # pylint: disable-msg=E1101
             width=self.getColumnWidth('notes'),
             alignment=wx.LIST_FORMAT_LEFT,
             imageIndicesCallback=self.noteImageIndices,
             headerImageIndex=self.imageIndex['note_icon'],
             renderCallback=lambda task: '', **kwargs))
     columns.extend(
         [widgets.Column('categories', _('Categories'), 
             task.Task.categoryAddedEventType(), 
             task.Task.categoryRemovedEventType(), 
             task.Task.categorySubjectChangedEventType(),
             task.Task.expansionChangedEventType(),
             sortCallback=uicommand.ViewerSortByCommand(viewer=self,
                                                        value='categories'),
             width=self.getColumnWidth('categories'),
             renderCallback=self.renderCategories, **kwargs),
          widgets.Column('prerequisites', _('Prerequisites'),
             'task.prerequisites', 'task.prerequisite.subject',
             task.Task.expansionChangedEventType(),
             sortCallback=uicommand.ViewerSortByCommand(viewer=self,
                                                        value='prerequisites'),
             renderCallback=self.renderPrerequisites,
             width=self.getColumnWidth('prerequisites'), **kwargs),
          widgets.Column('dependencies', _('Dependencies'),
             'task.dependencies', 'task.dependency.subject',
             task.Task.expansionChangedEventType(),
             sortCallback=uicommand.ViewerSortByCommand(viewer=self,
                                                        value='dependencies'),
             renderCallback=self.renderDependencies,
             width=self.getColumnWidth('dependencies'), **kwargs)])
     
     effortOn = self.settings.getboolean('feature', 'effort')
     dependsOnEffortFeature = ['budget',  'timeSpent', 'budgetLeft',
                               'hourlyFee', 'fixedFee', 'revenue']
     for name, columnHeader, editCtrl, editCommand, eventTypes in [
         ('startDateTime', _('Start date'), inplace_editor.DateTimeCtrl, command.EditStartDateTimeCommand, []),
         ('dueDateTime', _('Due date'), inplace_editor.DateTimeCtrl, command.EditDueDateTimeCommand, [task.Task.expansionChangedEventType()]),
         ('completionDateTime', _('Completion date'), inplace_editor.DateTimeCtrl, command.EditCompletionDateTimeCommand, [task.Task.expansionChangedEventType()]),
         ('percentageComplete', _('% complete'), None, None, [task.Task.expansionChangedEventType(), 'task.percentageComplete']),
         ('timeLeft', _('Time left'), None, None, [task.Task.expansionChangedEventType(), 'task.timeLeft']),
         ('recurrence', _('Recurrence'), None, None, [task.Task.expansionChangedEventType(), 'task.recurrence']),
         ('budget', _('Budget'), inplace_editor.BudgetCtrl, command.EditBudgetCommand, [task.Task.expansionChangedEventType(), 'task.budget']),            
         ('timeSpent', _('Time spent'), None, None, [task.Task.expansionChangedEventType(), 'task.timeSpent']),
         ('budgetLeft', _('Budget left'), None, None, [task.Task.expansionChangedEventType(), 'task.budgetLeft']),            
         ('priority', _('Priority'), inplace_editor.PriorityCtrl, command.EditPriorityCommand, [task.Task.expansionChangedEventType(), 'task.priority']),
         ('hourlyFee', _('Hourly fee'), None, None, [task.Task.hourlyFeeChangedEventType()]),
         ('fixedFee', _('Fixed fee'), None, None, [task.Task.expansionChangedEventType(), 'task.fixedFee']),            
         ('revenue', _('Revenue'), None, None, [task.Task.expansionChangedEventType(), 'task.revenue']),
         ('reminder', _('Reminder'), inplace_editor.DateTimeCtrl, command.EditReminderDateTimeCommand, [task.Task.expansionChangedEventType(), 'task.reminder'])]:
         if (name in dependsOnEffortFeature and effortOn) or name not in dependsOnEffortFeature:
             renderCallback = getattr(self, 'render%s'%(name[0].capitalize()+name[1:]))
             columns.append(widgets.Column(name, columnHeader,  
                 sortCallback=uicommand.ViewerSortByCommand(viewer=self, value=name),
                 renderCallback=renderCallback, width=self.getColumnWidth(name),
                 alignment=wx.LIST_FORMAT_RIGHT, editControl=editCtrl, 
                 editCommand=editCommand, *eventTypes, **kwargs))
     return columns
Example #4
0
 def _createColumns(self):
     kwargs = dict(renderDescriptionCallback=lambda task: task.description(),
                   resizeCallback=self.onResizeColumn)
     columns = [widgets.Column('subject', _('Subject'), 
             task.Task.subjectChangedEventType(), 
             'task.completionDate', 'task.dueDate', 'task.startDate',
             task.Task.trackStartEventType(), task.Task.trackStopEventType(), 
             sortCallback=uicommand.ViewerSortByCommand(viewer=self,
                 value='subject'),
             width=self.getColumnWidth('subject'), 
             imageIndexCallback=self.subjectImageIndex,
             renderCallback=self.renderSubject, **kwargs)] + \
         [widgets.Column('description', _('Description'), 
             task.Task.descriptionChangedEventType(), 
             sortCallback=uicommand.ViewerSortByCommand(viewer=self,
                 value='description'),
             renderCallback=lambda task: task.description(), 
             width=self.getColumnWidth('description'), **kwargs)] + \
         [widgets.Column('attachments', '', 
             task.Task.attachmentsChangedEventType(),
             width=self.getColumnWidth('attachments'),
             alignment=wx.LIST_FORMAT_LEFT,
             imageIndexCallback=self.attachmentImageIndex,
             headerImageIndex=self.imageIndex['attachment'],
             renderCallback=lambda task: '', **kwargs)]
     if self.settings.getboolean('feature', 'notes'):
         columns.append(widgets.Column('notes', '', 
             task.Task.notesChangedEventType(),
             width=self.getColumnWidth('notes'),
             alignment=wx.LIST_FORMAT_LEFT,
             imageIndexCallback=self.noteImageIndex,
             headerImageIndex=self.imageIndex['note'],
             renderCallback=lambda task: '', **kwargs))
     columns.extend(
         [widgets.Column('categories', _('Categories'), 
             task.Task.categoryAddedEventType(), 
             task.Task.categoryRemovedEventType(), 
             task.Task.categorySubjectChangedEventType(),
             sortCallback=uicommand.ViewerSortByCommand(viewer=self,
                                                        value='categories'),
             width=self.getColumnWidth('categories'),
             renderCallback=self.renderCategory, **kwargs)] + \
         [widgets.Column('totalCategories', _('Overall categories'),
             task.Task.totalCategoryAddedEventType(),
             task.Task.totalCategoryRemovedEventType(),
             task.Task.totalCategorySubjectChangedEventType(),
             sortCallback=uicommand.ViewerSortByCommand(viewer=self,
                                                        value='totalCategories'),
             renderCallback=lambda task: self.renderCategory(task, recursive=True),
             width=self.getColumnWidth('totalCategories'), **kwargs)])
     effortOn = self.settings.getboolean('feature', 'effort')
     dependsOnEffortFeature = ['budget', 'totalBudget', 
                               'timeSpent', 'totalTimeSpent', 
                               'budgetLeft', 'totalBudgetLeft',
                               'hourlyFee', 'fixedFee', 'totalFixedFee',
                               'revenue', 'totalRevenue']
     for name, columnHeader, renderCallback, eventType in [
         ('startDate', _('Start date'), lambda task: render.date(task.startDate()), None),
         ('dueDate', _('Due date'), lambda task: render.date(task.dueDate()), None),
         ('timeLeft', _('Days left'), lambda task: render.daysLeft(task.timeLeft(), task.completed()), None),
         ('completionDate', _('Completion date'), lambda task: render.date(task.completionDate()), None),
         ('recurrence', _('Recurrence'), lambda task: render.recurrence(task.recurrence()), None),
         ('budget', _('Budget'), lambda task: render.budget(task.budget()), None),
         ('totalBudget', _('Total budget'), lambda task: render.budget(task.budget(recursive=True)), None),
         ('timeSpent', _('Time spent'), lambda task: render.timeSpent(task.timeSpent()), None),
         ('totalTimeSpent', _('Total time spent'), lambda task: render.timeSpent(task.timeSpent(recursive=True)), None),
         ('budgetLeft', _('Budget left'), lambda task: render.budget(task.budgetLeft()), None),
         ('totalBudgetLeft', _('Total budget left'), lambda task: render.budget(task.budgetLeft(recursive=True)), None),
         ('priority', _('Priority'), lambda task: render.priority(task.priority()), None),
         ('totalPriority', _('Overall priority'), lambda task: render.priority(task.priority(recursive=True)), None),
         ('hourlyFee', _('Hourly fee'), lambda task: render.amount(task.hourlyFee()), task.Task.hourlyFeeChangedEventType()),
         ('fixedFee', _('Fixed fee'), lambda task: render.amount(task.fixedFee()), None),
         ('totalFixedFee', _('Total fixed fee'), lambda task: render.amount(task.fixedFee(recursive=True)), None),
         ('revenue', _('Revenue'), lambda task: render.amount(task.revenue()), None),
         ('totalRevenue', _('Total revenue'), lambda task: render.amount(task.revenue(recursive=True)), None),
         ('reminder', _('Reminder'), lambda task: render.dateTime(task.reminder()), None)]:
         eventType = eventType or 'task.'+name
         if (name in dependsOnEffortFeature and effortOn) or name not in dependsOnEffortFeature:
             columns.append(widgets.Column(name, columnHeader, eventType, 
                 sortCallback=uicommand.ViewerSortByCommand(viewer=self, value=name),
                 renderCallback=renderCallback, width=self.getColumnWidth(name),
                 alignment=wx.LIST_FORMAT_RIGHT, **kwargs))
     return columns