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)
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)
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)
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()
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)
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])
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
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 )
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 = ''
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()
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)
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)
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()
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)
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()
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
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