mirror of
https://github.com/GalaxyViewer/GalaxyViewer.git
synced 2026-08-14 00:57:53 +00:00
🚧 Basic Menu, Login/Out context Switching added
This commit is contained in:
+1
-1
@@ -2,7 +2,7 @@ root = true
|
||||
|
||||
[*]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
indent_size = 4
|
||||
end_of_line = lf
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<Version>0.1.0</Version>
|
||||
<Product>GalaxyViewer</Product>
|
||||
<Authors>Galaxy Littlepaws</Authors>
|
||||
<Nullable>enable</Nullable>
|
||||
<AvaloniaVersion>11.0.10</AvaloniaVersion>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
+4
-4
@@ -9,10 +9,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GalaxyViewer.Desktop", "Gal
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GalaxyViewer.Browser", "GalaxyViewer.Browser\GalaxyViewer.Browser.csproj", "{1C1A049E-235C-4CD0-B6FA-D53AC418F4DA}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GalaxyViewer.iOS", "GalaxyViewer.iOS\GalaxyViewer.iOS.csproj", "{EBD9022F-BC83-4846-9A11-6F7F3772DC64}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GalaxyViewer.Android", "GalaxyViewer.Android\GalaxyViewer.Android.csproj", "{7AD1DAC8-7FBE-49D5-8614-7321233DB82E}"
|
||||
EndProject
|
||||
# Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GalaxyViewer.iOS", "GalaxyViewer.iOS\GalaxyViewer.iOS.csproj", "{EBD9022F-BC83-4846-9A11-6F7F3772DC64}"
|
||||
# EndProject
|
||||
# Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GalaxyViewer.Android", "GalaxyViewer.Android\GalaxyViewer.Android.csproj", "{7AD1DAC8-7FBE-49D5-8614-7321233DB82E}"
|
||||
# EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{3DA99C4E-89E3-4049-9C22-0A7EC60D83D8}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
Directory.Build.props = Directory.Build.props
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
<llsd>
|
||||
<array>
|
||||
|
||||
<!-- Second Life -->
|
||||
<map>
|
||||
<key>gridnick</key>
|
||||
<string>agni</string>
|
||||
<key>gridname</key>
|
||||
<string>Second Life (agni)</string>
|
||||
<key>platform</key>
|
||||
<string>SecondLife</string>
|
||||
<key>loginuri</key>
|
||||
<string>https://login.agni.lindenlab.com/cgi-bin/login.cgi</string>
|
||||
<key>loginpage</key>
|
||||
<string>http://secondlife.com/app/login/?channel=Second+Life+Release</string>
|
||||
<key>helperuri</key>
|
||||
<string>https://secondlife.com/helpers/</string>
|
||||
<key>website</key>
|
||||
<string>http://secondlife.com/</string>
|
||||
<key>support</key>
|
||||
<string>http://secondlife.com/support/</string>
|
||||
<key>register</key>
|
||||
<string>http://secondlife.com/registration/</string>
|
||||
<key>password</key>
|
||||
<string>http://secondlife.com/account/request.php</string>
|
||||
<key>version</key>
|
||||
<string>0</string>
|
||||
</map>
|
||||
|
||||
<!-- Second Life Beta -->
|
||||
<map>
|
||||
<key>gridnick</key>
|
||||
<string>aditi</string>
|
||||
<key>gridname</key>
|
||||
<string>Second Life Beta (aditi)</string>
|
||||
<key>platform</key>
|
||||
<string>SecondLife</string>
|
||||
<key>loginuri</key>
|
||||
<string>https://login.aditi.lindenlab.com/cgi-bin/login.cgi</string>
|
||||
<key>loginpage</key>
|
||||
<string>http://secondlife.com/app/login/?channel=Second+Life+Beta</string>
|
||||
<key>helperuri</key>
|
||||
<string>http://aditi-secondlife.webdev.lindenlab.com/helpers/</string>
|
||||
<key>website</key>
|
||||
<string>http://secondlife.com/</string>
|
||||
<key>support</key>
|
||||
<string>http://secondlife.com/support/</string>
|
||||
<key>register</key>
|
||||
<string>http://secondlife.com/registration/</string>
|
||||
<key>password</key>
|
||||
<string>http://secondlife.com/account/request.php</string>
|
||||
<key>version</key>
|
||||
<string>1</string>
|
||||
</map>
|
||||
|
||||
</array>
|
||||
</llsd>
|
||||
@@ -5,7 +5,7 @@
|
||||
<LangVersion>latest</LangVersion>
|
||||
<AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>
|
||||
</PropertyGroup>
|
||||
|
||||
|
||||
<ItemGroup>
|
||||
<AvaloniaResource Include="Assets\**" />
|
||||
</ItemGroup>
|
||||
@@ -17,5 +17,6 @@
|
||||
<PackageReference Include="Avalonia.ReactiveUI" Version="$(AvaloniaVersion)" />
|
||||
<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
|
||||
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="$(AvaloniaVersion)" />
|
||||
<!-- More things will go here -->
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
using System;
|
||||
|
||||
namespace GalaxyViewer.Models
|
||||
{
|
||||
public class Grid
|
||||
{
|
||||
public string GridNick { get; set; }
|
||||
public string GridName { get; set; }
|
||||
public string Platform { get; set; }
|
||||
public string LoginUri { get; set; }
|
||||
public string LoginPage { get; set; }
|
||||
public string HelperUri { get; set; }
|
||||
public string Website { get; set; }
|
||||
public string Support { get; set; }
|
||||
public string Register { get; set; }
|
||||
public string Password { get; set; }
|
||||
public string Version { get; set; }
|
||||
|
||||
public Grid(string gridNick, string gridName, string platform, string loginUri, string loginPage, string helperUri, string website, string support, string register, string password, string version)
|
||||
{
|
||||
GridNick = !string.IsNullOrEmpty(gridNick) ? gridNick : throw new ArgumentNullException(nameof(gridNick));
|
||||
GridName = !string.IsNullOrEmpty(gridName) ? gridName : throw new ArgumentNullException(nameof(gridName));
|
||||
Platform = !string.IsNullOrEmpty(platform) ? platform : throw new ArgumentNullException(nameof(platform));
|
||||
LoginUri = !string.IsNullOrEmpty(loginUri) ? loginUri : throw new ArgumentNullException(nameof(loginUri));
|
||||
LoginPage = !string.IsNullOrEmpty(loginPage) ? loginPage : throw new ArgumentNullException(nameof(loginPage));
|
||||
HelperUri = !string.IsNullOrEmpty(helperUri) ? helperUri : throw new ArgumentNullException(nameof(helperUri));
|
||||
Website = !string.IsNullOrEmpty(website) ? website : throw new ArgumentNullException(nameof(website));
|
||||
Support = !string.IsNullOrEmpty(support) ? support : throw new ArgumentNullException(nameof(support));
|
||||
Register = !string.IsNullOrEmpty(register) ? register : throw new ArgumentNullException(nameof(register));
|
||||
Password = !string.IsNullOrEmpty(password) ? password : throw new ArgumentNullException(nameof(password));
|
||||
Version = !string.IsNullOrEmpty(version) ? version : throw new ArgumentNullException(nameof(version));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Xml.Linq;
|
||||
using GalaxyViewer.Models;
|
||||
|
||||
namespace GalaxyViewer.Services
|
||||
{
|
||||
public class GridService
|
||||
{
|
||||
public List<Grid> ParseGridsFromXml()
|
||||
{
|
||||
string xmlFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Assets", "grids.xml");
|
||||
var xdoc = XDocument.Load(xmlFilePath);
|
||||
var grids = new List<Grid>();
|
||||
|
||||
if (xdoc.Root != null)
|
||||
{
|
||||
foreach (var gridElement in xdoc.Root.Elements("grid"))
|
||||
{
|
||||
var grid = new Grid(
|
||||
gridElement.Element("gridnick")?.Value ?? string.Empty,
|
||||
gridElement.Element("gridname")?.Value ?? string.Empty,
|
||||
gridElement.Element("platform")?.Value ?? string.Empty,
|
||||
gridElement.Element("loginuri")?.Value ?? string.Empty,
|
||||
gridElement.Element("loginpage")?.Value ?? string.Empty,
|
||||
gridElement.Element("helperuri")?.Value ?? string.Empty,
|
||||
gridElement.Element("website")?.Value ?? string.Empty,
|
||||
gridElement.Element("support")?.Value ?? string.Empty,
|
||||
gridElement.Element("register")?.Value ?? string.Empty,
|
||||
gridElement.Element("password")?.Value ?? string.Empty,
|
||||
gridElement.Element("version")?.Value ?? string.Empty
|
||||
);
|
||||
|
||||
grids.Add(grid);
|
||||
}
|
||||
}
|
||||
|
||||
return grids;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,44 @@
|
||||
namespace GalaxyViewer.ViewModels;
|
||||
using Avalonia.Controls;
|
||||
using GalaxyViewer.Views;
|
||||
using ReactiveUI;
|
||||
using System.Reactive;
|
||||
|
||||
public class MainViewModel : ViewModelBase
|
||||
namespace GalaxyViewer.ViewModels
|
||||
{
|
||||
#pragma warning disable CA1822 // Mark members as static
|
||||
public string Greeting => "Welcome to Avalonia!";
|
||||
#pragma warning restore CA1822 // Mark members as static
|
||||
}
|
||||
public class MainViewModel : ViewModelBase
|
||||
{
|
||||
private UserControl? _currentView;
|
||||
private bool _isLoggedIn;
|
||||
|
||||
public UserControl? CurrentView
|
||||
{
|
||||
get => _currentView;
|
||||
set => this.RaiseAndSetIfChanged(ref _currentView, value);
|
||||
}
|
||||
|
||||
public bool IsLoggedIn
|
||||
{
|
||||
get => _isLoggedIn;
|
||||
set
|
||||
{
|
||||
this.RaiseAndSetIfChanged(ref _isLoggedIn, value);
|
||||
CurrentView = value ? (UserControl)new LoggedInView() : new LoginView();
|
||||
}
|
||||
}
|
||||
|
||||
public ReactiveCommand<Unit, Unit> LogoutCommand { get; }
|
||||
|
||||
public MainViewModel()
|
||||
{
|
||||
_currentView = new LoginView();
|
||||
IsLoggedIn = false; // Set this to true when the user logs in
|
||||
|
||||
LogoutCommand = ReactiveCommand.Create(Logout);
|
||||
}
|
||||
|
||||
private void Logout()
|
||||
{
|
||||
IsLoggedIn = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
<UserControl xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
x:Class="GalaxyViewer.Views.LoggedInView">
|
||||
<TextBlock Text="Login Successful" HorizontalAlignment="Center" VerticalAlignment="Center" />
|
||||
</UserControl>
|
||||
@@ -0,0 +1,18 @@
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Markup.Xaml;
|
||||
|
||||
namespace GalaxyViewer.Views
|
||||
{
|
||||
public partial class LoggedInView : UserControl
|
||||
{
|
||||
public LoggedInView()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void InitializeComponent()
|
||||
{
|
||||
AvaloniaXamlLoader.Load(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
<UserControl xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
x:Class="GalaxyViewer.Views.LoginView">
|
||||
<StackPanel Margin="20">
|
||||
<TextBox Name="UsernameBox" Watermark="Username" />
|
||||
<TextBox Name="PasswordBox" Watermark="Password" PasswordChar="*" />
|
||||
<Button Content="Login" Margin="0,10,0,0" Click="LoginButton_Click" />
|
||||
</StackPanel>
|
||||
</UserControl>
|
||||
@@ -0,0 +1,24 @@
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Markup.Xaml;
|
||||
|
||||
namespace GalaxyViewer.Views
|
||||
{
|
||||
public partial class LoginView : UserControl
|
||||
{
|
||||
public LoginView()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void InitializeComponent()
|
||||
{
|
||||
AvaloniaXamlLoader.Load(this);
|
||||
}
|
||||
|
||||
private void LoginButton_Click(object? sender, Avalonia.Interactivity.RoutedEventArgs e)
|
||||
{
|
||||
((ViewModels.MainViewModel)DataContext!).IsLoggedIn = true;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -12,5 +12,44 @@
|
||||
<vm:MainViewModel />
|
||||
</Design.DataContext>
|
||||
|
||||
<TextBlock Text="{Binding Greeting}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
||||
<DockPanel>
|
||||
<Menu DockPanel.Dock="Top">
|
||||
<MenuItem Header="File">
|
||||
<MenuItem Header="New Window"/>
|
||||
<Separator/>
|
||||
<MenuItem Header="Upload Blinn-Phong Texture" IsEnabled="{Binding IsLoggedIn}"/>
|
||||
<MenuItem Header="Upload PBR Material" IsEnabled="{Binding IsLoggedIn}"/>
|
||||
<MenuItem Header="Upload Mesh" IsEnabled="{Binding IsLoggedIn}"/>
|
||||
<MenuItem Header="Import Object" IsEnabled="{Binding IsLoggedIn}"/>
|
||||
<MenuItem Header="Script Editor" IsEnabled="{Binding IsLoggedIn}"/>
|
||||
<Separator/>
|
||||
<MenuItem Header="Login"/>
|
||||
<MenuItem Header="Logout" Command="{Binding LogoutCommand}" IsEnabled="{Binding IsLoggedIn}"/>
|
||||
<MenuItem Header="Relog"/>
|
||||
<MenuItem Header="Preferences"/>
|
||||
<Separator/>
|
||||
<MenuItem Header="Exit"/>
|
||||
</MenuItem>
|
||||
<MenuItem Header="World" IsEnabled="{Binding IsLoggedIn}">
|
||||
<MenuItem Header="Create new Landmark Here"/>
|
||||
<MenuItem Header="Set Home to Here"/>
|
||||
<MenuItem Header="Teleport Home"/>
|
||||
<MenuItem Header="About Land"/>
|
||||
<MenuItem Header="About Region"/>
|
||||
<MenuItem Header="World Map"/>
|
||||
<MenuItem Header="Mini-Map"/>
|
||||
<MenuItem Header="People Nearby"/>
|
||||
</MenuItem>
|
||||
<MenuItem Header="Community" IsEnabled="{Binding IsLoggedIn}">
|
||||
<MenuItem Header="Friends"/>
|
||||
<MenuItem Header="Groups"/>
|
||||
<MenuItem Header="Events"/>
|
||||
<MenuItem Header="Marketplace"/>
|
||||
<MenuItem Header="Search"/>
|
||||
</MenuItem>
|
||||
<!-- Add more menu items as needed -->
|
||||
</Menu>
|
||||
|
||||
<ContentControl Content="{Binding CurrentView}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
|
||||
</DockPanel>
|
||||
</UserControl>
|
||||
|
||||
Reference in New Issue
Block a user