예제 #1
0
        /*
         * Deals with file being dropped into TreeView
         * gets the filepath as a string
         * sets the active MBIN to the dropped file
         * asks the current MBIN to populate the TreeView with it's data
         * adds itself to the list of loadedTemplates
         */
        private void trv_Mbins_DragDrop(object sender, DragEventArgs e)
        {
            string[] droppedFiles = (string[])e.Data.GetData(DataFormats.FileDrop);
            // get all files dropped as strings to path into array

            currentTemplate = new ExtendedNmsTemplate(droppedFiles[0]);
            // create a new instance of my MBIN object
            // it loads the correct mbin into itself

            currentTemplate.PopulateTreeView(trv_Mbins);
            loadedTemplates.Add(currentTemplate);
        }
예제 #2
0
        // if it is a parent node then hold that node here
        // if not root node and

        public MyTreeNode(string nodeName, ExtendedNmsTemplate template)
        {
            this.associatedTemplate = template;
            this.Text = nodeName;
        }
예제 #3
0
        /*
         * After selecting a Node
         * Check if it's in the currentTemplate, if not change currentTemplate to match correct MBIN
         * Display information about the node:
         *      it's path
         *      if it's a root node
         *      if it's an array
         *          if it is an array does it use an enum
         *              if it does get those values and display them
         *
         * Yea, in all honesty this method should be broken down into
         * separate ones. It does too much.
         */
        private void trv_Mbins_AfterSelect(object sender, TreeViewEventArgs e)
        {
            // just an easily named shortcut to the node from the event
            MyTreeNode selectedNode = (MyTreeNode)e.Node;

            // if selected node associated template isn't the current template
            // then set current template to be the selected one
            if (selectedNode.associatedTemplate != currentTemplate)
            {
                currentTemplate = selectedNode.associatedTemplate;
            }

            // Blank the information labels
            lbl_libMBINType.Text      = "<NO INFO>";
            lbl_MbinRelativePath.Text = "<NO INFO>";
            lbl_VarName.Text          = "<NO INFO>";
            lbl_varType.Text          = "<NO INFO>";

            // MBIN RELATIVE PATH
            lbl_MbinRelativePath.Text = currentTemplate.GetRelativePath(currentTemplate.mbinPath);

            // WHAT STRUCT IS THIS FROM?
            lbl_libMBINType.Text = selectedNode.associatedTemplate.baseTemplate.GetType().Name;

            // If this isn't a root node
            // then we've got some other information to show and process
            if (!selectedNode.isRootNode)
            {
                // VAR NAME
                lbl_VarName.Text = selectedNode.fieldInfo.Name;
                // VAR TYPE (SINGLE, BOOL, LIBMBIN STRUCT, ARRAY)
                lbl_varType.Text = selectedNode.fieldInfo.GetValue(currentTemplate.baseTemplate).GetType().Name;

                // If the var is an array then we need to process and display it in different ways
                if (selectedNode.fieldInfo.GetValue(currentTemplate.baseTemplate).GetType().IsArray)
                {
                    string messageText = "";    // Do i need to use this??

                    // Firstly get the array
                    Array array = (Array)selectedNode.fieldInfo.GetValue(currentTemplate.baseTemplate);

                    // Was doing some crazy shit before when I was confused. Left it here to ponder my madness in future
                    //FieldInfo reflectedField = selectedNode.fieldInfo.ReflectedType.GetField(selectedNode.fieldInfo.Name);

                    // Shortcut to the field we're interested in. Just to not have to type the whole thing each time
                    FieldInfo field = selectedNode.fieldInfo;

                    // Testing/Debug info to find out how things work
                    Console.WriteLine("Value of node>>field is: " + field.GetValue(currentTemplate.baseTemplate));
                    Console.WriteLine("Name of fieldInfo is: " + field.Name);
                    Console.WriteLine("Reflected type is: " + field.ReflectedType);
                    Console.WriteLine("Just NMSAttribute[] i think: " + field.GetCustomAttributes(typeof(NMSAttribute), false));

                    // Get attributes from the field
                    // returns a zero length array if there is none
                    NMSAttribute[] nmsAttributes = (NMSAttribute[])field.GetCustomAttributes(typeof(NMSAttribute), false);

                    Console.WriteLine("Length of array: " + nmsAttributes.Length);

                    /*if (true)
                     * {
                     *  Console.WriteLine("NMSAttributes.Size: " + nmsAttributes[0].Size);
                     *  Console.WriteLine("NMSAttributes.Alignment: " + nmsAttributes[0].Alignment);
                     *  Console.WriteLine("NMSAttributes.Broken: " + nmsAttributes[0].Broken);
                     *  Console.WriteLine("NMSAttributes.DefaultValue: " + nmsAttributes[0].DefaultValue);
                     *  Console.WriteLine("NMSAttributes.EnumType: " + nmsAttributes[0].EnumType);
                     *  //Console.WriteLine(nmsAttributes[0].EnumValue);
                     *  Console.WriteLine("NMSAttributes.GUID: " + nmsAttributes[0].GUID);
                     *  Console.WriteLine("NMSAttributes.IDFIeld: " + nmsAttributes[0].IDField);
                     *  Console.WriteLine("NMSAttributes.Ignore: " + nmsAttributes[0].Ignore);
                     *  Console.WriteLine("NMSAttributes.NAmeHash: " + nmsAttributes[0].NameHash);
                     *  Console.WriteLine("NMSAttributes.Padding: " + nmsAttributes[0].Padding);
                     *  Console.WriteLine("NMSAttributes.TypeID: " + nmsAttributes[0].TypeId);
                     *
                     * }*/

                    // temp Array var to store values from an Enum
                    Array enumValues;

                    // Check if the attribute has an EnumType
                    // if it does then we want to use it for this field
                    if (nmsAttributes[0].EnumType != null)
                    {
                        // it has an associated enum type so let's add that
                        // to the Var Type info box
                        lbl_varType.Text += " using:\r\n" + nmsAttributes[0].EnumType.Name;

                        // Get the values used in the EnumType
                        // and store them in that array from before (enumValues)
                        enumValues = nmsAttributes[0].EnumType.GetEnumValues();

                        // Loop through each enum showing the name associated with the number
                        // and then the value from the array itself
                        for (int i = 0; i < enumValues.Length; i++)
                        {
                            messageText += enumValues.GetValue(i).ToString() + ": " + array.GetValue(i) + "\r\n";
                            //Console.WriteLine("Index " + i + ": " + enumValues.GetValue(i));
                        }
                    }
                    // if it doesn't have an EnumType
                    // then it's just a list of indices (0...n)
                    else
                    {
                        for (int i = 0; i < array.Length; i++)
                        {
                            messageText += "Index [" + i.ToString() + "] : " + array.GetValue(i) + "\r\n";
                        }
                    }

                    txtB_values.Text = messageText;
                }
                // If it isn't an array then just display the value
                else
                {
                    txtB_values.Text = selectedNode.fieldInfo.GetValue(currentTemplate.baseTemplate).ToString();
                }
            }
        }