示例#1
0
 def createView(self):
     pos = None
     if self.view is not None: pos = self.view.pos
     if self.isMinimal:
         self._view = MinStoryView(self.root,self, 
                           name=self._model.Name,
                           id=self._model.Id,
                           as_a=self._model.As_a,
                           want_to=self._model.Want_to,
                           so_that=self._model.So_that,
                           estimate=self._model.EstimateFinishDate,
                           actual=self._model.ActualFinish ,
                           owner=self._model.Owner,
                           description=self._model.Description,
                           control_scale=0.7, cls='type1css')
         self.story_view_size = scale_tuple(self.view.grid_size,-0.001,-0.03)
     else:
         self._view = StoryView(self.root,self, 
                           name=self._model.Name,
                           id=self._model.Id,
                           as_a=self._model.As_a,
                           want_to=self._model.Want_to,
                           so_that=self._model.So_that,
                           estimate=self._model.EstimateFinishDate,
                           actual=self._model.ActualFinish ,
                           owner=self._model.Owner,
                           description=self._model.Description,
                           control_scale=0.7, cls='type1css')
         self.story_view_size = scale_tuple(self.view.grid_size,0.15,.03)
     self.view.size = self.story_view_size
     if pos is not None:
         self.view.pos = pos
     else : self.view.pos = (100,200)
示例#2
0
 def createView(self):
     if self.isMinimal:
         self.view = MinStoryView(self.root,self, 
                           name='name',
                           id=self.id,
                           as_a='as_a',
                           want_to='want_to',
                           so_that='so_that',
                           estimate='0',
                           actual='0',
                           owner='owner',
                           description='description',
                           control_scale=0.7, cls='type1css')
         self.story_view_size = scale_tuple(self.view.grid_size,-0.001,-0.03)
         self.view.pos = (275,265)
     else:
         self.view = StoryView(self.root,self, 
                           name='name',
                           id=self.id,
                           as_a='as_a',
                           want_to='want_to',
                           so_that='so_that',
                           estimate='0',
                           actual='0',
                           owner='owner',
                           description='description',
                           control_scale=0.7, cls='type1css')
         self.story_view_size = scale_tuple(self.view.grid_size,0.07)
         self.view.pos = (75,65)
     self.view.size = self.story_view_size
     self.root.add_widget(self.view)
示例#3
0
 def createView(self):
     kwargs = {
         "type_name": "Task",
         "name": "name",
         "id": self.Id,
         "as_a": "as_a",
         "want_to": "want_to",
         "so_that": "so_that",
         "estimate": "0",
         "actual": "0",
         "owner": "owner",
         "description": "description",
         "control_scale": 0.7,
         "cls": "type1css",
     }
     if self.isMinimal:
         self.view = MinView(self.root, self, **kwargs)  # IGNORE:W0142
         self.story_view_size = scale_tuple(self.view.grid_size, -0.001, -0.03)
         self.view.pos = (275, 265)
     else:
         self.view = FullView(self.root, self, **kwargs)  # IGNORE:W0142
         self.story_view_size = scale_tuple(self.view.grid_size, 0.07)
         self.view.pos = (75, 65)
     self.view.size = self.story_view_size
     self.root.add_widget(self.view)
示例#4
0
    def __init__(self,widget, **kwargs):
        #get the widget border color if any
        self.my_state = 'normal'
        self.widget_is_dragable = True
        self.controls = kwargs.get('ctrls', None)
        self.ctrls_height = 0
#        bc = kwargs.setdefault('border-color',self.shade_of(\
#                                            widget.style.get('border-color', 
#                            widget.style.get('bg-color',parse_color(CYAN)))))
        bc = widget.style['border-color']
        kwargs.setdefault('style', {'bg-color':self.shade_of(bc),
#                                'border-color':kwargs['border-color'],
#                                'draw-border': True,
                                'draw-background': True})
        kwargs.setdefault('size_scaler', (-1.1,-.1))
        kwargs['use_widget_size'] = False
        self.widget = widget
        if 'use_widget_size' in kwargs:
            if not kwargs['use_widget_size']:
                self.size_scaler = kwargs['size_scaler']
            else:
                self.size_scaler = (1,1)
        else:
            self.size_scaler = (1,1)
        kwargs.setdefault('size', 
                          scale_tuple(self.widget.size,self.size_scaler[0],
                                self.size_scaler[1]))
        super(Border2, self).__init__(**kwargs)
        if self.controls is not None:
            if not self.controls.parent:
                self.add_widget(self.controls)
            self.ctrls_height = self.controls.ctrls_buttons_height
        self.add_widget(self.widget)#????
        self.place_widget()
        self.place_controls()
示例#5
0
    def __init__(self,wnd,ctrl, **kwargs):
        if not 'name' in kwargs:
            raise KeyError('Name attribute must be passed in kwargs')
        kwargs.setdefault('minimized_label', kwargs['name'])
        super(MinimalStoryView,self).__init__(**kwargs)
        if ctrl is None:
            ctrl = TestController(wnd,'minimal' if self.isMinimal else 'full')
        self.ctrl = ctrl
        try:
            self.isMinimal = True if self.isMinimal else False
        except Exception:
            self.isMinimal = True
        self.grid_size = minimal_size
        story_size = scale_tuple(self.grid_size, 0.2)
        self._name = kwargs['name']
        self._id = kwargs['id']
        self._description = kwargs.setdefault('description','')
        self.padding = 8
        self.spacing = 8
        self.font_height = 13 * 2
        self._full_width =  int(story_size[0])
        self._half_width = int(self._full_width /2) 
        self.visible_lines = 3
        
        self.layout = MTGridLayout(size=story_size,rows=3,cols=1,
                                   spacing=self.spacing)

        self.row0 = MTGridLayout(cols=2,rows=2,spacing=self.spacing,
                                 uniform_width=False, uniform_height=False)
        self.row1 = MTGridLayout(cols=1,rows=2, spacing=self.spacing,
                                 uniform_width=False, uniform_height=False)
        text_height = self.font_height * self.visible_lines
        sz=(self._full_width - int(len('Story Name: ')*pixels),self.font_height)
        self.story_name = MyTextInput(label=self._name,id='story_name_id',
                                      size=sz,keyboard_to_root='True',
                                      place_keyboard_by_control='True')
        self.description = MyTextArea(label=self._description,\
                                       id='description_id',
                                       size=(self._full_width,text_height),
                                       keyboard_to_root='True',
                                      place_keyboard_by_control='True')
        #push handlers for each text input fields
        self.story_name.push_handlers(on_text_change=self._set_name)
        self.description.push_handlers(on_text_change=self._set_description)
        
        
        self.row0.add_widget(MTLabel(label='Story Name:'))
        self.row0.add_widget(self.story_name)
        
        self.row1.add_widget(MTLabel(label='Description:'))
        self.row1.add_widget(self.description)
        self.layout.add_widget(self.row0)
        self.layout.add_widget(self.row1)
        self.layout.pos = (25,0)
        self.canvas = MTScatter(size=self.grid_size, pos=(0,2),
                                cls='storycardcss')
        self.canvas.add_widget(self.layout)
        self.add_widget(self.canvas)
示例#6
0
 def __init__(self, widget,isDragable, **kwargs):
     super(MyDragableContainer, self).__init__(**kwargs)
     self.widget = widget
     self.widget_is_dragable = isDragable
     self.add_widget(self.widget)
     self.down_touch_pos = None
     self.up_touch_pos = None
     if 'use_widget_size' in kwargs:
         if not kwargs['use_widget_size']:
             self.size_scaler = kwargs['size_scaler']
         else:
             self.size_scaler = (1,1)
     else:
         self.size_scaler = (1,1)
     self.size = scale_tuple(self.widget.size,self.size_scaler[0],
                             self.size_scaler[1])
示例#7
0
 def __init__(self,root):
     self.grid_size = minimal_size
     story_size = scale_tuple(self.grid_size, 0.2)
     self._name = 'name'
     self._description = 'description'
     self.font_height = 13 * 2
     self._full_width =  int(story_size[0])# - (self.padding * 1))
     #self.layout = MTBoxLayout(size=story_size)
     sz=(self._full_width - int(len('Story Name: ')*pixels),self.font_height)
     self.story_name=MTTextInput(label=self._name,id='story_name_id',size=sz)
     #self.layout.add_widget(MTLabel(label='Story Name:'))
     #self.layout.add_widget(self.story_name)
     #self.layout.pos = (25,200)#(20, 0)#-(text_height*.01))
     #root.add_widget(self.layout)
     root.add_widget(self.story_name)
     self.story_name.label=self._name
示例#8
0
    def draw(self):
        scaled_border = self.get_scaled_border()
        border_color=self.style.get('border-color')
        if not self.isMinimized:
            # select color from number of touch
            if len(self._touches) == 0:
                set_color(*self.style.get('bg-color'))
            elif len(self._touches) == 1:
                border_color = self.style.get('bg-color-move') 
                set_color(*border_color) #IGNORE:W0142
            else:
                border_color = self.style.get('bg-color-full') 
                set_color(*border_color) #IGNORE:W0142

            # draw border
            drawRoundedRectangle(
                pos=(-scaled_border, -scaled_border*2*self.scale),
                size=(self.width+scaled_border*2, self.height+scaled_border*3*self.scale),
                #size=(self.width+scaled_border*2, self.height+control_height*2),
                radius=15. / self.scale
            )
#            pos = ((self.width/2 - control_width/2),
#                   -scaled_border * 2)
#            size=(control_width, 
#                  control_height) 
#            corners=(True, True, False, False)
        else:
            pos = (0,-scaled_border)
            size=scale_tuple(self.size,-.1,-.5)
            l_pos = (size[0]/2, size[1] - 15 - scaled_border)
            corners=(True, True, True, True)
            drawLabel(label=self.minimized_label, pos=l_pos, 
                      color=self.style.get('font-color'))
            border_color=parse_color(self.style.get('min-border-color'))
            # draw control background
            drawRoundedRectangle(
                pos=pos,
                size=size,
                radius=15. / self.scale,
                corners=corners, color=border_color
            )
示例#9
0
 def __init__(self, main, defn=None, **kwargs):
     super(ArtifactController,self).__init__()
     self.root = main
     self._view = None
     self._view_image = None
     self.story_view_size = None
     self.origin_size = scale_tuple(self.root.size,0.25)
     self.isMinimal = True
     self._mini_view_type = kwargs['mini_view_type']
     self._view_type = kwargs['view_type']
     self._save_callback = kwargs['get_artifact']
     self._view_type_name = kwargs['view_type_name']
     self._p_artifact = kwargs.setdefault('p_artifact',None)
     self._x_range = range(int(self.root.x + int(minimal_size[0]/2)), 
                           int(self.root.width - minimal_size[0]))
     self._y_range = range(int(self.root.y + 100), 
                           int(self.root.height - minimal_size[1]))
     self.isNew = not defn
     self._model = None
     self.createModel(defn, **kwargs)
     if defn is None:
         self._name = ''
         self._description = ''
示例#10
0
            if x == 0:
                b_col = d_txt.style['bg-color'] 
                d_txt.style['bg-color'] = d_txt.style['border-color'] 
                d_txt.style['border-color'] = b_col
        _del_list = []
        for k in self.touch_positions.keys():
            _points = self.touch_positions[k]['Cdata']
            if not len(_points):
                _del_list.append(k)
                continue
            _colour = self.touch_positions[k]['Color'] 
            if self.potential_deleted_lines == k:
                x = int(time.time()) % 2
                if x == 0: 
                     _colour = DELETED_LINE 
                else:
                    self.touch_positions[k]['Color'] = RED 
            set_color(*_colour)
            drawLine(_points)
        for k in _del_list:
            del self.touch_positions[k]
if __name__ == '__main__':
    
    from pymt.ui.window import MTWindow
    from pymt.base import runTouchApp
    mw = MTWindow()
    mw.size = scale_tuple(get_min_screen_size(),.1)
    mw.add_widget(MyScribbleWidget(size= scale_tuple(mw.size,.3),pos=(100,100),
                                  cls='scribbleBordercss'))
    runTouchApp()
示例#11
0
 def remove_widget(self, w):
     super(Controls,self).remove(w)
     self.del_btn_size(w)
     self.size = scale_tuple(
                 (self.ctrls_buttons_width,self.ctrls_buttons_height),-.2)
示例#12
0
 def add_widget(self, w):
     super(Controls,self).add_widget(w)
     self.add_btn_size(w)
     self.size = scale_tuple(
                 (self.ctrls_buttons_width,self.ctrls_buttons_height),-.2)
示例#13
0
    def add_to_git(self):
        AsyncHandler().save(None, 'Commit session edits')    
    def container_reset_children(self,container):
        f = self.__getattribute__(container)
        x = len(f.children) -1
        while x > 0:
            w = f.children[x]
            f.remove_widget(w) 
            x = len(f.children) -1
    
    @property        
    def Artifacts(self):
        return self.artifacts
    
        
if __name__ == '__main__':
    mw = MTWindow()
    mw.size = scale_tuple(size,0.045)
    scale = .13
    size = scale_tuple(mw.size, scale)
    base_image = os.path.abspath(os.path.join(os.path.dirname(__file__),
                            '..',  '..', 'examples', 'framework','images'))
    coverflow = MTCoverFlow(size=(500,500))
    for fn in glob(os.path.join(base_image, '*.png')):
        button = MTToggleButton(label=os.path.basename(fn)) #MTImageButton(image=Loader.image(filename))
        coverflow.add_widget(button)
    
    dc = MyDragableContainer(coverflow, True)
    mw.add_widget(dc)
    runTouchApp()
    
示例#14
0
    def __init__(self,wnd,ctrl, **kwargs):
        self.isMinimal = False
        super(StoryCardView,self).__init__(wnd,ctrl,**kwargs)
        self.canvas.size = self.grid_size = \
                                    scale_tuple(self.ctrl.get_story_size(),.1)
        story_size = scale_tuple(self.grid_size, 0.2)
        self.layout.pos = (60, 80)

        self._as_a = kwargs['as_a']
        self._want_to = kwargs['want_to']
        self._so_that = kwargs['so_that']
        self._estimate = kwargs['estimate']
        self._actual = kwargs['actual']
        self._owner = kwargs['owner']
        self.visible_lines = 5
        self._full_width =  int(story_size[0] - (self.padding * 7)) 
        self._half_width = int(story_size[0] /2) -32
        self.layout.size = (story_size[0], self.font_height*3)
        self.layout.remove_widget(self.row1)
        self.row1 = MTGridLayout(cols=1,rows=2, spacing=self.spacing,
                                 uniform_width=False, uniform_height=False)
        self.row2 = MTGridLayout(cols=2,rows=2,spacing=self.spacing,
                                 uniform_width=False, uniform_height=False)
        text_width = self._full_width
        text_height = self.font_height * self.visible_lines
        self.owner = MyTextInput(label=self._owner,\
                                    id='owner_id',keyboard_to_root='True',
                                    size=((self._half_width,self.font_height)),
                                    place_keyboard_by_control='True')
        self.description.size = (text_width-8, self.font_height)
        self.as_a = MyTextArea(size=(text_width,text_height), id='as_a_id',
                               label=self._as_a,keyboard_to_root='True',
                                      place_keyboard_by_control='True')
        self.want_to = MyTextArea(size=(text_width,text_height),
                                  keyboard_to_root='True',
                                  id='want_to_id',label=self._want_to,
                                      place_keyboard_by_control='True')
        self.so_that = MyTextArea(size=(text_width,text_height),
                                  keyboard_to_root='True',
                                  id='so_that_id', label=self._so_that,
                                      place_keyboard_by_control='True')
        self.estimate = MyTextInput(id='estimate_id',keyboard_to_root='True',
                                    label=self._estimate,
                                    size=((self._half_width,self.font_height)),
                                      place_keyboard_by_control='True')
        self.actual =  MyTextInput(id='actual_id',keyboard_to_root='True',
                                   label=self._actual,
                                   size=((self._half_width,self.font_height)),
                                      place_keyboard_by_control='True')

        # Setup the tabs
        self.tabs = MyTabs()
        self.tabs.add_widget(self.as_a, tab='As a')
        self.tabs.add_widget(self.want_to, tab="I want to")
        self.tabs.add_widget(self.so_that, tab='so that')
        self.tabs.select('As a')

        #push handlers for each text input fields
        self.as_a.push_handlers(on_text_change=self._set_as_a)
        self.want_to.push_handlers(on_text_change=self._set_want_to)
        self.so_that.push_handlers(on_text_change=self._set_so_that)
        self.estimate.push_handlers(on_text_change=self._set_estimate)
        self.actual.push_handlers(on_text_change=self._set_actual)
        self.owner.push_handlers(on_text_change=self._set_owner)
        
        self.row0.remove_widget(self.story_name)
        self.story_name.width = self._half_width
        self.row0.add_widget(MTLabel(label='Owner: '))
        self.row0.add_widget(self.story_name)
        self.row0.add_widget(self.owner)
        self.row1.add_widget(MTLabel(label='Description:'))
        self.row1.add_widget(self.description)
        self.row2.add_widget(MTLabel(label='Estimate'))#, autosize=True))
        self.row2.add_widget(MTLabel(label='Actual'))#), autosize=True))
        self.row2.add_widget(self.estimate)
        self.row2.add_widget(self.actual)

        #add new rows to layout
        self.layout.add_widget(self.row1)
        self.layout.add_widget(self.row2)
#        self.layout.add_widget(self.row3)
        self.canvas.add_widget(self.tabs)
        self.layout.pos = (45,190)
        self.tabs.pos=(55,185)
示例#15
0
                              control_scale=0.7, cls='type1css')
            self.story_view_size = scale_tuple(self.view.grid_size,0.07)
            self.view.pos = (75,65)
        self.view.size = self.story_view_size
        self.root.add_widget(self.view)
class Dummy(object):
    def __init__(self,root):
        self.grid_size = minimal_size
        story_size = scale_tuple(self.grid_size, 0.2)
        self._name = 'name'
        self._description = 'description'
        self.font_height = 13 * 2
        self._full_width =  int(story_size[0])# - (self.padding * 1))
        #self.layout = MTBoxLayout(size=story_size)
        sz=(self._full_width - int(len('Story Name: ')*pixels),self.font_height)
        self.story_name=MTTextInput(label=self._name,id='story_name_id',size=sz)
        #self.layout.add_widget(MTLabel(label='Story Name:'))
        #self.layout.add_widget(self.story_name)
        #self.layout.pos = (25,200)#(20, 0)#-(text_height*.01))
        #root.add_widget(self.layout)
        root.add_widget(self.story_name)
        self.story_name.label=self._name
 
if __name__ == '__main__':
    import sys
    args = sys.argv
    mw = MTWindow()
    c = TestController(mw,args[1])
    mw.size = scale_tuple(get_min_screen_size(),.045)
    runTouchApp()
示例#16
0
def main():
    global Log
    # This must be done BEFORE trying to import any PYMT stuff since PyMT
    # messes with the arguments
    from agileConfig import AgiConfig
    config = AgiConfig(Log)
    if config.noDatastore:
        Log.critical('No data store defined or accessible')
        sys.exit(2)
    if config.pymtUnavailable:
        Log.critical('PyMT is not available')
        sys.exit(2)
    if config.args.loglevel:
        Log.level = config.args.loglevel
    from agileConfig import AsyncHandler
    from pymt.ui.window import MTWindow
    from pymt.base import runTouchApp, stopTouchApp
    from cmap.controller.storyapp import StoryApp
    from cmap.tools.myTools import get_min_screen_size, scale_tuple
    from cmap.view.stories.storyViews import TestController
    import os
    
    
    Log.debug('current directory: %s' % os.path.abspath(os.path.curdir))
    if config.args.startdir:
        os.chdir(config.args.startdir)
        Log.debug('current directory: %s' % os.path.abspath(os.path.curdir))
    # Get the PyMT window    
    w = MTWindow()

    
    b = None
    try:
        if config.args.storycard:
            if config.args.storycard == 'flow':
                from pymt.ui.widgets.coverflow import MTCoverFlow
                from glob import glob
                from pymt.ui.widgets.button import MTImageButton
                from pymt.loader import Loader
                base_image = os.path.join(os.path.dirname(__file__),'examples',
                                           'framework','images')
                coverflow = MTCoverFlow(size=w.size)
                for filename in glob(os.path.join(base_image, '*.png')):
                    button = MTImageButton(image=Loader.image(filename))
                    button.title = os.path.basename(filename)
                    coverflow.add_widget(button)
            
                runTouchApp(coverflow)
                return
            else:            
                Log.debug('Testing stories only...')
                b = TestController(w, config.args.storycard)
        elif not config.args.fullscreen:
            Log.debug('Running in non fullscreen mode...')
            #Setup our application window
            size = get_min_screen_size()
            w.size = scale_tuple(size,0.045)
            scale = .13
            size = scale_tuple(w.size, scale)
            pos = (w.size[0] - (size[0] +55), w.size[1] - (size[1] +35))
            b = StoryApp(root_window=w,size=size, pos=pos,
                                   control_scale=0.7)
        else:
            Log.debug('Fullscreen mode...')
            b = StoryApp(root_window=w,size=w.size, pos=(0,0), 
                                  control_scale=0.7)
        w.add_widget(b)
        b.fullscreen()
        # Run the application
        Log.debug("About to run CMAP")
        runTouchApp()
        b.close(None)
        Log.debug('CMAP normal exit')
        return
    except Exception:
        Log.exception('Exception causing premature CMAP exit')
        # We need to make sure that everything shuts down cleanly
        stopTouchApp()
        if AsyncHandler() is not None:
            AsyncHandler().shutdown()
        Log.debug('CMAP exception exit')
        raise
示例#17
0
    def __init__(self, wnd, ctrl, **kwargs):
        if ctrl is None:
            ctrl = TestController(wnd, "minimal" if self.isMinimal else "full")
        self.ctrl = ctrl
        try:
            self.isMinimal = True if self.isMinimal else False
        except Exception:  # IGNORE:W0703
            self.isMinimal = True
        self._type_name = kwargs["type_name"]
        self._name = kwargs.setdefault("name", self.ctrl.Name)
        kwargs.setdefault("minimized_label", self._name)
        self._id = self.ctrl.Id
        kwargs["size"] = self.grid_size = minimal_size
        super(MinView, self).__init__(**kwargs)
        story_size = scale_tuple(self.grid_size, 0.2)
        self.story_view_size = None
        self._description = self.ctrl.Description
        self.padding = 8
        self.spacing = 8
        self.font_height = 13 * 2
        self._full_width = int(story_size[0])
        self._half_width = int(self._full_width / 2)
        self.visible_lines = 3
        self._button_image = None

        self.layout = MTGridLayout(size=story_size, rows=3, cols=1, spacing=self.spacing)

        self.row0 = MTGridLayout(cols=2, rows=2, spacing=self.spacing, uniform_width=False, uniform_height=False)
        self.row1 = MTGridLayout(cols=1, rows=2, spacing=self.spacing, uniform_width=False, uniform_height=False)
        text_height = self.font_height * self.visible_lines
        label_txt = "%s Name: " % self._type_name
        txt_in_id = "%s_name_id" % self._type_name
        sz = (self._full_width - int(len(label_txt) * pixels), self.font_height)
        self.story_name = MyTextInput(
            label=self.name,
            id=txt_in_id,
            group=self._id,
            size=sz,
            keyboard_to_root="True",
            place_keyboard_by_control="True",
        )
        self.description = MyTextArea(
            label=self._description,
            id="description_id",
            group=self._id,
            size=(self._full_width, text_height),
            keyboard_to_root="True",
            place_keyboard_by_control="True",
        )
        # push handlers for each text input fields
        self.story_name.push_handlers(on_text_change=self._set_name)
        self.description.push_handlers(on_text_change=self._set_description)

        self.row0.add_widget(MTLabel(label=label_txt))
        self.row0.add_widget(self.story_name)

        self.row1.add_widget(MTLabel(label="Description:"))
        self.row1.add_widget(self.description)
        self.layout.add_widget(self.row0)
        self.layout.add_widget(self.row1)
        self.layout.pos = (25, 0)
        self.scribleWidget = MyScribbleWidget(
            size=self.grid_size, scribbles=self.ctrl.Scribbles, TextFields=self.ctrl.TextFields
        )
        self.scribleWidget.push_handlers(on_change=self.add_remove_scribble)
        self.scribleWidget.push_handlers(on_text_change=self.scribble_text_change)
        self.canvas = self.layout
        self.canvas = self.scribleWidget
        self.scribleWidget.center = self.center
        self.add_widget(self.canvas)
        self.first_draw = True