class UIPopupScriptConfigs extends UIPopupScript { private ButtonWidget m_BtnOk; private ButtonWidget m_BtnCancel; private ButtonWidget m_BtnCopyToClipboard; private TextListboxWidget m_ConfigHierarchyTextListbox; private TextListboxWidget m_ConfigVariablesTextListbox; private PluginConfigViewer m_ModuleConfigViewer; private EditBoxWidget m_ObjectConfigFilter; void UIPopupScriptConfigs( Widget wgt ) { m_BtnOk = ButtonWidget.Cast( wgt.FindAnyWidget("btn_ppp_pc_ok") ); m_ConfigHierarchyTextListbox = TextListboxWidget.Cast( wgt.FindAnyWidget("ConfigHierarchy") ); m_ConfigVariablesTextListbox = TextListboxWidget.Cast( wgt.FindAnyWidget("ConfigVariables") ); m_BtnCopyToClipboard = ButtonWidget.Cast( wgt.FindAnyWidget("btn_ppp_pc_copy") ); m_ObjectConfigFilter = EditBoxWidget.Cast( wgt.FindAnyWidget("ObjectConfigFilter") ); } void ChangeConfigFilter() { if ( m_ObjectConfigFilter.GetText() == "" ) { ClearHierarchy(); } else { FindInHierarchy( m_ObjectConfigFilter.GetText() ); } } override void OnOpen(Param param) { m_ModuleConfigViewer = PluginConfigViewer.Cast( GetPlugin( PluginConfigViewer ) ); ClearHierarchy(); } void AddItemToClipboard( TextListboxWidget text_listbox_widget ) { int selected_row_index = text_listbox_widget.GetSelectedRow(); if ( selected_row_index != -1 ) { string item_name; text_listbox_widget.GetItemText( selected_row_index, 0, item_name ); GetGame().CopyToClipboard( item_name ); } } void RenderVariables( int row ) { ConfigParams config_params; if( row > -1 && row < m_ConfigHierarchyTextListbox.GetNumItems() ) { m_ConfigHierarchyTextListbox.GetItemData( row, 0, config_params ); m_ConfigVariablesTextListbox.ClearItems(); ref TStringArray variables; string path = config_params.param4; variables = m_ModuleConfigViewer.GetConfigVariables( path ); for ( int i = 0; i < variables.Count(); i++ ) { m_ConfigVariablesTextListbox.AddItem( variables.Get(i), NULL, 0); } } } void ExpandHierarchy( int row ) { if( row <= -1 && row >= m_ConfigHierarchyTextListbox.GetNumItems() ) { return; } ref TStringArray variables; // get current row data ConfigParams config_params; m_ConfigHierarchyTextListbox.GetItemData( row, 0, config_params ); string config_path = config_params.param4; int deep = config_params.param5; string offset = ""; for ( int i = 0; i < deep; i++) { offset = offset + " "; } // change selected node variables = m_ModuleConfigViewer.GetConfigHierarchy( config_path ); int childrens_count = variables.Count(); m_ConfigHierarchyTextListbox.SetItem( row, offset + "- " + config_params.param2, new ConfigParams( true, config_params.param2, childrens_count, config_path, deep ), 0 ); offset = offset + " "; // render childrens deep = deep + 1; childrens_count = 0; for ( i = variables.Count() - 1; i >= 0; i-- ) { string new_config_path = ( config_path + " " + variables.Get(i) ).Trim(); m_ConfigHierarchyTextListbox.AddItem( offset + "+ " + variables.Get(i), new ConfigParams( false, variables.Get(i), childrens_count, new_config_path, deep ), 0, (row + 1) ); } } // niekde je bug, ked su len 2 polozky a expand/collapse na prvu tak zmaze aj druhu. ak collapse a expand na druhu tak crash lebo sa snazi zmazat riadok co neexistuje void CollapseHierarchy( int row ) { if( row <= -1 && row >= m_ConfigHierarchyTextListbox.GetNumItems() ) { return; } ConfigParams config_params; ConfigParams config_params_next; m_ConfigHierarchyTextListbox.GetItemData( row, 0, config_params ); m_ConfigHierarchyTextListbox.GetItemData( row + 1, 0, config_params_next ); int deep = config_params.param5; int deep_next = config_params_next.param5; int max_count = m_ConfigHierarchyTextListbox.GetNumItems(); int remove_lines_count = 0; // Print(max_count); for ( int i = row + 1; i < max_count; i++) { if ( deep < deep_next && i <= max_count ) { remove_lines_count = remove_lines_count + 1; m_ConfigHierarchyTextListbox.GetItemData( i, 0, config_params_next ); deep_next = config_params_next.param5; } } // remove remove_lines_count lines from row // remove_lines_count = remove_lines_count - 1; for ( i = 1; i < remove_lines_count; i++ ) { int x = row + 1; if ( x < max_count ) { m_ConfigHierarchyTextListbox.RemoveRow( x ); } } string offset = ""; for ( i = 0; i < deep; i++) { offset = offset + " "; } m_ConfigHierarchyTextListbox.SetItem( row, offset + "+ " + config_params.param2, new ConfigParams( false, config_params.param2, 0, config_params.param4, deep ), 0 ); } void ClearHierarchy() { // config hierarchy // string config_path = "configfile CfgVehicles APC"; // string config_path = ""; m_ConfigHierarchyTextListbox.ClearItems(); m_ConfigVariablesTextListbox.ClearItems(); ref TStringArray base_classes = new TStringArray; Debug.GetBaseConfigClasses( base_classes ); string config_path = "configfile"; ref TStringArray variables = m_ModuleConfigViewer.GetConfigHierarchy( config_path ); for ( int i = 0; i < variables.Count(); i++ ) { string variable = variables.Get(i); for ( int j = 0; j < base_classes.Count(); j++ ) { if ( variable == base_classes.Get(j) ) { string new_config_path = ( config_path + " " + variable ).Trim(); m_ConfigHierarchyTextListbox.AddItem( "+ " + variable, new ConfigParams( false, variable, 0, new_config_path, 0 ), 0); } } } } void FindInHierarchy( string class_name ) { m_ConfigHierarchyTextListbox.ClearItems(); m_ConfigVariablesTextListbox.ClearItems(); class_name.ToLower( ); string config_base_path = "configfile"; ref TStringArray base_classes = new TStringArray; Debug.GetBaseConfigClasses( base_classes ); string filter_lower = class_name; filter_lower.ToLower( ); ref TStringArray filters = new TStringArray; filter_lower.Split( " ", filters ); for ( int i = 0; i < base_classes.Count(); i++ ) { string config_path = config_base_path + " " + base_classes.Get(i); ref TStringArray variables = m_ModuleConfigViewer.GetConfigHierarchy( config_path ); for ( int j = 0; j < variables.Count(); j++ ) { string variable = variables.Get(j); string variable_lower = variable; variable_lower.ToLower( ); for ( int k = 0; k < filters.Count(); k++ ) { if ( variable_lower.Contains(filters.Get(k))) { string new_config_path = ( config_path + " " + variable ).Trim(); m_ConfigHierarchyTextListbox.AddItem( "+ " + variable, new ConfigParams( false, variable, 0, new_config_path, 0 ), 0); break; } } } } } override bool OnChange( Widget w, int x, int y, bool finished ) { super.OnChange( w, x, y, finished ); if ( w == m_ObjectConfigFilter ) { ChangeConfigFilter(); } return false; } override bool OnClick( Widget w, int x, int y, int button ) { super.OnClick( w, x, y, button ); if ( w == m_BtnOk ) { PopupBack(); return true; } else if ( w == m_BtnCancel ) { PopupBack(); return true; } else if ( w == m_BtnCopyToClipboard ) { AddItemToClipboard( m_ConfigVariablesTextListbox ); return true; } else if ( w == m_ConfigHierarchyTextListbox ) { int objects_row_index = m_ConfigHierarchyTextListbox.GetSelectedRow(); if ( objects_row_index > -1 && objects_row_index < m_ConfigHierarchyTextListbox.GetNumItems() ) { ConfigParams config_params; m_ConfigHierarchyTextListbox.GetItemData( objects_row_index, 0, config_params ); if ( config_params.param1 == false ) { ExpandHierarchy( objects_row_index ); } else { CollapseHierarchy( objects_row_index ); } RenderVariables( objects_row_index ); } return true; } return false; } }