Changeset - 46b3b97a9901
[Not reviewed]
Jason Maltzen (jmaltzen) - 7 years ago 2018-05-21 20:05:30
jason.maltzen@unsanctioned.net
Don't allow <=0 screen resolution or pixel scale settings, as that doesn't make sense.
1 file changed with 43 insertions and 40 deletions:
0 comments (0 inline, 0 general)
MainWindow.cs
Show inline comments
...
 
@@ -10,55 +10,55 @@
 

	
 
 The above copyright notice and this permission notice shall be included in
 
 all copies or substantial portions of the Software.
 

	
 
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 
 THE SOFTWARE.
 
*/
 

	
 
using System;
 
using System.IO;
 
using System.Collections.Generic;
 
using System.Text.RegularExpressions;
 
using Gtk;
 
using DesertPaintLab;
 

	
 
public partial class MainWindow : Gtk.Window
 
{
 
    const string APP_VERSION = "1.7.15";
 

	
 
    bool unsavedData = false;
 
    bool shouldShutDown = false;
 
    bool unsavedData;
 
    bool shouldShutDown;
 
    List<string> profileList = new List<string>();
 
    PlayerProfile profile = null;
 
    PlayerProfile profile;
 

	
 
    Gdk.Window rootWindow = null;
 
    Gdk.Pixbuf screenBuffer = null;
 
    Gdk.Window rootWindow;
 
    Gdk.Pixbuf screenBuffer;
 

	
 
    // views
 
    RecipeGeneratorView generatorView;
 
    SimulatorView simulatorView;
 
    CaptureView captureView;
 

	
 
    private ReactionStatusWindow _reactionStatusWindow;
 

	
 
    public bool ShouldShutDown
 
    {
 
        get
 
        {
 
            return shouldShutDown;
 
        }
 
    }
 

	
 
    public MainWindow() : base(Gtk.WindowType.Toplevel)
 
    {
 
        string appDataPath = FileUtils.AppDataPath;
 
        if (!System.IO.Directory.Exists(appDataPath))
 
        {
 
            System.IO.Directory.CreateDirectory(appDataPath);
 
        }
 

	
...
 
@@ -87,54 +87,54 @@ public partial class MainWindow : Gtk.Wi
 
        }
 
        Palette.Load(colorsPath);
 

	
 
        string ingredientsPath = FileUtils.FindApplicationResourceFile("ingredients.txt");
 
        if (ingredientsPath == null)
 
        {
 
            // failed to find ingredients.txt file
 
            MessageDialog md = new MessageDialog(this,
 
                DialogFlags.DestroyWithParent,
 
                MessageType.Error, ButtonsType.Close,
 
                "Failed to find ingredients.txt file. Please check your installation.");
 

	
 
            md.Run();
 
            md.Destroy();
 
            Application.Quit();
 
        }
 
        ReagentManager.Load(ingredientsPath);
 

	
 
        Build();
 

	
 
        // get the root window
 
        rootWindow = Gdk.Global.DefaultRootWindow;
 

	
 
        // get its width and height
 
        DesertPaintLab.AppSettings.Load();
 
        AppSettings.Load();
 

	
 
        ShowPreferencesDialog();
 

	
 
        bool enableDebugMenu;
 
        DesertPaintLab.AppSettings.Get("EnableDebugMenu", out enableDebugMenu);
 
        AppSettings.Get("EnableDebugMenu", out enableDebugMenu);
 
        this.DebugAction.Visible = enableDebugMenu;
 

	
 
        ReactionRecorder.Instance.OnReactionRecorded += OnReactionRecorded;
 

	
 
        if (!OpenProfile())
 
        {
 
            shouldShutDown = true;
 
        }
 

	
 
        if (!shouldShutDown)
 
        {
 
            captureView = new CaptureView(profile, screenBuffer);
 
            generatorView = new RecipeGeneratorView(profile);
 
            generatorView.SetStatus += OnStatusUpdate;
 
            generatorView.Started += OnGeneratorRunning;
 
            generatorView.Stopped += OnGeneratorStopped;
 
            simulatorView = new SimulatorView(profile);
 

	
 
            contentContainer.Add(captureView);
 
            captureView.Show();
 
        }
 
    }
 

	
 
    bool ConfirmedExit()
...
 
@@ -239,50 +239,51 @@ public partial class MainWindow : Gtk.Wi
 
                newProfileCreated = profile.Initialize();
 
                if (!newProfileCreated)
 
                {
 
                    MessageDialog md = new MessageDialog(this,
 
                        DialogFlags.DestroyWithParent,
 
                        MessageType.Error, ButtonsType.Ok,
 
                        "Failed to initialize profile: " + profile.LastError);
 
                    resp = (ResponseType)md.Run();
 
                    md.Destroy();
 
                    duplicateName = false;
 
                }
 
                ProfileChanged();
 
            }
 
        }
 
        newProfileDialog.Destroy();
 
        return newProfileCreated;
 
    }
 

	
 
    bool OpenProfile()
 
    {
 
        bool profileSelected = false;
 

	
 
        if (profileList.Count > 0)
 
        {
 
            SelectProfileDialog selectProfileDialog = new SelectProfileDialog();
 
            selectProfileDialog.ProfileList = profileList;
 
            SelectProfileDialog selectProfileDialog = new SelectProfileDialog {
 
                ProfileList = profileList
 
            };
 
            ResponseType resp = (ResponseType)selectProfileDialog.Run();
 
            selectProfileDialog.Destroy();
 
            string selectedProfile = selectProfileDialog.SelectedProfile;
 
            if ((resp == ResponseType.Ok) && (selectedProfile.Length > 0))
 
            // Selected a profile.
 
            {
 
                SetProfileName(selectedProfile);
 
                profileSelected = true;
 
            }
 
            else if (resp == ResponseType.Accept) // New profile.
 
            {
 
                profileSelected = NewProfile();
 
            }
 
        }
 
        else
 
        {
 
            FirstRunDialog firstRunDialog = new FirstRunDialog();
 
            ResponseType resp = (ResponseType)firstRunDialog.Run();
 
            firstRunDialog.Destroy();
 
            if (resp == ResponseType.Ok) // New profile
 
            {
 
                profileSelected = NewProfile();
 
            }
 
            else if (resp == ResponseType.Accept) // Import
...
 
@@ -384,88 +385,89 @@ public partial class MainWindow : Gtk.Wi
 
        }
 

	
 
        if (NewProfile())
 
        {
 
            bool ok = profile.Load();
 
            if (ok)
 
            {
 
                ProfileChanged();
 
            }
 
            else
 
            {
 
                MessageDialog md = new MessageDialog(this,
 
                    DialogFlags.DestroyWithParent,
 
                    MessageType.Warning, ButtonsType.OkCancel,
 
                    "Failed to load profile: " + profile.LastError);
 
                md.Run();
 
                md.Destroy();
 
            }
 
        }
 
    }
 

	
 
    protected virtual void OnOpenProfile(object sender, System.EventArgs e)
 
    {
 
        bool profileSelected = false;
 
        SelectProfileDialog selectProfileDialog = new SelectProfileDialog();
 
        selectProfileDialog.ProfileList = profileList;
 
        SelectProfileDialog selectProfileDialog = new SelectProfileDialog {
 
            ProfileList = profileList
 
        };
 
        ResponseType resp = (ResponseType)selectProfileDialog.Run();
 
        selectProfileDialog.Destroy();
 
        if (resp == ResponseType.Ok) // Selected a profile.
 
        {
 
            SetProfileName(selectProfileDialog.SelectedProfile);
 
            profileSelected = true;
 
        }
 
        else if (resp == ResponseType.Accept) // New profile.
 
        {
 
            profileSelected = NewProfile();
 
        }
 
        if (profileSelected)
 
        {
 
            bool ok = profile.Load();
 
            if (ok)
 
            {
 
                ProfileChanged();
 
            }
 
            else
 
            {
 
                MessageDialog md = new MessageDialog(this,
 
                    DialogFlags.DestroyWithParent,
 
                    MessageType.Warning, ButtonsType.OkCancel,
 
                    "Failed to load profile: " + profile.LastError);
 
                md.Run();
 
                md.Destroy();
 
            }
 
        }
 
    }
 

	
 
    protected virtual void OnAbout(object sender, System.EventArgs e)
 
    {
 
        AboutDialog aboutDialog = new AboutDialog();
 

	
 
        aboutDialog.ProgramName = "Desert Paint Lab";
 
        aboutDialog.Version = APP_VERSION;
 
        aboutDialog.Comments = "Desert Paint Lab paint reaction recorder for A Tale in the Desert";
 
        aboutDialog.Authors = new string[] { "Tess Snider", "Jason Maltzen" };
 
        AboutDialog aboutDialog = new AboutDialog {
 
            ProgramName = "Desert Paint Lab",
 
            Version = APP_VERSION,
 
            Comments = "Desert Paint Lab paint reaction recorder for A Tale in the Desert",
 
            Authors = new string [] { "Tess Snider", "Jason Maltzen" }
 
        };
 
        //aboutDialog.Website = "http://www.google.com/";
 
        aboutDialog.Run();
 
        aboutDialog.Destroy();
 
    }
 

	
 
    protected virtual void OnMenuExit(object sender, System.EventArgs e)
 
    {
 
        if (ConfirmedExit())
 
        {
 
            Application.Quit();
 
        }
 
    }
 

	
 
    protected virtual void OnExportToPracticalPaint(object sender, System.EventArgs e)
 
    {
 
        FileChooserDialog fileDialog =
 
            new FileChooserDialog("Select destination file.",
 
                    this, FileChooserAction.Save,
 
                    Gtk.Stock.Cancel, ResponseType.Cancel,
 
                    Gtk.Stock.Save, ResponseType.Accept);
 
        ResponseType resp = (ResponseType)fileDialog.Run();
 
        if (resp == ResponseType.Accept)
 
        {
 
            string fileName = fileDialog.Filename;
...
 
@@ -702,75 +704,76 @@ public partial class MainWindow : Gtk.Wi
 
        if (simulatorView.Visible == false)
 
        {
 
            simulatorView.ResizeChildren();
 
            simulatorView.CheckResize();
 
            contentContainer.Add(simulatorView);
 
            simulatorView.Show();
 
        }
 
        CheckResize();
 
        // TODO: enable/disable menu options based on view
 
        NewProfileAction.Sensitive = true;
 
        OpenProfileAction.Sensitive = true;
 
        ImportProfileAction.Sensitive = true;
 
    }
 

	
 
    protected void ShowPreferencesDialog()
 
    {
 
        int detectedScreenWidth;
 
        int detectedScreenHeight;
 
        rootWindow.GetSize(out detectedScreenWidth, out detectedScreenHeight);
 
        int screenWidth = detectedScreenWidth;
 
        int screenHeight = detectedScreenHeight;
 
        int pixelMultiplier = 1;
 
        int interfaceSizeIndex = (int)(InterfaceSize.Small);
 

	
 
        DesertPaintLab.AppSettings.Get("ScreenWidth", out screenWidth);
 
        DesertPaintLab.AppSettings.Get("ScreenHeight", out screenHeight);
 
        DesertPaintLab.AppSettings.Get("PixelMultiplier", out pixelMultiplier);
 
        DesertPaintLab.AppSettings.Get("InterfaceSize", out interfaceSizeIndex);
 
        AppSettings.Get("ScreenWidth", out screenWidth);
 
        AppSettings.Get("ScreenHeight", out screenHeight);
 
        AppSettings.Get("PixelMultiplier", out pixelMultiplier);
 
        AppSettings.Get("InterfaceSize", out interfaceSizeIndex);
 
        InterfaceSize interfaceSize = (InterfaceSize)interfaceSizeIndex;
 

	
 
        ScreenCheckDialog screenCheckDialog = new ScreenCheckDialog();
 
        screenCheckDialog.DetectedScreenWidth = detectedScreenWidth;
 
        screenCheckDialog.DetectedScreenHeight = detectedScreenHeight;
 
        screenCheckDialog.ScreenWidth = screenWidth;
 
        screenCheckDialog.ScreenHeight = screenHeight;
 
        screenCheckDialog.GamePixelWidth = pixelMultiplier;
 
        screenCheckDialog.InterfaceSize = interfaceSize;
 
        ScreenCheckDialog screenCheckDialog = new ScreenCheckDialog {
 
            DetectedScreenWidth = detectedScreenWidth,
 
            DetectedScreenHeight = detectedScreenHeight,
 
            ScreenWidth = screenWidth,
 
            ScreenHeight = screenHeight,
 
            GamePixelWidth = pixelMultiplier,
 
            InterfaceSize = interfaceSize
 
        };
 

	
 
        ResponseType resp = (ResponseType)screenCheckDialog.Run();
 

	
 
        screenWidth = screenCheckDialog.ScreenWidth;
 
        screenHeight = screenCheckDialog.ScreenHeight;
 
        pixelMultiplier = screenCheckDialog.GamePixelWidth;
 
        screenWidth = Math.Max(640, screenCheckDialog.ScreenWidth); // don't support screen smaller than 640x480 no matter what the user says
 
        screenHeight = Math.Max(480, screenCheckDialog.ScreenHeight);
 
        pixelMultiplier = Math.Max(1, screenCheckDialog.GamePixelWidth); // Don't allow 0/negative pixel multiplier
 
        interfaceSize = screenCheckDialog.InterfaceSize;
 
        screenCheckDialog.Destroy();
 

	
 
        DesertPaintLab.AppSettings.Set("ScreenWidth", screenWidth);
 
        DesertPaintLab.AppSettings.Set("ScreenHeight", screenHeight);
 
        DesertPaintLab.AppSettings.Set("PixelMultiplier", pixelMultiplier);
 
        DesertPaintLab.AppSettings.Set("InterfaceSize", (int)interfaceSize);
 
        DesertPaintLab.AppSettings.Save();
 
        AppSettings.Set("ScreenWidth", screenWidth);
 
        AppSettings.Set("ScreenHeight", screenHeight);
 
        AppSettings.Set("PixelMultiplier", pixelMultiplier);
 
        AppSettings.Set("InterfaceSize", (int)interfaceSize);
 
        AppSettings.Save();
 

	
 
        screenBuffer = new Gdk.Pixbuf(Gdk.Colorspace.Rgb, false, 8, screenWidth, screenHeight);
 

	
 
        ReactionRecorder.Instance.SetPixelMultiplier(pixelMultiplier);
 
        ReactionRecorder.Instance.SetInterfaceSize(interfaceSize);
 
    }
 

	
 
    protected void OnPreferences(object sender, EventArgs e)
 
    {
 
        ShowPreferencesDialog();
 

	
 
        int screenWidth = 1920;
 
        int screenHeight = 1080;
 
        int pixelMultiplier = 1;
 
        int interfaceSizeIndex = (int)(InterfaceSize.Small);
 

	
 
        DesertPaintLab.AppSettings.Get("ScreenWidth", out screenWidth);
 
        DesertPaintLab.AppSettings.Get("ScreenHeight", out screenHeight);
 
        DesertPaintLab.AppSettings.Get("PixelMultiplier", out pixelMultiplier);
 
        DesertPaintLab.AppSettings.Get("InterfaceSize", out interfaceSizeIndex);
 
        AppSettings.Get("ScreenWidth", out screenWidth);
 
        AppSettings.Get("ScreenHeight", out screenHeight);
 
        AppSettings.Get("PixelMultiplier", out pixelMultiplier);
 
        AppSettings.Get("InterfaceSize", out interfaceSizeIndex);
 

	
 
        captureView.ScreenBuffer = screenBuffer;
 
    }
 
}
0 comments (0 inline, 0 general)