Exemplo n.º 1
0
        public static void LoadProject(string file)
        {
            TreeView  treeView  = Program.WinInstance.ProjectExplorer.TreeView;
            TreeStore treeStore = (TreeStore)Program.WinInstance.ProjectExplorer.TreeView.Model;

            ProjectManager.Project = new Project(file);

            treeStore.Clear();

            CodeWidget.RemoveTab("Welcome to iCode !");

            var e = new RowActivatedHandler((o, args) =>
            {
                TreeIter treeIter;
                treeStore.GetIter(out treeIter, args.Path);

                int type = 0;

                foreach (var @class in _classNodes)
                {
                    if (Equals(treeIter, @class))
                    {
                        type = 1;
                        break;
                    }
                }

                if (type != 1)
                {
                    foreach (var @class in _resourceNodes)
                    {
                        if (Equals(treeIter, @class))
                        {
                            type = 2;
                            break;
                        }
                    }
                }

                switch (type)
                {
                case 1:
                    var code = CodeWidget.AddCodeTab(Path.Combine(Path.GetDirectoryName(file), (string)treeStore.GetValue(treeIter, 1)));
                    CodeWidget.Codewidget.Tabs.Page = CodeWidget.Codewidget.Tabs.PageNum(Extensions.Tabs.First(x => x.Key == (string)treeStore.GetValue(treeIter, 1)).Value);
                    break;

                case 2:
                    Process.Start("gio", "open '" + Path.Combine(Path.GetDirectoryName(file), "Resources", (string)treeStore.GetValue(treeIter, 1)) + "'");
                    break;
                }
            });

            foreach (var row in _handlers)
            {
                treeView.RowActivated -= row;
            }
            _handlers.Clear();

            treeView.RowActivated += e;
            _handlers.Add(e);

            _projectNode = treeStore.AppendValues(new object[]
            {
                Utils.IconLoader.LoadIcon(Program.WinInstance.ProjectExplorer, "gtk-directory", IconSize.Menu),
                ProjectManager.Project.Name
            });

            _resourcesNode = treeStore.AppendValues(_projectNode, new object[]
            {
                Utils.IconLoader.LoadIcon(Program.WinInstance.ProjectExplorer, "gtk-directory", IconSize.Menu),
                "Resources"
            });

            foreach (Class @class in ProjectManager.Project.Classes)
            {
                var node = treeStore.AppendValues(_projectNode,
                                                  Extensions.GetIconFromFile(Path.Combine(Project.Path, @class.Filename)),
                                                  Path.GetFileName(@class.Filename)
                                                  );
                _classNodes.Add(node);
            }

            foreach (string path in Directory.GetFiles(Path.Combine(Path.GetDirectoryName(file), "Resources")))
            {
                var node = treeStore.AppendValues(_resourcesNode,
                                                  Extensions.GetIconFromFile(Path.GetFullPath(path)),
                                                  Path.GetFileName(path)
                                                  );

                _resourceNodes.Add(node);
            }

            var filea = "";

            using (var f = File.Open(Path.Combine(Program.ConfigPath, "RecentProjects"), FileMode.OpenOrCreate))
            {
                var wr      = new StreamWriter(f);
                var re      = new StreamReader(f);
                var content = re.ReadToEnd();
                var lines   = content.Split('\n').ToList();
                if (lines.Count == 4)
                {
                    lines.Remove(lines.First());
                }

                var temp = new List <string>();
                foreach (var line in from l in lines where l == Path.GetDirectoryName(file) select l)
                {
                    temp.Add(line);
                }

                foreach (var temp2 in temp)
                {
                    lines.Remove(temp2);
                }

                lines.Add(Path.GetDirectoryName(file));

                filea = string.Join("\n", lines);
                wr.Dispose();
                re.Dispose();
            }

            foreach (var widget in _sensitiveWidgets)
            {
                widget.Sensitive = ProjectLoaded;
            }

            File.WriteAllText(Path.Combine(Program.ConfigPath, "RecentProjects"), filea);
        }