def handle_load_balancing(self, top): # deal with asset directories top.add(DivWdg('Load Balancing', css='spt_info_title')) table = Table() table.add_class("spt_loadbalance") table.add_color("color", "color") table.add_style("margin: 10px") top.add(table) table.add_row() td = table.add_cell("Load Balancing: ") td.add_style("width: 150px") button = ActionButtonWdg(title='Test') td = table.add_cell(button) message_div = DivWdg() message_div.add_class("spt_loadbalance_message") table.add_cell(message_div) button.add_behavior( { 'type': 'click_up', 'cbjs_action': ''' var server = TacticServerStub.get() var ports = {}; var count = 0; for (var i = 0; i < 50; i++) { var info = server.get_connection_info(); var port = info.port; var num = ports[port]; if (!num) { ports[port] = 1; count += 1; } else { ports[port] += 1; } // if there are 10 requests and still only one, then break if (i == 10 && count == 1) break; } // build the ports string x = []; for (i in ports) { x.push(i); } x.sort(); x = x.join(", "); var loadbalance_el = bvr.src_el.getParent(".spt_loadbalance"); var message_el = loadbalance_el.getElement(".spt_loadbalance_message"); if (count > 1) { var message = "Yes (found " + count + " ports: "+x+")"; } else { var message = "<blink style='background: red; padding: 3px'>Not enabled (found only port " + x + ")</blink>"; } message_el.innerHTML = message ''' } )
def get_container_with_top_row(my): # Getting [ Title| Machine Room | Blah | Blah table headings ] container = DivWdg() container.add_class('container') container.add_style('width: 1500px !important;') top_table_container = DivWdg() top_table_container.add_style('overflow-y: scroll !important;') top_table = Table() top_table.add_class('table table-bordered') top_table.add_style('table-layout: fixed;') top_table.add_row() title_cell = top_table.add_cell("Title") title_cell.add_class('col-md-1') second_cell = top_table.add_cell("Machine Room") second_cell.add_class('col-md-1') third_cell = top_table.add_cell("Compression") third_cell.add_class('col-md-1') fourth_cell = top_table.add_cell("Audio") fourth_cell.add_class('col-md-1') fifth_cell = top_table.add_cell("QC") fifth_cell.add_class('col-md-1') sixth_cell = top_table.add_cell("EDel") sixth_cell.add_class('col-md-1') top_table_container.add(top_table) container.add(top_table_container) return container
def get_display(my): container = my.get_container_with_top_row() overflow_container = DivWdg() overflow_container.add_style('height: 600px !important;') overflow_container.add_style('overflow-y: scroll !important;') top_table_lower = Table() top_table_lower.add_class('table table-bordered') top_table_lower.add_style('table-layout: fixed;') top_table_lower.add_row() for i in range(0, 10): my.add_lower_table_row(top_table_lower) overflow_container.add(top_table_lower) container.add(overflow_container) return container
def get_example_display(my): div = DivWdg() # Smart Menu data ... dog_menus = [ my.get_sm_dog_main_menu_details(), my.get_sm_dog_submenu_one_details(), my.get_sm_dog_submenu_two_details() ] cat_menus = [ my.get_sm_cat_main_menu_details() ] SmartMenu.attach_smart_context_menu( div, { 'DOG': dog_menus, 'CAT': cat_menus }, False ) table = Table(css="maq_view_table") table.set_id( "main_body_table" ) table.add_class("spt_table") table.add_behavior( { "type": "smart_drag", "bvr_match_class": "SPT_DO_RESIZE", "cbjs_setup": 'spt.dg_table.resize_column_setup( evt, bvr, mouse_411 );', "cbjs_motion": 'spt.dg_table.resize_column_motion( evt, bvr, mouse_411 );' } ) table.add_behavior( { "type": "smart_drag", "bvr_match_class": "SPT_DO_DRAG", "use_copy": 'true', "use_delta": 'true', 'dx': 10, 'dy': 10, "drop_code": 'TableExampleSwitchContents', "cbjs_action": "spt.ui_play.drag_cell_drop_action( evt, bvr );", "copy_styles": 'background: blue; opacity: .5; border: 1px solid black; text-align: left;' } ) row = table.add_row() for c in range(10): th = table.add_header() th.set_attr('col_idx', str(c)) th.add_class("cell_left") th.add_styles("width: 150px; cursor: default;") # @@@ th.add_behavior( { "type": "move", "cbjs_action": ''' // log.debug( "(x,y) = (" + mouse_411.curr_x + "," + mouse_411.curr_y + ")" ); spt.ui_play.header_half_move_cbk( evt, bvr, mouse_411 ); ''', "cbjs_action_on": ''' // log.debug( "START MY MOVE!" ); ''', "cbjs_action_off": ''' // log.debug( "DONE MY MOVE!" ); spt.ui_play.header_half_move_off_cbk( evt, bvr, mouse_411 ); ''' } ) if (c%2): th.add("H%s (Cat)" % c) else: th.add("H%s (Dog)" % c) th_resize = table.add_cell() th_resize.set_attr('col_idx', str(c+1)) th_resize.add_class("SPT_DO_RESIZE cell_right") th_resize.add_styles("width: 4px; cursor: col-resize;") for r in range(19): row = table.add_row() for c in range(10): col = table.add_cell() col.set_attr('col_idx', str(c)) col.set_attr('SPT_ACCEPT_DROP', 'TableExampleSwitchContents') col.add_class("SPT_DO_DRAG cell_left") col.add_styles("cursor: pointer;") col.add("(%s,%s)" % (r,c)) if (c % 2) == 0: SmartMenu.assign_as_local_activator( col, "DOG" ) else: SmartMenu.assign_as_local_activator( col, "CAT" ) resize = table.add_cell() resize.set_attr('col_idx', str(c+1)) resize.add_class("SPT_DO_RESIZE cell_right") resize.add_styles("width: 6px; cursor: col-resize;") div.add( table ) return div
def get_display(self): self.is_refresh = self.kwargs.get('is_refresh') =='true' if not self.is_refresh: top = DivWdg(css='spt_view_panel') self.set_as_panel(top) else: top = Widget() div = DivWdg(css="filter_box") div.add("<b>Current Session</b>") top.add(div) # the button which initiates the introspection button = IntrospectWdg() #button.add_style("float", "right") top.add(button) top.add("<br clear='all'/>") session = SessionContents.get() if not session: widget.add("<h3>No contents in session</h3>") return widget table = Table() table.add_class("table") table.add_style("width: 100%") table.add_row() table.add_header(" ") table.add_header("Type") table.add_header("Asset") table.add_header("Node Name") table.add_header("Node Type") table.add_header("Reference") table.add_header("Session") table.add_header("Latest") node_names = session.get_node_names() for node_name in node_names: table.add_row() # snapshot_code snapshot_code = session.get_snapshot_code(node_name, "shot") if not snapshot_code: snapshot_code = session.get_snapshot_code(node_name, "anim") if not snapshot_code: snapshot_code = session.get_snapshot_code(node_name, "asset") snapshot = Snapshot.get_by_code(snapshot_code) sobject = None if snapshot: sobject = snapshot.get_sobject() base = sobject.get_search_type_obj().get_base_search_type() thumb = ThumbWdg() thumb.set_icon_size(60) # FIXME: make this more automatic if base == "prod/shot_instance": thumb_sobj = sobject.get_parent("prod/asset") thumb.set_sobject(thumb_sobj) else: thumb.set_sobject(sobject) table.add_cell(thumb) title = sobject.get_search_type_obj().get_title() table.add_cell( title ) # TODO: this should be more automatic! if base == "prod/shot_instance": asset_code = sobject.get_value("asset_code") shot_code = sobject.get_value("shot_code") name = sobject.get_value("name") table.add_cell("%s: %s in %s" % (name,asset_code,shot_code)) else: code = sobject.get_code() name = sobject.get_name() if code == name: table.add_cell( "%s" % (code) ) else: table.add_cell( "%s - %s" % (code, name) ) else: table.add_cell("<i>No snapshot</i>") table.add_cell("---") table.add_cell("---") # display the node name table.add_cell(node_name) # display node type table.add_cell( session.get_node_type(node_name) ) # display if it is a reference is_reference = session.is_reference(node_name) if is_reference: table.add_cell( "Yes" ) else: table.add_cell( "No" ) if snapshot: # add the snapshot info context = snapshot.get_value("context") version = snapshot.get_value("version") table.add_cell( "%s v%0.2d" % (context, version)) else: table.add_cell("---") table.add_cell( self.get_version_wdg(session,snapshot,node_name) ) top.add(table) return top
def get_display(self): top = self.top top.add_class("hand") inner = self.inner top.add(inner) inner.add_class("spt_swap_top") table = Table() inner.add(table) table.add_color("color", "color") table.add_class("SPT_DTS") table.add_row() td = table.add_cell() title = self.kwargs.get("title") # determine whether this widget is on or off is_on = self.kwargs.get("is_on") if is_on in [True, "true"]: is_on = True else: is_on = False if not self.on_wdg or not self.off_wdg: self.set_default_wdg() # add the content id if self.content_id: inner.add_attr("spt_content_id", self.content_id) # add the behaviors if not self.behavior_top: self.handle_top(top) on_div = DivWdg() td.add(on_div) on_div.add_class("SPT_SWAP_ON") off_div = DivWdg() td.add(off_div) off_div.add_class("SPT_SWAP_OFF") if is_on: off_div.add_style("display: none") inner.add_attr("spt_state", "on") else: on_div.add_style("display: none") inner.add_attr("spt_state", "off") on_div.add( self.on_wdg ) off_div.add( self.off_wdg ) # handle an icon icon_str = self.kwargs.get("icon") if icon_str and isinstance(icon_str, basestring): icon_div = DivWdg() if icon_str.startswith("BS_"): icon = IconWdg(name=title, icon=icon_str, size=12 ) icon_div.add_style("margin: -2px 10px 0px 10px") icon_div.add_style("margin-left: -3px") else: icon = IconWdg(name=title, icon=icon_str ) icon_div.add_style("margin-left: -6px") icon_div.add(icon) td = table.add_cell(icon_div) elif icon_str: td = table.add_cell(icon_str) icon_str.add_style("margin-left: -6px") else: show_border = self.kwargs.get("show_border") if show_border in [True, 'true']: on_div.add_border() off_div.add_border() on_div.add_style("width: 16") on_div.add_style("height: 16") on_div.add_style("overflow: hidden") off_div.add_style("width: 16") off_div.add_style("height: 16") off_div.add_style("overflow: hidden") if self.title_wdg: td = table.add_cell(self.title_wdg) else: td = table.add_cell(title) return top
def get_versions_wdg(self): div = DivWdg() div.add_class("spt_imports") title_wdg = DivWdg() div.add(title_wdg) title_wdg.add("Imports found:") title_wdg.add_style("padding: 0px 0px 8px 0px") base_dir = self.kwargs.get("base_dir") imports_dir = "%s/imports" % base_dir if not os.path.exists(imports_dir): imports_dir = base_dir basenames = os.listdir(imports_dir) basenames.sort() basenames.reverse() div.add_relay_behavior( { 'type': 'mouseup', 'bvr_match_class': "spt_import_item", 'cbjs_action': ''' var top = bvr.src_el.getParent(".spt_imports"); var els = top.getElements(".spt_import_info"); for ( var i = 0; i < els.length; i++) { spt.hide(els[i]); } var el = bvr.src_el.getElement(".spt_import_info"); spt.show(el); ''' } ) # find all the zip files count = 0 for basename in basenames: if not basename.endswith(".txt"): continue if basename.find("-files-") != -1: continue if basename.find("-data-") != -1: continue version_wdg = DivWdg() div.add(version_wdg) version_wdg.add_style("padding: 3px 3px 3px 12px") version_wdg.add_class("spt_import_item") radio = RadioWdg("basename") version_wdg.add(radio) radio.set_option("value", basename) if not count: radio.set_checked() version_wdg.add(basename) version_wdg.add("<br/>") # add info path = "%s/%s" % (imports_dir, basename) f = open(path) data = f.read() f.close() data = jsonloads(data) table = Table() version_wdg.add(table) table.add_class("spt_import_info") if count: table.add_style("display: none") table.set_max_width() table.add_style("margin-left: 40px") table.add_style("margin-right: 20px") version_wdg.add(table) for name, value in self.data.items(): name = Common.get_display_title(name) table.add_row() table.add_cell(name) table.add_cell(value) count += 1 if count == 0: msg_wdg = DivWdg() div.add(msg_wdg) msg_wdg.add("<i>No imports found</i>") msg_wdg.add_border() msg_wdg.add_style("padding: 20px") msg_wdg.add_style("padding: 10px") msg_wdg.add_style("text-align: center") msg_wdg.add_color("background", "background", -10) return div
def handle_load_balancing(my, top): # deal with asset directories top.add(DivWdg('Load Balancing', css='spt_info_title')) table = Table() table.add_class("spt_loadbalance") table.add_color("color", "color") table.add_style("margin: 10px") top.add(table) table.add_row() td = table.add_cell("Load Balancing: ") td.add_style("width: 150px") button = ActionButtonWdg(title='Test') td = table.add_cell(button) message_div = DivWdg() message_div.add_class("spt_loadbalance_message") table.add_cell(message_div) button.add_behavior({ 'type': 'click_up', 'cbjs_action': ''' var server = TacticServerStub.get() var ports = {}; var count = 0; for (var i = 0; i < 50; i++) { var info = server.get_connection_info(); var port = info.port; var num = ports[port]; if (!num) { ports[port] = 1; count += 1; } else { ports[port] += 1; } // if there are 10 requests and still only one, then break if (i == 10 && count == 1) break; } // build the ports string x = []; for (i in ports) { x.push(i); } x.sort(); x = x.join(", "); var loadbalance_el = bvr.src_el.getParent(".spt_loadbalance"); var message_el = loadbalance_el.getElement(".spt_loadbalance_message"); if (count > 1) { var message = "Yes (found " + count + " ports: "+x+")"; } else { var message = "<blink style='background: red; padding: 3px'>Not enabled (found only port " + x + ")</blink>"; } message_el.innerHTML = message ''' })
def get_display(my): element_data_dict = {} config = my.get_config() element_names = config.get_element_names() content_wdg = DivWdg() if not element_names: element_names = ['keywords'] my.set_content(content_wdg) # this is somewhat duplicated logic from alter_search, but since this is called # in ViewPanelWdg, it's a diff instance and needs to retrieve again filter_data = FilterData.get() data_list = filter_data.get_values_by_prefix(my.prefix) for data in data_list: handler = data.get("handler") element_name = data.get("element_name") if not element_name: continue element_data_dict[element_name] = data elements_wdg = DivWdg() content_wdg.add(elements_wdg) elements_wdg.add_color("color", "color") elements_wdg.add_style("padding-top: 10px") elements_wdg.add_style("padding-bottom: 15px") #elements_wdg.add_color("background", "background3", 0) elements_wdg.add_color("background", "background", -3) elements_wdg.add_border() if len(element_names) == 1: elements_wdg.add_style("border-width: 0px 0px 0px 0px" ) elements_wdg.add_style("padding-right: 50px" ) else: elements_wdg.add_style("border-width: 0px 0px 0px 0px" ) table = Table() table.add_color("color", "color") elements_wdg.add(table) table.add_class("spt_simple_search_table") columns = my.kwargs.get("columns") if not columns: columns = 2 else: columns = int(columns) num_rows = int(len(element_names)/columns)+1 tot_rows = int(len(element_names)/columns)+1 project_code = Project.get_project_code() # my.search_type could be the same as my.base_search_type full_search_type = SearchType.build_search_type(my.search_type, project_code) visible_rows = my.kwargs.get("visible_rows") if visible_rows: visible_rows = int(visible_rows) num_rows = visible_rows else: visible_rows = 0 titles = config.get_element_titles() row_count = 0 for i, element_name in enumerate(element_names): attrs = config.get_element_attributes(element_name) if i % columns == 0: if visible_rows and row_count == visible_rows: tr, td = table.add_row_cell("+ more ...") td.add_class("hand") td.add_class("SPT_DTS") td.add_class("spt_toggle") td.add_style("padding-left: 10px") td.add_behavior( { 'type': 'click_up', 'visible_rows': visible_rows, 'cbjs_action': ''' var top = bvr.src_el.getParent(".spt_simple_search_table"); var expand = true; var rows = top.getElements(".spt_simple_search_row"); for (var i = 0; i < rows.length; i++) { var row = rows[i]; if (row.getStyle("display") == "none") { row.setStyle("display", ""); } else { row.setStyle("display", "none"); expand = false; } } var spacer = top.getElements(".spt_spacer"); var cell = top.getElement(".spt_toggle"); if (expand) { spacer.setStyle("height", (rows.length+bvr.visible_rows)*20); cell.innerHTML = "- less ..."; } else { spacer.setStyle("height", bvr.visible_rows*20); cell.innerHTML = "+ more ..."; } ''' } ) tr = table.add_row() if visible_rows and row_count >= visible_rows: tr.add_class("spt_simple_search_row") tr.add_style("display: none") tr.add_style("height: 0px") row_count += 1 icon_td = table.add_cell() title_td = table.add_cell() element_td =table.add_cell() # show the title title_td.add_style("text-align: right") title_td.add_style("padding-right: 5px") title_td.add_style("min-width: 100px") element_wdg = DivWdg() if attrs.get('view') == 'false': element_wdg.add_style('display: none') element_td.add(element_wdg) #title_td.add_style("border: solid 1px red") #element_td.add_style("border: solid 1px blue") #element_wdg.add_style("border: solid 1px yellow") if i >= 0 and i < columns -1 and len(element_names) > 1: spacer = DivWdg() spacer.add_class("spt_spacer") spacer.add_style("border-style: solid") spacer.add_style("border-width: 0 0 0 0") #spacer.add_style("height: %spx" % (num_rows*20)) spacer.add_style("height: %spx" % (num_rows*20)) spacer.add_style("width: 10px") spacer.add_style("border-color: %s" % spacer.get_color("border") ) spacer.add(" ") td = table.add_cell(spacer) td.add_attr("rowspan", tot_rows) #element_wdg.add_color("color", "color3") #element_wdg.add_color("background", "background3") #element_wdg.set_round_corners() #element_wdg.add_border() element_wdg.add_style("padding: 4px 10px 4px 5px") element_wdg.add_class("spt_table_search") element_wdg.add_style("margin: 1px") element_wdg.add_style("min-height: 20px") element_wdg.add_style("min-width: 250px") # this is done at get_top() #element_wdg.add_class("spt_search") element_wdg.add( HiddenWdg("prefix", my.prefix)) display_handler = config.get_display_handler(element_name) element_wdg.add( HiddenWdg("handler", display_handler)) element_wdg.add( HiddenWdg("element_name", element_name)) from pyasm.widget import ExceptionWdg try: widget = config.get_display_widget(element_name) if widget: widget.set_title(titles[i]) except Exception, e: element_wdg.add(ExceptionWdg(e)) continue if not widget: # the default for KeywordFilterElementWdg is mode=keyword if not my.column_choice: my.column_choice = my.get_search_col(my.search_type) widget = KeywordFilterElementWdg(column=my.column_choice) widget.set_name(element_name) from pyasm.widget import IconWdg icon_div = DivWdg() icon_td.add(icon_div) icon_div.add_style("width: 20px") icon_div.add_style("margin-top: 2px") icon_div.add_style("padding-left: 5px") icon_div.add_class("spt_filter_top") widget.set_show_title(False) #element_wdg.add("%s: " % title) data = element_data_dict.get(element_name) view_panel_keywords = my.kwargs.get("keywords") #user data takes precedence over view_panel_keywords if isinstance(widget, KeywordFilterElementWdg): if view_panel_keywords: widget.set_value("value", view_panel_keywords) if data: widget.set_values(data) if isinstance(widget, KeywordFilterElementWdg) and not full_search_type.startswith('sthpw/sobject_list'): widget.set_option('filter_search_type', full_search_type) try: if attrs.get('view') != 'false': title_td.add(widget.get_title_wdg()) element_wdg.add(widget.get_buffer_display()) except Exception, e: element_wdg.add(ExceptionWdg(e)) continue
def get_display(self): element_data_dict = {} config = self.get_config() element_names = config.get_element_names() content_wdg = DivWdg() content_wdg.add_class("spt_simple_search_top") onload_js = DivWdg() content_wdg.add(onload_js) onload_js.add_behavior( { 'type': 'load', 'cbjs_action': self.get_onload_js() } ) if not element_names: element_names = ['keywords'] self.set_content(content_wdg) # this is somewhat duplicated logic from alter_search, but since this is called # in ViewPanelWdg, it's a diff instance and needs to retrieve again filter_data = FilterData.get() filter_view = self.kwargs.get("filter_view") if filter_view: search = Search("config/widget_config") search.add_filter("view", filter_view) search.add_filter("category", "search_filter") search.add_filter("search_type", self.search_type) filter_config = search.get_sobject() if filter_config: filter_xml = filter_config.get_xml_value("config") filter_value = filter_xml.get_value("config/filter/values") if filter_value: data_list = jsonloads(filter_value) else: data_list = filter_data.get_values_by_prefix(self.prefix) for data in data_list: handler = data.get("handler") element_name = data.get("element_name") if not element_name: continue element_data_dict[element_name] = data elements_wdg = DivWdg() content_wdg.add(elements_wdg) elements_wdg.add_color("color", "color") elements_wdg.add_style("padding-top: 10px") elements_wdg.add_style("padding-bottom: 15px") #elements_wdg.add_color("background", "background3", 0) elements_wdg.add_color("background", "background", -3) elements_wdg.add_border() if len(element_names) == 1: elements_wdg.add_style("border-width: 0px 0px 0px 0px" ) elements_wdg.add_style("padding-right: 50px" ) else: elements_wdg.add_style("border-width: 0px 0px 0px 0px" ) table = Table() table.add_color("color", "color") elements_wdg.add(table) table.add_class("spt_simple_search_table") columns = self.kwargs.get("columns") if not columns: columns = 2 else: columns = int(columns) num_rows = int(len(element_names)/columns)+1 tot_rows = int(len(element_names)/columns)+1 project_code = Project.get_project_code() # self.search_type could be the same as self.base_search_type full_search_type = SearchType.build_search_type(self.search_type, project_code) visible_rows = self.kwargs.get("visible_rows") if visible_rows: visible_rows = int(visible_rows) num_rows = visible_rows else: visible_rows = 0 titles = config.get_element_titles() row_count = 0 for i, element_name in enumerate(element_names): attrs = config.get_element_attributes(element_name) if i % columns == 0: if visible_rows and row_count == visible_rows: tr, td = table.add_row_cell("+ more ...") td.add_class("hand") td.add_class("SPT_DTS") td.add_class("spt_toggle") td.add_style("padding-left: 10px") td.add_behavior( { 'type': 'click_up', 'visible_rows': visible_rows, 'cbjs_action': ''' var top = bvr.src_el.getParent(".spt_simple_search_table"); var expand = true; var rows = top.getElements(".spt_simple_search_row"); for (var i = 0; i < rows.length; i++) { var row = rows[i]; if (row.getStyle("display") == "none") { row.setStyle("display", ""); } else { row.setStyle("display", "none"); expand = false; } } var spacer = top.getElements(".spt_spacer"); var cell = top.getElement(".spt_toggle"); if (expand) { spacer.setStyle("height", (rows.length+bvr.visible_rows)*20); cell.innerHTML = "- less ..."; } else { spacer.setStyle("height", bvr.visible_rows*20); cell.innerHTML = "+ more ..."; } ''' } ) tr = table.add_row() if visible_rows and row_count >= visible_rows: tr.add_class("spt_simple_search_row") tr.add_style("display: none") tr.add_style("height: 0px") row_count += 1 icon_td = table.add_cell() title_td = table.add_cell() element_td = table.add_cell() # need to add these to all the elements because it is all separated # by table tds icon_td.add_class("spt_element_item") icon_td.add_attr("spt_element_name", element_name) title_td.add_class("spt_element_item") title_td.add_attr("spt_element_name", element_name) element_td.add_class("spt_element_item") element_td.add_attr("spt_element_name", element_name) # show the title title_td.add_style("text-align: left") title_td.add_style("padding-right: 5px") title_td.add_style("min-width: 60px") element_wdg = DivWdg() if attrs.get('view') == 'false': element_wdg.add_style('display: none') element_td.add(element_wdg) if i >= 0 and i < columns -1 and len(element_names) > 1: spacer = DivWdg() spacer.add_class("spt_spacer") spacer.add_style("border-style: solid") spacer.add_style("border-width: 0 0 0 0") #spacer.add_style("height: %spx" % (num_rows*20)) spacer.add_style("height: %spx" % (num_rows*10)) spacer.add_style("width: 10px") spacer.add_style("border-color: %s" % spacer.get_color("border") ) spacer.add(" ") td = table.add_cell(spacer) td.add_attr("rowspan", tot_rows) element_wdg.add_style("padding: 4px 10px 4px 5px") element_wdg.add_class("spt_table_search") element_wdg.add_style("margin: 1px") element_wdg.add_style("min-height: 20px") element_wdg.add_style("min-width: 250px") # this is done at get_top() #element_wdg.add_class("spt_search") element_wdg.add( HiddenWdg("prefix", self.prefix)) display_handler = config.get_display_handler(element_name) element_wdg.add( HiddenWdg("handler", display_handler)) element_wdg.add( HiddenWdg("element_name", element_name)) from pyasm.widget import ExceptionWdg try: widget = config.get_display_widget(element_name) if widget: widget.set_title(titles[i]) except Exception as e: element_wdg.add(ExceptionWdg(e)) continue if not widget: # the default for KeywordFilterElementWdg is mode=keyword if not self.column_choice: self.column_choice = self.get_search_col(self.search_type) widget = KeywordFilterElementWdg(column=self.column_choice) widget.set_name(element_name) from pyasm.widget import IconWdg icon_div = DivWdg() icon_td.add(icon_div) icon_div.add_style("width: 20px") icon_div.add_style("margin-top: -2px") icon_div.add_style("padding-left: 6px") icon_div.add_class("spt_filter_top") widget.set_show_title(False) #element_wdg.add("%s: " % title) data = element_data_dict.get(element_name) view_panel_keywords = self.kwargs.get("keywords") #user data takes precedence over view_panel_keywords if isinstance(widget, KeywordFilterElementWdg): if view_panel_keywords: widget.set_value("value", view_panel_keywords) if data: widget.set_values(data) if isinstance(widget, KeywordFilterElementWdg) and not full_search_type.startswith('sthpw/sobject_list'): widget.set_option('filter_search_type', full_search_type) try: if attrs.get('view') != 'false': title_td.add(widget.get_title_wdg()) element_wdg.add(widget.get_buffer_display()) except Exception as e: element_wdg.add(ExceptionWdg(e)) continue icon = IconWdg("Filter Set", "BS_ASTERISK") #icon.add_style("color", "#393") icon_div.add(icon) icon.add_class("spt_filter_set") icon.add_class("hand") icon.add_attr("spt_element_name", element_name) icon.add_behavior( { 'type': 'click', 'cbjs_action': ''' var element_name = bvr.src_el.getAttribute("spt_element_name"); spt.simple_search.clear_element(element_name); ''' } ) if not widget.is_set(): icon.add_style("display: none") else: color = icon_div.get_color("background", -10) icon_td.add_style("background-color", color) title_td.add_style("background-color", color) element_td.add_style("background-color", color) #elements_wdg.add("<br clear='all'/>") top = self.get_top() return top
def get_display(my): top = DivWdg() top.add_border() top.add_style("padding: 10px") top.add_color("color", "color") top.add_gradient("background", "background", 0, -5) #top.add_style("height: 550px") top.add_behavior({ 'type': 'load', 'cbjs_action': ''' spt.named_events.fire_event("side_bar|hide_now", {} ); ''' }) project = Project.get() title = DivWdg() title.add("Project Startup and Configuration") title.add_style("font-size: 18px") title.add_style("font-weight: bold") title.add_style("text-align: center") title.add_style("padding: 10px") title.add_style("margin: -10px -10px 10px -10px") top.add(title) title.add_gradient("background", "background3", 5, -10) shelf = DivWdg() top.add(shelf) shelf.add_style("margin-left: -8px") shelf.add_style("width: 130px") button_div = DivWdg() shelf.add(button_div) button_div.add_style("float: left") button_div.add_style("margin-top: -3px") security = Environment.get_security() view_side_bar = security.check_access("builtin", "view_side_bar", "allow", default='allow') if view_side_bar: button = IconButtonWdg(title="Side Bar", icon=IconWdg.ARROW_LEFT) button_div.add(button) shelf.add("Toggle Side Bar") shelf.add_attr("title", "Toggle Side Bar (or press '1')") button.add_behavior({ 'type': 'click_up', 'cbjs_action': ''' spt.named_events.fire_event("side_bar|toggle"); ''' }) shelf.add_behavior({ 'type': 'click_up', 'cbjs_action': ''' spt.named_events.fire_event("side_bar|toggle"); ''' }) shelf.add_class("hand") else: shelf.add(" ") search_wdg = Table() top.add(search_wdg) search_wdg.add_row() search_wdg.add_class("spt_main_top") search_wdg.add_style("padding: 10px") search_wdg.add_style("margin: 20px auto") search_wdg.add_style("width: 430px") td = search_wdg.add_cell("Search: ") td.add_style("vertical-align: top") td.add_style("padding-top: 8px") custom_cbk = {} custom_cbk['enter'] = ''' var top = bvr.src_el.getParent(".spt_main_top"); var search_el = top.getElement(".spt_main_search"); var keywords = search_el.value; if (keywords != '') { var class_name = 'tactic.ui.panel.ViewPanelWdg'; var kwargs = { 'search_type': 'sthpw/sobject_list', 'view': 'result_list', 'keywords': keywords, 'simple_search_view': 'simple_filter', //'show_shelf': false, } spt.tab.set_main_body_tab(); spt.tab.add_new("Search Results", "Search Results", class_name, kwargs); } ''' from tactic.ui.input import TextInputWdg, LookAheadTextInputWdg #text = TextInputWdg(name="search") text = LookAheadTextInputWdg(name="search", custom_cbk=custom_cbk, width='280', height='42px') #text = TextWdg("search") text.add_class("spt_main_search") text.add_style("width: 290px") search_wdg.add_cell(text) search_wdg.add_style("font-weight: bold") search_wdg.add_style("font-size: 16px") icon_div = DivWdg() td = search_wdg.add_cell(icon_div) td.add_style("vertical-align: top") icon_div.add_style("width: 38px") icon_div.add_style("height: 27px") icon_div.add_style("padding-top: 7px") icon_div.add_style("padding-left: 4px") icon_div.add_style("text-align: center") #icon_div.add_gradient("background", "background3", 15, -10) icon_div.add_color("background", "background3", 10) over_color = icon_div.get_color("background3", 0) out_color = icon_div.get_color("background3", 10) icon_div.set_round_corners(5) icon_div.set_box_shadow("1px 1px 1px 1px") icon = IconWdg("Search", IconWdg.SEARCH_32, width=24) icon_div.add(icon) button = icon_div icon_div.add_class("hand") icon_div.add_behavior({ 'type': 'mouseover', 'color': over_color, 'cbjs_action': ''' bvr.src_el.setStyle("background", bvr.color); ''' }) icon_div.add_behavior({ 'type': 'mouseout', 'color': out_color, 'cbjs_action': ''' bvr.src_el.setStyle("background", bvr.color); bvr.src_el.setStyle("box-shadow", "1px 1px 1px 1px #999"); bvr.src_el.setStyle("margin-top", "-5"); bvr.src_el.setStyle("margin-right", "0"); ''' }) icon_div.add_behavior({ 'type': 'click', 'color': out_color, 'cbjs_action': ''' bvr.src_el.setStyle("box-shadow", "0px 0px 1px 1px #999"); bvr.src_el.setStyle("margin-top", "-3"); bvr.src_el.setStyle("margin-right", "-2"); ''' }) icon_div.add_behavior({ 'type': 'click_up', 'color': out_color, 'cbjs_action': ''' bvr.src_el.setStyle("box-shadow", "1px 1px 1px 1px #999"); bvr.src_el.setStyle("margin-top", "-5"); bvr.src_el.setStyle("margin-right", "0"); ''' }) button.add_behavior({ 'type': 'click_up', 'cbjs_action': ''' var top = bvr.src_el.getParent(".spt_main_top"); var search_el = top.getElement(".spt_main_search"); var keywords = search_el.value; if (keywords == '') { return; } var class_name = 'tactic.ui.panel.ViewPanelWdg'; var kwargs = { 'search_type': 'sthpw/sobject_list', 'view': 'result_list', 'keywords': keywords, 'simple_search_view': 'simple_filter', //'show_shelf': false, } spt.tab.set_main_body_tab(); spt.tab.add_new("Search Results", "Search Results", class_name, kwargs); ''' }) #desc = DivWdg() #top.add(desc) #desc.add("Dashboard") #desc.add_style("width: 600px") # create a bunch of panels table = Table() table.add_color("color", "color") table.add_style("margin-bottom: 20px") table.center() top.add(table) table.add_row() #security = Environment.get_security() #if not security.check_access("builtin", "view_site_admin", "allow"): td = table.add_cell() td.add_style("padding: 3px") td.add_style("vertical-align: top") title = "Configuration" #description = '''All TACTIC projects can be uniquely designed and managed using our configuration tools.''' description = '''Configure a Project from start to finish.''' image = "<img src='/context/icons/64x64/configuration_64.png'/>" behavior = { 'type': 'click_up', 'cbjs_action': ''' spt.tab.set_main_body_tab(); var class_name = 'tactic.ui.startup.ProjectConfigWdg'; var kwargs = { help_alias: 'project-startup-configuration' }; spt.tab.add_new("project_configuration", "Configuration", class_name, kwargs); ''' } config_wdg = my.get_main_section_wdg(title, description, image, behavior) td.add(config_wdg) # Manage Users td = table.add_cell() td.add_style("vertical-align: top") td.add_style("padding: 3px") title = "Manage Users and Security" image = "<img src='/context/icons/64x64/dashboard_64.png'/>" image = DivWdg() image_link = "<div style='margin-bottom: -64px'><img src='/context/icons/64x64/lock_64.png'/></div>" image.add(image_link) image1 = IconWdg("Manage Users", IconWdg.USER_32) image2 = IconWdg("Manage Users", IconWdg.USER_32) image3 = IconWdg("Manage Users", IconWdg.USER_32) image4 = IconWdg("Manage Users", IconWdg.USER_32) image.add(image1) image.add(image2) image.add("<br/>") image.add(image3) image.add(image4) description = '''Manage users that can access the system''' behavior = { 'type': 'click_up', 'cbjs_action': ''' spt.tab.set_main_body_tab(); var class_name = 'tactic.ui.startup.UserConfigWdg'; var kwargs = { help_alias: 'project-startup-manage-users' }; spt.tab.add_new("manage_user", "Manage Users", class_name, kwargs); ''' } manage_users_wdg = my.get_main_section_wdg(title, description, image, behavior) td.add(manage_users_wdg) # custom layout editor td = table.add_cell() td.add_style("padding: 3px") td.add_style("vertical-align: top") title = "Custom Layouts" description = '''Create interfaces using the Custom Layout Editor.''' image = "<img src='/context/icons/64x64/layout_64.png'/>" behavior = { 'type': 'click_up', 'cbjs_action': ''' spt.tab.set_main_body_tab(); var class_name = 'tactic.ui.tools.CustomLayoutEditWdg'; var kwargs = { help_alias: 'project-startup-configuration' }; spt.tab.add_new("custom_layout_editor", "Custom Layout Editor", class_name, kwargs); ''' } config_wdg = my.get_main_section_wdg(title, description, image, behavior) td.add(config_wdg) tr = table.add_row() # Plugins td = table.add_cell() td.add_style("vertical-align: top") td.add_style("padding: 3px") title = "Plugin Manager" image = IconWdg("Plugins Manager", IconWdg.PLUGIN_32) #image = "<img src='/context/icons/64x64/dashboard_64.png'/>" description = '''Upload, install, remove and create TACTIC plugins.''' behavior = { 'type': 'click_up', 'cbjs_action': ''' var class_name = 'tactic.ui.app.PluginWdg'; spt.tab.set_main_body_tab(); spt.tab.add_new("plugins", "Plugin Manager", class_name, kwargs); ''' } plugin_wdg = my.get_small_section_wdg(title, description, image, behavior) td.add(plugin_wdg) # Examples td = table.add_cell() td.add_style("vertical-align: top") td.add_style("padding: 3px") title = "Tools" image = IconWdg("Tools", IconWdg.SHARE_32) #image = "<img src='/context/icons/64x64/dashboard_64.png'/>" description = '''A collection of example views.''' behavior = { 'type': 'click_up', 'cbjs_action': ''' var class_name = 'tactic.ui.startup.ToolsWdg'; spt.tab.set_main_body_tab(); spt.tab.add_new("tools", "Tools", class_name, kwargs); ''' } share_wdg = my.get_small_section_wdg(title, description, image, behavior) td.add(share_wdg) # Share """ td = table.add_cell() td.add_style("vertical-align: top") td.add_style("padding: 3px") title = "Shares" image = IconWdg("Shares", IconWdg.SHARE_32) #image = "<img src='/context/icons/64x64/dashboard_64.png'/>" description = '''Share project with other TACTIC installs.''' behavior = { 'type': 'click_up', 'cbjs_action': ''' var class_name = 'tactic.ui.startup.ShareWdg'; spt.tab.set_main_body_tab(); spt.tab.add_new("shares", "Shares", class_name, kwargs); ''' } share_wdg = my.get_small_section_wdg(title, description, image, behavior) td.add(share_wdg) """ # Advanced td = table.add_cell() td.add_style("vertical-align: top") td.add_style("padding: 3px") title = "Advanced Setup" image = IconWdg("Advanced", IconWdg.ADVANCED_32) #image = "<img src='/context/icons/64x64/dashboard_64.png'/>" description = '''A set of advanced configuration tools.''' behavior = { 'type': 'click_up', 'cbjs_action': ''' var class_name = 'tactic.ui.app.ProjectStartWdg'; spt.tab.set_main_body_tab() spt.tab.add_new("project_setup", "Project Setup", class_name) ''' } share_wdg = my.get_small_section_wdg(title, description, image, behavior) td.add(share_wdg) """ td = table.add_cell() td.add_style("vertical-align: top") td.add_style("padding: 3px") title = "Documentation" description = '''TACTIC Documentation. * Project Setup Documentation<br/> <br/> * End User Documentation<br/> <br/> * Developer Documentation<br/> <br/> * System Administrator Documentation<br/> <br/> ''' image = "<img src='/context/images/getting_started_pipeline.png'/>" behavior = { 'type': 'click_up', 'cbjs_action': ''' spt.help.load_alias("main") ''' } doc_wdg = my.get_section_wdg(title, description, image, behavior) td.add(doc_wdg) """ tr, td = table.add_row_cell() td.add_style("font-size: 14px") td.add("<br/>") from misc_wdg import QuickLinksWdg quick_links_wdg = QuickLinksWdg() td.add(quick_links_wdg) #td = table.add_cell() #totals_wdg = my.get_totals_wdg() #td.add(totals_wdg) return top
def get_display(my): top = my.top top.add_class("hand") inner = my.inner top.add(inner) inner.add_class("spt_swap_top") table = Table() inner.add(table) table.add_color("color", "color") table.add_class("SPT_DTS") table.add_row() td = table.add_cell() title = my.kwargs.get("title") # determine whether this widget is on or off is_on = my.kwargs.get("is_on") if is_on in [True, "true"]: is_on = True else: is_on = False if not my.on_wdg or not my.off_wdg: my.set_default_wdg() # add the content id if my.content_id: inner.add_attr("spt_content_id", my.content_id) # add the behaviors if not my.behavior_top: my.handle_top(top) on_div = DivWdg() td.add(on_div) on_div.add_class("SPT_SWAP_ON") off_div = DivWdg() td.add(off_div) off_div.add_class("SPT_SWAP_OFF") if is_on: off_div.add_style("display: none") inner.add_attr("spt_state", "on") else: on_div.add_style("display: none") inner.add_attr("spt_state", "off") on_div.add(my.on_wdg) off_div.add(my.off_wdg) # handle an icon icon_str = my.kwargs.get("icon") if icon_str and isinstance(icon_str, basestring): icon_div = DivWdg() icon = IconWdg(title, eval("IconWdg.%s" % icon_str)) icon_div.add(icon) td = table.add_cell(icon_div) icon_div.add_style("margin-left: -6px") elif icon_str: td = table.add_cell(icon_str) icon_str.add_style("margin-left: -6px") else: show_border = my.kwargs.get("show_border") if show_border in [True, 'true']: on_div.add_border() off_div.add_border() on_div.add_style("width: 16") on_div.add_style("height: 16") on_div.add_style("overflow: hidden") off_div.add_style("width: 16") off_div.add_style("height: 16") off_div.add_style("overflow: hidden") if my.title_wdg: td = table.add_cell(my.title_wdg) else: td = table.add_cell(title) return top
def get_display(my): # specially made for "load" view if not my.view.endswith("load"): return DivWdg() widget = Widget() # first use filter_top = DivWdg(css="maq_search_bar") filter_top.add_color("background", "background2", -15) # so dg_table.search_cbk will obtain values from this widget filter_top.add_class('spt_table_search') filter_top.add_style("padding: 3px") # this is used by get_process() in LoaderWdg filter_top.add(HiddenWdg('prefix', 'view_action_option')) for name, value in my.kwargs.items(): filter_top.set_attr("spt_%s" % name, value) from tactic.ui.cgapp import SObjectLoadWdg, LoaderButtonWdg, LoaderElementWdg, IntrospectWdg # this contains the process filter and load options sobject_load = SObjectLoadWdg(search_type=my.search_type, load_options_class = my.load_options_class) filter_top.add(sobject_load) # set the process #class foo: # def get_value(my): # return "texture" #Container.put("process_filter", foo()) filter_top.add( HtmlElement.br() ) table = Table() table.add_class('spt_action_wdg') table.set_max_width() td = table.add_cell() # create the loader button button = LoaderButtonWdg() # ------------- # test an event mechanism event_name = '%s|load_snapshot' % my.search_type #event_name = 'load_snapshot' # get triggers with this event from pyasm.search import Search search = Search("config/client_trigger") search.add_filter("event", event_name) triggers = search.get_sobjects() if triggers: for trigger in triggers: #callback = trigger.get_value("custom_script_code") callback = trigger.get_value("callback") event_script = ''' spt.app_busy.show("Loading ...", "Loading selected [%s] in to session"); var script = spt.CustomProject.get_script_by_path("%s"); bvr['script'] = script; spt.CustomProject.exec_custom_script(evt, bvr); spt.app_busy.hide(); ''' % (my.search_type, callback) loader_script = '''spt.named_events.fire_event('%s', {})''' % event_name table.add_behavior( { 'type': 'listen', 'event_name': event_name, 'cbjs_action': event_script } ) # test a passed in script path elif my.load_script_path: # an event is called event_name = 'load_snapshot' event_script = '''var script = spt.CustomProject.get_script_by_path("%s");spt.CustomProject.exec_script(script)''' % my.load+script_path loader_script = '''spt.named_events.fire_event('%s', {})''' % event_name table.add_behavior( { 'type': 'listen', 'event_name': event_name, 'cbjs_action': event_script } ) # end test # --------------- elif my.load_script: loader_script = my.load_script else: loader_script = LoaderElementWdg.get_load_script(my.search_type) #print LoaderElementWdg.get_load_script(my.search_type) # add the introspect button introspect_button = IntrospectWdg() introspect_button.add_style('float: left') introspect_button.add_style('margin-bottom: 6px') td.add(introspect_button) # to be attached smart_menu = LoaderElementWdg.get_smart_menu(my.search_type) button.set_load_script(loader_script) button.set_smart_menu(smart_menu) td.add(button) td.add_style('text-align','right') td.add_style('padding-right', '40px') widget.add(filter_top) widget.add( HtmlElement.br() ) widget.add(table) return widget
def get_display(my): element_data_dict = {} config = my.get_config() element_names = config.get_element_names() content_wdg = DivWdg() if not element_names: element_names = ['keywords'] my.set_content(content_wdg) # this is somewhat duplicated logic from alter_search, but since this is called # in ViewPanelWdg, it's a diff instance and needs to retrieve again filter_data = FilterData.get() data_list = filter_data.get_values_by_prefix(my.prefix) for data in data_list: handler = data.get("handler") element_name = data.get("element_name") if not element_name: continue element_data_dict[element_name] = data elements_wdg = DivWdg() content_wdg.add(elements_wdg) elements_wdg.add_color("color", "color") elements_wdg.add_style("padding-top: 10px") elements_wdg.add_style("padding-bottom: 15px") elements_wdg.add_color("background", "background3", 0) elements_wdg.add_border() if len(element_names) == 1: elements_wdg.add_style("border-width: 0px 0px 0px 0px" ) elements_wdg.add_style("padding-right: 50px" ) else: elements_wdg.add_style("border-width: 0px 1px 0px 0px" ) table = Table() table.add_color("color", "color") elements_wdg.add(table) table.add_class("spt_simple_search_table") num_rows = int(len(element_names)/2)+1 tot_rows = int(len(element_names)/2)+1 project_code = Project.get_project_code() # my.search_type could be the same as my.base_search_type full_search_type = SearchType.build_search_type(my.search_type, project_code) visible_rows = my.kwargs.get("visible_rows") if visible_rows: visible_rows = int(visible_rows) num_rows = visible_rows else: visible_rows = 0 titles = config.get_element_titles() row_count = 0 for i, element_name in enumerate(element_names): attrs = config.get_element_attributes(element_name) if i % 2 == 0: if visible_rows and row_count == visible_rows: tr, td = table.add_row_cell("+ more ...") td.add_class("hand") td.add_class("SPT_DTS") td.add_class("spt_toggle") td.add_style("padding-left: 10px") td.add_behavior( { 'type': 'click_up', 'visible_rows': visible_rows, 'cbjs_action': ''' var top = bvr.src_el.getParent(".spt_simple_search_table"); var expand = true; var rows = top.getElements(".spt_simple_search_row"); for (var i = 0; i < rows.length; i++) { var row = rows[i]; if (row.getStyle("display") == "none") { row.setStyle("display", ""); } else { row.setStyle("display", "none"); expand = false; } } var spacer = top.getElements(".spt_spacer"); var cell = top.getElement(".spt_toggle"); if (expand) { spacer.setStyle("height", (rows.length+bvr.visible_rows)*20); cell.innerHTML = "- less ..."; } else { spacer.setStyle("height", bvr.visible_rows*20); cell.innerHTML = "+ more ..."; } ''' } ) tr = table.add_row() if visible_rows and row_count >= visible_rows: tr.add_class("spt_simple_search_row") tr.add_style("display: none") tr.add_style("height: 0px") row_count += 1 icon_td = table.add_cell() title_td = table.add_cell() element_td =table.add_cell() # show the title title_td.add_style("text-align: right") title_td.add_style("padding-right: 5px") title_td.add_style("min-width: 100px") element_wdg = DivWdg() if attrs.get('view') == 'false': element_wdg.add_style('display: none') element_td.add(element_wdg) #title_td.add_style("border: solid 1px red") #element_td.add_style("border: solid 1px blue") #element_wdg.add_style("border: solid 1px yellow") if i == 0 and len(element_names) > 1: spacer = DivWdg() spacer.add_class("spt_spacer") spacer.add_style("border-style: solid") spacer.add_style("border-width: 0 1 0 0") #spacer.add_style("height: %spx" % (num_rows*20)) spacer.add_style("height: %spx" % (num_rows*20)) spacer.add_style("width: 10px") spacer.add_style("border-color: %s" % spacer.get_color("border") ) spacer.add(" ") td = table.add_cell(spacer) td.add_attr("rowspan", tot_rows) #element_wdg.add_color("color", "color3") #element_wdg.add_color("background", "background3") #element_wdg.set_round_corners() #element_wdg.add_border() element_wdg.add_style("padding: 4px 10px 4px 5px") element_wdg.add_class("spt_table_search") element_wdg.add_style("margin: 1px") element_wdg.add_style("min-height: 20px") element_wdg.add_style("min-width: 250px") # this is done at get_top() #element_wdg.add_class("spt_search") element_wdg.add( HiddenWdg("prefix", my.prefix)) display_handler = config.get_display_handler(element_name) element_wdg.add( HiddenWdg("handler", display_handler)) element_wdg.add( HiddenWdg("element_name", element_name)) from pyasm.widget import ExceptionWdg try: widget = config.get_display_widget(element_name) if widget: widget.set_title(titles[i]) except Exception, e: element_wdg.add(ExceptionWdg(e)) continue if not widget: widget = KeywordFilterElementWdg() widget.set_name(element_name) from pyasm.widget import IconWdg icon_div = DivWdg() icon_td.add(icon_div) icon_div.add_style("width: 20px") icon_div.add_style("margin-top: 2px") icon_div.add_style("padding-left: 5px") icon_div.add_class("spt_filter_top") widget.set_show_title(False) #element_wdg.add("%s: " % title) data = element_data_dict.get(element_name) if data: widget.set_values(data) if isinstance(widget, KeywordFilterElementWdg): if not data.get("keywords") and my.kwargs.get("keywords"): widget.set_value("value", my.kwargs.get("keywords")) if isinstance(widget, KeywordFilterElementWdg) and not full_search_type.startswith('sthpw/sobject_list'): widget.set_option('filter_search_type', full_search_type) try: if attrs.get('view') != 'false': title_td.add(widget.get_title_wdg()) element_wdg.add(widget.get_buffer_display()) except Exception, e: element_wdg.add(ExceptionWdg(e)) continue
class ResizableTableWdg(BaseRefreshWdg): def __init__(self, **kwargs): self.table = Table() self.table.add_style("border-collapse: collapse") self.table.add_style("padding: 0px") self.table.set_attr("cellpadding", "0px") self.table.set_attr("cellspacing", "0px") self.is_first_row = True self.hilight = self.table.get_color("background", -40) super(ResizableTableWdg, self).__init__(**kwargs) def set_style(self, name, value=None): self.table.set_style(name, value) def set_max_width(self): self.table.set_max_width() def add_class(self, name): self.table.add_class(name) def get_display(self): top = self.top self.table.add_class("spt_resizable_table_top") self.table.add_behavior( { 'type': 'load', 'cbjs_action': self.get_onload_js() } ) self.table.add_behavior( { 'type': 'load', 'cbjs_action': ''' var resizable_cells = bvr.src_el.getElements(".spt_resizable_cell"); for (var i = 0; i < resizable_cells.length; i++) { var resizable_el = resizable_cells[i].getElement(".spt_resizable"); if (!resizable_el) { continue; } var size = resizable_cells[i].getSize(); resizable_el.setStyle("width", size.x); resizable_el.setAttribute("width", size.x); } ''' } ) top.add(self.table) return top def set_keep_table_size(self): self.table.add_class("spt_resizable_keep_size") def add_color(self, color, modifier=0): self.table.add_color(color, modifier) def add_border(self, modifier=0): self.table.add_border(modifier=modifier) def add_style(self, name, value=None): self.table.add_style(name, value=value) def add_row(self, resize=True): # add resize row if not self.is_first_row and resize == True: tr, td = self.table.add_row_cell() td.add_style("height: 3px") td.add_style("min-height: 3px") td.add_style("cursor: n-resize") tr.add_behavior( { 'type': 'drag', 'cb_set_prefix': 'spt.resizable_table.row_drag' } ) tr.add_behavior( { 'type': 'hover', 'hilight': self.hilight, 'cbjs_action_over': ''' var color = bvr.src_el.getStyle("background-color"); bvr.src_el.setStyle("background-color", bvr.hilight); bvr.src_el.setAttribute("spt_last_background", color); ''', 'cbjs_action_out': ''' var color = bvr.src_el.getAttribute("spt_last_background"); bvr.src_el.setStyle("background-color", color); ''' } ) icon = IconWdg("Drag to Resize", IconWdg.RESIZE_VERTICAL) td.add(icon) td.add_style("text-align: center") content_tr = self.table.add_row() self.is_first_row = False return content_tr def add_resize_row(self): tr, td = self.table.add_row_cell() td.add_style("height: 3px") td.add_style("min-height: 3px") td.add_style("cursor: n-resize") tr.add_behavior( { 'type': 'drag', 'cb_set_prefix': 'spt.resizable_table.row_drag' } ) tr.add_behavior( { 'type': 'hover', 'hilight': self.hilight, 'cbjs_action_over': ''' var color = bvr.src_el.getStyle("background-color"); bvr.src_el.setStyle("background-color", bvr.hilight); bvr.src_el.setAttribute("spt_last_background", color); ''', 'cbjs_action_out': ''' var color = bvr.src_el.getAttribute("spt_last_background"); bvr.src_el.setStyle("background-color", color); ''' } ) icon = IconWdg("Drag to Resize", IconWdg.RESIZE_VERTICAL) td.add(icon) return tr, td def add_cell(self, widget=None, resize=True, rowspan=1, colspan=1): td_content = self.table.add_cell() td_content.add_style("vertical-align: top") td_content.add_class("spt_resizable_cell") if rowspan > 1: td_content.add_attr("rowspan", rowspan+1) if colspan > 1: td_content.add_attr("colspan", colspan+1) if not resize: return td_content # add resize cell td = self.table.add_cell() td.add_style("width: 4px") td.add_style("min-width: 4px") td.add_style("cursor: e-resize") icon_div = DivWdg() icon_div.add_style("width: 4px") icon_div.add_style("overflow: hidden") icon = IconWdg("Drag to Resize", IconWdg.RESIZE_HORIZ) icon_div.add(icon) td.add(icon_div) td.add_style("vertical-align: middle") td.add_behavior( { 'type': 'drag', 'cb_set_prefix': 'spt.resizable_table.cell_drag' } ) td.add_behavior( { 'type': 'hover', 'hilight': self.hilight, 'cbjs_action_over': ''' var color = bvr.src_el.getStyle("background-color"); bvr.src_el.setStyle("background-color", bvr.hilight); bvr.src_el.setAttribute("spt_last_background", color); ''', 'cbjs_action_out': ''' var color = bvr.src_el.getAttribute("spt_last_background"); bvr.src_el.setStyle("background-color", color); ''' } ) if rowspan > 1: td.add_attr("rowspan", rowspan+1) if colspan > 1: td.add_attr("colspan", colspan+1) if widget: td_content.add(widget) return td_content def get_onload_js(self): return r'''
def get_display(my): top = DivWdg() top.add_border() top.add_style("padding: 10px") top.add_color("color", "color") top.add_gradient("background", "background", 0, -5) #top.add_style("height: 550px") top.add_behavior( { 'type': 'load', 'cbjs_action': ''' spt.named_events.fire_event("side_bar|hide_now", {} ); ''' } ) project = Project.get() title = DivWdg() title.add("Project Startup and Configuration") title.add_style("font-size: 18px") title.add_style("font-weight: bold") title.add_style("text-align: center") title.add_style("padding: 10px") title.add_style("margin: -10px -10px 10px -10px") top.add(title) title.add_gradient("background", "background3", 5, -10) shelf = DivWdg() top.add(shelf) shelf.add_style("margin-left: -8px") shelf.add_style("width: 130px") button_div = DivWdg() shelf.add(button_div) button_div.add_style("float: left") button_div.add_style("margin-top: -3px") security = Environment.get_security() view_side_bar = security.check_access("builtin", "view_side_bar", "allow", default='allow') if view_side_bar: button = IconButtonWdg(title="Side Bar", icon=IconWdg.ARROW_LEFT) button_div.add(button) shelf.add("Toggle Side Bar") shelf.add_attr("title", "Toggle Side Bar (or press '1')") button.add_behavior( { 'type': 'click_up', 'cbjs_action': ''' spt.named_events.fire_event("side_bar|toggle"); ''' } ) shelf.add_behavior( { 'type': 'click_up', 'cbjs_action': ''' spt.named_events.fire_event("side_bar|toggle"); ''' } ) shelf.add_class("hand") else: shelf.add(" ") search_wdg = Table() top.add(search_wdg) search_wdg.add_row() search_wdg.add_class("spt_main_top") search_wdg.add_style("padding: 10px") search_wdg.add_style("margin: 20px auto") search_wdg.add_style("width: 430px") td = search_wdg.add_cell("Search: ") td.add_style("vertical-align: top") td.add_style("padding-top: 8px") custom_cbk = {} custom_cbk['enter'] = ''' var top = bvr.src_el.getParent(".spt_main_top"); var search_el = top.getElement(".spt_main_search"); var keywords = search_el.value; if (keywords != '') { var class_name = 'tactic.ui.panel.ViewPanelWdg'; var kwargs = { 'search_type': 'sthpw/sobject_list', 'view': 'result_list', 'keywords': keywords, 'simple_search_view': 'simple_filter', //'show_shelf': false, } spt.tab.set_main_body_tab(); spt.tab.add_new("Search Results", "Search Results", class_name, kwargs); } ''' from tactic.ui.input import TextInputWdg, LookAheadTextInputWdg #text = TextInputWdg(name="search") text = LookAheadTextInputWdg(name="search", custom_cbk=custom_cbk, width='280', height='42px') #text = TextWdg("search") text.add_class("spt_main_search") text.add_style("width: 290px") search_wdg.add_cell(text) search_wdg.add_style("font-weight: bold") search_wdg.add_style("font-size: 16px") icon_div = DivWdg() td = search_wdg.add_cell(icon_div) td.add_style("vertical-align: top") icon_div.add_style("width: 38px") icon_div.add_style("height: 27px") icon_div.add_style("padding-top: 7px") icon_div.add_style("padding-left: 4px") icon_div.add_style("text-align: center") #icon_div.add_gradient("background", "background3", 15, -10) icon_div.add_color("background", "background3", 10) over_color = icon_div.get_color("background3", 0) out_color = icon_div.get_color("background3", 10) icon_div.set_round_corners(5) icon_div.set_box_shadow("1px 1px 1px 1px") icon = IconWdg("Search", IconWdg.SEARCH_32, width=24) icon_div.add(icon) button = icon_div icon_div.add_class("hand") icon_div.add_behavior( { 'type': 'mouseover', 'color': over_color, 'cbjs_action': ''' bvr.src_el.setStyle("background", bvr.color); ''' } ) icon_div.add_behavior( { 'type': 'mouseout', 'color': out_color, 'cbjs_action': ''' bvr.src_el.setStyle("background", bvr.color); bvr.src_el.setStyle("box-shadow", "1px 1px 1px 1px #999"); bvr.src_el.setStyle("margin-top", "-5"); bvr.src_el.setStyle("margin-right", "0"); ''' } ) icon_div.add_behavior( { 'type': 'click', 'color': out_color, 'cbjs_action': ''' bvr.src_el.setStyle("box-shadow", "0px 0px 1px 1px #999"); bvr.src_el.setStyle("margin-top", "-3"); bvr.src_el.setStyle("margin-right", "-2"); ''' } ) icon_div.add_behavior( { 'type': 'click_up', 'color': out_color, 'cbjs_action': ''' bvr.src_el.setStyle("box-shadow", "1px 1px 1px 1px #999"); bvr.src_el.setStyle("margin-top", "-5"); bvr.src_el.setStyle("margin-right", "0"); ''' } ) button.add_behavior( { 'type': 'click_up', 'cbjs_action': ''' var top = bvr.src_el.getParent(".spt_main_top"); var search_el = top.getElement(".spt_main_search"); var keywords = search_el.value; if (keywords == '') { return; } var class_name = 'tactic.ui.panel.ViewPanelWdg'; var kwargs = { 'search_type': 'sthpw/sobject_list', 'view': 'result_list', 'keywords': keywords, 'simple_search_view': 'simple_filter', //'show_shelf': false, } spt.tab.set_main_body_tab(); spt.tab.add_new("Search Results", "Search Results", class_name, kwargs); ''' } ) #desc = DivWdg() #top.add(desc) #desc.add("Dashboard") #desc.add_style("width: 600px") # create a bunch of panels table = Table() table.add_color("color", "color") table.add_style("margin-bottom: 20px") table.center() top.add(table) table.add_row() #security = Environment.get_security() #if not security.check_access("builtin", "view_site_admin", "allow"): td = table.add_cell() td.add_style("padding: 3px") td.add_style("vertical-align: top") title = "Configuration" #description = '''All TACTIC projects can be uniquely designed and managed using our configuration tools.''' description = '''Configure a Project from start to finish.''' image = "<img src='/context/icons/64x64/configuration_64.png'/>" behavior = { 'type': 'click_up', 'cbjs_action': ''' spt.tab.set_main_body_tab(); var class_name = 'tactic.ui.startup.ProjectConfigWdg'; var kwargs = { help_alias: 'project-startup-configuration' }; spt.tab.add_new("project_configuration", "Configuration", class_name, kwargs); ''' } config_wdg = my.get_main_section_wdg(title, description, image, behavior) td.add(config_wdg) # Manage Users td = table.add_cell() td.add_style("vertical-align: top") td.add_style("padding: 3px") title = "Manage Users and Security" image = "<img src='/context/icons/64x64/dashboard_64.png'/>" image = DivWdg() image_link = "<div style='margin-bottom: -64px'><img src='/context/icons/64x64/lock_64.png'/></div>" image.add(image_link) image1 = IconWdg("Manage Users", IconWdg.USER_32) image2 = IconWdg("Manage Users", IconWdg.USER_32) image3 = IconWdg("Manage Users", IconWdg.USER_32) image4 = IconWdg("Manage Users", IconWdg.USER_32) image.add(image1) image.add(image2) image.add("<br/>") image.add(image3) image.add(image4) description = '''Manage users that can access the system''' behavior = { 'type': 'click_up', 'cbjs_action': ''' spt.tab.set_main_body_tab(); var class_name = 'tactic.ui.startup.UserConfigWdg'; var kwargs = { help_alias: 'project-startup-manage-users' }; spt.tab.add_new("manage_user", "Manage Users", class_name, kwargs); ''' } manage_users_wdg = my.get_main_section_wdg(title, description, image, behavior) td.add(manage_users_wdg) # custom layout editor td = table.add_cell() td.add_style("padding: 3px") td.add_style("vertical-align: top") title = "Custom Layouts" description = '''Create interfaces using the Custom Layout Editor.''' image = "<img src='/context/icons/64x64/layout_64.png'/>" behavior = { 'type': 'click_up', 'cbjs_action': ''' spt.tab.set_main_body_tab(); var class_name = 'tactic.ui.tools.CustomLayoutEditWdg'; var kwargs = { help_alias: 'project-startup-configuration' }; spt.tab.add_new("custom_layout_editor", "Custom Layout Editor", class_name, kwargs); ''' } config_wdg = my.get_main_section_wdg(title, description, image, behavior) td.add(config_wdg) tr = table.add_row() # Plugins td = table.add_cell() td.add_style("vertical-align: top") td.add_style("padding: 3px") title = "Manage Plugin" image = IconWdg("Manage Plugin", IconWdg.PLUGIN_32) #image = "<img src='/context/icons/64x64/dashboard_64.png'/>" description = '''Upload, install, remove and create TACTIC plugins.''' behavior = { 'type': 'click_up', 'cbjs_action': ''' var class_name = 'tactic.ui.app.PluginWdg'; spt.tab.set_main_body_tab(); spt.tab.add_new("plugins", "Manage Plugin", class_name, kwargs); ''' } plugin_wdg = my.get_small_section_wdg(title, description, image, behavior) td.add(plugin_wdg) # Examples td = table.add_cell() td.add_style("vertical-align: top") td.add_style("padding: 3px") title = "Tools" image = IconWdg("Tools", IconWdg.SHARE_32) #image = "<img src='/context/icons/64x64/dashboard_64.png'/>" description = '''A collection of example views.''' behavior = { 'type': 'click_up', 'cbjs_action': ''' var class_name = 'tactic.ui.startup.ToolsWdg'; spt.tab.set_main_body_tab(); spt.tab.add_new("tools", "Tools", class_name, kwargs); ''' } share_wdg = my.get_small_section_wdg(title, description, image, behavior) td.add(share_wdg) # Share """ td = table.add_cell() td.add_style("vertical-align: top") td.add_style("padding: 3px") title = "Shares" image = IconWdg("Shares", IconWdg.SHARE_32) #image = "<img src='/context/icons/64x64/dashboard_64.png'/>" description = '''Share project with other TACTIC installs.''' behavior = { 'type': 'click_up', 'cbjs_action': ''' var class_name = 'tactic.ui.startup.ShareWdg'; spt.tab.set_main_body_tab(); spt.tab.add_new("shares", "Shares", class_name, kwargs); ''' } share_wdg = my.get_small_section_wdg(title, description, image, behavior) td.add(share_wdg) """ # Advanced td = table.add_cell() td.add_style("vertical-align: top") td.add_style("padding: 3px") title = "Advanced Setup" image = IconWdg("Advanced", IconWdg.ADVANCED_32) #image = "<img src='/context/icons/64x64/dashboard_64.png'/>" description = '''A set of advanced configuration tools.''' behavior = { 'type': 'click_up', 'cbjs_action': ''' var class_name = 'tactic.ui.app.ProjectStartWdg'; spt.tab.set_main_body_tab() spt.tab.add_new("project_setup", "Project Setup", class_name) ''' } share_wdg = my.get_small_section_wdg(title, description, image, behavior) td.add(share_wdg) """ td = table.add_cell() td.add_style("vertical-align: top") td.add_style("padding: 3px") title = "Documentation" description = '''TACTIC Documentation. * Project Setup Documentation<br/> <br/> * End User Documentation<br/> <br/> * Developer Documentation<br/> <br/> * System Administrator Documentation<br/> <br/> ''' image = "<img src='/context/images/getting_started_pipeline.png'/>" behavior = { 'type': 'click_up', 'cbjs_action': ''' spt.help.load_alias("main") ''' } doc_wdg = my.get_section_wdg(title, description, image, behavior) td.add(doc_wdg) """ tr, td = table.add_row_cell() td.add_style("font-size: 14px") td.add("<br/>") from misc_wdg import QuickLinksWdg quick_links_wdg = QuickLinksWdg() td.add(quick_links_wdg) #td = table.add_cell() #totals_wdg = my.get_totals_wdg() #td.add(totals_wdg) return top
def get_example_display(my): div = DivWdg() # Smart Menu data ... dog_menus = [ my.get_sm_dog_main_menu_details(), my.get_sm_dog_submenu_one_details(), my.get_sm_dog_submenu_two_details() ] cat_menus = [my.get_sm_cat_main_menu_details()] SmartMenu.attach_smart_context_menu(div, { 'DOG': dog_menus, 'CAT': cat_menus }, False) table = Table(css="maq_view_table") table.set_id("main_body_table") table.add_class("spt_table") table.add_behavior({ "type": "smart_drag", "bvr_match_class": "SPT_DO_RESIZE", "cbjs_setup": 'spt.dg_table.resize_column_setup( evt, bvr, mouse_411 );', "cbjs_motion": 'spt.dg_table.resize_column_motion( evt, bvr, mouse_411 );' }) table.add_behavior({ "type": "smart_drag", "bvr_match_class": "SPT_DO_DRAG", "use_copy": 'true', "use_delta": 'true', 'dx': 10, 'dy': 10, "drop_code": 'TableExampleSwitchContents', "cbjs_action": "spt.ui_play.drag_cell_drop_action( evt, bvr );", "copy_styles": 'background: blue; opacity: .5; border: 1px solid black; text-align: left;' }) row = table.add_row() for c in range(10): th = table.add_header() th.set_attr('col_idx', str(c)) th.add_class("cell_left") th.add_styles("width: 150px; cursor: default;") # @@@ th.add_behavior({ "type": "move", "cbjs_action": ''' // log.debug( "(x,y) = (" + mouse_411.curr_x + "," + mouse_411.curr_y + ")" ); spt.ui_play.header_half_move_cbk( evt, bvr, mouse_411 ); ''', "cbjs_action_on": ''' // log.debug( "START MY MOVE!" ); ''', "cbjs_action_off": ''' // log.debug( "DONE MY MOVE!" ); spt.ui_play.header_half_move_off_cbk( evt, bvr, mouse_411 ); ''' }) if (c % 2): th.add("H%s (Cat)" % c) else: th.add("H%s (Dog)" % c) th_resize = table.add_cell() th_resize.set_attr('col_idx', str(c + 1)) th_resize.add_class("SPT_DO_RESIZE cell_right") th_resize.add_styles("width: 4px; cursor: col-resize;") for r in range(19): row = table.add_row() for c in range(10): col = table.add_cell() col.set_attr('col_idx', str(c)) col.set_attr('SPT_ACCEPT_DROP', 'TableExampleSwitchContents') col.add_class("SPT_DO_DRAG cell_left") col.add_styles("cursor: pointer;") col.add("(%s,%s)" % (r, c)) if (c % 2) == 0: SmartMenu.assign_as_local_activator(col, "DOG") else: SmartMenu.assign_as_local_activator(col, "CAT") resize = table.add_cell() resize.set_attr('col_idx', str(c + 1)) resize.add_class("SPT_DO_RESIZE cell_right") resize.add_styles("width: 6px; cursor: col-resize;") div.add(table) return div