public MainPage(String songStringFromUrl = null) { InitializeComponent(); BackgroundColor = Color.FromHex("#000000"); //* Set page style NavigationPage.SetHasNavigationBar(this, false); //* DependencyService.Get <IStatusBar>().HideStatusBar(); // Make sure status bar is hidden MakeStepGrid(); //PinchGestureRecognizer pinchRecognizer = new PinchGestureRecognizer(); // //pinchRecognizer.PinchUpdated += HandlePinch; // Handle when user pinches //stepgrid.GestureRecognizers.Add(pinchRecognizer); // // Initialize the SongPlayer player = new SongPlayer(); //Load default tempo and instruments, and if this is the first time the user has launched the app, show the startup song Song startSong = FileUtilities.LoadSongFromStream(FileUtilities.LoadEmbeddedResource("firsttimesong.txt")); if (!Directory.Exists(FileUtilities.PathToSongDirectory)) { Directory.CreateDirectory(FileUtilities.PathToSongDirectory); this.song = startSong; lastLoadedSongName = "Initial beat"; UpdateStepGridToMatchSong(); FileUtilities.SaveSongToFile(startSong, "Initial beat"); firstTime = true; } else { song = new Song(NumColumns, startSong.Instruments, startSong.Tempo); firstTime = false; } if (songStringFromUrl != null) { firstTime = false; song = FileUtilities.GetSongFromSongString(songStringFromUrl); UpdateStepGridToMatchSong(); } playImageName = App.isTablet ? "play_Tab.png" : "play.png"; stopImageName = App.isTablet ? "stop_Tab.png" : "stop.png"; MakeSideBar(); // Initialize the highlight box highlights = new BoxView[2]; for (int i = 0; i < 2; i++) { highlights[i] = new BoxView() { Color = Color.White, Opacity = brightnessIncrease, InputTransparent = true }; } player.BeatStarted += HighlightColumns; // Add an event listener to keep highlight in time with beat //Set up a master grid with 3 columns and 2 rows to eventually place stepgrid, sidebar, and scrollbars in. mastergrid = new Grid { ColumnSpacing = 2, RowSpacing = 2 }; mastergrid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(14, GridUnitType.Absolute) }); //spot for up-down scrollbar mastergrid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(8, GridUnitType.Star) }); // spot for stepgrid mastergrid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) }); // spot for sidebar mastergrid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }); // horizontal spot for everything, but side scrollbar mastergrid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(14, GridUnitType.Absolute) }); // spot for side scrollbar // Make vertical scrollbar, size doesn't matter because constraints are used to size it later verticalScrollBar = new BoxView { BackgroundColor = Color.FromHex("D3D3D3"), WidthRequest = 1, HeightRequest = 1, }; // Make vertical scrollbar horizontalScrollBar = new BoxView { BackgroundColor = Color.FromHex("D3D3D3"), WidthRequest = 1, HeightRequest = 1, }; // This calculates the pixel values for the width and height of the whole scroller (including offscreen) scrollerActualHeight = (miniGridHeight + stepGridSpacing) * NumRows - stepGridSpacing; scrollerActualWidth = (miniGridWidth + stepGridSpacing) * NumColumns - stepGridSpacing; // Initialize scrollview and put stepgrid inside it scroller = new ScrollView { Orientation = ScrollOrientation.Both //Both vertical and horizontal orientation }; scroller.Content = stepgrid; mastergrid.Children.Add(scroller, 1, 0); // Make the Relative layouts that will hold the sidebars and place them in their proper positions in mastergrid verticalBarArea = new RelativeLayout(); mastergrid.Children.Add(verticalBarArea, 0, 0); horizontalBarArea = new RelativeLayout(); mastergrid.Children.Add(horizontalBarArea, 1, 1); DrawScrollBar(horizontalScrollBar); DrawScrollBar(verticalScrollBar); //scroller.Scrolled += UpdateScrollBars; // Scrolled event that calls method to update scrollbars scroller.Scrolled += BoundedScroll; mastergrid.Children.Add(sidebar, 2, 0); // Add sidebar to final column of mastergrid Grid.SetRowSpan(sidebar, 2); //make sidebar take up both rows in rightmost column Content = mastergrid; }
public MainPage() { InitializeComponent(); // Initializing the song player and noteArray noteArray = new SongPlayer.Note[NumColumns, NumRows]; //stored this way because C# is row-major and we want to access a column at a time player = new SongPlayer(noteArray); // Initializing the colorMap colorMap = new Dictionary <Color, SongPlayer.Instrument>(); colorMap[Red] = player.LoadInstrument("Snare"); colorMap[Blue] = player.LoadInstrument("YRM1x Atmosphere"); colorMap[Green] = player.LoadInstrument("Bass Drum"); colorMap[Yellow] = player.LoadInstrument("Hi-Hat"); // Initialize color of highlighted buttons highLightedGrey = HighLightedVersion(Grey); highLightedRed = HighLightedVersion(Red); highLightedBlue = HighLightedVersion(Blue); highLightedGreen = HighLightedVersion(Green); highLightedYellow = HighLightedVersion(Yellow); // Initaialize the array of buttons buttonArray = new Button[NumColumns, NumRows]; //stored this way because C# is row-major and we want to access a column at a time BackgroundColor = Color.FromHex("#000000"); // Make background color black Style greyButton = new Style(typeof(Button)) // Button style for testing grid { Setters = { new Setter { Property = Button.BackgroundColorProperty, Value = Grey }, new Setter { Property = Button.BorderRadiusProperty, Value = 0 }, } }; //Set up a master grid with 2 columns to eventually place stepgrid and sidebar in. mastergrid = new Grid { ColumnSpacing = 2 }; mastergrid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(8, GridUnitType.Star) }); mastergrid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) }); //Set up grid of note squares stepgrid = new Grid { ColumnSpacing = 2, RowSpacing = 2 }; //Initialize the number of rows and columns for (int i = 0; i < NumRows; i++) { stepgrid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }); } for (int i = 0; i < NumColumns; i++) { stepgrid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) }); } //Add the note buttons to the grid for (int i = 0; i < NumRows; i++) { for (int j = 0; j < NumColumns; j++) { Button button = new Button { Style = greyButton }; // Make a new button stepgrid.Children.Add(button, j, i); // Add it to the grid button.Clicked += OnButtonClicked; // Add it to stepsquare event handler noteArray[j, i] = SongPlayer.Note.None; // Add a placeholder to songArray buttonArray[j, i] = button; // Add button to buttonArray } } // Make the sidebar sidebar = new Grid { ColumnSpacing = 1, RowSpacing = 1 }; for (int i = 0; i < NumInstruments; i++) { sidebar.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }); } sidebar.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) }); // Fill sidebar it with buttons Color[] colors = new Color[] { Red, Blue, Green, Yellow }; // Array of colors for (int i = 0; i < colors.Length; i++) { Button button = new Button { BackgroundColor = colors[i], BorderColor = Color.Black, BorderWidth = 3 }; // Make a new button sidebar.Children.Add(button, 0, i); // Add it to the sidebar button.Clicked += OnSidebarClicked; // Add to sidebar event handler } // Set up scroll view and put grid inside it scroller = new ScrollView { Orientation = ScrollOrientation.Vertical //Both vertical and horizontal orientation }; scroller.Content = stepgrid; // Add the scroller (which contains stepgrid) and sidebar to mastergrid mastergrid.Children.Add(scroller, 0, 0); // Add scroller to first column of mastergrid mastergrid.Children.Add(sidebar, 1, 0); // Add sidebar to final column of mastergrid //Grid.SetRowSpan(sidebar, NumRows); // Make sure that it spans the whole column Content = mastergrid; player.BeatStarted += HighlightColumns; player.BeginPlaying(240); }