public void SetItems(GUIFacadeControl control)
 {
     foreach (GUIListItem item in Items)
       {
     control.Add(item);
       }
 }
예제 #2
0
        protected bool AllowView(GUIFacadeControl.Layout view)
        {
            if (view == GUIFacadeControl.Layout.List)
                return false;

            if (view == GUIFacadeControl.Layout.AlbumView)
                return false;

            if (view == GUIFacadeControl.Layout.Filmstrip)
                return false;

            if (view == GUIFacadeControl.Layout.Playlist)
                return false;

            return true;
        }
예제 #3
0
 protected virtual bool AllowLayout(GUIFacadeControl.Layout layout)
 {
   return true;
 }
예제 #4
0
    protected virtual void SwitchToNextAllowedLayout(GUIFacadeControl.Layout selectedLayout)
    {
      int iSelectedLayout = (int)selectedLayout;
      int totalLayouts = Enum.GetValues(typeof (GUIFacadeControl.Layout)).Length - 1;

      if (iSelectedLayout > totalLayouts)
        iSelectedLayout = 0;

      bool shouldContinue = true;
      do
      {
        if (!AllowLayout(selectedLayout) || facadeLayout.IsNullLayout(selectedLayout))
        {
          iSelectedLayout++;
          if (iSelectedLayout > totalLayouts)
            iSelectedLayout = 0;
        }
        else
        {
          shouldContinue = false;
        }
      } while (shouldContinue);

      CurrentLayout = (GUIFacadeControl.Layout)iSelectedLayout;
      SwitchLayout();
    }
예제 #5
0
 protected virtual void SetLayout(GUIFacadeControl.Layout layout)
 {
   // Set the selected layout.
   SwitchToNextAllowedLayout(layout);
 }
 public static int ProperDefaultFromLayout(GUIFacadeControl.Layout layout)
 {
   switch (layout)
   {
     case GUIFacadeControl.Layout.SmallIcons: return 1;
     case GUIFacadeControl.Layout.LargeIcons: return 2;
     case GUIFacadeControl.Layout.AlbumView: return 3;
     case GUIFacadeControl.Layout.Filmstrip: return 4;
     case GUIFacadeControl.Layout.CoverFlow: return 5;
     default: return 0;
   }
 }
예제 #7
0
        // this is expensive to do if changing mode......450 ms ???
        private void setFacadeMode(GUIFacadeControl.Layout mode)
        {
            if (this.m_Facade == null)
                return;

            if (mode == GUIFacadeControl.Layout.List)
            {
                PerfWatcher.GetNamedWatch("FacadeMode - switch to List").Start();
                this.m_Facade.CurrentLayout = mode;
                PerfWatcher.GetNamedWatch("FacadeMode - switch to List").Stop();
            }
            else
            {
                PerfWatcher.GetNamedWatch("FacadeMode - switch to Album").Start();
                if (mode == GUIFacadeControl.Layout.AlbumView)
                {
                    switch (this.listLevel)
                    {
                        case (Listlevel.Series):
                            if (DBOption.GetOptions(DBOption.cView_Series_ListFormat) == "Filmstrip")
                            {
                                MPTVSeriesLog.Write("FacadeMode: Switching to FilmStrip", MPTVSeriesLog.LogLevel.Debug);
                                this.m_Facade.CurrentLayout = GUIFacadeControl.Layout.Filmstrip;
                            }
                            if (DBOption.GetOptions(DBOption.cView_Series_ListFormat) == "Coverflow")
                            {
                                MPTVSeriesLog.Write("FacadeMode: Switching to Coverflow", MPTVSeriesLog.LogLevel.Debug);
                                this.m_Facade.CurrentLayout = GUIFacadeControl.Layout.CoverFlow;
                            }
                            if (DBOption.GetOptions(DBOption.cView_Series_ListFormat) == "WideBanners")
                            {
                                MPTVSeriesLog.Write("FacadeMode: Switching to WideThumbs", MPTVSeriesLog.LogLevel.Debug);
                                this.m_Facade.CurrentLayout = GUIFacadeControl.Layout.LargeIcons;
                            }
                            break;
                        case (Listlevel.Season):
                            // There is no point having BigIcons for SeasonView, as it would need to re-use the WideBanner sizes
                            // Having multiple facades would get around this issue
                            if (DBOption.GetOptions(DBOption.cView_Season_ListFormat) == "1")
                            {
                                MPTVSeriesLog.Write("FacadeMode: Switching to Filmstrip", MPTVSeriesLog.LogLevel.Debug);
                                this.m_Facade.CurrentLayout = GUIFacadeControl.Layout.Filmstrip;
                            }
                            else
                            {
                                MPTVSeriesLog.Write("FacadeMode: Switching to Coveflow", MPTVSeriesLog.LogLevel.Debug);
                                this.m_Facade.CurrentLayout = GUIFacadeControl.Layout.CoverFlow;
                            }
                            break;
                        case (Listlevel.Group):
                            MPTVSeriesLog.Write("FacadeMode: Switching to Small Thumbs", MPTVSeriesLog.LogLevel.Debug);
                            this.m_Facade.CurrentLayout = GUIFacadeControl.Layout.SmallIcons;
                            break;
                    }
                }
                PerfWatcher.GetNamedWatch("FacadeMode - switch to Album").Stop();
            }
        }
예제 #8
0
        public static String GetSeriesImageAsFileName(AnimeSeriesVM ser, GUIFacadeControl.Layout viewMode)
        {
            string imgFileName = "";

            switch (viewMode)
            {
                case GUIFacadeControl.Layout.LargeIcons:
                    imgFileName = GetWideBannerAsFileName(ser.AniDB_Anime); break;
                case GUIFacadeControl.Layout.List:
                case GUIFacadeControl.Layout.AlbumView:
                case GUIFacadeControl.Layout.Filmstrip:
                case GUIFacadeControl.Layout.CoverFlow:
                    imgFileName = GetPosterAsFileName(ser.AniDB_Anime); break;
            }

            //BaseConfig.MyAnimeLog.Write("GetSeriesBannerAsFileName::viewMode: {0} : {1} : {2}", viewMode, imgFileName, ser);

            return imgFileName;
        }
예제 #9
0
        public static String GetSeriesImage(AnimeSeriesVM ser, GUIFacadeControl.Layout viewMode)
        {
            string imgFileName = "";
            Size sz = PosterSize;

            switch (viewMode)
            {
                case GUIFacadeControl.Layout.LargeIcons:
                    imgFileName = GetWideBannerAsFileName(ser.AniDB_Anime); sz = BannerSize; break;
                case GUIFacadeControl.Layout.List:
                case GUIFacadeControl.Layout.AlbumView:
                case GUIFacadeControl.Layout.Filmstrip:
                case GUIFacadeControl.Layout.CoverFlow:
                    imgFileName = GetPosterAsFileName(ser.AniDB_Anime); sz = PosterSize; break;
            }

            //BaseConfig.MyAnimeLog.Write("GetSeriesBannerAsFileName::viewMode: {0} : {1} : {2}", viewMode, imgFileName, ser);

            if (imgFileName.Length == 0)
            {
                string ident = "series_" + ser.SeriesName;
                string sTextureName = buildMemoryImage(drawSimpleBanner(sz, ser.SeriesName), ident, sz, true);

                if (sTextureName.Length > 0 && !s_SeriesImageList.Contains(sTextureName)) s_SeriesImageList.Add(sTextureName);
                return sTextureName;
            }
            else
            {
                string sTextureName = "";
                if (imgFileName.Length > 0 && System.IO.File.Exists(imgFileName))
                {
                    sTextureName = buildMemoryImageFromFile(imgFileName, sz);
                }
                return sTextureName;
            }
        }
예제 #10
0
        public static String GetGroupImageAsFileName(AnimeGroupVM grp, GUIFacadeControl.Layout viewMode)
        {
            string imgFileName = "";

            DateTime start = DateTime.Now;

            switch (viewMode)
            {
                case GUIFacadeControl.Layout.LargeIcons:
                    imgFileName = GetWideBannerAsFileName(grp); break;
                case GUIFacadeControl.Layout.List:
                case GUIFacadeControl.Layout.AlbumView:
                case GUIFacadeControl.Layout.Filmstrip:
                case GUIFacadeControl.Layout.CoverFlow:
                    imgFileName = GetPosterAsFileName(grp); break;
            }

            TimeSpan ts = DateTime.Now - start;
            BaseConfig.MyAnimeLog.Write("GetGroupImageAsFileName::: {0} in {1}ms", grp.GroupName, ts.TotalMilliseconds);

            return imgFileName;
        }
예제 #11
0
    public void EncodeDisc(GUIFacadeControl facadeView, int getID)
    {
      GetID = getID;
      if (File.Exists(Config.GetFile(Config.Dir.Base, "lame_enc.dll")))
      {
        // Release the drives first for CDDRIVE to be able to open them
        BassMusicPlayer.ReleaseCDDrives();
        char[] Drives = CDDrive.GetCDDriveLetters();
        for (int i = 1; i < facadeView.Count; ++i)
        {
          GUIListItem item = facadeView[i];
          if ((!item.IsFolder) && (Array.IndexOf(Drives, item.Path[0]) > -1))
          {
            TrackInfo trackInfo = new TrackInfo();
            if ((MusicTag)item.MusicTag == null)
            {
              MusicTag musicTag = new MusicTag();
              musicTag.Artist = "Unknown Artist";
              musicTag.Album = "Unknown Album";
              musicTag.Track = Convert.ToInt16(item.Label.Substring(5));
              musicTag.Title = string.Format("Track {0:00}", musicTag.Track);
              item.MusicTag = musicTag;
            }
            trackInfo.MusicTag = (MusicTag)item.MusicTag;
            trackInfo.TrackCount = facadeView.Count - 1;
            trackInfo.Item = item;

            try
            {
              EncodeTrack(trackInfo);
            }
            catch {}
          }
        }
      }
    }
예제 #12
0
        private void LoadTrendingShowsFacade(IEnumerable<TraktShowTrending> trendingItems, GUIFacadeControl facade)
        {
            if (TraktSkinSettings.DashboardTrendingCollection == null || !TraktSkinSettings.DashboardTrendingCollection.Exists(d => d.TVShowWindows.Contains(GUIWindowManager.ActiveWindow.ToString())))
                return;

            // get trending settings
            var trendingSettings = GetTrendingSettings();
            if (trendingSettings == null) return;

            TraktLogger.Debug("Loading Trakt Trending Shows facade");

            // if no trending, then nothing to do
            if (trendingItems == null || trendingItems.Count() == 0)
                return;

            // stop any existing image downloads
            GUIShowListItem.StopDownload = true;

            // clear facade
            GUIControl.ClearControl(GUIWindowManager.ActiveWindow, facade.GetID);

            int itemId = 0;
            var showImages = new List<GUITmdbImage>();

            // filter shows
            if (TraktSettings.FilterTrendingOnDashboard)
                trendingItems = GUICommon.FilterTrendingShows(trendingItems);

            // Add each activity item to the facade
            foreach (var trendingItem in trendingItems.Take(trendingSettings.FacadeMaxItems))
            {
                if (trendingItem.Show == null)
                    continue;

                // add image for download
                var images = new GUITmdbImage { ShowImages = new TmdbShowImages { Id = trendingItem.Show.Ids.Tmdb } };
                showImages.Add(images);

                var item = new GUIShowListItem(trendingItem.Show.Title, GUIWindowManager.ActiveWindow);

                item.Label2 = trendingItem.Show.Year.ToString();
                item.TVTag = trendingItem;
                item.Show = trendingItem.Show;
                item.Images = images;
                item.ItemId = Int32.MaxValue - itemId;
                item.IconImage = GUIImageHandler.GetDefaultPoster(false);
                item.IconImageBig = GUIImageHandler.GetDefaultPoster();
                item.ThumbnailImage = GUIImageHandler.GetDefaultPoster();
                item.OnItemSelected += OnTrendingShowSelected;
                try
                {
                    facade.Add(item);
                }
                catch { }
                itemId++;
            }

            // Set Facade Layout
            facade.SetCurrentLayout(trendingSettings.FacadeType);
            facade.SetVisibleFromSkinCondition();

            // set facade properties
            GUIUtils.SetProperty("#Trakt.Trending.Shows.Items", string.Format("{0} {1}", trendingItems.Count().ToString(), trendingItems.Count() > 1 ? Translation.SeriesPlural : Translation.Series));
            GUIUtils.SetProperty("#Trakt.Trending.Shows.PeopleCount", trendingItems.Sum(t => t.Watchers).ToString());
            GUIUtils.SetProperty("#Trakt.Trending.Shows.Description", string.Format(Translation.TrendingTVShowsPeople, trendingItems.Sum(t => t.Watchers).ToString(), trendingItems.Count().ToString()));

            // Download images Async and set to facade
            GUIShowListItem.StopDownload = false;
            GUIShowListItem.GetImages(showImages);

            TraktLogger.Debug("Finished Loading Trending Shows facade");
        }
예제 #13
0
        private void LoadActivityFacade(TraktActivity activities, GUIFacadeControl facade)
        {
            if (TraktSkinSettings.DashBoardActivityWindows == null || !TraktSkinSettings.DashBoardActivityWindows.Contains(GUIWindowManager.ActiveWindow.ToString()))
                return;

            // if no activities report to user
            if (activities == null || activities.Activities == null || activities.Activities.Count == 0)
            {
                facade.Clear();

                var item = new GUIListItem(Translation.NoActivities);
                facade.Add(item);
                facade.SetCurrentLayout(TraktSkinSettings.DashboardActivityFacadeType);
                ClearSelectedActivityProperties();
                return;
            }

            // get the current view
            var view = (ActivityView)TraktSettings.ActivityStreamView;

            // if no new activities then nothing to do
            if (facade.Count > 0 && !ReloadActivityView)
            {
                var mostRecentActivity = facade[0].TVTag as TraktActivity.Activity;
                var lastActivity = facade[facade.Count - 1].TVTag as TraktActivity.Activity;

                if (mostRecentActivity != null && lastActivity != null)
                {
                    // only check the timestamp if only showing yourself
                    // check first and last because we may insert something in the middle between last load
                    if (view == ActivityView.me && mostRecentActivity.Timestamp == activities.Activities.First().Timestamp
                                                && lastActivity.Timestamp == activities.Activities.Last().Timestamp)
                        return;

                    if (mostRecentActivity.Timestamp == activities.Activities.First().Timestamp &&
                        mostRecentActivity.User.Username == activities.Activities.First().User.Username)
                    {
                        return;
                    }
                }
            }

            ReloadActivityView = false;
            TraktLogger.Debug("Loading Trakt Activity Facade");

            // stop any existing image downloads
            GUIUserListItem.StopDownload = true;

            // clear facade
            GUIControl.ClearControl(GUIWindowManager.ActiveWindow, facade.GetID);

            int itemId = 0;
            int PreviousSelectedIdx = -1;
            var userImages = new List<GUITraktImage>();

            // Add each activity item to the facade
            foreach (var activity in activities.Activities.Distinct().OrderByDescending(a => a.Timestamp))
            {
                if (PreviousSelectedIdx == -1 && PreviousSelectedActivity != null && TraktSettings.RememberLastSelectedActivity)
                {
                    if (activity.Equals(PreviousSelectedActivity))
                        PreviousSelectedIdx = itemId;
                }

                string itemLabel = GUICommon.GetActivityListItemTitle(activity, view);
                if (string.IsNullOrEmpty(itemLabel))
                    continue;

                var item = new GUIUserListItem(itemLabel, GUIWindowManager.ActiveWindow);

                string activityImage = GetActivityImage(activity);
                string avatarImage = GetAvatarImage(activity);

                // add image to download
                var images = new GUITraktImage { UserImages = activity.User.Images };
                if (avatarImage == "defaultTraktUser.png")
                    userImages.Add(images);

                item.Label2 = activity.Timestamp.ToPrettyDateTime();
                item.TVTag = activity;
                item.User = activity.User;
                item.Images = images;
                item.ItemId = Int32.MaxValue - itemId;
                item.IconImage = avatarImage;
                item.IconImageBig = avatarImage;
                item.ThumbnailImage = avatarImage;
                item.PinImage = activityImage;
                item.OnItemSelected += OnActivitySelected;
                facade.Add(item);
                itemId++;
            }

            // Set Facade Layout
            facade.SetCurrentLayout(TraktSkinSettings.DashboardActivityFacadeType);
            facade.SetVisibleFromSkinCondition();

            // Select previously selected item
            if (facade.LayoutControl.IsFocused && PreviousSelectedIdx >= 0)
                facade.SelectIndex(PreviousSelectedIdx);

            // set facade properties
            GUIUtils.SetProperty("#Trakt.Activity.Count", activities.Activities.Count().ToString());
            GUIUtils.SetProperty("#Trakt.Activity.Items", string.Format("{0} {1}", activities.Activities.Count().ToString(), activities.Activities.Count() > 1 ? Translation.Activities : Translation.Activity));
            GUIUtils.SetProperty("#Trakt.Activity.Description", GetActivityDescription((ActivityView)TraktSettings.ActivityStreamView));

            // Download avatar images Async and set to facade
            GUIUserListItem.StopDownload = false;
            GUIUserListItem.GetImages(userImages);

            TraktLogger.Debug("Finished Loading Activity facade");
        }
예제 #14
0
    protected virtual void SwitchToNextAllowedLayout(GUIFacadeControl.Layout selectedLayout)
    {
      int iSelectedLayout = (int)selectedLayout;
      int totalLayouts = Enum.GetValues(typeof (GUIFacadeControl.Layout)).Length - 1;

      if (iSelectedLayout > totalLayouts)
        iSelectedLayout = 0;

      bool shouldContinue = true;
      do
      {
        if (!AllowLayout(selectedLayout) || facadeLayout.IsNullLayout(selectedLayout))
        {
          iSelectedLayout++;
          if (iSelectedLayout > totalLayouts)
            iSelectedLayout = 0;
        }
        else
        {
          shouldContinue = false;
        }
      } while (shouldContinue);

      CurrentLayout = (GUIFacadeControl.Layout)iSelectedLayout;

      SwitchLayout();

      GUIMessage msg = new GUIMessage(GUIMessage.MessageType.GUI_MSG_LAYOUT_CHANGED, 0, 0, 0, 0, 0, 0);
      GUIWindowManager.SendMessage(msg);
    }