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
...
 
@@ -18,39 +18,39 @@
 
 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;
 
        }
 
    }
 

	
...
 
@@ -95,38 +95,38 @@ public partial class MainWindow : Gtk.Wi
 
                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;
...
 
@@ -247,34 +247,35 @@ public partial class MainWindow : Gtk.Wi
 
                    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
 
        {
...
 
@@ -392,72 +393,73 @@ public partial class MainWindow : Gtk.Wi
 
            }
 
            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 =
...
 
@@ -710,67 +712,68 @@ public partial class MainWindow : Gtk.Wi
 
        // 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)