예제 #1
0
        public void AddItem(IMusixMenuItem item)
        {
            Items.Add(item);
            MusixDynamicSidebarItem sidebarItem = new MusixDynamicSidebarItem(item);

            sidebarItem.SendStyle(Style);
            sidebarItem.OnSelect += SidebarItem_OnSelect;
            flowElements.Controls.Add(sidebarItem);
        }
예제 #2
0
        public void SelectItem(IMusixMenuItem item)
        {
            MusixDynamicSidebarItem it = GetUIElement(item);

            if (it != null)
            {
                it.IsSelected = true;
            }
        }
예제 #3
0
 public MusixDynamicSidebarItem GetUIElement(IMusixMenuItem item)
 {
     foreach (MusixDynamicSidebarItem sidebarItem in flowElements.Controls.OfType <MusixDynamicSidebarItem>())
     {
         if (sidebarItem.MenuItem == item)
         {
             return(sidebarItem);
         }
     }
     return(null);
 }
예제 #4
0
        public void RemoveItem(IMusixMenuItem item)
        {
            MusixDynamicSidebarItem UIElement = GetUIElement(item);

            if (UIElement != null)
            {
                UIElement.OnSelect -= SidebarItem_OnSelect;
                Items.Remove(item);
                flowElements.Controls.Remove(UIElement);
                return;
            }
        }
예제 #5
0
        public void SelectItemAtIndex(int index)
        {
            IMusixMenuItem item = Items[index];

            System.Console.WriteLine($"Index {index} > {item.Name}");
            MusixDynamicSidebarItem menuItem = GetUIElement(item);

            System.Console.WriteLine($"Resolved entry index: {flowElements.Controls.IndexOf(menuItem)}");
            if (menuItem != null)
            {
                System.Console.WriteLine("setselected");
                menuItem.IsSelected = true;
            }
        }
예제 #6
0
        public MusixDynamicSidebarItem(IMusixMenuItem item)
        {
            InitializeComponent();
            MenuItem = item;
            Init();
            LoadUI();
            UITaskFactory = new TaskFactory(TaskScheduler);
            Visible       = item.ShowWhenUnselected;
            if (typeof(IStatusIconProvider).IsAssignableFrom(item.GetType()))
            {
                StatusIconProvider             = (IStatusIconProvider)item;
                StatusIconProvider.UpdateIcon += Provider_UpdateIcon;
                StatusIconProvider.Init();
            }

            Load += MusixDynamicSidebarItem_Load;
        }
예제 #7
0
        private void MainWindow_Load(object sender, EventArgs e)
        {
            Instance = this;
            DateTime Started     = DateTime.Now;
            FileInfo AppBaseInfo = new FileInfo(Application.ExecutablePath);

            Environment.CurrentDirectory = AppBaseInfo.DirectoryName;
            ConfigManager.Init();

            CheckFolders();

            DateTime PStarted = DateTime.Now;

            foreach (string PluginFile in Directory.GetFiles("Plugins", "*.dll"))
            {
                FileInfo info = new FileInfo(PluginFile);
                try
                {
                    Console.WriteLine($"Loading plugin {info.Name}...");
                    List <string> Deps = new List <string>();
                    if (Directory.Exists(Path.Combine("Plugins", info.Name)))
                    {
                        foreach (string Dependancy in Directory.GetFiles(Path.Combine("Plugins", info.Name), "*.dll"))
                        {
                            Deps.Add(Dependancy);
                        }
                    }
                    Console.WriteLine($"Loading {Deps.Count} dependancies for plugin {info.Name}...");
                    Deps.ForEach(x => Assembly.LoadFrom(x));

                    Assembly Plugin = Assembly.LoadFrom(PluginFile);
                    foreach (Type t in Plugin.GetTypes())
                    {
                        if (typeof(IMusixPluginEntryPoint).IsAssignableFrom(t))
                        {
                            Console.WriteLine($"Initializing plugin {info.Name}...");
                            IMusixPluginEntryPoint entryPoint = ((IMusixPluginEntryPoint)Activator.CreateInstance(t));
                            entryPoint.Load();
                            Plugins.Add(entryPoint.Name, entryPoint);
                            Console.WriteLine($"Initialized plugin {entryPoint.Name}");
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"Failed to load plugin {info.Name}; {ex.Message}");
                    Console.WriteLine(ex.Message);
                }
            }
            Console.WriteLine($"[Plugins Loaded] took {Math.Round(DateTime.Now.Subtract(PStarted).TotalMilliseconds),2} millisecond/s.");


            Client = new MusixClient("955b354ccd0e4270b6ad97f8b4003d9a", "5a008b85c33b499da7857fbdf05f08ef", "ImageCache", "AudioCache");
            Client.OnClientReady += Client_OnClientReady;
            Client.StartClient();

            AcceptButton = new Button();

            Activated  += MainWindow_Activated;
            Deactivate += MainWindow_Deactivate;
            ((Button)AcceptButton).Click += BtnAccept_Click;

            MenuItems.Add(typeof(SearchMenuItem), new SearchMenuItem());
            MenuItems.Add(typeof(DownloadsMenuItem), new DownloadsMenuItem());
            MenuItems.Add(typeof(SettingsMenuItem), new SettingsMenuItem());
            MDSSideBar.AddItem(MenuItems[typeof(SearchMenuItem)]);
            MDSSideBar.AddItem(MenuItems[typeof(DownloadsMenuItem)]);
            MDSSideBar.AddItem(MenuItems[typeof(SettingsMenuItem)]);

            foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies())
            {
                foreach (Type t in asm.GetTypes().Where(x => typeof(IMusixMenuItem).IsAssignableFrom(x) && !x.IsInterface))
                {
                    if (!MenuItems.ContainsKey(t))
                    {
                        IMusixMenuItem newItem = (IMusixMenuItem)Activator.CreateInstance(t);
                        MDSSideBar.AddItem(newItem);
                        MenuItems.Add(t, newItem);
                    }
                }
            }

            foreach (var item in MenuItems)
            {
                if (Attribute.GetCustomAttribute(item.Value.GetType(), typeof(AutoInitialize)) != null)
                {
                    Control ct = item.Value.GetMenuControl();
                    ct.Visible = false;
                    ct.Dock    = DockStyle.Fill;
                    if (!PNContent.Controls.Contains(ct))
                    {
                        PNContent.Controls.Add(ct);
                    }
                }
            }

            MDSSideBar.OnSelectionChanged += MDSSideBar_OnSelectionChanged;

            MDSSideBar.SelectItemAtIndex(0);
            SendStyle(EStyle.Blue);

            DateTime Finished = DateTime.Now;

            Console.WriteLine($"[Initialized] took {Math.Round(Finished.Subtract(Started).TotalMilliseconds), 3} millisecond/s.");
        }
예제 #8
0
 private void MDSSideBar_OnSelectionChanged(IMusixMenuItem SelectedItem)
 {
     Console.WriteLine("SELECTION CHANGED");
     ShowPanelItem(SelectedItem.GetMenuControl());
 }