Ejemplo n.º 1
0
        public Gtk.TreeStore GetTextContentFor(int veranstaltungs_id, string categorie, int tabIndex)
        {
            if (cached_CategorieQuery == null ||
                cached_veranstaltungs_id != veranstaltungs_id ||
                cached_categorie == null || !cached_categorie.Equals(categorie))
            {
                CacheCategorieContent(veranstaltungs_id, categorie);
            }

            CategorieQuery[][] titleList = cached_CategorieQuery[tabIndex];

            // Rang, Text, Typ
            TreeStore treeStore = new Gtk.TreeStore(typeof(string), typeof(string), typeof(string));
            TreeIter  currIter  = TreeIter.Zero;

            foreach (CategorieQuery[] titles in titleList)
            {
                if (titles.Length == 0)                 // No childs
                {
                    continue;
                }

                CategorieQuery currElem = titles[0];
                currIter = treeStore.AppendValues(
                    "" + currElem.TitelRang,
                    "" + API_Contract.CategorieTextParentTypHR[currElem.TitelTyp],
                    "" + currElem.Titel);
                try {
                    if (currElem.Text != null)
                    {
                        foreach (var text in titles)
                        {
                            treeStore.AppendValues(currIter,
                                                   "" + text.TextRang,
                                                   "" + API_Contract.CategorieTextChildTypHR[currElem.TextTyp],
                                                   "" + text.Text);
                        }
                    }
                } catch (Exception e) {
                    Console.WriteLine(e.ToString());
                    return(new Gtk.TreeStore(typeof(string), typeof(string), typeof(string)));
                }
            }
            return(treeStore);
        }
Ejemplo n.º 2
0
        private void CacheCategorieContent(int veranstaltungs_id, string categorie)
        {
            this.cached_veranstaltungs_id = veranstaltungs_id;
            this.cached_categorie         = categorie;

            CategorieQuery[] query = db.Query <CategorieQuery>(@"
				SELECT
					Kategorie.Titel AS KategorieName,
					Kategorie_Tab.TabName AS TabName,
					Kategorie_Tab.Rang AS TabRang,
					Kategorie_Tab_Titel.Titel AS Titel,
					Kategorie_Tab_Titel.Rang AS TitelRang,
					Kategorie_Tab_Titel.Typ As TitelTyp,
					Kategorie_Tab_Text.Text AS Text,
					Kategorie_Tab_Text.Rang AS TextRang,
					Kategorie_Tab_Text.Typ AS TextTyp

				FROM Kategorie
				LEFT JOIN Kategorie_Tab
					ON Kategorie_Tab.Name_Kategorie == Kategorie.Titel
				LEFT JOIN Kategorie_Tab_Titel
					ON Kategorie_Tab_Titel.Name_Kategorie == Kategorie.Titel
					AND Kategorie_Tab_Titel.TabName_Kategorie_Tab  == Kategorie_Tab.TabName
				LEFT JOIN Kategorie_Tab_Text
					ON Kategorie_Tab_Text.Name_Kategorie == Kategorie.Titel
					AND Kategorie_Tab_Text.TabName_Kategorie_Tab  == Kategorie_Tab.TabName
					AND Kategorie_Tab_Text.Titel_Kategorie_Tab_Titel == Kategorie_Tab_Titel.Titel

				WHERE Kategorie.Id_Veranstaltung == ?
				AND Kategorie.Titel ==  ?

				ORDER BY Kategorie.Titel, Kategorie_Tab.Rang, Kategorie_Tab_Titel.Rang, Kategorie_Tab_Text.Rang"
                                                               , veranstaltungs_id, categorie).ToArray();

            var tabList = new List <List <List <CategorieQuery> > >();

            // Make that query on the database and try to visualize it
            int i = 0;

            while (i < query.Length)
            {
                int currTabR  = query[i].TabRang;
                var titelList = new List <List <CategorieQuery> >();
                // While tabId is equal
                while (i < query.Length && currTabR == query[i].TabRang)                   // Has childs
                {
                    var textList = new List <CategorieQuery>();
                    if (query[i].Titel != null)                       // Has childs
                    {
                        int currTitelR = query[i].TitelRang;
                        // While tabId and titelId is equal
                        while (i < query.Length && currTabR == query[i].TabRang && currTitelR == query[i].TitelRang)
                        {
                            textList.Add(query[i]);
                            i++;
                        }
                    }
                    else
                    {
                        i++;                         // No childs -> next entry
                    }
                    titelList.Add(textList);
                }
                tabList.Add(titelList);
            }

            //Save in array
            cached_CategorieQuery = new CategorieQuery[tabList.Count][][];
            for (i = 0; i < tabList.Count; i++)
            {
                cached_CategorieQuery[i] = new CategorieQuery[tabList[i].Count][];
                for (int j = 0; j < tabList[i].Count; j++)
                {
                    cached_CategorieQuery[i][j] = tabList[i][j].ToArray();
                }
            }
        }