def get_display(my): #my.init() item_table = Table(css='minimal') item_table.add_style('margin-left','30px') for item in my.items: item_table.add_row() space_td = item_table.add_blank_cell() item_td = item_table.add_cell(item.get_description()) item_td.set_attr("nowrap", "1") delete = IconSubmitWdg("Remove from group", \ "stock_stop-16.png",add_hidden=False) delete.add_event("onclick","document.form.remove_cmd.value=\ '%s|%s';document.form.submit();" \ % (my.group.get_primary_key_value(), item.get_primary_key_value()) ) del_span = SpanWdg(css='med') del_span.add(delete) item_table.add_cell(del_span) if not my.items: item_table.add_blank_cell() my.add(item_table) return super(ItemInContainerWdg, my).get_display()
def _get_target_span(my): # get the target span search = Search(my.container_cls) my._order_search(search) groups = search.get_sobjects() if groups: my.container_sobj = groups[0] target_span = SpanWdg(css='med') group_table = Table(my.GROUP_TABLE_NAME, css='table') group_table.add_style('width','30em') group_table.add_col(css='small') group_table.add_col(css='small') group_table.add_col() target_span.add(group_table) group_table.add_row_cell(search.get_search_type_obj()\ .get_description(), "heading") checkbox = CheckboxWdg() checkbox.set_option("onclick", \ "a=new Elements('container_ids');a.toggle_all(this);") group_table.add_row() group_table.add_cell(checkbox) col_name = group_table.get_next_col_name() toggle_control = HiddenRowToggleWdg(col_name=col_name, is_control=True, auto_index=True) group_table.add_cell(toggle_control) group_table.add_cell('MASTER CONTROL') remove_cmd = HiddenWdg(SObjectGroupCmd.REMOVE_CMD) my.add(remove_cmd) for group in groups: group_table.add_row() checkbox = CheckboxWdg("container_ids") checkbox.set_option("value", group.get_primary_key_value() ) toggle = HiddenRowToggleWdg(col_name, auto_index=True) toggle.store_event() group_details = ItemInContainerWdg( group, my.item_sobj, my.item_cls, my.grouping_cls ) # set the target content of the toggle toggle.set_static_content(group_details) group_table.add_cell( checkbox ) group_table.add_cell( toggle, add_hidden_wdg=True ) group_table.add_cell( group.get_description()) num_items = group_details.get_num_items() if num_items: td = group_table.add_cell( "( %s )" % num_items, 'no_wrap') td.add_color(color) else: group_table.add_blank_cell() return target_span
def add_unassigned_instances(my, widget, shot_inst_names): ''' add the unassigned instances into a SwapDisplayWdg ''' info = [] session = SessionContents.get() if not session: return "" tactic_nodes = session.get_instance_names(is_tactic_node=True) non_tactic_nodes = session.get_node_names(is_tactic_node=False) """ title = HtmlElement.b('Unassigned instances') widget.add(title) # this is just a filler for now, can be any sobjects snapshots = [] for tactic_node in tactic_nodes: if tactic_node not in shot_inst_names: session_version = session.get_version(tactic_node) session_snap = session.get_snapshot(tactic_node) if session_snap: snapshots.append(session_snap) info.append({'session_version': session_version, 'instance':\ tactic_node}) div = DivWdg(id="unassigned_table") SwapDisplayWdg.create_swap_title( title, swap, div) table = TableWdg('sthpw/snapshot', 'session_items') table.set_show_property(False) table.set_aux_data(info) table.set_sobjects(snapshots) div.add(table) widget.add(div) widget.add(HtmlElement.br()) """ # Add other non-tactic nodes swap2 = SwapDisplayWdg.get_triangle_wdg() title2 = HtmlElement.b('Other Nodes') div2 = DivWdg(id="other_node_div") widget.add(swap2) widget.add(title2) SwapDisplayWdg.create_swap_title( title2, swap2, div2) hidden_table = Table(css='table') div2.add(hidden_table) hidden_table.set_max_width() for node in non_tactic_nodes: hidden_table.add_row() hidden_table.add_cell(node) hidden_table.add_blank_cell() widget.add(div2)
def get_bottom(my): if my.get_option("report") == "false": return Widget() table = Table() table.add_row_cell("Report") table.add_row() table.add_blank_cell() table.add_cell("# Tasks") table.add_cell("Completion") for process in my.processes_order: my._draw_stat_row(table, process) return table
def get_display(my): if not my.preprocessed: my.preprocess() if my.is_refresh: top = Widget() else: top = DivWdg() top.add_class("spt_work_hours_top") hidden = HiddenWdg('workhour_data') hidden.add_class('spt_workhour_data') header_data = {'start_date': str(my.start_date)} header_data = jsondumps(header_data).replace('"', """) hidden.set_value(header_data, set_form_value=False) top.add(hidden) days = [] for date in my.dates: days.append(date.strftime("%Y_%m_%d")) today = my.today.strftime("%Y_%m_%d") task = my.get_current_sobject() if not my.is_refresh: my.set_as_panel(top) entries = my.entries.get(task.get_code()) if isinstance(task, Task): parent = task.get_parent() if not parent: disabled = True else: disabled = False else: disabled = False if not entries: entries = {} table = Table() top.add(table) if my.use_straight_time: row_list = [my.ST_ROW] if my.show_overtime: row_list.append(my.OT_ROW) prefix_list = ['', 'ot'] else: row_list = [my.STT_ROW, my.ENT_ROW] prefix_list = ['stt', 'ent'] text = HiddenWdg(my.get_name()) text.add_class("spt_data") table.add_color("color", "color") table.add_styles("width: %spx; float: left" % my.table_width) for row_to_draw in row_list: tr = table.add_row() tr.add_style('line-height', '8px') td = table.add_blank_cell() offset_width = my.MONTH_WIDTH + my.LEFT_WIDTH + 8 td.add_style("min-width: %spx" % offset_width) td.add(text) # go through each day and draw an input for overtime total_hours_st = 0 total_hours_ot = 0 search_key = task.get_search_key() # Add a label to indicate if the row is straight time or overtime time_prefix = '' if row_to_draw == my.OT_ROW: time_prefix = 'ot' div = DivWdg() div.add("OT") div.add_styles('text-align: right; margin-right: 4px') td.add(div) elif row_to_draw == my.STT_ROW: time_prefix = 'stt' div = DivWdg() div.add("ST") div.add_styles('text-align: right; margin: 0 4px 4px 0') td.add(div) elif row_to_draw == my.ENT_ROW: time_prefix = 'ent' div = DivWdg() div.add("ET") div.add_styles('text-align: right; margin: 0 4px 4px 0') td.add(div) for idx, day in enumerate(days): day_wdg = DivWdg() day_wdg.add(day) td = table.add_cell() td.add_style("width: %spx" % my.day_width) text = TextWdg('%sday_%s' % (time_prefix, day)) if disabled: text.set_option('read_only', 'true') text.set_attr('disabled', 'disabled') td.add(text) text.add_class('spt_day%s' % (time_prefix)) text.add_styles( "width: %spx;text-align: right;padding-left: 2px" % (my.day_width - 2)) #text.add_styles("width: 100%;text-align: right;padding-left: 2px") if day == today: text.add_style("border: solid 1px black") week_day = my.weekday_dict[idx] if week_day in ['Sat', 'Sun']: # MAIN: Overtime, weekend if row_to_draw == my.OT_ROW: text.add_color("background", "background2", modifier=[-15, 0, 5]) else: text.add_color("background", "background2", modifier=[0, 15, 20]) if row_to_draw == my.OT_ROW: text.add_attr('input_field_type', 'ot') else: text.add_attr('input_field_type', 'st') if my.kwargs.get('show_all_users') == 'true': text.set_option('read_only', 'true') #TODO: while we may have multiple entries per task, we will only use the latest one here # for now, making the UI cleaner # if a corresponding entry exists, display its value entry_list_dict = entries.get(day) daily_sum = 0 value = 0 entry_list = [] if entry_list_dict: row_key = my.ROW_DICT.get(row_to_draw) entry_list = entry_list_dict.get(row_key) if entry_list: for entry in entry_list: # Check if there is something in the category column. category = entry.get_value("category") if row_to_draw == my.OT_ROW: # Skip if the category field does not have a 'ot' indicated. if not category: print "Warning this work_hour entry has no category [%s]" % entry.get_code( ) continue # Check if there exist a value in the straight_time column value, delta = my.get_time_value(entry, row_to_draw) if value: text.set_value(value) text.add_attr('orig_input_value', value) if row_to_draw == my.OT_ROW: total_hours_ot += float(delta) else: total_hours_st += float(delta) daily_sum += delta # we only use value instead of the sum "daily_sum" for now if row_to_draw == my.OT_ROW: my.summary_ot[idx].update({search_key: daily_sum}) else: my.summary_st[idx].update({search_key: daily_sum}) script = ''' var orig_value = bvr.src_el.getAttribute("orig_input_value"); var input_field_type = bvr.src_el.getAttribute("input_field_type"); bvr.src_el.value = bvr.src_el.value.strip(); if (bvr.src_el.value == '') { if (orig_value) { bvr.src_el.value = 0; } else { return; } } else if (bvr.src_el.value == orig_value) { return; } bvr.prefix_list.splice( bvr.prefix_list.indexOf(bvr.time_prefix),1) var other_time_prefix = bvr.prefix_list[0]; spt.work_hour.update_total(bvr, '.spt_day' + bvr.time_prefix); // register this as changed item var all_top_el = bvr.src_el.getParent(".spt_work_hours_top"); var values1 = spt.api.Utility.get_input_values(all_top_el, '.spt_day'+ bvr.time_prefix, false); var values2 = spt.api.Utility.get_input_values(all_top_el, '.spt_day'+ other_time_prefix, false); // Merge values from straight time and overtime fields in values variable. for (var attr in values2) { values1[attr] = values2[attr]; } for (val in values1) { if (values1[val] && isNaN(values1[val])) { spt.error('You have non-numeric values in your work hours. Please correct it: ' + values[val]); return; } } delete values1.data; var value_wdg = all_top_el.getElement(".spt_data"); var value = JSON.stringify(values1); value_wdg.value = value; var layout = bvr.src_el.getParent(".spt_layout"); var version = layout.getAttribute("spt_version"); if (version == "2") { spt.table.set_layout(layout); spt.table.accept_edit(all_top_el, value, false); } else { var cached_data = {}; spt.dg_table.edit.widget = all_top_el; spt.dg_table.inline_edit_cell_cbk( value_wdg, cached_data ); } ''' # accept on pressing Enter behavior = { 'type': 'keydown', 'time_prefix': time_prefix, 'prefix_list': prefix_list, 'cbjs_action': ''' if (evt.key=='enter') { %s } ''' % script } text.add_behavior(behavior) behavior = { 'type': 'blur', 'time_prefix': time_prefix, 'prefix_list': prefix_list, 'cbjs_action': ''' %s ''' % script } text.add_behavior(behavior) text = TextWdg("total") td = table.add_cell(text) td.add_style("width: 35px") text.add_attr('spt_total', '.spt_total%s' % (time_prefix)) text.add_class('spt_total%s' % (time_prefix)) text.add_styles( "width: %spx; text-align: right; padding-right: 3px" % my.day_width) text.set_attr("readonly", "readonly") # MAIN: Overtime, total. if row_to_draw == my.OT_ROW: text.add_color("background", "background2", modifier=[5, -15, 0]) if total_hours_ot: text.set_value("%0.1f" % total_hours_ot) my.summary_ot[7].update({search_key: total_hours_ot}) else: text.add_color("background", "background2", modifier=[20, 0, 15]) if total_hours_st: text.set_value("%0.1f" % total_hours_st) my.summary_st[7].update({search_key: total_hours_st}) td = table.add_blank_cell() td.add_style('width: 100%') return top
def get_title(my): div = DivWdg() div.add_behavior({'type': 'load', 'cbjs_action': my.get_onload_js()}) # for csv export hid = HiddenWdg('start_date', my.start_date) div.add(hid) mday = my.today.strftime("%d") mmonth = my.today.strftime("%m") my.weekday_dict = {} days = [] for idx, date in enumerate(my.dates): day_div = DivWdg() days.append(day_div) week_day = date.strftime("%a") day_div.add("%s<br/>%s" % (week_day, date.strftime("%d"))) my.weekday_dict[idx] = week_day table = Table() div.add(table) table.add_row() table.add_color("color", "color") table.add_style("width: %spx" % my.table_width) table.add_style("float: left") month_div = FloatDivWdg(my.start_date.strftime("%b")) month_div.add_style('font-weight: 600') td = table.add_cell(month_div) td.add_style('width', '%spx' % my.MONTH_WIDTH) icon = IconButtonWdg(tip="Previous Week", icon=IconWdg.LEFT) td = table.add_cell(icon) offset = 0 if not my.use_straight_time: offset = 12 td.add_style("width: %spx" % (my.LEFT_WIDTH + offset)) display_days = my.days_per_page next_start_date = my.start_date + datetime.timedelta(days=display_days) prev_start_date = my.start_date + datetime.timedelta( days=-display_days) icon.add_behavior({ 'type': 'click_up', 'start_date': prev_start_date.__str__(), 'cbjs_action': ''' spt.app_busy.show('Loading previous week...'); var header = bvr.src_el.getParent('.spt_table_header'); if (!header) { spt.alert('Work hour widget requires the new Fast Table Layout to scroll to previous week. You can do so in [Manage Side Bar].'); spt.app_busy.hide(); return; } var cur_name = spt.table.get_element_name_by_header(header); var values = {'start_date': bvr.start_date}; spt.table.refresh_column(cur_name, values); spt.app_busy.hide(); ''' }) for day in days: day_wdg = DivWdg() day_wdg.add(day) td = table.add_cell() td.add(day_wdg) td.add_styles( "text-align: center; padding-left: 2px;min-width: %spx" % my.day_width) icon = IconButtonWdg(tip="Next Week", icon=IconWdg.RIGHT) icon.add_behavior({ 'type': 'click_up', 'start_date': next_start_date.__str__(), 'cbjs_action': ''' spt.app_busy.show('Loading next week...'); var header = bvr.src_el.getParent('.spt_table_header'); if (!header) { spt.alert('Work hour widget requires the new Fast Table Layout to scroll to next week. You can do so in [Manage Side Bar].'); spt.app_busy.hide(); return; } var cur_name = spt.table.get_element_name_by_header(header); var values = {'start_date': bvr.start_date}; spt.table.refresh_column(cur_name, values); spt.app_busy.hide(); ''' }) td = table.add_cell(icon) td.add_style('width: %spx' % my.day_width) # empty total cell td = table.add_blank_cell() td.add_style('width: 100%') return div
def get_display(my): my.search_type = my.kwargs.get('search_type') my.texture_search_type = my.kwargs.get('texture_search_type') assert my.search_type app_name = WebContainer.get_web().get_selected_app() # add an outside box top = DivWdg(css='spt_view_panel') #div = DivWdg(css="maq_search_bar") div = DivWdg() div.add_color("background", "background2", -15) my.set_as_panel(top) top.add(div) div.add_style("margin: 5px") div.add_style("padding: 10px") div.add_style("font-style: bold") process_div = DivWdg() process_div.add_style("padding-left: 10px") div.add(process_div) process_div.add(my.get_process_wdg(my.search_type)) process_div.add(my.get_context_filter_wdg()) process_div.add(HtmlElement.br(clear="all")) div.add(HtmlElement.br()) checkin_options = DivWdg(css='spt_ui_options') checkin_options.add_style("padding: 10px") swap = SwapDisplayWdg() #swap.set_off() title = SpanWdg("Check in Options") SwapDisplayWdg.create_swap_title(title, swap, checkin_options, is_open=False) div.add(swap) div.add(title) checkin_options.add(my.get_file_type_wdg()) checkin_options.add(my.get_snapshot_type_wdg()) checkin_options.add(HtmlElement.br(1)) checkin_options.add(my.get_export_method_wdg()) checkin_options.add(my.get_checkin_as_wdg()) #my.add( my.get_render_icon_wdg() ) # For different export methods checkin_options.add(my.get_currency_wdg()) checkin_options.add(my.get_reference_option()) checkin_options.add(my.get_auto_version_wdg()) checkin_options.add(my.get_texture_option(app=app_name)) checkin_options.add(my.get_handoff_wdg()) if not my.context_select.get_value(for_display=True): my.add(DivWdg('A context must be selected.', css='warning')) return div.add(checkin_options) top.add(my.get_introspect_wdg()) top.add(HtmlElement.br(2)) # create the interface table = Table() table.set_max_width() #table.set_class("table") table.add_color('background', 'background2') #table.add_style('line-height','3.0em') #table.add_row(css='smaller') tr = table.add_row(css='smaller') tr.add_style('height', '3.5em') table.add_header(" ") table.add_header(" ") th = table.add_header("Instance") th.add_style('text-align: left') table.add_header(my.get_checkin()) table.add_header("Sandbox") tr.add_color('background', 'background2', -15) # get session and handle case where there is no session my.session = SessionContents.get() if my.session == None: instance_names = [] asset_codes = [] node_names = [] else: instance_names = my.session.get_instance_names() asset_codes = my.session.get_asset_codes() node_names = my.session.get_node_names() # get all of the possible assets based on the asset codes search = Search(my.search_type) search.add_filters("code", asset_codes) assets = search.get_sobjects() assets_dict = SObject.get_dict(assets, ["code"]) if my.session: my.add("Current Project: <b>%s</b>" % my.session.get_project_dir()) else: my.add("Current Project: Please press 'Introspect'") count = 0 for i in range(0, len(node_names)): node_name = node_names[i] if not my.session.is_tactic_node(node_name) and \ not my.session.get_node_type(node_name) in ['transform','objectSet']: continue instance_name = instance_names[i] # backwards compatible: try: asset_code = asset_codes[i] except IndexError, e: asset_code = instance_name # skip if this is a reference if my.list_references == False and \ my.session.is_reference(node_name): continue table.add_row() # check that this asset exists asset = assets_dict.get(asset_code) if not asset: continue # list items if it is a set if asset.get_value('asset_type', no_exception=True) in ["set", "section"]: my.current_sobject = asset my.handle_set(table, instance_name, asset, instance_names) count += 1 # if this asset is in the database, then allow it to checked in if asset: if my.session.get_snapshot_code(instance_name, snapshot_type='set'): continue # hack remember this my.current_sobject = asset my.handle_instance(table, instance_name, asset, node_name) else: table.add_blank_cell() table.add_cell(instance_name) count += 1
def get_display(my): my.search_type = my.kwargs.get('search_type') my.texture_search_type = my.kwargs.get('texture_search_type') assert my.search_type app_name = WebContainer.get_web().get_selected_app() # add an outside box top = DivWdg(css='spt_view_panel') #div = DivWdg(css="maq_search_bar") div = DivWdg() div.add_color("background", "background2", -15) my.set_as_panel(top) top.add(div) div.add_style("margin: 5px") div.add_style("padding: 10px") div.add_style("font-style: bold") process_div = DivWdg() process_div.add_style("padding-left: 10px") div.add(process_div) process_div.add( my.get_process_wdg(my.search_type)) process_div.add( my.get_context_filter_wdg() ) process_div.add(HtmlElement.br(clear="all")) div.add( HtmlElement.br() ) checkin_options = DivWdg(css='spt_ui_options') checkin_options.add_style("padding: 10px") swap = SwapDisplayWdg() #swap.set_off() title = SpanWdg("Check in Options") SwapDisplayWdg.create_swap_title(title, swap, checkin_options, is_open=False) div.add(swap) div.add(title) checkin_options.add( my.get_file_type_wdg() ) checkin_options.add( my.get_snapshot_type_wdg() ) checkin_options.add(HtmlElement.br(1)) checkin_options.add( my.get_export_method_wdg() ) checkin_options.add( my.get_checkin_as_wdg() ) #my.add( my.get_render_icon_wdg() ) # For different export methods checkin_options.add( my.get_currency_wdg() ) checkin_options.add( my.get_reference_option()) checkin_options.add( my.get_auto_version_wdg()) checkin_options.add( my.get_texture_option(app=app_name)) checkin_options.add( my.get_handoff_wdg()) if not my.context_select.get_value(for_display=True): my.add(DivWdg('A context must be selected.', css='warning')) return div.add(checkin_options) top.add( my.get_introspect_wdg() ) top.add(HtmlElement.br(2)) # create the interface table = Table() table.set_max_width() #table.set_class("table") table.add_color('background','background2') #table.add_style('line-height','3.0em') #table.add_row(css='smaller') tr = table.add_row(css='smaller') tr.add_style('height', '3.5em') table.add_header(" ") table.add_header(" ") th = table.add_header("Instance") th.add_style('text-align: left') table.add_header(my.get_checkin()) table.add_header("Sandbox") tr.add_color('background','background2', -15) # get session and handle case where there is no session my.session = SessionContents.get() if my.session == None: instance_names = [] asset_codes = [] node_names = [] else: instance_names = my.session.get_instance_names() asset_codes = my.session.get_asset_codes() node_names = my.session.get_node_names() # get all of the possible assets based on the asset codes search = Search(my.search_type) search.add_filters("code", asset_codes) assets = search.get_sobjects() assets_dict = SObject.get_dict(assets, ["code"]) if my.session: my.add("Current Project: <b>%s</b>" % my.session.get_project_dir() ) else: my.add("Current Project: Please press 'Introspect'") count = 0 for i in range(0, len(node_names) ): node_name = node_names[i] if not my.session.is_tactic_node(node_name) and \ not my.session.get_node_type(node_name) in ['transform','objectSet']: continue instance_name = instance_names[i] # backwards compatible: try: asset_code = asset_codes[i] except IndexError, e: asset_code = instance_name # skip if this is a reference if my.list_references == False and \ my.session.is_reference(node_name): continue table.add_row() # check that this asset exists asset = assets_dict.get(asset_code) if not asset: continue # list items if it is a set if asset.get_value('asset_type', no_exception=True) in ["set", "section"]: my.current_sobject = asset my.handle_set( table, instance_name, asset, instance_names) count +=1 # if this asset is in the database, then allow it to checked in if asset: if my.session.get_snapshot_code(instance_name, snapshot_type='set'): continue # hack remember this my.current_sobject = asset my.handle_instance(table, instance_name, asset, node_name) else: table.add_blank_cell() table.add_cell(instance_name) count += 1
def get_bottom_wdg(my, search_keys=[]): # check if the user has enabled it info = my.check_bottom_wdg() if info.get('check') == False: return None if info.get('mode') != 'total': top = DivWdg() top.add("Only [total] is supported. Please change it in Edit Column Definition") return top my.today = datetime.date.today() if my.is_refresh: top = Widget() else: top = DivWdg() days = [] for date in my.dates: days.append( date.strftime("%Y_%m_%d") ) today = my.today.strftime("%Y_%m_%d") table = Table() top.add(table) row_list = [my.ST_ROW] if my.show_overtime: row_list.append( my.OT_ROW) for row_to_draw in row_list: table.add_row() table.add_color("color", "color") table.add_styles("width: %spx; float: left"%my.table_width) td = table.add_blank_cell() td.add_style("min-width: %spx" % (my.MONTH_WIDTH + my.LEFT_WIDTH+8)) time_prefix = '' if row_to_draw == my.OT_ROW: time_prefix = 'ot' div = DivWdg() div.add("OT") div.add_styles('text-align: right; margin-right: 4px; margin-bottom: 6px') td.add(div) elif row_to_draw == my.STT_ROW: time_prefix = 'stt' div = DivWdg() div.add("ST") div.add_styles('text-align: right; margin-right: 4px; margin-bottom: 6px') td.add(div) elif row_to_draw == my.ENT_ROW: time_prefix = 'ent' div = DivWdg() div.add("ET") div.add_styles('text-align: right; margin-right: 4px; margin-bottom: 6px') td.add(div) for idx, day in enumerate(days): day_wdg = DivWdg() day_wdg.add(day) td = table.add_cell() td.add_style("width: %spx" % my.day_width) # keep it as text input for consistent alignment text = TextWdg("%sday_%s" % (time_prefix, day) ) if row_to_draw == my.OT_ROW: sobj_daily_dict = my.summary_ot[idx] else: sobj_daily_dict = my.summary_st[idx] if search_keys: sobj_daily_sub_dict = Common.subset_dict(sobj_daily_dict, search_keys) else: sobj_daily_sub_dict = sobj_daily_dict daily_total = 0 for value in sobj_daily_sub_dict.values(): if value: daily_total += value text.set_value(daily_total) td.add(text) text.add_class("spt_day%s" % (time_prefix)) text.add_style("width: %spx"%(my.day_width-2)) #text.add_style("width: 100%") text.add_style("text-align: right") text.add_style("padding-left: 2px") text.add_style('font-weight: 500') text.set_attr("readonly", "readonly") # grey out the text color text.add_color('color', 'color', +40) if day == today: text.add_style("border: solid 1px black") elif idx in [0,6]: if row_to_draw == my.OT_ROW: # FOOTER: Overtime, weekends text.add_color("background", "background2", modifier=[-15,0,5]) else: # FOOTER: Straight time, weekends text.add_color("background", "background2", modifier=[0,15,20]) text = TextWdg("total") daily_total = 0 if row_to_draw == my.OT_ROW: sobj_daily_dict = my.summary_ot[7] else: sobj_daily_dict = my.summary_st[7] if search_keys: sobj_daily_sub_dict = Common.subset_dict(sobj_daily_dict, search_keys) else: sobj_daily_sub_dict = sobj_daily_dict for value in sobj_daily_sub_dict.values(): if value: daily_total += value text.set_value(daily_total) td = table.add_cell(text) text.add_class("spt_total%s" % (time_prefix)) # does not look good in FF #td.add_style("border-width: 0 0 0 1") #td.add_style("border-style: solid") td.add_style("width: %spx"%my.day_width) text.add_styles("font-weight: 500;width: %spx; text-align: right; padding-left: 2px"%(my.day_width)) text.set_attr("readonly", "readonly") text.add_color('color', 'color', +40) if row_to_draw == my.OT_ROW: # FOOTER: Overtime, total. text.add_color("background", "background2", modifier=[5,-15,0]) else: # FOOTER: Straight time, total text.add_color("background", "background2", modifier=[20,0,15]) td = table.add_blank_cell() td.add_style('width','100%') return top
def get_display(my): if not my.preprocessed: my.preprocess() if my.is_refresh: top = Widget() else: top = DivWdg() top.add_class("spt_work_hours_top") hidden = HiddenWdg('workhour_data') hidden.add_class('spt_workhour_data') header_data = {'start_date': str(my.start_date)} header_data = jsondumps(header_data).replace('"', """) hidden.set_value(header_data, set_form_value=False ) top.add(hidden) days = [] for date in my.dates: days.append( date.strftime("%Y_%m_%d") ) today = my.today.strftime("%Y_%m_%d") task = my.get_current_sobject() if not my.is_refresh: my.set_as_panel(top) entries = my.entries.get(task.get_code()) if isinstance(task, Task): parent = task.get_parent() if not parent: disabled = True else: disabled = False else: disabled = False if not entries: entries = {} table = Table() top.add(table) if my.use_straight_time: row_list = [my.ST_ROW] if my.show_overtime: row_list.append(my.OT_ROW) prefix_list = ['','ot'] else: row_list = [my.STT_ROW, my.ENT_ROW] prefix_list = ['stt','ent'] text = HiddenWdg(my.get_name() ) text.add_class("spt_data") table.add_color("color", "color") table.add_styles("width: %spx; float: left"%my.table_width) for row_to_draw in row_list: tr = table.add_row() tr.add_style('line-height','8px') td = table.add_blank_cell() offset_width = my.MONTH_WIDTH + my.LEFT_WIDTH+8 td.add_style("min-width: %spx" % offset_width) td.add(text) # go through each day and draw an input for overtime total_hours_st = 0 total_hours_ot = 0 search_key = task.get_search_key() # Add a label to indicate if the row is straight time or overtime time_prefix = '' if row_to_draw == my.OT_ROW: time_prefix = 'ot' div = DivWdg() div.add("OT") div.add_styles('text-align: right; margin-right: 4px') td.add(div) elif row_to_draw == my.STT_ROW: time_prefix = 'stt' div = DivWdg() div.add("ST") div.add_styles('text-align: right; margin: 0 4px 4px 0') td.add(div) elif row_to_draw == my.ENT_ROW: time_prefix = 'ent' div = DivWdg() div.add("ET") div.add_styles('text-align: right; margin: 0 4px 4px 0') td.add(div) for idx, day in enumerate(days): day_wdg = DivWdg() day_wdg.add(day) td = table.add_cell() td.add_style("width: %spx" % my.day_width) text = TextWdg('%sday_%s' % (time_prefix, day)) if disabled: text.set_option('read_only','true') text.set_attr('disabled','disabled') td.add(text) text.add_class('spt_day%s' % (time_prefix)) text.add_styles("width: %spx;text-align: right;padding-left: 2px" %(my.day_width-2)) #text.add_styles("width: 100%;text-align: right;padding-left: 2px") if day == today: text.add_style("border: solid 1px black") else: text.add_border() week_day = my.weekday_dict[idx] if week_day in ['Sat','Sun']: # MAIN: Overtime, weekend if row_to_draw == my.OT_ROW: text.add_color("background", "background2", modifier=[-15,0,5]) else: text.add_color("background", "background2", modifier= [0,15,20]) text.add_style("margin: 0px 1px") if row_to_draw == my.OT_ROW: text.add_attr('input_field_type', 'ot') else: text.add_attr('input_field_type', 'st') if my.kwargs.get('show_all_users')=='true': text.set_option('read_only','true') #TODO: while we may have multiple entries per task, we will only use the latest one here # for now, making the UI cleaner # if a corresponding entry exists, display its value entry_list_dict = entries.get(day) daily_sum = 0 value = 0 entry_list = [] if entry_list_dict: row_key = my.ROW_DICT.get(row_to_draw) entry_list = entry_list_dict.get(row_key) if entry_list: for entry in entry_list: # Check if there is something in the category column. category = entry.get_value("category") if row_to_draw == my.OT_ROW: # Skip if the category field does not have a 'ot' indicated. if not category: print "Warning this work_hour entry has no category [%s]" % entry.get_code() continue # Check if there exist a value in the straight_time column value, delta = my.get_time_value(entry, row_to_draw) if value: text.set_value(value) text.add_attr('orig_input_value', value) if row_to_draw == my.OT_ROW: total_hours_ot += float(delta) else: total_hours_st += float(delta) daily_sum += delta # we only use value instead of the sum "daily_sum" for now if row_to_draw == my.OT_ROW: my.summary_ot[idx].update({search_key: daily_sum}) else: my.summary_st[idx].update({search_key: daily_sum}) script = ''' var orig_value = bvr.src_el.getAttribute("orig_input_value"); var input_field_type = bvr.src_el.getAttribute("input_field_type"); bvr.src_el.value = bvr.src_el.value.strip(); if (bvr.src_el.value == '') { if (orig_value) { bvr.src_el.value = 0; } else { return; } } else if (bvr.src_el.value == orig_value) { return; } bvr.prefix_list.splice( bvr.prefix_list.indexOf(bvr.time_prefix),1) var other_time_prefix = bvr.prefix_list[0]; spt.work_hour.update_total(bvr, '.spt_day' + bvr.time_prefix); // register this as changed item var all_top_el = bvr.src_el.getParent(".spt_work_hours_top"); var values1 = spt.api.Utility.get_input_values(all_top_el, '.spt_day'+ bvr.time_prefix, false); var values2 = spt.api.Utility.get_input_values(all_top_el, '.spt_day'+ other_time_prefix, false); // Merge values from straight time and overtime fields in values variable. for (var attr in values2) { values1[attr] = values2[attr]; } for (val in values1) { if (values1[val] && isNaN(values1[val])) { spt.error('You have non-numeric values in your work hours. Please correct it: ' + values[val]); return; } } delete values1.data; var value_wdg = all_top_el.getElement(".spt_data"); var value = JSON.stringify(values1); value_wdg.value = value; var layout = bvr.src_el.getParent(".spt_layout"); var version = layout.getAttribute("spt_version"); if (version == "2") { spt.table.set_layout(layout); spt.table.accept_edit(all_top_el, value, false); } else { var cached_data = {}; spt.dg_table.edit.widget = all_top_el; spt.dg_table.inline_edit_cell_cbk( value_wdg, cached_data ); } ''' # accept on pressing Enter behavior = { 'type': 'keydown', 'time_prefix': time_prefix, 'prefix_list': prefix_list, 'cbjs_action': ''' if (evt.key=='enter') { %s } '''%script} text.add_behavior(behavior) behavior = { 'type': 'blur', 'time_prefix': time_prefix, 'prefix_list': prefix_list, 'cbjs_action': ''' %s '''%script} text.add_behavior(behavior) text = TextWdg("total") td = table.add_cell(text) td.add_style("width: 35px") text.add_border() text.add_attr('spt_total', '.spt_total%s' % (time_prefix)) text.add_class('spt_total%s' % (time_prefix)) text.add_styles("width: %spx; text-align: right; padding-right: 3px"%my.day_width) text.set_attr("readonly", "readonly") # MAIN: Overtime, total. if row_to_draw == my.OT_ROW: text.add_color("background", "background2", modifier=[5,-15,0]) if total_hours_ot: text.set_value("%0.1f" % total_hours_ot) my.summary_ot[7].update({search_key: total_hours_ot}) else: text.add_color("background", "background2", modifier=[20,0,15]) if total_hours_st: text.set_value("%0.1f" % total_hours_st) my.summary_st[7].update({search_key: total_hours_st}) td = table.add_blank_cell() td.add_style('width: 100%') return top
def get_title(my): div = DivWdg() div.add_behavior({'type': 'load', 'cbjs_action': my.get_onload_js()}) # for csv export hid = HiddenWdg('start_date', my.start_date) div.add(hid) mday = my.today.strftime("%d") mmonth = my.today.strftime("%m") my.weekday_dict = {} days = [] for idx, date in enumerate(my.dates): day_div = DivWdg() days.append( day_div ) week_day = date.strftime("%a") day_div.add( "%s<br/>%s" % (week_day, date.strftime("%d") )) my.weekday_dict[idx] = week_day table = Table() div.add(table) table.add_row() table.add_color("color", "color") table.add_style("width: %spx"%my.table_width) table.add_style("float: left") month_div = FloatDivWdg(my.start_date.strftime("%b")) month_div.add_style('font-weight: 600') td = table.add_cell(month_div) td.add_style('width', '%spx'%my.MONTH_WIDTH) icon = IconButtonWdg(tip="Previous Week", icon=IconWdg.LEFT) td = table.add_cell(icon) offset = 0 if not my.use_straight_time: offset = 12 td.add_style("width: %spx" % (my.LEFT_WIDTH + offset) ) display_days = my.days_per_page next_start_date = my.start_date + datetime.timedelta(days=display_days) prev_start_date = my.start_date + datetime.timedelta(days=-display_days) icon.add_behavior( { 'type': 'click_up', 'start_date': prev_start_date.__str__(), 'cbjs_action': ''' spt.app_busy.show('Loading previous week...'); var header = bvr.src_el.getParent('.spt_table_header'); if (!header) { spt.alert('Work hour widget requires the new Fast Table Layout to scroll to previous week. You can do so in [Manage Side Bar].'); spt.app_busy.hide(); return; } var cur_name = spt.table.get_element_name_by_header(header); var values = {'start_date': bvr.start_date}; spt.table.refresh_column(cur_name, values); spt.app_busy.hide(); ''' } ) for day in days: day_wdg = DivWdg() day_wdg.add(day) td = table.add_cell() td.add(day_wdg) td.add_styles("text-align: center; padding-left: 2px;min-width: %spx"%my.day_width) icon = IconButtonWdg(tip="Next Week", icon=IconWdg.RIGHT) icon.add_behavior( { 'type': 'click_up', 'start_date': next_start_date.__str__(), 'cbjs_action': ''' spt.app_busy.show('Loading next week...'); var header = bvr.src_el.getParent('.spt_table_header'); if (!header) { spt.alert('Work hour widget requires the new Fast Table Layout to scroll to next week. You can do so in [Manage Side Bar].'); spt.app_busy.hide(); return; } var cur_name = spt.table.get_element_name_by_header(header); var values = {'start_date': bvr.start_date}; spt.table.refresh_column(cur_name, values); spt.app_busy.hide(); ''' } ) td = table.add_cell(icon) td.add_style('width: %spx'%my.day_width) # empty total cell td = table.add_blank_cell() td.add_style('width: 100%') return div
def get_display(my): widget = Widget() div = DivWdg(css='spt_ui_options') div.set_unique_id() table = Table() div.add(table) table.add_style("margin: 5px 15px") table.add_color('color', 'color') swap = SwapDisplayWdg() #swap.set_off() app = WebContainer.get_web().get_selected_app() outer_span = SpanWdg() outer_span.add_style('float: right') span = SpanWdg(app, css='small') icon = IconWdg(icon=eval("IconWdg.%s" % app.upper()), width='13px') outer_span.add(span) outer_span.add(icon) title = SpanWdg("Loading Options") title.add(outer_span) SwapDisplayWdg.create_swap_title(title, swap, div, is_open=False) widget.add(swap) widget.add(title) widget.add(div) if not my.hide_instantiation: table.add_row() table.add_blank_cell() div = DivWdg(HtmlElement.b("Instantiation: ")) table.add_cell(div) div = my.get_instantiation_wdg() table.add_cell(div) setting = my.get_default_setting() default_instantiation = setting.get('instantiation') default_connection = setting.get('connection') default_dependency = setting.get('texture_dependency') if not my.hide_connection: table.add_row() table.add_blank_cell() con_div = DivWdg(HtmlElement.b("Connection: ")) table.add_cell(con_div) td = table.add_cell() is_unchecked = True default_cb = None for value in ['http', 'file system']: name = my.get_element_name("connection") checkbox = CheckboxWdg(name) checkbox.set_option("value", value) checkbox.set_persistence() if value == default_connection: default_cb = checkbox if checkbox.is_checked(): is_unchecked = False checkbox.add_behavior({ 'type': 'click_up', 'propagate_evt': True, "cbjs_action": "spt.toggle_checkbox(bvr, '.spt_ui_options', '%s')" % name }) span = SpanWdg(checkbox, css='small') span.add(value) td.add(span) if is_unchecked: default_cb.set_checked() if not my.hide_dependencies: table.add_row() table.add_blank_cell() div = DivWdg(HtmlElement.b("Texture Dependencies: ")) table.add_cell(div) td = table.add_cell() is_unchecked = True default_cb = None for value in ['as checked in', 'latest', 'current']: name = my.get_element_name("dependency") checkbox = CheckboxWdg(name) checkbox.set_option("value", value) checkbox.set_persistence() checkbox.add_behavior({ 'type': 'click_up', 'propagate_evt': True, "cbjs_action": "spt.toggle_checkbox(bvr, '.spt_ui_options', '%s')" % name }) if value == default_dependency: default_cb = checkbox if checkbox.is_checked(): is_unchecked = False span = SpanWdg(checkbox, css='small') span.add(value) td.add(span) if is_unchecked: default_cb.set_checked() from connection_select_wdg import ConnectionSelectWdg table.add_row() table.add_blank_cell() div = DivWdg(HtmlElement.b("Connection Type: ")) table.add_cell(div) table.add_cell(ConnectionSelectWdg()) table.add_row() table.add_blank_cell() div = DivWdg(HtmlElement.b("Connection Port: ")) table.add_cell(div) port_div = DivWdg() port_text = TextWdg("port") port_text.set_option('size', '6') port_div.add(port_text) port_div.add_style("padding-left: 7px") port_div.add_style("width: 40px") table.add_cell(port_div) from pyasm.prod.web import WidgetSettings value = WidgetSettings.get_value_by_key("CGApp:connection_port") if value: port_text.set_value(value) elif WebContainer.get_web().get_selected_app() == 'Houdini': port_text.set_value("13000") else: port_text.set_value("4444") port_text.add_behavior({ 'type': 'change', 'cbjs_action': ''' var value = bvr.src_el.value; value = parseInt(value); var kwargs = { 'data': value, 'key': 'CGApp:connection_port' } var cmd = "pyasm.web.WidgetSettingSaveCbk" var server = TacticServerStub.get(); server.execute_cmd(cmd, kwargs); // FIXME: this is dangerous use of a global var app.port = value; ''' }) return widget
def get_display(self): widget = Widget() div = DivWdg(css='spt_ui_options') div.set_unique_id() table = Table() div.add(table) table.add_style("margin: 5px 15px") table.add_color('color','color') swap = SwapDisplayWdg() #swap.set_off() app = WebContainer.get_web().get_selected_app() outer_span = SpanWdg() outer_span.add_style('float: right') span = SpanWdg(app, css='small') icon = IconWdg(icon=eval("IconWdg.%s"%app.upper()), width='13px') outer_span.add(span) outer_span.add(icon) title = SpanWdg("Loading Options") title.add(outer_span) SwapDisplayWdg.create_swap_title(title, swap, div, is_open=False) widget.add(swap) widget.add(title) widget.add(div) if not self.hide_instantiation: table.add_row() table.add_blank_cell() div = DivWdg(HtmlElement.b("Instantiation: ")) table.add_cell(div) div = self.get_instantiation_wdg() table.add_cell(div) setting = self.get_default_setting() default_instantiation = setting.get('instantiation') default_connection = setting.get('connection') default_dependency = setting.get('texture_dependency') if not self.hide_connection: table.add_row() table.add_blank_cell() con_div = DivWdg(HtmlElement.b("Connection: ")) table.add_cell(con_div) td = table.add_cell() is_unchecked = True default_cb = None for value in ['http', 'file system']: name = self.get_element_name("connection") checkbox = CheckboxWdg( name ) checkbox.set_option("value", value) checkbox.set_persistence() if value == default_connection: default_cb = checkbox if checkbox.is_checked(): is_unchecked = False checkbox.add_behavior({'type': 'click_up', 'propagate_evt': True, "cbjs_action": "spt.toggle_checkbox(bvr, '.spt_ui_options', '%s')" %name}) span = SpanWdg(checkbox, css='small') span.add(value) td.add(span) if is_unchecked: default_cb.set_checked() if not self.hide_dependencies: table.add_row() table.add_blank_cell() div = DivWdg(HtmlElement.b("Texture Dependencies: ")) table.add_cell(div) td = table.add_cell() is_unchecked = True default_cb = None for value in ['as checked in', 'latest', 'current']: name = self.get_element_name("dependency") checkbox = CheckboxWdg( name ) checkbox.set_option("value", value) checkbox.set_persistence() checkbox.add_behavior({'type': 'click_up', 'propagate_evt': True, "cbjs_action": "spt.toggle_checkbox(bvr, '.spt_ui_options', '%s')" %name}) if value == default_dependency: default_cb = checkbox if checkbox.is_checked(): is_unchecked = False span = SpanWdg(checkbox, css='small') span.add(value) td.add(span) if is_unchecked: default_cb.set_checked() from connection_select_wdg import ConnectionSelectWdg table.add_row() table.add_blank_cell() div = DivWdg(HtmlElement.b("Connection Type: ")) table.add_cell(div) table.add_cell( ConnectionSelectWdg() ) table.add_row() table.add_blank_cell() div = DivWdg(HtmlElement.b("Connection Port: ")) table.add_cell(div) port_div = DivWdg() port_text = TextWdg("port") port_text.set_option('size','6') port_div.add(port_text) port_div.add_style("padding-left: 7px") port_div.add_style("width: 40px") table.add_cell( port_div ) from pyasm.prod.web import WidgetSettings value = WidgetSettings.get_value_by_key("CGApp:connection_port") if value: port_text.set_value(value) elif WebContainer.get_web().get_selected_app() == 'Houdini': port_text.set_value("13000") else: port_text.set_value("4444") port_text.add_behavior( { 'type': 'change', 'cbjs_action': ''' var value = bvr.src_el.value; value = parseInt(value); var kwargs = { 'data': value, 'key': 'CGApp:connection_port' } var cmd = "pyasm.web.WidgetSettingSaveCbk" var server = TacticServerStub.get(); server.execute_cmd(cmd, kwargs); // FIXME: this is dangerous use of a global var app.port = value; ''' } ) return widget
def get_bottom_wdg(my, search_keys=[]): # check if the user has enabled it info = my.check_bottom_wdg() if info.get('check') == False: return None if info.get('mode') != 'total': top = DivWdg() top.add( "Only [total] is supported. Please change it in Edit Column Definition" ) return top my.today = datetime.date.today() if my.is_refresh: top = Widget() else: top = DivWdg() days = [] for date in my.dates: days.append(date.strftime("%Y_%m_%d")) today = my.today.strftime("%Y_%m_%d") table = Table() top.add(table) row_list = [my.ST_ROW] if my.show_overtime: row_list.append(my.OT_ROW) for row_to_draw in row_list: table.add_row() table.add_color("color", "color") table.add_styles("width: %spx; float: left" % my.table_width) td = table.add_blank_cell() td.add_style("min-width: %spx" % (my.MONTH_WIDTH + my.LEFT_WIDTH + 8)) time_prefix = '' if row_to_draw == my.OT_ROW: time_prefix = 'ot' div = DivWdg() div.add("OT") div.add_styles( 'text-align: right; margin-right: 4px; margin-bottom: 6px') td.add(div) elif row_to_draw == my.STT_ROW: time_prefix = 'stt' div = DivWdg() div.add("ST") div.add_styles( 'text-align: right; margin-right: 4px; margin-bottom: 6px') td.add(div) elif row_to_draw == my.ENT_ROW: time_prefix = 'ent' div = DivWdg() div.add("ET") div.add_styles( 'text-align: right; margin-right: 4px; margin-bottom: 6px') td.add(div) for idx, day in enumerate(days): day_wdg = DivWdg() day_wdg.add(day) td = table.add_cell() td.add_style("width: %spx" % my.day_width) # keep it as text input for consistent alignment text = TextWdg("%sday_%s" % (time_prefix, day)) if row_to_draw == my.OT_ROW: sobj_daily_dict = my.summary_ot[idx] else: sobj_daily_dict = my.summary_st[idx] if search_keys: sobj_daily_sub_dict = Common.subset_dict( sobj_daily_dict, search_keys) else: sobj_daily_sub_dict = sobj_daily_dict daily_total = 0 for value in sobj_daily_sub_dict.values(): if value: daily_total += value text.set_value(daily_total) td.add(text) text.add_class("spt_day%s" % (time_prefix)) text.add_style("width: %spx" % (my.day_width - 2)) #text.add_style("width: 100%") text.add_style("text-align: right") text.add_style("padding-left: 2px") text.add_style('font-weight: 500') text.set_attr("readonly", "readonly") # grey out the text color text.add_color('color', 'color', +40) if day == today: text.add_style("border: solid 1px black") elif idx in [0, 6]: if row_to_draw == my.OT_ROW: # FOOTER: Overtime, weekends text.add_color("background", "background2", modifier=[-15, 0, 5]) else: # FOOTER: Straight time, weekends text.add_color("background", "background2", modifier=[0, 15, 20]) text = TextWdg("total") daily_total = 0 if row_to_draw == my.OT_ROW: sobj_daily_dict = my.summary_ot[7] else: sobj_daily_dict = my.summary_st[7] if search_keys: sobj_daily_sub_dict = Common.subset_dict( sobj_daily_dict, search_keys) else: sobj_daily_sub_dict = sobj_daily_dict for value in sobj_daily_sub_dict.values(): if value: daily_total += value text.set_value(daily_total) td = table.add_cell(text) text.add_class("spt_total%s" % (time_prefix)) # does not look good in FF #td.add_style("border-width: 0 0 0 1") #td.add_style("border-style: solid") td.add_style("width: %spx" % my.day_width) text.add_styles( "font-weight: 500;width: %spx; text-align: right; padding-left: 2px" % (my.day_width)) text.set_attr("readonly", "readonly") text.add_color('color', 'color', +40) if row_to_draw == my.OT_ROW: # FOOTER: Overtime, total. text.add_color("background", "background2", modifier=[5, -15, 0]) else: # FOOTER: Straight time, total text.add_color("background", "background2", modifier=[20, 0, 15]) td = table.add_blank_cell() td.add_style('width', '100%') return top
def get_display(my): my.init_kwargs() sobject = my.get_current_sobject() table = Table(css='minimal') table.add_color("color", "color") table.add_style("font-size: 0.9em") snapshots = my.get_snapshot(my.mode) for snapshot in snapshots: table.add_row() value = my.get_input_value(sobject, snapshot) current_version = snapshot.get_value("version") current_context = snapshot.get_value("context") current_revision = snapshot.get_value("revision", no_exception=True) current_snapshot_type = snapshot.get_value("snapshot_type") # hack hard coded type translation if current_snapshot_type == "anim_export": current_snapshot_type = "anim" # ignore icon context completely if current_context == "icon": table.add_blank_cell() table.add_cell("(---)") return table checkbox = CheckboxWdg('%s_%s' %(my.search_type, my.CB_NAME)) # this is added back in for now to work with 3.7 Fast table checkbox.add_behavior({'type': 'click_up', 'propagate_evt': True}) checkbox.add_class('spt_latest_%s' %my.mode) checkbox.set_option("value", value ) table.add_cell( checkbox ) load_all = False if load_all: checkbox.set_checked() # add the file type icon xml = snapshot.get_snapshot_xml() file_name = xml.get_value("snapshot/file/@name") icon_link = ThumbWdg.find_icon_link(file_name) image = HtmlElement.img(icon_link) image.add_style("width: 15px") table.add_cell(image) namespace = my.get_namespace(sobject, snapshot) asset_code = my.get_asset_code() # force asset mode = True my.session.set_asset_mode(asset_mode=my.get_session_asset_mode()) node_name = my.get_node_name(snapshot, asset_code, namespace) # get session info session_context = session_version = session_revision = None if my.session: session_context = my.session.get_context(node_name, asset_code, current_snapshot_type) session_version = my.session.get_version(node_name, asset_code, current_snapshot_type) session_revision = my.session.get_revision(node_name, asset_code,current_snapshot_type) # Maya Specific: try with namespace in front of it for referencing referenced_name = '%s:%s' %(namespace, node_name) if not session_context or not session_version: session_context = my.session.get_context(referenced_name, asset_code, current_snapshot_type) session_version = my.session.get_version(referenced_name, asset_code, current_snapshot_type) session_revision = my.session.get_revision(referenced_name, asset_code, current_snapshot_type) from version_wdg import CurrentVersionContextWdg, SubRefWdg version_wdg = CurrentVersionContextWdg() data = {'session_version': session_version, \ 'session_context': session_context, \ 'session_revision': session_revision, \ 'current_context': current_context, \ 'current_version': current_version, \ 'current_revision': current_revision } version_wdg.set_options(data) table.add_cell(version_wdg, "no_wrap") td = table.add_cell(HtmlElement.b("(%s)" %current_context)) td.add_tip("Snapshot code: %s" % snapshot.get_code()) #table.add_cell(snapshot.get_code() ) #if snapshot.is_current(): # current = IconWdg("current", IconWdg.CURRENT) # table.add_cell(current) #else: # table.add_blank_cell() # handle subreferences has_subreferences = True xml = snapshot.get_xml_value("snapshot") refs = xml.get_nodes("snapshot/file/ref") if my.mode == "output" and refs: table.add_row() td = table.add_cell() swap = SwapDisplayWdg.get_triangle_wdg() td.add(swap) td.add("[ %s reference(s)" % len(refs)) #td.add_style("text-align: right") sub_ref_wdg = SubRefWdg() sub_ref_wdg.set_info(snapshot, my.session, namespace) swap.add_action_script( sub_ref_wdg.get_on_script(), "toggle_display('%s')" % sub_ref_wdg.get_top_id() ) status = sub_ref_wdg.get_overall_status() td.add(SpanWdg(VersionWdg.get(status), css='small_left')) td.add(']') td.add( sub_ref_wdg ) td.add_style('padding-left: 10px') #else: if not snapshots: table.add_row() table.add_blank_cell() table.add_cell("(---)") return table
def get_display(my): my.init_kwargs() sobject = my.get_current_sobject() table = Table(css='minimal') table.add_color("color", "color") table.add_style("font-size: 0.9em") snapshots = my.get_snapshot(my.mode) for snapshot in snapshots: table.add_row() value = my.get_input_value(sobject, snapshot) current_version = snapshot.get_value("version") current_context = snapshot.get_value("context") current_revision = snapshot.get_value("revision", no_exception=True) current_snapshot_type = snapshot.get_value("snapshot_type") # hack hard coded type translation if current_snapshot_type == "anim_export": current_snapshot_type = "anim" # ignore icon context completely if current_context == "icon": table.add_blank_cell() table.add_cell("(---)") return table checkbox = CheckboxWdg('%s_%s' % (my.search_type, my.CB_NAME)) # this is added back in for now to work with 3.7 Fast table checkbox.add_behavior({'type': 'click_up', 'propagate_evt': True}) checkbox.add_class('spt_latest_%s' % my.mode) checkbox.set_option("value", value) table.add_cell(checkbox) load_all = False if load_all: checkbox.set_checked() # add the file type icon xml = snapshot.get_snapshot_xml() file_name = xml.get_value("snapshot/file/@name") icon_link = ThumbWdg.find_icon_link(file_name) image = HtmlElement.img(icon_link) image.add_style("width: 15px") table.add_cell(image) namespace = my.get_namespace(sobject, snapshot) asset_code = my.get_asset_code() # force asset mode = True my.session.set_asset_mode(asset_mode=my.get_session_asset_mode()) node_name = my.get_node_name(snapshot, asset_code, namespace) # get session info session_context = session_version = session_revision = None if my.session: session_context = my.session.get_context( node_name, asset_code, current_snapshot_type) session_version = my.session.get_version( node_name, asset_code, current_snapshot_type) session_revision = my.session.get_revision( node_name, asset_code, current_snapshot_type) # Maya Specific: try with namespace in front of it for referencing referenced_name = '%s:%s' % (namespace, node_name) if not session_context or not session_version: session_context = my.session.get_context( referenced_name, asset_code, current_snapshot_type) session_version = my.session.get_version( referenced_name, asset_code, current_snapshot_type) session_revision = my.session.get_revision( referenced_name, asset_code, current_snapshot_type) from version_wdg import CurrentVersionContextWdg, SubRefWdg version_wdg = CurrentVersionContextWdg() data = {'session_version': session_version, \ 'session_context': session_context, \ 'session_revision': session_revision, \ 'current_context': current_context, \ 'current_version': current_version, \ 'current_revision': current_revision } version_wdg.set_options(data) table.add_cell(version_wdg, "no_wrap") td = table.add_cell(HtmlElement.b("(%s)" % current_context)) td.add_tip("Snapshot code: %s" % snapshot.get_code()) #table.add_cell(snapshot.get_code() ) #if snapshot.is_current(): # current = IconWdg("current", IconWdg.CURRENT) # table.add_cell(current) #else: # table.add_blank_cell() # handle subreferences has_subreferences = True xml = snapshot.get_xml_value("snapshot") refs = xml.get_nodes("snapshot/file/ref") if my.mode == "output" and refs: table.add_row() td = table.add_cell() swap = SwapDisplayWdg.get_triangle_wdg() td.add(swap) td.add("[ %s reference(s)" % len(refs)) #td.add_style("text-align: right") sub_ref_wdg = SubRefWdg() sub_ref_wdg.set_info(snapshot, my.session, namespace) swap.add_action_script( sub_ref_wdg.get_on_script(), "toggle_display('%s')" % sub_ref_wdg.get_top_id()) status = sub_ref_wdg.get_overall_status() td.add(SpanWdg(VersionWdg.get(status), css='small_left')) td.add(']') td.add(sub_ref_wdg) td.add_style('padding-left: 10px') #else: if not snapshots: table.add_row() table.add_blank_cell() table.add_cell("(---)") return table