示例#1
0
        void newtag_box_KeyDown(object sender, KeyEventArgs e)
        {
            String tb_text = ((TextBox)sender).Text;
            if (e.KeyCode == Keys.Return)
            {
                e.SuppressKeyPress = true; //to stop beep
                /////

                if (tb_text.Trim() == "")
                {
                    ((TextBox)sender).Text = newtagtb_defaulttext;
                    image.Focus();
                    return;
                }

                // calling data layer to add this tag

                //now checking that we don't have this tag already

                for (int i = 0; i < imageholder.tags.Count; i++)
                {
                    if (imageholder.tags[i].tag_string == tb_text) //this tag is already there, no need to add
                    {
                        MessageBox.Show("This tag is already added. Please change relevence");
                        //it would be nice if we ask user that whether instead he would like to increment relevence of tag
                        return;
                    }
                }

                //Debug.WriteLine("add a new tag");
                NOPSAImageTagHolder newtag = new NOPSAImageTagHolder();
                //NOTICE THE LINE BELOW
                // here we are setting tag's id to tag itself because server can automatically convert from tag-> tag_id and right now we don't know what id will server assign this.
                newtag.tag_id = tb_text; //
                newtag.tag_relevence = "1"; //this is default set by server
                newtag.tag_string = tb_text; //
                //we don't and can't know tag_id ... so there must a method on the server where we can incr/ dec relevence based of tag string rather than id
                imageholder.tags.Add(newtag);

                trash_tag_scrollbar();
                //loadimage();
                loadtags();

                //despatch new tag to server (using communication manager)
                this.cm.addtag(imageholder.img_id, tb_text);

            }
        }
        private void parse()
        {
            if (this.xml.Contains("notice message")) return; //REMOVE NOTICE MESSAGE FROM API

            else if (this.xml.Contains("<code>") && !this.xml.Contains("900"))
            {
                //Debug.WriteLine("XML code error: " + this.xml.ToString());
                return;
            }

            List<String> suggestions = new List<String>();
            String source = "";

            List<NOPSAImageHolder> images = new List<NOPSAImageHolder>();
            List<NOPSAImageTagHolder> img_tags = new List<NOPSAImageTagHolder>(); //dont forget to empty it after a 'round'

            //bool issearch = false;

            bool img_start = false;
            bool tag_start = false;

            String img_id = "";
            String img_rights = "";
            String img_holder = "";
            String img_url = "";
            String img_creator = "";
            String img_height = "";
            String img_width = "";
            String img_prirority = "";

            String tag_id = "";
            String tag_relevence = "";
            String tag_string = "";

            //Debug.WriteLine(this.xml);
            using (XmlReader reader = XmlReader.Create(new StringReader( this.xml )))
            {
                while (reader.Read())
                {
                    switch (reader.NodeType)
                    {
                        case XmlNodeType.Element: // The node is an element.
                            //Debug.Write("<" + reader.Name);
                            //Debug.WriteLine(">");
                            if (reader.Name == "source") // true for suggest
                            {
                                String recieved_name = reader["name"];
                                if (recieved_name != null && !recieved_name.Equals(""))
                                {
                                    //Debug.WriteLine("suggest recieved name isnt null '" + recieved_name + "'");
                                    source = recieved_name;
                                }
                                //Debug.WriteLine("its suggestion " + reader["name"]); // only true for suggesiton
                            }
                            else if (reader.Name == "search") // true for search
                            {
                                String recieved_name = reader["source"];
                                if (recieved_name != null && !recieved_name.Equals(""))
                                {
                                    //Debug.WriteLine("search recieved name isnt null " + recieved_name);
                                    source = recieved_name;
                                }
                            }
                            else if (reader.Name == "suggestion") // its suggestion element
                            {
                                String temp = reader.ReadString().Trim(); //suggestion text
                                //Debug.WriteLine("temp: " + temp);
                                suggestions.Add(temp);
                            }
                            else if (reader.Name == "image") // its search->image element
                            {
                                //Debug.WriteLine("starting image");
                                img_start = true; //so that other tags inside <image> can know that its their turn (not of someone with same name but outside <image>)
                            }
                            else if (reader.Name == "id") // currently multile tags start with id
                            {
                                if (img_start && !tag_start) // it must be related to <image>
                                {
                                    img_id = reader.ReadString().Trim();
                                }
                                if (img_start && tag_start) // it must be related to <image>..<tag>HERE</tag></image>
                                {
                                    tag_id = reader.ReadString().Trim();
                                }
                            }
                            else if (reader.Name == "rights")
                            {
                                if (img_start)
                                {
                                    img_rights = reader.ReadString().Trim();
                                }
                            }
                            else if (reader.Name == "image_holder")
                            {
                                if (img_start)
                                {
                                    img_holder = reader.ReadString().Trim();
                                }
                            }
                            else if (reader.Name == "url")
                            {
                                if (img_start)
                                {
                                    img_url = reader.ReadString().Trim();
                                }
                            }
                            else if (reader.Name == "creator")
                            {
                                if (img_start)
                                {
                                    img_creator = reader.ReadString().Trim();
                                }
                            }
                            else if (reader.Name == "height")
                            {
                                if (img_start)
                                {
                                    img_height = reader.ReadString().Trim();
                                }
                            }
                            else if (reader.Name == "width")
                            {
                                if (img_start)
                                {
                                    img_width = reader.ReadString().Trim();
                                }
                            }
                            else if (reader.Name == "prirority")
                            {
                                if (img_start)
                                {
                                    img_prirority = reader.ReadString().Trim();
                                }
                            }
                            else if (reader.Name == "tag")
                            {
                                if (img_start)
                                {
                                    tag_start = true; // telling others that tag has started
                                    //Debug.WriteLine("its tag");
                                }
                            }
                            else if (reader.Name == "relevancy")
                            {
                                if (img_start && tag_start)
                                {
                                    tag_relevence = reader.ReadString().Trim();
                                }
                            }
                            else if (reader.Name == "string")
                            {
                                if (img_start && tag_start)
                                {
                                    tag_string = reader.ReadString().Trim();
                                }
                            }
                            break;
                        case XmlNodeType.Text: //Display the text in each element.
                            //Debug.WriteLine(reader.Value);
                            break;
                        case XmlNodeType.EndElement: //Display the end of the element.
                            //Debug.Write("</" + reader.Name);
                            //Debug.WriteLine(">");
                            if (reader.Name == "image") // its search->image element
                            {
                                //Debug.WriteLine("ending image");
                                img_start = false;
                                //now put image in container
                                /*
                                Debug.WriteLine("img_id: " + img_id);
                                Debug.WriteLine("img_rights: " + img_rights);
                                Debug.WriteLine("img_holder: " + img_holder);
                                Debug.WriteLine("img_url: " + img_url);
                                Debug.WriteLine("img_creator: " + img_creator);
                                Debug.WriteLine("img_height: " + img_height);
                                Debug.WriteLine("img_width: " + img_width);
                                Debug.WriteLine("img_prirority: " + img_prirority);
                                */
                                NOPSAImageHolder temp_img = new NOPSAImageHolder();
                                temp_img.img_source = source;
                                temp_img.img_id = img_id;
                                temp_img.img_rights = img_rights;
                                temp_img.img_holder = img_holder;
                                temp_img.img_url = img_url;
                                temp_img.img_creator = img_creator;
                                temp_img.img_height = img_height;
                                temp_img.img_width = img_width;
                                temp_img.img_prirority = img_prirority;

                                temp_img.tags = img_tags;
                                img_tags = new List<NOPSAImageTagHolder>();

                                images.Add(temp_img);

                                Debug.WriteLine("this is cm, source: " + source + " , url: " + img_url);
                            }
                            else if (reader.Name == "tag")
                            {
                                if (img_start)
                                {
                                    tag_start = false;
                                    //Debug.WriteLine("its tag closing");

                                    NOPSAImageTagHolder temp_tag_holder = new NOPSAImageTagHolder();
                                    temp_tag_holder.tag_id = tag_id;
                                    temp_tag_holder.tag_relevence = tag_relevence;
                                    temp_tag_holder.tag_string = tag_string;

                                    //Debug.WriteLine("id: "+tag_id);
                                    //Debug.WriteLine("relevence: "+tag_relevence);
                                    //Debug.WriteLine("string: " + tag_string);

                                    img_tags.Add(temp_tag_holder);
                                }
                            }

                            break;
                    }
                }
            }

            //Debug.WriteLine("some data processed");
            if (suggestions.Count != 0) // so it means the returned xml was from a suggestions query
            {
                Suggest_Data.sources.Add(source);
                Suggest_Data.suggestions.Add(suggestions);

                suc.ActiveControl.Invoke((MethodInvoker)delegate
                {
                    // runs on UI thread
                    suc.update_suggestions();
                });

            }
            else if (images.Count != 0)
            {
                //Debug.WriteLine("images arnt zero");
                Search_Data.sources.Add(source);
                Search_Data.images.Add(images);

                //WE MAY RUN SOME SHUFFLING ALGO HERE
                if (suc.InvokeRequired)
                {
                    suc.ActiveControl.Invoke(new MethodInvoker(delegate
                    {
                        suc.update_images();
                    }));
                }
                else
                {
                    suc.update_images();
                }

                /*
                suc.ActiveControl.Invoke((MethodInvoker)delegate
                {
                    // runs on UI thread
                    suc.update_images();
                });
                */
            }
            source = ""; //not required but helps in debugging
        }