public void CreateExampleAndSystemLayouts()
        {
            _TestSingleTon.Instance._SetupForLayoutPanelTests();

            System.Windows.Forms.Form form = new System.Windows.Forms.Form();
            form.Show();
            //form.Visible=false; NOPE Form has to be visible now!!!

            DefaultLayouts.CreateExampleLayout(form, null);
            DefaultLayouts.CreateASystemLayout(form, null);
            FAKE_SqlLiteDatabase db    = new FAKE_SqlLiteDatabase(LayoutDetails.Instance.YOM_DATABASE);
            NoteDataXML_Table    table = (NoteDataXML_Table)LayoutDetails.Instance.TableLayout.FindNoteByGuid("systemqueries");

            Assert.NotNull(table);
            Assert.AreEqual("name", table.Columns[1].ColumnName);


            string result = db.BackupDatabase();

            Assert.Greater(result.Length, 29000);
            //Assert.AreEqual(29971, result.Length);
            db.Dispose();
            // creates the example and system layouts
            // to catch if any popups or other oddities introduced
            //Assert.True (false);
        }
        public void ImportListTest_UnequalColumns()
        {
            _TestSingleTon.Instance._SetupForLayoutPanelTests();
            Form             form  = new Form();
            FAKE_LayoutPanel panel = new FAKE_LayoutPanel(CoreUtilities.Constants.BLANK, false);

            form.Controls.Add(panel);

            // needed else DataGrid does not initialize

            form.Show();
            form.Visible = false;

            //NOTE: For now remember that htis ADDS 1 Extra notes
            panel.NewLayout("mynewpanel", true, null);
            NoteDataXML_Table test = new NoteDataXML_Table(425, 380);

            test.GuidForNote = "thisguid1";
            test.Caption     = "note1";
            panel.SaveLayout();

            string[] newData = new string[3] {
                "1,col2,col3", "2,col2,col3", "3,col2,col3"
            };

            TableWrapper.ImportList(newData, (DataTable)test.dataSource);
            panel.SaveLayout();
            List <string> values = test.GetValuesForColumn(1, "*");

            Assert.AreEqual(3, values.Count);
            Assert.AreEqual("1,col2,col3", values[0]);
            form.Dispose();
        }
        public void GetListOfStringsInColumn()
        {        // nest several panels
            _SetupForLayoutPanelTests();
            Form             form  = new Form();
            FAKE_LayoutPanel panel = new FAKE_LayoutPanel(CoreUtilities.Constants.BLANK, false);

            form.Controls.Add(panel);

            // needed else DataGrid does not initialize
            form.Visible = false;
            form.Show();

            //NOTE: For now remember that htis ADDS 1 Extra notes
            panel.NewLayout("mynewpanel", true, null);
            NoteDataXML_Table test = new NoteDataXML_Table(425, 380);

            test.GuidForNote = "thisguid1";
            test.Caption     = "note1";
            panel.SaveLayout();
            //	test.Columns = new appframe.ColumnDetails[3] {new appframe.ColumnDetails("snakes", 109), new appframe.ColumnDetails("fish", 90), new appframe.ColumnDetails("goobers", 11111)};

            panel.AddNote(test);
            test.CreateParent(panel);
            _w.output("COLUMN " + test.Columns.Length.ToString());
            Assert.AreEqual(4, test.Columns.Length, "before save");

            // saving is deleting the columns?!
            panel.SaveLayout();
            Assert.AreEqual(4, test.Columns.Length, "after save");
            for (int i = 0; i < 4; i++)
            {
                switch (i)
                {
                case 0: Assert.AreEqual("Roll", test.Columns[i].ColumnName); break;

                case 1:  Assert.AreEqual("Result", test.Columns[i].ColumnName); break;

                case 2: Assert.AreEqual("Next Table", test.Columns[i].ColumnName); break;

                case 3:  Assert.AreEqual("Modifier", test.Columns[i].ColumnName); break;
                }
            }


// not sure what we are testin here [The default Columns?]
            // testing notedataxml_table
        }
        public void GetListOfStringsInColumn()
        {
            // nest several panels
            _SetupForLayoutPanelTests ();
            Form form = new Form();
            FAKE_LayoutPanel panel = new FAKE_LayoutPanel (CoreUtilities.Constants.BLANK, false);
            form.Controls.Add (panel);

            // needed else DataGrid does not initialize
            form.Visible = false;
            form.Show ();

            //NOTE: For now remember that htis ADDS 1 Extra notes
            panel.NewLayout ("mynewpanel", true, null);
            NoteDataXML_Table test = new NoteDataXML_Table (425, 380);
            test.GuidForNote = "thisguid1";
            test.Caption = "note1";
            panel.SaveLayout ();
            //	test.Columns = new appframe.ColumnDetails[3] {new appframe.ColumnDetails("snakes", 109), new appframe.ColumnDetails("fish", 90), new appframe.ColumnDetails("goobers", 11111)};

            panel.AddNote (test);
            test.CreateParent (panel);
            _w.output ("COLUMN "+test.Columns.Length.ToString());
            Assert.AreEqual (4, test.Columns.Length,"before save");

            // saving is deleting the columns?!
            panel.SaveLayout ();
            Assert.AreEqual (4, test.Columns.Length, "after save");
            for (int i = 0; i < 4; i ++)
            {
                switch (i)
                {
                case 0: Assert.AreEqual("Roll", test.Columns[i].ColumnName); break;
                case 1:  Assert.AreEqual("Result", test.Columns[i].ColumnName); break;
                case 2: Assert.AreEqual("Next Table", test.Columns[i].ColumnName); break;
                case 3:  Assert.AreEqual("Modifier", test.Columns[i].ColumnName); break;

                }
            }

            // not sure what we are testin here [The default Columns?]
            // testing notedataxml_table
        }
        /// <summary>
        /// Loads from the appropriate Data Location. If pass Layout as null this is a REMOTE NOTE load, meaning we are grabbing this information without
        ///    the layout being loaded into a LayoutPanel.
        /// </summary>
        /// <param name='GUID'>
        /// The unique identifier representing this Layout
        /// </param>
        /// <returns>
        /// <c>true</c>, if from was loaded, <c>false</c> otherwise.
        /// </returns>
        /// <param name='Layout'>
        /// 
        /// </param>
        public bool LoadFrom(LayoutPanelBase LayoutPanelToLoadNoteOnto)
        {
            BaseDatabase MyDatabase = CreateDatabase ();

            if (MyDatabase == null) {
                throw new Exception ("Unable to create database in LoadFrom");
            }
            bool Success = false;

            List<object[]> myList = null;
            // we only care about FIRST ROW. THere should never be two matches on a GUID
            TimeSpan time;
            time = CoreUtilities.TimerCore.Time (() => {
                myList = MyDatabase.GetValues (dbConstants.table_name, dbConstants.Columns
                                  , dbConstants.GUID, LayoutGUID);
            });
            lg.Instance.Line ("LayoutDatabase->LoadFrom", ProblemType.TIMING, String.Format ("GETVALUES for {0}  took {1}", this.ToString (), time));

            if (myList != null)
            {

                if (myList.Count > 0) {

                object[] result = myList [0];

                // result [0] =  id?
                // result [1] =  guid?
                // result [2] =  xm

                // deserialize from database and load into memor
                if (result != null && result.Length > 0) {

                    //
                    // LINK TABLE SECTION, start
                    //

                    // skip linktables if we are a child
                    // LayoutPanelToLoadNoteOnto will be null when doing searches, which mean swe should not
                    // try to load link tables, for sure.
                    if (false == IsSubPanel && LayoutPanelToLoadNoteOnto != null) {

                        // Deal with LINKTABLE first, as it causes complexity elsewhere
                        NoteDataXML_Table table = new NoteDataXML_Table ();
                        lg.Instance.Line ("LayoutDatabase->LoadFrom", ProblemType.MESSAGE, "LinkTableLoadData = " + result [dbConstants.LINKTABLE.Index].ToString ());
                        if (result [dbConstants.LINKTABLE.Index].ToString () != Constants.BLANK) {
                            time = CoreUtilities.TimerCore.Time (() => {
                                // Loading existing table
                                System.IO.StringReader LinkTableReader = new System.IO.StringReader (result [dbConstants.LINKTABLE.Index].ToString ());
                                System.Xml.Serialization.XmlSerializer LinkTableXML = new System.Xml.Serialization.XmlSerializer (typeof(NoteDataXML_Table));

                                table = (NoteDataXML_Table)LinkTableXML.Deserialize (LinkTableReader);
            //						if (table != null)
            //						{
            //							MyLinkTable.SetTable (table.dataSource);
            //						}
                                //NewMessage.Show("Loading a link table with GUID = " + table.GuidForNote);
                                LinkTableXML = null;
                                LinkTableReader.Close ();
                                LinkTableReader.Dispose ();
                            });
                            lg.Instance.Line ("LayoutDatabase->LoadFrom", ProblemType.TIMING, String.Format ("LINKTABLE for {0}  took {1}", this.ToString (), time));

                        }

                        time = CoreUtilities.TimerCore.Time (() => {
                            CreateLinkTableIfNecessary (table, LayoutPanelToLoadNoteOnto);
                        });
                        lg.Instance.Line ("LayoutDatabase->LoadFrom", ProblemType.TIMING, String.Format ("CREATELINKTABLE for {0}  took {1}", this.ToString (), time));
                    }
                    //
                    // LINK TABLE SECTION, end
                    //

                    time = CoreUtilities.TimerCore.Time (() => {
                        // Fill in LAYOUT specific details
                        Status = result [dbConstants.STATUS.Index].ToString ();
                        Name = result [dbConstants.NAME.Index].ToString ();
                        if (result [dbConstants.SHOWTABS.Index].ToString () != Constants.BLANK) {
                            ShowTabs = (bool)result [dbConstants.SHOWTABS.Index];
                        } else {
                            //ToDo: This does not seem growable easily
                            ShowTabs = true;
                        }
                        if (result [dbConstants.SUBPANEL.Index].ToString () != Constants.BLANK) {
                            IsSubPanel = (bool)result [dbConstants.SUBPANEL.Index];
                        } else {
                            IsSubPanel = false;
                        }
                        if (result [dbConstants.MAXIMIZETABS.Index].ToString () != Constants.BLANK) {
                            MaximizeTabs = (bool)result [dbConstants.MAXIMIZETABS.Index];
                        } else
                            MaximizeTabs = true;
                        int stars = 0;
                        if (Int32.TryParse (result [dbConstants.STARS.Index].ToString (), out stars) == false)
                            Stars = 0;
                        else
                            Stars = stars;
                        int hits = 0;
                        if (Int32.TryParse (result [dbConstants.HITS.Index].ToString (), out hits) == false)
                            Hits = 0;
                        else
                            Hits = hits;
                        DateTime date = DateTime.Now;
                        if (DateTime.TryParse (result [dbConstants.DATECREATED.Index].ToString (), out date) == false)
                            DateCreated = DateTime.Now;
                        else
                            DateCreated = date;
                        date = DateTime.Now;
                        if (DateTime.TryParse (result [dbConstants.DATEEDITED.Index].ToString (), out date) == false)
                            DateEdited = DateTime.Now;
                        else
                            DateEdited = date;
                        Notebook = result [dbConstants.NOTEBOOK.Index].ToString ();
                        Section = result [dbConstants.SECTION.Index].ToString ();
                        Subtype = result [dbConstants.TYPE.Index].ToString ();
                        Source = result [dbConstants.SOURCE.Index].ToString ();
                            string potentialBackColor = result [dbConstants.BACKGROUNDCOLOR.Index].ToString();
                            if (potentialBackColor != Constants.BLANK)
                            {
                                BackgroundColor = Color.FromArgb(Int32.Parse (potentialBackColor));
                            }
                            else
                            {
                                BackgroundColor = DefaultBackColor;
                            }

                        Blurb = result[dbConstants.BLURB.Index].ToString ();

                            ParentGuid = result[dbConstants.PARENT_GUID.Index].ToString();

                        int words = 0;
                        if (Int32.TryParse (result [dbConstants.WORDS.Index].ToString (), out words))
                            Words = words;
                        else
                            Words = 0;

                        Keywords = result [dbConstants.KEYWORDS.Index].ToString ();
                        // Fill in XML details
                    });
                    lg.Instance.Line ("LayoutDatabase->LoadFrom", ProblemType.TIMING, String.Format ("ASSIGNVALUES for {0}  took {1}", this.ToString (), time));
                    List<NoteDataXML> ListAsDataObjectsOfType = null;
                    time = CoreUtilities.TimerCore.Time (() => {
                        //dataForThisLayout
                        System.IO.StringReader reader = new System.IO.StringReader (result [dbConstants.XML.Index].ToString ());
                        System.Xml.Serialization.XmlSerializer test = new System.Xml.Serialization.XmlSerializer (typeof(System.Collections.Generic.List<NoteDataXML>),
                                                                                                             LayoutDetails.Instance.ListOfTypesToStoreInXML ());

                        try {
                            // have to load it in an as array of target type and then convert
                            if (result [dbConstants.XML.Index].ToString () != Constants.BLANK) {
                                ListAsDataObjectsOfType = (System.Collections.Generic.List<NoteDataXML>)test.Deserialize (reader);
                            } else {
                                lg.Instance.Line ("LayoutDatabase->LoadFrom", ProblemType.ERROR, String.Format ("For note '{0}' the XML was blank! This happens when there is a panel with no note in it. Not serious", Name));
                            }
                        } catch (System.InvalidOperationException e) {
                            string exception = e.ToString ();
                            int pos = exception.IndexOf ("name");
                            int pos2 = exception.IndexOf ("namespace");
                            if (pos2 < pos)
                                pos2 = pos + 1;
                            try {
                                string notetype = exception.Substring (pos, pos2 - pos - 2);
                                string message =
            Loc.Instance.Cat.GetStringFmt ("The notetype {0} was present in this Layout but not loaded in memory! This means that the AddIn used to add this note to this Layout has been removed. Loading of this layout is now aborted. Please exit this note and close it to prevent data loss and reinstall the disabled AddIn", notetype);
                                NewMessage.Show (message);
                            } catch (Exception) {
                                NewMessage.Show ("unknown error in LoadFrom");
                            }
                        } catch (Exception ex) {
                            throw new Exception (ex.ToString ());
                        }

                    });
                    lg.Instance.Line ("LayoutDatabase->LoadFrom", ProblemType.TIMING, String.Format ("DESERIALIZEALL for {0}  took {1}", this.ToString (), time));

                    if (null != ListAsDataObjectsOfType) {
                        dataForThisLayout = new List<NoteDataInterface> ();
                        time = CoreUtilities.TimerCore.Time (() => {
                            // need to add LinkTable back (since we have rebuilt the array!!)
                            // We want the LinkTable BEFORE the other notes are CreateParent'ed
                                if (false == IsSubPanel && null != LayoutPanelToLoadNoteOnto) {
                                if (MyLinkTableNote == null)
                                    NewMessage.Show ("LinkTableNote is null?? Is Layout Visible?");
                                dataForThisLayout.Add (MyLinkTableNote);
                                // always minimize the linktable note
                                //MyLinkTableNote.Minimize(true);
                                MyLinkTableNote.Visible = false;
                            }

                            for (int i = 0; i < ListAsDataObjectsOfType.Count; i++) {

                                dataForThisLayout.Add (ListAsDataObjectsOfType [i]);
                                if (null != LayoutPanelToLoadNoteOnto) {
                                    ListAsDataObjectsOfType [i].CreateParent (LayoutPanelToLoadNoteOnto);
                                }
                            }

                            Success = true;
                            debug_ObjectCount = ListAsDataObjectsOfType.Count;
                        });
                        lg.Instance.Line ("LayoutDatabase->LoadFrom", ProblemType.TIMING, String.Format ("COPYARRAYS for {0}  took {1}", this.LayoutGUID, time));
                    }
                }
                }
            } else {
                throw new Exception("Critical Error. Nothing was found to load on: " + this.ToString());
            }

            //long workingSet = System.Diagnostics.Process.GetCurrentProcess().WorkingSet64;
            //lg.Instance.Line("LoadFrom", ProblemType.TEMPORARY, workingSet.ToString());
            // we loaded this, so we increase the hits
            Hits++;
            return Success;
        }
        /// <summary>
        /// Creates the link table if necessary.
        /// Also handles all the hooking up events (i.e., Load will never need to create the table BUT does need the hookups)
        /// Called from Load and when a New Layout is created (LayoutPanel calls this)
        /// </summary>
        /// <param name='table'>
        /// Table.
        /// </param>
        public void CreateLinkTableIfNecessary(NoteDataXML_Table table, LayoutPanelBase LayoutPanelToLoadNoteOnto)
        {
            MyLinkTable = new LinkTable ();
            bool creatednew = false;
            // either no note was in data or it came out wrong, we build a new LinkTable
            if (table.GuidForNote != LinkTable.STICKY_TABLE) {

                lg.Instance.Line ("LayoutDatabase->CreateLinkTableIfNecessary", ProblemType.MESSAGE, String.Format ("Creating link table on '{0} Subpanel='{1}' ParenGUID='{2}', My GUID='{3}' Table GUID = '{4}'", this.Name, this.IsSubPanel,
                                                LayoutPanelToLoadNoteOnto.ParentGUID, this.LayoutGUID, table.GuidForNote));
            //	NewMessage.Show (String.Format ("Creating link table on '{0} Subpanel='{1}' ParenGUID='{2}', My GUID='{3}' Table GUID = '{4}'", this.Name, this.IsSubPanel,
            //	                                LayoutPanelToLoadNoteOnto.ParentGUID, this.LayoutGUID, table.GuidForNote));
                table = new NoteDataXML_Table ();
                table.ReadOnly = true;
                table.Caption = LinkTable.STICKY_TABLE;
                table.GuidForNote = LinkTable.STICKY_TABLE;
                table.dataSource = MyLinkTable.BuildNewTable ().Copy ();
                ((System.Data.DataTable)table.dataSource).TableName = CoreUtilities.Tables.TableWrapper.TablePageTableName;
            ///	table.Minimize();
                // Note Table must AddToStart so that it is instantiated Before any other notes

                // if we have to create a table we Assume that we can do a Convert too
                //newTableNeeded = true;

                //SaveTo ();
                creatednew = true;
            }

            AddToStart (table);

            if (null == LayoutPanelToLoadNoteOnto) {
                NewMessage.Show ("LayoutPanel was null 456 LayoutDatabase");
            }
            table.CreateParent(LayoutPanelToLoadNoteOnto);

            MyLinkTable.SetTable (table.dataSource);

            MyLinkTableNote = table;
            if (null == MyLinkTableNote) NewMessage.Show ("CreateLinkTable LinkTable Note is null");

            if (true == creatednew)
                table.Minimize();
        }
        public void TableSearch()
        {
            // the way filters work for tables is weird
            // and becaue it is weird I might tweak it later and this is a bad idea
            // so I'm writing this test to stop me from doing that

            _TestSingleTon.Instance._SetupForLayoutPanelTests();

            System.Windows.Forms .Form form = new System.Windows.Forms.Form();

            // needed else DataGrid does not initialize

            form.Show ();
            //form.Visible = false;
            _w.output("boom");
            // March 2013 -- notelist relies on having this
            YOM2013.DefaultLayouts.CreateASystemLayout(form,null);

            //NOTE: For now remember that htis ADDS 1 Extra notes

            string panelname2 = System.Guid.NewGuid().ToString();
            FAKE_LayoutPanel  PanelOtherGuy= new FAKE_LayoutPanel (CoreUtilities.Constants.BLANK, false);
            PanelOtherGuy.NewLayout (panelname2,true, null);
            form.Controls.Add (PanelOtherGuy);
            PanelOtherGuy.SaveLayout();

            Assert.AreEqual( 2, PanelOtherGuy.CountNotes(), "count1");

            // ADD 1 of each type
            //foreach (Type t in LayoutDetails.Instance.ListOfTypesToStoreInXML())

            NoteDataXML_Table table =  new NoteDataXML_Table(100, 100,new ColumnDetails[3]{new ColumnDetails("id",100),
                new ColumnDetails("tables",100),
                new ColumnDetails("values",220)} );
            table.GuidForNote="thetable";
            table.Caption="thettable2";

            PanelOtherGuy.AddNote (table);
            table.CreateParent(PanelOtherGuy);

            //	table.UpdateAfterLoad();

            table.AddRow(new object[3] {"0", "table1", "value1"});
            table.AddRow(new object[3] {"0", "table2", "value2"});
            table.AddRow(new object[3] {"0", "table3", "value3"});
            table.AddRow(new object[3] {"0", "table4", "value4"});

            PanelOtherGuy.SaveLayout();
            Assert.AreEqual( 3, PanelOtherGuy.CountNotes(), "count2");
            string ToSearchFor = "table3";

            // looks in row 1 for the value and will return the value from row 2
            List<string> results  = PanelOtherGuy.GetListOfStringsFromSystemTable("thettable2", 2, String.Format ("1|{0}", ToSearchFor));
            Assert.NotNull(results);
            Assert.AreEqual (1, results.Count);
            Assert.AreEqual ("value3", results[0]);

            ToSearchFor ="bacon";
            results  = PanelOtherGuy.GetListOfStringsFromSystemTable("thettable2", 2, String.Format ("1|{0}", ToSearchFor));
            Assert.NotNull(results);
            Assert.AreEqual (0, results.Count);

            ToSearchFor ="0";
            results  = PanelOtherGuy.GetListOfStringsFromSystemTable("thettable2", 1, String.Format ("0|{0}", ToSearchFor));
            Assert.NotNull(results);
            Assert.AreEqual (4, results.Count);
        }
        public void GetValuesForTable()
        {
            _SetupForLayoutPanelTests ();
            Form form = new Form();
            FAKE_LayoutPanel panel = new FAKE_LayoutPanel (CoreUtilities.Constants.BLANK, false);
            form.Controls.Add (panel);

            // needed else DataGrid does not initialize
            form.Visible = false;
            form.Show ();
            //NOTE: For now remember that htis ADDS 1 Extra notes
            panel.NewLayout ("mynewpanel", true, null);
            NoteDataXML_Table test = new NoteDataXML_Table (425, 380);
            test.GuidForNote = "thisguid1";
            test.Caption = "note1";

            test.Columns = new ColumnDetails[3] {
                new ColumnDetails ("snakes", 109),
                new ColumnDetails ("fish", 90),
                new ColumnDetails ("goobers", 11111)
            };
            test.AddRow(new object[3] {"1", "value1", "testA"});
            test.AddRow(new object[3] {"2", "value2", "testB"});
            test.AddRow(new object[3] {"3", "value3", "testC"});

            panel.AddNote (test);
            test.CreateParent (panel);
            panel.SaveLayout ();
            List<string> cols = test.GetValuesForColumn (1,"*");
            for (int i = 0; i <3; i++) {
                switch (i)
                {
                case 0: Assert.AreEqual(cols[i], "value1"); break;
                case 1:Assert.AreEqual(cols[i], "value2"); break;
                case 2: Assert.AreEqual(cols[i], "value3"); break;
                }
            }
            cols = test.GetValuesForColumn (2,"*");
            for (int i = 0; i <3; i++) {
                switch (i)
                {
                case 0: Assert.AreEqual(cols[i], "testA"); break;
                case 1:Assert.AreEqual(cols[i], "testB"); break;
                case 2: Assert.AreEqual(cols[i], "testC"); break;
                }
            }
        }
        public static void CreateASystemLayout(Control parent, ContextMenuStrip textEditorContextStrip)
        {
            LayoutPanel SystemLayout = new Layout.LayoutPanel(CoreUtilities.Constants.BLANK, true);

            SystemLayout.NewLayout("system", false, textEditorContextStrip);
            SystemLayout.BackColor = System.Drawing.Color.Wheat;
            SystemLayout.SetName(Loc.Instance.GetString("system"));
            SystemLayout.Parent  = parent;
            SystemLayout.Visible = true;



            NoteDataXML_Panel sidedockpanel = new NoteDataXML_Panel(800, 300);

            sidedockpanel.GuidForNote = LayoutDetails.SIDEDOCK;             //"system_sidedock";
            SystemLayout.AddNote(sidedockpanel);
            sidedockpanel.CreateParent(SystemLayout);



            sidedockpanel.BringToFrontAndShow();
            sidedockpanel.Dock = DockStyle.Left;

            //
            //------Subpanel
            //
            NoteDataXML_Panel subpanel = new NoteDataXML_Panel(100, 100);

            //subpanel.Save();
            //sidedockpanel.Save();
            //* important

            subpanel.GuidForNote = LayoutDetails.TABLEGUID;
            subpanel.Caption     = Loc.Instance.GetString("Tables");


            sidedockpanel.AddNote(subpanel);
            subpanel.CreateParent(sidedockpanel.GetPanelsLayout());



            NoteDataXML_Table randomTables = new NoteDataXML_Table(100, 100, new ColumnDetails[2] {
                new ColumnDetails("id", 100), new ColumnDetails("tables", 100)
            });

            randomTables.Caption = LayoutDetails.SYSTEM_RANDOM_TABLES;
            //	randomTables.Columns = new appframe.ColumnDetails[2]{new appframe.ColumnDetails("id",100), new appframe.ColumnDetails("tables",100)};



            subpanel.AddNote(randomTables);
            randomTables.CreateParent(subpanel.GetPanelsLayout());


            randomTables.AddRow(new object[2] {
                "1", "example|colors"
            });
            randomTables.AddRow(new object[2] {
                "2", "example|colorPROMPTS"
            });
            SystemLayout.SaveLayout();

            randomTables = new NoteDataXML_Table(100, 100, new ColumnDetails[3] {
                new ColumnDetails("id", 100),
                new ColumnDetails("notebooks", 100),
                new ColumnDetails("sections", 200)
            });
            randomTables.Caption = LayoutDetails.SYSTEM_NOTEBOOKS;
//			randomTables.Columns = new appframe.ColumnDetails[3]{new appframe.ColumnDetails("id",100),
//				new appframe.ColumnDetails("notebooks",100),
//				new appframe.ColumnDetails("sections",200)};


            subpanel.AddNote(randomTables);
            randomTables.CreateParent(subpanel.GetPanelsLayout());

            randomTables.AddRow(new object[3] {
                "1", Loc.Instance.GetString("Writing"), Loc.Instance.GetString("All|Advice|Characters|Markets|Projects|Scenes")
            });
            randomTables.AddRow(new object[3] {
                "2", Loc.Instance.GetString("Research"), Loc.Instance.GetString("All|Historical|Science")
            });
            randomTables.AddRow(new object[3] {
                "3", Loc.Instance.GetString("All"), Loc.Instance.GetString("All")
            });



            ///
            /// -- STATUS
            ///
            randomTables = new NoteDataXML_Table(100, 100, new ColumnDetails[2] {
                new ColumnDetails("id", 100),
                new ColumnDetails("status", 100)
            });
            randomTables.Caption = LayoutDetails.SYSTEM_STATUS;
            //	randomTables.Columns = new appframe.ColumnDetails[2]{new appframe.ColumnDetails("id",100),
            //		new appframe.ColumnDetails("status",100)};

            subpanel.AddNote(randomTables);
            randomTables.CreateParent(subpanel.GetPanelsLayout());

            randomTables.AddRow(new object[2] {
                "1", Loc.Instance.GetString("0 Not Started")
            });
            randomTables.AddRow(new object[2] {
                "2", Loc.Instance.GetString("1 Planning")
            });
            randomTables.AddRow(new object[2] {
                "3", Loc.Instance.GetString("2 Writing")
            });
            randomTables.AddRow(new object[2] {
                "4", Loc.Instance.GetString("3 Rewriting")
            });
            randomTables.AddRow(new object[2] {
                "5", Loc.Instance.GetString("4 Complete")
            });
            randomTables.AddRow(new object[2] {
                "6", Loc.Instance.GetString("5 Accepted")
            });
            randomTables.AddRow(new object[2] {
                "7", Loc.Instance.GetString("6 Published")
            });
            randomTables.AddRow(new object[2] {
                "8", Loc.Instance.GetString("7 Republished on personal site")
            });
            randomTables.AddRow(new object[2] {
                "9", Loc.Instance.GetString("8 Selfpublished")
            });
            //	NewMessage.Show (randomTables.RowCount().ToString ());
            randomTables.AddRow(new object[2] {
                "10", Loc.Instance.GetString("9 Retired")
            });

            //	NewMessage.Show (randomTables.RowCount().ToString ());


            ///
            /// -- SUBTYPES
            ///
            ///
            ///
            randomTables = new NoteDataXML_Table(100, 100, new ColumnDetails[2] {
                new ColumnDetails("id", 100),
                new ColumnDetails("subtype", 100)
            });
            randomTables.Caption = LayoutDetails.SYSTEM_SUBTYPE;
            //		randomTables.Columns = new appframe.ColumnDetails[2]{new appframe.ColumnDetails("id",100),
            //		new appframe.ColumnDetails("subtype",100)};
            subpanel.AddNote(randomTables);
            randomTables.CreateParent(subpanel.GetPanelsLayout());

            randomTables.AddRow(new object[2] {
                "1", Loc.Instance.GetString("Article")
            });
            randomTables.AddRow(new object[2] {
                "2", Loc.Instance.GetString("Idea")
            });
            randomTables.AddRow(new object[2] {
                "3", Loc.Instance.GetString("Novel")
            });
            randomTables.AddRow(new object[2] {
                "4", Loc.Instance.GetString("Play")
            });
            randomTables.AddRow(new object[2] {
                "5", Loc.Instance.GetString("Story")
            });

            ///
            /// -- KEYWORDS
            ///
            ///
            ///
            randomTables = new NoteDataXML_Table(100, 100, new ColumnDetails[2] {
                new ColumnDetails("id", 100),
                new ColumnDetails("keyword", 100)
            });
            randomTables.Caption = LayoutDetails.SYSTEM_KEYWORDS;
            //	randomTables.Columns = new appframe.ColumnDetails[2]{new appframe.ColumnDetails("id",100),
            //		new appframe.ColumnDetails("keyword",100)};
            subpanel.AddNote(randomTables);
            randomTables.CreateParent(subpanel.GetPanelsLayout());

            randomTables.AddRow(new object[2] {
                "1", Loc.Instance.GetString("Brainstorm")
            });
            randomTables.AddRow(new object[2] {
                "2", Loc.Instance.GetString("Horror")
            });
            randomTables.AddRow(new object[2] {
                "3", Loc.Instance.GetString("Fantasy")
            });
            randomTables.AddRow(new object[2] {
                "4", Loc.Instance.GetString("SciFi")
            });
            randomTables.AddRow(new object[2] {
                "5", Loc.Instance.GetString("WhatIf?")
            });



            ///
            /// -- WORKLOG
            ///
            ///
            ///
//			randomTables = new NoteDataXML_Table(100, 100, new ColumnDetails[2]{new ColumnDetails("id",100),
//				new ColumnDetails("category",100)});
//			randomTables.Caption = LayoutDetails.SYSTEM_WORKLOGCATEGORY;
//		//	randomTables.Columns = new appframe.ColumnDetails[2]{new appframe.ColumnDetails("id",100),
//		//		new appframe.ColumnDetails("category",100)};
//			subpanel.AddNote(randomTables);
//			randomTables.CreateParent(subpanel.GetPanelsLayout ());
//
//			randomTables.AddRow(new object[2]{"1", Loc.Instance.GetString("Writing")});
//			randomTables.AddRow(new object[2]{"2", Loc.Instance.GetString("Editing")});
//			randomTables.AddRow(new object[2]{"3", Loc.Instance.GetString("Planning")});


            ///
            /// -- Grammar
            ///
            ///
            ///
//			randomTables = new NoteDataXML_Table(100, 100 , new ColumnDetails[4]{new ColumnDetails("id",100),
//				new ColumnDetails("pattern",100), new ColumnDetails("advice",100), new ColumnDetails("overused",100)});
//			randomTables.Caption = LayoutDetails.SYSTEM_GRAMMAR;
//		//	randomTables.Columns = new appframe.ColumnDetails[4]{new appframe.ColumnDetails("id",100),
//		//		new appframe.ColumnDetails("pattern",100), new appframe.ColumnDetails("advice",100), new appframe.ColumnDetails("overused",100)};
//			subpanel.AddNote(randomTables);
//			randomTables.CreateParent(subpanel.GetPanelsLayout ());
//
//			randomTables.AddRow(new object[4]{
//				"1", "1.0", @"The first row of this table is a version number. Feel free to edit it when major changes are made to this list. On each Layout you can record the last grammar version you have checked it against.", "0"}
//			);
//
//			randomTables.AddRow(new object[4]{
//				"2", "Among", @"When more than two things or persons are involved, among is usually called for.", "0"}
//			);
//			randomTables.AddRow(new object[4]{
//				"3", "As to whether", @"Whether is sufficient.", "1"}
//			);


            ///
            /// -- Queries
            ///
            ///
            ///
            randomTables = new NoteDataXML_Table(100, 100, new ColumnDetails[3] {
                new ColumnDetails("id", 100),
                new ColumnDetails("name", 100), new ColumnDetails("query", 100)
            });
            randomTables.GuidForNote = "systemqueries";
            randomTables.Caption     = LayoutDetails.SYSTEM_QUERIES;
            //		randomTables.Columns = new appframe.ColumnDetails[3]{new appframe.ColumnDetails("id",100),
            //			new appframe.ColumnDetails("name",100), new appframe.ColumnDetails("query",100)};
            subpanel.AddNote(randomTables);
            randomTables.CreateParent(subpanel.GetPanelsLayout());


            randomTables.AddRow(new object[3] {
                "1", "All", @""
            }
                                );
            randomTables.AddRow(new object[3] {
                "2", "WritingProjects", @"notebook='Writing' and section='Projects'"
            }
                                );


            //  be created by those AddIns.
            ///
            /// -- SUBMISSION -- most submission stuff needs to be in Submission AddIn but these two (for load reasons) are here. Sorry.
            ///
            ///
            ///
            /// 1. Publish Types (electronic or print)
            ///
            ///
//			randomTables = new NoteDataXML_Table(100, 100, new ColumnDetails[2]{new ColumnDetails("id",100),
//				new ColumnDetails("category",100)});
//			randomTables.Caption = LayoutDetails.SYSTEM_PUBLISHTYPES;
//			//	randomTables.Columns = new appframe.ColumnDetails[2]{new appframe.ColumnDetails("id",100),
//			//		new appframe.ColumnDetails("category",100)};
//			subpanel.AddNote(randomTables);
//			randomTables.CreateParent(subpanel.GetPanelsLayout ());
//
//			randomTables.AddRow(new object[2]{"1", Loc.Instance.GetString("Both")});
//			randomTables.AddRow(new object[2]{"2", Loc.Instance.GetString("Electronic")});
//			randomTables.AddRow(new object[2]{"3", Loc.Instance.GetString("None")});
//			randomTables.AddRow(new object[2]{"4", Loc.Instance.GetString("Print")});

            ///
            /// 2. Market Types (pay category)
            ///
            ///
//			randomTables = new NoteDataXML_Table(100, 100, new ColumnDetails[2]{new ColumnDetails("id",100),
//				new ColumnDetails("category",100)});
//			randomTables.Caption = LayoutDetails.SYSTEM_MARKETTYPES;
//			//	randomTables.Columns = new appframe.ColumnDetails[2]{new appframe.ColumnDetails("id",100),
//			//		new appframe.ColumnDetails("category",100)};
//			subpanel.AddNote(randomTables);
//			randomTables.CreateParent(subpanel.GetPanelsLayout ());
//
//			randomTables.AddRow(new object[2]{"1", Loc.Instance.GetString("Non Paying")});
//			randomTables.AddRow(new object[2]{"2", Loc.Instance.GetString("None")});
//			randomTables.AddRow(new object[2]{"3", Loc.Instance.GetString("Semi-Pro")});
//			randomTables.AddRow(new object[2]{"4", Loc.Instance.GetString("Small Press (Token)")});
//			randomTables.AddRow(new object[2]{"5", Loc.Instance.GetString("Pro Market")});

            SystemLayout.SaveLayout();
            // note list needs to be at the end March 2013 but creatio happens earlier so it is the defautl viewed note
            // so we build it later


            NoteDataXML_NoteList list = new NoteDataXML_NoteList();

            list.GuidForNote = "notelist";
            sidedockpanel.AddNote(list);

            list.CreateParent(sidedockpanel.GetPanelsLayout());
            list.Mode = NoteDataXML_NoteList.Modes.LAYOUTS;


            list.Dock = DockStyle.Fill;


            SystemLayout.SaveLayout();
            list.Refresh();
            SystemLayout.Dispose();
        }
        protected override void DoBuildChildren(LayoutPanelBase Layout)
        {
            // Unable to BUILD A SYSTEM TABLE here. It is a copy, not a link to the actual table
            // and hence does not work.
            // Instead I will try under Register; see my logic for why, there
            // We create the table when registering type.
            // The LOGIC I am using is that this will be called when the user
            // clicks the FIRST TIME to register the type. Meaning the table is created.

            // WHERE IT FAILS: If the user deletes the table manually, it will never attempt to recreate it, unless
            // Addin deregistered and reregisetered
            string TableName = SYSTEM_WORKLOGCATEGORY;
            LayoutPanels.NoteDataXML_Panel PanelContainingTables = LayoutPanel.GetPanelToAddTableTo (TableName);
            BringToFrontAndShow ();
            // can't use TableLayout because its not the actual tablelayout (its a copy)
            if (PanelContainingTables != null) {

                // create the note
                NoteDataXML_Table randomTables = new NoteDataXML_Table (100, 100, new ColumnDetails[2]{new ColumnDetails ("id", 100),
                        new ColumnDetails ("category", 100)});
                randomTables.Caption = TableName;

                PanelContainingTables.AddNote (randomTables);
                randomTables.CreateParent (PanelContainingTables.GetPanelsLayout ());

                randomTables.AddRow (new object[2]{"1", Loc.Instance.GetString ("Writing")});
                randomTables.AddRow (new object[2]{"2", Loc.Instance.GetString ("Editing")});
                randomTables.AddRow (new object[2]{"3", Loc.Instance.GetString ("Planning")});
                //		LayoutDetails.Instance.TableLayout.SaveLayout();
                PanelContainingTables.GetPanelsLayout ().SaveLayout ();
                //NewMessage.Show("Making new");
                // now we reload the system version
                LayoutDetails.Instance.TableLayout.LoadLayout (LayoutDetails.TABLEGUID, true, null);
                BringToFrontAndShow ();
            }

            base.DoBuildChildren (Layout);
            properties.DropDownItems.Add (new ToolStripSeparator ());
            CaptionLabel.Dock = DockStyle.Top;

             Journal = new JournalPanel(this.Layout.GUID, BringFrontWrapper);
            Journal.Dock = DockStyle.Fill;
            //Journal.Click+= (object sender, EventArgs e) => BringToFrontAndShow();

            ParentNotePanel.Controls.Add (Journal);

            Journal.BringToFront();
            Journal.RefreshPanels("");
        }
        public static void CreateASystemLayout(Control parent, ContextMenuStrip textEditorContextStrip)
        {
            LayoutPanel SystemLayout = new Layout.LayoutPanel (CoreUtilities.Constants.BLANK, true);
            SystemLayout.NewLayout ("system" ,false, textEditorContextStrip);
            SystemLayout.BackColor = System.Drawing.Color.Wheat;
            SystemLayout.SetName (Loc.Instance.GetString("system"));
            SystemLayout.Parent = parent;
            SystemLayout.Visible = true;

            NoteDataXML_Panel sidedockpanel = new NoteDataXML_Panel(800,300);
            sidedockpanel.GuidForNote = LayoutDetails.SIDEDOCK; //"system_sidedock";
            SystemLayout.AddNote(sidedockpanel);
            sidedockpanel.CreateParent(SystemLayout);

            sidedockpanel.BringToFrontAndShow();
            sidedockpanel.Dock = DockStyle.Left;

            //
            //------Subpanel
            //
            NoteDataXML_Panel subpanel = new NoteDataXML_Panel(100,100);

            //subpanel.Save();
            //sidedockpanel.Save();
            //* important

            subpanel.GuidForNote = LayoutDetails.TABLEGUID;
            subpanel.Caption = Loc.Instance.GetString("Tables");

            sidedockpanel.AddNote(subpanel);
            subpanel.CreateParent(sidedockpanel.GetPanelsLayout());

            NoteDataXML_Table randomTables = new NoteDataXML_Table(100, 100,new ColumnDetails[2]{new ColumnDetails("id",100), new ColumnDetails("tables",100)} );
            randomTables.Caption = LayoutDetails.SYSTEM_RANDOM_TABLES;
            //	randomTables.Columns = new appframe.ColumnDetails[2]{new appframe.ColumnDetails("id",100), new appframe.ColumnDetails("tables",100)};

            subpanel.AddNote(randomTables);
            randomTables.CreateParent(subpanel.GetPanelsLayout());

            randomTables.AddRow(new object[2]{"1", "example|colors"});
            randomTables.AddRow(new object[2]{"2", "example|colorPROMPTS"});
            SystemLayout.SaveLayout ();

            randomTables = new NoteDataXML_Table(100, 100, new ColumnDetails[3]{new ColumnDetails("id",100),
                new ColumnDetails("notebooks",100),
                new ColumnDetails("sections",200)});
            randomTables.Caption = LayoutDetails.SYSTEM_NOTEBOOKS;
            //			randomTables.Columns = new appframe.ColumnDetails[3]{new appframe.ColumnDetails("id",100),
            //				new appframe.ColumnDetails("notebooks",100),
            //				new appframe.ColumnDetails("sections",200)};

            subpanel.AddNote(randomTables);
            randomTables.CreateParent (subpanel.GetPanelsLayout ());

            randomTables.AddRow(new object[3]{"1", Loc.Instance.GetString("Writing"), Loc.Instance.GetString("All|Advice|Characters|Markets|Projects|Scenes")});
            randomTables.AddRow(new object[3]{"2", Loc.Instance.GetString("Research"), Loc.Instance.GetString("All|Historical|Science")});
            randomTables.AddRow(new object[3]{"3", Loc.Instance.GetString("All"), Loc.Instance.GetString("All")});

            ///
            /// -- STATUS
            ///
            randomTables = new NoteDataXML_Table(100, 100, new ColumnDetails[2]{new ColumnDetails("id",100),
                new ColumnDetails("status",100)});
            randomTables.Caption = LayoutDetails.SYSTEM_STATUS;
            //	randomTables.Columns = new appframe.ColumnDetails[2]{new appframe.ColumnDetails("id",100),
            //		new appframe.ColumnDetails("status",100)};

            subpanel.AddNote(randomTables);
            randomTables.CreateParent(subpanel.GetPanelsLayout());

            randomTables.AddRow(new object[2]{"1", Loc.Instance.GetString("0 Not Started")});
            randomTables.AddRow(new object[2]{"2", Loc.Instance.GetString("1 Planning")});
            randomTables.AddRow(new object[2]{"3", Loc.Instance.GetString("2 Writing")});
            randomTables.AddRow(new object[2]{"4", Loc.Instance.GetString("3 Rewriting")});
            randomTables.AddRow(new object[2]{"5", Loc.Instance.GetString("4 Complete")});
            randomTables.AddRow(new object[2]{"6", Loc.Instance.GetString("5 Accepted")});
            randomTables.AddRow(new object[2]{"7", Loc.Instance.GetString("6 Published")});
            randomTables.AddRow(new object[2]{"8", Loc.Instance.GetString("7 Republished on personal site")});
            randomTables.AddRow(new object[2]{"9", Loc.Instance.GetString("8 Selfpublished")});
            //	NewMessage.Show (randomTables.RowCount().ToString ());
            randomTables.AddRow(new object[2]{"10", Loc.Instance.GetString("9 Retired")});

            //	NewMessage.Show (randomTables.RowCount().ToString ());

            ///
            /// -- SUBTYPES
            ///
            ///
            ///
            randomTables = new NoteDataXML_Table(100, 100, new ColumnDetails[2]{new ColumnDetails("id",100),
                new ColumnDetails("subtype",100)});
            randomTables.Caption = LayoutDetails.SYSTEM_SUBTYPE;
            //		randomTables.Columns = new appframe.ColumnDetails[2]{new appframe.ColumnDetails("id",100),
            //		new appframe.ColumnDetails("subtype",100)};
            subpanel.AddNote(randomTables);
            randomTables.CreateParent(subpanel.GetPanelsLayout());

            randomTables.AddRow(new object[2]{"1", Loc.Instance.GetString("Article")});
            randomTables.AddRow(new object[2]{"2", Loc.Instance.GetString("Idea")});
            randomTables.AddRow(new object[2]{"3", Loc.Instance.GetString("Novel")});
            randomTables.AddRow(new object[2]{"4", Loc.Instance.GetString("Play")});
            randomTables.AddRow(new object[2]{"5", Loc.Instance.GetString("Story")});

            ///
            /// -- KEYWORDS
            ///
            ///
            ///
            randomTables = new NoteDataXML_Table(100, 100,  new ColumnDetails[2]{new ColumnDetails("id",100),
                new ColumnDetails("keyword",100)});
            randomTables.Caption = LayoutDetails.SYSTEM_KEYWORDS;
            //	randomTables.Columns = new appframe.ColumnDetails[2]{new appframe.ColumnDetails("id",100),
            //		new appframe.ColumnDetails("keyword",100)};
            subpanel.AddNote(randomTables);
            randomTables.CreateParent(subpanel.GetPanelsLayout ());

            randomTables.AddRow(new object[2]{"1", Loc.Instance.GetString("Brainstorm")});
            randomTables.AddRow(new object[2]{"2", Loc.Instance.GetString("Horror")});
            randomTables.AddRow(new object[2]{"3", Loc.Instance.GetString("Fantasy")});
            randomTables.AddRow(new object[2]{"4", Loc.Instance.GetString("SciFi")});
            randomTables.AddRow(new object[2]{"5", Loc.Instance.GetString("WhatIf?")});

            ///
            /// -- WORKLOG
            ///
            ///
            ///
            //			randomTables = new NoteDataXML_Table(100, 100, new ColumnDetails[2]{new ColumnDetails("id",100),
            //				new ColumnDetails("category",100)});
            //			randomTables.Caption = LayoutDetails.SYSTEM_WORKLOGCATEGORY;
            //		//	randomTables.Columns = new appframe.ColumnDetails[2]{new appframe.ColumnDetails("id",100),
            //		//		new appframe.ColumnDetails("category",100)};
            //			subpanel.AddNote(randomTables);
            //			randomTables.CreateParent(subpanel.GetPanelsLayout ());
            //
            //			randomTables.AddRow(new object[2]{"1", Loc.Instance.GetString("Writing")});
            //			randomTables.AddRow(new object[2]{"2", Loc.Instance.GetString("Editing")});
            //			randomTables.AddRow(new object[2]{"3", Loc.Instance.GetString("Planning")});

            ///
            /// -- Grammar
            ///
            ///
            ///
            //			randomTables = new NoteDataXML_Table(100, 100 , new ColumnDetails[4]{new ColumnDetails("id",100),
            //				new ColumnDetails("pattern",100), new ColumnDetails("advice",100), new ColumnDetails("overused",100)});
            //			randomTables.Caption = LayoutDetails.SYSTEM_GRAMMAR;
            //		//	randomTables.Columns = new appframe.ColumnDetails[4]{new appframe.ColumnDetails("id",100),
            //		//		new appframe.ColumnDetails("pattern",100), new appframe.ColumnDetails("advice",100), new appframe.ColumnDetails("overused",100)};
            //			subpanel.AddNote(randomTables);
            //			randomTables.CreateParent(subpanel.GetPanelsLayout ());
            //
            //			randomTables.AddRow(new object[4]{
            //				"1", "1.0", @"The first row of this table is a version number. Feel free to edit it when major changes are made to this list. On each Layout you can record the last grammar version you have checked it against.", "0"}
            //			);
            //
            //			randomTables.AddRow(new object[4]{
            //				"2", "Among", @"When more than two things or persons are involved, among is usually called for.", "0"}
            //			);
            //			randomTables.AddRow(new object[4]{
            //				"3", "As to whether", @"Whether is sufficient.", "1"}
            //			);

            ///
            /// -- Queries
            ///
            ///
            ///
            randomTables = new NoteDataXML_Table(100, 100, new ColumnDetails[3]{new ColumnDetails("id",100),
                new ColumnDetails("name",100), new ColumnDetails("query",100)});
            randomTables.GuidForNote ="systemqueries";
            randomTables.Caption = LayoutDetails.SYSTEM_QUERIES;
            //		randomTables.Columns = new appframe.ColumnDetails[3]{new appframe.ColumnDetails("id",100),
            //			new appframe.ColumnDetails("name",100), new appframe.ColumnDetails("query",100)};
            subpanel.AddNote(randomTables);
            randomTables.CreateParent(subpanel.GetPanelsLayout ());

            randomTables.AddRow(new object[3]{
                "1", "All", @""}
            );
            randomTables.AddRow(new object[3]{
                "2", "WritingProjects", @"notebook='Writing' and section='Projects'"}
            );

            //  be created by those AddIns.
            ///
            /// -- SUBMISSION -- most submission stuff needs to be in Submission AddIn but these two (for load reasons) are here. Sorry.
            ///
            ///
            ///
            /// 1. Publish Types (electronic or print)
            ///
            ///
            //			randomTables = new NoteDataXML_Table(100, 100, new ColumnDetails[2]{new ColumnDetails("id",100),
            //				new ColumnDetails("category",100)});
            //			randomTables.Caption = LayoutDetails.SYSTEM_PUBLISHTYPES;
            //			//	randomTables.Columns = new appframe.ColumnDetails[2]{new appframe.ColumnDetails("id",100),
            //			//		new appframe.ColumnDetails("category",100)};
            //			subpanel.AddNote(randomTables);
            //			randomTables.CreateParent(subpanel.GetPanelsLayout ());
            //
            //			randomTables.AddRow(new object[2]{"1", Loc.Instance.GetString("Both")});
            //			randomTables.AddRow(new object[2]{"2", Loc.Instance.GetString("Electronic")});
            //			randomTables.AddRow(new object[2]{"3", Loc.Instance.GetString("None")});
            //			randomTables.AddRow(new object[2]{"4", Loc.Instance.GetString("Print")});

            ///
            /// 2. Market Types (pay category)
            ///
            ///
            //			randomTables = new NoteDataXML_Table(100, 100, new ColumnDetails[2]{new ColumnDetails("id",100),
            //				new ColumnDetails("category",100)});
            //			randomTables.Caption = LayoutDetails.SYSTEM_MARKETTYPES;
            //			//	randomTables.Columns = new appframe.ColumnDetails[2]{new appframe.ColumnDetails("id",100),
            //			//		new appframe.ColumnDetails("category",100)};
            //			subpanel.AddNote(randomTables);
            //			randomTables.CreateParent(subpanel.GetPanelsLayout ());
            //
            //			randomTables.AddRow(new object[2]{"1", Loc.Instance.GetString("Non Paying")});
            //			randomTables.AddRow(new object[2]{"2", Loc.Instance.GetString("None")});
            //			randomTables.AddRow(new object[2]{"3", Loc.Instance.GetString("Semi-Pro")});
            //			randomTables.AddRow(new object[2]{"4", Loc.Instance.GetString("Small Press (Token)")});
            //			randomTables.AddRow(new object[2]{"5", Loc.Instance.GetString("Pro Market")});

            SystemLayout.SaveLayout ();
            // note list needs to be at the end March 2013 but creatio happens earlier so it is the defautl viewed note
            // so we build it later

            NoteDataXML_NoteList list = new NoteDataXML_NoteList();
            list.GuidForNote = "notelist";
            sidedockpanel.AddNote(list);

            list.CreateParent(sidedockpanel.GetPanelsLayout());
            list.Mode = NoteDataXML_NoteList.Modes.LAYOUTS;

            list.Dock = DockStyle.Fill;

            SystemLayout.SaveLayout ();
            list.Refresh();
            SystemLayout.Dispose ();
        }
        /// <summary>
        /// Creates the example layout. For new users.
        /// </summary>
        /// <returns>
        /// The example layout.
        /// </returns>
        /// <param name='parent'>
        /// Parent.
        /// </param>
        public static void CreateExampleLayout(Control parent, ContextMenuStrip TextEditMenuStrip)
        {
            LayoutPanel exampleLayout = new Layout.LayoutPanel (CoreUtilities.Constants.BLANK, true);
            exampleLayout.NewLayout ("example" ,false, TextEditMenuStrip);

            exampleLayout.Parent = parent;
            exampleLayout.Visible = true;

            exampleLayout.SetName (Loc.Instance.GetString("example"));

            const int columns = 3;

            NoteDataXML_Table randomTables = new NoteDataXML_Table();
            randomTables.Columns = new ColumnDetails[columns]{new ColumnDetails(TableWrapper.Roll,100), new ColumnDetails(TableWrapper.Result,100)
            ,new ColumnDetails(TableWrapper.NextTable, 100)};

            exampleLayout.SaveLayout ();

            exampleLayout.AddNote(randomTables);
            randomTables.CreateParent(exampleLayout);

            randomTables.Caption = "colors";
            randomTables.TableCaption = "COLORS: ";
            randomTables.AddRow(new object[columns]{"1", "red",""});
            randomTables.AddRow(new object[columns]{"2", "blue",""});
            randomTables.AddRow(new object[columns]{"3", "yellow",""});

            // 2nd table
            randomTables = new NoteDataXML_Table();
            randomTables.TableCaption = "COLORS AS PROMPT: ";
            randomTables.Columns = new ColumnDetails[columns]{new ColumnDetails(TableWrapper.Roll,100),
                new ColumnDetails(TableWrapper.Result,100),new ColumnDetails(TableWrapper.NextTable, 100)};
            randomTables.Caption = "colorprompts";
            randomTables.AddRow(new object[columns]{"1", "red",""});
            randomTables.AddRow(new object[columns]{"2", "blue",""});
            randomTables.AddRow(new object[columns]{"3", "yellow",""});

            exampleLayout.AddNote(randomTables);
            randomTables.CreateParent(exampleLayout);

            exampleLayout.SaveLayout ();

            exampleLayout.Dispose();
        }
Exemple #13
0
        public void TimelineAndTableAlwaysTogether()
        {
            _w.output("START");
            System.Windows.Forms.Form form = new System.Windows.Forms.Form();
            _TestSingleTon.Instance._SetupForLayoutPanelTests();

            FAKE_LayoutPanel panel = new FAKE_LayoutPanel(CoreUtilities.Constants.BLANK, false);

            form.Controls.Add(panel);
            form.Show();

            //NOTE: For now remember that htis ADDS 1 Extra notes
            panel.NewLayout("mynewpanel", true, null);
            NoteDataXML basicNote = new NoteDataXML();

            basicNote.Caption = "note1";

            panel.AddNote(basicNote);
            //basicNote.CreateParent(panel);



            //panel.MoveNote(
            // create four panels A and B at root level. C inside A. D inside C
            FAKE_NoteDataXML_Panel panelA = new FAKE_NoteDataXML_Panel();

            panelA.Caption     = "PanelA";
            panelA.GuidForNote = "panela";
            FAKE_NoteDataXML_Panel panelB = new FAKE_NoteDataXML_Panel();

            panelB.Caption     = "PanelB";
            panelB.GuidForNote = "panelb";
            FAKE_NoteDataXML_Panel panelC = new FAKE_NoteDataXML_Panel();

            panelC.Caption     = "PanelC";
            panelC.GuidForNote = "panelc";


            _w.output("panels made");


            panel.AddNote(panelA);               // 1
            panel.AddNote(panelB);               // 2
            //panelA.CreateParent(panel); should not need to call this when doing LayoutPanel.AddNote because it calls CreateParent insid eof it

            basicNote         = new NoteDataXML();
            basicNote.Caption = "note2";



            panelA.AddNote(basicNote);                                         // Panel A has 1 note
            basicNote.CreateParent(panelA.myLayoutPanel());                    // DO need to call it when adding notes like this (to a subpanel, I think)
            panel.SaveLayout();
            Assert.AreEqual(1, panelA.CountNotes(), "Panel A holds one note"); // So this counts as  + 2

            // so we have (1 + 1 note on it)panel A + (1)panelB + basicNote +DefaultNote = 5  + (NEW) LinkTable = 6
            _w.output("STARTCOUNT");
            Assert.AreEqual(6, panel.CountNotes(), "Total notes SHOULD BE 6 :  (1 + 1 note on it)panel A + (1)panelB + basicNote +DefaultNote = 5  + (NEW) LinkTable = 6");

            _w.output("ENDCOUNT");



            // add timeline into a PANEL
            // count 1 row
            NoteDataXML_Timeline MyTimeLine = new NoteDataXML_Timeline(100, 100);

            MyTimeLine.Caption = "My Timeline!";
            panelA.AddNote(MyTimeLine);
            MyTimeLine.CreateParent(panelA.GetPanelsLayout());

            panel.SaveLayout();             // I needed this save else it would not work?

            Assert.AreEqual(8, panel.CountNotes(), "Total notes SHOULD BE 6 :  (1 + 1 note on it)panel A + (1)panelB + basicNote +DefaultNote = 5  + (NEW) LinkTable = 6");


            string guidOfTimeline      = MyTimeLine.GuidForNote;
            string guidOfTimelineTable = guidOfTimeline + "table";

            NoteDataXML_Table FoundTable = (NoteDataXML_Table)panel.FindNoteByGuid(guidOfTimelineTable);

            Assert.NotNull(FoundTable);

            Assert.AreEqual(1, FoundTable.RowCount());
            FoundTable = null;

            // move the TABLE associated with the timeline OUT to parent
            // count 1 row


            panelA.myLayoutPanel().MoveNote(guidOfTimelineTable, "up");

            // And for kicks add another timeline just to see if it messages anytnig up
            NoteDataXML_Timeline MyTimeLine2 = new NoteDataXML_Timeline(100, 1020);

            MyTimeLine2.Caption = "My Timeline! #2";
            panel.AddNote(MyTimeLine2);

            panel.SaveLayout();
            Assert.AreEqual(10, panel.CountNotes(), "Total notes SHOULD BE 6 :  (1 + 1 note on it)panel A + (1)panelB + basicNote +DefaultNote = 5  + (NEW) LinkTable = 6");


            Assert.Null(FoundTable);
            FoundTable = (NoteDataXML_Table)panel.FindNoteByGuid(guidOfTimelineTable);
            Assert.NotNull(FoundTable);

            Assert.AreEqual(1, FoundTable.RowCount());

            // move the TABLE into ANOTHER panel
            // count 1 row
            _w.output("Moving into panelb now");
            panel.MoveNote(guidOfTimelineTable, "panelb");
            panel.SaveLayout();

            Assert.AreEqual(10, panel.CountNotes(), "Total notes SHOULD BE 6 :  (1 + 1 note on it)panel A + (1)panelB + basicNote +DefaultNote = 5  + (NEW) LinkTable = 6");
            _w.output("done counting");

            FoundTable = null;
            Assert.Null(FoundTable);
            FoundTable = (NoteDataXML_Table)panel.FindNoteByGuid(guidOfTimelineTable);
            Assert.NotNull(FoundTable);

            Assert.AreEqual(1, FoundTable.RowCount());
            form.Dispose();
        }
        private void CreateSubmissionTypeTable()
        {
            NoteDataXML_Table randomTables = new NoteDataXML_Table(100, 100, new ColumnDetails[3]{new ColumnDetails("id",100),
                new ColumnDetails("name",100), new ColumnDetails("code",100)} );
            randomTables.Caption = SubmissionMaster.TABLE_SubmissionTypes;
            randomTables.GuidForNote = SubmissionMaster.TABLE_SubmissionTypes;
            randomTables.Columns = new ColumnDetails[3]{new ColumnDetails("id",100),
                new ColumnDetails("name",100), new ColumnDetails("code",100)};
            Layout.AddNote(randomTables);
            randomTables.CreateParent(Layout);

            randomTables.AddRow(new object[3]{"1", "Submission", @"submission"});
            randomTables.AddRow(new object[3]{"2", "Invalid", @"invalid"});
            randomTables.AddRow(new object[3]{"3", "Contest Entry", @"submission"});
            randomTables.AddRow(new object[3]{"4", "Query", @"none"});
            randomTables.AddRow(new object[3]{"5", "Followup Call", @"none"});
            randomTables.AddRow(new object[3]{"6", "Email Contest", @"submission"});
            randomTables.AddRow(new object[3]{"7", "Followup Letter", @"none"});
            randomTables.AddRow(new object[3]{"8", "Proposal", @"none"});
            // removed because only I need it for legacy work
            //	randomTables.AddRow(new object[3]{"9", "Destination",SubmissionMaster.CODE_DESTINATION });
        }
        private void CreateReplyTypeTable()
        {
            NoteDataXML_Table randomTables = new NoteDataXML_Table(100, 100, new ColumnDetails[3]{new ColumnDetails("id",100),
                new ColumnDetails("name",100), new ColumnDetails("code",100)} );
            randomTables.Caption = SubmissionMaster.TABLE_ReplyTypes;
            randomTables.GuidForNote = SubmissionMaster.TABLE_ReplyTypes;
            //	randomTables.Columns =
            Layout.AddNote(randomTables);
            randomTables.CreateParent(Layout);

            randomTables.AddRow(new object[3]{"1", "Invalid",SubmissionMaster.CODE_NO_REPLY_YET});

            randomTables.AddRow(new object[3]{"2", "Closed", @"rejection"});
            randomTables.AddRow(new object[3]{"3", "Accepted", SubmissionMaster.CODE_ACCEPTANCE});
            randomTables.AddRow(new object[3]{"4", "No Response", @"rejection"});
            randomTables.AddRow(new object[3]{"5", "Query Rejected", @"rejection"});
            randomTables.AddRow(new object[3]{"6", "Rejection", @"rejection"});
            randomTables.AddRow(new object[3]{"7", "Request For Rewrite", SubmissionMaster.CODE_NO_REPLY_YET});
            randomTables.AddRow(new object[3]{"8", "Work Requested", @"rejection"});
        }
        private void CreateReplyFeedbackTable()
        {
            NoteDataXML_Table randomTables = new NoteDataXML_Table(100, 100, new ColumnDetails[3]{new ColumnDetails("id",100),
                new ColumnDetails("name",100), new ColumnDetails("code",100)} );
            randomTables.Caption = SubmissionMaster.TABLE_ReplyFeedback;
            randomTables.GuidForNote = SubmissionMaster.TABLE_ReplyFeedback;
            //	randomTables.Columns =
            Layout.AddNote(randomTables);
            randomTables.CreateParent(Layout);

            randomTables.AddRow(new object[3]{"1", "Form", SubmissionMaster.CODE_FEEDBACK1});
            randomTables.AddRow(new object[3]{"2", "Personal", SubmissionMaster.CODE_FEEDBACK2});
            randomTables.AddRow(new object[3]{"3", "Encouraging",SubmissionMaster.CODE_FEEDBACK3});
            randomTables.AddRow(new object[3]{"4", "Almost",SubmissionMaster.CODE_FEEDBACK4});
        }
        private static NoteDataXML_Table LoadStringAsTable(string data)
        {
            // Loading existing table
            System.IO.StringReader LinkTableReader = new System.IO.StringReader (data);
            System.Xml.Serialization.XmlSerializer LinkTableXML = new System.Xml.Serialization.XmlSerializer (typeof(NoteDataXML_Table));

            NoteDataXML_Table table = new NoteDataXML_Table ();

            table = (NoteDataXML_Table)LinkTableXML.Deserialize (LinkTableReader);
            //						if (table != null)
            //						{
            //							MyLinkTable.SetTable (table.dataSource);
            //						}
            //NewMessage.Show("Loading a link table with GUID = " + table.GuidForNote);
            LinkTableXML = null;
            LinkTableReader.Close ();
            LinkTableReader.Dispose ();
            return table;
        }
Exemple #18
0
        public void CopyNoteTest()
        {
            _TestSingleTon.Instance._SetupForLayoutPanelTests();


            System.Windows.Forms.Form form = new System.Windows.Forms.Form();



            FAKE_LayoutPanel panelToUse = new FAKE_LayoutPanel(CoreUtilities.Constants.BLANK, false);

            form.Controls.Add(panelToUse);

            // needed else DataGrid does not initialize

            form.Show();
            //form.Visible = false;
            _w.output("boom");
            // March 2013 -- notelist relies on having this
            YOM2013.DefaultLayouts.CreateASystemLayout(form, null);


            //NOTE: For now remember that htis ADDS 1 Extra notes
            string panelname = System.Guid.NewGuid().ToString();

            panelToUse.NewLayout(panelname, true, null);
            LayoutDetails.Instance.AddToList(typeof(FAKE_NoteDataXML_Panel), "testingpanel");
            _w.output("herefirst");


            Timer SaveTimer = new Timer();

            SaveTimer.Interval = 300;
            SaveTimer.Tick    += HandleSaveTimerTick;
            SaveTimer.Start();

            // ADD 1 of each type
            foreach (Type t in LayoutDetails.Instance.ListOfTypesToStoreInXML())
            {
                for (int i = 0; i < 2; i++)
                {
                    NoteDataInterface note = (NoteDataInterface)Activator.CreateInstance(t);
                    panelToUse.AddNote(note);
                    note.CreateParent(panelToUse);

                    note.UpdateAfterLoad();
                    panelToUse.CopyNote(note);
                    panelToUse.PasteNote();
                }
            }
            panelToUse.SaveLayout();
            //int propercount= 4 * LayoutDetails.Instance.ListOfTypesToStoreInXML().Length;
            Assert.AreEqual(46, panelToUse.CountNotes());



            //
            // Now we test pasting one of our notes onto another Layout
            //

            string           panelname2    = System.Guid.NewGuid().ToString();
            FAKE_LayoutPanel PanelOtherGuy = new FAKE_LayoutPanel(CoreUtilities.Constants.BLANK, false);

            PanelOtherGuy.NewLayout(panelname2, true, null);
            PanelOtherGuy.SaveLayout();

            form.Controls.Add(PanelOtherGuy);

            Assert.AreEqual(2, PanelOtherGuy.CountNotes(), "count1");

            // ADD 1 of each type
            //foreach (Type t in LayoutDetails.Instance.ListOfTypesToStoreInXML())
            {
                for (int i = 0; i < 10; i++)
                {
                    NoteDataInterface note = new NoteDataXML_RichText();
                    PanelOtherGuy.AddNote(note);
                    note.CreateParent(PanelOtherGuy);

                    note.UpdateAfterLoad();
                }
            }
            Assert.AreEqual(12, PanelOtherGuy.CountNotes(), "count2");
            PanelOtherGuy.PasteNote();
            Assert.AreEqual(13, PanelOtherGuy.CountNotes(), "count2");
            PanelOtherGuy.SaveLayout();


            FAKE_NoteDataXML_Text Noter = new FAKE_NoteDataXML_Text();

            Noter.Caption = "Hello there";

            PanelOtherGuy.AddNote(Noter);

            Noter.GetRichTextBox().Text = "bear";
            PanelOtherGuy.SaveLayout();

            PanelOtherGuy.CopyNote(Noter);
            NoteDataXML_RichText CopyOfTextNote = (NoteDataXML_RichText)PanelOtherGuy.PasteNote();

            Assert.AreEqual("Hello there", CopyOfTextNote.Caption);
            Assert.AreEqual("bear", CopyOfTextNote.GetRichTextBox().Text);

            //
            //
            // Table Copy Test
            //
            //

            NoteDataXML_Table randomTables = new NoteDataXML_Table(100, 100, new ColumnDetails[2] {
                new ColumnDetails("id", 100), new ColumnDetails("tables", 100)
            });

            randomTables.Caption = LayoutDetails.SYSTEM_RANDOM_TABLES;
            //	randomTables.Columns = new appframe.ColumnDetails[2]{new appframe.ColumnDetails("id",100), new appframe.ColumnDetails("tables",100)};



            PanelOtherGuy.AddNote(randomTables);
            //randomTables.CreateParent(PanelOtherGuy);


            randomTables.AddRow(new object[2] {
                "1", "example|colors"
            });
            randomTables.AddRow(new object[2] {
                "2", "example|colorPROMPTS"
            });
            PanelOtherGuy.SaveLayout();


            PanelOtherGuy.CopyNote(randomTables);
            NoteDataXML_Table CopyOfTable = (NoteDataXML_Table)PanelOtherGuy.PasteNote();

            Assert.AreEqual(2, CopyOfTable.RowCount());
        }
        /// <summary>
        /// Creates the example layout. For new users.
        /// </summary>
        /// <returns>
        /// The example layout.
        /// </returns>
        /// <param name='parent'>
        /// Parent.
        /// </param>
        public static void CreateExampleLayout(Control parent, ContextMenuStrip TextEditMenuStrip)
        {
            LayoutPanel exampleLayout = new Layout.LayoutPanel(CoreUtilities.Constants.BLANK, true);

            exampleLayout.NewLayout("example", false, TextEditMenuStrip);

            exampleLayout.Parent  = parent;
            exampleLayout.Visible = true;


            exampleLayout.SetName(Loc.Instance.GetString("example"));



            const int columns = 3;

            NoteDataXML_Table randomTables = new NoteDataXML_Table();

            randomTables.Columns = new ColumnDetails[columns] {
                new ColumnDetails(TableWrapper.Roll, 100), new ColumnDetails(TableWrapper.Result, 100)
                , new ColumnDetails(TableWrapper.NextTable, 100)
            };

            exampleLayout.SaveLayout();

            exampleLayout.AddNote(randomTables);
            randomTables.CreateParent(exampleLayout);

            randomTables.Caption      = "colors";
            randomTables.TableCaption = "COLORS: ";
            randomTables.AddRow(new object[columns] {
                "1", "red", ""
            });
            randomTables.AddRow(new object[columns] {
                "2", "blue", ""
            });
            randomTables.AddRow(new object[columns] {
                "3", "yellow", ""
            });

            // 2nd table
            randomTables = new NoteDataXML_Table();
            randomTables.TableCaption = "COLORS AS PROMPT: ";
            randomTables.Columns      = new ColumnDetails[columns] {
                new ColumnDetails(TableWrapper.Roll, 100),
                new ColumnDetails(TableWrapper.Result, 100), new ColumnDetails(TableWrapper.NextTable, 100)
            };
            randomTables.Caption = "colorprompts";
            randomTables.AddRow(new object[columns] {
                "1", "red", ""
            });
            randomTables.AddRow(new object[columns] {
                "2", "blue", ""
            });
            randomTables.AddRow(new object[columns] {
                "3", "yellow", ""
            });

            exampleLayout.AddNote(randomTables);
            randomTables.CreateParent(exampleLayout);


            exampleLayout.SaveLayout();

            exampleLayout.Dispose();
        }
Exemple #20
0
        public void TableSearch()
        {
            // the way filters work for tables is weird
            // and becaue it is weird I might tweak it later and this is a bad idea
            // so I'm writing this test to stop me from doing that

            _TestSingleTon.Instance._SetupForLayoutPanelTests();


            System.Windows.Forms.Form form = new System.Windows.Forms.Form();



            // needed else DataGrid does not initialize

            form.Show();
            //form.Visible = false;
            _w.output("boom");
            // March 2013 -- notelist relies on having this
            YOM2013.DefaultLayouts.CreateASystemLayout(form, null);


            //NOTE: For now remember that htis ADDS 1 Extra notes


            string           panelname2    = System.Guid.NewGuid().ToString();
            FAKE_LayoutPanel PanelOtherGuy = new FAKE_LayoutPanel(CoreUtilities.Constants.BLANK, false);

            PanelOtherGuy.NewLayout(panelname2, true, null);
            form.Controls.Add(PanelOtherGuy);
            PanelOtherGuy.SaveLayout();

            Assert.AreEqual(2, PanelOtherGuy.CountNotes(), "count1");

            // ADD 1 of each type
            //foreach (Type t in LayoutDetails.Instance.ListOfTypesToStoreInXML())


            NoteDataXML_Table table = new NoteDataXML_Table(100, 100, new ColumnDetails[3] {
                new ColumnDetails("id", 100),
                new ColumnDetails("tables", 100),
                new ColumnDetails("values", 220)
            });

            table.GuidForNote = "thetable";
            table.Caption     = "thettable2";



            PanelOtherGuy.AddNote(table);
            table.CreateParent(PanelOtherGuy);

            //	table.UpdateAfterLoad();

            table.AddRow(new object[3] {
                "0", "table1", "value1"
            });
            table.AddRow(new object[3] {
                "0", "table2", "value2"
            });
            table.AddRow(new object[3] {
                "0", "table3", "value3"
            });
            table.AddRow(new object[3] {
                "0", "table4", "value4"
            });


            PanelOtherGuy.SaveLayout();
            Assert.AreEqual(3, PanelOtherGuy.CountNotes(), "count2");
            string ToSearchFor = "table3";

            // looks in row 1 for the value and will return the value from row 2
            List <string> results = PanelOtherGuy.GetListOfStringsFromSystemTable("thettable2", 2, String.Format("1|{0}", ToSearchFor));

            Assert.NotNull(results);
            Assert.AreEqual(1, results.Count);
            Assert.AreEqual("value3", results[0]);

            ToSearchFor = "bacon";
            results     = PanelOtherGuy.GetListOfStringsFromSystemTable("thettable2", 2, String.Format("1|{0}", ToSearchFor));
            Assert.NotNull(results);
            Assert.AreEqual(0, results.Count);

            ToSearchFor = "0";
            results     = PanelOtherGuy.GetListOfStringsFromSystemTable("thettable2", 1, String.Format("0|{0}", ToSearchFor));
            Assert.NotNull(results);
            Assert.AreEqual(4, results.Count);
        }
        public void GetValuesForTable()
        {
            _SetupForLayoutPanelTests();
            Form             form  = new Form();
            FAKE_LayoutPanel panel = new FAKE_LayoutPanel(CoreUtilities.Constants.BLANK, false);

            form.Controls.Add(panel);

            // needed else DataGrid does not initialize
            form.Visible = false;
            form.Show();
            //NOTE: For now remember that htis ADDS 1 Extra notes
            panel.NewLayout("mynewpanel", true, null);
            NoteDataXML_Table test = new NoteDataXML_Table(425, 380);

            test.GuidForNote = "thisguid1";
            test.Caption     = "note1";

            test.Columns = new ColumnDetails[3] {
                new ColumnDetails("snakes", 109),
                new ColumnDetails("fish", 90),
                new ColumnDetails("goobers", 11111)
            };
            test.AddRow(new object[3] {
                "1", "value1", "testA"
            });
            test.AddRow(new object[3] {
                "2", "value2", "testB"
            });
            test.AddRow(new object[3] {
                "3", "value3", "testC"
            });

            panel.AddNote(test);
            test.CreateParent(panel);
            panel.SaveLayout();
            List <string> cols = test.GetValuesForColumn(1, "*");

            for (int i = 0; i < 3; i++)
            {
                switch (i)
                {
                case 0: Assert.AreEqual(cols[i], "value1"); break;

                case 1: Assert.AreEqual(cols[i], "value2"); break;

                case 2: Assert.AreEqual(cols[i], "value3"); break;
                }
            }
            cols = test.GetValuesForColumn(2, "*");
            for (int i = 0; i < 3; i++)
            {
                switch (i)
                {
                case 0: Assert.AreEqual(cols[i], "testA"); break;

                case 1: Assert.AreEqual(cols[i], "testB"); break;

                case 2: Assert.AreEqual(cols[i], "testC"); break;
                }
            }
        }
        public void CopyNoteTest()
        {
            _TestSingleTon.Instance._SetupForLayoutPanelTests();

            System.Windows.Forms .Form form = new System.Windows.Forms.Form();

            FAKE_LayoutPanel panelToUse = new FAKE_LayoutPanel (CoreUtilities.Constants.BLANK, false);

            form.Controls.Add (panelToUse);

            // needed else DataGrid does not initialize

            form.Show ();
            //form.Visible = false;
            _w.output("boom");
            // March 2013 -- notelist relies on having this
            YOM2013.DefaultLayouts.CreateASystemLayout(form,null);

            //NOTE: For now remember that htis ADDS 1 Extra notes
            string panelname = System.Guid.NewGuid().ToString();
            panelToUse.NewLayout (panelname,true, null);
            LayoutDetails.Instance.AddToList (typeof(FAKE_NoteDataXML_Panel), "testingpanel");
            _w.output ("herefirst");

            Timer SaveTimer= new Timer();
            SaveTimer.Interval = 300;
            SaveTimer.Tick+= HandleSaveTimerTick;
            SaveTimer.Start ();

            // ADD 1 of each type
            foreach (Type t in LayoutDetails.Instance.ListOfTypesToStoreInXML()) {
                for (int i = 0; i < 2; i++) {
                    NoteDataInterface note = (NoteDataInterface)Activator.CreateInstance (t);
                    panelToUse.AddNote (note);
                    note.CreateParent(panelToUse);

                    note.UpdateAfterLoad();
                    panelToUse.CopyNote(note);
                    panelToUse.PasteNote();
                }
            }
            panelToUse.SaveLayout();
            //int propercount= 4 * LayoutDetails.Instance.ListOfTypesToStoreInXML().Length;
            Assert.AreEqual (46, panelToUse.CountNotes());

            //
            // Now we test pasting one of our notes onto another Layout
            //

            string panelname2 = System.Guid.NewGuid().ToString();
            FAKE_LayoutPanel  PanelOtherGuy= new FAKE_LayoutPanel (CoreUtilities.Constants.BLANK, false);
            PanelOtherGuy.NewLayout (panelname2,true, null);
            PanelOtherGuy.SaveLayout();

            form.Controls.Add(PanelOtherGuy);

            Assert.AreEqual( 2, PanelOtherGuy.CountNotes(), "count1");

            // ADD 1 of each type
            //foreach (Type t in LayoutDetails.Instance.ListOfTypesToStoreInXML())
            {
                for (int i = 0; i < 10; i++) {

                    NoteDataInterface note = new NoteDataXML_RichText();
                    PanelOtherGuy.AddNote (note);
                    note.CreateParent(PanelOtherGuy);

                    note.UpdateAfterLoad();

                }
            }
            Assert.AreEqual( 12, PanelOtherGuy.CountNotes(), "count2");
            PanelOtherGuy.PasteNote();
            Assert.AreEqual( 13, PanelOtherGuy.CountNotes(), "count2");
            PanelOtherGuy.SaveLayout();

            FAKE_NoteDataXML_Text Noter = new FAKE_NoteDataXML_Text();
            Noter.Caption ="Hello there";

            PanelOtherGuy.AddNote (Noter);

            Noter.GetRichTextBox().Text ="bear";
            PanelOtherGuy.SaveLayout ();

            PanelOtherGuy.CopyNote(Noter);
            NoteDataXML_RichText CopyOfTextNote = (NoteDataXML_RichText)PanelOtherGuy.PasteNote();
            Assert.AreEqual ("Hello there",CopyOfTextNote.Caption);
            Assert.AreEqual ("bear", CopyOfTextNote.GetRichTextBox().Text);

            //
            //
            // Table Copy Test
            //
            //

            NoteDataXML_Table randomTables = new NoteDataXML_Table(100, 100,new ColumnDetails[2]{new ColumnDetails("id",100), new ColumnDetails("tables",100)} );
            randomTables.Caption = LayoutDetails.SYSTEM_RANDOM_TABLES;
            //	randomTables.Columns = new appframe.ColumnDetails[2]{new appframe.ColumnDetails("id",100), new appframe.ColumnDetails("tables",100)};

            PanelOtherGuy.AddNote(randomTables);
            //randomTables.CreateParent(PanelOtherGuy);

            randomTables.AddRow(new object[2]{"1", "example|colors"});
            randomTables.AddRow(new object[2]{"2", "example|colorPROMPTS"});
            PanelOtherGuy.SaveLayout ();

            PanelOtherGuy.CopyNote(randomTables);
            NoteDataXML_Table CopyOfTable = (NoteDataXML_Table)PanelOtherGuy.PasteNote();
            Assert.AreEqual (2, CopyOfTable.RowCount());
        }
        public void ImportListTest_UnequalColumns()
        {
            _TestSingleTon.Instance._SetupForLayoutPanelTests();
            Form form = new Form();
            FAKE_LayoutPanel panel = new FAKE_LayoutPanel (CoreUtilities.Constants.BLANK, false);
            form.Controls.Add (panel);

            // needed else DataGrid does not initialize

            form.Show ();
            form.Visible = false;

            //NOTE: For now remember that htis ADDS 1 Extra notes
            panel.NewLayout ("mynewpanel", true, null);
            NoteDataXML_Table test = new NoteDataXML_Table (425, 380);
            test.GuidForNote = "thisguid1";
            test.Caption = "note1";
            panel.SaveLayout ();

            string[] newData = new string[3]{"1,col2,col3","2,col2,col3","3,col2,col3"};

            TableWrapper.ImportList(newData, (DataTable)test.dataSource);
            panel.SaveLayout();
            List<string> values =  test.GetValuesForColumn(1, "*");
            Assert.AreEqual (3, values.Count);
            Assert.AreEqual ("1,col2,col3", values[0]);
            form.Dispose ();
        }
        protected override void DoBuildChildren(LayoutPanelBase Layout)
        {
            base.DoBuildChildren (Layout);
            CaptionLabel.Dock = DockStyle.Top;

            if (TableCreated == false) {
                Width = 500;
                Height = 200;
                ParentNotePanel.Width = Width;
                ParentNotePanel.Height = Height;

                TimelineStartDate = DateTime.Today;

                // A. Create the Table
                NoteDataXML_Table myTable = new NoteDataXML_Table (100, 100, new ColumnDetails[7]{
                    new ColumnDetails ("Date", 50),
                    new ColumnDetails ("Type", 50),
                    new ColumnDetails ("Data", 50),
                    new ColumnDetails ("Data2", 50),
                    new ColumnDetails ("Data3", 50),
                    new ColumnDetails ("Data4", 50),
                    new ColumnDetails ("icon", 50)});
                string GuidOfTable = this.GuidForNote + "table";
                myTable.GuidForNote = GuidOfTable;

                myTable.Caption = Loc.Instance.GetStringFmt ("Table for Timeline");

                Layout.AddNote (myTable);

                // we do not need to call CreateParent because AddNote does it for us
                //myTable.CreateParent (Layout);
                Save ();
                myTable.AddRow (new object[7]{DateTime.Today.ToString (), "100", "Example Description", "Example Title", "", "", 2});
                TableCreated = true;
                Save ();
                // B. Populate it with example Row
            }
            Timeline = new NotePanelTimeline (this);
            Timeline.Dock = DockStyle.Fill;
            ParentNotePanel.Controls.Add (Timeline);
            Timeline.dayPanelWidth = DayPanelWidth;
            Timeline.BringToFront ();

            RowFilterStrip =
                LayoutDetails.BuildMenuPropertyEdit (Loc.Instance.GetString ("Row Filter: {0}"), RowFilter, Loc.Instance.GetString ("Filter via the columns on the table associated with this timeline."), HandleRowFilterChange);

            ToolStripSeparator sep = new ToolStripSeparator ();

            ToolStripComboBox dropper = new ToolStripComboBox ();

            dropper.ToolTipText = Loc.Instance.GetString ("Set the type of timeline you want by selecting an appropriate calendar.");
            dropper.DropDownStyle = ComboBoxStyle.DropDownList;
            foreach (Calendar.calendertype calendertype in Enum.GetValues (typeof(Calendar.calendertype))) {
                dropper.Items.Add (calendertype.ToString ());
            }
            dropper.Text = MCalendarType.ToString ();
            dropper.SelectedIndexChanged += HandleSelectedIndexCalendarPickerChanged;

            // Icons Per Column. We had the edit to a ToolStrip Host and add the Host to the toolstrip
            NumericUpDown numbers = new NumericUpDown ();

            Panel numbersPanel = new Panel ();
            numbersPanel.BackColor = dropper.BackColor;
            Label numbersLabel = new Label ();
            numbersLabel.Left = 0;
            //numbersLabel.Dock = DockStyle.Left;
            numbersLabel.Text = Loc.Instance.GetString ("Icons/Column: ");
            numbersLabel.AutoSize = false;
            numbersLabel.Width = 85;
            numbers.Left = 90;
            numbers.Width = 45;
            //numbersLabel.AutoSize = true;
            //numbers.Dock = DockStyle.Right;

            numbersPanel.Controls.Add (numbersLabel);
            numbersPanel.Controls.Add (numbers);
            numbersLabel.BringToFront ();
            //numbersPanel.Dock = DockStyle.Fill;

            numbers.Value = IconsPerColumn;
            numbers.ValueChanged += HandleIconsPerColumnValueChanged;
            numbers.Minimum = 1;
            numbers.Maximum = 20;
            ToolStripControlHost iconsPerColumn = new ToolStripControlHost (numbersPanel);

            // Day Width
            ToolStripControlHost setDayWidth = BuildDayWidth(dropper.BackColor);

            DateTimePicker dates = new DateTimePicker ();
            dates.Width = 125;
            try {
                dates.Value = this.TimelineStartDate;
            } catch (Exception) {
                dates.Value = DateTime.Today;
            }
            dates.ValueChanged += HandleValueCurrentdateChanged;
            ToolStripControlHost dateToolStrip = new ToolStripControlHost (dates);
            dateToolStrip.ToolTipText = Loc.Instance.GetString ("Select a date to center the timeline on that date.");

            properties.DropDownItems.Add (sep);
            properties.DropDownItems.Add (dropper);
            properties.DropDownItems.Add (iconsPerColumn);
            properties.DropDownItems.Add (setDayWidth);
            properties.DropDownItems.Add (RowFilterStrip);
            properties.DropDownItems.Add (dateToolStrip);

            // add hjistory to RowFilterStrip
            foreach (string history in RowHistory) {
                ToolStripMenuItem test = new ToolStripMenuItem (history);
                test.Click += delegate(object sender, EventArgs e){  RowFilter = RowFilterStrip.Text = test.Text; Timeline.Refresh();};
                RowFilterStrip.DropDownItems.Add (test);
            }

            //
            //
            // Hide ZOom Panel
            //
            //
            ToolStripButton HideMonths = new ToolStripButton();
            HideMonths.Text = Loc.Instance.GetString("Hide Months Panel");
            HideMonths.CheckOnClick = true;
            HideMonths.Checked = this.HideZoomOutPanel;
            HideMonths.Click+= HandleHideMonthsClick;

            properties.DropDownItems.Add (HideMonths);
            // Adjust panel as needed; also add this to the menu too
            Timeline.HideZoomPanel(this.HideZoomOutPanel);
        }